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