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