158 std::vector<SmallVector<LetRecord, 4>> LetStack;
159 std::map<std::string, std::unique_ptr<MultiClass>> MultiClasses;
160 std::map<std::string, const RecTy *> TypeAliases;
164 std::vector<std::unique_ptr<ForeachLoop>> Loops;
173 std::unique_ptr<TGVarScope> CurScope;
189 bool NoWarnOnUnusedTemplateArgs =
false;
190 bool TrackReferenceLocs =
false;
194 const bool NoWarnOnUnusedTemplateArgs =
false,
195 const bool TrackReferenceLocs =
false)
196 : Lex(
SM, Macros), CurMultiClass(nullptr), Records(records),
197 NoWarnOnUnusedTemplateArgs(NoWarnOnUnusedTemplateArgs),
198 TrackReferenceLocs(TrackReferenceLocs) {}
210 return Lex.getDependencies();
214 CurScope = std::make_unique<TGVarScope>(std::move(CurScope));
218 return CurScope.get();
221 CurScope = std::make_unique<TGVarScope>(std::move(CurScope), Rec);
222 return CurScope.get();
225 CurScope = std::make_unique<TGVarScope>(std::move(CurScope),
Loop);
226 return CurScope.get();
229 CurScope = std::make_unique<TGVarScope>(std::move(CurScope), Multiclass);
230 return CurScope.get();
233 assert(ExpectedStackTop == CurScope.get() &&
234 "Mismatched pushes and pops of local variable scopes");
235 CurScope = CurScope->extractParent();
245 bool AllowSelfAssignment =
false,
bool OverrideDefLoc =
true,
256 std::vector<RecordsEntry> *Dest,
SMLoc *
Loc =
nullptr);
257 bool resolve(
const std::vector<RecordsEntry> &Source, SubstStack &Substs,
258 bool Final, std::vector<RecordsEntry> *Dest,
260 bool addDefOne(std::unique_ptr<Record> Rec);
262 using ArgValueHandler = std::function<void(
const Init *,
const Init *)>;
263 bool resolveArguments(
265 ArgValueHandler ArgValueHandler = [](
const Init *,
const Init *) {});
266 bool resolveArgumentsOfClass(MapResolver &R,
const Record *Rec,
269 bool resolveArgumentsOfMultiClass(SubstStack &Substs, MultiClass *MC,
271 const Init *DefmName, SMLoc Loc);
275 bool ParseObjectList(MultiClass *MC =
nullptr);
276 bool ParseObject(MultiClass *MC);
278 bool ParseMultiClass();
279 bool ParseDefm(MultiClass *CurMultiClass);
280 bool ParseDef(MultiClass *CurMultiClass);
283 bool ParseDefvar(Record *CurRec =
nullptr);
284 bool ParseDump(MultiClass *CurMultiClass, Record *CurRec =
nullptr);
285 bool ParseForeach(MultiClass *CurMultiClass);
286 bool ParseIf(MultiClass *CurMultiClass);
287 bool ParseIfBody(MultiClass *CurMultiClass, StringRef Kind);
288 bool ParseAssert(MultiClass *CurMultiClass, Record *CurRec =
nullptr);
289 bool ParseTopLevelLet(MultiClass *CurMultiClass);
290 LetModeAndName ParseLetModeAndName();
291 void ParseLetList(SmallVectorImpl<LetRecord> &Result);
293 bool ParseObjectBody(Record *CurRec);
294 bool ParseBody(Record *CurRec);
295 bool ParseBodyItem(Record *CurRec);
297 bool ParseTemplateArgList(Record *CurRec);
298 const Init *ParseDeclaration(Record *CurRec,
bool ParsingTemplateArgs);
299 const VarInit *ParseForeachDeclaration(
const Init *&ForeachListValue);
301 SubClassReference ParseSubClassReference(Record *CurRec,
bool isDefm);
302 SubMultiClassReference ParseSubMultiClassReference(MultiClass *CurMC);
304 const Init *ParseIDValue(Record *CurRec,
const StringInit *Name,
305 SMRange NameLoc, IDParseMode
Mode = ParseValueMode);
306 const Init *ParseSimpleValue(Record *CurRec,
const RecTy *ItemType =
nullptr,
307 IDParseMode
Mode = ParseValueMode);
308 const Init *ParseValue(Record *CurRec,
const RecTy *ItemType =
nullptr,
309 IDParseMode
Mode = ParseValueMode);
310 void ParseValueList(SmallVectorImpl<const Init *> &Result, Record *CurRec,
311 const RecTy *ItemType =
nullptr);
312 bool ParseTemplateArgValueList(SmallVectorImpl<const ArgumentInit *> &Result,
313 SmallVectorImpl<SMLoc> &ArgLocs,
314 Record *CurRec,
const Record *ArgsRec);
315 void ParseDagArgList(
316 SmallVectorImpl<std::pair<const Init *, const StringInit *>> &Result,
318 bool ParseOptionalRangeList(SmallVectorImpl<unsigned> &Ranges);
319 bool ParseOptionalBitList(SmallVectorImpl<unsigned> &Ranges);
320 const TypedInit *ParseSliceElement(Record *CurRec);
321 const TypedInit *ParseSliceElements(Record *CurRec,
bool Single =
false);
322 void ParseRangeList(SmallVectorImpl<unsigned> &Result);
323 bool ParseRangePiece(SmallVectorImpl<unsigned> &Ranges,
324 const TypedInit *FirstItem =
nullptr);
325 const RecTy *ParseType();
326 const Init *ParseOperation(Record *CurRec,
const RecTy *ItemType);
327 const Init *ParseOperationSubstr(Record *CurRec,
const RecTy *ItemType);
328 const Init *ParseOperationFind(Record *CurRec,
const RecTy *ItemType);
329 const Init *ParseOperationForEachFilter(Record *CurRec,
330 const RecTy *ItemType);
331 const Init *ParseOperationCond(Record *CurRec,
const RecTy *ItemType);
332 const RecTy *ParseOperatorType();
333 const Init *ParseObjectName(MultiClass *CurMultiClass);
334 const Record *ParseClassID();
335 MultiClass *ParseMultiClassID();
336 bool ApplyLetStack(Record *CurRec);
337 bool ApplyLetStack(RecordsEntry &Entry);
338 bool CheckTemplateArgValues(SmallVectorImpl<const ArgumentInit *> &Values,
340 const Record *ArgsRec);
static cl::opt< RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode > Mode("regalloc-enable-advisor", cl::Hidden, cl::init(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Development, "development", "for training")))
RecordsEntry - Holds exactly one of a Record, ForeachLoop, or AssertionInfo.
std::unique_ptr< ForeachLoop > Loop
std::unique_ptr< Record::AssertionInfo > Assertion
std::unique_ptr< Record::DumpInfo > Dump