142  std::vector<SmallVector<LetRecord, 4>> LetStack;
 
  143  std::map<std::string, std::unique_ptr<MultiClass>> MultiClasses;
 
  144  std::map<std::string, const RecTy *> TypeAliases;
 
  148  std::vector<std::unique_ptr<ForeachLoop>> Loops;
 
  157  std::unique_ptr<TGVarScope> CurScope;
 
  173  bool NoWarnOnUnusedTemplateArgs = 
false;
 
  174  bool TrackReferenceLocs = 
false;
 
  178           const bool NoWarnOnUnusedTemplateArgs = 
false,
 
  179           const bool TrackReferenceLocs = 
false)
 
  180      : Lex(SM, Macros), CurMultiClass(nullptr), Records(records),
 
  181        NoWarnOnUnusedTemplateArgs(NoWarnOnUnusedTemplateArgs),
 
  182        TrackReferenceLocs(TrackReferenceLocs) {}
 
 
  194    return Lex.getDependencies();
 
 
  198    CurScope = std::make_unique<TGVarScope>(std::move(CurScope));
 
  202    return CurScope.get();
 
 
  205    CurScope = std::make_unique<TGVarScope>(std::move(CurScope), Rec);
 
  206    return CurScope.get();
 
 
  209    CurScope = std::make_unique<TGVarScope>(std::move(CurScope), 
Loop);
 
  210    return CurScope.get();
 
 
  213    CurScope = std::make_unique<TGVarScope>(std::move(CurScope), Multiclass);
 
  214    return CurScope.get();
 
 
  217    assert(ExpectedStackTop == CurScope.get() &&
 
  218           "Mismatched pushes and pops of local variable scopes");
 
  219    CurScope = CurScope->extractParent();
 
 
  229                bool AllowSelfAssignment = 
false, 
bool OverrideDefLoc = 
true);
 
  239               std::vector<RecordsEntry> *Dest, 
SMLoc *
Loc = 
nullptr);
 
  240  bool resolve(
const std::vector<RecordsEntry> &Source, SubstStack &Substs,
 
  241               bool Final, std::vector<RecordsEntry> *Dest,
 
  243  bool addDefOne(std::unique_ptr<Record> Rec);
 
  245  using ArgValueHandler = std::function<void(
const Init *, 
const Init *)>;
 
  246  bool resolveArguments(
 
  248      ArgValueHandler ArgValueHandler = [](
const Init *, 
const Init *) {});
 
  249  bool resolveArgumentsOfClass(MapResolver &R, 
const Record *Rec,
 
  252  bool resolveArgumentsOfMultiClass(SubstStack &Substs, MultiClass *MC,
 
  254                                    const Init *DefmName, SMLoc Loc);
 
  258  bool ParseObjectList(MultiClass *MC = 
nullptr);
 
  259  bool ParseObject(MultiClass *MC);
 
  261  bool ParseMultiClass();
 
  262  bool ParseDefm(MultiClass *CurMultiClass);
 
  263  bool ParseDef(MultiClass *CurMultiClass);
 
  266  bool ParseDefvar(Record *CurRec = 
nullptr);
 
  267  bool ParseDump(MultiClass *CurMultiClass, Record *CurRec = 
nullptr);
 
  268  bool ParseForeach(MultiClass *CurMultiClass);
 
  269  bool ParseIf(MultiClass *CurMultiClass);
 
  270  bool ParseIfBody(MultiClass *CurMultiClass, StringRef Kind);
 
  271  bool ParseAssert(MultiClass *CurMultiClass, Record *CurRec = 
nullptr);
 
  272  bool ParseTopLevelLet(MultiClass *CurMultiClass);
 
  273  void ParseLetList(SmallVectorImpl<LetRecord> &Result);
 
  275  bool ParseObjectBody(Record *CurRec);
 
  276  bool ParseBody(Record *CurRec);
 
  277  bool ParseBodyItem(Record *CurRec);
 
  279  bool ParseTemplateArgList(Record *CurRec);
 
  280  const Init *ParseDeclaration(Record *CurRec, 
bool ParsingTemplateArgs);
 
  281  const VarInit *ParseForeachDeclaration(
const Init *&ForeachListValue);
 
  283  SubClassReference ParseSubClassReference(Record *CurRec, 
bool isDefm);
 
  284  SubMultiClassReference ParseSubMultiClassReference(MultiClass *CurMC);
 
  286  const Init *ParseIDValue(Record *CurRec, 
const StringInit *Name,
 
  287                           SMRange NameLoc, IDParseMode 
Mode = ParseValueMode);
 
  288  const Init *ParseSimpleValue(Record *CurRec, 
const RecTy *ItemType = 
nullptr,
 
  289                               IDParseMode 
Mode = ParseValueMode);
 
  290  const Init *ParseValue(Record *CurRec, 
const RecTy *ItemType = 
nullptr,
 
  291                         IDParseMode 
Mode = ParseValueMode);
 
  292  void ParseValueList(SmallVectorImpl<const Init *> &Result, Record *CurRec,
 
  293                      const RecTy *ItemType = 
nullptr);
 
  294  bool ParseTemplateArgValueList(SmallVectorImpl<const ArgumentInit *> &Result,
 
  295                                 SmallVectorImpl<SMLoc> &ArgLocs,
 
  296                                 Record *CurRec, 
const Record *ArgsRec);
 
  297  void ParseDagArgList(
 
  298      SmallVectorImpl<std::pair<const Init *, const StringInit *>> &Result,
 
  300  bool ParseOptionalRangeList(SmallVectorImpl<unsigned> &Ranges);
 
  301  bool ParseOptionalBitList(SmallVectorImpl<unsigned> &Ranges);
 
  302  const TypedInit *ParseSliceElement(Record *CurRec);
 
  303  const TypedInit *ParseSliceElements(Record *CurRec, 
bool Single = 
false);
 
  304  void ParseRangeList(SmallVectorImpl<unsigned> &Result);
 
  305  bool ParseRangePiece(SmallVectorImpl<unsigned> &Ranges,
 
  306                       const TypedInit *FirstItem = 
nullptr);
 
  307  const RecTy *ParseType();
 
  308  const Init *ParseOperation(Record *CurRec, 
const RecTy *ItemType);
 
  309  const Init *ParseOperationSubstr(Record *CurRec, 
const RecTy *ItemType);
 
  310  const Init *ParseOperationFind(Record *CurRec, 
const RecTy *ItemType);
 
  311  const Init *ParseOperationForEachFilter(Record *CurRec,
 
  312                                          const RecTy *ItemType);
 
  313  const Init *ParseOperationCond(Record *CurRec, 
const RecTy *ItemType);
 
  314  const RecTy *ParseOperatorType();
 
  315  const Init *ParseObjectName(MultiClass *CurMultiClass);
 
  316  const Record *ParseClassID();
 
  317  MultiClass *ParseMultiClassID();
 
  318  bool ApplyLetStack(Record *CurRec);
 
  319  bool ApplyLetStack(RecordsEntry &Entry);
 
  320  bool CheckTemplateArgValues(SmallVectorImpl<const ArgumentInit *> &Values,
 
  322                              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