Comment only: Annotate loop as per mailing list discussion
[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       // FIXME: The following two loops would not be duplicated
1319       //        if the API was a little more orthogonal.
1320
1321       // bits<n> values are allowed to initialize n bits.
1322       if (BitsInit *BI = dyn_cast<BitsInit>(Vals[i])) {
1323         for (unsigned i = 0, e = BI->getNumBits(); i != e; ++i)
1324           NewBits.push_back(BI->getBit((e - i) - 1));
1325         continue;
1326       }
1327       // bits<n> can also come from variable initializers.
1328       if (VarInit *VI = dyn_cast<VarInit>(Vals[i])) {
1329         if (BitsRecTy *BitsRec = dyn_cast<BitsRecTy>(VI->getType())) {
1330           for (unsigned i = 0, e = BitsRec->getNumBits(); i != e; ++i)
1331             NewBits.push_back(VI->getBit((e - i) - 1));
1332           continue;
1333         }
1334         // Fallthrough to try convert this to a bit.
1335       }
1336       // All other values must be convertible to just a single bit.
1337       Init *Bit = Vals[i]->convertInitializerTo(BitRecTy::get());
1338       if (!Bit) {
1339         Error(BraceLoc, "Element #" + utostr(i) + " (" + Vals[i]->getAsString()+
1340               ") is not convertable to a bit");
1341         return nullptr;
1342       }
1343       NewBits.push_back(Bit);
1344     }
1345     std::reverse(NewBits.begin(), NewBits.end());
1346     return BitsInit::get(NewBits);
1347   }
1348   case tgtok::l_square: {          // Value ::= '[' ValueList ']'
1349     Lex.Lex(); // eat the '['
1350     std::vector<Init*> Vals;
1351
1352     RecTy *DeducedEltTy = nullptr;
1353     ListRecTy *GivenListTy = nullptr;
1354
1355     if (ItemType) {
1356       ListRecTy *ListType = dyn_cast<ListRecTy>(ItemType);
1357       if (!ListType) {
1358         std::string s;
1359         raw_string_ostream ss(s);
1360         ss << "Type mismatch for list, expected list type, got "
1361            << ItemType->getAsString();
1362         TokError(ss.str());
1363         return nullptr;
1364       }
1365       GivenListTy = ListType;
1366     }
1367
1368     if (Lex.getCode() != tgtok::r_square) {
1369       Vals = ParseValueList(CurRec, nullptr,
1370                             GivenListTy ? GivenListTy->getElementType() : nullptr);
1371       if (Vals.empty()) return nullptr;
1372     }
1373     if (Lex.getCode() != tgtok::r_square) {
1374       TokError("expected ']' at end of list value");
1375       return nullptr;
1376     }
1377     Lex.Lex();  // eat the ']'
1378
1379     RecTy *GivenEltTy = nullptr;
1380     if (Lex.getCode() == tgtok::less) {
1381       // Optional list element type
1382       Lex.Lex();  // eat the '<'
1383
1384       GivenEltTy = ParseType();
1385       if (!GivenEltTy) {
1386         // Couldn't parse element type
1387         return nullptr;
1388       }
1389
1390       if (Lex.getCode() != tgtok::greater) {
1391         TokError("expected '>' at end of list element type");
1392         return nullptr;
1393       }
1394       Lex.Lex();  // eat the '>'
1395     }
1396
1397     // Check elements
1398     RecTy *EltTy = nullptr;
1399     for (std::vector<Init *>::iterator i = Vals.begin(), ie = Vals.end();
1400          i != ie;
1401          ++i) {
1402       TypedInit *TArg = dyn_cast<TypedInit>(*i);
1403       if (!TArg) {
1404         TokError("Untyped list element");
1405         return nullptr;
1406       }
1407       if (EltTy) {
1408         EltTy = resolveTypes(EltTy, TArg->getType());
1409         if (!EltTy) {
1410           TokError("Incompatible types in list elements");
1411           return nullptr;
1412         }
1413       } else {
1414         EltTy = TArg->getType();
1415       }
1416     }
1417
1418     if (GivenEltTy) {
1419       if (EltTy) {
1420         // Verify consistency
1421         if (!EltTy->typeIsConvertibleTo(GivenEltTy)) {
1422           TokError("Incompatible types in list elements");
1423           return nullptr;
1424         }
1425       }
1426       EltTy = GivenEltTy;
1427     }
1428
1429     if (!EltTy) {
1430       if (!ItemType) {
1431         TokError("No type for list");
1432         return nullptr;
1433       }
1434       DeducedEltTy = GivenListTy->getElementType();
1435     } else {
1436       // Make sure the deduced type is compatible with the given type
1437       if (GivenListTy) {
1438         if (!EltTy->typeIsConvertibleTo(GivenListTy->getElementType())) {
1439           TokError("Element type mismatch for list");
1440           return nullptr;
1441         }
1442       }
1443       DeducedEltTy = EltTy;
1444     }
1445
1446     return ListInit::get(Vals, DeducedEltTy);
1447   }
1448   case tgtok::l_paren: {         // Value ::= '(' IDValue DagArgList ')'
1449     Lex.Lex();   // eat the '('
1450     if (Lex.getCode() != tgtok::Id && Lex.getCode() != tgtok::XCast) {
1451       TokError("expected identifier in dag init");
1452       return nullptr;
1453     }
1454
1455     Init *Operator = ParseValue(CurRec);
1456     if (!Operator) return nullptr;
1457
1458     // If the operator name is present, parse it.
1459     std::string OperatorName;
1460     if (Lex.getCode() == tgtok::colon) {
1461       if (Lex.Lex() != tgtok::VarName) { // eat the ':'
1462         TokError("expected variable name in dag operator");
1463         return nullptr;
1464       }
1465       OperatorName = Lex.getCurStrVal();
1466       Lex.Lex();  // eat the VarName.
1467     }
1468
1469     std::vector<std::pair<llvm::Init*, std::string> > DagArgs;
1470     if (Lex.getCode() != tgtok::r_paren) {
1471       DagArgs = ParseDagArgList(CurRec);
1472       if (DagArgs.empty()) return nullptr;
1473     }
1474
1475     if (Lex.getCode() != tgtok::r_paren) {
1476       TokError("expected ')' in dag init");
1477       return nullptr;
1478     }
1479     Lex.Lex();  // eat the ')'
1480
1481     return DagInit::get(Operator, OperatorName, DagArgs);
1482   }
1483
1484   case tgtok::XHead:
1485   case tgtok::XTail:
1486   case tgtok::XEmpty:
1487   case tgtok::XCast:  // Value ::= !unop '(' Value ')'
1488   case tgtok::XConcat:
1489   case tgtok::XADD:
1490   case tgtok::XAND:
1491   case tgtok::XSRA:
1492   case tgtok::XSRL:
1493   case tgtok::XSHL:
1494   case tgtok::XEq:
1495   case tgtok::XListConcat:
1496   case tgtok::XStrConcat:   // Value ::= !binop '(' Value ',' Value ')'
1497   case tgtok::XIf:
1498   case tgtok::XForEach:
1499   case tgtok::XSubst: {  // Value ::= !ternop '(' Value ',' Value ',' Value ')'
1500     return ParseOperation(CurRec, ItemType);
1501   }
1502   }
1503
1504   return R;
1505 }
1506
1507 /// ParseValue - Parse a tblgen value.  This returns null on error.
1508 ///
1509 ///   Value       ::= SimpleValue ValueSuffix*
1510 ///   ValueSuffix ::= '{' BitList '}'
1511 ///   ValueSuffix ::= '[' BitList ']'
1512 ///   ValueSuffix ::= '.' ID
1513 ///
1514 Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
1515   Init *Result = ParseSimpleValue(CurRec, ItemType, Mode);
1516   if (!Result) return nullptr;
1517
1518   // Parse the suffixes now if present.
1519   while (1) {
1520     switch (Lex.getCode()) {
1521     default: return Result;
1522     case tgtok::l_brace: {
1523       if (Mode == ParseNameMode || Mode == ParseForeachMode)
1524         // This is the beginning of the object body.
1525         return Result;
1526
1527       SMLoc CurlyLoc = Lex.getLoc();
1528       Lex.Lex(); // eat the '{'
1529       std::vector<unsigned> Ranges = ParseRangeList();
1530       if (Ranges.empty()) return nullptr;
1531
1532       // Reverse the bitlist.
1533       std::reverse(Ranges.begin(), Ranges.end());
1534       Result = Result->convertInitializerBitRange(Ranges);
1535       if (!Result) {
1536         Error(CurlyLoc, "Invalid bit range for value");
1537         return nullptr;
1538       }
1539
1540       // Eat the '}'.
1541       if (Lex.getCode() != tgtok::r_brace) {
1542         TokError("expected '}' at end of bit range list");
1543         return nullptr;
1544       }
1545       Lex.Lex();
1546       break;
1547     }
1548     case tgtok::l_square: {
1549       SMLoc SquareLoc = Lex.getLoc();
1550       Lex.Lex(); // eat the '['
1551       std::vector<unsigned> Ranges = ParseRangeList();
1552       if (Ranges.empty()) return nullptr;
1553
1554       Result = Result->convertInitListSlice(Ranges);
1555       if (!Result) {
1556         Error(SquareLoc, "Invalid range for list slice");
1557         return nullptr;
1558       }
1559
1560       // Eat the ']'.
1561       if (Lex.getCode() != tgtok::r_square) {
1562         TokError("expected ']' at end of list slice");
1563         return nullptr;
1564       }
1565       Lex.Lex();
1566       break;
1567     }
1568     case tgtok::period:
1569       if (Lex.Lex() != tgtok::Id) {  // eat the .
1570         TokError("expected field identifier after '.'");
1571         return nullptr;
1572       }
1573       if (!Result->getFieldType(Lex.getCurStrVal())) {
1574         TokError("Cannot access field '" + Lex.getCurStrVal() + "' of value '" +
1575                  Result->getAsString() + "'");
1576         return nullptr;
1577       }
1578       Result = FieldInit::get(Result, Lex.getCurStrVal());
1579       Lex.Lex();  // eat field name
1580       break;
1581
1582     case tgtok::paste:
1583       SMLoc PasteLoc = Lex.getLoc();
1584
1585       // Create a !strconcat() operation, first casting each operand to
1586       // a string if necessary.
1587
1588       TypedInit *LHS = dyn_cast<TypedInit>(Result);
1589       if (!LHS) {
1590         Error(PasteLoc, "LHS of paste is not typed!");
1591         return nullptr;
1592       }
1593   
1594       if (LHS->getType() != StringRecTy::get()) {
1595         LHS = UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get());
1596       }
1597
1598       TypedInit *RHS = nullptr;
1599
1600       Lex.Lex();  // Eat the '#'.
1601       switch (Lex.getCode()) { 
1602       case tgtok::colon:
1603       case tgtok::semi:
1604       case tgtok::l_brace:
1605         // These are all of the tokens that can begin an object body.
1606         // Some of these can also begin values but we disallow those cases
1607         // because they are unlikely to be useful.
1608        
1609         // Trailing paste, concat with an empty string.
1610         RHS = StringInit::get("");
1611         break;
1612
1613       default:
1614         Init *RHSResult = ParseValue(CurRec, ItemType, ParseNameMode);
1615         RHS = dyn_cast<TypedInit>(RHSResult);
1616         if (!RHS) {
1617           Error(PasteLoc, "RHS of paste is not typed!");
1618           return nullptr;
1619         }
1620
1621         if (RHS->getType() != StringRecTy::get()) {
1622           RHS = UnOpInit::get(UnOpInit::CAST, RHS, StringRecTy::get());
1623         }
1624   
1625         break;
1626       }
1627
1628       Result = BinOpInit::get(BinOpInit::STRCONCAT, LHS, RHS,
1629                               StringRecTy::get())->Fold(CurRec, CurMultiClass);
1630       break;
1631     }
1632   }
1633 }
1634
1635 /// ParseDagArgList - Parse the argument list for a dag literal expression.
1636 ///
1637 ///    DagArg     ::= Value (':' VARNAME)?
1638 ///    DagArg     ::= VARNAME
1639 ///    DagArgList ::= DagArg
1640 ///    DagArgList ::= DagArgList ',' DagArg
1641 std::vector<std::pair<llvm::Init*, std::string> >
1642 TGParser::ParseDagArgList(Record *CurRec) {
1643   std::vector<std::pair<llvm::Init*, std::string> > Result;
1644
1645   while (1) {
1646     // DagArg ::= VARNAME
1647     if (Lex.getCode() == tgtok::VarName) {
1648       // A missing value is treated like '?'.
1649       Result.push_back(std::make_pair(UnsetInit::get(), Lex.getCurStrVal()));
1650       Lex.Lex();
1651     } else {
1652       // DagArg ::= Value (':' VARNAME)?
1653       Init *Val = ParseValue(CurRec);
1654       if (!Val)
1655         return std::vector<std::pair<llvm::Init*, std::string> >();
1656
1657       // If the variable name is present, add it.
1658       std::string VarName;
1659       if (Lex.getCode() == tgtok::colon) {
1660         if (Lex.Lex() != tgtok::VarName) { // eat the ':'
1661           TokError("expected variable name in dag literal");
1662           return std::vector<std::pair<llvm::Init*, std::string> >();
1663         }
1664         VarName = Lex.getCurStrVal();
1665         Lex.Lex();  // eat the VarName.
1666       }
1667
1668       Result.push_back(std::make_pair(Val, VarName));
1669     }
1670     if (Lex.getCode() != tgtok::comma) break;
1671     Lex.Lex(); // eat the ','
1672   }
1673
1674   return Result;
1675 }
1676
1677
1678 /// ParseValueList - Parse a comma separated list of values, returning them as a
1679 /// vector.  Note that this always expects to be able to parse at least one
1680 /// value.  It returns an empty list if this is not possible.
1681 ///
1682 ///   ValueList ::= Value (',' Value)
1683 ///
1684 std::vector<Init*> TGParser::ParseValueList(Record *CurRec, Record *ArgsRec,
1685                                             RecTy *EltTy) {
1686   std::vector<Init*> Result;
1687   RecTy *ItemType = EltTy;
1688   unsigned int ArgN = 0;
1689   if (ArgsRec && !EltTy) {
1690     const std::vector<Init *> &TArgs = ArgsRec->getTemplateArgs();
1691     if (!TArgs.size()) {
1692       TokError("template argument provided to non-template class");
1693       return std::vector<Init*>();
1694     }
1695     const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
1696     if (!RV) {
1697       errs() << "Cannot find template arg " << ArgN << " (" << TArgs[ArgN]
1698         << ")\n";
1699     }
1700     assert(RV && "Template argument record not found??");
1701     ItemType = RV->getType();
1702     ++ArgN;
1703   }
1704   Result.push_back(ParseValue(CurRec, ItemType));
1705   if (!Result.back()) return std::vector<Init*>();
1706
1707   while (Lex.getCode() == tgtok::comma) {
1708     Lex.Lex();  // Eat the comma
1709
1710     if (ArgsRec && !EltTy) {
1711       const std::vector<Init *> &TArgs = ArgsRec->getTemplateArgs();
1712       if (ArgN >= TArgs.size()) {
1713         TokError("too many template arguments");
1714         return std::vector<Init*>();
1715       }
1716       const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
1717       assert(RV && "Template argument record not found??");
1718       ItemType = RV->getType();
1719       ++ArgN;
1720     }
1721     Result.push_back(ParseValue(CurRec, ItemType));
1722     if (!Result.back()) return std::vector<Init*>();
1723   }
1724
1725   return Result;
1726 }
1727
1728
1729 /// ParseDeclaration - Read a declaration, returning the name of field ID, or an
1730 /// empty string on error.  This can happen in a number of different context's,
1731 /// including within a def or in the template args for a def (which which case
1732 /// CurRec will be non-null) and within the template args for a multiclass (in
1733 /// which case CurRec will be null, but CurMultiClass will be set).  This can
1734 /// also happen within a def that is within a multiclass, which will set both
1735 /// CurRec and CurMultiClass.
1736 ///
1737 ///  Declaration ::= FIELD? Type ID ('=' Value)?
1738 ///
1739 Init *TGParser::ParseDeclaration(Record *CurRec,
1740                                        bool ParsingTemplateArgs) {
1741   // Read the field prefix if present.
1742   bool HasField = Lex.getCode() == tgtok::Field;
1743   if (HasField) Lex.Lex();
1744
1745   RecTy *Type = ParseType();
1746   if (!Type) return nullptr;
1747
1748   if (Lex.getCode() != tgtok::Id) {
1749     TokError("Expected identifier in declaration");
1750     return nullptr;
1751   }
1752
1753   SMLoc IdLoc = Lex.getLoc();
1754   Init *DeclName = StringInit::get(Lex.getCurStrVal());
1755   Lex.Lex();
1756
1757   if (ParsingTemplateArgs) {
1758     if (CurRec) {
1759       DeclName = QualifyName(*CurRec, CurMultiClass, DeclName, ":");
1760     } else {
1761       assert(CurMultiClass);
1762     }
1763     if (CurMultiClass)
1764       DeclName = QualifyName(CurMultiClass->Rec, CurMultiClass, DeclName,
1765                              "::");
1766   }
1767
1768   // Add the value.
1769   if (AddValue(CurRec, IdLoc, RecordVal(DeclName, Type, HasField)))
1770     return nullptr;
1771
1772   // If a value is present, parse it.
1773   if (Lex.getCode() == tgtok::equal) {
1774     Lex.Lex();
1775     SMLoc ValLoc = Lex.getLoc();
1776     Init *Val = ParseValue(CurRec, Type);
1777     if (!Val ||
1778         SetValue(CurRec, ValLoc, DeclName, std::vector<unsigned>(), Val))
1779       // Return the name, even if an error is thrown.  This is so that we can
1780       // continue to make some progress, even without the value having been
1781       // initialized.
1782       return DeclName;
1783   }
1784
1785   return DeclName;
1786 }
1787
1788 /// ParseForeachDeclaration - Read a foreach declaration, returning
1789 /// the name of the declared object or a NULL Init on error.  Return
1790 /// the name of the parsed initializer list through ForeachListName.
1791 ///
1792 ///  ForeachDeclaration ::= ID '=' '[' ValueList ']'
1793 ///  ForeachDeclaration ::= ID '=' '{' RangeList '}'
1794 ///  ForeachDeclaration ::= ID '=' RangePiece
1795 ///
1796 VarInit *TGParser::ParseForeachDeclaration(ListInit *&ForeachListValue) {
1797   if (Lex.getCode() != tgtok::Id) {
1798     TokError("Expected identifier in foreach declaration");
1799     return nullptr;
1800   }
1801
1802   Init *DeclName = StringInit::get(Lex.getCurStrVal());
1803   Lex.Lex();
1804
1805   // If a value is present, parse it.
1806   if (Lex.getCode() != tgtok::equal) {
1807     TokError("Expected '=' in foreach declaration");
1808     return nullptr;
1809   }
1810   Lex.Lex();  // Eat the '='
1811
1812   RecTy *IterType = nullptr;
1813   std::vector<unsigned> Ranges;
1814
1815   switch (Lex.getCode()) {
1816   default: TokError("Unknown token when expecting a range list"); return nullptr;
1817   case tgtok::l_square: { // '[' ValueList ']'
1818     Init *List = ParseSimpleValue(nullptr, nullptr, ParseForeachMode);
1819     ForeachListValue = dyn_cast<ListInit>(List);
1820     if (!ForeachListValue) {
1821       TokError("Expected a Value list");
1822       return nullptr;
1823     }
1824     RecTy *ValueType = ForeachListValue->getType();
1825     ListRecTy *ListType = dyn_cast<ListRecTy>(ValueType);
1826     if (!ListType) {
1827       TokError("Value list is not of list type");
1828       return nullptr;
1829     }
1830     IterType = ListType->getElementType();
1831     break;
1832   }
1833
1834   case tgtok::IntVal: { // RangePiece.
1835     if (ParseRangePiece(Ranges))
1836       return nullptr;
1837     break;
1838   }
1839
1840   case tgtok::l_brace: { // '{' RangeList '}'
1841     Lex.Lex(); // eat the '{'
1842     Ranges = ParseRangeList();
1843     if (Lex.getCode() != tgtok::r_brace) {
1844       TokError("expected '}' at end of bit range list");
1845       return nullptr;
1846     }
1847     Lex.Lex();
1848     break;
1849   }
1850   }
1851
1852   if (!Ranges.empty()) {
1853     assert(!IterType && "Type already initialized?");
1854     IterType = IntRecTy::get();
1855     std::vector<Init*> Values;
1856     for (unsigned i = 0, e = Ranges.size(); i != e; ++i)
1857       Values.push_back(IntInit::get(Ranges[i]));
1858     ForeachListValue = ListInit::get(Values, IterType);
1859   }
1860
1861   if (!IterType)
1862     return nullptr;
1863
1864   return VarInit::get(DeclName, IterType);
1865 }
1866
1867 /// ParseTemplateArgList - Read a template argument list, which is a non-empty
1868 /// sequence of template-declarations in <>'s.  If CurRec is non-null, these are
1869 /// template args for a def, which may or may not be in a multiclass.  If null,
1870 /// these are the template args for a multiclass.
1871 ///
1872 ///    TemplateArgList ::= '<' Declaration (',' Declaration)* '>'
1873 ///
1874 bool TGParser::ParseTemplateArgList(Record *CurRec) {
1875   assert(Lex.getCode() == tgtok::less && "Not a template arg list!");
1876   Lex.Lex(); // eat the '<'
1877
1878   Record *TheRecToAddTo = CurRec ? CurRec : &CurMultiClass->Rec;
1879
1880   // Read the first declaration.
1881   Init *TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
1882   if (!TemplArg)
1883     return true;
1884
1885   TheRecToAddTo->addTemplateArg(TemplArg);
1886
1887   while (Lex.getCode() == tgtok::comma) {
1888     Lex.Lex(); // eat the ','
1889
1890     // Read the following declarations.
1891     TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
1892     if (!TemplArg)
1893       return true;
1894     TheRecToAddTo->addTemplateArg(TemplArg);
1895   }
1896
1897   if (Lex.getCode() != tgtok::greater)
1898     return TokError("expected '>' at end of template argument list");
1899   Lex.Lex(); // eat the '>'.
1900   return false;
1901 }
1902
1903
1904 /// ParseBodyItem - Parse a single item at within the body of a def or class.
1905 ///
1906 ///   BodyItem ::= Declaration ';'
1907 ///   BodyItem ::= LET ID OptionalBitList '=' Value ';'
1908 bool TGParser::ParseBodyItem(Record *CurRec) {
1909   if (Lex.getCode() != tgtok::Let) {
1910     if (!ParseDeclaration(CurRec, false))
1911       return true;
1912
1913     if (Lex.getCode() != tgtok::semi)
1914       return TokError("expected ';' after declaration");
1915     Lex.Lex();
1916     return false;
1917   }
1918
1919   // LET ID OptionalRangeList '=' Value ';'
1920   if (Lex.Lex() != tgtok::Id)
1921     return TokError("expected field identifier after let");
1922
1923   SMLoc IdLoc = Lex.getLoc();
1924   std::string FieldName = Lex.getCurStrVal();
1925   Lex.Lex();  // eat the field name.
1926
1927   std::vector<unsigned> BitList;
1928   if (ParseOptionalBitList(BitList))
1929     return true;
1930   std::reverse(BitList.begin(), BitList.end());
1931
1932   if (Lex.getCode() != tgtok::equal)
1933     return TokError("expected '=' in let expression");
1934   Lex.Lex();  // eat the '='.
1935
1936   RecordVal *Field = CurRec->getValue(FieldName);
1937   if (!Field)
1938     return TokError("Value '" + FieldName + "' unknown!");
1939
1940   RecTy *Type = Field->getType();
1941
1942   Init *Val = ParseValue(CurRec, Type);
1943   if (!Val) return true;
1944
1945   if (Lex.getCode() != tgtok::semi)
1946     return TokError("expected ';' after let expression");
1947   Lex.Lex();
1948
1949   return SetValue(CurRec, IdLoc, FieldName, BitList, Val);
1950 }
1951
1952 /// ParseBody - Read the body of a class or def.  Return true on error, false on
1953 /// success.
1954 ///
1955 ///   Body     ::= ';'
1956 ///   Body     ::= '{' BodyList '}'
1957 ///   BodyList BodyItem*
1958 ///
1959 bool TGParser::ParseBody(Record *CurRec) {
1960   // If this is a null definition, just eat the semi and return.
1961   if (Lex.getCode() == tgtok::semi) {
1962     Lex.Lex();
1963     return false;
1964   }
1965
1966   if (Lex.getCode() != tgtok::l_brace)
1967     return TokError("Expected ';' or '{' to start body");
1968   // Eat the '{'.
1969   Lex.Lex();
1970
1971   while (Lex.getCode() != tgtok::r_brace)
1972     if (ParseBodyItem(CurRec))
1973       return true;
1974
1975   // Eat the '}'.
1976   Lex.Lex();
1977   return false;
1978 }
1979
1980 /// \brief Apply the current let bindings to \a CurRec.
1981 /// \returns true on error, false otherwise.
1982 bool TGParser::ApplyLetStack(Record *CurRec) {
1983   for (unsigned i = 0, e = LetStack.size(); i != e; ++i)
1984     for (unsigned j = 0, e = LetStack[i].size(); j != e; ++j)
1985       if (SetValue(CurRec, LetStack[i][j].Loc, LetStack[i][j].Name,
1986                    LetStack[i][j].Bits, LetStack[i][j].Value))
1987         return true;
1988   return false;
1989 }
1990
1991 /// ParseObjectBody - Parse the body of a def or class.  This consists of an
1992 /// optional ClassList followed by a Body.  CurRec is the current def or class
1993 /// that is being parsed.
1994 ///
1995 ///   ObjectBody      ::= BaseClassList Body
1996 ///   BaseClassList   ::= /*empty*/
1997 ///   BaseClassList   ::= ':' BaseClassListNE
1998 ///   BaseClassListNE ::= SubClassRef (',' SubClassRef)*
1999 ///
2000 bool TGParser::ParseObjectBody(Record *CurRec) {
2001   // If there is a baseclass list, read it.
2002   if (Lex.getCode() == tgtok::colon) {
2003     Lex.Lex();
2004
2005     // Read all of the subclasses.
2006     SubClassReference SubClass = ParseSubClassReference(CurRec, false);
2007     while (1) {
2008       // Check for error.
2009       if (!SubClass.Rec) return true;
2010
2011       // Add it.
2012       if (AddSubClass(CurRec, SubClass))
2013         return true;
2014
2015       if (Lex.getCode() != tgtok::comma) break;
2016       Lex.Lex(); // eat ','.
2017       SubClass = ParseSubClassReference(CurRec, false);
2018     }
2019   }
2020
2021   if (ApplyLetStack(CurRec))
2022     return true;
2023
2024   return ParseBody(CurRec);
2025 }
2026
2027 /// ParseDef - Parse and return a top level or multiclass def, return the record
2028 /// corresponding to it.  This returns null on error.
2029 ///
2030 ///   DefInst ::= DEF ObjectName ObjectBody
2031 ///
2032 bool TGParser::ParseDef(MultiClass *CurMultiClass) {
2033   SMLoc DefLoc = Lex.getLoc();
2034   assert(Lex.getCode() == tgtok::Def && "Unknown tok");
2035   Lex.Lex();  // Eat the 'def' token.
2036
2037   // Parse ObjectName and make a record for it.
2038   Record *CurRec;
2039   bool CurRecOwnershipTransferred = false;
2040   Init *Name = ParseObjectName(CurMultiClass);
2041   if (Name)
2042     CurRec = new Record(Name, DefLoc, Records);
2043   else
2044     CurRec = new Record(GetNewAnonymousName(), DefLoc, Records,
2045                         /*IsAnonymous=*/true);
2046
2047   if (!CurMultiClass && Loops.empty()) {
2048     // Top-level def definition.
2049
2050     // Ensure redefinition doesn't happen.
2051     if (Records.getDef(CurRec->getNameInitAsString())) {
2052       Error(DefLoc, "def '" + CurRec->getNameInitAsString()
2053             + "' already defined");
2054       delete CurRec;
2055       return true;
2056     }
2057     Records.addDef(CurRec);
2058     CurRecOwnershipTransferred = true;
2059
2060     if (ParseObjectBody(CurRec))
2061       return true;
2062   } else if (CurMultiClass) {
2063     // Parse the body before adding this prototype to the DefPrototypes vector.
2064     // That way implicit definitions will be added to the DefPrototypes vector
2065     // before this object, instantiated prior to defs derived from this object,
2066     // and this available for indirect name resolution when defs derived from
2067     // this object are instantiated.
2068     if (ParseObjectBody(CurRec)) {
2069       delete CurRec;
2070       return true;
2071     }
2072
2073     // Otherwise, a def inside a multiclass, add it to the multiclass.
2074     for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size(); i != e; ++i)
2075       if (CurMultiClass->DefPrototypes[i]->getNameInit()
2076           == CurRec->getNameInit()) {
2077         Error(DefLoc, "def '" + CurRec->getNameInitAsString() +
2078               "' already defined in this multiclass!");
2079         delete CurRec;
2080         return true;
2081       }
2082     CurMultiClass->DefPrototypes.push_back(CurRec);
2083     CurRecOwnershipTransferred = true;
2084   } else if (ParseObjectBody(CurRec)) {
2085     delete CurRec;
2086     return true;
2087   }
2088
2089   if (!CurMultiClass)  // Def's in multiclasses aren't really defs.
2090     // See Record::setName().  This resolve step will see any new name
2091     // for the def that might have been created when resolving
2092     // inheritance, values and arguments above.
2093     CurRec->resolveReferences();
2094
2095   // If ObjectBody has template arguments, it's an error.
2096   assert(CurRec->getTemplateArgs().empty() && "How'd this get template args?");
2097
2098   if (CurMultiClass) {
2099     // Copy the template arguments for the multiclass into the def.
2100     const std::vector<Init *> &TArgs =
2101                                 CurMultiClass->Rec.getTemplateArgs();
2102
2103     for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
2104       const RecordVal *RV = CurMultiClass->Rec.getValue(TArgs[i]);
2105       assert(RV && "Template arg doesn't exist?");
2106       CurRec->addValue(*RV);
2107     }
2108   }
2109
2110   if (ProcessForeachDefs(CurRec, DefLoc)) {
2111     Error(DefLoc,
2112           "Could not process loops for def" + CurRec->getNameInitAsString());
2113     if (!CurRecOwnershipTransferred)
2114       delete CurRec;
2115     return true;
2116   }
2117
2118   if (!CurRecOwnershipTransferred)
2119     delete CurRec;
2120   return false;
2121 }
2122
2123 /// ParseForeach - Parse a for statement.  Return the record corresponding
2124 /// to it.  This returns true on error.
2125 ///
2126 ///   Foreach ::= FOREACH Declaration IN '{ ObjectList '}'
2127 ///   Foreach ::= FOREACH Declaration IN Object
2128 ///
2129 bool TGParser::ParseForeach(MultiClass *CurMultiClass) {
2130   assert(Lex.getCode() == tgtok::Foreach && "Unknown tok");
2131   Lex.Lex();  // Eat the 'for' token.
2132
2133   // Make a temporary object to record items associated with the for
2134   // loop.
2135   ListInit *ListValue = nullptr;
2136   VarInit *IterName = ParseForeachDeclaration(ListValue);
2137   if (!IterName)
2138     return TokError("expected declaration in for");
2139
2140   if (Lex.getCode() != tgtok::In)
2141     return TokError("Unknown tok");
2142   Lex.Lex();  // Eat the in
2143
2144   // Create a loop object and remember it.
2145   Loops.push_back(ForeachLoop(IterName, ListValue));
2146
2147   if (Lex.getCode() != tgtok::l_brace) {
2148     // FOREACH Declaration IN Object
2149     if (ParseObject(CurMultiClass))
2150       return true;
2151   }
2152   else {
2153     SMLoc BraceLoc = Lex.getLoc();
2154     // Otherwise, this is a group foreach.
2155     Lex.Lex();  // eat the '{'.
2156
2157     // Parse the object list.
2158     if (ParseObjectList(CurMultiClass))
2159       return true;
2160
2161     if (Lex.getCode() != tgtok::r_brace) {
2162       TokError("expected '}' at end of foreach command");
2163       return Error(BraceLoc, "to match this '{'");
2164     }
2165     Lex.Lex();  // Eat the }
2166   }
2167
2168   // We've processed everything in this loop.
2169   Loops.pop_back();
2170
2171   return false;
2172 }
2173
2174 /// ParseClass - Parse a tblgen class definition.
2175 ///
2176 ///   ClassInst ::= CLASS ID TemplateArgList? ObjectBody
2177 ///
2178 bool TGParser::ParseClass() {
2179   assert(Lex.getCode() == tgtok::Class && "Unexpected token!");
2180   Lex.Lex();
2181
2182   if (Lex.getCode() != tgtok::Id)
2183     return TokError("expected class name after 'class' keyword");
2184
2185   Record *CurRec = Records.getClass(Lex.getCurStrVal());
2186   if (CurRec) {
2187     // If the body was previously defined, this is an error.
2188     if (CurRec->getValues().size() > 1 ||  // Account for NAME.
2189         !CurRec->getSuperClasses().empty() ||
2190         !CurRec->getTemplateArgs().empty())
2191       return TokError("Class '" + CurRec->getNameInitAsString()
2192                       + "' already defined");
2193   } else {
2194     // If this is the first reference to this class, create and add it.
2195     CurRec = new Record(Lex.getCurStrVal(), Lex.getLoc(), Records);
2196     Records.addClass(CurRec);
2197   }
2198   Lex.Lex(); // eat the name.
2199
2200   // If there are template args, parse them.
2201   if (Lex.getCode() == tgtok::less)
2202     if (ParseTemplateArgList(CurRec))
2203       return true;
2204
2205   // Finally, parse the object body.
2206   return ParseObjectBody(CurRec);
2207 }
2208
2209 /// ParseLetList - Parse a non-empty list of assignment expressions into a list
2210 /// of LetRecords.
2211 ///
2212 ///   LetList ::= LetItem (',' LetItem)*
2213 ///   LetItem ::= ID OptionalRangeList '=' Value
2214 ///
2215 std::vector<LetRecord> TGParser::ParseLetList() {
2216   std::vector<LetRecord> Result;
2217
2218   while (1) {
2219     if (Lex.getCode() != tgtok::Id) {
2220       TokError("expected identifier in let definition");
2221       return std::vector<LetRecord>();
2222     }
2223     std::string Name = Lex.getCurStrVal();
2224     SMLoc NameLoc = Lex.getLoc();
2225     Lex.Lex();  // Eat the identifier.
2226
2227     // Check for an optional RangeList.
2228     std::vector<unsigned> Bits;
2229     if (ParseOptionalRangeList(Bits))
2230       return std::vector<LetRecord>();
2231     std::reverse(Bits.begin(), Bits.end());
2232
2233     if (Lex.getCode() != tgtok::equal) {
2234       TokError("expected '=' in let expression");
2235       return std::vector<LetRecord>();
2236     }
2237     Lex.Lex();  // eat the '='.
2238
2239     Init *Val = ParseValue(nullptr);
2240     if (!Val) return std::vector<LetRecord>();
2241
2242     // Now that we have everything, add the record.
2243     Result.push_back(LetRecord(Name, Bits, Val, NameLoc));
2244
2245     if (Lex.getCode() != tgtok::comma)
2246       return Result;
2247     Lex.Lex();  // eat the comma.
2248   }
2249 }
2250
2251 /// ParseTopLevelLet - Parse a 'let' at top level.  This can be a couple of
2252 /// different related productions. This works inside multiclasses too.
2253 ///
2254 ///   Object ::= LET LetList IN '{' ObjectList '}'
2255 ///   Object ::= LET LetList IN Object
2256 ///
2257 bool TGParser::ParseTopLevelLet(MultiClass *CurMultiClass) {
2258   assert(Lex.getCode() == tgtok::Let && "Unexpected token");
2259   Lex.Lex();
2260
2261   // Add this entry to the let stack.
2262   std::vector<LetRecord> LetInfo = ParseLetList();
2263   if (LetInfo.empty()) return true;
2264   LetStack.push_back(LetInfo);
2265
2266   if (Lex.getCode() != tgtok::In)
2267     return TokError("expected 'in' at end of top-level 'let'");
2268   Lex.Lex();
2269
2270   // If this is a scalar let, just handle it now
2271   if (Lex.getCode() != tgtok::l_brace) {
2272     // LET LetList IN Object
2273     if (ParseObject(CurMultiClass))
2274       return true;
2275   } else {   // Object ::= LETCommand '{' ObjectList '}'
2276     SMLoc BraceLoc = Lex.getLoc();
2277     // Otherwise, this is a group let.
2278     Lex.Lex();  // eat the '{'.
2279
2280     // Parse the object list.
2281     if (ParseObjectList(CurMultiClass))
2282       return true;
2283
2284     if (Lex.getCode() != tgtok::r_brace) {
2285       TokError("expected '}' at end of top level let command");
2286       return Error(BraceLoc, "to match this '{'");
2287     }
2288     Lex.Lex();
2289   }
2290
2291   // Outside this let scope, this let block is not active.
2292   LetStack.pop_back();
2293   return false;
2294 }
2295
2296 /// ParseMultiClass - Parse a multiclass definition.
2297 ///
2298 ///  MultiClassInst ::= MULTICLASS ID TemplateArgList?
2299 ///                     ':' BaseMultiClassList '{' MultiClassObject+ '}'
2300 ///  MultiClassObject ::= DefInst
2301 ///  MultiClassObject ::= MultiClassInst
2302 ///  MultiClassObject ::= DefMInst
2303 ///  MultiClassObject ::= LETCommand '{' ObjectList '}'
2304 ///  MultiClassObject ::= LETCommand Object
2305 ///
2306 bool TGParser::ParseMultiClass() {
2307   assert(Lex.getCode() == tgtok::MultiClass && "Unexpected token");
2308   Lex.Lex();  // Eat the multiclass token.
2309
2310   if (Lex.getCode() != tgtok::Id)
2311     return TokError("expected identifier after multiclass for name");
2312   std::string Name = Lex.getCurStrVal();
2313
2314   if (MultiClasses.count(Name))
2315     return TokError("multiclass '" + Name + "' already defined");
2316
2317   CurMultiClass = MultiClasses[Name] = new MultiClass(Name, 
2318                                                       Lex.getLoc(), Records);
2319   Lex.Lex();  // Eat the identifier.
2320
2321   // If there are template args, parse them.
2322   if (Lex.getCode() == tgtok::less)
2323     if (ParseTemplateArgList(nullptr))
2324       return true;
2325
2326   bool inherits = false;
2327
2328   // If there are submulticlasses, parse them.
2329   if (Lex.getCode() == tgtok::colon) {
2330     inherits = true;
2331
2332     Lex.Lex();
2333
2334     // Read all of the submulticlasses.
2335     SubMultiClassReference SubMultiClass =
2336       ParseSubMultiClassReference(CurMultiClass);
2337     while (1) {
2338       // Check for error.
2339       if (!SubMultiClass.MC) return true;
2340
2341       // Add it.
2342       if (AddSubMultiClass(CurMultiClass, SubMultiClass))
2343         return true;
2344
2345       if (Lex.getCode() != tgtok::comma) break;
2346       Lex.Lex(); // eat ','.
2347       SubMultiClass = ParseSubMultiClassReference(CurMultiClass);
2348     }
2349   }
2350
2351   if (Lex.getCode() != tgtok::l_brace) {
2352     if (!inherits)
2353       return TokError("expected '{' in multiclass definition");
2354     else if (Lex.getCode() != tgtok::semi)
2355       return TokError("expected ';' in multiclass definition");
2356     else
2357       Lex.Lex();  // eat the ';'.
2358   } else {
2359     if (Lex.Lex() == tgtok::r_brace)  // eat the '{'.
2360       return TokError("multiclass must contain at least one def");
2361
2362     while (Lex.getCode() != tgtok::r_brace) {
2363       switch (Lex.getCode()) {
2364         default:
2365           return TokError("expected 'let', 'def' or 'defm' in multiclass body");
2366         case tgtok::Let:
2367         case tgtok::Def:
2368         case tgtok::Defm:
2369         case tgtok::Foreach:
2370           if (ParseObject(CurMultiClass))
2371             return true;
2372          break;
2373       }
2374     }
2375     Lex.Lex();  // eat the '}'.
2376   }
2377
2378   CurMultiClass = nullptr;
2379   return false;
2380 }
2381
2382 Record *TGParser::
2383 InstantiateMulticlassDef(MultiClass &MC,
2384                          Record *DefProto,
2385                          Init *&DefmPrefix,
2386                          SMRange DefmPrefixRange) {
2387   // We need to preserve DefProto so it can be reused for later
2388   // instantiations, so create a new Record to inherit from it.
2389
2390   // Add in the defm name.  If the defm prefix is empty, give each
2391   // instantiated def a unique name.  Otherwise, if "#NAME#" exists in the
2392   // name, substitute the prefix for #NAME#.  Otherwise, use the defm name
2393   // as a prefix.
2394
2395   bool IsAnonymous = false;
2396   if (!DefmPrefix) {
2397     DefmPrefix = StringInit::get(GetNewAnonymousName());
2398     IsAnonymous = true;
2399   }
2400
2401   Init *DefName = DefProto->getNameInit();
2402
2403   StringInit *DefNameString = dyn_cast<StringInit>(DefName);
2404
2405   if (DefNameString) {
2406     // We have a fully expanded string so there are no operators to
2407     // resolve.  We should concatenate the given prefix and name.
2408     DefName =
2409       BinOpInit::get(BinOpInit::STRCONCAT,
2410                      UnOpInit::get(UnOpInit::CAST, DefmPrefix,
2411                                    StringRecTy::get())->Fold(DefProto, &MC),
2412                      DefName, StringRecTy::get())->Fold(DefProto, &MC);
2413   }
2414
2415   // Make a trail of SMLocs from the multiclass instantiations.
2416   SmallVector<SMLoc, 4> Locs(1, DefmPrefixRange.Start);
2417   Locs.append(DefProto->getLoc().begin(), DefProto->getLoc().end());
2418   Record *CurRec = new Record(DefName, Locs, Records, IsAnonymous);
2419
2420   SubClassReference Ref;
2421   Ref.RefRange = DefmPrefixRange;
2422   Ref.Rec = DefProto;
2423   AddSubClass(CurRec, Ref);
2424
2425   // Set the value for NAME. We don't resolve references to it 'til later,
2426   // though, so that uses in nested multiclass names don't get
2427   // confused.
2428   if (SetValue(CurRec, Ref.RefRange.Start, "NAME", std::vector<unsigned>(),
2429                DefmPrefix)) {
2430     Error(DefmPrefixRange.Start, "Could not resolve "
2431           + CurRec->getNameInitAsString() + ":NAME to '"
2432           + DefmPrefix->getAsUnquotedString() + "'");
2433     delete CurRec;
2434     return nullptr;
2435   }
2436
2437   // If the DefNameString didn't resolve, we probably have a reference to
2438   // NAME and need to replace it. We need to do at least this much greedily,
2439   // otherwise nested multiclasses will end up with incorrect NAME expansions.
2440   if (!DefNameString) {
2441     RecordVal *DefNameRV = CurRec->getValue("NAME");
2442     CurRec->resolveReferencesTo(DefNameRV);
2443   }
2444
2445   if (!CurMultiClass) {
2446     // Now that we're at the top level, resolve all NAME references
2447     // in the resultant defs that weren't in the def names themselves.
2448     RecordVal *DefNameRV = CurRec->getValue("NAME");
2449     CurRec->resolveReferencesTo(DefNameRV);
2450
2451     // Now that NAME references are resolved and we're at the top level of
2452     // any multiclass expansions, add the record to the RecordKeeper. If we are
2453     // currently in a multiclass, it means this defm appears inside a
2454     // multiclass and its name won't be fully resolvable until we see
2455     // the top-level defm.  Therefore, we don't add this to the
2456     // RecordKeeper at this point.  If we did we could get duplicate
2457     // defs as more than one probably refers to NAME or some other
2458     // common internal placeholder.
2459
2460     // Ensure redefinition doesn't happen.
2461     if (Records.getDef(CurRec->getNameInitAsString())) {
2462       Error(DefmPrefixRange.Start, "def '" + CurRec->getNameInitAsString() +
2463             "' already defined, instantiating defm with subdef '" + 
2464             DefProto->getNameInitAsString() + "'");
2465       delete CurRec;
2466       return nullptr;
2467     }
2468
2469     Records.addDef(CurRec);
2470   }
2471
2472   return CurRec;
2473 }
2474
2475 bool TGParser::ResolveMulticlassDefArgs(MultiClass &MC,
2476                                         Record *CurRec,
2477                                         SMLoc DefmPrefixLoc,
2478                                         SMLoc SubClassLoc,
2479                                         const std::vector<Init *> &TArgs,
2480                                         std::vector<Init *> &TemplateVals,
2481                                         bool DeleteArgs) {
2482   // Loop over all of the template arguments, setting them to the specified
2483   // value or leaving them as the default if necessary.
2484   for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
2485     // Check if a value is specified for this temp-arg.
2486     if (i < TemplateVals.size()) {
2487       // Set it now.
2488       if (SetValue(CurRec, DefmPrefixLoc, TArgs[i], std::vector<unsigned>(),
2489                    TemplateVals[i]))
2490         return true;
2491         
2492       // Resolve it next.
2493       CurRec->resolveReferencesTo(CurRec->getValue(TArgs[i]));
2494
2495       if (DeleteArgs)
2496         // Now remove it.
2497         CurRec->removeValue(TArgs[i]);
2498         
2499     } else if (!CurRec->getValue(TArgs[i])->getValue()->isComplete()) {
2500       return Error(SubClassLoc, "value not specified for template argument #"+
2501                    utostr(i) + " (" + TArgs[i]->getAsUnquotedString()
2502                    + ") of multiclassclass '" + MC.Rec.getNameInitAsString()
2503                    + "'");
2504     }
2505   }
2506   return false;
2507 }
2508
2509 bool TGParser::ResolveMulticlassDef(MultiClass &MC,
2510                                     Record *CurRec,
2511                                     Record *DefProto,
2512                                     SMLoc DefmPrefixLoc) {
2513   // If the mdef is inside a 'let' expression, add to each def.
2514   if (ApplyLetStack(CurRec))
2515     return Error(DefmPrefixLoc, "when instantiating this defm");
2516
2517   // Don't create a top level definition for defm inside multiclasses,
2518   // instead, only update the prototypes and bind the template args
2519   // with the new created definition.
2520   if (!CurMultiClass)
2521     return false;
2522   for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size();
2523        i != e; ++i)
2524     if (CurMultiClass->DefPrototypes[i]->getNameInit()
2525         == CurRec->getNameInit())
2526       return Error(DefmPrefixLoc, "defm '" + CurRec->getNameInitAsString() +
2527                    "' already defined in this multiclass!");
2528   CurMultiClass->DefPrototypes.push_back(CurRec);
2529
2530   // Copy the template arguments for the multiclass into the new def.
2531   const std::vector<Init *> &TA =
2532     CurMultiClass->Rec.getTemplateArgs();
2533
2534   for (unsigned i = 0, e = TA.size(); i != e; ++i) {
2535     const RecordVal *RV = CurMultiClass->Rec.getValue(TA[i]);
2536     assert(RV && "Template arg doesn't exist?");
2537     CurRec->addValue(*RV);
2538   }
2539
2540   return false;
2541 }
2542
2543 /// ParseDefm - Parse the instantiation of a multiclass.
2544 ///
2545 ///   DefMInst ::= DEFM ID ':' DefmSubClassRef ';'
2546 ///
2547 bool TGParser::ParseDefm(MultiClass *CurMultiClass) {
2548   assert(Lex.getCode() == tgtok::Defm && "Unexpected token!");
2549   SMLoc DefmLoc = Lex.getLoc();
2550   Init *DefmPrefix = nullptr;
2551
2552   if (Lex.Lex() == tgtok::Id) {  // eat the defm.
2553     DefmPrefix = ParseObjectName(CurMultiClass);
2554   }
2555
2556   SMLoc DefmPrefixEndLoc = Lex.getLoc();
2557   if (Lex.getCode() != tgtok::colon)
2558     return TokError("expected ':' after defm identifier");
2559
2560   // Keep track of the new generated record definitions.
2561   std::vector<Record*> NewRecDefs;
2562
2563   // This record also inherits from a regular class (non-multiclass)?
2564   bool InheritFromClass = false;
2565
2566   // eat the colon.
2567   Lex.Lex();
2568
2569   SMLoc SubClassLoc = Lex.getLoc();
2570   SubClassReference Ref = ParseSubClassReference(nullptr, true);
2571
2572   while (1) {
2573     if (!Ref.Rec) return true;
2574
2575     // To instantiate a multiclass, we need to first get the multiclass, then
2576     // instantiate each def contained in the multiclass with the SubClassRef
2577     // template parameters.
2578     MultiClass *MC = MultiClasses[Ref.Rec->getName()];
2579     assert(MC && "Didn't lookup multiclass correctly?");
2580     std::vector<Init*> &TemplateVals = Ref.TemplateArgs;
2581
2582     // Verify that the correct number of template arguments were specified.
2583     const std::vector<Init *> &TArgs = MC->Rec.getTemplateArgs();
2584     if (TArgs.size() < TemplateVals.size())
2585       return Error(SubClassLoc,
2586                    "more template args specified than multiclass expects");
2587
2588     // Loop over all the def's in the multiclass, instantiating each one.
2589     for (unsigned i = 0, e = MC->DefPrototypes.size(); i != e; ++i) {
2590       Record *DefProto = MC->DefPrototypes[i];
2591
2592       Record *CurRec = InstantiateMulticlassDef(*MC, DefProto, DefmPrefix,
2593                                                 SMRange(DefmLoc,
2594                                                         DefmPrefixEndLoc));
2595       if (!CurRec)
2596         return true;
2597
2598       if (ResolveMulticlassDefArgs(*MC, CurRec, DefmLoc, SubClassLoc,
2599                                    TArgs, TemplateVals, true/*Delete args*/))
2600         return Error(SubClassLoc, "could not instantiate def");
2601
2602       if (ResolveMulticlassDef(*MC, CurRec, DefProto, DefmLoc))
2603         return Error(SubClassLoc, "could not instantiate def");
2604
2605       NewRecDefs.push_back(CurRec);
2606     }
2607
2608
2609     if (Lex.getCode() != tgtok::comma) break;
2610     Lex.Lex(); // eat ','.
2611
2612     if (Lex.getCode() != tgtok::Id)
2613       return TokError("expected identifier");
2614
2615     SubClassLoc = Lex.getLoc();
2616
2617     // A defm can inherit from regular classes (non-multiclass) as
2618     // long as they come in the end of the inheritance list.
2619     InheritFromClass = (Records.getClass(Lex.getCurStrVal()) != nullptr);
2620
2621     if (InheritFromClass)
2622       break;
2623
2624     Ref = ParseSubClassReference(nullptr, true);
2625   }
2626
2627   if (InheritFromClass) {
2628     // Process all the classes to inherit as if they were part of a
2629     // regular 'def' and inherit all record values.
2630     SubClassReference SubClass = ParseSubClassReference(nullptr, false);
2631     while (1) {
2632       // Check for error.
2633       if (!SubClass.Rec) return true;
2634
2635       // Get the expanded definition prototypes and teach them about
2636       // the record values the current class to inherit has
2637       for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i) {
2638         Record *CurRec = NewRecDefs[i];
2639
2640         // Add it.
2641         if (AddSubClass(CurRec, SubClass))
2642           return true;
2643
2644         if (ApplyLetStack(CurRec))
2645           return true;
2646       }
2647
2648       if (Lex.getCode() != tgtok::comma) break;
2649       Lex.Lex(); // eat ','.
2650       SubClass = ParseSubClassReference(nullptr, false);
2651     }
2652   }
2653
2654   if (!CurMultiClass)
2655     for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i)
2656       // See Record::setName().  This resolve step will see any new
2657       // name for the def that might have been created when resolving
2658       // inheritance, values and arguments above.
2659       NewRecDefs[i]->resolveReferences();
2660
2661   if (Lex.getCode() != tgtok::semi)
2662     return TokError("expected ';' at end of defm");
2663   Lex.Lex();
2664
2665   return false;
2666 }
2667
2668 /// ParseObject
2669 ///   Object ::= ClassInst
2670 ///   Object ::= DefInst
2671 ///   Object ::= MultiClassInst
2672 ///   Object ::= DefMInst
2673 ///   Object ::= LETCommand '{' ObjectList '}'
2674 ///   Object ::= LETCommand Object
2675 bool TGParser::ParseObject(MultiClass *MC) {
2676   switch (Lex.getCode()) {
2677   default:
2678     return TokError("Expected class, def, defm, multiclass or let definition");
2679   case tgtok::Let:   return ParseTopLevelLet(MC);
2680   case tgtok::Def:   return ParseDef(MC);
2681   case tgtok::Foreach:   return ParseForeach(MC);
2682   case tgtok::Defm:  return ParseDefm(MC);
2683   case tgtok::Class: return ParseClass();
2684   case tgtok::MultiClass: return ParseMultiClass();
2685   }
2686 }
2687
2688 /// ParseObjectList
2689 ///   ObjectList :== Object*
2690 bool TGParser::ParseObjectList(MultiClass *MC) {
2691   while (isObjectStart(Lex.getCode())) {
2692     if (ParseObject(MC))
2693       return true;
2694   }
2695   return false;
2696 }
2697
2698 bool TGParser::ParseFile() {
2699   Lex.Lex(); // Prime the lexer.
2700   if (ParseObjectList()) return true;
2701
2702   // If we have unread input at the end of the file, report it.
2703   if (Lex.getCode() == tgtok::Eof)
2704     return false;
2705
2706   return TokError("Unexpected input at top level");
2707 }
2708