Home | History | Annotate | Download | only in TableGen
      1 //===- TGParser.cpp - Parser for TableGen Files ---------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // Implement the Parser for TableGen.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "TGParser.h"
     15 #include "llvm/ADT/SmallVector.h"
     16 #include "llvm/ADT/StringExtras.h"
     17 #include "llvm/Support/CommandLine.h"
     18 #include "llvm/TableGen/Record.h"
     19 #include <algorithm>
     20 #include <sstream>
     21 using namespace llvm;
     22 
     23 //===----------------------------------------------------------------------===//
     24 // Support Code for the Semantic Actions.
     25 //===----------------------------------------------------------------------===//
     26 
     27 namespace llvm {
     28 struct SubClassReference {
     29   SMRange RefRange;
     30   Record *Rec;
     31   std::vector<Init*> TemplateArgs;
     32   SubClassReference() : Rec(nullptr) {}
     33 
     34   bool isInvalid() const { return Rec == nullptr; }
     35 };
     36 
     37 struct SubMultiClassReference {
     38   SMRange RefRange;
     39   MultiClass *MC;
     40   std::vector<Init*> TemplateArgs;
     41   SubMultiClassReference() : MC(nullptr) {}
     42 
     43   bool isInvalid() const { return MC == nullptr; }
     44   void dump() const;
     45 };
     46 
     47 void SubMultiClassReference::dump() const {
     48   errs() << "Multiclass:\n";
     49 
     50   MC->dump();
     51 
     52   errs() << "Template args:\n";
     53   for (std::vector<Init *>::const_iterator i = TemplateArgs.begin(),
     54          iend = TemplateArgs.end();
     55        i != iend;
     56        ++i) {
     57     (*i)->dump();
     58   }
     59 }
     60 
     61 } // end namespace llvm
     62 
     63 bool TGParser::AddValue(Record *CurRec, SMLoc Loc, const RecordVal &RV) {
     64   if (!CurRec)
     65     CurRec = &CurMultiClass->Rec;
     66 
     67   if (RecordVal *ERV = CurRec->getValue(RV.getNameInit())) {
     68     // The value already exists in the class, treat this as a set.
     69     if (ERV->setValue(RV.getValue()))
     70       return Error(Loc, "New definition of '" + RV.getName() + "' of type '" +
     71                    RV.getType()->getAsString() + "' is incompatible with " +
     72                    "previous definition of type '" +
     73                    ERV->getType()->getAsString() + "'");
     74   } else {
     75     CurRec->addValue(RV);
     76   }
     77   return false;
     78 }
     79 
     80 /// SetValue -
     81 /// Return true on error, false on success.
     82 bool TGParser::SetValue(Record *CurRec, SMLoc Loc, Init *ValName,
     83                         const std::vector<unsigned> &BitList, Init *V) {
     84   if (!V) return false;
     85 
     86   if (!CurRec) CurRec = &CurMultiClass->Rec;
     87 
     88   RecordVal *RV = CurRec->getValue(ValName);
     89   if (!RV)
     90     return Error(Loc, "Value '" + ValName->getAsUnquotedString()
     91                  + "' unknown!");
     92 
     93   // Do not allow assignments like 'X = X'.  This will just cause infinite loops
     94   // in the resolution machinery.
     95   if (BitList.empty())
     96     if (VarInit *VI = dyn_cast<VarInit>(V))
     97       if (VI->getNameInit() == ValName)
     98         return false;
     99 
    100   // If we are assigning to a subset of the bits in the value... then we must be
    101   // assigning to a field of BitsRecTy, which must have a BitsInit
    102   // initializer.
    103   //
    104   if (!BitList.empty()) {
    105     BitsInit *CurVal = dyn_cast<BitsInit>(RV->getValue());
    106     if (!CurVal)
    107       return Error(Loc, "Value '" + ValName->getAsUnquotedString()
    108                    + "' is not a bits type");
    109 
    110     // Convert the incoming value to a bits type of the appropriate size...
    111     Init *BI = V->convertInitializerTo(BitsRecTy::get(BitList.size()));
    112     if (!BI) {
    113       return Error(Loc, "Initializer is not compatible with bit range");
    114     }
    115 
    116     // We should have a BitsInit type now.
    117     BitsInit *BInit = dyn_cast<BitsInit>(BI);
    118     assert(BInit != nullptr);
    119 
    120     SmallVector<Init *, 16> NewBits(CurVal->getNumBits());
    121 
    122     // Loop over bits, assigning values as appropriate.
    123     for (unsigned i = 0, e = BitList.size(); i != e; ++i) {
    124       unsigned Bit = BitList[i];
    125       if (NewBits[Bit])
    126         return Error(Loc, "Cannot set bit #" + utostr(Bit) + " of value '" +
    127                      ValName->getAsUnquotedString() + "' more than once");
    128       NewBits[Bit] = BInit->getBit(i);
    129     }
    130 
    131     for (unsigned i = 0, e = CurVal->getNumBits(); i != e; ++i)
    132       if (!NewBits[i])
    133         NewBits[i] = CurVal->getBit(i);
    134 
    135     V = BitsInit::get(NewBits);
    136   }
    137 
    138   if (RV->setValue(V))
    139     return Error(Loc, "Value '" + ValName->getAsUnquotedString() + "' of type '"
    140                  + RV->getType()->getAsString() +
    141                  "' is incompatible with initializer '" + V->getAsString()
    142                  + "'");
    143   return false;
    144 }
    145 
    146 /// AddSubClass - Add SubClass as a subclass to CurRec, resolving its template
    147 /// args as SubClass's template arguments.
    148 bool TGParser::AddSubClass(Record *CurRec, SubClassReference &SubClass) {
    149   Record *SC = SubClass.Rec;
    150   // Add all of the values in the subclass into the current class.
    151   const std::vector<RecordVal> &Vals = SC->getValues();
    152   for (unsigned i = 0, e = Vals.size(); i != e; ++i)
    153     if (AddValue(CurRec, SubClass.RefRange.Start, Vals[i]))
    154       return true;
    155 
    156   const std::vector<Init *> &TArgs = SC->getTemplateArgs();
    157 
    158   // Ensure that an appropriate number of template arguments are specified.
    159   if (TArgs.size() < SubClass.TemplateArgs.size())
    160     return Error(SubClass.RefRange.Start,
    161                  "More template args specified than expected");
    162 
    163   // Loop over all of the template arguments, setting them to the specified
    164   // value or leaving them as the default if necessary.
    165   for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
    166     if (i < SubClass.TemplateArgs.size()) {
    167       // If a value is specified for this template arg, set it now.
    168       if (SetValue(CurRec, SubClass.RefRange.Start, TArgs[i],
    169                    std::vector<unsigned>(), SubClass.TemplateArgs[i]))
    170         return true;
    171 
    172       // Resolve it next.
    173       CurRec->resolveReferencesTo(CurRec->getValue(TArgs[i]));
    174 
    175       // Now remove it.
    176       CurRec->removeValue(TArgs[i]);
    177 
    178     } else if (!CurRec->getValue(TArgs[i])->getValue()->isComplete()) {
    179       return Error(SubClass.RefRange.Start,
    180                    "Value not specified for template argument #"
    181                    + utostr(i) + " (" + TArgs[i]->getAsUnquotedString()
    182                    + ") of subclass '" + SC->getNameInitAsString() + "'!");
    183     }
    184   }
    185 
    186   // Since everything went well, we can now set the "superclass" list for the
    187   // current record.
    188   const std::vector<Record*> &SCs = SC->getSuperClasses();
    189   ArrayRef<SMRange> SCRanges = SC->getSuperClassRanges();
    190   for (unsigned i = 0, e = SCs.size(); i != e; ++i) {
    191     if (CurRec->isSubClassOf(SCs[i]))
    192       return Error(SubClass.RefRange.Start,
    193                    "Already subclass of '" + SCs[i]->getName() + "'!\n");
    194     CurRec->addSuperClass(SCs[i], SCRanges[i]);
    195   }
    196 
    197   if (CurRec->isSubClassOf(SC))
    198     return Error(SubClass.RefRange.Start,
    199                  "Already subclass of '" + SC->getName() + "'!\n");
    200   CurRec->addSuperClass(SC, SubClass.RefRange);
    201   return false;
    202 }
    203 
    204 /// AddSubMultiClass - Add SubMultiClass as a subclass to
    205 /// CurMC, resolving its template args as SubMultiClass's
    206 /// template arguments.
    207 bool TGParser::AddSubMultiClass(MultiClass *CurMC,
    208                                 SubMultiClassReference &SubMultiClass) {
    209   MultiClass *SMC = SubMultiClass.MC;
    210   Record *CurRec = &CurMC->Rec;
    211 
    212   const std::vector<RecordVal> &MCVals = CurRec->getValues();
    213 
    214   // Add all of the values in the subclass into the current class.
    215   const std::vector<RecordVal> &SMCVals = SMC->Rec.getValues();
    216   for (unsigned i = 0, e = SMCVals.size(); i != e; ++i)
    217     if (AddValue(CurRec, SubMultiClass.RefRange.Start, SMCVals[i]))
    218       return true;
    219 
    220   int newDefStart = CurMC->DefPrototypes.size();
    221 
    222   // Add all of the defs in the subclass into the current multiclass.
    223   for (MultiClass::RecordVector::const_iterator i = SMC->DefPrototypes.begin(),
    224          iend = SMC->DefPrototypes.end();
    225        i != iend;
    226        ++i) {
    227     // Clone the def and add it to the current multiclass
    228     Record *NewDef = new Record(**i);
    229 
    230     // Add all of the values in the superclass into the current def.
    231     for (unsigned i = 0, e = MCVals.size(); i != e; ++i)
    232       if (AddValue(NewDef, SubMultiClass.RefRange.Start, MCVals[i]))
    233         return true;
    234 
    235     CurMC->DefPrototypes.push_back(NewDef);
    236   }
    237 
    238   const std::vector<Init *> &SMCTArgs = SMC->Rec.getTemplateArgs();
    239 
    240   // Ensure that an appropriate number of template arguments are
    241   // specified.
    242   if (SMCTArgs.size() < SubMultiClass.TemplateArgs.size())
    243     return Error(SubMultiClass.RefRange.Start,
    244                  "More template args specified than expected");
    245 
    246   // Loop over all of the template arguments, setting them to the specified
    247   // value or leaving them as the default if necessary.
    248   for (unsigned i = 0, e = SMCTArgs.size(); i != e; ++i) {
    249     if (i < SubMultiClass.TemplateArgs.size()) {
    250       // If a value is specified for this template arg, set it in the
    251       // superclass now.
    252       if (SetValue(CurRec, SubMultiClass.RefRange.Start, SMCTArgs[i],
    253                    std::vector<unsigned>(),
    254                    SubMultiClass.TemplateArgs[i]))
    255         return true;
    256 
    257       // Resolve it next.
    258       CurRec->resolveReferencesTo(CurRec->getValue(SMCTArgs[i]));
    259 
    260       // Now remove it.
    261       CurRec->removeValue(SMCTArgs[i]);
    262 
    263       // If a value is specified for this template arg, set it in the
    264       // new defs now.
    265       for (MultiClass::RecordVector::iterator j =
    266              CurMC->DefPrototypes.begin() + newDefStart,
    267              jend = CurMC->DefPrototypes.end();
    268            j != jend;
    269            ++j) {
    270         Record *Def = *j;
    271 
    272         if (SetValue(Def, SubMultiClass.RefRange.Start, SMCTArgs[i],
    273                      std::vector<unsigned>(),
    274                      SubMultiClass.TemplateArgs[i]))
    275           return true;
    276 
    277         // Resolve it next.
    278         Def->resolveReferencesTo(Def->getValue(SMCTArgs[i]));
    279 
    280         // Now remove it
    281         Def->removeValue(SMCTArgs[i]);
    282       }
    283     } else if (!CurRec->getValue(SMCTArgs[i])->getValue()->isComplete()) {
    284       return Error(SubMultiClass.RefRange.Start,
    285                    "Value not specified for template argument #"
    286                    + utostr(i) + " (" + SMCTArgs[i]->getAsUnquotedString()
    287                    + ") of subclass '" + SMC->Rec.getNameInitAsString() + "'!");
    288     }
    289   }
    290 
    291   return false;
    292 }
    293 
    294 /// ProcessForeachDefs - Given a record, apply all of the variable
    295 /// values in all surrounding foreach loops, creating new records for
    296 /// each combination of values.
    297 bool TGParser::ProcessForeachDefs(Record *CurRec, SMLoc Loc) {
    298   if (Loops.empty())
    299     return false;
    300 
    301   // We want to instantiate a new copy of CurRec for each combination
    302   // of nested loop iterator values.  We don't want top instantiate
    303   // any copies until we have values for each loop iterator.
    304   IterSet IterVals;
    305   return ProcessForeachDefs(CurRec, Loc, IterVals);
    306 }
    307 
    308 /// ProcessForeachDefs - Given a record, a loop and a loop iterator,
    309 /// apply each of the variable values in this loop and then process
    310 /// subloops.
    311 bool TGParser::ProcessForeachDefs(Record *CurRec, SMLoc Loc, IterSet &IterVals){
    312   // Recursively build a tuple of iterator values.
    313   if (IterVals.size() != Loops.size()) {
    314     assert(IterVals.size() < Loops.size());
    315     ForeachLoop &CurLoop = Loops[IterVals.size()];
    316     ListInit *List = dyn_cast<ListInit>(CurLoop.ListValue);
    317     if (!List) {
    318       Error(Loc, "Loop list is not a list");
    319       return true;
    320     }
    321 
    322     // Process each value.
    323     for (int64_t i = 0; i < List->getSize(); ++i) {
    324       Init *ItemVal = List->resolveListElementReference(*CurRec, nullptr, i);
    325       IterVals.push_back(IterRecord(CurLoop.IterVar, ItemVal));
    326       if (ProcessForeachDefs(CurRec, Loc, IterVals))
    327         return true;
    328       IterVals.pop_back();
    329     }
    330     return false;
    331   }
    332 
    333   // This is the bottom of the recursion. We have all of the iterator values
    334   // for this point in the iteration space.  Instantiate a new record to
    335   // reflect this combination of values.
    336   Record *IterRec = new Record(*CurRec);
    337 
    338   // Set the iterator values now.
    339   for (unsigned i = 0, e = IterVals.size(); i != e; ++i) {
    340     VarInit *IterVar = IterVals[i].IterVar;
    341     TypedInit *IVal = dyn_cast<TypedInit>(IterVals[i].IterValue);
    342     if (!IVal) {
    343       Error(Loc, "foreach iterator value is untyped");
    344       return true;
    345     }
    346 
    347     IterRec->addValue(RecordVal(IterVar->getName(), IVal->getType(), false));
    348 
    349     if (SetValue(IterRec, Loc, IterVar->getName(),
    350                  std::vector<unsigned>(), IVal)) {
    351       Error(Loc, "when instantiating this def");
    352       return true;
    353     }
    354 
    355     // Resolve it next.
    356     IterRec->resolveReferencesTo(IterRec->getValue(IterVar->getName()));
    357 
    358     // Remove it.
    359     IterRec->removeValue(IterVar->getName());
    360   }
    361 
    362   if (Records.getDef(IterRec->getNameInitAsString())) {
    363     // If this record is anonymous, it's no problem, just generate a new name
    364     if (IterRec->isAnonymous())
    365       IterRec->setName(GetNewAnonymousName());
    366     else {
    367       Error(Loc, "def already exists: " + IterRec->getNameInitAsString());
    368       return true;
    369     }
    370   }
    371 
    372   Records.addDef(IterRec);
    373   IterRec->resolveReferences();
    374   return false;
    375 }
    376 
    377 //===----------------------------------------------------------------------===//
    378 // Parser Code
    379 //===----------------------------------------------------------------------===//
    380 
    381 /// isObjectStart - Return true if this is a valid first token for an Object.
    382 static bool isObjectStart(tgtok::TokKind K) {
    383   return K == tgtok::Class || K == tgtok::Def ||
    384          K == tgtok::Defm || K == tgtok::Let ||
    385          K == tgtok::MultiClass || K == tgtok::Foreach;
    386 }
    387 
    388 /// GetNewAnonymousName - Generate a unique anonymous name that can be used as
    389 /// an identifier.
    390 std::string TGParser::GetNewAnonymousName() {
    391   unsigned Tmp = AnonCounter++; // MSVC2012 ICEs without this.
    392   return "anonymous_" + utostr(Tmp);
    393 }
    394 
    395 /// ParseObjectName - If an object name is specified, return it.  Otherwise,
    396 /// return 0.
    397 ///   ObjectName ::= Value [ '#' Value ]*
    398 ///   ObjectName ::= /*empty*/
    399 ///
    400 Init *TGParser::ParseObjectName(MultiClass *CurMultiClass) {
    401   switch (Lex.getCode()) {
    402   case tgtok::colon:
    403   case tgtok::semi:
    404   case tgtok::l_brace:
    405     // These are all of the tokens that can begin an object body.
    406     // Some of these can also begin values but we disallow those cases
    407     // because they are unlikely to be useful.
    408     return nullptr;
    409   default:
    410     break;
    411   }
    412 
    413   Record *CurRec = nullptr;
    414   if (CurMultiClass)
    415     CurRec = &CurMultiClass->Rec;
    416 
    417   RecTy *Type = nullptr;
    418   if (CurRec) {
    419     const TypedInit *CurRecName = dyn_cast<TypedInit>(CurRec->getNameInit());
    420     if (!CurRecName) {
    421       TokError("Record name is not typed!");
    422       return nullptr;
    423     }
    424     Type = CurRecName->getType();
    425   }
    426 
    427   return ParseValue(CurRec, Type, ParseNameMode);
    428 }
    429 
    430 /// ParseClassID - Parse and resolve a reference to a class name.  This returns
    431 /// null on error.
    432 ///
    433 ///    ClassID ::= ID
    434 ///
    435 Record *TGParser::ParseClassID() {
    436   if (Lex.getCode() != tgtok::Id) {
    437     TokError("expected name for ClassID");
    438     return nullptr;
    439   }
    440 
    441   Record *Result = Records.getClass(Lex.getCurStrVal());
    442   if (!Result)
    443     TokError("Couldn't find class '" + Lex.getCurStrVal() + "'");
    444 
    445   Lex.Lex();
    446   return Result;
    447 }
    448 
    449 /// ParseMultiClassID - Parse and resolve a reference to a multiclass name.
    450 /// This returns null on error.
    451 ///
    452 ///    MultiClassID ::= ID
    453 ///
    454 MultiClass *TGParser::ParseMultiClassID() {
    455   if (Lex.getCode() != tgtok::Id) {
    456     TokError("expected name for MultiClassID");
    457     return nullptr;
    458   }
    459 
    460   MultiClass *Result = MultiClasses[Lex.getCurStrVal()];
    461   if (!Result)
    462     TokError("Couldn't find multiclass '" + Lex.getCurStrVal() + "'");
    463 
    464   Lex.Lex();
    465   return Result;
    466 }
    467 
    468 /// ParseSubClassReference - Parse a reference to a subclass or to a templated
    469 /// subclass.  This returns a SubClassRefTy with a null Record* on error.
    470 ///
    471 ///  SubClassRef ::= ClassID
    472 ///  SubClassRef ::= ClassID '<' ValueList '>'
    473 ///
    474 SubClassReference TGParser::
    475 ParseSubClassReference(Record *CurRec, bool isDefm) {
    476   SubClassReference Result;
    477   Result.RefRange.Start = Lex.getLoc();
    478 
    479   if (isDefm) {
    480     if (MultiClass *MC = ParseMultiClassID())
    481       Result.Rec = &MC->Rec;
    482   } else {
    483     Result.Rec = ParseClassID();
    484   }
    485   if (!Result.Rec) return Result;
    486 
    487   // If there is no template arg list, we're done.
    488   if (Lex.getCode() != tgtok::less) {
    489     Result.RefRange.End = Lex.getLoc();
    490     return Result;
    491   }
    492   Lex.Lex();  // Eat the '<'
    493 
    494   if (Lex.getCode() == tgtok::greater) {
    495     TokError("subclass reference requires a non-empty list of template values");
    496     Result.Rec = nullptr;
    497     return Result;
    498   }
    499 
    500   Result.TemplateArgs = ParseValueList(CurRec, Result.Rec);
    501   if (Result.TemplateArgs.empty()) {
    502     Result.Rec = nullptr;   // Error parsing value list.
    503     return Result;
    504   }
    505 
    506   if (Lex.getCode() != tgtok::greater) {
    507     TokError("expected '>' in template value list");
    508     Result.Rec = nullptr;
    509     return Result;
    510   }
    511   Lex.Lex();
    512   Result.RefRange.End = Lex.getLoc();
    513 
    514   return Result;
    515 }
    516 
    517 /// ParseSubMultiClassReference - Parse a reference to a subclass or to a
    518 /// templated submulticlass.  This returns a SubMultiClassRefTy with a null
    519 /// Record* on error.
    520 ///
    521 ///  SubMultiClassRef ::= MultiClassID
    522 ///  SubMultiClassRef ::= MultiClassID '<' ValueList '>'
    523 ///
    524 SubMultiClassReference TGParser::
    525 ParseSubMultiClassReference(MultiClass *CurMC) {
    526   SubMultiClassReference Result;
    527   Result.RefRange.Start = Lex.getLoc();
    528 
    529   Result.MC = ParseMultiClassID();
    530   if (!Result.MC) return Result;
    531 
    532   // If there is no template arg list, we're done.
    533   if (Lex.getCode() != tgtok::less) {
    534     Result.RefRange.End = Lex.getLoc();
    535     return Result;
    536   }
    537   Lex.Lex();  // Eat the '<'
    538 
    539   if (Lex.getCode() == tgtok::greater) {
    540     TokError("subclass reference requires a non-empty list of template values");
    541     Result.MC = nullptr;
    542     return Result;
    543   }
    544 
    545   Result.TemplateArgs = ParseValueList(&CurMC->Rec, &Result.MC->Rec);
    546   if (Result.TemplateArgs.empty()) {
    547     Result.MC = nullptr;   // Error parsing value list.
    548     return Result;
    549   }
    550 
    551   if (Lex.getCode() != tgtok::greater) {
    552     TokError("expected '>' in template value list");
    553     Result.MC = nullptr;
    554     return Result;
    555   }
    556   Lex.Lex();
    557   Result.RefRange.End = Lex.getLoc();
    558 
    559   return Result;
    560 }
    561 
    562 /// ParseRangePiece - Parse a bit/value range.
    563 ///   RangePiece ::= INTVAL
    564 ///   RangePiece ::= INTVAL '-' INTVAL
    565 ///   RangePiece ::= INTVAL INTVAL
    566 bool TGParser::ParseRangePiece(std::vector<unsigned> &Ranges) {
    567   if (Lex.getCode() != tgtok::IntVal) {
    568     TokError("expected integer or bitrange");
    569     return true;
    570   }
    571   int64_t Start = Lex.getCurIntVal();
    572   int64_t End;
    573 
    574   if (Start < 0)
    575     return TokError("invalid range, cannot be negative");
    576 
    577   switch (Lex.Lex()) {  // eat first character.
    578   default:
    579     Ranges.push_back(Start);
    580     return false;
    581   case tgtok::minus:
    582     if (Lex.Lex() != tgtok::IntVal) {
    583       TokError("expected integer value as end of range");
    584       return true;
    585     }
    586     End = Lex.getCurIntVal();
    587     break;
    588   case tgtok::IntVal:
    589     End = -Lex.getCurIntVal();
    590     break;
    591   }
    592   if (End < 0)
    593     return TokError("invalid range, cannot be negative");
    594   Lex.Lex();
    595 
    596   // Add to the range.
    597   if (Start < End) {
    598     for (; Start <= End; ++Start)
    599       Ranges.push_back(Start);
    600   } else {
    601     for (; Start >= End; --Start)
    602       Ranges.push_back(Start);
    603   }
    604   return false;
    605 }
    606 
    607 /// ParseRangeList - Parse a list of scalars and ranges into scalar values.
    608 ///
    609 ///   RangeList ::= RangePiece (',' RangePiece)*
    610 ///
    611 std::vector<unsigned> TGParser::ParseRangeList() {
    612   std::vector<unsigned> Result;
    613 
    614   // Parse the first piece.
    615   if (ParseRangePiece(Result))
    616     return std::vector<unsigned>();
    617   while (Lex.getCode() == tgtok::comma) {
    618     Lex.Lex();  // Eat the comma.
    619 
    620     // Parse the next range piece.
    621     if (ParseRangePiece(Result))
    622       return std::vector<unsigned>();
    623   }
    624   return Result;
    625 }
    626 
    627 /// ParseOptionalRangeList - Parse either a range list in <>'s or nothing.
    628 ///   OptionalRangeList ::= '<' RangeList '>'
    629 ///   OptionalRangeList ::= /*empty*/
    630 bool TGParser::ParseOptionalRangeList(std::vector<unsigned> &Ranges) {
    631   if (Lex.getCode() != tgtok::less)
    632     return false;
    633 
    634   SMLoc StartLoc = Lex.getLoc();
    635   Lex.Lex(); // eat the '<'
    636 
    637   // Parse the range list.
    638   Ranges = ParseRangeList();
    639   if (Ranges.empty()) return true;
    640 
    641   if (Lex.getCode() != tgtok::greater) {
    642     TokError("expected '>' at end of range list");
    643     return Error(StartLoc, "to match this '<'");
    644   }
    645   Lex.Lex();   // eat the '>'.
    646   return false;
    647 }
    648 
    649 /// ParseOptionalBitList - Parse either a bit list in {}'s or nothing.
    650 ///   OptionalBitList ::= '{' RangeList '}'
    651 ///   OptionalBitList ::= /*empty*/
    652 bool TGParser::ParseOptionalBitList(std::vector<unsigned> &Ranges) {
    653   if (Lex.getCode() != tgtok::l_brace)
    654     return false;
    655 
    656   SMLoc StartLoc = Lex.getLoc();
    657   Lex.Lex(); // eat the '{'
    658 
    659   // Parse the range list.
    660   Ranges = ParseRangeList();
    661   if (Ranges.empty()) return true;
    662 
    663   if (Lex.getCode() != tgtok::r_brace) {
    664     TokError("expected '}' at end of bit list");
    665     return Error(StartLoc, "to match this '{'");
    666   }
    667   Lex.Lex();   // eat the '}'.
    668   return false;
    669 }
    670 
    671 
    672 /// ParseType - Parse and return a tblgen type.  This returns null on error.
    673 ///
    674 ///   Type ::= STRING                       // string type
    675 ///   Type ::= CODE                         // code type
    676 ///   Type ::= BIT                          // bit type
    677 ///   Type ::= BITS '<' INTVAL '>'          // bits<x> type
    678 ///   Type ::= INT                          // int type
    679 ///   Type ::= LIST '<' Type '>'            // list<x> type
    680 ///   Type ::= DAG                          // dag type
    681 ///   Type ::= ClassID                      // Record Type
    682 ///
    683 RecTy *TGParser::ParseType() {
    684   switch (Lex.getCode()) {
    685   default: TokError("Unknown token when expecting a type"); return nullptr;
    686   case tgtok::String: Lex.Lex(); return StringRecTy::get();
    687   case tgtok::Code:   Lex.Lex(); return StringRecTy::get();
    688   case tgtok::Bit:    Lex.Lex(); return BitRecTy::get();
    689   case tgtok::Int:    Lex.Lex(); return IntRecTy::get();
    690   case tgtok::Dag:    Lex.Lex(); return DagRecTy::get();
    691   case tgtok::Id:
    692     if (Record *R = ParseClassID()) return RecordRecTy::get(R);
    693     return nullptr;
    694   case tgtok::Bits: {
    695     if (Lex.Lex() != tgtok::less) { // Eat 'bits'
    696       TokError("expected '<' after bits type");
    697       return nullptr;
    698     }
    699     if (Lex.Lex() != tgtok::IntVal) {  // Eat '<'
    700       TokError("expected integer in bits<n> type");
    701       return nullptr;
    702     }
    703     uint64_t Val = Lex.getCurIntVal();
    704     if (Lex.Lex() != tgtok::greater) {  // Eat count.
    705       TokError("expected '>' at end of bits<n> type");
    706       return nullptr;
    707     }
    708     Lex.Lex();  // Eat '>'
    709     return BitsRecTy::get(Val);
    710   }
    711   case tgtok::List: {
    712     if (Lex.Lex() != tgtok::less) { // Eat 'bits'
    713       TokError("expected '<' after list type");
    714       return nullptr;
    715     }
    716     Lex.Lex();  // Eat '<'
    717     RecTy *SubType = ParseType();
    718     if (!SubType) return nullptr;
    719 
    720     if (Lex.getCode() != tgtok::greater) {
    721       TokError("expected '>' at end of list<ty> type");
    722       return nullptr;
    723     }
    724     Lex.Lex();  // Eat '>'
    725     return ListRecTy::get(SubType);
    726   }
    727   }
    728 }
    729 
    730 /// ParseIDValue - This is just like ParseIDValue above, but it assumes the ID
    731 /// has already been read.
    732 Init *TGParser::ParseIDValue(Record *CurRec,
    733                              const std::string &Name, SMLoc NameLoc,
    734                              IDParseMode Mode) {
    735   if (CurRec) {
    736     if (const RecordVal *RV = CurRec->getValue(Name))
    737       return VarInit::get(Name, RV->getType());
    738 
    739     Init *TemplateArgName = QualifyName(*CurRec, CurMultiClass, Name, ":");
    740 
    741     if (CurMultiClass)
    742       TemplateArgName = QualifyName(CurMultiClass->Rec, CurMultiClass, Name,
    743                                     "::");
    744 
    745     if (CurRec->isTemplateArg(TemplateArgName)) {
    746       const RecordVal *RV = CurRec->getValue(TemplateArgName);
    747       assert(RV && "Template arg doesn't exist??");
    748       return VarInit::get(TemplateArgName, RV->getType());
    749     }
    750   }
    751 
    752   if (CurMultiClass) {
    753     Init *MCName = QualifyName(CurMultiClass->Rec, CurMultiClass, Name,
    754                                "::");
    755 
    756     if (CurMultiClass->Rec.isTemplateArg(MCName)) {
    757       const RecordVal *RV = CurMultiClass->Rec.getValue(MCName);
    758       assert(RV && "Template arg doesn't exist??");
    759       return VarInit::get(MCName, RV->getType());
    760     }
    761   }
    762 
    763   // If this is in a foreach loop, make sure it's not a loop iterator
    764   for (LoopVector::iterator i = Loops.begin(), iend = Loops.end();
    765        i != iend;
    766        ++i) {
    767     VarInit *IterVar = dyn_cast<VarInit>(i->IterVar);
    768     if (IterVar && IterVar->getName() == Name)
    769       return IterVar;
    770   }
    771 
    772   if (Mode == ParseNameMode)
    773     return StringInit::get(Name);
    774 
    775   if (Record *D = Records.getDef(Name))
    776     return DefInit::get(D);
    777 
    778   if (Mode == ParseValueMode) {
    779     Error(NameLoc, "Variable not defined: '" + Name + "'");
    780     return nullptr;
    781   }
    782 
    783   return StringInit::get(Name);
    784 }
    785 
    786 /// ParseOperation - Parse an operator.  This returns null on error.
    787 ///
    788 /// Operation ::= XOperator ['<' Type '>'] '(' Args ')'
    789 ///
    790 Init *TGParser::ParseOperation(Record *CurRec, RecTy *ItemType) {
    791   switch (Lex.getCode()) {
    792   default:
    793     TokError("unknown operation");
    794     return nullptr;
    795   case tgtok::XHead:
    796   case tgtok::XTail:
    797   case tgtok::XEmpty:
    798   case tgtok::XCast: {  // Value ::= !unop '(' Value ')'
    799     UnOpInit::UnaryOp Code;
    800     RecTy *Type = nullptr;
    801 
    802     switch (Lex.getCode()) {
    803     default: llvm_unreachable("Unhandled code!");
    804     case tgtok::XCast:
    805       Lex.Lex();  // eat the operation
    806       Code = UnOpInit::CAST;
    807 
    808       Type = ParseOperatorType();
    809 
    810       if (!Type) {
    811         TokError("did not get type for unary operator");
    812         return nullptr;
    813       }
    814 
    815       break;
    816     case tgtok::XHead:
    817       Lex.Lex();  // eat the operation
    818       Code = UnOpInit::HEAD;
    819       break;
    820     case tgtok::XTail:
    821       Lex.Lex();  // eat the operation
    822       Code = UnOpInit::TAIL;
    823       break;
    824     case tgtok::XEmpty:
    825       Lex.Lex();  // eat the operation
    826       Code = UnOpInit::EMPTY;
    827       Type = IntRecTy::get();
    828       break;
    829     }
    830     if (Lex.getCode() != tgtok::l_paren) {
    831       TokError("expected '(' after unary operator");
    832       return nullptr;
    833     }
    834     Lex.Lex();  // eat the '('
    835 
    836     Init *LHS = ParseValue(CurRec);
    837     if (!LHS) return nullptr;
    838 
    839     if (Code == UnOpInit::HEAD
    840         || Code == UnOpInit::TAIL
    841         || Code == UnOpInit::EMPTY) {
    842       ListInit *LHSl = dyn_cast<ListInit>(LHS);
    843       StringInit *LHSs = dyn_cast<StringInit>(LHS);
    844       TypedInit *LHSt = dyn_cast<TypedInit>(LHS);
    845       if (!LHSl && !LHSs && !LHSt) {
    846         TokError("expected list or string type argument in unary operator");
    847         return nullptr;
    848       }
    849       if (LHSt) {
    850         ListRecTy *LType = dyn_cast<ListRecTy>(LHSt->getType());
    851         StringRecTy *SType = dyn_cast<StringRecTy>(LHSt->getType());
    852         if (!LType && !SType) {
    853           TokError("expected list or string type argument in unary operator");
    854           return nullptr;
    855         }
    856       }
    857 
    858       if (Code == UnOpInit::HEAD
    859           || Code == UnOpInit::TAIL) {
    860         if (!LHSl && !LHSt) {
    861           TokError("expected list type argument in unary operator");
    862           return nullptr;
    863         }
    864 
    865         if (LHSl && LHSl->getSize() == 0) {
    866           TokError("empty list argument in unary operator");
    867           return nullptr;
    868         }
    869         if (LHSl) {
    870           Init *Item = LHSl->getElement(0);
    871           TypedInit *Itemt = dyn_cast<TypedInit>(Item);
    872           if (!Itemt) {
    873             TokError("untyped list element in unary operator");
    874             return nullptr;
    875           }
    876           if (Code == UnOpInit::HEAD) {
    877             Type = Itemt->getType();
    878           } else {
    879             Type = ListRecTy::get(Itemt->getType());
    880           }
    881         } else {
    882           assert(LHSt && "expected list type argument in unary operator");
    883           ListRecTy *LType = dyn_cast<ListRecTy>(LHSt->getType());
    884           if (!LType) {
    885             TokError("expected list type argument in unary operator");
    886             return nullptr;
    887           }
    888           if (Code == UnOpInit::HEAD) {
    889             Type = LType->getElementType();
    890           } else {
    891             Type = LType;
    892           }
    893         }
    894       }
    895     }
    896 
    897     if (Lex.getCode() != tgtok::r_paren) {
    898       TokError("expected ')' in unary operator");
    899       return nullptr;
    900     }
    901     Lex.Lex();  // eat the ')'
    902     return (UnOpInit::get(Code, LHS, Type))->Fold(CurRec, CurMultiClass);
    903   }
    904 
    905   case tgtok::XConcat:
    906   case tgtok::XADD:
    907   case tgtok::XSRA:
    908   case tgtok::XSRL:
    909   case tgtok::XSHL:
    910   case tgtok::XEq:
    911   case tgtok::XListConcat:
    912   case tgtok::XStrConcat: {  // Value ::= !binop '(' Value ',' Value ')'
    913     tgtok::TokKind OpTok = Lex.getCode();
    914     SMLoc OpLoc = Lex.getLoc();
    915     Lex.Lex();  // eat the operation
    916 
    917     BinOpInit::BinaryOp Code;
    918     RecTy *Type = nullptr;
    919 
    920     switch (OpTok) {
    921     default: llvm_unreachable("Unhandled code!");
    922     case tgtok::XConcat: Code = BinOpInit::CONCAT;Type = DagRecTy::get(); break;
    923     case tgtok::XADD:    Code = BinOpInit::ADD;   Type = IntRecTy::get(); break;
    924     case tgtok::XSRA:    Code = BinOpInit::SRA;   Type = IntRecTy::get(); break;
    925     case tgtok::XSRL:    Code = BinOpInit::SRL;   Type = IntRecTy::get(); break;
    926     case tgtok::XSHL:    Code = BinOpInit::SHL;   Type = IntRecTy::get(); break;
    927     case tgtok::XEq:     Code = BinOpInit::EQ;    Type = BitRecTy::get(); break;
    928     case tgtok::XListConcat:
    929       Code = BinOpInit::LISTCONCAT;
    930       // We don't know the list type until we parse the first argument
    931       break;
    932     case tgtok::XStrConcat:
    933       Code = BinOpInit::STRCONCAT;
    934       Type = StringRecTy::get();
    935       break;
    936     }
    937 
    938     if (Lex.getCode() != tgtok::l_paren) {
    939       TokError("expected '(' after binary operator");
    940       return nullptr;
    941     }
    942     Lex.Lex();  // eat the '('
    943 
    944     SmallVector<Init*, 2> InitList;
    945 
    946     InitList.push_back(ParseValue(CurRec));
    947     if (!InitList.back()) return nullptr;
    948 
    949     while (Lex.getCode() == tgtok::comma) {
    950       Lex.Lex();  // eat the ','
    951 
    952       InitList.push_back(ParseValue(CurRec));
    953       if (!InitList.back()) return nullptr;
    954     }
    955 
    956     if (Lex.getCode() != tgtok::r_paren) {
    957       TokError("expected ')' in operator");
    958       return nullptr;
    959     }
    960     Lex.Lex();  // eat the ')'
    961 
    962     // If we are doing !listconcat, we should know the type by now
    963     if (OpTok == tgtok::XListConcat) {
    964       if (VarInit *Arg0 = dyn_cast<VarInit>(InitList[0]))
    965         Type = Arg0->getType();
    966       else if (ListInit *Arg0 = dyn_cast<ListInit>(InitList[0]))
    967         Type = Arg0->getType();
    968       else {
    969         InitList[0]->dump();
    970         Error(OpLoc, "expected a list");
    971         return nullptr;
    972       }
    973     }
    974 
    975     // We allow multiple operands to associative operators like !strconcat as
    976     // shorthand for nesting them.
    977     if (Code == BinOpInit::STRCONCAT || Code == BinOpInit::LISTCONCAT) {
    978       while (InitList.size() > 2) {
    979         Init *RHS = InitList.pop_back_val();
    980         RHS = (BinOpInit::get(Code, InitList.back(), RHS, Type))
    981                            ->Fold(CurRec, CurMultiClass);
    982         InitList.back() = RHS;
    983       }
    984     }
    985 
    986     if (InitList.size() == 2)
    987       return (BinOpInit::get(Code, InitList[0], InitList[1], Type))
    988         ->Fold(CurRec, CurMultiClass);
    989 
    990     Error(OpLoc, "expected two operands to operator");
    991     return nullptr;
    992   }
    993 
    994   case tgtok::XIf:
    995   case tgtok::XForEach:
    996   case tgtok::XSubst: {  // Value ::= !ternop '(' Value ',' Value ',' Value ')'
    997     TernOpInit::TernaryOp Code;
    998     RecTy *Type = nullptr;
    999 
   1000     tgtok::TokKind LexCode = Lex.getCode();
   1001     Lex.Lex();  // eat the operation
   1002     switch (LexCode) {
   1003     default: llvm_unreachable("Unhandled code!");
   1004     case tgtok::XIf:
   1005       Code = TernOpInit::IF;
   1006       break;
   1007     case tgtok::XForEach:
   1008       Code = TernOpInit::FOREACH;
   1009       break;
   1010     case tgtok::XSubst:
   1011       Code = TernOpInit::SUBST;
   1012       break;
   1013     }
   1014     if (Lex.getCode() != tgtok::l_paren) {
   1015       TokError("expected '(' after ternary operator");
   1016       return nullptr;
   1017     }
   1018     Lex.Lex();  // eat the '('
   1019 
   1020     Init *LHS = ParseValue(CurRec);
   1021     if (!LHS) return nullptr;
   1022 
   1023     if (Lex.getCode() != tgtok::comma) {
   1024       TokError("expected ',' in ternary operator");
   1025       return nullptr;
   1026     }
   1027     Lex.Lex();  // eat the ','
   1028 
   1029     Init *MHS = ParseValue(CurRec, ItemType);
   1030     if (!MHS)
   1031       return nullptr;
   1032 
   1033     if (Lex.getCode() != tgtok::comma) {
   1034       TokError("expected ',' in ternary operator");
   1035       return nullptr;
   1036     }
   1037     Lex.Lex();  // eat the ','
   1038 
   1039     Init *RHS = ParseValue(CurRec, ItemType);
   1040     if (!RHS)
   1041       return nullptr;
   1042 
   1043     if (Lex.getCode() != tgtok::r_paren) {
   1044       TokError("expected ')' in binary operator");
   1045       return nullptr;
   1046     }
   1047     Lex.Lex();  // eat the ')'
   1048 
   1049     switch (LexCode) {
   1050     default: llvm_unreachable("Unhandled code!");
   1051     case tgtok::XIf: {
   1052       RecTy *MHSTy = nullptr;
   1053       RecTy *RHSTy = nullptr;
   1054 
   1055       if (TypedInit *MHSt = dyn_cast<TypedInit>(MHS))
   1056         MHSTy = MHSt->getType();
   1057       if (BitsInit *MHSbits = dyn_cast<BitsInit>(MHS))
   1058         MHSTy = BitsRecTy::get(MHSbits->getNumBits());
   1059       if (isa<BitInit>(MHS))
   1060         MHSTy = BitRecTy::get();
   1061 
   1062       if (TypedInit *RHSt = dyn_cast<TypedInit>(RHS))
   1063         RHSTy = RHSt->getType();
   1064       if (BitsInit *RHSbits = dyn_cast<BitsInit>(RHS))
   1065         RHSTy = BitsRecTy::get(RHSbits->getNumBits());
   1066       if (isa<BitInit>(RHS))
   1067         RHSTy = BitRecTy::get();
   1068 
   1069       // For UnsetInit, it's typed from the other hand.
   1070       if (isa<UnsetInit>(MHS))
   1071         MHSTy = RHSTy;
   1072       if (isa<UnsetInit>(RHS))
   1073         RHSTy = MHSTy;
   1074 
   1075       if (!MHSTy || !RHSTy) {
   1076         TokError("could not get type for !if");
   1077         return nullptr;
   1078       }
   1079 
   1080       if (MHSTy->typeIsConvertibleTo(RHSTy)) {
   1081         Type = RHSTy;
   1082       } else if (RHSTy->typeIsConvertibleTo(MHSTy)) {
   1083         Type = MHSTy;
   1084       } else {
   1085         TokError("inconsistent types for !if");
   1086         return nullptr;
   1087       }
   1088       break;
   1089     }
   1090     case tgtok::XForEach: {
   1091       TypedInit *MHSt = dyn_cast<TypedInit>(MHS);
   1092       if (!MHSt) {
   1093         TokError("could not get type for !foreach");
   1094         return nullptr;
   1095       }
   1096       Type = MHSt->getType();
   1097       break;
   1098     }
   1099     case tgtok::XSubst: {
   1100       TypedInit *RHSt = dyn_cast<TypedInit>(RHS);
   1101       if (!RHSt) {
   1102         TokError("could not get type for !subst");
   1103         return nullptr;
   1104       }
   1105       Type = RHSt->getType();
   1106       break;
   1107     }
   1108     }
   1109     return (TernOpInit::get(Code, LHS, MHS, RHS, Type))->Fold(CurRec,
   1110                                                              CurMultiClass);
   1111   }
   1112   }
   1113 }
   1114 
   1115 /// ParseOperatorType - Parse a type for an operator.  This returns
   1116 /// null on error.
   1117 ///
   1118 /// OperatorType ::= '<' Type '>'
   1119 ///
   1120 RecTy *TGParser::ParseOperatorType() {
   1121   RecTy *Type = nullptr;
   1122 
   1123   if (Lex.getCode() != tgtok::less) {
   1124     TokError("expected type name for operator");
   1125     return nullptr;
   1126   }
   1127   Lex.Lex();  // eat the <
   1128 
   1129   Type = ParseType();
   1130 
   1131   if (!Type) {
   1132     TokError("expected type name for operator");
   1133     return nullptr;
   1134   }
   1135 
   1136   if (Lex.getCode() != tgtok::greater) {
   1137     TokError("expected type name for operator");
   1138     return nullptr;
   1139   }
   1140   Lex.Lex();  // eat the >
   1141 
   1142   return Type;
   1143 }
   1144 
   1145 
   1146 /// ParseSimpleValue - Parse a tblgen value.  This returns null on error.
   1147 ///
   1148 ///   SimpleValue ::= IDValue
   1149 ///   SimpleValue ::= INTVAL
   1150 ///   SimpleValue ::= STRVAL+
   1151 ///   SimpleValue ::= CODEFRAGMENT
   1152 ///   SimpleValue ::= '?'
   1153 ///   SimpleValue ::= '{' ValueList '}'
   1154 ///   SimpleValue ::= ID '<' ValueListNE '>'
   1155 ///   SimpleValue ::= '[' ValueList ']'
   1156 ///   SimpleValue ::= '(' IDValue DagArgList ')'
   1157 ///   SimpleValue ::= CONCATTOK '(' Value ',' Value ')'
   1158 ///   SimpleValue ::= ADDTOK '(' Value ',' Value ')'
   1159 ///   SimpleValue ::= SHLTOK '(' Value ',' Value ')'
   1160 ///   SimpleValue ::= SRATOK '(' Value ',' Value ')'
   1161 ///   SimpleValue ::= SRLTOK '(' Value ',' Value ')'
   1162 ///   SimpleValue ::= LISTCONCATTOK '(' Value ',' Value ')'
   1163 ///   SimpleValue ::= STRCONCATTOK '(' Value ',' Value ')'
   1164 ///
   1165 Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType,
   1166                                  IDParseMode Mode) {
   1167   Init *R = nullptr;
   1168   switch (Lex.getCode()) {
   1169   default: TokError("Unknown token when parsing a value"); break;
   1170   case tgtok::paste:
   1171     // This is a leading paste operation.  This is deprecated but
   1172     // still exists in some .td files.  Ignore it.
   1173     Lex.Lex();  // Skip '#'.
   1174     return ParseSimpleValue(CurRec, ItemType, Mode);
   1175   case tgtok::IntVal: R = IntInit::get(Lex.getCurIntVal()); Lex.Lex(); break;
   1176   case tgtok::StrVal: {
   1177     std::string Val = Lex.getCurStrVal();
   1178     Lex.Lex();
   1179 
   1180     // Handle multiple consecutive concatenated strings.
   1181     while (Lex.getCode() == tgtok::StrVal) {
   1182       Val += Lex.getCurStrVal();
   1183       Lex.Lex();
   1184     }
   1185 
   1186     R = StringInit::get(Val);
   1187     break;
   1188   }
   1189   case tgtok::CodeFragment:
   1190     R = StringInit::get(Lex.getCurStrVal());
   1191     Lex.Lex();
   1192     break;
   1193   case tgtok::question:
   1194     R = UnsetInit::get();
   1195     Lex.Lex();
   1196     break;
   1197   case tgtok::Id: {
   1198     SMLoc NameLoc = Lex.getLoc();
   1199     std::string Name = Lex.getCurStrVal();
   1200     if (Lex.Lex() != tgtok::less)  // consume the Id.
   1201       return ParseIDValue(CurRec, Name, NameLoc, Mode);    // Value ::= IDValue
   1202 
   1203     // Value ::= ID '<' ValueListNE '>'
   1204     if (Lex.Lex() == tgtok::greater) {
   1205       TokError("expected non-empty value list");
   1206       return nullptr;
   1207     }
   1208 
   1209     // This is a CLASS<initvalslist> expression.  This is supposed to synthesize
   1210     // a new anonymous definition, deriving from CLASS<initvalslist> with no
   1211     // body.
   1212     Record *Class = Records.getClass(Name);
   1213     if (!Class) {
   1214       Error(NameLoc, "Expected a class name, got '" + Name + "'");
   1215       return nullptr;
   1216     }
   1217 
   1218     std::vector<Init*> ValueList = ParseValueList(CurRec, Class);
   1219     if (ValueList.empty()) return nullptr;
   1220 
   1221     if (Lex.getCode() != tgtok::greater) {
   1222       TokError("expected '>' at end of value list");
   1223       return nullptr;
   1224     }
   1225     Lex.Lex();  // eat the '>'
   1226     SMLoc EndLoc = Lex.getLoc();
   1227 
   1228     // Create the new record, set it as CurRec temporarily.
   1229     Record *NewRec = new Record(GetNewAnonymousName(), NameLoc, Records,
   1230                                 /*IsAnonymous=*/true);
   1231     SubClassReference SCRef;
   1232     SCRef.RefRange = SMRange(NameLoc, EndLoc);
   1233     SCRef.Rec = Class;
   1234     SCRef.TemplateArgs = ValueList;
   1235     // Add info about the subclass to NewRec.
   1236     if (AddSubClass(NewRec, SCRef))
   1237       return nullptr;
   1238     if (!CurMultiClass) {
   1239       NewRec->resolveReferences();
   1240       Records.addDef(NewRec);
   1241     } else {
   1242       // Otherwise, we're inside a multiclass, add it to the multiclass.
   1243       CurMultiClass->DefPrototypes.push_back(NewRec);
   1244 
   1245       // Copy the template arguments for the multiclass into the def.
   1246       const std::vector<Init *> &TArgs =
   1247                                   CurMultiClass->Rec.getTemplateArgs();
   1248 
   1249       for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
   1250         const RecordVal *RV = CurMultiClass->Rec.getValue(TArgs[i]);
   1251         assert(RV && "Template arg doesn't exist?");
   1252         NewRec->addValue(*RV);
   1253       }
   1254 
   1255       // We can't return the prototype def here, instead return:
   1256       // !cast<ItemType>(!strconcat(NAME, AnonName)).
   1257       const RecordVal *MCNameRV = CurMultiClass->Rec.getValue("NAME");
   1258       assert(MCNameRV && "multiclass record must have a NAME");
   1259 
   1260       return UnOpInit::get(UnOpInit::CAST,
   1261                            BinOpInit::get(BinOpInit::STRCONCAT,
   1262                                           VarInit::get(MCNameRV->getName(),
   1263                                                        MCNameRV->getType()),
   1264                                           NewRec->getNameInit(),
   1265                                           StringRecTy::get()),
   1266                            Class->getDefInit()->getType());
   1267     }
   1268 
   1269     // The result of the expression is a reference to the new record.
   1270     return DefInit::get(NewRec);
   1271   }
   1272   case tgtok::l_brace: {           // Value ::= '{' ValueList '}'
   1273     SMLoc BraceLoc = Lex.getLoc();
   1274     Lex.Lex(); // eat the '{'
   1275     std::vector<Init*> Vals;
   1276 
   1277     if (Lex.getCode() != tgtok::r_brace) {
   1278       Vals = ParseValueList(CurRec);
   1279       if (Vals.empty()) return nullptr;
   1280     }
   1281     if (Lex.getCode() != tgtok::r_brace) {
   1282       TokError("expected '}' at end of bit list value");
   1283       return nullptr;
   1284     }
   1285     Lex.Lex();  // eat the '}'
   1286 
   1287     SmallVector<Init *, 16> NewBits(Vals.size());
   1288 
   1289     for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
   1290       Init *Bit = Vals[i]->convertInitializerTo(BitRecTy::get());
   1291       if (!Bit) {
   1292         Error(BraceLoc, "Element #" + utostr(i) + " (" + Vals[i]->getAsString()+
   1293               ") is not convertable to a bit");
   1294         return nullptr;
   1295       }
   1296       NewBits[Vals.size()-i-1] = Bit;
   1297     }
   1298     return BitsInit::get(NewBits);
   1299   }
   1300   case tgtok::l_square: {          // Value ::= '[' ValueList ']'
   1301     Lex.Lex(); // eat the '['
   1302     std::vector<Init*> Vals;
   1303 
   1304     RecTy *DeducedEltTy = nullptr;
   1305     ListRecTy *GivenListTy = nullptr;
   1306 
   1307     if (ItemType) {
   1308       ListRecTy *ListType = dyn_cast<ListRecTy>(ItemType);
   1309       if (!ListType) {
   1310         std::string s;
   1311         raw_string_ostream ss(s);
   1312         ss << "Type mismatch for list, expected list type, got "
   1313            << ItemType->getAsString();
   1314         TokError(ss.str());
   1315         return nullptr;
   1316       }
   1317       GivenListTy = ListType;
   1318     }
   1319 
   1320     if (Lex.getCode() != tgtok::r_square) {
   1321       Vals = ParseValueList(CurRec, nullptr,
   1322                             GivenListTy ? GivenListTy->getElementType() : nullptr);
   1323       if (Vals.empty()) return nullptr;
   1324     }
   1325     if (Lex.getCode() != tgtok::r_square) {
   1326       TokError("expected ']' at end of list value");
   1327       return nullptr;
   1328     }
   1329     Lex.Lex();  // eat the ']'
   1330 
   1331     RecTy *GivenEltTy = nullptr;
   1332     if (Lex.getCode() == tgtok::less) {
   1333       // Optional list element type
   1334       Lex.Lex();  // eat the '<'
   1335 
   1336       GivenEltTy = ParseType();
   1337       if (!GivenEltTy) {
   1338         // Couldn't parse element type
   1339         return nullptr;
   1340       }
   1341 
   1342       if (Lex.getCode() != tgtok::greater) {
   1343         TokError("expected '>' at end of list element type");
   1344         return nullptr;
   1345       }
   1346       Lex.Lex();  // eat the '>'
   1347     }
   1348 
   1349     // Check elements
   1350     RecTy *EltTy = nullptr;
   1351     for (std::vector<Init *>::iterator i = Vals.begin(), ie = Vals.end();
   1352          i != ie;
   1353          ++i) {
   1354       TypedInit *TArg = dyn_cast<TypedInit>(*i);
   1355       if (!TArg) {
   1356         TokError("Untyped list element");
   1357         return nullptr;
   1358       }
   1359       if (EltTy) {
   1360         EltTy = resolveTypes(EltTy, TArg->getType());
   1361         if (!EltTy) {
   1362           TokError("Incompatible types in list elements");
   1363           return nullptr;
   1364         }
   1365       } else {
   1366         EltTy = TArg->getType();
   1367       }
   1368     }
   1369 
   1370     if (GivenEltTy) {
   1371       if (EltTy) {
   1372         // Verify consistency
   1373         if (!EltTy->typeIsConvertibleTo(GivenEltTy)) {
   1374           TokError("Incompatible types in list elements");
   1375           return nullptr;
   1376         }
   1377       }
   1378       EltTy = GivenEltTy;
   1379     }
   1380 
   1381     if (!EltTy) {
   1382       if (!ItemType) {
   1383         TokError("No type for list");
   1384         return nullptr;
   1385       }
   1386       DeducedEltTy = GivenListTy->getElementType();
   1387     } else {
   1388       // Make sure the deduced type is compatible with the given type
   1389       if (GivenListTy) {
   1390         if (!EltTy->typeIsConvertibleTo(GivenListTy->getElementType())) {
   1391           TokError("Element type mismatch for list");
   1392           return nullptr;
   1393         }
   1394       }
   1395       DeducedEltTy = EltTy;
   1396     }
   1397 
   1398     return ListInit::get(Vals, DeducedEltTy);
   1399   }
   1400   case tgtok::l_paren: {         // Value ::= '(' IDValue DagArgList ')'
   1401     Lex.Lex();   // eat the '('
   1402     if (Lex.getCode() != tgtok::Id && Lex.getCode() != tgtok::XCast) {
   1403       TokError("expected identifier in dag init");
   1404       return nullptr;
   1405     }
   1406 
   1407     Init *Operator = ParseValue(CurRec);
   1408     if (!Operator) return nullptr;
   1409 
   1410     // If the operator name is present, parse it.
   1411     std::string OperatorName;
   1412     if (Lex.getCode() == tgtok::colon) {
   1413       if (Lex.Lex() != tgtok::VarName) { // eat the ':'
   1414         TokError("expected variable name in dag operator");
   1415         return nullptr;
   1416       }
   1417       OperatorName = Lex.getCurStrVal();
   1418       Lex.Lex();  // eat the VarName.
   1419     }
   1420 
   1421     std::vector<std::pair<llvm::Init*, std::string> > DagArgs;
   1422     if (Lex.getCode() != tgtok::r_paren) {
   1423       DagArgs = ParseDagArgList(CurRec);
   1424       if (DagArgs.empty()) return nullptr;
   1425     }
   1426 
   1427     if (Lex.getCode() != tgtok::r_paren) {
   1428       TokError("expected ')' in dag init");
   1429       return nullptr;
   1430     }
   1431     Lex.Lex();  // eat the ')'
   1432 
   1433     return DagInit::get(Operator, OperatorName, DagArgs);
   1434   }
   1435 
   1436   case tgtok::XHead:
   1437   case tgtok::XTail:
   1438   case tgtok::XEmpty:
   1439   case tgtok::XCast:  // Value ::= !unop '(' Value ')'
   1440   case tgtok::XConcat:
   1441   case tgtok::XADD:
   1442   case tgtok::XSRA:
   1443   case tgtok::XSRL:
   1444   case tgtok::XSHL:
   1445   case tgtok::XEq:
   1446   case tgtok::XListConcat:
   1447   case tgtok::XStrConcat:   // Value ::= !binop '(' Value ',' Value ')'
   1448   case tgtok::XIf:
   1449   case tgtok::XForEach:
   1450   case tgtok::XSubst: {  // Value ::= !ternop '(' Value ',' Value ',' Value ')'
   1451     return ParseOperation(CurRec, ItemType);
   1452   }
   1453   }
   1454 
   1455   return R;
   1456 }
   1457 
   1458 /// ParseValue - Parse a tblgen value.  This returns null on error.
   1459 ///
   1460 ///   Value       ::= SimpleValue ValueSuffix*
   1461 ///   ValueSuffix ::= '{' BitList '}'
   1462 ///   ValueSuffix ::= '[' BitList ']'
   1463 ///   ValueSuffix ::= '.' ID
   1464 ///
   1465 Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
   1466   Init *Result = ParseSimpleValue(CurRec, ItemType, Mode);
   1467   if (!Result) return nullptr;
   1468 
   1469   // Parse the suffixes now if present.
   1470   while (1) {
   1471     switch (Lex.getCode()) {
   1472     default: return Result;
   1473     case tgtok::l_brace: {
   1474       if (Mode == ParseNameMode || Mode == ParseForeachMode)
   1475         // This is the beginning of the object body.
   1476         return Result;
   1477 
   1478       SMLoc CurlyLoc = Lex.getLoc();
   1479       Lex.Lex(); // eat the '{'
   1480       std::vector<unsigned> Ranges = ParseRangeList();
   1481       if (Ranges.empty()) return nullptr;
   1482 
   1483       // Reverse the bitlist.
   1484       std::reverse(Ranges.begin(), Ranges.end());
   1485       Result = Result->convertInitializerBitRange(Ranges);
   1486       if (!Result) {
   1487         Error(CurlyLoc, "Invalid bit range for value");
   1488         return nullptr;
   1489       }
   1490 
   1491       // Eat the '}'.
   1492       if (Lex.getCode() != tgtok::r_brace) {
   1493         TokError("expected '}' at end of bit range list");
   1494         return nullptr;
   1495       }
   1496       Lex.Lex();
   1497       break;
   1498     }
   1499     case tgtok::l_square: {
   1500       SMLoc SquareLoc = Lex.getLoc();
   1501       Lex.Lex(); // eat the '['
   1502       std::vector<unsigned> Ranges = ParseRangeList();
   1503       if (Ranges.empty()) return nullptr;
   1504 
   1505       Result = Result->convertInitListSlice(Ranges);
   1506       if (!Result) {
   1507         Error(SquareLoc, "Invalid range for list slice");
   1508         return nullptr;
   1509       }
   1510 
   1511       // Eat the ']'.
   1512       if (Lex.getCode() != tgtok::r_square) {
   1513         TokError("expected ']' at end of list slice");
   1514         return nullptr;
   1515       }
   1516       Lex.Lex();
   1517       break;
   1518     }
   1519     case tgtok::period:
   1520       if (Lex.Lex() != tgtok::Id) {  // eat the .
   1521         TokError("expected field identifier after '.'");
   1522         return nullptr;
   1523       }
   1524       if (!Result->getFieldType(Lex.getCurStrVal())) {
   1525         TokError("Cannot access field '" + Lex.getCurStrVal() + "' of value '" +
   1526                  Result->getAsString() + "'");
   1527         return nullptr;
   1528       }
   1529       Result = FieldInit::get(Result, Lex.getCurStrVal());
   1530       Lex.Lex();  // eat field name
   1531       break;
   1532 
   1533     case tgtok::paste:
   1534       SMLoc PasteLoc = Lex.getLoc();
   1535 
   1536       // Create a !strconcat() operation, first casting each operand to
   1537       // a string if necessary.
   1538 
   1539       TypedInit *LHS = dyn_cast<TypedInit>(Result);
   1540       if (!LHS) {
   1541         Error(PasteLoc, "LHS of paste is not typed!");
   1542         return nullptr;
   1543       }
   1544 
   1545       if (LHS->getType() != StringRecTy::get()) {
   1546         LHS = UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get());
   1547       }
   1548 
   1549       TypedInit *RHS = nullptr;
   1550 
   1551       Lex.Lex();  // Eat the '#'.
   1552       switch (Lex.getCode()) {
   1553       case tgtok::colon:
   1554       case tgtok::semi:
   1555       case tgtok::l_brace:
   1556         // These are all of the tokens that can begin an object body.
   1557         // Some of these can also begin values but we disallow those cases
   1558         // because they are unlikely to be useful.
   1559 
   1560         // Trailing paste, concat with an empty string.
   1561         RHS = StringInit::get("");
   1562         break;
   1563 
   1564       default:
   1565         Init *RHSResult = ParseValue(CurRec, ItemType, ParseNameMode);
   1566         RHS = dyn_cast<TypedInit>(RHSResult);
   1567         if (!RHS) {
   1568           Error(PasteLoc, "RHS of paste is not typed!");
   1569           return nullptr;
   1570         }
   1571 
   1572         if (RHS->getType() != StringRecTy::get()) {
   1573           RHS = UnOpInit::get(UnOpInit::CAST, RHS, StringRecTy::get());
   1574         }
   1575 
   1576         break;
   1577       }
   1578 
   1579       Result = BinOpInit::get(BinOpInit::STRCONCAT, LHS, RHS,
   1580                               StringRecTy::get())->Fold(CurRec, CurMultiClass);
   1581       break;
   1582     }
   1583   }
   1584 }
   1585 
   1586 /// ParseDagArgList - Parse the argument list for a dag literal expression.
   1587 ///
   1588 ///    DagArg     ::= Value (':' VARNAME)?
   1589 ///    DagArg     ::= VARNAME
   1590 ///    DagArgList ::= DagArg
   1591 ///    DagArgList ::= DagArgList ',' DagArg
   1592 std::vector<std::pair<llvm::Init*, std::string> >
   1593 TGParser::ParseDagArgList(Record *CurRec) {
   1594   std::vector<std::pair<llvm::Init*, std::string> > Result;
   1595 
   1596   while (1) {
   1597     // DagArg ::= VARNAME
   1598     if (Lex.getCode() == tgtok::VarName) {
   1599       // A missing value is treated like '?'.
   1600       Result.push_back(std::make_pair(UnsetInit::get(), Lex.getCurStrVal()));
   1601       Lex.Lex();
   1602     } else {
   1603       // DagArg ::= Value (':' VARNAME)?
   1604       Init *Val = ParseValue(CurRec);
   1605       if (!Val)
   1606         return std::vector<std::pair<llvm::Init*, std::string> >();
   1607 
   1608       // If the variable name is present, add it.
   1609       std::string VarName;
   1610       if (Lex.getCode() == tgtok::colon) {
   1611         if (Lex.Lex() != tgtok::VarName) { // eat the ':'
   1612           TokError("expected variable name in dag literal");
   1613           return std::vector<std::pair<llvm::Init*, std::string> >();
   1614         }
   1615         VarName = Lex.getCurStrVal();
   1616         Lex.Lex();  // eat the VarName.
   1617       }
   1618 
   1619       Result.push_back(std::make_pair(Val, VarName));
   1620     }
   1621     if (Lex.getCode() != tgtok::comma) break;
   1622     Lex.Lex(); // eat the ','
   1623   }
   1624 
   1625   return Result;
   1626 }
   1627 
   1628 
   1629 /// ParseValueList - Parse a comma separated list of values, returning them as a
   1630 /// vector.  Note that this always expects to be able to parse at least one
   1631 /// value.  It returns an empty list if this is not possible.
   1632 ///
   1633 ///   ValueList ::= Value (',' Value)
   1634 ///
   1635 std::vector<Init*> TGParser::ParseValueList(Record *CurRec, Record *ArgsRec,
   1636                                             RecTy *EltTy) {
   1637   std::vector<Init*> Result;
   1638   RecTy *ItemType = EltTy;
   1639   unsigned int ArgN = 0;
   1640   if (ArgsRec && !EltTy) {
   1641     const std::vector<Init *> &TArgs = ArgsRec->getTemplateArgs();
   1642     if (!TArgs.size()) {
   1643       TokError("template argument provided to non-template class");
   1644       return std::vector<Init*>();
   1645     }
   1646     const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
   1647     if (!RV) {
   1648       errs() << "Cannot find template arg " << ArgN << " (" << TArgs[ArgN]
   1649         << ")\n";
   1650     }
   1651     assert(RV && "Template argument record not found??");
   1652     ItemType = RV->getType();
   1653     ++ArgN;
   1654   }
   1655   Result.push_back(ParseValue(CurRec, ItemType));
   1656   if (!Result.back()) return std::vector<Init*>();
   1657 
   1658   while (Lex.getCode() == tgtok::comma) {
   1659     Lex.Lex();  // Eat the comma
   1660 
   1661     if (ArgsRec && !EltTy) {
   1662       const std::vector<Init *> &TArgs = ArgsRec->getTemplateArgs();
   1663       if (ArgN >= TArgs.size()) {
   1664         TokError("too many template arguments");
   1665         return std::vector<Init*>();
   1666       }
   1667       const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
   1668       assert(RV && "Template argument record not found??");
   1669       ItemType = RV->getType();
   1670       ++ArgN;
   1671     }
   1672     Result.push_back(ParseValue(CurRec, ItemType));
   1673     if (!Result.back()) return std::vector<Init*>();
   1674   }
   1675 
   1676   return Result;
   1677 }
   1678 
   1679 
   1680 /// ParseDeclaration - Read a declaration, returning the name of field ID, or an
   1681 /// empty string on error.  This can happen in a number of different context's,
   1682 /// including within a def or in the template args for a def (which which case
   1683 /// CurRec will be non-null) and within the template args for a multiclass (in
   1684 /// which case CurRec will be null, but CurMultiClass will be set).  This can
   1685 /// also happen within a def that is within a multiclass, which will set both
   1686 /// CurRec and CurMultiClass.
   1687 ///
   1688 ///  Declaration ::= FIELD? Type ID ('=' Value)?
   1689 ///
   1690 Init *TGParser::ParseDeclaration(Record *CurRec,
   1691                                        bool ParsingTemplateArgs) {
   1692   // Read the field prefix if present.
   1693   bool HasField = Lex.getCode() == tgtok::Field;
   1694   if (HasField) Lex.Lex();
   1695 
   1696   RecTy *Type = ParseType();
   1697   if (!Type) return nullptr;
   1698 
   1699   if (Lex.getCode() != tgtok::Id) {
   1700     TokError("Expected identifier in declaration");
   1701     return nullptr;
   1702   }
   1703 
   1704   SMLoc IdLoc = Lex.getLoc();
   1705   Init *DeclName = StringInit::get(Lex.getCurStrVal());
   1706   Lex.Lex();
   1707 
   1708   if (ParsingTemplateArgs) {
   1709     if (CurRec) {
   1710       DeclName = QualifyName(*CurRec, CurMultiClass, DeclName, ":");
   1711     } else {
   1712       assert(CurMultiClass);
   1713     }
   1714     if (CurMultiClass)
   1715       DeclName = QualifyName(CurMultiClass->Rec, CurMultiClass, DeclName,
   1716                              "::");
   1717   }
   1718 
   1719   // Add the value.
   1720   if (AddValue(CurRec, IdLoc, RecordVal(DeclName, Type, HasField)))
   1721     return nullptr;
   1722 
   1723   // If a value is present, parse it.
   1724   if (Lex.getCode() == tgtok::equal) {
   1725     Lex.Lex();
   1726     SMLoc ValLoc = Lex.getLoc();
   1727     Init *Val = ParseValue(CurRec, Type);
   1728     if (!Val ||
   1729         SetValue(CurRec, ValLoc, DeclName, std::vector<unsigned>(), Val))
   1730       return nullptr;
   1731   }
   1732 
   1733   return DeclName;
   1734 }
   1735 
   1736 /// ParseForeachDeclaration - Read a foreach declaration, returning
   1737 /// the name of the declared object or a NULL Init on error.  Return
   1738 /// the name of the parsed initializer list through ForeachListName.
   1739 ///
   1740 ///  ForeachDeclaration ::= ID '=' '[' ValueList ']'
   1741 ///  ForeachDeclaration ::= ID '=' '{' RangeList '}'
   1742 ///  ForeachDeclaration ::= ID '=' RangePiece
   1743 ///
   1744 VarInit *TGParser::ParseForeachDeclaration(ListInit *&ForeachListValue) {
   1745   if (Lex.getCode() != tgtok::Id) {
   1746     TokError("Expected identifier in foreach declaration");
   1747     return nullptr;
   1748   }
   1749 
   1750   Init *DeclName = StringInit::get(Lex.getCurStrVal());
   1751   Lex.Lex();
   1752 
   1753   // If a value is present, parse it.
   1754   if (Lex.getCode() != tgtok::equal) {
   1755     TokError("Expected '=' in foreach declaration");
   1756     return nullptr;
   1757   }
   1758   Lex.Lex();  // Eat the '='
   1759 
   1760   RecTy *IterType = nullptr;
   1761   std::vector<unsigned> Ranges;
   1762 
   1763   switch (Lex.getCode()) {
   1764   default: TokError("Unknown token when expecting a range list"); return nullptr;
   1765   case tgtok::l_square: { // '[' ValueList ']'
   1766     Init *List = ParseSimpleValue(nullptr, nullptr, ParseForeachMode);
   1767     ForeachListValue = dyn_cast<ListInit>(List);
   1768     if (!ForeachListValue) {
   1769       TokError("Expected a Value list");
   1770       return nullptr;
   1771     }
   1772     RecTy *ValueType = ForeachListValue->getType();
   1773     ListRecTy *ListType = dyn_cast<ListRecTy>(ValueType);
   1774     if (!ListType) {
   1775       TokError("Value list is not of list type");
   1776       return nullptr;
   1777     }
   1778     IterType = ListType->getElementType();
   1779     break;
   1780   }
   1781 
   1782   case tgtok::IntVal: { // RangePiece.
   1783     if (ParseRangePiece(Ranges))
   1784       return nullptr;
   1785     break;
   1786   }
   1787 
   1788   case tgtok::l_brace: { // '{' RangeList '}'
   1789     Lex.Lex(); // eat the '{'
   1790     Ranges = ParseRangeList();
   1791     if (Lex.getCode() != tgtok::r_brace) {
   1792       TokError("expected '}' at end of bit range list");
   1793       return nullptr;
   1794     }
   1795     Lex.Lex();
   1796     break;
   1797   }
   1798   }
   1799 
   1800   if (!Ranges.empty()) {
   1801     assert(!IterType && "Type already initialized?");
   1802     IterType = IntRecTy::get();
   1803     std::vector<Init*> Values;
   1804     for (unsigned i = 0, e = Ranges.size(); i != e; ++i)
   1805       Values.push_back(IntInit::get(Ranges[i]));
   1806     ForeachListValue = ListInit::get(Values, IterType);
   1807   }
   1808 
   1809   if (!IterType)
   1810     return nullptr;
   1811 
   1812   return VarInit::get(DeclName, IterType);
   1813 }
   1814 
   1815 /// ParseTemplateArgList - Read a template argument list, which is a non-empty
   1816 /// sequence of template-declarations in <>'s.  If CurRec is non-null, these are
   1817 /// template args for a def, which may or may not be in a multiclass.  If null,
   1818 /// these are the template args for a multiclass.
   1819 ///
   1820 ///    TemplateArgList ::= '<' Declaration (',' Declaration)* '>'
   1821 ///
   1822 bool TGParser::ParseTemplateArgList(Record *CurRec) {
   1823   assert(Lex.getCode() == tgtok::less && "Not a template arg list!");
   1824   Lex.Lex(); // eat the '<'
   1825 
   1826   Record *TheRecToAddTo = CurRec ? CurRec : &CurMultiClass->Rec;
   1827 
   1828   // Read the first declaration.
   1829   Init *TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
   1830   if (!TemplArg)
   1831     return true;
   1832 
   1833   TheRecToAddTo->addTemplateArg(TemplArg);
   1834 
   1835   while (Lex.getCode() == tgtok::comma) {
   1836     Lex.Lex(); // eat the ','
   1837 
   1838     // Read the following declarations.
   1839     TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
   1840     if (!TemplArg)
   1841       return true;
   1842     TheRecToAddTo->addTemplateArg(TemplArg);
   1843   }
   1844 
   1845   if (Lex.getCode() != tgtok::greater)
   1846     return TokError("expected '>' at end of template argument list");
   1847   Lex.Lex(); // eat the '>'.
   1848   return false;
   1849 }
   1850 
   1851 
   1852 /// ParseBodyItem - Parse a single item at within the body of a def or class.
   1853 ///
   1854 ///   BodyItem ::= Declaration ';'
   1855 ///   BodyItem ::= LET ID OptionalBitList '=' Value ';'
   1856 bool TGParser::ParseBodyItem(Record *CurRec) {
   1857   if (Lex.getCode() != tgtok::Let) {
   1858     if (!ParseDeclaration(CurRec, false))
   1859       return true;
   1860 
   1861     if (Lex.getCode() != tgtok::semi)
   1862       return TokError("expected ';' after declaration");
   1863     Lex.Lex();
   1864     return false;
   1865   }
   1866 
   1867   // LET ID OptionalRangeList '=' Value ';'
   1868   if (Lex.Lex() != tgtok::Id)
   1869     return TokError("expected field identifier after let");
   1870 
   1871   SMLoc IdLoc = Lex.getLoc();
   1872   std::string FieldName = Lex.getCurStrVal();
   1873   Lex.Lex();  // eat the field name.
   1874 
   1875   std::vector<unsigned> BitList;
   1876   if (ParseOptionalBitList(BitList))
   1877     return true;
   1878   std::reverse(BitList.begin(), BitList.end());
   1879 
   1880   if (Lex.getCode() != tgtok::equal)
   1881     return TokError("expected '=' in let expression");
   1882   Lex.Lex();  // eat the '='.
   1883 
   1884   RecordVal *Field = CurRec->getValue(FieldName);
   1885   if (!Field)
   1886     return TokError("Value '" + FieldName + "' unknown!");
   1887 
   1888   RecTy *Type = Field->getType();
   1889 
   1890   Init *Val = ParseValue(CurRec, Type);
   1891   if (!Val) return true;
   1892 
   1893   if (Lex.getCode() != tgtok::semi)
   1894     return TokError("expected ';' after let expression");
   1895   Lex.Lex();
   1896 
   1897   return SetValue(CurRec, IdLoc, FieldName, BitList, Val);
   1898 }
   1899 
   1900 /// ParseBody - Read the body of a class or def.  Return true on error, false on
   1901 /// success.
   1902 ///
   1903 ///   Body     ::= ';'
   1904 ///   Body     ::= '{' BodyList '}'
   1905 ///   BodyList BodyItem*
   1906 ///
   1907 bool TGParser::ParseBody(Record *CurRec) {
   1908   // If this is a null definition, just eat the semi and return.
   1909   if (Lex.getCode() == tgtok::semi) {
   1910     Lex.Lex();
   1911     return false;
   1912   }
   1913 
   1914   if (Lex.getCode() != tgtok::l_brace)
   1915     return TokError("Expected ';' or '{' to start body");
   1916   // Eat the '{'.
   1917   Lex.Lex();
   1918 
   1919   while (Lex.getCode() != tgtok::r_brace)
   1920     if (ParseBodyItem(CurRec))
   1921       return true;
   1922 
   1923   // Eat the '}'.
   1924   Lex.Lex();
   1925   return false;
   1926 }
   1927 
   1928 /// \brief Apply the current let bindings to \a CurRec.
   1929 /// \returns true on error, false otherwise.
   1930 bool TGParser::ApplyLetStack(Record *CurRec) {
   1931   for (unsigned i = 0, e = LetStack.size(); i != e; ++i)
   1932     for (unsigned j = 0, e = LetStack[i].size(); j != e; ++j)
   1933       if (SetValue(CurRec, LetStack[i][j].Loc, LetStack[i][j].Name,
   1934                    LetStack[i][j].Bits, LetStack[i][j].Value))
   1935         return true;
   1936   return false;
   1937 }
   1938 
   1939 /// ParseObjectBody - Parse the body of a def or class.  This consists of an
   1940 /// optional ClassList followed by a Body.  CurRec is the current def or class
   1941 /// that is being parsed.
   1942 ///
   1943 ///   ObjectBody      ::= BaseClassList Body
   1944 ///   BaseClassList   ::= /*empty*/
   1945 ///   BaseClassList   ::= ':' BaseClassListNE
   1946 ///   BaseClassListNE ::= SubClassRef (',' SubClassRef)*
   1947 ///
   1948 bool TGParser::ParseObjectBody(Record *CurRec) {
   1949   // If there is a baseclass list, read it.
   1950   if (Lex.getCode() == tgtok::colon) {
   1951     Lex.Lex();
   1952 
   1953     // Read all of the subclasses.
   1954     SubClassReference SubClass = ParseSubClassReference(CurRec, false);
   1955     while (1) {
   1956       // Check for error.
   1957       if (!SubClass.Rec) return true;
   1958 
   1959       // Add it.
   1960       if (AddSubClass(CurRec, SubClass))
   1961         return true;
   1962 
   1963       if (Lex.getCode() != tgtok::comma) break;
   1964       Lex.Lex(); // eat ','.
   1965       SubClass = ParseSubClassReference(CurRec, false);
   1966     }
   1967   }
   1968 
   1969   if (ApplyLetStack(CurRec))
   1970     return true;
   1971 
   1972   return ParseBody(CurRec);
   1973 }
   1974 
   1975 /// ParseDef - Parse and return a top level or multiclass def, return the record
   1976 /// corresponding to it.  This returns null on error.
   1977 ///
   1978 ///   DefInst ::= DEF ObjectName ObjectBody
   1979 ///
   1980 bool TGParser::ParseDef(MultiClass *CurMultiClass) {
   1981   SMLoc DefLoc = Lex.getLoc();
   1982   assert(Lex.getCode() == tgtok::Def && "Unknown tok");
   1983   Lex.Lex();  // Eat the 'def' token.
   1984 
   1985   // Parse ObjectName and make a record for it.
   1986   Record *CurRec;
   1987   Init *Name = ParseObjectName(CurMultiClass);
   1988   if (Name)
   1989     CurRec = new Record(Name, DefLoc, Records);
   1990   else
   1991     CurRec = new Record(GetNewAnonymousName(), DefLoc, Records,
   1992                         /*IsAnonymous=*/true);
   1993 
   1994   if (!CurMultiClass && Loops.empty()) {
   1995     // Top-level def definition.
   1996 
   1997     // Ensure redefinition doesn't happen.
   1998     if (Records.getDef(CurRec->getNameInitAsString())) {
   1999       Error(DefLoc, "def '" + CurRec->getNameInitAsString()
   2000             + "' already defined");
   2001       return true;
   2002     }
   2003     Records.addDef(CurRec);
   2004 
   2005     if (ParseObjectBody(CurRec))
   2006       return true;
   2007   } else if (CurMultiClass) {
   2008     // Parse the body before adding this prototype to the DefPrototypes vector.
   2009     // That way implicit definitions will be added to the DefPrototypes vector
   2010     // before this object, instantiated prior to defs derived from this object,
   2011     // and this available for indirect name resolution when defs derived from
   2012     // this object are instantiated.
   2013     if (ParseObjectBody(CurRec))
   2014       return true;
   2015 
   2016     // Otherwise, a def inside a multiclass, add it to the multiclass.
   2017     for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size(); i != e; ++i)
   2018       if (CurMultiClass->DefPrototypes[i]->getNameInit()
   2019           == CurRec->getNameInit()) {
   2020         Error(DefLoc, "def '" + CurRec->getNameInitAsString() +
   2021               "' already defined in this multiclass!");
   2022         return true;
   2023       }
   2024     CurMultiClass->DefPrototypes.push_back(CurRec);
   2025   } else if (ParseObjectBody(CurRec))
   2026     return true;
   2027 
   2028   if (!CurMultiClass)  // Def's in multiclasses aren't really defs.
   2029     // See Record::setName().  This resolve step will see any new name
   2030     // for the def that might have been created when resolving
   2031     // inheritance, values and arguments above.
   2032     CurRec->resolveReferences();
   2033 
   2034   // If ObjectBody has template arguments, it's an error.
   2035   assert(CurRec->getTemplateArgs().empty() && "How'd this get template args?");
   2036 
   2037   if (CurMultiClass) {
   2038     // Copy the template arguments for the multiclass into the def.
   2039     const std::vector<Init *> &TArgs =
   2040                                 CurMultiClass->Rec.getTemplateArgs();
   2041 
   2042     for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
   2043       const RecordVal *RV = CurMultiClass->Rec.getValue(TArgs[i]);
   2044       assert(RV && "Template arg doesn't exist?");
   2045       CurRec->addValue(*RV);
   2046     }
   2047   }
   2048 
   2049   if (ProcessForeachDefs(CurRec, DefLoc)) {
   2050     Error(DefLoc,
   2051           "Could not process loops for def" + CurRec->getNameInitAsString());
   2052     return true;
   2053   }
   2054 
   2055   return false;
   2056 }
   2057 
   2058 /// ParseForeach - Parse a for statement.  Return the record corresponding
   2059 /// to it.  This returns true on error.
   2060 ///
   2061 ///   Foreach ::= FOREACH Declaration IN '{ ObjectList '}'
   2062 ///   Foreach ::= FOREACH Declaration IN Object
   2063 ///
   2064 bool TGParser::ParseForeach(MultiClass *CurMultiClass) {
   2065   assert(Lex.getCode() == tgtok::Foreach && "Unknown tok");
   2066   Lex.Lex();  // Eat the 'for' token.
   2067 
   2068   // Make a temporary object to record items associated with the for
   2069   // loop.
   2070   ListInit *ListValue = nullptr;
   2071   VarInit *IterName = ParseForeachDeclaration(ListValue);
   2072   if (!IterName)
   2073     return TokError("expected declaration in for");
   2074 
   2075   if (Lex.getCode() != tgtok::In)
   2076     return TokError("Unknown tok");
   2077   Lex.Lex();  // Eat the in
   2078 
   2079   // Create a loop object and remember it.
   2080   Loops.push_back(ForeachLoop(IterName, ListValue));
   2081 
   2082   if (Lex.getCode() != tgtok::l_brace) {
   2083     // FOREACH Declaration IN Object
   2084     if (ParseObject(CurMultiClass))
   2085       return true;
   2086   }
   2087   else {
   2088     SMLoc BraceLoc = Lex.getLoc();
   2089     // Otherwise, this is a group foreach.
   2090     Lex.Lex();  // eat the '{'.
   2091 
   2092     // Parse the object list.
   2093     if (ParseObjectList(CurMultiClass))
   2094       return true;
   2095 
   2096     if (Lex.getCode() != tgtok::r_brace) {
   2097       TokError("expected '}' at end of foreach command");
   2098       return Error(BraceLoc, "to match this '{'");
   2099     }
   2100     Lex.Lex();  // Eat the }
   2101   }
   2102 
   2103   // We've processed everything in this loop.
   2104   Loops.pop_back();
   2105 
   2106   return false;
   2107 }
   2108 
   2109 /// ParseClass - Parse a tblgen class definition.
   2110 ///
   2111 ///   ClassInst ::= CLASS ID TemplateArgList? ObjectBody
   2112 ///
   2113 bool TGParser::ParseClass() {
   2114   assert(Lex.getCode() == tgtok::Class && "Unexpected token!");
   2115   Lex.Lex();
   2116 
   2117   if (Lex.getCode() != tgtok::Id)
   2118     return TokError("expected class name after 'class' keyword");
   2119 
   2120   Record *CurRec = Records.getClass(Lex.getCurStrVal());
   2121   if (CurRec) {
   2122     // If the body was previously defined, this is an error.
   2123     if (CurRec->getValues().size() > 1 ||  // Account for NAME.
   2124         !CurRec->getSuperClasses().empty() ||
   2125         !CurRec->getTemplateArgs().empty())
   2126       return TokError("Class '" + CurRec->getNameInitAsString()
   2127                       + "' already defined");
   2128   } else {
   2129     // If this is the first reference to this class, create and add it.
   2130     CurRec = new Record(Lex.getCurStrVal(), Lex.getLoc(), Records);
   2131     Records.addClass(CurRec);
   2132   }
   2133   Lex.Lex(); // eat the name.
   2134 
   2135   // If there are template args, parse them.
   2136   if (Lex.getCode() == tgtok::less)
   2137     if (ParseTemplateArgList(CurRec))
   2138       return true;
   2139 
   2140   // Finally, parse the object body.
   2141   return ParseObjectBody(CurRec);
   2142 }
   2143 
   2144 /// ParseLetList - Parse a non-empty list of assignment expressions into a list
   2145 /// of LetRecords.
   2146 ///
   2147 ///   LetList ::= LetItem (',' LetItem)*
   2148 ///   LetItem ::= ID OptionalRangeList '=' Value
   2149 ///
   2150 std::vector<LetRecord> TGParser::ParseLetList() {
   2151   std::vector<LetRecord> Result;
   2152 
   2153   while (1) {
   2154     if (Lex.getCode() != tgtok::Id) {
   2155       TokError("expected identifier in let definition");
   2156       return std::vector<LetRecord>();
   2157     }
   2158     std::string Name = Lex.getCurStrVal();
   2159     SMLoc NameLoc = Lex.getLoc();
   2160     Lex.Lex();  // Eat the identifier.
   2161 
   2162     // Check for an optional RangeList.
   2163     std::vector<unsigned> Bits;
   2164     if (ParseOptionalRangeList(Bits))
   2165       return std::vector<LetRecord>();
   2166     std::reverse(Bits.begin(), Bits.end());
   2167 
   2168     if (Lex.getCode() != tgtok::equal) {
   2169       TokError("expected '=' in let expression");
   2170       return std::vector<LetRecord>();
   2171     }
   2172     Lex.Lex();  // eat the '='.
   2173 
   2174     Init *Val = ParseValue(nullptr);
   2175     if (!Val) return std::vector<LetRecord>();
   2176 
   2177     // Now that we have everything, add the record.
   2178     Result.push_back(LetRecord(Name, Bits, Val, NameLoc));
   2179 
   2180     if (Lex.getCode() != tgtok::comma)
   2181       return Result;
   2182     Lex.Lex();  // eat the comma.
   2183   }
   2184 }
   2185 
   2186 /// ParseTopLevelLet - Parse a 'let' at top level.  This can be a couple of
   2187 /// different related productions. This works inside multiclasses too.
   2188 ///
   2189 ///   Object ::= LET LetList IN '{' ObjectList '}'
   2190 ///   Object ::= LET LetList IN Object
   2191 ///
   2192 bool TGParser::ParseTopLevelLet(MultiClass *CurMultiClass) {
   2193   assert(Lex.getCode() == tgtok::Let && "Unexpected token");
   2194   Lex.Lex();
   2195 
   2196   // Add this entry to the let stack.
   2197   std::vector<LetRecord> LetInfo = ParseLetList();
   2198   if (LetInfo.empty()) return true;
   2199   LetStack.push_back(LetInfo);
   2200 
   2201   if (Lex.getCode() != tgtok::In)
   2202     return TokError("expected 'in' at end of top-level 'let'");
   2203   Lex.Lex();
   2204 
   2205   // If this is a scalar let, just handle it now
   2206   if (Lex.getCode() != tgtok::l_brace) {
   2207     // LET LetList IN Object
   2208     if (ParseObject(CurMultiClass))
   2209       return true;
   2210   } else {   // Object ::= LETCommand '{' ObjectList '}'
   2211     SMLoc BraceLoc = Lex.getLoc();
   2212     // Otherwise, this is a group let.
   2213     Lex.Lex();  // eat the '{'.
   2214 
   2215     // Parse the object list.
   2216     if (ParseObjectList(CurMultiClass))
   2217       return true;
   2218 
   2219     if (Lex.getCode() != tgtok::r_brace) {
   2220       TokError("expected '}' at end of top level let command");
   2221       return Error(BraceLoc, "to match this '{'");
   2222     }
   2223     Lex.Lex();
   2224   }
   2225 
   2226   // Outside this let scope, this let block is not active.
   2227   LetStack.pop_back();
   2228   return false;
   2229 }
   2230 
   2231 /// ParseMultiClass - Parse a multiclass definition.
   2232 ///
   2233 ///  MultiClassInst ::= MULTICLASS ID TemplateArgList?
   2234 ///                     ':' BaseMultiClassList '{' MultiClassObject+ '}'
   2235 ///  MultiClassObject ::= DefInst
   2236 ///  MultiClassObject ::= MultiClassInst
   2237 ///  MultiClassObject ::= DefMInst
   2238 ///  MultiClassObject ::= LETCommand '{' ObjectList '}'
   2239 ///  MultiClassObject ::= LETCommand Object
   2240 ///
   2241 bool TGParser::ParseMultiClass() {
   2242   assert(Lex.getCode() == tgtok::MultiClass && "Unexpected token");
   2243   Lex.Lex();  // Eat the multiclass token.
   2244 
   2245   if (Lex.getCode() != tgtok::Id)
   2246     return TokError("expected identifier after multiclass for name");
   2247   std::string Name = Lex.getCurStrVal();
   2248 
   2249   if (MultiClasses.count(Name))
   2250     return TokError("multiclass '" + Name + "' already defined");
   2251 
   2252   CurMultiClass = MultiClasses[Name] = new MultiClass(Name,
   2253                                                       Lex.getLoc(), Records);
   2254   Lex.Lex();  // Eat the identifier.
   2255 
   2256   // If there are template args, parse them.
   2257   if (Lex.getCode() == tgtok::less)
   2258     if (ParseTemplateArgList(nullptr))
   2259       return true;
   2260 
   2261   bool inherits = false;
   2262 
   2263   // If there are submulticlasses, parse them.
   2264   if (Lex.getCode() == tgtok::colon) {
   2265     inherits = true;
   2266 
   2267     Lex.Lex();
   2268 
   2269     // Read all of the submulticlasses.
   2270     SubMultiClassReference SubMultiClass =
   2271       ParseSubMultiClassReference(CurMultiClass);
   2272     while (1) {
   2273       // Check for error.
   2274       if (!SubMultiClass.MC) return true;
   2275 
   2276       // Add it.
   2277       if (AddSubMultiClass(CurMultiClass, SubMultiClass))
   2278         return true;
   2279 
   2280       if (Lex.getCode() != tgtok::comma) break;
   2281       Lex.Lex(); // eat ','.
   2282       SubMultiClass = ParseSubMultiClassReference(CurMultiClass);
   2283     }
   2284   }
   2285 
   2286   if (Lex.getCode() != tgtok::l_brace) {
   2287     if (!inherits)
   2288       return TokError("expected '{' in multiclass definition");
   2289     else if (Lex.getCode() != tgtok::semi)
   2290       return TokError("expected ';' in multiclass definition");
   2291     else
   2292       Lex.Lex();  // eat the ';'.
   2293   } else {
   2294     if (Lex.Lex() == tgtok::r_brace)  // eat the '{'.
   2295       return TokError("multiclass must contain at least one def");
   2296 
   2297     while (Lex.getCode() != tgtok::r_brace) {
   2298       switch (Lex.getCode()) {
   2299         default:
   2300           return TokError("expected 'let', 'def' or 'defm' in multiclass body");
   2301         case tgtok::Let:
   2302         case tgtok::Def:
   2303         case tgtok::Defm:
   2304         case tgtok::Foreach:
   2305           if (ParseObject(CurMultiClass))
   2306             return true;
   2307          break;
   2308       }
   2309     }
   2310     Lex.Lex();  // eat the '}'.
   2311   }
   2312 
   2313   CurMultiClass = nullptr;
   2314   return false;
   2315 }
   2316 
   2317 Record *TGParser::
   2318 InstantiateMulticlassDef(MultiClass &MC,
   2319                          Record *DefProto,
   2320                          Init *&DefmPrefix,
   2321                          SMRange DefmPrefixRange) {
   2322   // We need to preserve DefProto so it can be reused for later
   2323   // instantiations, so create a new Record to inherit from it.
   2324 
   2325   // Add in the defm name.  If the defm prefix is empty, give each
   2326   // instantiated def a unique name.  Otherwise, if "#NAME#" exists in the
   2327   // name, substitute the prefix for #NAME#.  Otherwise, use the defm name
   2328   // as a prefix.
   2329 
   2330   bool IsAnonymous = false;
   2331   if (!DefmPrefix) {
   2332     DefmPrefix = StringInit::get(GetNewAnonymousName());
   2333     IsAnonymous = true;
   2334   }
   2335 
   2336   Init *DefName = DefProto->getNameInit();
   2337 
   2338   StringInit *DefNameString = dyn_cast<StringInit>(DefName);
   2339 
   2340   if (DefNameString) {
   2341     // We have a fully expanded string so there are no operators to
   2342     // resolve.  We should concatenate the given prefix and name.
   2343     DefName =
   2344       BinOpInit::get(BinOpInit::STRCONCAT,
   2345                      UnOpInit::get(UnOpInit::CAST, DefmPrefix,
   2346                                    StringRecTy::get())->Fold(DefProto, &MC),
   2347                      DefName, StringRecTy::get())->Fold(DefProto, &MC);
   2348   }
   2349 
   2350   // Make a trail of SMLocs from the multiclass instantiations.
   2351   SmallVector<SMLoc, 4> Locs(1, DefmPrefixRange.Start);
   2352   Locs.append(DefProto->getLoc().begin(), DefProto->getLoc().end());
   2353   Record *CurRec = new Record(DefName, Locs, Records, IsAnonymous);
   2354 
   2355   SubClassReference Ref;
   2356   Ref.RefRange = DefmPrefixRange;
   2357   Ref.Rec = DefProto;
   2358   AddSubClass(CurRec, Ref);
   2359 
   2360   // Set the value for NAME. We don't resolve references to it 'til later,
   2361   // though, so that uses in nested multiclass names don't get
   2362   // confused.
   2363   if (SetValue(CurRec, Ref.RefRange.Start, "NAME", std::vector<unsigned>(),
   2364                DefmPrefix)) {
   2365     Error(DefmPrefixRange.Start, "Could not resolve "
   2366           + CurRec->getNameInitAsString() + ":NAME to '"
   2367           + DefmPrefix->getAsUnquotedString() + "'");
   2368     return nullptr;
   2369   }
   2370 
   2371   // If the DefNameString didn't resolve, we probably have a reference to
   2372   // NAME and need to replace it. We need to do at least this much greedily,
   2373   // otherwise nested multiclasses will end up with incorrect NAME expansions.
   2374   if (!DefNameString) {
   2375     RecordVal *DefNameRV = CurRec->getValue("NAME");
   2376     CurRec->resolveReferencesTo(DefNameRV);
   2377   }
   2378 
   2379   if (!CurMultiClass) {
   2380     // Now that we're at the top level, resolve all NAME references
   2381     // in the resultant defs that weren't in the def names themselves.
   2382     RecordVal *DefNameRV = CurRec->getValue("NAME");
   2383     CurRec->resolveReferencesTo(DefNameRV);
   2384 
   2385     // Now that NAME references are resolved and we're at the top level of
   2386     // any multiclass expansions, add the record to the RecordKeeper. If we are
   2387     // currently in a multiclass, it means this defm appears inside a
   2388     // multiclass and its name won't be fully resolvable until we see
   2389     // the top-level defm.  Therefore, we don't add this to the
   2390     // RecordKeeper at this point.  If we did we could get duplicate
   2391     // defs as more than one probably refers to NAME or some other
   2392     // common internal placeholder.
   2393 
   2394     // Ensure redefinition doesn't happen.
   2395     if (Records.getDef(CurRec->getNameInitAsString())) {
   2396       Error(DefmPrefixRange.Start, "def '" + CurRec->getNameInitAsString() +
   2397             "' already defined, instantiating defm with subdef '" +
   2398             DefProto->getNameInitAsString() + "'");
   2399       return nullptr;
   2400     }
   2401 
   2402     Records.addDef(CurRec);
   2403   }
   2404 
   2405   return CurRec;
   2406 }
   2407 
   2408 bool TGParser::ResolveMulticlassDefArgs(MultiClass &MC,
   2409                                         Record *CurRec,
   2410                                         SMLoc DefmPrefixLoc,
   2411                                         SMLoc SubClassLoc,
   2412                                         const std::vector<Init *> &TArgs,
   2413                                         std::vector<Init *> &TemplateVals,
   2414                                         bool DeleteArgs) {
   2415   // Loop over all of the template arguments, setting them to the specified
   2416   // value or leaving them as the default if necessary.
   2417   for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
   2418     // Check if a value is specified for this temp-arg.
   2419     if (i < TemplateVals.size()) {
   2420       // Set it now.
   2421       if (SetValue(CurRec, DefmPrefixLoc, TArgs[i], std::vector<unsigned>(),
   2422                    TemplateVals[i]))
   2423         return true;
   2424 
   2425       // Resolve it next.
   2426       CurRec->resolveReferencesTo(CurRec->getValue(TArgs[i]));
   2427 
   2428       if (DeleteArgs)
   2429         // Now remove it.
   2430         CurRec->removeValue(TArgs[i]);
   2431 
   2432     } else if (!CurRec->getValue(TArgs[i])->getValue()->isComplete()) {
   2433       return Error(SubClassLoc, "value not specified for template argument #"+
   2434                    utostr(i) + " (" + TArgs[i]->getAsUnquotedString()
   2435                    + ") of multiclassclass '" + MC.Rec.getNameInitAsString()
   2436                    + "'");
   2437     }
   2438   }
   2439   return false;
   2440 }
   2441 
   2442 bool TGParser::ResolveMulticlassDef(MultiClass &MC,
   2443                                     Record *CurRec,
   2444                                     Record *DefProto,
   2445                                     SMLoc DefmPrefixLoc) {
   2446   // If the mdef is inside a 'let' expression, add to each def.
   2447   if (ApplyLetStack(CurRec))
   2448     return Error(DefmPrefixLoc, "when instantiating this defm");
   2449 
   2450   // Don't create a top level definition for defm inside multiclasses,
   2451   // instead, only update the prototypes and bind the template args
   2452   // with the new created definition.
   2453   if (!CurMultiClass)
   2454     return false;
   2455   for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size();
   2456        i != e; ++i)
   2457     if (CurMultiClass->DefPrototypes[i]->getNameInit()
   2458         == CurRec->getNameInit())
   2459       return Error(DefmPrefixLoc, "defm '" + CurRec->getNameInitAsString() +
   2460                    "' already defined in this multiclass!");
   2461   CurMultiClass->DefPrototypes.push_back(CurRec);
   2462 
   2463   // Copy the template arguments for the multiclass into the new def.
   2464   const std::vector<Init *> &TA =
   2465     CurMultiClass->Rec.getTemplateArgs();
   2466 
   2467   for (unsigned i = 0, e = TA.size(); i != e; ++i) {
   2468     const RecordVal *RV = CurMultiClass->Rec.getValue(TA[i]);
   2469     assert(RV && "Template arg doesn't exist?");
   2470     CurRec->addValue(*RV);
   2471   }
   2472 
   2473   return false;
   2474 }
   2475 
   2476 /// ParseDefm - Parse the instantiation of a multiclass.
   2477 ///
   2478 ///   DefMInst ::= DEFM ID ':' DefmSubClassRef ';'
   2479 ///
   2480 bool TGParser::ParseDefm(MultiClass *CurMultiClass) {
   2481   assert(Lex.getCode() == tgtok::Defm && "Unexpected token!");
   2482   SMLoc DefmLoc = Lex.getLoc();
   2483   Init *DefmPrefix = nullptr;
   2484 
   2485   if (Lex.Lex() == tgtok::Id) {  // eat the defm.
   2486     DefmPrefix = ParseObjectName(CurMultiClass);
   2487   }
   2488 
   2489   SMLoc DefmPrefixEndLoc = Lex.getLoc();
   2490   if (Lex.getCode() != tgtok::colon)
   2491     return TokError("expected ':' after defm identifier");
   2492 
   2493   // Keep track of the new generated record definitions.
   2494   std::vector<Record*> NewRecDefs;
   2495 
   2496   // This record also inherits from a regular class (non-multiclass)?
   2497   bool InheritFromClass = false;
   2498 
   2499   // eat the colon.
   2500   Lex.Lex();
   2501 
   2502   SMLoc SubClassLoc = Lex.getLoc();
   2503   SubClassReference Ref = ParseSubClassReference(nullptr, true);
   2504 
   2505   while (1) {
   2506     if (!Ref.Rec) return true;
   2507 
   2508     // To instantiate a multiclass, we need to first get the multiclass, then
   2509     // instantiate each def contained in the multiclass with the SubClassRef
   2510     // template parameters.
   2511     MultiClass *MC = MultiClasses[Ref.Rec->getName()];
   2512     assert(MC && "Didn't lookup multiclass correctly?");
   2513     std::vector<Init*> &TemplateVals = Ref.TemplateArgs;
   2514 
   2515     // Verify that the correct number of template arguments were specified.
   2516     const std::vector<Init *> &TArgs = MC->Rec.getTemplateArgs();
   2517     if (TArgs.size() < TemplateVals.size())
   2518       return Error(SubClassLoc,
   2519                    "more template args specified than multiclass expects");
   2520 
   2521     // Loop over all the def's in the multiclass, instantiating each one.
   2522     for (unsigned i = 0, e = MC->DefPrototypes.size(); i != e; ++i) {
   2523       Record *DefProto = MC->DefPrototypes[i];
   2524 
   2525       Record *CurRec = InstantiateMulticlassDef(*MC, DefProto, DefmPrefix,
   2526                                                 SMRange(DefmLoc,
   2527                                                         DefmPrefixEndLoc));
   2528       if (!CurRec)
   2529         return true;
   2530 
   2531       if (ResolveMulticlassDefArgs(*MC, CurRec, DefmLoc, SubClassLoc,
   2532                                    TArgs, TemplateVals, true/*Delete args*/))
   2533         return Error(SubClassLoc, "could not instantiate def");
   2534 
   2535       if (ResolveMulticlassDef(*MC, CurRec, DefProto, DefmLoc))
   2536         return Error(SubClassLoc, "could not instantiate def");
   2537 
   2538       NewRecDefs.push_back(CurRec);
   2539     }
   2540 
   2541 
   2542     if (Lex.getCode() != tgtok::comma) break;
   2543     Lex.Lex(); // eat ','.
   2544 
   2545     if (Lex.getCode() != tgtok::Id)
   2546       return TokError("expected identifier");
   2547 
   2548     SubClassLoc = Lex.getLoc();
   2549 
   2550     // A defm can inherit from regular classes (non-multiclass) as
   2551     // long as they come in the end of the inheritance list.
   2552     InheritFromClass = (Records.getClass(Lex.getCurStrVal()) != nullptr);
   2553 
   2554     if (InheritFromClass)
   2555       break;
   2556 
   2557     Ref = ParseSubClassReference(nullptr, true);
   2558   }
   2559 
   2560   if (InheritFromClass) {
   2561     // Process all the classes to inherit as if they were part of a
   2562     // regular 'def' and inherit all record values.
   2563     SubClassReference SubClass = ParseSubClassReference(nullptr, false);
   2564     while (1) {
   2565       // Check for error.
   2566       if (!SubClass.Rec) return true;
   2567 
   2568       // Get the expanded definition prototypes and teach them about
   2569       // the record values the current class to inherit has
   2570       for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i) {
   2571         Record *CurRec = NewRecDefs[i];
   2572 
   2573         // Add it.
   2574         if (AddSubClass(CurRec, SubClass))
   2575           return true;
   2576 
   2577         if (ApplyLetStack(CurRec))
   2578           return true;
   2579       }
   2580 
   2581       if (Lex.getCode() != tgtok::comma) break;
   2582       Lex.Lex(); // eat ','.
   2583       SubClass = ParseSubClassReference(nullptr, false);
   2584     }
   2585   }
   2586 
   2587   if (!CurMultiClass)
   2588     for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i)
   2589       // See Record::setName().  This resolve step will see any new
   2590       // name for the def that might have been created when resolving
   2591       // inheritance, values and arguments above.
   2592       NewRecDefs[i]->resolveReferences();
   2593 
   2594   if (Lex.getCode() != tgtok::semi)
   2595     return TokError("expected ';' at end of defm");
   2596   Lex.Lex();
   2597 
   2598   return false;
   2599 }
   2600 
   2601 /// ParseObject
   2602 ///   Object ::= ClassInst
   2603 ///   Object ::= DefInst
   2604 ///   Object ::= MultiClassInst
   2605 ///   Object ::= DefMInst
   2606 ///   Object ::= LETCommand '{' ObjectList '}'
   2607 ///   Object ::= LETCommand Object
   2608 bool TGParser::ParseObject(MultiClass *MC) {
   2609   switch (Lex.getCode()) {
   2610   default:
   2611     return TokError("Expected class, def, defm, multiclass or let definition");
   2612   case tgtok::Let:   return ParseTopLevelLet(MC);
   2613   case tgtok::Def:   return ParseDef(MC);
   2614   case tgtok::Foreach:   return ParseForeach(MC);
   2615   case tgtok::Defm:  return ParseDefm(MC);
   2616   case tgtok::Class: return ParseClass();
   2617   case tgtok::MultiClass: return ParseMultiClass();
   2618   }
   2619 }
   2620 
   2621 /// ParseObjectList
   2622 ///   ObjectList :== Object*
   2623 bool TGParser::ParseObjectList(MultiClass *MC) {
   2624   while (isObjectStart(Lex.getCode())) {
   2625     if (ParseObject(MC))
   2626       return true;
   2627   }
   2628   return false;
   2629 }
   2630 
   2631 bool TGParser::ParseFile() {
   2632   Lex.Lex(); // Prime the lexer.
   2633   if (ParseObjectList()) return true;
   2634 
   2635   // If we have unread input at the end of the file, report it.
   2636   if (Lex.getCode() == tgtok::Eof)
   2637     return false;
   2638 
   2639   return TokError("Unexpected input at top level");
   2640 }
   2641 
   2642