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