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