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/TableGen/Record.h"
     16 #include "llvm/ADT/StringExtras.h"
     17 #include <algorithm>
     18 #include <sstream>
     19 #include "llvm/ADT/SmallVector.h"
     20 #include "llvm/Support/CommandLine.h"
     21 using namespace llvm;
     22 
     23 //===----------------------------------------------------------------------===//
     24 // Support Code for the Semantic Actions.
     25 //===----------------------------------------------------------------------===//
     26 
     27 namespace llvm {
     28 struct SubClassReference {
     29   SMLoc RefLoc;
     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   SMLoc RefLoc;
     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.getName())) {
     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, const std::string &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 + "' unknown!");
     91 
     92   // Do not allow assignments like 'X = X'.  This will just cause infinite loops
     93   // in the resolution machinery.
     94   if (BitList.empty())
     95     if (VarInit *VI = dynamic_cast<VarInit*>(V))
     96       if (VI->getName() == ValName)
     97         return false;
     98 
     99   // If we are assigning to a subset of the bits in the value... then we must be
    100   // assigning to a field of BitsRecTy, which must have a BitsInit
    101   // initializer.
    102   //
    103   if (!BitList.empty()) {
    104     BitsInit *CurVal = dynamic_cast<BitsInit*>(RV->getValue());
    105     if (CurVal == 0)
    106       return Error(Loc, "Value '" + ValName + "' is not a bits type");
    107 
    108     // Convert the incoming value to a bits type of the appropriate size...
    109     Init *BI = V->convertInitializerTo(BitsRecTy::get(BitList.size()));
    110     if (BI == 0) {
    111       V->convertInitializerTo(BitsRecTy::get(BitList.size()));
    112       return Error(Loc, "Initializer is not compatible with bit range");
    113     }
    114 
    115     // We should have a BitsInit type now.
    116     BitsInit *BInit = dynamic_cast<BitsInit*>(BI);
    117     assert(BInit != 0);
    118 
    119     SmallVector<Init *, 16> NewBits(CurVal->getNumBits());
    120 
    121     // Loop over bits, assigning values as appropriate.
    122     for (unsigned i = 0, e = BitList.size(); i != e; ++i) {
    123       unsigned Bit = BitList[i];
    124       if (NewBits[Bit])
    125         return Error(Loc, "Cannot set bit #" + utostr(Bit) + " of value '" +
    126                      ValName + "' more than once");
    127       NewBits[Bit] = BInit->getBit(i);
    128     }
    129 
    130     for (unsigned i = 0, e = CurVal->getNumBits(); i != e; ++i)
    131       if (NewBits[i] == 0)
    132         NewBits[i] = CurVal->getBit(i);
    133 
    134     V = BitsInit::get(NewBits);
    135   }
    136 
    137   if (RV->setValue(V))
    138    return Error(Loc, "Value '" + ValName + "' of type '" +
    139                 RV->getType()->getAsString() +
    140                 "' is incompatible with initializer '" + V->getAsString() +"'");
    141   return false;
    142 }
    143 
    144 /// AddSubClass - Add SubClass as a subclass to CurRec, resolving its template
    145 /// args as SubClass's template arguments.
    146 bool TGParser::AddSubClass(Record *CurRec, SubClassReference &SubClass) {
    147   Record *SC = SubClass.Rec;
    148   // Add all of the values in the subclass into the current class.
    149   const std::vector<RecordVal> &Vals = SC->getValues();
    150   for (unsigned i = 0, e = Vals.size(); i != e; ++i)
    151     if (AddValue(CurRec, SubClass.RefLoc, Vals[i]))
    152       return true;
    153 
    154   const std::vector<std::string> &TArgs = SC->getTemplateArgs();
    155 
    156   // Ensure that an appropriate number of template arguments are specified.
    157   if (TArgs.size() < SubClass.TemplateArgs.size())
    158     return Error(SubClass.RefLoc, "More template args specified than expected");
    159 
    160   // Loop over all of the template arguments, setting them to the specified
    161   // value or leaving them as the default if necessary.
    162   for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
    163     if (i < SubClass.TemplateArgs.size()) {
    164       // If a value is specified for this template arg, set it now.
    165       if (SetValue(CurRec, SubClass.RefLoc, TArgs[i], std::vector<unsigned>(),
    166                    SubClass.TemplateArgs[i]))
    167         return true;
    168 
    169       // Resolve it next.
    170       CurRec->resolveReferencesTo(CurRec->getValue(TArgs[i]));
    171 
    172       // Now remove it.
    173       CurRec->removeValue(TArgs[i]);
    174 
    175     } else if (!CurRec->getValue(TArgs[i])->getValue()->isComplete()) {
    176       return Error(SubClass.RefLoc,"Value not specified for template argument #"
    177                    + utostr(i) + " (" + TArgs[i] + ") of subclass '" +
    178                    SC->getName() + "'!");
    179     }
    180   }
    181 
    182   // Since everything went well, we can now set the "superclass" list for the
    183   // current record.
    184   const std::vector<Record*> &SCs = SC->getSuperClasses();
    185   for (unsigned i = 0, e = SCs.size(); i != e; ++i) {
    186     if (CurRec->isSubClassOf(SCs[i]))
    187       return Error(SubClass.RefLoc,
    188                    "Already subclass of '" + SCs[i]->getName() + "'!\n");
    189     CurRec->addSuperClass(SCs[i]);
    190   }
    191 
    192   if (CurRec->isSubClassOf(SC))
    193     return Error(SubClass.RefLoc,
    194                  "Already subclass of '" + SC->getName() + "'!\n");
    195   CurRec->addSuperClass(SC);
    196   return false;
    197 }
    198 
    199 /// AddSubMultiClass - Add SubMultiClass as a subclass to
    200 /// CurMC, resolving its template args as SubMultiClass's
    201 /// template arguments.
    202 bool TGParser::AddSubMultiClass(MultiClass *CurMC,
    203                                 SubMultiClassReference &SubMultiClass) {
    204   MultiClass *SMC = SubMultiClass.MC;
    205   Record *CurRec = &CurMC->Rec;
    206 
    207   const std::vector<RecordVal> &MCVals = CurRec->getValues();
    208 
    209   // Add all of the values in the subclass into the current class.
    210   const std::vector<RecordVal> &SMCVals = SMC->Rec.getValues();
    211   for (unsigned i = 0, e = SMCVals.size(); i != e; ++i)
    212     if (AddValue(CurRec, SubMultiClass.RefLoc, SMCVals[i]))
    213       return true;
    214 
    215   int newDefStart = CurMC->DefPrototypes.size();
    216 
    217   // Add all of the defs in the subclass into the current multiclass.
    218   for (MultiClass::RecordVector::const_iterator i = SMC->DefPrototypes.begin(),
    219          iend = SMC->DefPrototypes.end();
    220        i != iend;
    221        ++i) {
    222     // Clone the def and add it to the current multiclass
    223     Record *NewDef = new Record(**i);
    224 
    225     // Add all of the values in the superclass into the current def.
    226     for (unsigned i = 0, e = MCVals.size(); i != e; ++i)
    227       if (AddValue(NewDef, SubMultiClass.RefLoc, MCVals[i]))
    228         return true;
    229 
    230     CurMC->DefPrototypes.push_back(NewDef);
    231   }
    232 
    233   const std::vector<std::string> &SMCTArgs = SMC->Rec.getTemplateArgs();
    234 
    235   // Ensure that an appropriate number of template arguments are
    236   // specified.
    237   if (SMCTArgs.size() < SubMultiClass.TemplateArgs.size())
    238     return Error(SubMultiClass.RefLoc,
    239                  "More template args specified than expected");
    240 
    241   // Loop over all of the template arguments, setting them to the specified
    242   // value or leaving them as the default if necessary.
    243   for (unsigned i = 0, e = SMCTArgs.size(); i != e; ++i) {
    244     if (i < SubMultiClass.TemplateArgs.size()) {
    245       // If a value is specified for this template arg, set it in the
    246       // superclass now.
    247       if (SetValue(CurRec, SubMultiClass.RefLoc, SMCTArgs[i],
    248                    std::vector<unsigned>(),
    249                    SubMultiClass.TemplateArgs[i]))
    250         return true;
    251 
    252       // Resolve it next.
    253       CurRec->resolveReferencesTo(CurRec->getValue(SMCTArgs[i]));
    254 
    255       // Now remove it.
    256       CurRec->removeValue(SMCTArgs[i]);
    257 
    258       // If a value is specified for this template arg, set it in the
    259       // new defs now.
    260       for (MultiClass::RecordVector::iterator j =
    261              CurMC->DefPrototypes.begin() + newDefStart,
    262              jend = CurMC->DefPrototypes.end();
    263            j != jend;
    264            ++j) {
    265         Record *Def = *j;
    266 
    267         if (SetValue(Def, SubMultiClass.RefLoc, SMCTArgs[i],
    268                      std::vector<unsigned>(),
    269                      SubMultiClass.TemplateArgs[i]))
    270           return true;
    271 
    272         // Resolve it next.
    273         Def->resolveReferencesTo(Def->getValue(SMCTArgs[i]));
    274 
    275         // Now remove it
    276         Def->removeValue(SMCTArgs[i]);
    277       }
    278     } else if (!CurRec->getValue(SMCTArgs[i])->getValue()->isComplete()) {
    279       return Error(SubMultiClass.RefLoc,
    280                    "Value not specified for template argument #"
    281                    + utostr(i) + " (" + SMCTArgs[i] + ") of subclass '" +
    282                    SMC->Rec.getName() + "'!");
    283     }
    284   }
    285 
    286   return false;
    287 }
    288 
    289 //===----------------------------------------------------------------------===//
    290 // Parser Code
    291 //===----------------------------------------------------------------------===//
    292 
    293 /// isObjectStart - Return true if this is a valid first token for an Object.
    294 static bool isObjectStart(tgtok::TokKind K) {
    295   return K == tgtok::Class || K == tgtok::Def ||
    296          K == tgtok::Defm || K == tgtok::Let || K == tgtok::MultiClass;
    297 }
    298 
    299 static std::string GetNewAnonymousName() {
    300   static unsigned AnonCounter = 0;
    301   return "anonymous."+utostr(AnonCounter++);
    302 }
    303 
    304 /// ParseObjectName - If an object name is specified, return it.  Otherwise,
    305 /// return an anonymous name.
    306 ///   ObjectName ::= ID
    307 ///   ObjectName ::= /*empty*/
    308 ///
    309 std::string TGParser::ParseObjectName() {
    310   if (Lex.getCode() != tgtok::Id)
    311     return GetNewAnonymousName();
    312 
    313   std::string Ret = Lex.getCurStrVal();
    314   Lex.Lex();
    315   return Ret;
    316 }
    317 
    318 
    319 /// ParseClassID - Parse and resolve a reference to a class name.  This returns
    320 /// null on error.
    321 ///
    322 ///    ClassID ::= ID
    323 ///
    324 Record *TGParser::ParseClassID() {
    325   if (Lex.getCode() != tgtok::Id) {
    326     TokError("expected name for ClassID");
    327     return 0;
    328   }
    329 
    330   Record *Result = Records.getClass(Lex.getCurStrVal());
    331   if (Result == 0)
    332     TokError("Couldn't find class '" + Lex.getCurStrVal() + "'");
    333 
    334   Lex.Lex();
    335   return Result;
    336 }
    337 
    338 /// ParseMultiClassID - Parse and resolve a reference to a multiclass name.
    339 /// This returns null on error.
    340 ///
    341 ///    MultiClassID ::= ID
    342 ///
    343 MultiClass *TGParser::ParseMultiClassID() {
    344   if (Lex.getCode() != tgtok::Id) {
    345     TokError("expected name for ClassID");
    346     return 0;
    347   }
    348 
    349   MultiClass *Result = MultiClasses[Lex.getCurStrVal()];
    350   if (Result == 0)
    351     TokError("Couldn't find class '" + Lex.getCurStrVal() + "'");
    352 
    353   Lex.Lex();
    354   return Result;
    355 }
    356 
    357 Record *TGParser::ParseDefmID() {
    358   if (Lex.getCode() != tgtok::Id) {
    359     TokError("expected multiclass name");
    360     return 0;
    361   }
    362 
    363   MultiClass *MC = MultiClasses[Lex.getCurStrVal()];
    364   if (MC == 0) {
    365     TokError("Couldn't find multiclass '" + Lex.getCurStrVal() + "'");
    366     return 0;
    367   }
    368 
    369   Lex.Lex();
    370   return &MC->Rec;
    371 }
    372 
    373 
    374 /// ParseSubClassReference - Parse a reference to a subclass or to a templated
    375 /// subclass.  This returns a SubClassRefTy with a null Record* on error.
    376 ///
    377 ///  SubClassRef ::= ClassID
    378 ///  SubClassRef ::= ClassID '<' ValueList '>'
    379 ///
    380 SubClassReference TGParser::
    381 ParseSubClassReference(Record *CurRec, bool isDefm) {
    382   SubClassReference Result;
    383   Result.RefLoc = Lex.getLoc();
    384 
    385   if (isDefm)
    386     Result.Rec = ParseDefmID();
    387   else
    388     Result.Rec = ParseClassID();
    389   if (Result.Rec == 0) return Result;
    390 
    391   // If there is no template arg list, we're done.
    392   if (Lex.getCode() != tgtok::less)
    393     return Result;
    394   Lex.Lex();  // Eat the '<'
    395 
    396   if (Lex.getCode() == tgtok::greater) {
    397     TokError("subclass reference requires a non-empty list of template values");
    398     Result.Rec = 0;
    399     return Result;
    400   }
    401 
    402   Result.TemplateArgs = ParseValueList(CurRec, Result.Rec);
    403   if (Result.TemplateArgs.empty()) {
    404     Result.Rec = 0;   // Error parsing value list.
    405     return Result;
    406   }
    407 
    408   if (Lex.getCode() != tgtok::greater) {
    409     TokError("expected '>' in template value list");
    410     Result.Rec = 0;
    411     return Result;
    412   }
    413   Lex.Lex();
    414 
    415   return Result;
    416 }
    417 
    418 /// ParseSubMultiClassReference - Parse a reference to a subclass or to a
    419 /// templated submulticlass.  This returns a SubMultiClassRefTy with a null
    420 /// Record* on error.
    421 ///
    422 ///  SubMultiClassRef ::= MultiClassID
    423 ///  SubMultiClassRef ::= MultiClassID '<' ValueList '>'
    424 ///
    425 SubMultiClassReference TGParser::
    426 ParseSubMultiClassReference(MultiClass *CurMC) {
    427   SubMultiClassReference Result;
    428   Result.RefLoc = Lex.getLoc();
    429 
    430   Result.MC = ParseMultiClassID();
    431   if (Result.MC == 0) return Result;
    432 
    433   // If there is no template arg list, we're done.
    434   if (Lex.getCode() != tgtok::less)
    435     return Result;
    436   Lex.Lex();  // Eat the '<'
    437 
    438   if (Lex.getCode() == tgtok::greater) {
    439     TokError("subclass reference requires a non-empty list of template values");
    440     Result.MC = 0;
    441     return Result;
    442   }
    443 
    444   Result.TemplateArgs = ParseValueList(&CurMC->Rec, &Result.MC->Rec);
    445   if (Result.TemplateArgs.empty()) {
    446     Result.MC = 0;   // Error parsing value list.
    447     return Result;
    448   }
    449 
    450   if (Lex.getCode() != tgtok::greater) {
    451     TokError("expected '>' in template value list");
    452     Result.MC = 0;
    453     return Result;
    454   }
    455   Lex.Lex();
    456 
    457   return Result;
    458 }
    459 
    460 /// ParseRangePiece - Parse a bit/value range.
    461 ///   RangePiece ::= INTVAL
    462 ///   RangePiece ::= INTVAL '-' INTVAL
    463 ///   RangePiece ::= INTVAL INTVAL
    464 bool TGParser::ParseRangePiece(std::vector<unsigned> &Ranges) {
    465   if (Lex.getCode() != tgtok::IntVal) {
    466     TokError("expected integer or bitrange");
    467     return true;
    468   }
    469   int64_t Start = Lex.getCurIntVal();
    470   int64_t End;
    471 
    472   if (Start < 0)
    473     return TokError("invalid range, cannot be negative");
    474 
    475   switch (Lex.Lex()) {  // eat first character.
    476   default:
    477     Ranges.push_back(Start);
    478     return false;
    479   case tgtok::minus:
    480     if (Lex.Lex() != tgtok::IntVal) {
    481       TokError("expected integer value as end of range");
    482       return true;
    483     }
    484     End = Lex.getCurIntVal();
    485     break;
    486   case tgtok::IntVal:
    487     End = -Lex.getCurIntVal();
    488     break;
    489   }
    490   if (End < 0)
    491     return TokError("invalid range, cannot be negative");
    492   Lex.Lex();
    493 
    494   // Add to the range.
    495   if (Start < End) {
    496     for (; Start <= End; ++Start)
    497       Ranges.push_back(Start);
    498   } else {
    499     for (; Start >= End; --Start)
    500       Ranges.push_back(Start);
    501   }
    502   return false;
    503 }
    504 
    505 /// ParseRangeList - Parse a list of scalars and ranges into scalar values.
    506 ///
    507 ///   RangeList ::= RangePiece (',' RangePiece)*
    508 ///
    509 std::vector<unsigned> TGParser::ParseRangeList() {
    510   std::vector<unsigned> Result;
    511 
    512   // Parse the first piece.
    513   if (ParseRangePiece(Result))
    514     return std::vector<unsigned>();
    515   while (Lex.getCode() == tgtok::comma) {
    516     Lex.Lex();  // Eat the comma.
    517 
    518     // Parse the next range piece.
    519     if (ParseRangePiece(Result))
    520       return std::vector<unsigned>();
    521   }
    522   return Result;
    523 }
    524 
    525 /// ParseOptionalRangeList - Parse either a range list in <>'s or nothing.
    526 ///   OptionalRangeList ::= '<' RangeList '>'
    527 ///   OptionalRangeList ::= /*empty*/
    528 bool TGParser::ParseOptionalRangeList(std::vector<unsigned> &Ranges) {
    529   if (Lex.getCode() != tgtok::less)
    530     return false;
    531 
    532   SMLoc StartLoc = Lex.getLoc();
    533   Lex.Lex(); // eat the '<'
    534 
    535   // Parse the range list.
    536   Ranges = ParseRangeList();
    537   if (Ranges.empty()) return true;
    538 
    539   if (Lex.getCode() != tgtok::greater) {
    540     TokError("expected '>' at end of range list");
    541     return Error(StartLoc, "to match this '<'");
    542   }
    543   Lex.Lex();   // eat the '>'.
    544   return false;
    545 }
    546 
    547 /// ParseOptionalBitList - Parse either a bit list in {}'s or nothing.
    548 ///   OptionalBitList ::= '{' RangeList '}'
    549 ///   OptionalBitList ::= /*empty*/
    550 bool TGParser::ParseOptionalBitList(std::vector<unsigned> &Ranges) {
    551   if (Lex.getCode() != tgtok::l_brace)
    552     return false;
    553 
    554   SMLoc StartLoc = Lex.getLoc();
    555   Lex.Lex(); // eat the '{'
    556 
    557   // Parse the range list.
    558   Ranges = ParseRangeList();
    559   if (Ranges.empty()) return true;
    560 
    561   if (Lex.getCode() != tgtok::r_brace) {
    562     TokError("expected '}' at end of bit list");
    563     return Error(StartLoc, "to match this '{'");
    564   }
    565   Lex.Lex();   // eat the '}'.
    566   return false;
    567 }
    568 
    569 
    570 /// ParseType - Parse and return a tblgen type.  This returns null on error.
    571 ///
    572 ///   Type ::= STRING                       // string type
    573 ///   Type ::= BIT                          // bit type
    574 ///   Type ::= BITS '<' INTVAL '>'          // bits<x> type
    575 ///   Type ::= INT                          // int type
    576 ///   Type ::= LIST '<' Type '>'            // list<x> type
    577 ///   Type ::= CODE                         // code type
    578 ///   Type ::= DAG                          // dag type
    579 ///   Type ::= ClassID                      // Record Type
    580 ///
    581 RecTy *TGParser::ParseType() {
    582   switch (Lex.getCode()) {
    583   default: TokError("Unknown token when expecting a type"); return 0;
    584   case tgtok::String: Lex.Lex(); return StringRecTy::get();
    585   case tgtok::Bit:    Lex.Lex(); return BitRecTy::get();
    586   case tgtok::Int:    Lex.Lex(); return IntRecTy::get();
    587   case tgtok::Code:   Lex.Lex(); return CodeRecTy::get();
    588   case tgtok::Dag:    Lex.Lex(); return DagRecTy::get();
    589   case tgtok::Id:
    590     if (Record *R = ParseClassID()) return RecordRecTy::get(R);
    591     return 0;
    592   case tgtok::Bits: {
    593     if (Lex.Lex() != tgtok::less) { // Eat 'bits'
    594       TokError("expected '<' after bits type");
    595       return 0;
    596     }
    597     if (Lex.Lex() != tgtok::IntVal) {  // Eat '<'
    598       TokError("expected integer in bits<n> type");
    599       return 0;
    600     }
    601     uint64_t Val = Lex.getCurIntVal();
    602     if (Lex.Lex() != tgtok::greater) {  // Eat count.
    603       TokError("expected '>' at end of bits<n> type");
    604       return 0;
    605     }
    606     Lex.Lex();  // Eat '>'
    607     return BitsRecTy::get(Val);
    608   }
    609   case tgtok::List: {
    610     if (Lex.Lex() != tgtok::less) { // Eat 'bits'
    611       TokError("expected '<' after list type");
    612       return 0;
    613     }
    614     Lex.Lex();  // Eat '<'
    615     RecTy *SubType = ParseType();
    616     if (SubType == 0) return 0;
    617 
    618     if (Lex.getCode() != tgtok::greater) {
    619       TokError("expected '>' at end of list<ty> type");
    620       return 0;
    621     }
    622     Lex.Lex();  // Eat '>'
    623     return ListRecTy::get(SubType);
    624   }
    625   }
    626 }
    627 
    628 /// ParseIDValue - Parse an ID as a value and decode what it means.
    629 ///
    630 ///  IDValue ::= ID [def local value]
    631 ///  IDValue ::= ID [def template arg]
    632 ///  IDValue ::= ID [multiclass local value]
    633 ///  IDValue ::= ID [multiclass template argument]
    634 ///  IDValue ::= ID [def name]
    635 ///
    636 Init *TGParser::ParseIDValue(Record *CurRec) {
    637   assert(Lex.getCode() == tgtok::Id && "Expected ID in ParseIDValue");
    638   std::string Name = Lex.getCurStrVal();
    639   SMLoc Loc = Lex.getLoc();
    640   Lex.Lex();
    641   return ParseIDValue(CurRec, Name, Loc);
    642 }
    643 
    644 /// ParseIDValue - This is just like ParseIDValue above, but it assumes the ID
    645 /// has already been read.
    646 Init *TGParser::ParseIDValue(Record *CurRec,
    647                              const std::string &Name, SMLoc NameLoc) {
    648   if (CurRec) {
    649     if (const RecordVal *RV = CurRec->getValue(Name))
    650       return VarInit::get(Name, RV->getType());
    651 
    652     std::string TemplateArgName = CurRec->getName()+":"+Name;
    653     if (CurMultiClass)
    654       TemplateArgName = CurMultiClass->Rec.getName()+"::"+TemplateArgName;
    655 
    656     if (CurRec->isTemplateArg(TemplateArgName)) {
    657       const RecordVal *RV = CurRec->getValue(TemplateArgName);
    658       assert(RV && "Template arg doesn't exist??");
    659       return VarInit::get(TemplateArgName, RV->getType());
    660     }
    661   }
    662 
    663   if (CurMultiClass) {
    664     std::string MCName = CurMultiClass->Rec.getName()+"::"+Name;
    665     if (CurMultiClass->Rec.isTemplateArg(MCName)) {
    666       const RecordVal *RV = CurMultiClass->Rec.getValue(MCName);
    667       assert(RV && "Template arg doesn't exist??");
    668       return VarInit::get(MCName, RV->getType());
    669     }
    670   }
    671 
    672   if (Record *D = Records.getDef(Name))
    673     return DefInit::get(D);
    674 
    675   Error(NameLoc, "Variable not defined: '" + Name + "'");
    676   return 0;
    677 }
    678 
    679 /// ParseOperation - Parse an operator.  This returns null on error.
    680 ///
    681 /// Operation ::= XOperator ['<' Type '>'] '(' Args ')'
    682 ///
    683 Init *TGParser::ParseOperation(Record *CurRec) {
    684   switch (Lex.getCode()) {
    685   default:
    686     TokError("unknown operation");
    687     return 0;
    688     break;
    689   case tgtok::XHead:
    690   case tgtok::XTail:
    691   case tgtok::XEmpty:
    692   case tgtok::XCast: {  // Value ::= !unop '(' Value ')'
    693     UnOpInit::UnaryOp Code;
    694     RecTy *Type = 0;
    695 
    696     switch (Lex.getCode()) {
    697     default: assert(0 && "Unhandled code!");
    698     case tgtok::XCast:
    699       Lex.Lex();  // eat the operation
    700       Code = UnOpInit::CAST;
    701 
    702       Type = ParseOperatorType();
    703 
    704       if (Type == 0) {
    705         TokError("did not get type for unary operator");
    706         return 0;
    707       }
    708 
    709       break;
    710     case tgtok::XHead:
    711       Lex.Lex();  // eat the operation
    712       Code = UnOpInit::HEAD;
    713       break;
    714     case tgtok::XTail:
    715       Lex.Lex();  // eat the operation
    716       Code = UnOpInit::TAIL;
    717       break;
    718     case tgtok::XEmpty:
    719       Lex.Lex();  // eat the operation
    720       Code = UnOpInit::EMPTY;
    721       Type = IntRecTy::get();
    722       break;
    723     }
    724     if (Lex.getCode() != tgtok::l_paren) {
    725       TokError("expected '(' after unary operator");
    726       return 0;
    727     }
    728     Lex.Lex();  // eat the '('
    729 
    730     Init *LHS = ParseValue(CurRec);
    731     if (LHS == 0) return 0;
    732 
    733     if (Code == UnOpInit::HEAD
    734         || Code == UnOpInit::TAIL
    735         || Code == UnOpInit::EMPTY) {
    736       ListInit *LHSl = dynamic_cast<ListInit*>(LHS);
    737       StringInit *LHSs = dynamic_cast<StringInit*>(LHS);
    738       TypedInit *LHSt = dynamic_cast<TypedInit*>(LHS);
    739       if (LHSl == 0 && LHSs == 0 && LHSt == 0) {
    740         TokError("expected list or string type argument in unary operator");
    741         return 0;
    742       }
    743       if (LHSt) {
    744         ListRecTy *LType = dynamic_cast<ListRecTy*>(LHSt->getType());
    745         StringRecTy *SType = dynamic_cast<StringRecTy*>(LHSt->getType());
    746         if (LType == 0 && SType == 0) {
    747           TokError("expected list or string type argumnet in unary operator");
    748           return 0;
    749         }
    750       }
    751 
    752       if (Code == UnOpInit::HEAD
    753           || Code == UnOpInit::TAIL) {
    754         if (LHSl == 0 && LHSt == 0) {
    755           TokError("expected list type argumnet in unary operator");
    756           return 0;
    757         }
    758 
    759         if (LHSl && LHSl->getSize() == 0) {
    760           TokError("empty list argument in unary operator");
    761           return 0;
    762         }
    763         if (LHSl) {
    764           Init *Item = LHSl->getElement(0);
    765           TypedInit *Itemt = dynamic_cast<TypedInit*>(Item);
    766           if (Itemt == 0) {
    767             TokError("untyped list element in unary operator");
    768             return 0;
    769           }
    770           if (Code == UnOpInit::HEAD) {
    771             Type = Itemt->getType();
    772           } else {
    773             Type = ListRecTy::get(Itemt->getType());
    774           }
    775         } else {
    776           assert(LHSt && "expected list type argument in unary operator");
    777           ListRecTy *LType = dynamic_cast<ListRecTy*>(LHSt->getType());
    778           if (LType == 0) {
    779             TokError("expected list type argumnet in unary operator");
    780             return 0;
    781           }
    782           if (Code == UnOpInit::HEAD) {
    783             Type = LType->getElementType();
    784           } else {
    785             Type = LType;
    786           }
    787         }
    788       }
    789     }
    790 
    791     if (Lex.getCode() != tgtok::r_paren) {
    792       TokError("expected ')' in unary operator");
    793       return 0;
    794     }
    795     Lex.Lex();  // eat the ')'
    796     return (UnOpInit::get(Code, LHS, Type))->Fold(CurRec, CurMultiClass);
    797   }
    798 
    799   case tgtok::XConcat:
    800   case tgtok::XSRA:
    801   case tgtok::XSRL:
    802   case tgtok::XSHL:
    803   case tgtok::XEq:
    804   case tgtok::XStrConcat: {  // Value ::= !binop '(' Value ',' Value ')'
    805     tgtok::TokKind OpTok = Lex.getCode();
    806     SMLoc OpLoc = Lex.getLoc();
    807     Lex.Lex();  // eat the operation
    808 
    809     BinOpInit::BinaryOp Code;
    810     RecTy *Type = 0;
    811 
    812     switch (OpTok) {
    813     default: assert(0 && "Unhandled code!");
    814     case tgtok::XConcat: Code = BinOpInit::CONCAT;Type = DagRecTy::get(); break;
    815     case tgtok::XSRA:    Code = BinOpInit::SRA;   Type = IntRecTy::get(); break;
    816     case tgtok::XSRL:    Code = BinOpInit::SRL;   Type = IntRecTy::get(); break;
    817     case tgtok::XSHL:    Code = BinOpInit::SHL;   Type = IntRecTy::get(); break;
    818     case tgtok::XEq:     Code = BinOpInit::EQ;    Type = BitRecTy::get(); break;
    819     case tgtok::XStrConcat:
    820       Code = BinOpInit::STRCONCAT;
    821       Type = StringRecTy::get();
    822       break;
    823     }
    824 
    825     if (Lex.getCode() != tgtok::l_paren) {
    826       TokError("expected '(' after binary operator");
    827       return 0;
    828     }
    829     Lex.Lex();  // eat the '('
    830 
    831     SmallVector<Init*, 2> InitList;
    832 
    833     InitList.push_back(ParseValue(CurRec));
    834     if (InitList.back() == 0) return 0;
    835 
    836     while (Lex.getCode() == tgtok::comma) {
    837       Lex.Lex();  // eat the ','
    838 
    839       InitList.push_back(ParseValue(CurRec));
    840       if (InitList.back() == 0) return 0;
    841     }
    842 
    843     if (Lex.getCode() != tgtok::r_paren) {
    844       TokError("expected ')' in operator");
    845       return 0;
    846     }
    847     Lex.Lex();  // eat the ')'
    848 
    849     // We allow multiple operands to associative operators like !strconcat as
    850     // shorthand for nesting them.
    851     if (Code == BinOpInit::STRCONCAT) {
    852       while (InitList.size() > 2) {
    853         Init *RHS = InitList.pop_back_val();
    854         RHS = (BinOpInit::get(Code, InitList.back(), RHS, Type))
    855                            ->Fold(CurRec, CurMultiClass);
    856         InitList.back() = RHS;
    857       }
    858     }
    859 
    860     if (InitList.size() == 2)
    861       return (BinOpInit::get(Code, InitList[0], InitList[1], Type))
    862         ->Fold(CurRec, CurMultiClass);
    863 
    864     Error(OpLoc, "expected two operands to operator");
    865     return 0;
    866   }
    867 
    868   case tgtok::XIf:
    869   case tgtok::XForEach:
    870   case tgtok::XSubst: {  // Value ::= !ternop '(' Value ',' Value ',' Value ')'
    871     TernOpInit::TernaryOp Code;
    872     RecTy *Type = 0;
    873 
    874     tgtok::TokKind LexCode = Lex.getCode();
    875     Lex.Lex();  // eat the operation
    876     switch (LexCode) {
    877     default: assert(0 && "Unhandled code!");
    878     case tgtok::XIf:
    879       Code = TernOpInit::IF;
    880       break;
    881     case tgtok::XForEach:
    882       Code = TernOpInit::FOREACH;
    883       break;
    884     case tgtok::XSubst:
    885       Code = TernOpInit::SUBST;
    886       break;
    887     }
    888     if (Lex.getCode() != tgtok::l_paren) {
    889       TokError("expected '(' after ternary operator");
    890       return 0;
    891     }
    892     Lex.Lex();  // eat the '('
    893 
    894     Init *LHS = ParseValue(CurRec);
    895     if (LHS == 0) return 0;
    896 
    897     if (Lex.getCode() != tgtok::comma) {
    898       TokError("expected ',' in ternary operator");
    899       return 0;
    900     }
    901     Lex.Lex();  // eat the ','
    902 
    903     Init *MHS = ParseValue(CurRec);
    904     if (MHS == 0) return 0;
    905 
    906     if (Lex.getCode() != tgtok::comma) {
    907       TokError("expected ',' in ternary operator");
    908       return 0;
    909     }
    910     Lex.Lex();  // eat the ','
    911 
    912     Init *RHS = ParseValue(CurRec);
    913     if (RHS == 0) return 0;
    914 
    915     if (Lex.getCode() != tgtok::r_paren) {
    916       TokError("expected ')' in binary operator");
    917       return 0;
    918     }
    919     Lex.Lex();  // eat the ')'
    920 
    921     switch (LexCode) {
    922     default: assert(0 && "Unhandled code!");
    923     case tgtok::XIf: {
    924       // FIXME: The `!if' operator doesn't handle non-TypedInit well at
    925       // all. This can be made much more robust.
    926       TypedInit *MHSt = dynamic_cast<TypedInit*>(MHS);
    927       TypedInit *RHSt = dynamic_cast<TypedInit*>(RHS);
    928 
    929       RecTy *MHSTy = 0;
    930       RecTy *RHSTy = 0;
    931 
    932       if (MHSt == 0 && RHSt == 0) {
    933         BitsInit *MHSbits = dynamic_cast<BitsInit*>(MHS);
    934         BitsInit *RHSbits = dynamic_cast<BitsInit*>(RHS);
    935 
    936         if (MHSbits && RHSbits &&
    937             MHSbits->getNumBits() == RHSbits->getNumBits()) {
    938           Type = BitRecTy::get();
    939           break;
    940         } else {
    941           BitInit *MHSbit = dynamic_cast<BitInit*>(MHS);
    942           BitInit *RHSbit = dynamic_cast<BitInit*>(RHS);
    943 
    944           if (MHSbit && RHSbit) {
    945             Type = BitRecTy::get();
    946             break;
    947           }
    948         }
    949       } else if (MHSt != 0 && RHSt != 0) {
    950         MHSTy = MHSt->getType();
    951         RHSTy = RHSt->getType();
    952       }
    953 
    954       if (!MHSTy || !RHSTy) {
    955         TokError("could not get type for !if");
    956         return 0;
    957       }
    958 
    959       if (MHSTy->typeIsConvertibleTo(RHSTy)) {
    960         Type = RHSTy;
    961       } else if (RHSTy->typeIsConvertibleTo(MHSTy)) {
    962         Type = MHSTy;
    963       } else {
    964         TokError("inconsistent types for !if");
    965         return 0;
    966       }
    967       break;
    968     }
    969     case tgtok::XForEach: {
    970       TypedInit *MHSt = dynamic_cast<TypedInit *>(MHS);
    971       if (MHSt == 0) {
    972         TokError("could not get type for !foreach");
    973         return 0;
    974       }
    975       Type = MHSt->getType();
    976       break;
    977     }
    978     case tgtok::XSubst: {
    979       TypedInit *RHSt = dynamic_cast<TypedInit *>(RHS);
    980       if (RHSt == 0) {
    981         TokError("could not get type for !subst");
    982         return 0;
    983       }
    984       Type = RHSt->getType();
    985       break;
    986     }
    987     }
    988     return (TernOpInit::get(Code, LHS, MHS, RHS, Type))->Fold(CurRec,
    989                                                              CurMultiClass);
    990   }
    991   }
    992   TokError("could not parse operation");
    993   return 0;
    994 }
    995 
    996 /// ParseOperatorType - Parse a type for an operator.  This returns
    997 /// null on error.
    998 ///
    999 /// OperatorType ::= '<' Type '>'
   1000 ///
   1001 RecTy *TGParser::ParseOperatorType() {
   1002   RecTy *Type = 0;
   1003 
   1004   if (Lex.getCode() != tgtok::less) {
   1005     TokError("expected type name for operator");
   1006     return 0;
   1007   }
   1008   Lex.Lex();  // eat the <
   1009 
   1010   Type = ParseType();
   1011 
   1012   if (Type == 0) {
   1013     TokError("expected type name for operator");
   1014     return 0;
   1015   }
   1016 
   1017   if (Lex.getCode() != tgtok::greater) {
   1018     TokError("expected type name for operator");
   1019     return 0;
   1020   }
   1021   Lex.Lex();  // eat the >
   1022 
   1023   return Type;
   1024 }
   1025 
   1026 
   1027 /// ParseSimpleValue - Parse a tblgen value.  This returns null on error.
   1028 ///
   1029 ///   SimpleValue ::= IDValue
   1030 ///   SimpleValue ::= INTVAL
   1031 ///   SimpleValue ::= STRVAL+
   1032 ///   SimpleValue ::= CODEFRAGMENT
   1033 ///   SimpleValue ::= '?'
   1034 ///   SimpleValue ::= '{' ValueList '}'
   1035 ///   SimpleValue ::= ID '<' ValueListNE '>'
   1036 ///   SimpleValue ::= '[' ValueList ']'
   1037 ///   SimpleValue ::= '(' IDValue DagArgList ')'
   1038 ///   SimpleValue ::= CONCATTOK '(' Value ',' Value ')'
   1039 ///   SimpleValue ::= SHLTOK '(' Value ',' Value ')'
   1040 ///   SimpleValue ::= SRATOK '(' Value ',' Value ')'
   1041 ///   SimpleValue ::= SRLTOK '(' Value ',' Value ')'
   1042 ///   SimpleValue ::= STRCONCATTOK '(' Value ',' Value ')'
   1043 ///
   1044 Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType) {
   1045   Init *R = 0;
   1046   switch (Lex.getCode()) {
   1047   default: TokError("Unknown token when parsing a value"); break;
   1048   case tgtok::IntVal: R = IntInit::get(Lex.getCurIntVal()); Lex.Lex(); break;
   1049   case tgtok::StrVal: {
   1050     std::string Val = Lex.getCurStrVal();
   1051     Lex.Lex();
   1052 
   1053     // Handle multiple consecutive concatenated strings.
   1054     while (Lex.getCode() == tgtok::StrVal) {
   1055       Val += Lex.getCurStrVal();
   1056       Lex.Lex();
   1057     }
   1058 
   1059     R = StringInit::get(Val);
   1060     break;
   1061   }
   1062   case tgtok::CodeFragment:
   1063     R = CodeInit::get(Lex.getCurStrVal());
   1064     Lex.Lex();
   1065     break;
   1066   case tgtok::question:
   1067     R = UnsetInit::get();
   1068     Lex.Lex();
   1069     break;
   1070   case tgtok::Id: {
   1071     SMLoc NameLoc = Lex.getLoc();
   1072     std::string Name = Lex.getCurStrVal();
   1073     if (Lex.Lex() != tgtok::less)  // consume the Id.
   1074       return ParseIDValue(CurRec, Name, NameLoc);    // Value ::= IDValue
   1075 
   1076     // Value ::= ID '<' ValueListNE '>'
   1077     if (Lex.Lex() == tgtok::greater) {
   1078       TokError("expected non-empty value list");
   1079       return 0;
   1080     }
   1081 
   1082     // This is a CLASS<initvalslist> expression.  This is supposed to synthesize
   1083     // a new anonymous definition, deriving from CLASS<initvalslist> with no
   1084     // body.
   1085     Record *Class = Records.getClass(Name);
   1086     if (!Class) {
   1087       Error(NameLoc, "Expected a class name, got '" + Name + "'");
   1088       return 0;
   1089     }
   1090 
   1091     std::vector<Init*> ValueList = ParseValueList(CurRec, Class);
   1092     if (ValueList.empty()) return 0;
   1093 
   1094     if (Lex.getCode() != tgtok::greater) {
   1095       TokError("expected '>' at end of value list");
   1096       return 0;
   1097     }
   1098     Lex.Lex();  // eat the '>'
   1099 
   1100     // Create the new record, set it as CurRec temporarily.
   1101     static unsigned AnonCounter = 0;
   1102     Record *NewRec = new Record("anonymous.val."+utostr(AnonCounter++),
   1103                                 NameLoc,
   1104                                 Records);
   1105     SubClassReference SCRef;
   1106     SCRef.RefLoc = NameLoc;
   1107     SCRef.Rec = Class;
   1108     SCRef.TemplateArgs = ValueList;
   1109     // Add info about the subclass to NewRec.
   1110     if (AddSubClass(NewRec, SCRef))
   1111       return 0;
   1112     NewRec->resolveReferences();
   1113     Records.addDef(NewRec);
   1114 
   1115     // The result of the expression is a reference to the new record.
   1116     return DefInit::get(NewRec);
   1117   }
   1118   case tgtok::l_brace: {           // Value ::= '{' ValueList '}'
   1119     SMLoc BraceLoc = Lex.getLoc();
   1120     Lex.Lex(); // eat the '{'
   1121     std::vector<Init*> Vals;
   1122 
   1123     if (Lex.getCode() != tgtok::r_brace) {
   1124       Vals = ParseValueList(CurRec);
   1125       if (Vals.empty()) return 0;
   1126     }
   1127     if (Lex.getCode() != tgtok::r_brace) {
   1128       TokError("expected '}' at end of bit list value");
   1129       return 0;
   1130     }
   1131     Lex.Lex();  // eat the '}'
   1132 
   1133     SmallVector<Init *, 16> NewBits(Vals.size());
   1134 
   1135     for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
   1136       Init *Bit = Vals[i]->convertInitializerTo(BitRecTy::get());
   1137       if (Bit == 0) {
   1138         Error(BraceLoc, "Element #" + utostr(i) + " (" + Vals[i]->getAsString()+
   1139               ") is not convertable to a bit");
   1140         return 0;
   1141       }
   1142       NewBits[Vals.size()-i-1] = Bit;
   1143     }
   1144     return BitsInit::get(NewBits);
   1145   }
   1146   case tgtok::l_square: {          // Value ::= '[' ValueList ']'
   1147     Lex.Lex(); // eat the '['
   1148     std::vector<Init*> Vals;
   1149 
   1150     RecTy *DeducedEltTy = 0;
   1151     ListRecTy *GivenListTy = 0;
   1152 
   1153     if (ItemType != 0) {
   1154       ListRecTy *ListType = dynamic_cast<ListRecTy*>(ItemType);
   1155       if (ListType == 0) {
   1156         std::stringstream s;
   1157         s << "Type mismatch for list, expected list type, got "
   1158           << ItemType->getAsString();
   1159         TokError(s.str());
   1160         return 0;
   1161       }
   1162       GivenListTy = ListType;
   1163     }
   1164 
   1165     if (Lex.getCode() != tgtok::r_square) {
   1166       Vals = ParseValueList(CurRec, 0,
   1167                             GivenListTy ? GivenListTy->getElementType() : 0);
   1168       if (Vals.empty()) return 0;
   1169     }
   1170     if (Lex.getCode() != tgtok::r_square) {
   1171       TokError("expected ']' at end of list value");
   1172       return 0;
   1173     }
   1174     Lex.Lex();  // eat the ']'
   1175 
   1176     RecTy *GivenEltTy = 0;
   1177     if (Lex.getCode() == tgtok::less) {
   1178       // Optional list element type
   1179       Lex.Lex();  // eat the '<'
   1180 
   1181       GivenEltTy = ParseType();
   1182       if (GivenEltTy == 0) {
   1183         // Couldn't parse element type
   1184         return 0;
   1185       }
   1186 
   1187       if (Lex.getCode() != tgtok::greater) {
   1188         TokError("expected '>' at end of list element type");
   1189         return 0;
   1190       }
   1191       Lex.Lex();  // eat the '>'
   1192     }
   1193 
   1194     // Check elements
   1195     RecTy *EltTy = 0;
   1196     for (std::vector<Init *>::iterator i = Vals.begin(), ie = Vals.end();
   1197          i != ie;
   1198          ++i) {
   1199       TypedInit *TArg = dynamic_cast<TypedInit*>(*i);
   1200       if (TArg == 0) {
   1201         TokError("Untyped list element");
   1202         return 0;
   1203       }
   1204       if (EltTy != 0) {
   1205         EltTy = resolveTypes(EltTy, TArg->getType());
   1206         if (EltTy == 0) {
   1207           TokError("Incompatible types in list elements");
   1208           return 0;
   1209         }
   1210       } else {
   1211         EltTy = TArg->getType();
   1212       }
   1213     }
   1214 
   1215     if (GivenEltTy != 0) {
   1216       if (EltTy != 0) {
   1217         // Verify consistency
   1218         if (!EltTy->typeIsConvertibleTo(GivenEltTy)) {
   1219           TokError("Incompatible types in list elements");
   1220           return 0;
   1221         }
   1222       }
   1223       EltTy = GivenEltTy;
   1224     }
   1225 
   1226     if (EltTy == 0) {
   1227       if (ItemType == 0) {
   1228         TokError("No type for list");
   1229         return 0;
   1230       }
   1231       DeducedEltTy = GivenListTy->getElementType();
   1232     } else {
   1233       // Make sure the deduced type is compatible with the given type
   1234       if (GivenListTy) {
   1235         if (!EltTy->typeIsConvertibleTo(GivenListTy->getElementType())) {
   1236           TokError("Element type mismatch for list");
   1237           return 0;
   1238         }
   1239       }
   1240       DeducedEltTy = EltTy;
   1241     }
   1242 
   1243     return ListInit::get(Vals, DeducedEltTy);
   1244   }
   1245   case tgtok::l_paren: {         // Value ::= '(' IDValue DagArgList ')'
   1246     Lex.Lex();   // eat the '('
   1247     if (Lex.getCode() != tgtok::Id && Lex.getCode() != tgtok::XCast) {
   1248       TokError("expected identifier in dag init");
   1249       return 0;
   1250     }
   1251 
   1252     Init *Operator = ParseValue(CurRec);
   1253     if (Operator == 0) return 0;
   1254 
   1255     // If the operator name is present, parse it.
   1256     std::string OperatorName;
   1257     if (Lex.getCode() == tgtok::colon) {
   1258       if (Lex.Lex() != tgtok::VarName) { // eat the ':'
   1259         TokError("expected variable name in dag operator");
   1260         return 0;
   1261       }
   1262       OperatorName = Lex.getCurStrVal();
   1263       Lex.Lex();  // eat the VarName.
   1264     }
   1265 
   1266     std::vector<std::pair<llvm::Init*, std::string> > DagArgs;
   1267     if (Lex.getCode() != tgtok::r_paren) {
   1268       DagArgs = ParseDagArgList(CurRec);
   1269       if (DagArgs.empty()) return 0;
   1270     }
   1271 
   1272     if (Lex.getCode() != tgtok::r_paren) {
   1273       TokError("expected ')' in dag init");
   1274       return 0;
   1275     }
   1276     Lex.Lex();  // eat the ')'
   1277 
   1278     return DagInit::get(Operator, OperatorName, DagArgs);
   1279   }
   1280 
   1281   case tgtok::XHead:
   1282   case tgtok::XTail:
   1283   case tgtok::XEmpty:
   1284   case tgtok::XCast:  // Value ::= !unop '(' Value ')'
   1285   case tgtok::XConcat:
   1286   case tgtok::XSRA:
   1287   case tgtok::XSRL:
   1288   case tgtok::XSHL:
   1289   case tgtok::XEq:
   1290   case tgtok::XStrConcat:   // Value ::= !binop '(' Value ',' Value ')'
   1291   case tgtok::XIf:
   1292   case tgtok::XForEach:
   1293   case tgtok::XSubst: {  // Value ::= !ternop '(' Value ',' Value ',' Value ')'
   1294     return ParseOperation(CurRec);
   1295   }
   1296   }
   1297 
   1298   return R;
   1299 }
   1300 
   1301 /// ParseValue - Parse a tblgen value.  This returns null on error.
   1302 ///
   1303 ///   Value       ::= SimpleValue ValueSuffix*
   1304 ///   ValueSuffix ::= '{' BitList '}'
   1305 ///   ValueSuffix ::= '[' BitList ']'
   1306 ///   ValueSuffix ::= '.' ID
   1307 ///
   1308 Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType) {
   1309   Init *Result = ParseSimpleValue(CurRec, ItemType);
   1310   if (Result == 0) return 0;
   1311 
   1312   // Parse the suffixes now if present.
   1313   while (1) {
   1314     switch (Lex.getCode()) {
   1315     default: return Result;
   1316     case tgtok::l_brace: {
   1317       SMLoc CurlyLoc = Lex.getLoc();
   1318       Lex.Lex(); // eat the '{'
   1319       std::vector<unsigned> Ranges = ParseRangeList();
   1320       if (Ranges.empty()) return 0;
   1321 
   1322       // Reverse the bitlist.
   1323       std::reverse(Ranges.begin(), Ranges.end());
   1324       Result = Result->convertInitializerBitRange(Ranges);
   1325       if (Result == 0) {
   1326         Error(CurlyLoc, "Invalid bit range for value");
   1327         return 0;
   1328       }
   1329 
   1330       // Eat the '}'.
   1331       if (Lex.getCode() != tgtok::r_brace) {
   1332         TokError("expected '}' at end of bit range list");
   1333         return 0;
   1334       }
   1335       Lex.Lex();
   1336       break;
   1337     }
   1338     case tgtok::l_square: {
   1339       SMLoc SquareLoc = Lex.getLoc();
   1340       Lex.Lex(); // eat the '['
   1341       std::vector<unsigned> Ranges = ParseRangeList();
   1342       if (Ranges.empty()) return 0;
   1343 
   1344       Result = Result->convertInitListSlice(Ranges);
   1345       if (Result == 0) {
   1346         Error(SquareLoc, "Invalid range for list slice");
   1347         return 0;
   1348       }
   1349 
   1350       // Eat the ']'.
   1351       if (Lex.getCode() != tgtok::r_square) {
   1352         TokError("expected ']' at end of list slice");
   1353         return 0;
   1354       }
   1355       Lex.Lex();
   1356       break;
   1357     }
   1358     case tgtok::period:
   1359       if (Lex.Lex() != tgtok::Id) {  // eat the .
   1360         TokError("expected field identifier after '.'");
   1361         return 0;
   1362       }
   1363       if (!Result->getFieldType(Lex.getCurStrVal())) {
   1364         TokError("Cannot access field '" + Lex.getCurStrVal() + "' of value '" +
   1365                  Result->getAsString() + "'");
   1366         return 0;
   1367       }
   1368       Result = FieldInit::get(Result, Lex.getCurStrVal());
   1369       Lex.Lex();  // eat field name
   1370       break;
   1371     }
   1372   }
   1373 }
   1374 
   1375 /// ParseDagArgList - Parse the argument list for a dag literal expression.
   1376 ///
   1377 ///    ParseDagArgList ::= Value (':' VARNAME)?
   1378 ///    ParseDagArgList ::= ParseDagArgList ',' Value (':' VARNAME)?
   1379 std::vector<std::pair<llvm::Init*, std::string> >
   1380 TGParser::ParseDagArgList(Record *CurRec) {
   1381   std::vector<std::pair<llvm::Init*, std::string> > Result;
   1382 
   1383   while (1) {
   1384     Init *Val = ParseValue(CurRec);
   1385     if (Val == 0) return std::vector<std::pair<llvm::Init*, std::string> >();
   1386 
   1387     // If the variable name is present, add it.
   1388     std::string VarName;
   1389     if (Lex.getCode() == tgtok::colon) {
   1390       if (Lex.Lex() != tgtok::VarName) { // eat the ':'
   1391         TokError("expected variable name in dag literal");
   1392         return std::vector<std::pair<llvm::Init*, std::string> >();
   1393       }
   1394       VarName = Lex.getCurStrVal();
   1395       Lex.Lex();  // eat the VarName.
   1396     }
   1397 
   1398     Result.push_back(std::make_pair(Val, VarName));
   1399 
   1400     if (Lex.getCode() != tgtok::comma) break;
   1401     Lex.Lex(); // eat the ','
   1402   }
   1403 
   1404   return Result;
   1405 }
   1406 
   1407 
   1408 /// ParseValueList - Parse a comma separated list of values, returning them as a
   1409 /// vector.  Note that this always expects to be able to parse at least one
   1410 /// value.  It returns an empty list if this is not possible.
   1411 ///
   1412 ///   ValueList ::= Value (',' Value)
   1413 ///
   1414 std::vector<Init*> TGParser::ParseValueList(Record *CurRec, Record *ArgsRec,
   1415                                             RecTy *EltTy) {
   1416   std::vector<Init*> Result;
   1417   RecTy *ItemType = EltTy;
   1418   unsigned int ArgN = 0;
   1419   if (ArgsRec != 0 && EltTy == 0) {
   1420     const std::vector<std::string> &TArgs = ArgsRec->getTemplateArgs();
   1421     const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
   1422     if (!RV) {
   1423       errs() << "Cannot find template arg " << ArgN << " (" << TArgs[ArgN]
   1424         << ")\n";
   1425     }
   1426     assert(RV && "Template argument record not found??");
   1427     ItemType = RV->getType();
   1428     ++ArgN;
   1429   }
   1430   Result.push_back(ParseValue(CurRec, ItemType));
   1431   if (Result.back() == 0) return std::vector<Init*>();
   1432 
   1433   while (Lex.getCode() == tgtok::comma) {
   1434     Lex.Lex();  // Eat the comma
   1435 
   1436     if (ArgsRec != 0 && EltTy == 0) {
   1437       const std::vector<std::string> &TArgs = ArgsRec->getTemplateArgs();
   1438       if (ArgN >= TArgs.size()) {
   1439         TokError("too many template arguments");
   1440         return std::vector<Init*>();
   1441       }
   1442       const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
   1443       assert(RV && "Template argument record not found??");
   1444       ItemType = RV->getType();
   1445       ++ArgN;
   1446     }
   1447     Result.push_back(ParseValue(CurRec, ItemType));
   1448     if (Result.back() == 0) return std::vector<Init*>();
   1449   }
   1450 
   1451   return Result;
   1452 }
   1453 
   1454 
   1455 /// ParseDeclaration - Read a declaration, returning the name of field ID, or an
   1456 /// empty string on error.  This can happen in a number of different context's,
   1457 /// including within a def or in the template args for a def (which which case
   1458 /// CurRec will be non-null) and within the template args for a multiclass (in
   1459 /// which case CurRec will be null, but CurMultiClass will be set).  This can
   1460 /// also happen within a def that is within a multiclass, which will set both
   1461 /// CurRec and CurMultiClass.
   1462 ///
   1463 ///  Declaration ::= FIELD? Type ID ('=' Value)?
   1464 ///
   1465 std::string TGParser::ParseDeclaration(Record *CurRec,
   1466                                        bool ParsingTemplateArgs) {
   1467   // Read the field prefix if present.
   1468   bool HasField = Lex.getCode() == tgtok::Field;
   1469   if (HasField) Lex.Lex();
   1470 
   1471   RecTy *Type = ParseType();
   1472   if (Type == 0) return "";
   1473 
   1474   if (Lex.getCode() != tgtok::Id) {
   1475     TokError("Expected identifier in declaration");
   1476     return "";
   1477   }
   1478 
   1479   SMLoc IdLoc = Lex.getLoc();
   1480   std::string DeclName = Lex.getCurStrVal();
   1481   Lex.Lex();
   1482 
   1483   if (ParsingTemplateArgs) {
   1484     if (CurRec) {
   1485       DeclName = CurRec->getName() + ":" + DeclName;
   1486     } else {
   1487       assert(CurMultiClass);
   1488     }
   1489     if (CurMultiClass)
   1490       DeclName = CurMultiClass->Rec.getName() + "::" + DeclName;
   1491   }
   1492 
   1493   // Add the value.
   1494   if (AddValue(CurRec, IdLoc, RecordVal(DeclName, Type, HasField)))
   1495     return "";
   1496 
   1497   // If a value is present, parse it.
   1498   if (Lex.getCode() == tgtok::equal) {
   1499     Lex.Lex();
   1500     SMLoc ValLoc = Lex.getLoc();
   1501     Init *Val = ParseValue(CurRec, Type);
   1502     if (Val == 0 ||
   1503         SetValue(CurRec, ValLoc, DeclName, std::vector<unsigned>(), Val))
   1504       return "";
   1505   }
   1506 
   1507   return DeclName;
   1508 }
   1509 
   1510 /// ParseTemplateArgList - Read a template argument list, which is a non-empty
   1511 /// sequence of template-declarations in <>'s.  If CurRec is non-null, these are
   1512 /// template args for a def, which may or may not be in a multiclass.  If null,
   1513 /// these are the template args for a multiclass.
   1514 ///
   1515 ///    TemplateArgList ::= '<' Declaration (',' Declaration)* '>'
   1516 ///
   1517 bool TGParser::ParseTemplateArgList(Record *CurRec) {
   1518   assert(Lex.getCode() == tgtok::less && "Not a template arg list!");
   1519   Lex.Lex(); // eat the '<'
   1520 
   1521   Record *TheRecToAddTo = CurRec ? CurRec : &CurMultiClass->Rec;
   1522 
   1523   // Read the first declaration.
   1524   std::string TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
   1525   if (TemplArg.empty())
   1526     return true;
   1527 
   1528   TheRecToAddTo->addTemplateArg(TemplArg);
   1529 
   1530   while (Lex.getCode() == tgtok::comma) {
   1531     Lex.Lex(); // eat the ','
   1532 
   1533     // Read the following declarations.
   1534     TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
   1535     if (TemplArg.empty())
   1536       return true;
   1537     TheRecToAddTo->addTemplateArg(TemplArg);
   1538   }
   1539 
   1540   if (Lex.getCode() != tgtok::greater)
   1541     return TokError("expected '>' at end of template argument list");
   1542   Lex.Lex(); // eat the '>'.
   1543   return false;
   1544 }
   1545 
   1546 
   1547 /// ParseBodyItem - Parse a single item at within the body of a def or class.
   1548 ///
   1549 ///   BodyItem ::= Declaration ';'
   1550 ///   BodyItem ::= LET ID OptionalBitList '=' Value ';'
   1551 bool TGParser::ParseBodyItem(Record *CurRec) {
   1552   if (Lex.getCode() != tgtok::Let) {
   1553     if (ParseDeclaration(CurRec, false).empty())
   1554       return true;
   1555 
   1556     if (Lex.getCode() != tgtok::semi)
   1557       return TokError("expected ';' after declaration");
   1558     Lex.Lex();
   1559     return false;
   1560   }
   1561 
   1562   // LET ID OptionalRangeList '=' Value ';'
   1563   if (Lex.Lex() != tgtok::Id)
   1564     return TokError("expected field identifier after let");
   1565 
   1566   SMLoc IdLoc = Lex.getLoc();
   1567   std::string FieldName = Lex.getCurStrVal();
   1568   Lex.Lex();  // eat the field name.
   1569 
   1570   std::vector<unsigned> BitList;
   1571   if (ParseOptionalBitList(BitList))
   1572     return true;
   1573   std::reverse(BitList.begin(), BitList.end());
   1574 
   1575   if (Lex.getCode() != tgtok::equal)
   1576     return TokError("expected '=' in let expression");
   1577   Lex.Lex();  // eat the '='.
   1578 
   1579   RecordVal *Field = CurRec->getValue(FieldName);
   1580   if (Field == 0)
   1581     return TokError("Value '" + FieldName + "' unknown!");
   1582 
   1583   RecTy *Type = Field->getType();
   1584 
   1585   Init *Val = ParseValue(CurRec, Type);
   1586   if (Val == 0) return true;
   1587 
   1588   if (Lex.getCode() != tgtok::semi)
   1589     return TokError("expected ';' after let expression");
   1590   Lex.Lex();
   1591 
   1592   return SetValue(CurRec, IdLoc, FieldName, BitList, Val);
   1593 }
   1594 
   1595 /// ParseBody - Read the body of a class or def.  Return true on error, false on
   1596 /// success.
   1597 ///
   1598 ///   Body     ::= ';'
   1599 ///   Body     ::= '{' BodyList '}'
   1600 ///   BodyList BodyItem*
   1601 ///
   1602 bool TGParser::ParseBody(Record *CurRec) {
   1603   // If this is a null definition, just eat the semi and return.
   1604   if (Lex.getCode() == tgtok::semi) {
   1605     Lex.Lex();
   1606     return false;
   1607   }
   1608 
   1609   if (Lex.getCode() != tgtok::l_brace)
   1610     return TokError("Expected ';' or '{' to start body");
   1611   // Eat the '{'.
   1612   Lex.Lex();
   1613 
   1614   while (Lex.getCode() != tgtok::r_brace)
   1615     if (ParseBodyItem(CurRec))
   1616       return true;
   1617 
   1618   // Eat the '}'.
   1619   Lex.Lex();
   1620   return false;
   1621 }
   1622 
   1623 /// ParseObjectBody - Parse the body of a def or class.  This consists of an
   1624 /// optional ClassList followed by a Body.  CurRec is the current def or class
   1625 /// that is being parsed.
   1626 ///
   1627 ///   ObjectBody      ::= BaseClassList Body
   1628 ///   BaseClassList   ::= /*empty*/
   1629 ///   BaseClassList   ::= ':' BaseClassListNE
   1630 ///   BaseClassListNE ::= SubClassRef (',' SubClassRef)*
   1631 ///
   1632 bool TGParser::ParseObjectBody(Record *CurRec) {
   1633   // If there is a baseclass list, read it.
   1634   if (Lex.getCode() == tgtok::colon) {
   1635     Lex.Lex();
   1636 
   1637     // Read all of the subclasses.
   1638     SubClassReference SubClass = ParseSubClassReference(CurRec, false);
   1639     while (1) {
   1640       // Check for error.
   1641       if (SubClass.Rec == 0) return true;
   1642 
   1643       // Add it.
   1644       if (AddSubClass(CurRec, SubClass))
   1645         return true;
   1646 
   1647       if (Lex.getCode() != tgtok::comma) break;
   1648       Lex.Lex(); // eat ','.
   1649       SubClass = ParseSubClassReference(CurRec, false);
   1650     }
   1651   }
   1652 
   1653   // Process any variables on the let stack.
   1654   for (unsigned i = 0, e = LetStack.size(); i != e; ++i)
   1655     for (unsigned j = 0, e = LetStack[i].size(); j != e; ++j)
   1656       if (SetValue(CurRec, LetStack[i][j].Loc, LetStack[i][j].Name,
   1657                    LetStack[i][j].Bits, LetStack[i][j].Value))
   1658         return true;
   1659 
   1660   return ParseBody(CurRec);
   1661 }
   1662 
   1663 /// ParseDef - Parse and return a top level or multiclass def, return the record
   1664 /// corresponding to it.  This returns null on error.
   1665 ///
   1666 ///   DefInst ::= DEF ObjectName ObjectBody
   1667 ///
   1668 bool TGParser::ParseDef(MultiClass *CurMultiClass) {
   1669   SMLoc DefLoc = Lex.getLoc();
   1670   assert(Lex.getCode() == tgtok::Def && "Unknown tok");
   1671   Lex.Lex();  // Eat the 'def' token.
   1672 
   1673   // Parse ObjectName and make a record for it.
   1674   Record *CurRec = new Record(ParseObjectName(), DefLoc, Records);
   1675 
   1676   if (!CurMultiClass) {
   1677     // Top-level def definition.
   1678 
   1679     // Ensure redefinition doesn't happen.
   1680     if (Records.getDef(CurRec->getName())) {
   1681       Error(DefLoc, "def '" + CurRec->getName() + "' already defined");
   1682       return true;
   1683     }
   1684     Records.addDef(CurRec);
   1685   } else {
   1686     // Otherwise, a def inside a multiclass, add it to the multiclass.
   1687     for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size(); i != e; ++i)
   1688       if (CurMultiClass->DefPrototypes[i]->getName() == CurRec->getName()) {
   1689         Error(DefLoc, "def '" + CurRec->getName() +
   1690               "' already defined in this multiclass!");
   1691         return true;
   1692       }
   1693     CurMultiClass->DefPrototypes.push_back(CurRec);
   1694   }
   1695 
   1696   if (ParseObjectBody(CurRec))
   1697     return true;
   1698 
   1699   if (CurMultiClass == 0)  // Def's in multiclasses aren't really defs.
   1700     // See Record::setName().  This resolve step will see any new name
   1701     // for the def that might have been created when resolving
   1702     // inheritance, values and arguments above.
   1703     CurRec->resolveReferences();
   1704 
   1705   // If ObjectBody has template arguments, it's an error.
   1706   assert(CurRec->getTemplateArgs().empty() && "How'd this get template args?");
   1707 
   1708   if (CurMultiClass) {
   1709     // Copy the template arguments for the multiclass into the def.
   1710     const std::vector<std::string> &TArgs =
   1711                                 CurMultiClass->Rec.getTemplateArgs();
   1712 
   1713     for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
   1714       const RecordVal *RV = CurMultiClass->Rec.getValue(TArgs[i]);
   1715       assert(RV && "Template arg doesn't exist?");
   1716       CurRec->addValue(*RV);
   1717     }
   1718   }
   1719 
   1720   return false;
   1721 }
   1722 
   1723 /// ParseClass - Parse a tblgen class definition.
   1724 ///
   1725 ///   ClassInst ::= CLASS ID TemplateArgList? ObjectBody
   1726 ///
   1727 bool TGParser::ParseClass() {
   1728   assert(Lex.getCode() == tgtok::Class && "Unexpected token!");
   1729   Lex.Lex();
   1730 
   1731   if (Lex.getCode() != tgtok::Id)
   1732     return TokError("expected class name after 'class' keyword");
   1733 
   1734   Record *CurRec = Records.getClass(Lex.getCurStrVal());
   1735   if (CurRec) {
   1736     // If the body was previously defined, this is an error.
   1737     if (!CurRec->getValues().empty() ||
   1738         !CurRec->getSuperClasses().empty() ||
   1739         !CurRec->getTemplateArgs().empty())
   1740       return TokError("Class '" + CurRec->getName() + "' already defined");
   1741   } else {
   1742     // If this is the first reference to this class, create and add it.
   1743     CurRec = new Record(Lex.getCurStrVal(), Lex.getLoc(), Records);
   1744     Records.addClass(CurRec);
   1745   }
   1746   Lex.Lex(); // eat the name.
   1747 
   1748   // If there are template args, parse them.
   1749   if (Lex.getCode() == tgtok::less)
   1750     if (ParseTemplateArgList(CurRec))
   1751       return true;
   1752 
   1753   // Finally, parse the object body.
   1754   return ParseObjectBody(CurRec);
   1755 }
   1756 
   1757 /// ParseLetList - Parse a non-empty list of assignment expressions into a list
   1758 /// of LetRecords.
   1759 ///
   1760 ///   LetList ::= LetItem (',' LetItem)*
   1761 ///   LetItem ::= ID OptionalRangeList '=' Value
   1762 ///
   1763 std::vector<LetRecord> TGParser::ParseLetList() {
   1764   std::vector<LetRecord> Result;
   1765 
   1766   while (1) {
   1767     if (Lex.getCode() != tgtok::Id) {
   1768       TokError("expected identifier in let definition");
   1769       return std::vector<LetRecord>();
   1770     }
   1771     std::string Name = Lex.getCurStrVal();
   1772     SMLoc NameLoc = Lex.getLoc();
   1773     Lex.Lex();  // Eat the identifier.
   1774 
   1775     // Check for an optional RangeList.
   1776     std::vector<unsigned> Bits;
   1777     if (ParseOptionalRangeList(Bits))
   1778       return std::vector<LetRecord>();
   1779     std::reverse(Bits.begin(), Bits.end());
   1780 
   1781     if (Lex.getCode() != tgtok::equal) {
   1782       TokError("expected '=' in let expression");
   1783       return std::vector<LetRecord>();
   1784     }
   1785     Lex.Lex();  // eat the '='.
   1786 
   1787     Init *Val = ParseValue(0);
   1788     if (Val == 0) return std::vector<LetRecord>();
   1789 
   1790     // Now that we have everything, add the record.
   1791     Result.push_back(LetRecord(Name, Bits, Val, NameLoc));
   1792 
   1793     if (Lex.getCode() != tgtok::comma)
   1794       return Result;
   1795     Lex.Lex();  // eat the comma.
   1796   }
   1797 }
   1798 
   1799 /// ParseTopLevelLet - Parse a 'let' at top level.  This can be a couple of
   1800 /// different related productions. This works inside multiclasses too.
   1801 ///
   1802 ///   Object ::= LET LetList IN '{' ObjectList '}'
   1803 ///   Object ::= LET LetList IN Object
   1804 ///
   1805 bool TGParser::ParseTopLevelLet(MultiClass *CurMultiClass) {
   1806   assert(Lex.getCode() == tgtok::Let && "Unexpected token");
   1807   Lex.Lex();
   1808 
   1809   // Add this entry to the let stack.
   1810   std::vector<LetRecord> LetInfo = ParseLetList();
   1811   if (LetInfo.empty()) return true;
   1812   LetStack.push_back(LetInfo);
   1813 
   1814   if (Lex.getCode() != tgtok::In)
   1815     return TokError("expected 'in' at end of top-level 'let'");
   1816   Lex.Lex();
   1817 
   1818   // If this is a scalar let, just handle it now
   1819   if (Lex.getCode() != tgtok::l_brace) {
   1820     // LET LetList IN Object
   1821     if (ParseObject(CurMultiClass))
   1822       return true;
   1823   } else {   // Object ::= LETCommand '{' ObjectList '}'
   1824     SMLoc BraceLoc = Lex.getLoc();
   1825     // Otherwise, this is a group let.
   1826     Lex.Lex();  // eat the '{'.
   1827 
   1828     // Parse the object list.
   1829     if (ParseObjectList(CurMultiClass))
   1830       return true;
   1831 
   1832     if (Lex.getCode() != tgtok::r_brace) {
   1833       TokError("expected '}' at end of top level let command");
   1834       return Error(BraceLoc, "to match this '{'");
   1835     }
   1836     Lex.Lex();
   1837   }
   1838 
   1839   // Outside this let scope, this let block is not active.
   1840   LetStack.pop_back();
   1841   return false;
   1842 }
   1843 
   1844 /// ParseMultiClass - Parse a multiclass definition.
   1845 ///
   1846 ///  MultiClassInst ::= MULTICLASS ID TemplateArgList?
   1847 ///                     ':' BaseMultiClassList '{' MultiClassDef+ '}'
   1848 ///
   1849 bool TGParser::ParseMultiClass() {
   1850   assert(Lex.getCode() == tgtok::MultiClass && "Unexpected token");
   1851   Lex.Lex();  // Eat the multiclass token.
   1852 
   1853   if (Lex.getCode() != tgtok::Id)
   1854     return TokError("expected identifier after multiclass for name");
   1855   std::string Name = Lex.getCurStrVal();
   1856 
   1857   if (MultiClasses.count(Name))
   1858     return TokError("multiclass '" + Name + "' already defined");
   1859 
   1860   CurMultiClass = MultiClasses[Name] = new MultiClass(Name,
   1861                                                       Lex.getLoc(), Records);
   1862   Lex.Lex();  // Eat the identifier.
   1863 
   1864   // If there are template args, parse them.
   1865   if (Lex.getCode() == tgtok::less)
   1866     if (ParseTemplateArgList(0))
   1867       return true;
   1868 
   1869   bool inherits = false;
   1870 
   1871   // If there are submulticlasses, parse them.
   1872   if (Lex.getCode() == tgtok::colon) {
   1873     inherits = true;
   1874 
   1875     Lex.Lex();
   1876 
   1877     // Read all of the submulticlasses.
   1878     SubMultiClassReference SubMultiClass =
   1879       ParseSubMultiClassReference(CurMultiClass);
   1880     while (1) {
   1881       // Check for error.
   1882       if (SubMultiClass.MC == 0) return true;
   1883 
   1884       // Add it.
   1885       if (AddSubMultiClass(CurMultiClass, SubMultiClass))
   1886         return true;
   1887 
   1888       if (Lex.getCode() != tgtok::comma) break;
   1889       Lex.Lex(); // eat ','.
   1890       SubMultiClass = ParseSubMultiClassReference(CurMultiClass);
   1891     }
   1892   }
   1893 
   1894   if (Lex.getCode() != tgtok::l_brace) {
   1895     if (!inherits)
   1896       return TokError("expected '{' in multiclass definition");
   1897     else if (Lex.getCode() != tgtok::semi)
   1898       return TokError("expected ';' in multiclass definition");
   1899     else
   1900       Lex.Lex();  // eat the ';'.
   1901   } else {
   1902     if (Lex.Lex() == tgtok::r_brace)  // eat the '{'.
   1903       return TokError("multiclass must contain at least one def");
   1904 
   1905     while (Lex.getCode() != tgtok::r_brace) {
   1906       switch (Lex.getCode()) {
   1907         default:
   1908           return TokError("expected 'let', 'def' or 'defm' in multiclass body");
   1909         case tgtok::Let:
   1910         case tgtok::Def:
   1911         case tgtok::Defm:
   1912           if (ParseObject(CurMultiClass))
   1913             return true;
   1914          break;
   1915       }
   1916     }
   1917     Lex.Lex();  // eat the '}'.
   1918   }
   1919 
   1920   CurMultiClass = 0;
   1921   return false;
   1922 }
   1923 
   1924 Record *TGParser::
   1925 InstantiateMulticlassDef(MultiClass &MC,
   1926                          Record *DefProto,
   1927                          const std::string &DefmPrefix,
   1928                          SMLoc DefmPrefixLoc) {
   1929   // Add in the defm name.  If the defm prefix is empty, give each
   1930   // instantiated def a unique name.  Otherwise, if "#NAME#" exists in the
   1931   // name, substitute the prefix for #NAME#.  Otherwise, use the defm name
   1932   // as a prefix.
   1933   std::string DefName = DefProto->getName();
   1934   if (DefmPrefix.empty()) {
   1935     DefName = GetNewAnonymousName();
   1936   } else {
   1937     std::string::size_type idx = DefName.find("#NAME#");
   1938     if (idx != std::string::npos) {
   1939       DefName.replace(idx, 6, DefmPrefix);
   1940     } else {
   1941       // Add the suffix to the defm name to get the new name.
   1942       DefName = DefmPrefix + DefName;
   1943     }
   1944   }
   1945 
   1946   Record *CurRec = new Record(DefName, DefmPrefixLoc, Records);
   1947 
   1948   SubClassReference Ref;
   1949   Ref.RefLoc = DefmPrefixLoc;
   1950   Ref.Rec = DefProto;
   1951   AddSubClass(CurRec, Ref);
   1952 
   1953   return CurRec;
   1954 }
   1955 
   1956 bool TGParser::ResolveMulticlassDefArgs(MultiClass &MC,
   1957                                         Record *CurRec,
   1958                                         SMLoc DefmPrefixLoc,
   1959                                         SMLoc SubClassLoc,
   1960                                         const std::vector<std::string> &TArgs,
   1961                                         std::vector<Init *> &TemplateVals,
   1962                                         bool DeleteArgs) {
   1963   // Loop over all of the template arguments, setting them to the specified
   1964   // value or leaving them as the default if necessary.
   1965   for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
   1966     // Check if a value is specified for this temp-arg.
   1967     if (i < TemplateVals.size()) {
   1968       // Set it now.
   1969       if (SetValue(CurRec, DefmPrefixLoc, TArgs[i], std::vector<unsigned>(),
   1970                    TemplateVals[i]))
   1971         return true;
   1972 
   1973       // Resolve it next.
   1974       CurRec->resolveReferencesTo(CurRec->getValue(TArgs[i]));
   1975 
   1976       if (DeleteArgs)
   1977         // Now remove it.
   1978         CurRec->removeValue(TArgs[i]);
   1979 
   1980     } else if (!CurRec->getValue(TArgs[i])->getValue()->isComplete()) {
   1981       return Error(SubClassLoc, "value not specified for template argument #"+
   1982                    utostr(i) + " (" + TArgs[i] + ") of multiclassclass '" +
   1983                    MC.Rec.getName() + "'");
   1984     }
   1985   }
   1986   return false;
   1987 }
   1988 
   1989 bool TGParser::ResolveMulticlassDef(MultiClass &MC,
   1990                                     Record *CurRec,
   1991                                     Record *DefProto,
   1992                                     SMLoc DefmPrefixLoc) {
   1993   // If the mdef is inside a 'let' expression, add to each def.
   1994   for (unsigned i = 0, e = LetStack.size(); i != e; ++i)
   1995     for (unsigned j = 0, e = LetStack[i].size(); j != e; ++j)
   1996       if (SetValue(CurRec, LetStack[i][j].Loc, LetStack[i][j].Name,
   1997                    LetStack[i][j].Bits, LetStack[i][j].Value))
   1998         return Error(DefmPrefixLoc, "when instantiating this defm");
   1999 
   2000   // Ensure redefinition doesn't happen.
   2001   if (Records.getDef(CurRec->getName()))
   2002     return Error(DefmPrefixLoc, "def '" + CurRec->getName() +
   2003                  "' already defined, instantiating defm with subdef '" +
   2004                  DefProto->getName() + "'");
   2005 
   2006   // Don't create a top level definition for defm inside multiclasses,
   2007   // instead, only update the prototypes and bind the template args
   2008   // with the new created definition.
   2009   if (CurMultiClass) {
   2010     for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size();
   2011          i != e; ++i)
   2012       if (CurMultiClass->DefPrototypes[i]->getName() == CurRec->getName())
   2013         return Error(DefmPrefixLoc, "defm '" + CurRec->getName() +
   2014                      "' already defined in this multiclass!");
   2015     CurMultiClass->DefPrototypes.push_back(CurRec);
   2016 
   2017     // Copy the template arguments for the multiclass into the new def.
   2018     const std::vector<std::string> &TA =
   2019       CurMultiClass->Rec.getTemplateArgs();
   2020 
   2021     for (unsigned i = 0, e = TA.size(); i != e; ++i) {
   2022       const RecordVal *RV = CurMultiClass->Rec.getValue(TA[i]);
   2023       assert(RV && "Template arg doesn't exist?");
   2024       CurRec->addValue(*RV);
   2025     }
   2026   } else {
   2027     Records.addDef(CurRec);
   2028   }
   2029 
   2030   return false;
   2031 }
   2032 
   2033 /// ParseDefm - Parse the instantiation of a multiclass.
   2034 ///
   2035 ///   DefMInst ::= DEFM ID ':' DefmSubClassRef ';'
   2036 ///
   2037 bool TGParser::ParseDefm(MultiClass *CurMultiClass) {
   2038   assert(Lex.getCode() == tgtok::Defm && "Unexpected token!");
   2039 
   2040   std::string DefmPrefix;
   2041   if (Lex.Lex() == tgtok::Id) {  // eat the defm.
   2042     DefmPrefix = Lex.getCurStrVal();
   2043     Lex.Lex();  // Eat the defm prefix.
   2044   }
   2045 
   2046   SMLoc DefmPrefixLoc = Lex.getLoc();
   2047   if (Lex.getCode() != tgtok::colon)
   2048     return TokError("expected ':' after defm identifier");
   2049 
   2050   // Keep track of the new generated record definitions.
   2051   std::vector<Record*> NewRecDefs;
   2052 
   2053   // This record also inherits from a regular class (non-multiclass)?
   2054   bool InheritFromClass = false;
   2055 
   2056   // eat the colon.
   2057   Lex.Lex();
   2058 
   2059   SMLoc SubClassLoc = Lex.getLoc();
   2060   SubClassReference Ref = ParseSubClassReference(0, true);
   2061 
   2062   while (1) {
   2063     if (Ref.Rec == 0) return true;
   2064 
   2065     // To instantiate a multiclass, we need to first get the multiclass, then
   2066     // instantiate each def contained in the multiclass with the SubClassRef
   2067     // template parameters.
   2068     MultiClass *MC = MultiClasses[Ref.Rec->getName()];
   2069     assert(MC && "Didn't lookup multiclass correctly?");
   2070     std::vector<Init*> &TemplateVals = Ref.TemplateArgs;
   2071 
   2072     // Verify that the correct number of template arguments were specified.
   2073     const std::vector<std::string> &TArgs = MC->Rec.getTemplateArgs();
   2074     if (TArgs.size() < TemplateVals.size())
   2075       return Error(SubClassLoc,
   2076                    "more template args specified than multiclass expects");
   2077 
   2078     // Loop over all the def's in the multiclass, instantiating each one.
   2079     for (unsigned i = 0, e = MC->DefPrototypes.size(); i != e; ++i) {
   2080       Record *DefProto = MC->DefPrototypes[i];
   2081 
   2082       Record *CurRec = InstantiateMulticlassDef(*MC, DefProto, DefmPrefix, DefmPrefixLoc);
   2083 
   2084       if (ResolveMulticlassDefArgs(*MC, CurRec, DefmPrefixLoc, SubClassLoc,
   2085                                    TArgs, TemplateVals, true/*Delete args*/))
   2086         return Error(SubClassLoc, "could not instantiate def");
   2087 
   2088       if (ResolveMulticlassDef(*MC, CurRec, DefProto, DefmPrefixLoc))
   2089         return Error(SubClassLoc, "could not instantiate def");
   2090 
   2091       NewRecDefs.push_back(CurRec);
   2092     }
   2093 
   2094 
   2095     if (Lex.getCode() != tgtok::comma) break;
   2096     Lex.Lex(); // eat ','.
   2097 
   2098     SubClassLoc = Lex.getLoc();
   2099 
   2100     // A defm can inherit from regular classes (non-multiclass) as
   2101     // long as they come in the end of the inheritance list.
   2102     InheritFromClass = (Records.getClass(Lex.getCurStrVal()) != 0);
   2103 
   2104     if (InheritFromClass)
   2105       break;
   2106 
   2107     Ref = ParseSubClassReference(0, true);
   2108   }
   2109 
   2110   if (InheritFromClass) {
   2111     // Process all the classes to inherit as if they were part of a
   2112     // regular 'def' and inherit all record values.
   2113     SubClassReference SubClass = ParseSubClassReference(0, false);
   2114     while (1) {
   2115       // Check for error.
   2116       if (SubClass.Rec == 0) return true;
   2117 
   2118       // Get the expanded definition prototypes and teach them about
   2119       // the record values the current class to inherit has
   2120       for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i) {
   2121         Record *CurRec = NewRecDefs[i];
   2122 
   2123         // Add it.
   2124         if (AddSubClass(CurRec, SubClass))
   2125           return true;
   2126 
   2127         // Process any variables on the let stack.
   2128         for (unsigned i = 0, e = LetStack.size(); i != e; ++i)
   2129           for (unsigned j = 0, e = LetStack[i].size(); j != e; ++j)
   2130             if (SetValue(CurRec, LetStack[i][j].Loc, LetStack[i][j].Name,
   2131                          LetStack[i][j].Bits, LetStack[i][j].Value))
   2132               return true;
   2133       }
   2134 
   2135       if (Lex.getCode() != tgtok::comma) break;
   2136       Lex.Lex(); // eat ','.
   2137       SubClass = ParseSubClassReference(0, false);
   2138     }
   2139   }
   2140 
   2141   if (!CurMultiClass)
   2142     for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i)
   2143       // See Record::setName().  This resolve step will see any new
   2144       // name for the def that might have been created when resolving
   2145       // inheritance, values and arguments above.
   2146       NewRecDefs[i]->resolveReferences();
   2147 
   2148   if (Lex.getCode() != tgtok::semi)
   2149     return TokError("expected ';' at end of defm");
   2150   Lex.Lex();
   2151 
   2152   return false;
   2153 }
   2154 
   2155 /// ParseObject
   2156 ///   Object ::= ClassInst
   2157 ///   Object ::= DefInst
   2158 ///   Object ::= MultiClassInst
   2159 ///   Object ::= DefMInst
   2160 ///   Object ::= LETCommand '{' ObjectList '}'
   2161 ///   Object ::= LETCommand Object
   2162 bool TGParser::ParseObject(MultiClass *MC) {
   2163   switch (Lex.getCode()) {
   2164   default:
   2165     return TokError("Expected class, def, defm, multiclass or let definition");
   2166   case tgtok::Let:   return ParseTopLevelLet(MC);
   2167   case tgtok::Def:   return ParseDef(MC);
   2168   case tgtok::Defm:  return ParseDefm(MC);
   2169   case tgtok::Class: return ParseClass();
   2170   case tgtok::MultiClass: return ParseMultiClass();
   2171   }
   2172 }
   2173 
   2174 /// ParseObjectList
   2175 ///   ObjectList :== Object*
   2176 bool TGParser::ParseObjectList(MultiClass *MC) {
   2177   while (isObjectStart(Lex.getCode())) {
   2178     if (ParseObject(MC))
   2179       return true;
   2180   }
   2181   return false;
   2182 }
   2183 
   2184 bool TGParser::ParseFile() {
   2185   Lex.Lex(); // Prime the lexer.
   2186   if (ParseObjectList()) return true;
   2187 
   2188   // If we have unread input at the end of the file, report it.
   2189   if (Lex.getCode() == tgtok::Eof)
   2190     return false;
   2191 
   2192   return TokError("Unexpected input at top level");
   2193 }
   2194 
   2195