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