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