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