c4b48fe5e895d539c7b21cb1e0eed1d54587419e
[oota-llvm.git] / lib / TableGen / TGParser.cpp
1 //===- TGParser.cpp - Parser for TableGen Files ---------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Implement the Parser for TableGen.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "TGParser.h"
15 #include "llvm/ADT/SmallVector.h"
16 #include "llvm/ADT/StringExtras.h"
17 #include "llvm/Support/CommandLine.h"
18 #include "llvm/TableGen/Record.h"
19 #include <algorithm>
20 #include <sstream>
21 using namespace llvm;
22
23 //===----------------------------------------------------------------------===//
24 // Support Code for the Semantic Actions.
25 //===----------------------------------------------------------------------===//
26
27 namespace llvm {
28 struct SubClassReference {
29   SMRange RefRange;
30   Record *Rec;
31   std::vector<Init*> TemplateArgs;
32   SubClassReference() : Rec(0) {}
33
34   bool isInvalid() const { return Rec == 0; }
35 };
36
37 struct 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
47 void SubMultiClassReference::dump() const {
48   errs() << "Multiclass:\n";
49
50   MC->dump();
51
52   errs() << "Template args:\n";
53   for (std::vector<Init *>::const_iterator i = TemplateArgs.begin(),
54          iend = TemplateArgs.end();
55        i != iend;
56        ++i) {
57     (*i)->dump();
58   }
59 }
60
61 } // end namespace llvm
62
63 bool TGParser::AddValue(Record *CurRec, SMLoc Loc, const RecordVal &RV) {
64   if (CurRec == 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.
82 bool TGParser::SetValue(Record *CurRec, SMLoc Loc, Init *ValName,
83                         const std::vector<unsigned> &BitList, Init *V) {
84   if (!V) return false;
85
86   if (CurRec == 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.
148 bool 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.
207 bool 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.
297 bool 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.
311 bool 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.
377 static 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
383 static 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 ///
394 Init *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 ///
429 Record *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 ///
448 MultiClass *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 ///
468 SubClassReference TGParser::
469 ParseSubClassReference(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 ///
518 SubMultiClassReference TGParser::
519 ParseSubMultiClassReference(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
560 bool 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 ///
605 std::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*/
624 bool 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*/
646 bool 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 ///
677 RecTy *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 ///
732 Init *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.
742 Init *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 ///
800 Init *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 ///
1110 RecTy *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 ///
1154 Init *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::stringstream s;
1275         s << "Type mismatch for list, expected list type, got "
1276           << ItemType->getAsString();
1277         TokError(s.str());
1278         return 0;
1279       }
1280       GivenListTy = ListType;
1281     }
1282
1283     if (Lex.getCode() != tgtok::r_square) {
1284       Vals = ParseValueList(CurRec, 0,
1285                             GivenListTy ? GivenListTy->getElementType() : 0);
1286       if (Vals.empty()) return 0;
1287     }
1288     if (Lex.getCode() != tgtok::r_square) {
1289       TokError("expected ']' at end of list value");
1290       return 0;
1291     }
1292     Lex.Lex();  // eat the ']'
1293
1294     RecTy *GivenEltTy = 0;
1295     if (Lex.getCode() == tgtok::less) {
1296       // Optional list element type
1297       Lex.Lex();  // eat the '<'
1298
1299       GivenEltTy = ParseType();
1300       if (GivenEltTy == 0) {
1301         // Couldn't parse element type
1302         return 0;
1303       }
1304
1305       if (Lex.getCode() != tgtok::greater) {
1306         TokError("expected '>' at end of list element type");
1307         return 0;
1308       }
1309       Lex.Lex();  // eat the '>'
1310     }
1311
1312     // Check elements
1313     RecTy *EltTy = 0;
1314     for (std::vector<Init *>::iterator i = Vals.begin(), ie = Vals.end();
1315          i != ie;
1316          ++i) {
1317       TypedInit *TArg = dyn_cast<TypedInit>(*i);
1318       if (TArg == 0) {
1319         TokError("Untyped list element");
1320         return 0;
1321       }
1322       if (EltTy != 0) {
1323         EltTy = resolveTypes(EltTy, TArg->getType());
1324         if (EltTy == 0) {
1325           TokError("Incompatible types in list elements");
1326           return 0;
1327         }
1328       } else {
1329         EltTy = TArg->getType();
1330       }
1331     }
1332
1333     if (GivenEltTy != 0) {
1334       if (EltTy != 0) {
1335         // Verify consistency
1336         if (!EltTy->typeIsConvertibleTo(GivenEltTy)) {
1337           TokError("Incompatible types in list elements");
1338           return 0;
1339         }
1340       }
1341       EltTy = GivenEltTy;
1342     }
1343
1344     if (EltTy == 0) {
1345       if (ItemType == 0) {
1346         TokError("No type for list");
1347         return 0;
1348       }
1349       DeducedEltTy = GivenListTy->getElementType();
1350     } else {
1351       // Make sure the deduced type is compatible with the given type
1352       if (GivenListTy) {
1353         if (!EltTy->typeIsConvertibleTo(GivenListTy->getElementType())) {
1354           TokError("Element type mismatch for list");
1355           return 0;
1356         }
1357       }
1358       DeducedEltTy = EltTy;
1359     }
1360
1361     return ListInit::get(Vals, DeducedEltTy);
1362   }
1363   case tgtok::l_paren: {         // Value ::= '(' IDValue DagArgList ')'
1364     Lex.Lex();   // eat the '('
1365     if (Lex.getCode() != tgtok::Id && Lex.getCode() != tgtok::XCast) {
1366       TokError("expected identifier in dag init");
1367       return 0;
1368     }
1369
1370     Init *Operator = ParseValue(CurRec);
1371     if (Operator == 0) return 0;
1372
1373     // If the operator name is present, parse it.
1374     std::string OperatorName;
1375     if (Lex.getCode() == tgtok::colon) {
1376       if (Lex.Lex() != tgtok::VarName) { // eat the ':'
1377         TokError("expected variable name in dag operator");
1378         return 0;
1379       }
1380       OperatorName = Lex.getCurStrVal();
1381       Lex.Lex();  // eat the VarName.
1382     }
1383
1384     std::vector<std::pair<llvm::Init*, std::string> > DagArgs;
1385     if (Lex.getCode() != tgtok::r_paren) {
1386       DagArgs = ParseDagArgList(CurRec);
1387       if (DagArgs.empty()) return 0;
1388     }
1389
1390     if (Lex.getCode() != tgtok::r_paren) {
1391       TokError("expected ')' in dag init");
1392       return 0;
1393     }
1394     Lex.Lex();  // eat the ')'
1395
1396     return DagInit::get(Operator, OperatorName, DagArgs);
1397   }
1398
1399   case tgtok::XHead:
1400   case tgtok::XTail:
1401   case tgtok::XEmpty:
1402   case tgtok::XCast:  // Value ::= !unop '(' Value ')'
1403   case tgtok::XConcat:
1404   case tgtok::XADD:
1405   case tgtok::XSRA:
1406   case tgtok::XSRL:
1407   case tgtok::XSHL:
1408   case tgtok::XEq:
1409   case tgtok::XStrConcat:   // Value ::= !binop '(' Value ',' Value ')'
1410   case tgtok::XIf:
1411   case tgtok::XForEach:
1412   case tgtok::XSubst: {  // Value ::= !ternop '(' Value ',' Value ',' Value ')'
1413     return ParseOperation(CurRec);
1414   }
1415   }
1416
1417   return R;
1418 }
1419
1420 /// ParseValue - Parse a tblgen value.  This returns null on error.
1421 ///
1422 ///   Value       ::= SimpleValue ValueSuffix*
1423 ///   ValueSuffix ::= '{' BitList '}'
1424 ///   ValueSuffix ::= '[' BitList ']'
1425 ///   ValueSuffix ::= '.' ID
1426 ///
1427 Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
1428   Init *Result = ParseSimpleValue(CurRec, ItemType, Mode);
1429   if (Result == 0) return 0;
1430
1431   // Parse the suffixes now if present.
1432   while (1) {
1433     switch (Lex.getCode()) {
1434     default: return Result;
1435     case tgtok::l_brace: {
1436       if (Mode == ParseNameMode || Mode == ParseForeachMode)
1437         // This is the beginning of the object body.
1438         return Result;
1439
1440       SMLoc CurlyLoc = Lex.getLoc();
1441       Lex.Lex(); // eat the '{'
1442       std::vector<unsigned> Ranges = ParseRangeList();
1443       if (Ranges.empty()) return 0;
1444
1445       // Reverse the bitlist.
1446       std::reverse(Ranges.begin(), Ranges.end());
1447       Result = Result->convertInitializerBitRange(Ranges);
1448       if (Result == 0) {
1449         Error(CurlyLoc, "Invalid bit range for value");
1450         return 0;
1451       }
1452
1453       // Eat the '}'.
1454       if (Lex.getCode() != tgtok::r_brace) {
1455         TokError("expected '}' at end of bit range list");
1456         return 0;
1457       }
1458       Lex.Lex();
1459       break;
1460     }
1461     case tgtok::l_square: {
1462       SMLoc SquareLoc = Lex.getLoc();
1463       Lex.Lex(); // eat the '['
1464       std::vector<unsigned> Ranges = ParseRangeList();
1465       if (Ranges.empty()) return 0;
1466
1467       Result = Result->convertInitListSlice(Ranges);
1468       if (Result == 0) {
1469         Error(SquareLoc, "Invalid range for list slice");
1470         return 0;
1471       }
1472
1473       // Eat the ']'.
1474       if (Lex.getCode() != tgtok::r_square) {
1475         TokError("expected ']' at end of list slice");
1476         return 0;
1477       }
1478       Lex.Lex();
1479       break;
1480     }
1481     case tgtok::period:
1482       if (Lex.Lex() != tgtok::Id) {  // eat the .
1483         TokError("expected field identifier after '.'");
1484         return 0;
1485       }
1486       if (!Result->getFieldType(Lex.getCurStrVal())) {
1487         TokError("Cannot access field '" + Lex.getCurStrVal() + "' of value '" +
1488                  Result->getAsString() + "'");
1489         return 0;
1490       }
1491       Result = FieldInit::get(Result, Lex.getCurStrVal());
1492       Lex.Lex();  // eat field name
1493       break;
1494
1495     case tgtok::paste:
1496       SMLoc PasteLoc = Lex.getLoc();
1497
1498       // Create a !strconcat() operation, first casting each operand to
1499       // a string if necessary.
1500
1501       TypedInit *LHS = dyn_cast<TypedInit>(Result);
1502       if (!LHS) {
1503         Error(PasteLoc, "LHS of paste is not typed!");
1504         return 0;
1505       }
1506   
1507       if (LHS->getType() != StringRecTy::get()) {
1508         LHS = UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get());
1509       }
1510
1511       TypedInit *RHS = 0;
1512
1513       Lex.Lex();  // Eat the '#'.
1514       switch (Lex.getCode()) { 
1515       case tgtok::colon:
1516       case tgtok::semi:
1517       case tgtok::l_brace:
1518         // These are all of the tokens that can begin an object body.
1519         // Some of these can also begin values but we disallow those cases
1520         // because they are unlikely to be useful.
1521        
1522         // Trailing paste, concat with an empty string.
1523         RHS = StringInit::get("");
1524         break;
1525
1526       default:
1527         Init *RHSResult = ParseValue(CurRec, ItemType, ParseNameMode);
1528         RHS = dyn_cast<TypedInit>(RHSResult);
1529         if (!RHS) {
1530           Error(PasteLoc, "RHS of paste is not typed!");
1531           return 0;
1532         }
1533
1534         if (RHS->getType() != StringRecTy::get()) {
1535           RHS = UnOpInit::get(UnOpInit::CAST, RHS, StringRecTy::get());
1536         }
1537   
1538         break;
1539       }
1540
1541       Result = BinOpInit::get(BinOpInit::STRCONCAT, LHS, RHS,
1542                               StringRecTy::get())->Fold(CurRec, CurMultiClass);
1543       break;
1544     }
1545   }
1546 }
1547
1548 /// ParseDagArgList - Parse the argument list for a dag literal expression.
1549 ///
1550 ///    ParseDagArgList ::= Value (':' VARNAME)?
1551 ///    ParseDagArgList ::= ParseDagArgList ',' Value (':' VARNAME)?
1552 std::vector<std::pair<llvm::Init*, std::string> >
1553 TGParser::ParseDagArgList(Record *CurRec) {
1554   std::vector<std::pair<llvm::Init*, std::string> > Result;
1555
1556   while (1) {
1557     Init *Val = ParseValue(CurRec);
1558     if (Val == 0) return std::vector<std::pair<llvm::Init*, std::string> >();
1559
1560     // If the variable name is present, add it.
1561     std::string VarName;
1562     if (Lex.getCode() == tgtok::colon) {
1563       if (Lex.Lex() != tgtok::VarName) { // eat the ':'
1564         TokError("expected variable name in dag literal");
1565         return std::vector<std::pair<llvm::Init*, std::string> >();
1566       }
1567       VarName = Lex.getCurStrVal();
1568       Lex.Lex();  // eat the VarName.
1569     }
1570
1571     Result.push_back(std::make_pair(Val, VarName));
1572
1573     if (Lex.getCode() != tgtok::comma) break;
1574     Lex.Lex(); // eat the ','
1575   }
1576
1577   return Result;
1578 }
1579
1580
1581 /// ParseValueList - Parse a comma separated list of values, returning them as a
1582 /// vector.  Note that this always expects to be able to parse at least one
1583 /// value.  It returns an empty list if this is not possible.
1584 ///
1585 ///   ValueList ::= Value (',' Value)
1586 ///
1587 std::vector<Init*> TGParser::ParseValueList(Record *CurRec, Record *ArgsRec,
1588                                             RecTy *EltTy) {
1589   std::vector<Init*> Result;
1590   RecTy *ItemType = EltTy;
1591   unsigned int ArgN = 0;
1592   if (ArgsRec != 0 && EltTy == 0) {
1593     const std::vector<Init *> &TArgs = ArgsRec->getTemplateArgs();
1594     if (!TArgs.size()) {
1595       TokError("template argument provided to non-template class");
1596       return std::vector<Init*>();
1597     }
1598     const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
1599     if (!RV) {
1600       errs() << "Cannot find template arg " << ArgN << " (" << TArgs[ArgN]
1601         << ")\n";
1602     }
1603     assert(RV && "Template argument record not found??");
1604     ItemType = RV->getType();
1605     ++ArgN;
1606   }
1607   Result.push_back(ParseValue(CurRec, ItemType));
1608   if (Result.back() == 0) return std::vector<Init*>();
1609
1610   while (Lex.getCode() == tgtok::comma) {
1611     Lex.Lex();  // Eat the comma
1612
1613     if (ArgsRec != 0 && EltTy == 0) {
1614       const std::vector<Init *> &TArgs = ArgsRec->getTemplateArgs();
1615       if (ArgN >= TArgs.size()) {
1616         TokError("too many template arguments");
1617         return std::vector<Init*>();
1618       }
1619       const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
1620       assert(RV && "Template argument record not found??");
1621       ItemType = RV->getType();
1622       ++ArgN;
1623     }
1624     Result.push_back(ParseValue(CurRec, ItemType));
1625     if (Result.back() == 0) return std::vector<Init*>();
1626   }
1627
1628   return Result;
1629 }
1630
1631
1632 /// ParseDeclaration - Read a declaration, returning the name of field ID, or an
1633 /// empty string on error.  This can happen in a number of different context's,
1634 /// including within a def or in the template args for a def (which which case
1635 /// CurRec will be non-null) and within the template args for a multiclass (in
1636 /// which case CurRec will be null, but CurMultiClass will be set).  This can
1637 /// also happen within a def that is within a multiclass, which will set both
1638 /// CurRec and CurMultiClass.
1639 ///
1640 ///  Declaration ::= FIELD? Type ID ('=' Value)?
1641 ///
1642 Init *TGParser::ParseDeclaration(Record *CurRec,
1643                                        bool ParsingTemplateArgs) {
1644   // Read the field prefix if present.
1645   bool HasField = Lex.getCode() == tgtok::Field;
1646   if (HasField) Lex.Lex();
1647
1648   RecTy *Type = ParseType();
1649   if (Type == 0) return 0;
1650
1651   if (Lex.getCode() != tgtok::Id) {
1652     TokError("Expected identifier in declaration");
1653     return 0;
1654   }
1655
1656   SMLoc IdLoc = Lex.getLoc();
1657   Init *DeclName = StringInit::get(Lex.getCurStrVal());
1658   Lex.Lex();
1659
1660   if (ParsingTemplateArgs) {
1661     if (CurRec) {
1662       DeclName = QualifyName(*CurRec, CurMultiClass, DeclName, ":");
1663     } else {
1664       assert(CurMultiClass);
1665     }
1666     if (CurMultiClass)
1667       DeclName = QualifyName(CurMultiClass->Rec, CurMultiClass, DeclName,
1668                              "::");
1669   }
1670
1671   // Add the value.
1672   if (AddValue(CurRec, IdLoc, RecordVal(DeclName, Type, HasField)))
1673     return 0;
1674
1675   // If a value is present, parse it.
1676   if (Lex.getCode() == tgtok::equal) {
1677     Lex.Lex();
1678     SMLoc ValLoc = Lex.getLoc();
1679     Init *Val = ParseValue(CurRec, Type);
1680     if (Val == 0 ||
1681         SetValue(CurRec, ValLoc, DeclName, std::vector<unsigned>(), Val))
1682       return 0;
1683   }
1684
1685   return DeclName;
1686 }
1687
1688 /// ParseForeachDeclaration - Read a foreach declaration, returning
1689 /// the name of the declared object or a NULL Init on error.  Return
1690 /// the name of the parsed initializer list through ForeachListName.
1691 ///
1692 ///  ForeachDeclaration ::= ID '=' '[' ValueList ']'
1693 ///  ForeachDeclaration ::= ID '=' '{' RangeList '}'
1694 ///  ForeachDeclaration ::= ID '=' RangePiece
1695 ///
1696 VarInit *TGParser::ParseForeachDeclaration(ListInit *&ForeachListValue) {
1697   if (Lex.getCode() != tgtok::Id) {
1698     TokError("Expected identifier in foreach declaration");
1699     return 0;
1700   }
1701
1702   Init *DeclName = StringInit::get(Lex.getCurStrVal());
1703   Lex.Lex();
1704
1705   // If a value is present, parse it.
1706   if (Lex.getCode() != tgtok::equal) {
1707     TokError("Expected '=' in foreach declaration");
1708     return 0;
1709   }
1710   Lex.Lex();  // Eat the '='
1711
1712   RecTy *IterType = 0;
1713   std::vector<unsigned> Ranges;
1714
1715   switch (Lex.getCode()) {
1716   default: TokError("Unknown token when expecting a range list"); return 0;
1717   case tgtok::l_square: { // '[' ValueList ']'
1718     Init *List = ParseSimpleValue(0, 0, ParseForeachMode);
1719     ForeachListValue = dyn_cast<ListInit>(List);
1720     if (ForeachListValue == 0) {
1721       TokError("Expected a Value list");
1722       return 0;
1723     }
1724     RecTy *ValueType = ForeachListValue->getType();
1725     ListRecTy *ListType = dyn_cast<ListRecTy>(ValueType);
1726     if (ListType == 0) {
1727       TokError("Value list is not of list type");
1728       return 0;
1729     }
1730     IterType = ListType->getElementType();
1731     break;
1732   }
1733
1734   case tgtok::IntVal: { // RangePiece.
1735     if (ParseRangePiece(Ranges))
1736       return 0;
1737     break;
1738   }
1739
1740   case tgtok::l_brace: { // '{' RangeList '}'
1741     Lex.Lex(); // eat the '{'
1742     Ranges = ParseRangeList();
1743     if (Lex.getCode() != tgtok::r_brace) {
1744       TokError("expected '}' at end of bit range list");
1745       return 0;
1746     }
1747     Lex.Lex();
1748     break;
1749   }
1750   }
1751
1752   if (!Ranges.empty()) {
1753     assert(!IterType && "Type already initialized?");
1754     IterType = IntRecTy::get();
1755     std::vector<Init*> Values;
1756     for (unsigned i = 0, e = Ranges.size(); i != e; ++i)
1757       Values.push_back(IntInit::get(Ranges[i]));
1758     ForeachListValue = ListInit::get(Values, IterType);
1759   }
1760
1761   if (!IterType)
1762     return 0;
1763
1764   return VarInit::get(DeclName, IterType);
1765 }
1766
1767 /// ParseTemplateArgList - Read a template argument list, which is a non-empty
1768 /// sequence of template-declarations in <>'s.  If CurRec is non-null, these are
1769 /// template args for a def, which may or may not be in a multiclass.  If null,
1770 /// these are the template args for a multiclass.
1771 ///
1772 ///    TemplateArgList ::= '<' Declaration (',' Declaration)* '>'
1773 ///
1774 bool TGParser::ParseTemplateArgList(Record *CurRec) {
1775   assert(Lex.getCode() == tgtok::less && "Not a template arg list!");
1776   Lex.Lex(); // eat the '<'
1777
1778   Record *TheRecToAddTo = CurRec ? CurRec : &CurMultiClass->Rec;
1779
1780   // Read the first declaration.
1781   Init *TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
1782   if (TemplArg == 0)
1783     return true;
1784
1785   TheRecToAddTo->addTemplateArg(TemplArg);
1786
1787   while (Lex.getCode() == tgtok::comma) {
1788     Lex.Lex(); // eat the ','
1789
1790     // Read the following declarations.
1791     TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
1792     if (TemplArg == 0)
1793       return true;
1794     TheRecToAddTo->addTemplateArg(TemplArg);
1795   }
1796
1797   if (Lex.getCode() != tgtok::greater)
1798     return TokError("expected '>' at end of template argument list");
1799   Lex.Lex(); // eat the '>'.
1800   return false;
1801 }
1802
1803
1804 /// ParseBodyItem - Parse a single item at within the body of a def or class.
1805 ///
1806 ///   BodyItem ::= Declaration ';'
1807 ///   BodyItem ::= LET ID OptionalBitList '=' Value ';'
1808 bool TGParser::ParseBodyItem(Record *CurRec) {
1809   if (Lex.getCode() != tgtok::Let) {
1810     if (ParseDeclaration(CurRec, false) == 0)
1811       return true;
1812
1813     if (Lex.getCode() != tgtok::semi)
1814       return TokError("expected ';' after declaration");
1815     Lex.Lex();
1816     return false;
1817   }
1818
1819   // LET ID OptionalRangeList '=' Value ';'
1820   if (Lex.Lex() != tgtok::Id)
1821     return TokError("expected field identifier after let");
1822
1823   SMLoc IdLoc = Lex.getLoc();
1824   std::string FieldName = Lex.getCurStrVal();
1825   Lex.Lex();  // eat the field name.
1826
1827   std::vector<unsigned> BitList;
1828   if (ParseOptionalBitList(BitList))
1829     return true;
1830   std::reverse(BitList.begin(), BitList.end());
1831
1832   if (Lex.getCode() != tgtok::equal)
1833     return TokError("expected '=' in let expression");
1834   Lex.Lex();  // eat the '='.
1835
1836   RecordVal *Field = CurRec->getValue(FieldName);
1837   if (Field == 0)
1838     return TokError("Value '" + FieldName + "' unknown!");
1839
1840   RecTy *Type = Field->getType();
1841
1842   Init *Val = ParseValue(CurRec, Type);
1843   if (Val == 0) return true;
1844
1845   if (Lex.getCode() != tgtok::semi)
1846     return TokError("expected ';' after let expression");
1847   Lex.Lex();
1848
1849   return SetValue(CurRec, IdLoc, FieldName, BitList, Val);
1850 }
1851
1852 /// ParseBody - Read the body of a class or def.  Return true on error, false on
1853 /// success.
1854 ///
1855 ///   Body     ::= ';'
1856 ///   Body     ::= '{' BodyList '}'
1857 ///   BodyList BodyItem*
1858 ///
1859 bool TGParser::ParseBody(Record *CurRec) {
1860   // If this is a null definition, just eat the semi and return.
1861   if (Lex.getCode() == tgtok::semi) {
1862     Lex.Lex();
1863     return false;
1864   }
1865
1866   if (Lex.getCode() != tgtok::l_brace)
1867     return TokError("Expected ';' or '{' to start body");
1868   // Eat the '{'.
1869   Lex.Lex();
1870
1871   while (Lex.getCode() != tgtok::r_brace)
1872     if (ParseBodyItem(CurRec))
1873       return true;
1874
1875   // Eat the '}'.
1876   Lex.Lex();
1877   return false;
1878 }
1879
1880 /// \brief Apply the current let bindings to \a CurRec.
1881 /// \returns true on error, false otherwise.
1882 bool TGParser::ApplyLetStack(Record *CurRec) {
1883   for (unsigned i = 0, e = LetStack.size(); i != e; ++i)
1884     for (unsigned j = 0, e = LetStack[i].size(); j != e; ++j)
1885       if (SetValue(CurRec, LetStack[i][j].Loc, LetStack[i][j].Name,
1886                    LetStack[i][j].Bits, LetStack[i][j].Value))
1887         return true;
1888   return false;
1889 }
1890
1891 /// ParseObjectBody - Parse the body of a def or class.  This consists of an
1892 /// optional ClassList followed by a Body.  CurRec is the current def or class
1893 /// that is being parsed.
1894 ///
1895 ///   ObjectBody      ::= BaseClassList Body
1896 ///   BaseClassList   ::= /*empty*/
1897 ///   BaseClassList   ::= ':' BaseClassListNE
1898 ///   BaseClassListNE ::= SubClassRef (',' SubClassRef)*
1899 ///
1900 bool TGParser::ParseObjectBody(Record *CurRec) {
1901   // If there is a baseclass list, read it.
1902   if (Lex.getCode() == tgtok::colon) {
1903     Lex.Lex();
1904
1905     // Read all of the subclasses.
1906     SubClassReference SubClass = ParseSubClassReference(CurRec, false);
1907     while (1) {
1908       // Check for error.
1909       if (SubClass.Rec == 0) return true;
1910
1911       // Add it.
1912       if (AddSubClass(CurRec, SubClass))
1913         return true;
1914
1915       if (Lex.getCode() != tgtok::comma) break;
1916       Lex.Lex(); // eat ','.
1917       SubClass = ParseSubClassReference(CurRec, false);
1918     }
1919   }
1920
1921   if (ApplyLetStack(CurRec))
1922     return true;
1923
1924   return ParseBody(CurRec);
1925 }
1926
1927 /// ParseDef - Parse and return a top level or multiclass def, return the record
1928 /// corresponding to it.  This returns null on error.
1929 ///
1930 ///   DefInst ::= DEF ObjectName ObjectBody
1931 ///
1932 bool TGParser::ParseDef(MultiClass *CurMultiClass) {
1933   SMLoc DefLoc = Lex.getLoc();
1934   assert(Lex.getCode() == tgtok::Def && "Unknown tok");
1935   Lex.Lex();  // Eat the 'def' token.
1936
1937   // Parse ObjectName and make a record for it.
1938   Record *CurRec;
1939   Init *Name = ParseObjectName(CurMultiClass);
1940   if (Name)
1941     CurRec = new Record(Name, DefLoc, Records);
1942   else
1943     CurRec = new Record(GetNewAnonymousName(), DefLoc, Records,
1944                         /*IsAnonymous=*/true);
1945
1946   if (!CurMultiClass && Loops.empty()) {
1947     // Top-level def definition.
1948
1949     // Ensure redefinition doesn't happen.
1950     if (Records.getDef(CurRec->getNameInitAsString())) {
1951       Error(DefLoc, "def '" + CurRec->getNameInitAsString()
1952             + "' already defined");
1953       return true;
1954     }
1955     Records.addDef(CurRec);
1956   } else if (CurMultiClass) {
1957     // Otherwise, a def inside a multiclass, add it to the multiclass.
1958     for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size(); i != e; ++i)
1959       if (CurMultiClass->DefPrototypes[i]->getNameInit()
1960           == CurRec->getNameInit()) {
1961         Error(DefLoc, "def '" + CurRec->getNameInitAsString() +
1962               "' already defined in this multiclass!");
1963         return true;
1964       }
1965     CurMultiClass->DefPrototypes.push_back(CurRec);
1966   }
1967
1968   if (ParseObjectBody(CurRec))
1969     return true;
1970
1971   if (CurMultiClass == 0)  // Def's in multiclasses aren't really defs.
1972     // See Record::setName().  This resolve step will see any new name
1973     // for the def that might have been created when resolving
1974     // inheritance, values and arguments above.
1975     CurRec->resolveReferences();
1976
1977   // If ObjectBody has template arguments, it's an error.
1978   assert(CurRec->getTemplateArgs().empty() && "How'd this get template args?");
1979
1980   if (CurMultiClass) {
1981     // Copy the template arguments for the multiclass into the def.
1982     const std::vector<Init *> &TArgs =
1983                                 CurMultiClass->Rec.getTemplateArgs();
1984
1985     for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
1986       const RecordVal *RV = CurMultiClass->Rec.getValue(TArgs[i]);
1987       assert(RV && "Template arg doesn't exist?");
1988       CurRec->addValue(*RV);
1989     }
1990   }
1991
1992   if (ProcessForeachDefs(CurRec, DefLoc)) {
1993     Error(DefLoc,
1994           "Could not process loops for def" + CurRec->getNameInitAsString());
1995     return true;
1996   }
1997
1998   return false;
1999 }
2000
2001 /// ParseForeach - Parse a for statement.  Return the record corresponding
2002 /// to it.  This returns true on error.
2003 ///
2004 ///   Foreach ::= FOREACH Declaration IN '{ ObjectList '}'
2005 ///   Foreach ::= FOREACH Declaration IN Object
2006 ///
2007 bool TGParser::ParseForeach(MultiClass *CurMultiClass) {
2008   assert(Lex.getCode() == tgtok::Foreach && "Unknown tok");
2009   Lex.Lex();  // Eat the 'for' token.
2010
2011   // Make a temporary object to record items associated with the for
2012   // loop.
2013   ListInit *ListValue = 0;
2014   VarInit *IterName = ParseForeachDeclaration(ListValue);
2015   if (IterName == 0)
2016     return TokError("expected declaration in for");
2017
2018   if (Lex.getCode() != tgtok::In)
2019     return TokError("Unknown tok");
2020   Lex.Lex();  // Eat the in
2021
2022   // Create a loop object and remember it.
2023   Loops.push_back(ForeachLoop(IterName, ListValue));
2024
2025   if (Lex.getCode() != tgtok::l_brace) {
2026     // FOREACH Declaration IN Object
2027     if (ParseObject(CurMultiClass))
2028       return true;
2029   }
2030   else {
2031     SMLoc BraceLoc = Lex.getLoc();
2032     // Otherwise, this is a group foreach.
2033     Lex.Lex();  // eat the '{'.
2034
2035     // Parse the object list.
2036     if (ParseObjectList(CurMultiClass))
2037       return true;
2038
2039     if (Lex.getCode() != tgtok::r_brace) {
2040       TokError("expected '}' at end of foreach command");
2041       return Error(BraceLoc, "to match this '{'");
2042     }
2043     Lex.Lex();  // Eat the }
2044   }
2045
2046   // We've processed everything in this loop.
2047   Loops.pop_back();
2048
2049   return false;
2050 }
2051
2052 /// ParseClass - Parse a tblgen class definition.
2053 ///
2054 ///   ClassInst ::= CLASS ID TemplateArgList? ObjectBody
2055 ///
2056 bool TGParser::ParseClass() {
2057   assert(Lex.getCode() == tgtok::Class && "Unexpected token!");
2058   Lex.Lex();
2059
2060   if (Lex.getCode() != tgtok::Id)
2061     return TokError("expected class name after 'class' keyword");
2062
2063   Record *CurRec = Records.getClass(Lex.getCurStrVal());
2064   if (CurRec) {
2065     // If the body was previously defined, this is an error.
2066     if (CurRec->getValues().size() > 1 ||  // Account for NAME.
2067         !CurRec->getSuperClasses().empty() ||
2068         !CurRec->getTemplateArgs().empty())
2069       return TokError("Class '" + CurRec->getNameInitAsString()
2070                       + "' already defined");
2071   } else {
2072     // If this is the first reference to this class, create and add it.
2073     CurRec = new Record(Lex.getCurStrVal(), Lex.getLoc(), Records);
2074     Records.addClass(CurRec);
2075   }
2076   Lex.Lex(); // eat the name.
2077
2078   // If there are template args, parse them.
2079   if (Lex.getCode() == tgtok::less)
2080     if (ParseTemplateArgList(CurRec))
2081       return true;
2082
2083   // Finally, parse the object body.
2084   return ParseObjectBody(CurRec);
2085 }
2086
2087 /// ParseLetList - Parse a non-empty list of assignment expressions into a list
2088 /// of LetRecords.
2089 ///
2090 ///   LetList ::= LetItem (',' LetItem)*
2091 ///   LetItem ::= ID OptionalRangeList '=' Value
2092 ///
2093 std::vector<LetRecord> TGParser::ParseLetList() {
2094   std::vector<LetRecord> Result;
2095
2096   while (1) {
2097     if (Lex.getCode() != tgtok::Id) {
2098       TokError("expected identifier in let definition");
2099       return std::vector<LetRecord>();
2100     }
2101     std::string Name = Lex.getCurStrVal();
2102     SMLoc NameLoc = Lex.getLoc();
2103     Lex.Lex();  // Eat the identifier.
2104
2105     // Check for an optional RangeList.
2106     std::vector<unsigned> Bits;
2107     if (ParseOptionalRangeList(Bits))
2108       return std::vector<LetRecord>();
2109     std::reverse(Bits.begin(), Bits.end());
2110
2111     if (Lex.getCode() != tgtok::equal) {
2112       TokError("expected '=' in let expression");
2113       return std::vector<LetRecord>();
2114     }
2115     Lex.Lex();  // eat the '='.
2116
2117     Init *Val = ParseValue(0);
2118     if (Val == 0) return std::vector<LetRecord>();
2119
2120     // Now that we have everything, add the record.
2121     Result.push_back(LetRecord(Name, Bits, Val, NameLoc));
2122
2123     if (Lex.getCode() != tgtok::comma)
2124       return Result;
2125     Lex.Lex();  // eat the comma.
2126   }
2127 }
2128
2129 /// ParseTopLevelLet - Parse a 'let' at top level.  This can be a couple of
2130 /// different related productions. This works inside multiclasses too.
2131 ///
2132 ///   Object ::= LET LetList IN '{' ObjectList '}'
2133 ///   Object ::= LET LetList IN Object
2134 ///
2135 bool TGParser::ParseTopLevelLet(MultiClass *CurMultiClass) {
2136   assert(Lex.getCode() == tgtok::Let && "Unexpected token");
2137   Lex.Lex();
2138
2139   // Add this entry to the let stack.
2140   std::vector<LetRecord> LetInfo = ParseLetList();
2141   if (LetInfo.empty()) return true;
2142   LetStack.push_back(LetInfo);
2143
2144   if (Lex.getCode() != tgtok::In)
2145     return TokError("expected 'in' at end of top-level 'let'");
2146   Lex.Lex();
2147
2148   // If this is a scalar let, just handle it now
2149   if (Lex.getCode() != tgtok::l_brace) {
2150     // LET LetList IN Object
2151     if (ParseObject(CurMultiClass))
2152       return true;
2153   } else {   // Object ::= LETCommand '{' ObjectList '}'
2154     SMLoc BraceLoc = Lex.getLoc();
2155     // Otherwise, this is a group let.
2156     Lex.Lex();  // eat the '{'.
2157
2158     // Parse the object list.
2159     if (ParseObjectList(CurMultiClass))
2160       return true;
2161
2162     if (Lex.getCode() != tgtok::r_brace) {
2163       TokError("expected '}' at end of top level let command");
2164       return Error(BraceLoc, "to match this '{'");
2165     }
2166     Lex.Lex();
2167   }
2168
2169   // Outside this let scope, this let block is not active.
2170   LetStack.pop_back();
2171   return false;
2172 }
2173
2174 /// ParseMultiClass - Parse a multiclass definition.
2175 ///
2176 ///  MultiClassInst ::= MULTICLASS ID TemplateArgList?
2177 ///                     ':' BaseMultiClassList '{' MultiClassObject+ '}'
2178 ///  MultiClassObject ::= DefInst
2179 ///  MultiClassObject ::= MultiClassInst
2180 ///  MultiClassObject ::= DefMInst
2181 ///  MultiClassObject ::= LETCommand '{' ObjectList '}'
2182 ///  MultiClassObject ::= LETCommand Object
2183 ///
2184 bool TGParser::ParseMultiClass() {
2185   assert(Lex.getCode() == tgtok::MultiClass && "Unexpected token");
2186   Lex.Lex();  // Eat the multiclass token.
2187
2188   if (Lex.getCode() != tgtok::Id)
2189     return TokError("expected identifier after multiclass for name");
2190   std::string Name = Lex.getCurStrVal();
2191
2192   if (MultiClasses.count(Name))
2193     return TokError("multiclass '" + Name + "' already defined");
2194
2195   CurMultiClass = MultiClasses[Name] = new MultiClass(Name, 
2196                                                       Lex.getLoc(), Records);
2197   Lex.Lex();  // Eat the identifier.
2198
2199   // If there are template args, parse them.
2200   if (Lex.getCode() == tgtok::less)
2201     if (ParseTemplateArgList(0))
2202       return true;
2203
2204   bool inherits = false;
2205
2206   // If there are submulticlasses, parse them.
2207   if (Lex.getCode() == tgtok::colon) {
2208     inherits = true;
2209
2210     Lex.Lex();
2211
2212     // Read all of the submulticlasses.
2213     SubMultiClassReference SubMultiClass =
2214       ParseSubMultiClassReference(CurMultiClass);
2215     while (1) {
2216       // Check for error.
2217       if (SubMultiClass.MC == 0) return true;
2218
2219       // Add it.
2220       if (AddSubMultiClass(CurMultiClass, SubMultiClass))
2221         return true;
2222
2223       if (Lex.getCode() != tgtok::comma) break;
2224       Lex.Lex(); // eat ','.
2225       SubMultiClass = ParseSubMultiClassReference(CurMultiClass);
2226     }
2227   }
2228
2229   if (Lex.getCode() != tgtok::l_brace) {
2230     if (!inherits)
2231       return TokError("expected '{' in multiclass definition");
2232     else if (Lex.getCode() != tgtok::semi)
2233       return TokError("expected ';' in multiclass definition");
2234     else
2235       Lex.Lex();  // eat the ';'.
2236   } else {
2237     if (Lex.Lex() == tgtok::r_brace)  // eat the '{'.
2238       return TokError("multiclass must contain at least one def");
2239
2240     while (Lex.getCode() != tgtok::r_brace) {
2241       switch (Lex.getCode()) {
2242         default:
2243           return TokError("expected 'let', 'def' or 'defm' in multiclass body");
2244         case tgtok::Let:
2245         case tgtok::Def:
2246         case tgtok::Defm:
2247         case tgtok::Foreach:
2248           if (ParseObject(CurMultiClass))
2249             return true;
2250          break;
2251       }
2252     }
2253     Lex.Lex();  // eat the '}'.
2254   }
2255
2256   CurMultiClass = 0;
2257   return false;
2258 }
2259
2260 Record *TGParser::
2261 InstantiateMulticlassDef(MultiClass &MC,
2262                          Record *DefProto,
2263                          Init *DefmPrefix,
2264                          SMRange DefmPrefixRange) {
2265   // We need to preserve DefProto so it can be reused for later
2266   // instantiations, so create a new Record to inherit from it.
2267
2268   // Add in the defm name.  If the defm prefix is empty, give each
2269   // instantiated def a unique name.  Otherwise, if "#NAME#" exists in the
2270   // name, substitute the prefix for #NAME#.  Otherwise, use the defm name
2271   // as a prefix.
2272
2273   bool IsAnonymous = false;
2274   if (DefmPrefix == 0) {
2275     DefmPrefix = StringInit::get(GetNewAnonymousName());
2276     IsAnonymous = true;
2277   }
2278
2279   Init *DefName = DefProto->getNameInit();
2280
2281   StringInit *DefNameString = dyn_cast<StringInit>(DefName);
2282
2283   if (DefNameString != 0) {
2284     // We have a fully expanded string so there are no operators to
2285     // resolve.  We should concatenate the given prefix and name.
2286     DefName =
2287       BinOpInit::get(BinOpInit::STRCONCAT,
2288                      UnOpInit::get(UnOpInit::CAST, DefmPrefix,
2289                                    StringRecTy::get())->Fold(DefProto, &MC),
2290                      DefName, StringRecTy::get())->Fold(DefProto, &MC);
2291   }
2292
2293   // Make a trail of SMLocs from the multiclass instantiations.
2294   SmallVector<SMLoc, 4> Locs(1, DefmPrefixRange.Start);
2295   Locs.append(DefProto->getLoc().begin(), DefProto->getLoc().end());
2296   Record *CurRec = new Record(DefName, Locs, Records, IsAnonymous);
2297
2298   SubClassReference Ref;
2299   Ref.RefRange = DefmPrefixRange;
2300   Ref.Rec = DefProto;
2301   AddSubClass(CurRec, Ref);
2302
2303   // Set the value for NAME. We don't resolve references to it 'til later,
2304   // though, so that uses in nested multiclass names don't get
2305   // confused.
2306   if (SetValue(CurRec, Ref.RefRange.Start, "NAME", std::vector<unsigned>(),
2307                DefmPrefix)) {
2308     Error(DefmPrefixRange.Start, "Could not resolve "
2309           + CurRec->getNameInitAsString() + ":NAME to '"
2310           + DefmPrefix->getAsUnquotedString() + "'");
2311     return 0;
2312   }
2313
2314   // If the DefNameString didn't resolve, we probably have a reference to
2315   // NAME and need to replace it. We need to do at least this much greedily,
2316   // otherwise nested multiclasses will end up with incorrect NAME expansions.
2317   if (DefNameString == 0) {
2318     RecordVal *DefNameRV = CurRec->getValue("NAME");
2319     CurRec->resolveReferencesTo(DefNameRV);
2320   }
2321
2322   if (!CurMultiClass) {
2323     // Now that we're at the top level, resolve all NAME references
2324     // in the resultant defs that weren't in the def names themselves.
2325     RecordVal *DefNameRV = CurRec->getValue("NAME");
2326     CurRec->resolveReferencesTo(DefNameRV);
2327
2328     // Now that NAME references are resolved and we're at the top level of
2329     // any multiclass expansions, add the record to the RecordKeeper. If we are
2330     // currently in a multiclass, it means this defm appears inside a
2331     // multiclass and its name won't be fully resolvable until we see
2332     // the top-level defm.  Therefore, we don't add this to the
2333     // RecordKeeper at this point.  If we did we could get duplicate
2334     // defs as more than one probably refers to NAME or some other
2335     // common internal placeholder.
2336
2337     // Ensure redefinition doesn't happen.
2338     if (Records.getDef(CurRec->getNameInitAsString())) {
2339       Error(DefmPrefixRange.Start, "def '" + CurRec->getNameInitAsString() +
2340             "' already defined, instantiating defm with subdef '" + 
2341             DefProto->getNameInitAsString() + "'");
2342       return 0;
2343     }
2344
2345     Records.addDef(CurRec);
2346   }
2347
2348   return CurRec;
2349 }
2350
2351 bool TGParser::ResolveMulticlassDefArgs(MultiClass &MC,
2352                                         Record *CurRec,
2353                                         SMLoc DefmPrefixLoc,
2354                                         SMLoc SubClassLoc,
2355                                         const std::vector<Init *> &TArgs,
2356                                         std::vector<Init *> &TemplateVals,
2357                                         bool DeleteArgs) {
2358   // Loop over all of the template arguments, setting them to the specified
2359   // value or leaving them as the default if necessary.
2360   for (unsigned i = 0, e = TArgs.size(); i != e; ++i) {
2361     // Check if a value is specified for this temp-arg.
2362     if (i < TemplateVals.size()) {
2363       // Set it now.
2364       if (SetValue(CurRec, DefmPrefixLoc, TArgs[i], std::vector<unsigned>(),
2365                    TemplateVals[i]))
2366         return true;
2367         
2368       // Resolve it next.
2369       CurRec->resolveReferencesTo(CurRec->getValue(TArgs[i]));
2370
2371       if (DeleteArgs)
2372         // Now remove it.
2373         CurRec->removeValue(TArgs[i]);
2374         
2375     } else if (!CurRec->getValue(TArgs[i])->getValue()->isComplete()) {
2376       return Error(SubClassLoc, "value not specified for template argument #"+
2377                    utostr(i) + " (" + TArgs[i]->getAsUnquotedString()
2378                    + ") of multiclassclass '" + MC.Rec.getNameInitAsString()
2379                    + "'");
2380     }
2381   }
2382   return false;
2383 }
2384
2385 bool TGParser::ResolveMulticlassDef(MultiClass &MC,
2386                                     Record *CurRec,
2387                                     Record *DefProto,
2388                                     SMLoc DefmPrefixLoc) {
2389   // If the mdef is inside a 'let' expression, add to each def.
2390   if (ApplyLetStack(CurRec))
2391     return Error(DefmPrefixLoc, "when instantiating this defm");
2392
2393   // Don't create a top level definition for defm inside multiclasses,
2394   // instead, only update the prototypes and bind the template args
2395   // with the new created definition.
2396   if (!CurMultiClass)
2397     return false;
2398   for (unsigned i = 0, e = CurMultiClass->DefPrototypes.size();
2399        i != e; ++i)
2400     if (CurMultiClass->DefPrototypes[i]->getNameInit()
2401         == CurRec->getNameInit())
2402       return Error(DefmPrefixLoc, "defm '" + CurRec->getNameInitAsString() +
2403                    "' already defined in this multiclass!");
2404   CurMultiClass->DefPrototypes.push_back(CurRec);
2405
2406   // Copy the template arguments for the multiclass into the new def.
2407   const std::vector<Init *> &TA =
2408     CurMultiClass->Rec.getTemplateArgs();
2409
2410   for (unsigned i = 0, e = TA.size(); i != e; ++i) {
2411     const RecordVal *RV = CurMultiClass->Rec.getValue(TA[i]);
2412     assert(RV && "Template arg doesn't exist?");
2413     CurRec->addValue(*RV);
2414   }
2415
2416   return false;
2417 }
2418
2419 /// ParseDefm - Parse the instantiation of a multiclass.
2420 ///
2421 ///   DefMInst ::= DEFM ID ':' DefmSubClassRef ';'
2422 ///
2423 bool TGParser::ParseDefm(MultiClass *CurMultiClass) {
2424   assert(Lex.getCode() == tgtok::Defm && "Unexpected token!");
2425   SMLoc DefmLoc = Lex.getLoc();
2426   Init *DefmPrefix = 0;
2427
2428   if (Lex.Lex() == tgtok::Id) {  // eat the defm.
2429     DefmPrefix = ParseObjectName(CurMultiClass);
2430   }
2431
2432   SMLoc DefmPrefixEndLoc = Lex.getLoc();
2433   if (Lex.getCode() != tgtok::colon)
2434     return TokError("expected ':' after defm identifier");
2435
2436   // Keep track of the new generated record definitions.
2437   std::vector<Record*> NewRecDefs;
2438
2439   // This record also inherits from a regular class (non-multiclass)?
2440   bool InheritFromClass = false;
2441
2442   // eat the colon.
2443   Lex.Lex();
2444
2445   SMLoc SubClassLoc = Lex.getLoc();
2446   SubClassReference Ref = ParseSubClassReference(0, true);
2447
2448   while (1) {
2449     if (Ref.Rec == 0) return true;
2450
2451     // To instantiate a multiclass, we need to first get the multiclass, then
2452     // instantiate each def contained in the multiclass with the SubClassRef
2453     // template parameters.
2454     MultiClass *MC = MultiClasses[Ref.Rec->getName()];
2455     assert(MC && "Didn't lookup multiclass correctly?");
2456     std::vector<Init*> &TemplateVals = Ref.TemplateArgs;
2457
2458     // Verify that the correct number of template arguments were specified.
2459     const std::vector<Init *> &TArgs = MC->Rec.getTemplateArgs();
2460     if (TArgs.size() < TemplateVals.size())
2461       return Error(SubClassLoc,
2462                    "more template args specified than multiclass expects");
2463
2464     // Loop over all the def's in the multiclass, instantiating each one.
2465     for (unsigned i = 0, e = MC->DefPrototypes.size(); i != e; ++i) {
2466       Record *DefProto = MC->DefPrototypes[i];
2467
2468       Record *CurRec = InstantiateMulticlassDef(*MC, DefProto, DefmPrefix,
2469                                                 SMRange(DefmLoc,
2470                                                         DefmPrefixEndLoc));
2471       if (!CurRec)
2472         return true;
2473
2474       if (ResolveMulticlassDefArgs(*MC, CurRec, DefmLoc, SubClassLoc,
2475                                    TArgs, TemplateVals, true/*Delete args*/))
2476         return Error(SubClassLoc, "could not instantiate def");
2477
2478       if (ResolveMulticlassDef(*MC, CurRec, DefProto, DefmLoc))
2479         return Error(SubClassLoc, "could not instantiate def");
2480
2481       NewRecDefs.push_back(CurRec);
2482     }
2483
2484
2485     if (Lex.getCode() != tgtok::comma) break;
2486     Lex.Lex(); // eat ','.
2487
2488     SubClassLoc = Lex.getLoc();
2489
2490     // A defm can inherit from regular classes (non-multiclass) as
2491     // long as they come in the end of the inheritance list.
2492     InheritFromClass = (Records.getClass(Lex.getCurStrVal()) != 0);
2493
2494     if (InheritFromClass)
2495       break;
2496
2497     Ref = ParseSubClassReference(0, true);
2498   }
2499
2500   if (InheritFromClass) {
2501     // Process all the classes to inherit as if they were part of a
2502     // regular 'def' and inherit all record values.
2503     SubClassReference SubClass = ParseSubClassReference(0, false);
2504     while (1) {
2505       // Check for error.
2506       if (SubClass.Rec == 0) return true;
2507
2508       // Get the expanded definition prototypes and teach them about
2509       // the record values the current class to inherit has
2510       for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i) {
2511         Record *CurRec = NewRecDefs[i];
2512
2513         // Add it.
2514         if (AddSubClass(CurRec, SubClass))
2515           return true;
2516
2517         if (ApplyLetStack(CurRec))
2518           return true;
2519       }
2520
2521       if (Lex.getCode() != tgtok::comma) break;
2522       Lex.Lex(); // eat ','.
2523       SubClass = ParseSubClassReference(0, false);
2524     }
2525   }
2526
2527   if (!CurMultiClass)
2528     for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i)
2529       // See Record::setName().  This resolve step will see any new
2530       // name for the def that might have been created when resolving
2531       // inheritance, values and arguments above.
2532       NewRecDefs[i]->resolveReferences();
2533
2534   if (Lex.getCode() != tgtok::semi)
2535     return TokError("expected ';' at end of defm");
2536   Lex.Lex();
2537
2538   return false;
2539 }
2540
2541 /// ParseObject
2542 ///   Object ::= ClassInst
2543 ///   Object ::= DefInst
2544 ///   Object ::= MultiClassInst
2545 ///   Object ::= DefMInst
2546 ///   Object ::= LETCommand '{' ObjectList '}'
2547 ///   Object ::= LETCommand Object
2548 bool TGParser::ParseObject(MultiClass *MC) {
2549   switch (Lex.getCode()) {
2550   default:
2551     return TokError("Expected class, def, defm, multiclass or let definition");
2552   case tgtok::Let:   return ParseTopLevelLet(MC);
2553   case tgtok::Def:   return ParseDef(MC);
2554   case tgtok::Foreach:   return ParseForeach(MC);
2555   case tgtok::Defm:  return ParseDefm(MC);
2556   case tgtok::Class: return ParseClass();
2557   case tgtok::MultiClass: return ParseMultiClass();
2558   }
2559 }
2560
2561 /// ParseObjectList
2562 ///   ObjectList :== Object*
2563 bool TGParser::ParseObjectList(MultiClass *MC) {
2564   while (isObjectStart(Lex.getCode())) {
2565     if (ParseObject(MC))
2566       return true;
2567   }
2568   return false;
2569 }
2570
2571 bool TGParser::ParseFile() {
2572   Lex.Lex(); // Prime the lexer.
2573   if (ParseObjectList()) return true;
2574
2575   // If we have unread input at the end of the file, report it.
2576   if (Lex.getCode() == tgtok::Eof)
2577     return false;
2578
2579   return TokError("Unexpected input at top level");
2580 }
2581