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