Add Foreach Loop
[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/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