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) {}
211 return Lex.getDependencies();
215 CurScope = std::make_unique<TGVarScope>(std::move(CurScope));
219 return CurScope.get();
222 CurScope = std::make_unique<TGVarScope>(std::move(CurScope), Rec);
223 return CurScope.get();
226 CurScope = std::make_unique<TGVarScope>(std::move(CurScope),
Loop);
227 return CurScope.get();
230 CurScope = std::make_unique<TGVarScope>(std::move(CurScope), Multiclass);
231 return CurScope.get();
234 assert(ExpectedStackTop == CurScope.get() &&
235 "Mismatched pushes and pops of local variable scopes");
236 CurScope = CurScope->extractParent();
241 const Record *FromRec =
nullptr);
247 bool AllowSelfAssignment =
false,
bool OverrideDefLoc =
true,
258 std::vector<RecordsEntry> *Dest,
SMLoc *
Loc =
nullptr);
259 bool resolve(
const std::vector<RecordsEntry> &Source, SubstStack &Substs,
260 bool Final, std::vector<RecordsEntry> *Dest,
262 bool addDefOne(std::unique_ptr<Record> Rec);
264 using ArgValueHandler = std::function<void(
const Init *,
const Init *)>;
265 bool resolveArguments(
267 ArgValueHandler ArgValueHandler = [](
const Init *,
const Init *) {});
268 bool resolveArgumentsOfClass(MapResolver &R,
const Record *Rec,
271 bool resolveArgumentsOfMultiClass(SubstStack &Substs, MultiClass *MC,
273 const Init *DefmName, SMLoc Loc);
277 bool ParseObjectList(MultiClass *MC =
nullptr);
278 bool ParseObject(MultiClass *MC);
280 bool ParseMultiClass();
281 bool ParseDefm(MultiClass *CurMultiClass);
282 bool ParseDef(MultiClass *CurMultiClass);
285 bool ParseDefvar(Record *CurRec =
nullptr);
286 bool ParseDump(MultiClass *CurMultiClass, Record *CurRec =
nullptr);
287 bool ParseForeach(MultiClass *CurMultiClass);
288 bool ParseIf(MultiClass *CurMultiClass);
289 bool ParseIfBody(MultiClass *CurMultiClass, StringRef Kind);
290 bool ParseAssert(MultiClass *CurMultiClass, Record *CurRec =
nullptr);
291 bool ParseTopLevelLet(MultiClass *CurMultiClass);
292 LetModeAndName ParseLetModeAndName();
293 void ParseLetList(SmallVectorImpl<LetRecord> &Result);
295 bool ParseObjectBody(Record *CurRec);
296 bool ParseBody(Record *CurRec);
297 bool ParseBodyItem(Record *CurRec);
299 bool ParseTemplateArgList(Record *CurRec);
300 const Init *ParseDeclaration(Record *CurRec,
bool ParsingTemplateArgs);
301 const VarInit *ParseForeachDeclaration(
const Init *&ForeachListValue);
303 SubClassReference ParseSubClassReference(Record *CurRec,
bool isDefm);
304 SubMultiClassReference ParseSubMultiClassReference(MultiClass *CurMC);
306 const Init *ParseIDValue(Record *CurRec,
const StringInit *Name,
307 SMRange NameLoc, IDParseMode
Mode = ParseValueMode);
308 const Init *ParseSimpleValue(Record *CurRec,
const RecTy *ItemType =
nullptr,
309 IDParseMode
Mode = ParseValueMode);
310 const Init *ParseValue(Record *CurRec,
const RecTy *ItemType =
nullptr,
311 IDParseMode
Mode = ParseValueMode);
312 void ParseValueList(SmallVectorImpl<const Init *> &Result, Record *CurRec,
313 const RecTy *ItemType =
nullptr);
314 bool ParseTemplateArgValueList(SmallVectorImpl<const ArgumentInit *> &Result,
315 SmallVectorImpl<SMLoc> &ArgLocs,
316 Record *CurRec,
const Record *ArgsRec);
317 void ParseDagArgList(
318 SmallVectorImpl<std::pair<const Init *, const StringInit *>> &Result,
320 bool ParseOptionalRangeList(SmallVectorImpl<unsigned> &Ranges);
321 const TypedInit *ParseSliceElement(Record *CurRec);
322 const TypedInit *ParseSliceElements(Record *CurRec,
bool Single =
false);
323 void ParseRangeList(SmallVectorImpl<unsigned> &Result);
324 bool ParseRangePiece(SmallVectorImpl<unsigned> &Ranges,
325 const TypedInit *FirstItem =
nullptr);
326 const RecTy *ParseType();
327 const Init *ParseOperation(Record *CurRec,
const RecTy *ItemType);
328 const Init *ParseOperationSubstr(Record *CurRec,
const RecTy *ItemType);
329 const Init *ParseOperationFind(Record *CurRec,
const RecTy *ItemType);
330 const Init *ParseOperationListComprehension(Record *CurRec,
331 const RecTy *ItemType);
332 const Init *ParseOperationCond(Record *CurRec,
const RecTy *ItemType);
333 const Init *ParseOperationSwitch(Record *CurRec,
const RecTy *ItemType);
335 const Twine &ErrCtx);
336 const RecTy *ParseOperatorType();
337 const Init *ParseObjectName(MultiClass *CurMultiClass);
338 const Record *ParseClassID();
339 MultiClass *ParseMultiClassID();
340 bool ApplyLetStack(Record *CurRec);
341 bool ApplyLetStack(RecordsEntry &Entry);
342 bool CheckTemplateArgValues(SmallVectorImpl<const ArgumentInit *> &
Values,
344 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