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