159 std::vector<SmallVector<LetRecord, 4>> LetStack;
160 std::map<std::string, std::unique_ptr<MultiClass>> MultiClasses;
161 std::map<std::string, const RecTy *> TypeAliases;
165 std::vector<std::unique_ptr<ForeachLoop>> Loops;
174 std::unique_ptr<TGVarScope> CurScope;
190 bool NoWarnOnUnusedTemplateArgs =
false;
191 bool TrackReferenceLocs =
false;
195 const bool NoWarnOnUnusedTemplateArgs =
false,
196 const bool TrackReferenceLocs =
false)
197 : Lex(SM, Macros), CurMultiClass(nullptr), Records(records),
198 NoWarnOnUnusedTemplateArgs(NoWarnOnUnusedTemplateArgs),
199 TrackReferenceLocs(TrackReferenceLocs) {}
212 CurScope = std::make_unique<TGVarScope>(std::move(CurScope));
216 return CurScope.get();
219 CurScope = std::make_unique<TGVarScope>(std::move(CurScope), Rec);
220 return CurScope.get();
223 CurScope = std::make_unique<TGVarScope>(std::move(CurScope),
Loop);
224 return CurScope.get();
227 CurScope = std::make_unique<TGVarScope>(std::move(CurScope), Multiclass);
228 return CurScope.get();
231 assert(ExpectedStackTop == CurScope.get() &&
232 "Mismatched pushes and pops of local variable scopes");
233 CurScope = CurScope->extractParent();
238 const Record *FromRec =
nullptr);
253 std::vector<RecordsEntry> *Dest,
SMLoc *
Loc =
nullptr);
254 bool resolve(
const std::vector<RecordsEntry> &Source, SubstStack &Substs,
255 bool Final, std::vector<RecordsEntry> *Dest,
257 bool addDefOne(std::unique_ptr<Record> Rec);
259 using ArgValueHandler = std::function<void(
const Init *,
const Init *)>;
260 bool resolveArguments(
262 ArgValueHandler ArgValueHandler = [](
const Init *,
const Init *) {});
263 bool resolveArgumentsOfClass(MapResolver &R,
const Record *Rec,
266 bool resolveArgumentsOfMultiClass(SubstStack &Substs, MultiClass *MC,
268 const Init *DefmName, SMLoc Loc);
272 bool ParseObjectList();
275 bool ParseMultiClass();
280 bool ParseDefvar(Record *CurRec =
nullptr);
281 bool ParseDump(Record *CurRec =
nullptr);
284 bool ParseIfBody(StringRef Kind);
285 bool ParseAssert(Record *CurRec =
nullptr);
286 bool ParseTopLevelLet();
287 LetModeAndName ParseLetModeAndName();
288 void ParseLetList(SmallVectorImpl<LetRecord> &Result);
290 bool ParseObjectBody(Record *CurRec);
291 bool ParseBody(Record *CurRec);
292 bool ParseBodyItem(Record *CurRec);
294 bool ParseTemplateArgList(Record *CurRec);
295 bool ParseDeclaration(Record *CurRec,
bool ParsingTemplateArgs);
296 const VarInit *ParseForeachDeclaration(
const Init *&ForeachListValue);
298 ClassReference ParseClassReference(Record *CurRec,
bool isDefm);
299 MultiClassReference ParseMultiClassReference();
301 const Init *ParseIDValue(Record *CurRec,
const StringInit *Name,
302 SMRange NameLoc, IDParseMode
Mode = ParseValueMode);
303 const Init *ParseSimpleValue(Record *CurRec,
const RecTy *ItemType =
nullptr,
304 IDParseMode
Mode = ParseValueMode);
305 const Init *ParseValue(Record *CurRec,
const RecTy *ItemType =
nullptr,
306 IDParseMode
Mode = ParseValueMode);
307 void ParseValueList(SmallVectorImpl<const Init *> &Result, Record *CurRec,
308 const RecTy *ItemType =
nullptr);
309 bool ParseTemplateArgValueList(SmallVectorImpl<const ArgumentInit *> &Result,
310 SmallVectorImpl<SMLoc> &ArgLocs,
311 Record *CurRec,
const Record *ArgsRec);
312 void ParseDagArgList(
313 SmallVectorImpl<std::pair<const Init *, const StringInit *>> &Result,
315 bool ParseOptionalRangeList(SmallVectorImpl<unsigned> &Ranges);
316 const TypedInit *ParseSliceElement(Record *CurRec);
317 const TypedInit *ParseSliceElements(Record *CurRec,
bool Single =
false);
318 void ParseRangeList(SmallVectorImpl<unsigned> &Result);
319 bool ParseRangePiece(SmallVectorImpl<unsigned> &Ranges,
320 const TypedInit *FirstItem =
nullptr);
321 const RecTy *ParseType();
322 const Init *ParseOperation(Record *CurRec,
const RecTy *ItemType);
323 const Init *ParseOperationSubstr(Record *CurRec,
const RecTy *ItemType);
324 const Init *ParseOperationFind(Record *CurRec,
const RecTy *ItemType);
325 const Init *ParseOperationListComprehension(Record *CurRec,
326 const RecTy *ItemType);
327 const Init *ParseOperationCond(Record *CurRec,
const RecTy *ItemType);
328 const Init *ParseOperationSwitch(Record *CurRec,
const RecTy *ItemType);
330 const Twine &ErrCtx);
331 const RecTy *ParseOperatorType();
332 const Init *ParseObjectName();
333 const Record *ParseClassID();
334 MultiClass *ParseMultiClassID();
335 bool ApplyLetStack(Record *CurRec);
336 bool ApplyLetStack(RecordsEntry &Entry);
337 bool CheckTemplateArgValues(SmallVectorImpl<const ArgumentInit *> &
Values,
339 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
std::unique_ptr< Record > Rec