1 //===- TGParser.cpp - Parser for TableGen Files ---------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Implement the Parser for TableGen.
12 //===----------------------------------------------------------------------===//
15 #include "llvm/ADT/None.h"
16 #include "llvm/ADT/STLExtras.h"
17 #include "llvm/ADT/SmallVector.h"
18 #include "llvm/ADT/StringExtras.h"
19 #include "llvm/Support/Casting.h"
20 #include "llvm/Support/Compiler.h"
21 #include "llvm/Support/ErrorHandling.h"
22 #include "llvm/Support/raw_ostream.h"
23 #include "llvm/TableGen/Record.h"
30 //===----------------------------------------------------------------------===//
31 // Support Code for the Semantic Actions.
32 //===----------------------------------------------------------------------===//
36 struct SubClassReference
{
39 SmallVector
<Init
*, 4> TemplateArgs
;
41 SubClassReference() : Rec(nullptr) {}
43 bool isInvalid() const { return Rec
== nullptr; }
46 struct SubMultiClassReference
{
49 SmallVector
<Init
*, 4> TemplateArgs
;
51 SubMultiClassReference() : MC(nullptr) {}
53 bool isInvalid() const { return MC
== nullptr; }
57 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
58 LLVM_DUMP_METHOD
void SubMultiClassReference::dump() const {
59 errs() << "Multiclass:\n";
63 errs() << "Template args:\n";
64 for (Init
*TA
: TemplateArgs
)
69 } // end namespace llvm
71 bool TGParser::AddValue(Record
*CurRec
, SMLoc Loc
, const RecordVal
&RV
) {
73 CurRec
= &CurMultiClass
->Rec
;
75 if (RecordVal
*ERV
= CurRec
->getValue(RV
.getNameInit())) {
76 // The value already exists in the class, treat this as a set.
77 if (ERV
->setValue(RV
.getValue()))
78 return Error(Loc
, "New definition of '" + RV
.getName() + "' of type '" +
79 RV
.getType()->getAsString() + "' is incompatible with " +
80 "previous definition of type '" +
81 ERV
->getType()->getAsString() + "'");
89 /// Return true on error, false on success.
90 bool TGParser::SetValue(Record
*CurRec
, SMLoc Loc
, Init
*ValName
,
91 ArrayRef
<unsigned> BitList
, Init
*V
,
92 bool AllowSelfAssignment
) {
95 if (!CurRec
) CurRec
= &CurMultiClass
->Rec
;
97 RecordVal
*RV
= CurRec
->getValue(ValName
);
99 return Error(Loc
, "Value '" + ValName
->getAsUnquotedString() +
102 // Do not allow assignments like 'X = X'. This will just cause infinite loops
103 // in the resolution machinery.
105 if (VarInit
*VI
= dyn_cast
<VarInit
>(V
))
106 if (VI
->getNameInit() == ValName
&& !AllowSelfAssignment
)
109 // If we are assigning to a subset of the bits in the value... then we must be
110 // assigning to a field of BitsRecTy, which must have a BitsInit
113 if (!BitList
.empty()) {
114 BitsInit
*CurVal
= dyn_cast
<BitsInit
>(RV
->getValue());
116 return Error(Loc
, "Value '" + ValName
->getAsUnquotedString() +
117 "' is not a bits type");
119 // Convert the incoming value to a bits type of the appropriate size...
120 Init
*BI
= V
->convertInitializerTo(BitsRecTy::get(BitList
.size()));
122 return Error(Loc
, "Initializer is not compatible with bit range");
124 // We should have a BitsInit type now.
125 BitsInit
*BInit
= cast
<BitsInit
>(BI
);
127 SmallVector
<Init
*, 16> NewBits(CurVal
->getNumBits());
129 // Loop over bits, assigning values as appropriate.
130 for (unsigned i
= 0, e
= BitList
.size(); i
!= e
; ++i
) {
131 unsigned Bit
= BitList
[i
];
133 return Error(Loc
, "Cannot set bit #" + Twine(Bit
) + " of value '" +
134 ValName
->getAsUnquotedString() + "' more than once");
135 NewBits
[Bit
] = BInit
->getBit(i
);
138 for (unsigned i
= 0, e
= CurVal
->getNumBits(); i
!= e
; ++i
)
140 NewBits
[i
] = CurVal
->getBit(i
);
142 V
= BitsInit::get(NewBits
);
145 if (RV
->setValue(V
)) {
146 std::string InitType
;
147 if (BitsInit
*BI
= dyn_cast
<BitsInit
>(V
))
148 InitType
= (Twine("' of type bit initializer with length ") +
149 Twine(BI
->getNumBits())).str();
150 return Error(Loc
, "Value '" + ValName
->getAsUnquotedString() +
151 "' of type '" + RV
->getType()->getAsString() +
152 "' is incompatible with initializer '" + V
->getAsString() +
158 /// AddSubClass - Add SubClass as a subclass to CurRec, resolving its template
159 /// args as SubClass's template arguments.
160 bool TGParser::AddSubClass(Record
*CurRec
, SubClassReference
&SubClass
) {
161 Record
*SC
= SubClass
.Rec
;
162 // Add all of the values in the subclass into the current class.
163 for (const RecordVal
&Val
: SC
->getValues())
164 if (AddValue(CurRec
, SubClass
.RefRange
.Start
, Val
))
167 ArrayRef
<Init
*> TArgs
= SC
->getTemplateArgs();
169 // Ensure that an appropriate number of template arguments are specified.
170 if (TArgs
.size() < SubClass
.TemplateArgs
.size())
171 return Error(SubClass
.RefRange
.Start
,
172 "More template args specified than expected");
174 // Loop over all of the template arguments, setting them to the specified
175 // value or leaving them as the default if necessary.
176 for (unsigned i
= 0, e
= TArgs
.size(); i
!= e
; ++i
) {
177 if (i
< SubClass
.TemplateArgs
.size()) {
178 // If a value is specified for this template arg, set it now.
179 if (SetValue(CurRec
, SubClass
.RefRange
.Start
, TArgs
[i
],
180 None
, SubClass
.TemplateArgs
[i
]))
184 CurRec
->resolveReferencesTo(CurRec
->getValue(TArgs
[i
]));
187 CurRec
->removeValue(TArgs
[i
]);
189 } else if (!CurRec
->getValue(TArgs
[i
])->getValue()->isComplete()) {
190 return Error(SubClass
.RefRange
.Start
,
191 "Value not specified for template argument #" +
192 Twine(i
) + " (" + TArgs
[i
]->getAsUnquotedString() +
193 ") of subclass '" + SC
->getNameInitAsString() + "'!");
197 // Since everything went well, we can now set the "superclass" list for the
199 ArrayRef
<std::pair
<Record
*, SMRange
>> SCs
= SC
->getSuperClasses();
200 for (const auto &SCPair
: SCs
) {
201 if (CurRec
->isSubClassOf(SCPair
.first
))
202 return Error(SubClass
.RefRange
.Start
,
203 "Already subclass of '" + SCPair
.first
->getName() + "'!\n");
204 CurRec
->addSuperClass(SCPair
.first
, SCPair
.second
);
207 if (CurRec
->isSubClassOf(SC
))
208 return Error(SubClass
.RefRange
.Start
,
209 "Already subclass of '" + SC
->getName() + "'!\n");
210 CurRec
->addSuperClass(SC
, SubClass
.RefRange
);
214 /// AddSubMultiClass - Add SubMultiClass as a subclass to
215 /// CurMC, resolving its template args as SubMultiClass's
216 /// template arguments.
217 bool TGParser::AddSubMultiClass(MultiClass
*CurMC
,
218 SubMultiClassReference
&SubMultiClass
) {
219 MultiClass
*SMC
= SubMultiClass
.MC
;
220 Record
*CurRec
= &CurMC
->Rec
;
222 // Add all of the values in the subclass into the current class.
223 for (const auto &SMCVal
: SMC
->Rec
.getValues())
224 if (AddValue(CurRec
, SubMultiClass
.RefRange
.Start
, SMCVal
))
227 unsigned newDefStart
= CurMC
->DefPrototypes
.size();
229 // Add all of the defs in the subclass into the current multiclass.
230 for (const std::unique_ptr
<Record
> &R
: SMC
->DefPrototypes
) {
231 // Clone the def and add it to the current multiclass
232 auto NewDef
= make_unique
<Record
>(*R
);
234 // Add all of the values in the superclass into the current def.
235 for (const auto &MCVal
: CurRec
->getValues())
236 if (AddValue(NewDef
.get(), SubMultiClass
.RefRange
.Start
, MCVal
))
239 CurMC
->DefPrototypes
.push_back(std::move(NewDef
));
242 ArrayRef
<Init
*> SMCTArgs
= SMC
->Rec
.getTemplateArgs();
244 // Ensure that an appropriate number of template arguments are
246 if (SMCTArgs
.size() < SubMultiClass
.TemplateArgs
.size())
247 return Error(SubMultiClass
.RefRange
.Start
,
248 "More template args specified than expected");
250 // Loop over all of the template arguments, setting them to the specified
251 // value or leaving them as the default if necessary.
252 for (unsigned i
= 0, e
= SMCTArgs
.size(); i
!= e
; ++i
) {
253 if (i
< SubMultiClass
.TemplateArgs
.size()) {
254 // If a value is specified for this template arg, set it in the
256 if (SetValue(CurRec
, SubMultiClass
.RefRange
.Start
, SMCTArgs
[i
],
257 None
, SubMultiClass
.TemplateArgs
[i
]))
261 CurRec
->resolveReferencesTo(CurRec
->getValue(SMCTArgs
[i
]));
264 CurRec
->removeValue(SMCTArgs
[i
]);
266 // If a value is specified for this template arg, set it in the
268 for (const auto &Def
:
269 makeArrayRef(CurMC
->DefPrototypes
).slice(newDefStart
)) {
270 if (SetValue(Def
.get(), SubMultiClass
.RefRange
.Start
, SMCTArgs
[i
],
271 None
, SubMultiClass
.TemplateArgs
[i
]))
275 Def
->resolveReferencesTo(Def
->getValue(SMCTArgs
[i
]));
278 Def
->removeValue(SMCTArgs
[i
]);
280 } else if (!CurRec
->getValue(SMCTArgs
[i
])->getValue()->isComplete()) {
281 return Error(SubMultiClass
.RefRange
.Start
,
282 "Value not specified for template argument #" +
283 Twine(i
) + " (" + SMCTArgs
[i
]->getAsUnquotedString() +
284 ") of subclass '" + SMC
->Rec
.getNameInitAsString() + "'!");
291 /// ProcessForeachDefs - Given a record, apply all of the variable
292 /// values in all surrounding foreach loops, creating new records for
293 /// each combination of values.
294 bool TGParser::ProcessForeachDefs(Record
*CurRec
, SMLoc Loc
) {
298 // We want to instantiate a new copy of CurRec for each combination
299 // of nested loop iterator values. We don't want top instantiate
300 // any copies until we have values for each loop iterator.
302 return ProcessForeachDefs(CurRec
, Loc
, IterVals
);
305 /// ProcessForeachDefs - Given a record, a loop and a loop iterator,
306 /// apply each of the variable values in this loop and then process
308 bool TGParser::ProcessForeachDefs(Record
*CurRec
, SMLoc Loc
, IterSet
&IterVals
){
309 // Recursively build a tuple of iterator values.
310 if (IterVals
.size() != Loops
.size()) {
311 assert(IterVals
.size() < Loops
.size());
312 ForeachLoop
&CurLoop
= Loops
[IterVals
.size()];
313 ListInit
*List
= dyn_cast
<ListInit
>(CurLoop
.ListValue
);
315 Error(Loc
, "Loop list is not a list");
319 // Process each value.
320 for (unsigned i
= 0; i
< List
->size(); ++i
) {
321 Init
*ItemVal
= List
->resolveListElementReference(*CurRec
, nullptr, i
);
322 IterVals
.push_back(IterRecord(CurLoop
.IterVar
, ItemVal
));
323 if (ProcessForeachDefs(CurRec
, Loc
, IterVals
))
330 // This is the bottom of the recursion. We have all of the iterator values
331 // for this point in the iteration space. Instantiate a new record to
332 // reflect this combination of values.
333 auto IterRec
= make_unique
<Record
>(*CurRec
);
335 // Set the iterator values now.
336 for (IterRecord
&IR
: IterVals
) {
337 VarInit
*IterVar
= IR
.IterVar
;
338 TypedInit
*IVal
= dyn_cast
<TypedInit
>(IR
.IterValue
);
340 return Error(Loc
, "foreach iterator value is untyped");
342 IterRec
->addValue(RecordVal(IterVar
->getNameInit(), IVal
->getType(), false));
344 if (SetValue(IterRec
.get(), Loc
, IterVar
->getNameInit(), None
, IVal
))
345 return Error(Loc
, "when instantiating this def");
348 IterRec
->resolveReferencesTo(IterRec
->getValue(IterVar
->getNameInit()));
351 IterRec
->removeValue(IterVar
->getNameInit());
354 if (Records
.getDef(IterRec
->getNameInitAsString())) {
355 // If this record is anonymous, it's no problem, just generate a new name
356 if (!IterRec
->isAnonymous())
357 return Error(Loc
, "def already exists: " +IterRec
->getNameInitAsString());
359 IterRec
->setName(GetNewAnonymousName());
362 Record
*IterRecSave
= IterRec
.get(); // Keep a copy before release.
363 Records
.addDef(std::move(IterRec
));
364 IterRecSave
->resolveReferences();
368 //===----------------------------------------------------------------------===//
370 //===----------------------------------------------------------------------===//
372 /// isObjectStart - Return true if this is a valid first token for an Object.
373 static bool isObjectStart(tgtok::TokKind K
) {
374 return K
== tgtok::Class
|| K
== tgtok::Def
||
375 K
== tgtok::Defm
|| K
== tgtok::Let
||
376 K
== tgtok::MultiClass
|| K
== tgtok::Foreach
;
379 /// GetNewAnonymousName - Generate a unique anonymous name that can be used as
381 Init
*TGParser::GetNewAnonymousName() {
382 return StringInit::get("anonymous_" + utostr(AnonCounter
++));
385 /// ParseObjectName - If an object name is specified, return it. Otherwise,
387 /// ObjectName ::= Value [ '#' Value ]*
388 /// ObjectName ::= /*empty*/
390 Init
*TGParser::ParseObjectName(MultiClass
*CurMultiClass
) {
391 switch (Lex
.getCode()) {
395 // These are all of the tokens that can begin an object body.
396 // Some of these can also begin values but we disallow those cases
397 // because they are unlikely to be useful.
403 Record
*CurRec
= nullptr;
405 CurRec
= &CurMultiClass
->Rec
;
407 RecTy
*Type
= nullptr;
409 const TypedInit
*CurRecName
= dyn_cast
<TypedInit
>(CurRec
->getNameInit());
411 TokError("Record name is not typed!");
414 Type
= CurRecName
->getType();
417 return ParseValue(CurRec
, Type
, ParseNameMode
);
420 /// ParseClassID - Parse and resolve a reference to a class name. This returns
425 Record
*TGParser::ParseClassID() {
426 if (Lex
.getCode() != tgtok::Id
) {
427 TokError("expected name for ClassID");
431 Record
*Result
= Records
.getClass(Lex
.getCurStrVal());
433 TokError("Couldn't find class '" + Lex
.getCurStrVal() + "'");
439 /// ParseMultiClassID - Parse and resolve a reference to a multiclass name.
440 /// This returns null on error.
442 /// MultiClassID ::= ID
444 MultiClass
*TGParser::ParseMultiClassID() {
445 if (Lex
.getCode() != tgtok::Id
) {
446 TokError("expected name for MultiClassID");
450 MultiClass
*Result
= MultiClasses
[Lex
.getCurStrVal()].get();
452 TokError("Couldn't find multiclass '" + Lex
.getCurStrVal() + "'");
458 /// ParseSubClassReference - Parse a reference to a subclass or to a templated
459 /// subclass. This returns a SubClassRefTy with a null Record* on error.
461 /// SubClassRef ::= ClassID
462 /// SubClassRef ::= ClassID '<' ValueList '>'
464 SubClassReference
TGParser::
465 ParseSubClassReference(Record
*CurRec
, bool isDefm
) {
466 SubClassReference Result
;
467 Result
.RefRange
.Start
= Lex
.getLoc();
470 if (MultiClass
*MC
= ParseMultiClassID())
471 Result
.Rec
= &MC
->Rec
;
473 Result
.Rec
= ParseClassID();
475 if (!Result
.Rec
) return Result
;
477 // If there is no template arg list, we're done.
478 if (Lex
.getCode() != tgtok::less
) {
479 Result
.RefRange
.End
= Lex
.getLoc();
482 Lex
.Lex(); // Eat the '<'
484 if (Lex
.getCode() == tgtok::greater
) {
485 TokError("subclass reference requires a non-empty list of template values");
486 Result
.Rec
= nullptr;
490 ParseValueList(Result
.TemplateArgs
, CurRec
, Result
.Rec
);
491 if (Result
.TemplateArgs
.empty()) {
492 Result
.Rec
= nullptr; // Error parsing value list.
496 if (Lex
.getCode() != tgtok::greater
) {
497 TokError("expected '>' in template value list");
498 Result
.Rec
= nullptr;
502 Result
.RefRange
.End
= Lex
.getLoc();
507 /// ParseSubMultiClassReference - Parse a reference to a subclass or to a
508 /// templated submulticlass. This returns a SubMultiClassRefTy with a null
509 /// Record* on error.
511 /// SubMultiClassRef ::= MultiClassID
512 /// SubMultiClassRef ::= MultiClassID '<' ValueList '>'
514 SubMultiClassReference
TGParser::
515 ParseSubMultiClassReference(MultiClass
*CurMC
) {
516 SubMultiClassReference Result
;
517 Result
.RefRange
.Start
= Lex
.getLoc();
519 Result
.MC
= ParseMultiClassID();
520 if (!Result
.MC
) return Result
;
522 // If there is no template arg list, we're done.
523 if (Lex
.getCode() != tgtok::less
) {
524 Result
.RefRange
.End
= Lex
.getLoc();
527 Lex
.Lex(); // Eat the '<'
529 if (Lex
.getCode() == tgtok::greater
) {
530 TokError("subclass reference requires a non-empty list of template values");
535 ParseValueList(Result
.TemplateArgs
, &CurMC
->Rec
, &Result
.MC
->Rec
);
536 if (Result
.TemplateArgs
.empty()) {
537 Result
.MC
= nullptr; // Error parsing value list.
541 if (Lex
.getCode() != tgtok::greater
) {
542 TokError("expected '>' in template value list");
547 Result
.RefRange
.End
= Lex
.getLoc();
552 /// ParseRangePiece - Parse a bit/value range.
553 /// RangePiece ::= INTVAL
554 /// RangePiece ::= INTVAL '-' INTVAL
555 /// RangePiece ::= INTVAL INTVAL
556 bool TGParser::ParseRangePiece(SmallVectorImpl
<unsigned> &Ranges
) {
557 if (Lex
.getCode() != tgtok::IntVal
) {
558 TokError("expected integer or bitrange");
561 int64_t Start
= Lex
.getCurIntVal();
565 return TokError("invalid range, cannot be negative");
567 switch (Lex
.Lex()) { // eat first character.
569 Ranges
.push_back(Start
);
572 if (Lex
.Lex() != tgtok::IntVal
) {
573 TokError("expected integer value as end of range");
576 End
= Lex
.getCurIntVal();
579 End
= -Lex
.getCurIntVal();
583 return TokError("invalid range, cannot be negative");
588 for (; Start
<= End
; ++Start
)
589 Ranges
.push_back(Start
);
591 for (; Start
>= End
; --Start
)
592 Ranges
.push_back(Start
);
596 /// ParseRangeList - Parse a list of scalars and ranges into scalar values.
598 /// RangeList ::= RangePiece (',' RangePiece)*
600 void TGParser::ParseRangeList(SmallVectorImpl
<unsigned> &Result
) {
601 // Parse the first piece.
602 if (ParseRangePiece(Result
)) {
606 while (Lex
.getCode() == tgtok::comma
) {
607 Lex
.Lex(); // Eat the comma.
609 // Parse the next range piece.
610 if (ParseRangePiece(Result
)) {
617 /// ParseOptionalRangeList - Parse either a range list in <>'s or nothing.
618 /// OptionalRangeList ::= '<' RangeList '>'
619 /// OptionalRangeList ::= /*empty*/
620 bool TGParser::ParseOptionalRangeList(SmallVectorImpl
<unsigned> &Ranges
) {
621 if (Lex
.getCode() != tgtok::less
)
624 SMLoc StartLoc
= Lex
.getLoc();
625 Lex
.Lex(); // eat the '<'
627 // Parse the range list.
628 ParseRangeList(Ranges
);
629 if (Ranges
.empty()) return true;
631 if (Lex
.getCode() != tgtok::greater
) {
632 TokError("expected '>' at end of range list");
633 return Error(StartLoc
, "to match this '<'");
635 Lex
.Lex(); // eat the '>'.
639 /// ParseOptionalBitList - Parse either a bit list in {}'s or nothing.
640 /// OptionalBitList ::= '{' RangeList '}'
641 /// OptionalBitList ::= /*empty*/
642 bool TGParser::ParseOptionalBitList(SmallVectorImpl
<unsigned> &Ranges
) {
643 if (Lex
.getCode() != tgtok::l_brace
)
646 SMLoc StartLoc
= Lex
.getLoc();
647 Lex
.Lex(); // eat the '{'
649 // Parse the range list.
650 ParseRangeList(Ranges
);
651 if (Ranges
.empty()) return true;
653 if (Lex
.getCode() != tgtok::r_brace
) {
654 TokError("expected '}' at end of bit list");
655 return Error(StartLoc
, "to match this '{'");
657 Lex
.Lex(); // eat the '}'.
661 /// ParseType - Parse and return a tblgen type. This returns null on error.
663 /// Type ::= STRING // string type
664 /// Type ::= CODE // code type
665 /// Type ::= BIT // bit type
666 /// Type ::= BITS '<' INTVAL '>' // bits<x> type
667 /// Type ::= INT // int type
668 /// Type ::= LIST '<' Type '>' // list<x> type
669 /// Type ::= DAG // dag type
670 /// Type ::= ClassID // Record Type
672 RecTy
*TGParser::ParseType() {
673 switch (Lex
.getCode()) {
674 default: TokError("Unknown token when expecting a type"); return nullptr;
675 case tgtok::String
: Lex
.Lex(); return StringRecTy::get();
676 case tgtok::Code
: Lex
.Lex(); return CodeRecTy::get();
677 case tgtok::Bit
: Lex
.Lex(); return BitRecTy::get();
678 case tgtok::Int
: Lex
.Lex(); return IntRecTy::get();
679 case tgtok::Dag
: Lex
.Lex(); return DagRecTy::get();
681 if (Record
*R
= ParseClassID()) return RecordRecTy::get(R
);
684 if (Lex
.Lex() != tgtok::less
) { // Eat 'bits'
685 TokError("expected '<' after bits type");
688 if (Lex
.Lex() != tgtok::IntVal
) { // Eat '<'
689 TokError("expected integer in bits<n> type");
692 uint64_t Val
= Lex
.getCurIntVal();
693 if (Lex
.Lex() != tgtok::greater
) { // Eat count.
694 TokError("expected '>' at end of bits<n> type");
697 Lex
.Lex(); // Eat '>'
698 return BitsRecTy::get(Val
);
701 if (Lex
.Lex() != tgtok::less
) { // Eat 'bits'
702 TokError("expected '<' after list type");
705 Lex
.Lex(); // Eat '<'
706 RecTy
*SubType
= ParseType();
707 if (!SubType
) return nullptr;
709 if (Lex
.getCode() != tgtok::greater
) {
710 TokError("expected '>' at end of list<ty> type");
713 Lex
.Lex(); // Eat '>'
714 return ListRecTy::get(SubType
);
719 /// ParseIDValue - This is just like ParseIDValue above, but it assumes the ID
720 /// has already been read.
721 Init
*TGParser::ParseIDValue(Record
*CurRec
, StringInit
*Name
, SMLoc NameLoc
,
724 if (const RecordVal
*RV
= CurRec
->getValue(Name
))
725 return VarInit::get(Name
, RV
->getType());
727 Init
*TemplateArgName
= QualifyName(*CurRec
, CurMultiClass
, Name
, ":");
730 TemplateArgName
= QualifyName(CurMultiClass
->Rec
, CurMultiClass
, Name
,
733 if (CurRec
->isTemplateArg(TemplateArgName
)) {
734 const RecordVal
*RV
= CurRec
->getValue(TemplateArgName
);
735 assert(RV
&& "Template arg doesn't exist??");
736 return VarInit::get(TemplateArgName
, RV
->getType());
741 Init
*MCName
= QualifyName(CurMultiClass
->Rec
, CurMultiClass
, Name
, "::");
743 if (CurMultiClass
->Rec
.isTemplateArg(MCName
)) {
744 const RecordVal
*RV
= CurMultiClass
->Rec
.getValue(MCName
);
745 assert(RV
&& "Template arg doesn't exist??");
746 return VarInit::get(MCName
, RV
->getType());
750 // If this is in a foreach loop, make sure it's not a loop iterator
751 for (const auto &L
: Loops
) {
752 VarInit
*IterVar
= dyn_cast
<VarInit
>(L
.IterVar
);
753 if (IterVar
&& IterVar
->getNameInit() == Name
)
757 if (Mode
== ParseNameMode
)
760 if (Record
*D
= Records
.getDef(Name
->getValue()))
761 return DefInit::get(D
);
763 if (Mode
== ParseValueMode
) {
764 Error(NameLoc
, "Variable not defined: '" + Name
->getValue() + "'");
771 /// ParseOperation - Parse an operator. This returns null on error.
773 /// Operation ::= XOperator ['<' Type '>'] '(' Args ')'
775 Init
*TGParser::ParseOperation(Record
*CurRec
, RecTy
*ItemType
) {
776 switch (Lex
.getCode()) {
778 TokError("unknown operation");
783 case tgtok::XCast
: { // Value ::= !unop '(' Value ')'
784 UnOpInit::UnaryOp Code
;
785 RecTy
*Type
= nullptr;
787 switch (Lex
.getCode()) {
788 default: llvm_unreachable("Unhandled code!");
790 Lex
.Lex(); // eat the operation
791 Code
= UnOpInit::CAST
;
793 Type
= ParseOperatorType();
796 TokError("did not get type for unary operator");
802 Lex
.Lex(); // eat the operation
803 Code
= UnOpInit::HEAD
;
806 Lex
.Lex(); // eat the operation
807 Code
= UnOpInit::TAIL
;
810 Lex
.Lex(); // eat the operation
811 Code
= UnOpInit::EMPTY
;
812 Type
= IntRecTy::get();
815 if (Lex
.getCode() != tgtok::l_paren
) {
816 TokError("expected '(' after unary operator");
819 Lex
.Lex(); // eat the '('
821 Init
*LHS
= ParseValue(CurRec
);
822 if (!LHS
) return nullptr;
824 if (Code
== UnOpInit::HEAD
||
825 Code
== UnOpInit::TAIL
||
826 Code
== UnOpInit::EMPTY
) {
827 ListInit
*LHSl
= dyn_cast
<ListInit
>(LHS
);
828 StringInit
*LHSs
= dyn_cast
<StringInit
>(LHS
);
829 TypedInit
*LHSt
= dyn_cast
<TypedInit
>(LHS
);
830 if (!LHSl
&& !LHSs
&& !LHSt
) {
831 TokError("expected list or string type argument in unary operator");
835 ListRecTy
*LType
= dyn_cast
<ListRecTy
>(LHSt
->getType());
836 StringRecTy
*SType
= dyn_cast
<StringRecTy
>(LHSt
->getType());
837 if (!LType
&& !SType
) {
838 TokError("expected list or string type argument in unary operator");
843 if (Code
== UnOpInit::HEAD
|| Code
== UnOpInit::TAIL
) {
844 if (!LHSl
&& !LHSt
) {
845 TokError("expected list type argument in unary operator");
849 if (LHSl
&& LHSl
->empty()) {
850 TokError("empty list argument in unary operator");
854 Init
*Item
= LHSl
->getElement(0);
855 TypedInit
*Itemt
= dyn_cast
<TypedInit
>(Item
);
857 TokError("untyped list element in unary operator");
860 Type
= (Code
== UnOpInit::HEAD
) ? Itemt
->getType()
861 : ListRecTy::get(Itemt
->getType());
863 assert(LHSt
&& "expected list type argument in unary operator");
864 ListRecTy
*LType
= dyn_cast
<ListRecTy
>(LHSt
->getType());
866 TokError("expected list type argument in unary operator");
869 Type
= (Code
== UnOpInit::HEAD
) ? LType
->getElementType() : LType
;
874 if (Lex
.getCode() != tgtok::r_paren
) {
875 TokError("expected ')' in unary operator");
878 Lex
.Lex(); // eat the ')'
879 return (UnOpInit::get(Code
, LHS
, Type
))->Fold(CurRec
, CurMultiClass
);
890 case tgtok::XListConcat
:
891 case tgtok::XStrConcat
: { // Value ::= !binop '(' Value ',' Value ')'
892 tgtok::TokKind OpTok
= Lex
.getCode();
893 SMLoc OpLoc
= Lex
.getLoc();
894 Lex
.Lex(); // eat the operation
896 BinOpInit::BinaryOp Code
;
897 RecTy
*Type
= nullptr;
900 default: llvm_unreachable("Unhandled code!");
901 case tgtok::XConcat
: Code
= BinOpInit::CONCAT
;Type
= DagRecTy::get(); break;
902 case tgtok::XADD
: Code
= BinOpInit::ADD
; Type
= IntRecTy::get(); break;
903 case tgtok::XAND
: Code
= BinOpInit::AND
; Type
= IntRecTy::get(); break;
904 case tgtok::XOR
: Code
= BinOpInit::OR
; Type
= IntRecTy::get(); break;
905 case tgtok::XSRA
: Code
= BinOpInit::SRA
; Type
= IntRecTy::get(); break;
906 case tgtok::XSRL
: Code
= BinOpInit::SRL
; Type
= IntRecTy::get(); break;
907 case tgtok::XSHL
: Code
= BinOpInit::SHL
; Type
= IntRecTy::get(); break;
908 case tgtok::XEq
: Code
= BinOpInit::EQ
; Type
= BitRecTy::get(); break;
909 case tgtok::XListConcat
:
910 Code
= BinOpInit::LISTCONCAT
;
911 // We don't know the list type until we parse the first argument
913 case tgtok::XStrConcat
:
914 Code
= BinOpInit::STRCONCAT
;
915 Type
= StringRecTy::get();
919 if (Lex
.getCode() != tgtok::l_paren
) {
920 TokError("expected '(' after binary operator");
923 Lex
.Lex(); // eat the '('
925 SmallVector
<Init
*, 2> InitList
;
927 InitList
.push_back(ParseValue(CurRec
));
928 if (!InitList
.back()) return nullptr;
930 while (Lex
.getCode() == tgtok::comma
) {
931 Lex
.Lex(); // eat the ','
933 InitList
.push_back(ParseValue(CurRec
));
934 if (!InitList
.back()) return nullptr;
937 if (Lex
.getCode() != tgtok::r_paren
) {
938 TokError("expected ')' in operator");
941 Lex
.Lex(); // eat the ')'
943 // If we are doing !listconcat, we should know the type by now
944 if (OpTok
== tgtok::XListConcat
) {
945 if (VarInit
*Arg0
= dyn_cast
<VarInit
>(InitList
[0]))
946 Type
= Arg0
->getType();
947 else if (ListInit
*Arg0
= dyn_cast
<ListInit
>(InitList
[0]))
948 Type
= Arg0
->getType();
950 InitList
[0]->print(errs());
951 Error(OpLoc
, "expected a list");
956 // We allow multiple operands to associative operators like !strconcat as
957 // shorthand for nesting them.
958 if (Code
== BinOpInit::STRCONCAT
|| Code
== BinOpInit::LISTCONCAT
) {
959 while (InitList
.size() > 2) {
960 Init
*RHS
= InitList
.pop_back_val();
961 RHS
= (BinOpInit::get(Code
, InitList
.back(), RHS
, Type
))
962 ->Fold(CurRec
, CurMultiClass
);
963 InitList
.back() = RHS
;
967 if (InitList
.size() == 2)
968 return (BinOpInit::get(Code
, InitList
[0], InitList
[1], Type
))
969 ->Fold(CurRec
, CurMultiClass
);
971 Error(OpLoc
, "expected two operands to operator");
976 case tgtok::XForEach
:
977 case tgtok::XSubst
: { // Value ::= !ternop '(' Value ',' Value ',' Value ')'
978 TernOpInit::TernaryOp Code
;
979 RecTy
*Type
= nullptr;
981 tgtok::TokKind LexCode
= Lex
.getCode();
982 Lex
.Lex(); // eat the operation
984 default: llvm_unreachable("Unhandled code!");
986 Code
= TernOpInit::IF
;
988 case tgtok::XForEach
:
989 Code
= TernOpInit::FOREACH
;
992 Code
= TernOpInit::SUBST
;
995 if (Lex
.getCode() != tgtok::l_paren
) {
996 TokError("expected '(' after ternary operator");
999 Lex
.Lex(); // eat the '('
1001 Init
*LHS
= ParseValue(CurRec
);
1002 if (!LHS
) return nullptr;
1004 if (Lex
.getCode() != tgtok::comma
) {
1005 TokError("expected ',' in ternary operator");
1008 Lex
.Lex(); // eat the ','
1010 Init
*MHS
= ParseValue(CurRec
, ItemType
);
1014 if (Lex
.getCode() != tgtok::comma
) {
1015 TokError("expected ',' in ternary operator");
1018 Lex
.Lex(); // eat the ','
1020 Init
*RHS
= ParseValue(CurRec
, ItemType
);
1024 if (Lex
.getCode() != tgtok::r_paren
) {
1025 TokError("expected ')' in binary operator");
1028 Lex
.Lex(); // eat the ')'
1031 default: llvm_unreachable("Unhandled code!");
1033 RecTy
*MHSTy
= nullptr;
1034 RecTy
*RHSTy
= nullptr;
1036 if (TypedInit
*MHSt
= dyn_cast
<TypedInit
>(MHS
))
1037 MHSTy
= MHSt
->getType();
1038 if (BitsInit
*MHSbits
= dyn_cast
<BitsInit
>(MHS
))
1039 MHSTy
= BitsRecTy::get(MHSbits
->getNumBits());
1040 if (isa
<BitInit
>(MHS
))
1041 MHSTy
= BitRecTy::get();
1043 if (TypedInit
*RHSt
= dyn_cast
<TypedInit
>(RHS
))
1044 RHSTy
= RHSt
->getType();
1045 if (BitsInit
*RHSbits
= dyn_cast
<BitsInit
>(RHS
))
1046 RHSTy
= BitsRecTy::get(RHSbits
->getNumBits());
1047 if (isa
<BitInit
>(RHS
))
1048 RHSTy
= BitRecTy::get();
1050 // For UnsetInit, it's typed from the other hand.
1051 if (isa
<UnsetInit
>(MHS
))
1053 if (isa
<UnsetInit
>(RHS
))
1056 if (!MHSTy
|| !RHSTy
) {
1057 TokError("could not get type for !if");
1061 if (MHSTy
->typeIsConvertibleTo(RHSTy
)) {
1063 } else if (RHSTy
->typeIsConvertibleTo(MHSTy
)) {
1066 TokError("inconsistent types for !if");
1071 case tgtok::XForEach
: {
1072 TypedInit
*MHSt
= dyn_cast
<TypedInit
>(MHS
);
1074 TokError("could not get type for !foreach");
1077 Type
= MHSt
->getType();
1080 case tgtok::XSubst
: {
1081 TypedInit
*RHSt
= dyn_cast
<TypedInit
>(RHS
);
1083 TokError("could not get type for !subst");
1086 Type
= RHSt
->getType();
1090 return (TernOpInit::get(Code
, LHS
, MHS
, RHS
, Type
))->Fold(CurRec
,
1096 /// ParseOperatorType - Parse a type for an operator. This returns
1099 /// OperatorType ::= '<' Type '>'
1101 RecTy
*TGParser::ParseOperatorType() {
1102 RecTy
*Type
= nullptr;
1104 if (Lex
.getCode() != tgtok::less
) {
1105 TokError("expected type name for operator");
1108 Lex
.Lex(); // eat the <
1113 TokError("expected type name for operator");
1117 if (Lex
.getCode() != tgtok::greater
) {
1118 TokError("expected type name for operator");
1121 Lex
.Lex(); // eat the >
1126 /// ParseSimpleValue - Parse a tblgen value. This returns null on error.
1128 /// SimpleValue ::= IDValue
1129 /// SimpleValue ::= INTVAL
1130 /// SimpleValue ::= STRVAL+
1131 /// SimpleValue ::= CODEFRAGMENT
1132 /// SimpleValue ::= '?'
1133 /// SimpleValue ::= '{' ValueList '}'
1134 /// SimpleValue ::= ID '<' ValueListNE '>'
1135 /// SimpleValue ::= '[' ValueList ']'
1136 /// SimpleValue ::= '(' IDValue DagArgList ')'
1137 /// SimpleValue ::= CONCATTOK '(' Value ',' Value ')'
1138 /// SimpleValue ::= ADDTOK '(' Value ',' Value ')'
1139 /// SimpleValue ::= SHLTOK '(' Value ',' Value ')'
1140 /// SimpleValue ::= SRATOK '(' Value ',' Value ')'
1141 /// SimpleValue ::= SRLTOK '(' Value ',' Value ')'
1142 /// SimpleValue ::= LISTCONCATTOK '(' Value ',' Value ')'
1143 /// SimpleValue ::= STRCONCATTOK '(' Value ',' Value ')'
1145 Init
*TGParser::ParseSimpleValue(Record
*CurRec
, RecTy
*ItemType
,
1148 switch (Lex
.getCode()) {
1149 default: TokError("Unknown token when parsing a value"); break;
1151 // This is a leading paste operation. This is deprecated but
1152 // still exists in some .td files. Ignore it.
1153 Lex
.Lex(); // Skip '#'.
1154 return ParseSimpleValue(CurRec
, ItemType
, Mode
);
1155 case tgtok::IntVal
: R
= IntInit::get(Lex
.getCurIntVal()); Lex
.Lex(); break;
1156 case tgtok::BinaryIntVal
: {
1157 auto BinaryVal
= Lex
.getCurBinaryIntVal();
1158 SmallVector
<Init
*, 16> Bits(BinaryVal
.second
);
1159 for (unsigned i
= 0, e
= BinaryVal
.second
; i
!= e
; ++i
)
1160 Bits
[i
] = BitInit::get(BinaryVal
.first
& (1LL << i
));
1161 R
= BitsInit::get(Bits
);
1165 case tgtok::StrVal
: {
1166 std::string Val
= Lex
.getCurStrVal();
1169 // Handle multiple consecutive concatenated strings.
1170 while (Lex
.getCode() == tgtok::StrVal
) {
1171 Val
+= Lex
.getCurStrVal();
1175 R
= StringInit::get(Val
);
1178 case tgtok::CodeFragment
:
1179 R
= CodeInit::get(Lex
.getCurStrVal());
1182 case tgtok::question
:
1183 R
= UnsetInit::get();
1187 SMLoc NameLoc
= Lex
.getLoc();
1188 StringInit
*Name
= StringInit::get(Lex
.getCurStrVal());
1189 if (Lex
.Lex() != tgtok::less
) // consume the Id.
1190 return ParseIDValue(CurRec
, Name
, NameLoc
, Mode
); // Value ::= IDValue
1192 // Value ::= ID '<' ValueListNE '>'
1193 if (Lex
.Lex() == tgtok::greater
) {
1194 TokError("expected non-empty value list");
1198 // This is a CLASS<initvalslist> expression. This is supposed to synthesize
1199 // a new anonymous definition, deriving from CLASS<initvalslist> with no
1201 Record
*Class
= Records
.getClass(Name
->getValue());
1203 Error(NameLoc
, "Expected a class name, got '" + Name
->getValue() + "'");
1207 SubClassReference SCRef
;
1208 ParseValueList(SCRef
.TemplateArgs
, CurRec
, Class
);
1209 if (SCRef
.TemplateArgs
.empty()) return nullptr;
1211 if (Lex
.getCode() != tgtok::greater
) {
1212 TokError("expected '>' at end of value list");
1215 Lex
.Lex(); // eat the '>'
1216 SMLoc EndLoc
= Lex
.getLoc();
1218 // Create the new record, set it as CurRec temporarily.
1219 auto NewRecOwner
= llvm::make_unique
<Record
>(GetNewAnonymousName(), NameLoc
,
1220 Records
, /*IsAnonymous=*/true);
1221 Record
*NewRec
= NewRecOwner
.get(); // Keep a copy since we may release.
1222 SCRef
.RefRange
= SMRange(NameLoc
, EndLoc
);
1224 // Add info about the subclass to NewRec.
1225 if (AddSubClass(NewRec
, SCRef
))
1228 if (!CurMultiClass
) {
1229 NewRec
->resolveReferences();
1230 Records
.addDef(std::move(NewRecOwner
));
1232 // This needs to get resolved once the multiclass template arguments are
1233 // known before any use.
1234 NewRec
->setResolveFirst(true);
1235 // Otherwise, we're inside a multiclass, add it to the multiclass.
1236 CurMultiClass
->DefPrototypes
.push_back(std::move(NewRecOwner
));
1238 // Copy the template arguments for the multiclass into the def.
1239 for (Init
*TArg
: CurMultiClass
->Rec
.getTemplateArgs()) {
1240 const RecordVal
*RV
= CurMultiClass
->Rec
.getValue(TArg
);
1241 assert(RV
&& "Template arg doesn't exist?");
1242 NewRec
->addValue(*RV
);
1245 // We can't return the prototype def here, instead return:
1246 // !cast<ItemType>(!strconcat(NAME, AnonName)).
1247 const RecordVal
*MCNameRV
= CurMultiClass
->Rec
.getValue("NAME");
1248 assert(MCNameRV
&& "multiclass record must have a NAME");
1250 return UnOpInit::get(UnOpInit::CAST
,
1251 BinOpInit::get(BinOpInit::STRCONCAT
,
1252 VarInit::get(MCNameRV
->getName(),
1253 MCNameRV
->getType()),
1254 NewRec
->getNameInit(),
1255 StringRecTy::get()),
1256 Class
->getDefInit()->getType());
1259 // The result of the expression is a reference to the new record.
1260 return DefInit::get(NewRec
);
1262 case tgtok::l_brace
: { // Value ::= '{' ValueList '}'
1263 SMLoc BraceLoc
= Lex
.getLoc();
1264 Lex
.Lex(); // eat the '{'
1265 SmallVector
<Init
*, 16> Vals
;
1267 if (Lex
.getCode() != tgtok::r_brace
) {
1268 ParseValueList(Vals
, CurRec
);
1269 if (Vals
.empty()) return nullptr;
1271 if (Lex
.getCode() != tgtok::r_brace
) {
1272 TokError("expected '}' at end of bit list value");
1275 Lex
.Lex(); // eat the '}'
1277 SmallVector
<Init
*, 16> NewBits
;
1279 // As we parse { a, b, ... }, 'a' is the highest bit, but we parse it
1280 // first. We'll first read everything in to a vector, then we can reverse
1281 // it to get the bits in the correct order for the BitsInit value.
1282 for (unsigned i
= 0, e
= Vals
.size(); i
!= e
; ++i
) {
1283 // FIXME: The following two loops would not be duplicated
1284 // if the API was a little more orthogonal.
1286 // bits<n> values are allowed to initialize n bits.
1287 if (BitsInit
*BI
= dyn_cast
<BitsInit
>(Vals
[i
])) {
1288 for (unsigned i
= 0, e
= BI
->getNumBits(); i
!= e
; ++i
)
1289 NewBits
.push_back(BI
->getBit((e
- i
) - 1));
1292 // bits<n> can also come from variable initializers.
1293 if (VarInit
*VI
= dyn_cast
<VarInit
>(Vals
[i
])) {
1294 if (BitsRecTy
*BitsRec
= dyn_cast
<BitsRecTy
>(VI
->getType())) {
1295 for (unsigned i
= 0, e
= BitsRec
->getNumBits(); i
!= e
; ++i
)
1296 NewBits
.push_back(VI
->getBit((e
- i
) - 1));
1299 // Fallthrough to try convert this to a bit.
1301 // All other values must be convertible to just a single bit.
1302 Init
*Bit
= Vals
[i
]->convertInitializerTo(BitRecTy::get());
1304 Error(BraceLoc
, "Element #" + Twine(i
) + " (" + Vals
[i
]->getAsString() +
1305 ") is not convertable to a bit");
1308 NewBits
.push_back(Bit
);
1310 std::reverse(NewBits
.begin(), NewBits
.end());
1311 return BitsInit::get(NewBits
);
1313 case tgtok::l_square
: { // Value ::= '[' ValueList ']'
1314 Lex
.Lex(); // eat the '['
1315 SmallVector
<Init
*, 16> Vals
;
1317 RecTy
*DeducedEltTy
= nullptr;
1318 ListRecTy
*GivenListTy
= nullptr;
1321 ListRecTy
*ListType
= dyn_cast
<ListRecTy
>(ItemType
);
1323 TokError(Twine("Type mismatch for list, expected list type, got ") +
1324 ItemType
->getAsString());
1327 GivenListTy
= ListType
;
1330 if (Lex
.getCode() != tgtok::r_square
) {
1331 ParseValueList(Vals
, CurRec
, nullptr,
1332 GivenListTy
? GivenListTy
->getElementType() : nullptr);
1333 if (Vals
.empty()) return nullptr;
1335 if (Lex
.getCode() != tgtok::r_square
) {
1336 TokError("expected ']' at end of list value");
1339 Lex
.Lex(); // eat the ']'
1341 RecTy
*GivenEltTy
= nullptr;
1342 if (Lex
.getCode() == tgtok::less
) {
1343 // Optional list element type
1344 Lex
.Lex(); // eat the '<'
1346 GivenEltTy
= ParseType();
1348 // Couldn't parse element type
1352 if (Lex
.getCode() != tgtok::greater
) {
1353 TokError("expected '>' at end of list element type");
1356 Lex
.Lex(); // eat the '>'
1360 RecTy
*EltTy
= nullptr;
1361 for (Init
*V
: Vals
) {
1362 TypedInit
*TArg
= dyn_cast
<TypedInit
>(V
);
1364 TokError("Untyped list element");
1368 EltTy
= resolveTypes(EltTy
, TArg
->getType());
1370 TokError("Incompatible types in list elements");
1374 EltTy
= TArg
->getType();
1380 // Verify consistency
1381 if (!EltTy
->typeIsConvertibleTo(GivenEltTy
)) {
1382 TokError("Incompatible types in list elements");
1391 TokError("No type for list");
1394 DeducedEltTy
= GivenListTy
->getElementType();
1396 // Make sure the deduced type is compatible with the given type
1398 if (!EltTy
->typeIsConvertibleTo(GivenListTy
->getElementType())) {
1399 TokError("Element type mismatch for list");
1403 DeducedEltTy
= EltTy
;
1406 return ListInit::get(Vals
, DeducedEltTy
);
1408 case tgtok::l_paren
: { // Value ::= '(' IDValue DagArgList ')'
1409 Lex
.Lex(); // eat the '('
1410 if (Lex
.getCode() != tgtok::Id
&& Lex
.getCode() != tgtok::XCast
) {
1411 TokError("expected identifier in dag init");
1415 Init
*Operator
= ParseValue(CurRec
);
1416 if (!Operator
) return nullptr;
1418 // If the operator name is present, parse it.
1419 StringInit
*OperatorName
= nullptr;
1420 if (Lex
.getCode() == tgtok::colon
) {
1421 if (Lex
.Lex() != tgtok::VarName
) { // eat the ':'
1422 TokError("expected variable name in dag operator");
1425 OperatorName
= StringInit::get(Lex
.getCurStrVal());
1426 Lex
.Lex(); // eat the VarName.
1429 SmallVector
<std::pair
<llvm::Init
*, StringInit
*>, 8> DagArgs
;
1430 if (Lex
.getCode() != tgtok::r_paren
) {
1431 ParseDagArgList(DagArgs
, CurRec
);
1432 if (DagArgs
.empty()) return nullptr;
1435 if (Lex
.getCode() != tgtok::r_paren
) {
1436 TokError("expected ')' in dag init");
1439 Lex
.Lex(); // eat the ')'
1441 return DagInit::get(Operator
, OperatorName
, DagArgs
);
1447 case tgtok::XCast
: // Value ::= !unop '(' Value ')'
1448 case tgtok::XConcat
:
1456 case tgtok::XListConcat
:
1457 case tgtok::XStrConcat
: // Value ::= !binop '(' Value ',' Value ')'
1459 case tgtok::XForEach
:
1460 case tgtok::XSubst
: { // Value ::= !ternop '(' Value ',' Value ',' Value ')'
1461 return ParseOperation(CurRec
, ItemType
);
1468 /// ParseValue - Parse a tblgen value. This returns null on error.
1470 /// Value ::= SimpleValue ValueSuffix*
1471 /// ValueSuffix ::= '{' BitList '}'
1472 /// ValueSuffix ::= '[' BitList ']'
1473 /// ValueSuffix ::= '.' ID
1475 Init
*TGParser::ParseValue(Record
*CurRec
, RecTy
*ItemType
, IDParseMode Mode
) {
1476 Init
*Result
= ParseSimpleValue(CurRec
, ItemType
, Mode
);
1477 if (!Result
) return nullptr;
1479 // Parse the suffixes now if present.
1481 switch (Lex
.getCode()) {
1482 default: return Result
;
1483 case tgtok::l_brace
: {
1484 if (Mode
== ParseNameMode
|| Mode
== ParseForeachMode
)
1485 // This is the beginning of the object body.
1488 SMLoc CurlyLoc
= Lex
.getLoc();
1489 Lex
.Lex(); // eat the '{'
1490 SmallVector
<unsigned, 16> Ranges
;
1491 ParseRangeList(Ranges
);
1492 if (Ranges
.empty()) return nullptr;
1494 // Reverse the bitlist.
1495 std::reverse(Ranges
.begin(), Ranges
.end());
1496 Result
= Result
->convertInitializerBitRange(Ranges
);
1498 Error(CurlyLoc
, "Invalid bit range for value");
1503 if (Lex
.getCode() != tgtok::r_brace
) {
1504 TokError("expected '}' at end of bit range list");
1510 case tgtok::l_square
: {
1511 SMLoc SquareLoc
= Lex
.getLoc();
1512 Lex
.Lex(); // eat the '['
1513 SmallVector
<unsigned, 16> Ranges
;
1514 ParseRangeList(Ranges
);
1515 if (Ranges
.empty()) return nullptr;
1517 Result
= Result
->convertInitListSlice(Ranges
);
1519 Error(SquareLoc
, "Invalid range for list slice");
1524 if (Lex
.getCode() != tgtok::r_square
) {
1525 TokError("expected ']' at end of list slice");
1531 case tgtok::period
: {
1532 if (Lex
.Lex() != tgtok::Id
) { // eat the .
1533 TokError("expected field identifier after '.'");
1536 StringInit
*FieldName
= StringInit::get(Lex
.getCurStrVal());
1537 if (!Result
->getFieldType(FieldName
)) {
1538 TokError("Cannot access field '" + Lex
.getCurStrVal() + "' of value '" +
1539 Result
->getAsString() + "'");
1542 Result
= FieldInit::get(Result
, FieldName
);
1543 Lex
.Lex(); // eat field name
1548 SMLoc PasteLoc
= Lex
.getLoc();
1550 // Create a !strconcat() operation, first casting each operand to
1551 // a string if necessary.
1553 TypedInit
*LHS
= dyn_cast
<TypedInit
>(Result
);
1555 Error(PasteLoc
, "LHS of paste is not typed!");
1559 if (LHS
->getType() != StringRecTy::get()) {
1560 LHS
= UnOpInit::get(UnOpInit::CAST
, LHS
, StringRecTy::get());
1563 TypedInit
*RHS
= nullptr;
1565 Lex
.Lex(); // Eat the '#'.
1566 switch (Lex
.getCode()) {
1569 case tgtok::l_brace
:
1570 // These are all of the tokens that can begin an object body.
1571 // Some of these can also begin values but we disallow those cases
1572 // because they are unlikely to be useful.
1574 // Trailing paste, concat with an empty string.
1575 RHS
= StringInit::get("");
1579 Init
*RHSResult
= ParseValue(CurRec
, ItemType
, ParseNameMode
);
1580 RHS
= dyn_cast
<TypedInit
>(RHSResult
);
1582 Error(PasteLoc
, "RHS of paste is not typed!");
1586 if (RHS
->getType() != StringRecTy::get()) {
1587 RHS
= UnOpInit::get(UnOpInit::CAST
, RHS
, StringRecTy::get());
1593 Result
= BinOpInit::get(BinOpInit::STRCONCAT
, LHS
, RHS
,
1594 StringRecTy::get())->Fold(CurRec
, CurMultiClass
);
1600 /// ParseDagArgList - Parse the argument list for a dag literal expression.
1602 /// DagArg ::= Value (':' VARNAME)?
1603 /// DagArg ::= VARNAME
1604 /// DagArgList ::= DagArg
1605 /// DagArgList ::= DagArgList ',' DagArg
1606 void TGParser::ParseDagArgList(
1607 SmallVectorImpl
<std::pair
<llvm::Init
*, StringInit
*>> &Result
,
1611 // DagArg ::= VARNAME
1612 if (Lex
.getCode() == tgtok::VarName
) {
1613 // A missing value is treated like '?'.
1614 StringInit
*VarName
= StringInit::get(Lex
.getCurStrVal());
1615 Result
.emplace_back(UnsetInit::get(), VarName
);
1618 // DagArg ::= Value (':' VARNAME)?
1619 Init
*Val
= ParseValue(CurRec
);
1625 // If the variable name is present, add it.
1626 StringInit
*VarName
= nullptr;
1627 if (Lex
.getCode() == tgtok::colon
) {
1628 if (Lex
.Lex() != tgtok::VarName
) { // eat the ':'
1629 TokError("expected variable name in dag literal");
1633 VarName
= StringInit::get(Lex
.getCurStrVal());
1634 Lex
.Lex(); // eat the VarName.
1637 Result
.push_back(std::make_pair(Val
, VarName
));
1639 if (Lex
.getCode() != tgtok::comma
) break;
1640 Lex
.Lex(); // eat the ','
1644 /// ParseValueList - Parse a comma separated list of values, returning them as a
1645 /// vector. Note that this always expects to be able to parse at least one
1646 /// value. It returns an empty list if this is not possible.
1648 /// ValueList ::= Value (',' Value)
1650 void TGParser::ParseValueList(SmallVectorImpl
<Init
*> &Result
, Record
*CurRec
,
1651 Record
*ArgsRec
, RecTy
*EltTy
) {
1652 RecTy
*ItemType
= EltTy
;
1653 unsigned int ArgN
= 0;
1654 if (ArgsRec
&& !EltTy
) {
1655 ArrayRef
<Init
*> TArgs
= ArgsRec
->getTemplateArgs();
1656 if (TArgs
.empty()) {
1657 TokError("template argument provided to non-template class");
1661 const RecordVal
*RV
= ArgsRec
->getValue(TArgs
[ArgN
]);
1663 errs() << "Cannot find template arg " << ArgN
<< " (" << TArgs
[ArgN
]
1666 assert(RV
&& "Template argument record not found??");
1667 ItemType
= RV
->getType();
1670 Result
.push_back(ParseValue(CurRec
, ItemType
));
1671 if (!Result
.back()) {
1676 while (Lex
.getCode() == tgtok::comma
) {
1677 Lex
.Lex(); // Eat the comma
1679 if (ArgsRec
&& !EltTy
) {
1680 ArrayRef
<Init
*> TArgs
= ArgsRec
->getTemplateArgs();
1681 if (ArgN
>= TArgs
.size()) {
1682 TokError("too many template arguments");
1686 const RecordVal
*RV
= ArgsRec
->getValue(TArgs
[ArgN
]);
1687 assert(RV
&& "Template argument record not found??");
1688 ItemType
= RV
->getType();
1691 Result
.push_back(ParseValue(CurRec
, ItemType
));
1692 if (!Result
.back()) {
1699 /// ParseDeclaration - Read a declaration, returning the name of field ID, or an
1700 /// empty string on error. This can happen in a number of different context's,
1701 /// including within a def or in the template args for a def (which which case
1702 /// CurRec will be non-null) and within the template args for a multiclass (in
1703 /// which case CurRec will be null, but CurMultiClass will be set). This can
1704 /// also happen within a def that is within a multiclass, which will set both
1705 /// CurRec and CurMultiClass.
1707 /// Declaration ::= FIELD? Type ID ('=' Value)?
1709 Init
*TGParser::ParseDeclaration(Record
*CurRec
,
1710 bool ParsingTemplateArgs
) {
1711 // Read the field prefix if present.
1712 bool HasField
= Lex
.getCode() == tgtok::Field
;
1713 if (HasField
) Lex
.Lex();
1715 RecTy
*Type
= ParseType();
1716 if (!Type
) return nullptr;
1718 if (Lex
.getCode() != tgtok::Id
) {
1719 TokError("Expected identifier in declaration");
1723 SMLoc IdLoc
= Lex
.getLoc();
1724 Init
*DeclName
= StringInit::get(Lex
.getCurStrVal());
1727 if (ParsingTemplateArgs
) {
1729 DeclName
= QualifyName(*CurRec
, CurMultiClass
, DeclName
, ":");
1731 assert(CurMultiClass
);
1733 DeclName
= QualifyName(CurMultiClass
->Rec
, CurMultiClass
, DeclName
,
1738 if (AddValue(CurRec
, IdLoc
, RecordVal(DeclName
, Type
, HasField
)))
1741 // If a value is present, parse it.
1742 if (Lex
.getCode() == tgtok::equal
) {
1744 SMLoc ValLoc
= Lex
.getLoc();
1745 Init
*Val
= ParseValue(CurRec
, Type
);
1747 SetValue(CurRec
, ValLoc
, DeclName
, None
, Val
))
1748 // Return the name, even if an error is thrown. This is so that we can
1749 // continue to make some progress, even without the value having been
1757 /// ParseForeachDeclaration - Read a foreach declaration, returning
1758 /// the name of the declared object or a NULL Init on error. Return
1759 /// the name of the parsed initializer list through ForeachListName.
1761 /// ForeachDeclaration ::= ID '=' '[' ValueList ']'
1762 /// ForeachDeclaration ::= ID '=' '{' RangeList '}'
1763 /// ForeachDeclaration ::= ID '=' RangePiece
1765 VarInit
*TGParser::ParseForeachDeclaration(ListInit
*&ForeachListValue
) {
1766 if (Lex
.getCode() != tgtok::Id
) {
1767 TokError("Expected identifier in foreach declaration");
1771 Init
*DeclName
= StringInit::get(Lex
.getCurStrVal());
1774 // If a value is present, parse it.
1775 if (Lex
.getCode() != tgtok::equal
) {
1776 TokError("Expected '=' in foreach declaration");
1779 Lex
.Lex(); // Eat the '='
1781 RecTy
*IterType
= nullptr;
1782 SmallVector
<unsigned, 16> Ranges
;
1784 switch (Lex
.getCode()) {
1785 default: TokError("Unknown token when expecting a range list"); return nullptr;
1786 case tgtok::l_square
: { // '[' ValueList ']'
1787 Init
*List
= ParseSimpleValue(nullptr, nullptr, ParseForeachMode
);
1788 ForeachListValue
= dyn_cast
<ListInit
>(List
);
1789 if (!ForeachListValue
) {
1790 TokError("Expected a Value list");
1793 RecTy
*ValueType
= ForeachListValue
->getType();
1794 ListRecTy
*ListType
= dyn_cast
<ListRecTy
>(ValueType
);
1796 TokError("Value list is not of list type");
1799 IterType
= ListType
->getElementType();
1803 case tgtok::IntVal
: { // RangePiece.
1804 if (ParseRangePiece(Ranges
))
1809 case tgtok::l_brace
: { // '{' RangeList '}'
1810 Lex
.Lex(); // eat the '{'
1811 ParseRangeList(Ranges
);
1812 if (Lex
.getCode() != tgtok::r_brace
) {
1813 TokError("expected '}' at end of bit range list");
1821 if (!Ranges
.empty()) {
1822 assert(!IterType
&& "Type already initialized?");
1823 IterType
= IntRecTy::get();
1824 std::vector
<Init
*> Values
;
1825 for (unsigned R
: Ranges
)
1826 Values
.push_back(IntInit::get(R
));
1827 ForeachListValue
= ListInit::get(Values
, IterType
);
1833 return VarInit::get(DeclName
, IterType
);
1836 /// ParseTemplateArgList - Read a template argument list, which is a non-empty
1837 /// sequence of template-declarations in <>'s. If CurRec is non-null, these are
1838 /// template args for a def, which may or may not be in a multiclass. If null,
1839 /// these are the template args for a multiclass.
1841 /// TemplateArgList ::= '<' Declaration (',' Declaration)* '>'
1843 bool TGParser::ParseTemplateArgList(Record
*CurRec
) {
1844 assert(Lex
.getCode() == tgtok::less
&& "Not a template arg list!");
1845 Lex
.Lex(); // eat the '<'
1847 Record
*TheRecToAddTo
= CurRec
? CurRec
: &CurMultiClass
->Rec
;
1849 // Read the first declaration.
1850 Init
*TemplArg
= ParseDeclaration(CurRec
, true/*templateargs*/);
1854 TheRecToAddTo
->addTemplateArg(TemplArg
);
1856 while (Lex
.getCode() == tgtok::comma
) {
1857 Lex
.Lex(); // eat the ','
1859 // Read the following declarations.
1860 TemplArg
= ParseDeclaration(CurRec
, true/*templateargs*/);
1863 TheRecToAddTo
->addTemplateArg(TemplArg
);
1866 if (Lex
.getCode() != tgtok::greater
)
1867 return TokError("expected '>' at end of template argument list");
1868 Lex
.Lex(); // eat the '>'.
1872 /// ParseBodyItem - Parse a single item at within the body of a def or class.
1874 /// BodyItem ::= Declaration ';'
1875 /// BodyItem ::= LET ID OptionalBitList '=' Value ';'
1876 bool TGParser::ParseBodyItem(Record
*CurRec
) {
1877 if (Lex
.getCode() != tgtok::Let
) {
1878 if (!ParseDeclaration(CurRec
, false))
1881 if (Lex
.getCode() != tgtok::semi
)
1882 return TokError("expected ';' after declaration");
1887 // LET ID OptionalRangeList '=' Value ';'
1888 if (Lex
.Lex() != tgtok::Id
)
1889 return TokError("expected field identifier after let");
1891 SMLoc IdLoc
= Lex
.getLoc();
1892 StringInit
*FieldName
= StringInit::get(Lex
.getCurStrVal());
1893 Lex
.Lex(); // eat the field name.
1895 SmallVector
<unsigned, 16> BitList
;
1896 if (ParseOptionalBitList(BitList
))
1898 std::reverse(BitList
.begin(), BitList
.end());
1900 if (Lex
.getCode() != tgtok::equal
)
1901 return TokError("expected '=' in let expression");
1902 Lex
.Lex(); // eat the '='.
1904 RecordVal
*Field
= CurRec
->getValue(FieldName
);
1906 return TokError("Value '" + FieldName
->getValue() + "' unknown!");
1908 RecTy
*Type
= Field
->getType();
1910 Init
*Val
= ParseValue(CurRec
, Type
);
1911 if (!Val
) return true;
1913 if (Lex
.getCode() != tgtok::semi
)
1914 return TokError("expected ';' after let expression");
1917 return SetValue(CurRec
, IdLoc
, FieldName
, BitList
, Val
);
1920 /// ParseBody - Read the body of a class or def. Return true on error, false on
1924 /// Body ::= '{' BodyList '}'
1925 /// BodyList BodyItem*
1927 bool TGParser::ParseBody(Record
*CurRec
) {
1928 // If this is a null definition, just eat the semi and return.
1929 if (Lex
.getCode() == tgtok::semi
) {
1934 if (Lex
.getCode() != tgtok::l_brace
)
1935 return TokError("Expected ';' or '{' to start body");
1939 while (Lex
.getCode() != tgtok::r_brace
)
1940 if (ParseBodyItem(CurRec
))
1948 /// \brief Apply the current let bindings to \a CurRec.
1949 /// \returns true on error, false otherwise.
1950 bool TGParser::ApplyLetStack(Record
*CurRec
) {
1951 for (SmallVectorImpl
<LetRecord
> &LetInfo
: LetStack
)
1952 for (LetRecord
&LR
: LetInfo
)
1953 if (SetValue(CurRec
, LR
.Loc
, LR
.Name
, LR
.Bits
, LR
.Value
))
1958 /// ParseObjectBody - Parse the body of a def or class. This consists of an
1959 /// optional ClassList followed by a Body. CurRec is the current def or class
1960 /// that is being parsed.
1962 /// ObjectBody ::= BaseClassList Body
1963 /// BaseClassList ::= /*empty*/
1964 /// BaseClassList ::= ':' BaseClassListNE
1965 /// BaseClassListNE ::= SubClassRef (',' SubClassRef)*
1967 bool TGParser::ParseObjectBody(Record
*CurRec
) {
1968 // If there is a baseclass list, read it.
1969 if (Lex
.getCode() == tgtok::colon
) {
1972 // Read all of the subclasses.
1973 SubClassReference SubClass
= ParseSubClassReference(CurRec
, false);
1976 if (!SubClass
.Rec
) return true;
1979 if (AddSubClass(CurRec
, SubClass
))
1982 if (Lex
.getCode() != tgtok::comma
) break;
1983 Lex
.Lex(); // eat ','.
1984 SubClass
= ParseSubClassReference(CurRec
, false);
1988 if (ApplyLetStack(CurRec
))
1991 return ParseBody(CurRec
);
1994 /// ParseDef - Parse and return a top level or multiclass def, return the record
1995 /// corresponding to it. This returns null on error.
1997 /// DefInst ::= DEF ObjectName ObjectBody
1999 bool TGParser::ParseDef(MultiClass
*CurMultiClass
) {
2000 SMLoc DefLoc
= Lex
.getLoc();
2001 assert(Lex
.getCode() == tgtok::Def
&& "Unknown tok");
2002 Lex
.Lex(); // Eat the 'def' token.
2004 // Parse ObjectName and make a record for it.
2005 std::unique_ptr
<Record
> CurRecOwner
;
2006 Init
*Name
= ParseObjectName(CurMultiClass
);
2008 CurRecOwner
= make_unique
<Record
>(Name
, DefLoc
, Records
);
2010 CurRecOwner
= llvm::make_unique
<Record
>(GetNewAnonymousName(), DefLoc
,
2011 Records
, /*IsAnonymous=*/true);
2012 Record
*CurRec
= CurRecOwner
.get(); // Keep a copy since we may release.
2014 if (!CurMultiClass
&& Loops
.empty()) {
2015 // Top-level def definition.
2017 // Ensure redefinition doesn't happen.
2018 if (Records
.getDef(CurRec
->getNameInitAsString()))
2019 return Error(DefLoc
, "def '" + CurRec
->getNameInitAsString()+
2020 "' already defined");
2021 Records
.addDef(std::move(CurRecOwner
));
2023 if (ParseObjectBody(CurRec
))
2025 } else if (CurMultiClass
) {
2026 // Parse the body before adding this prototype to the DefPrototypes vector.
2027 // That way implicit definitions will be added to the DefPrototypes vector
2028 // before this object, instantiated prior to defs derived from this object,
2029 // and this available for indirect name resolution when defs derived from
2030 // this object are instantiated.
2031 if (ParseObjectBody(CurRec
))
2034 // Otherwise, a def inside a multiclass, add it to the multiclass.
2035 for (const auto &Proto
: CurMultiClass
->DefPrototypes
)
2036 if (Proto
->getNameInit() == CurRec
->getNameInit())
2037 return Error(DefLoc
, "def '" + CurRec
->getNameInitAsString() +
2038 "' already defined in this multiclass!");
2039 CurMultiClass
->DefPrototypes
.push_back(std::move(CurRecOwner
));
2040 } else if (ParseObjectBody(CurRec
)) {
2044 if (!CurMultiClass
) // Def's in multiclasses aren't really defs.
2045 // See Record::setName(). This resolve step will see any new name
2046 // for the def that might have been created when resolving
2047 // inheritance, values and arguments above.
2048 CurRec
->resolveReferences();
2050 // If ObjectBody has template arguments, it's an error.
2051 assert(CurRec
->getTemplateArgs().empty() && "How'd this get template args?");
2053 if (CurMultiClass
) {
2054 // Copy the template arguments for the multiclass into the def.
2055 for (Init
*TArg
: CurMultiClass
->Rec
.getTemplateArgs()) {
2056 const RecordVal
*RV
= CurMultiClass
->Rec
.getValue(TArg
);
2057 assert(RV
&& "Template arg doesn't exist?");
2058 CurRec
->addValue(*RV
);
2062 if (ProcessForeachDefs(CurRec
, DefLoc
))
2063 return Error(DefLoc
, "Could not process loops for def" +
2064 CurRec
->getNameInitAsString());
2069 /// ParseForeach - Parse a for statement. Return the record corresponding
2070 /// to it. This returns true on error.
2072 /// Foreach ::= FOREACH Declaration IN '{ ObjectList '}'
2073 /// Foreach ::= FOREACH Declaration IN Object
2075 bool TGParser::ParseForeach(MultiClass
*CurMultiClass
) {
2076 assert(Lex
.getCode() == tgtok::Foreach
&& "Unknown tok");
2077 Lex
.Lex(); // Eat the 'for' token.
2079 // Make a temporary object to record items associated with the for
2081 ListInit
*ListValue
= nullptr;
2082 VarInit
*IterName
= ParseForeachDeclaration(ListValue
);
2084 return TokError("expected declaration in for");
2086 if (Lex
.getCode() != tgtok::In
)
2087 return TokError("Unknown tok");
2088 Lex
.Lex(); // Eat the in
2090 // Create a loop object and remember it.
2091 Loops
.push_back(ForeachLoop(IterName
, ListValue
));
2093 if (Lex
.getCode() != tgtok::l_brace
) {
2094 // FOREACH Declaration IN Object
2095 if (ParseObject(CurMultiClass
))
2098 SMLoc BraceLoc
= Lex
.getLoc();
2099 // Otherwise, this is a group foreach.
2100 Lex
.Lex(); // eat the '{'.
2102 // Parse the object list.
2103 if (ParseObjectList(CurMultiClass
))
2106 if (Lex
.getCode() != tgtok::r_brace
) {
2107 TokError("expected '}' at end of foreach command");
2108 return Error(BraceLoc
, "to match this '{'");
2110 Lex
.Lex(); // Eat the }
2113 // We've processed everything in this loop.
2119 /// ParseClass - Parse a tblgen class definition.
2121 /// ClassInst ::= CLASS ID TemplateArgList? ObjectBody
2123 bool TGParser::ParseClass() {
2124 assert(Lex
.getCode() == tgtok::Class
&& "Unexpected token!");
2127 if (Lex
.getCode() != tgtok::Id
)
2128 return TokError("expected class name after 'class' keyword");
2130 Record
*CurRec
= Records
.getClass(Lex
.getCurStrVal());
2132 // If the body was previously defined, this is an error.
2133 if (CurRec
->getValues().size() > 1 || // Account for NAME.
2134 !CurRec
->getSuperClasses().empty() ||
2135 !CurRec
->getTemplateArgs().empty())
2136 return TokError("Class '" + CurRec
->getNameInitAsString() +
2137 "' already defined");
2139 // If this is the first reference to this class, create and add it.
2141 llvm::make_unique
<Record
>(Lex
.getCurStrVal(), Lex
.getLoc(), Records
);
2142 CurRec
= NewRec
.get();
2143 Records
.addClass(std::move(NewRec
));
2145 Lex
.Lex(); // eat the name.
2147 // If there are template args, parse them.
2148 if (Lex
.getCode() == tgtok::less
)
2149 if (ParseTemplateArgList(CurRec
))
2152 // Finally, parse the object body.
2153 return ParseObjectBody(CurRec
);
2156 /// ParseLetList - Parse a non-empty list of assignment expressions into a list
2159 /// LetList ::= LetItem (',' LetItem)*
2160 /// LetItem ::= ID OptionalRangeList '=' Value
2162 void TGParser::ParseLetList(SmallVectorImpl
<LetRecord
> &Result
) {
2164 if (Lex
.getCode() != tgtok::Id
) {
2165 TokError("expected identifier in let definition");
2170 StringInit
*Name
= StringInit::get(Lex
.getCurStrVal());
2171 SMLoc NameLoc
= Lex
.getLoc();
2172 Lex
.Lex(); // Eat the identifier.
2174 // Check for an optional RangeList.
2175 SmallVector
<unsigned, 16> Bits
;
2176 if (ParseOptionalRangeList(Bits
)) {
2180 std::reverse(Bits
.begin(), Bits
.end());
2182 if (Lex
.getCode() != tgtok::equal
) {
2183 TokError("expected '=' in let expression");
2187 Lex
.Lex(); // eat the '='.
2189 Init
*Val
= ParseValue(nullptr);
2195 // Now that we have everything, add the record.
2196 Result
.emplace_back(Name
, Bits
, Val
, NameLoc
);
2198 if (Lex
.getCode() != tgtok::comma
)
2200 Lex
.Lex(); // eat the comma.
2204 /// ParseTopLevelLet - Parse a 'let' at top level. This can be a couple of
2205 /// different related productions. This works inside multiclasses too.
2207 /// Object ::= LET LetList IN '{' ObjectList '}'
2208 /// Object ::= LET LetList IN Object
2210 bool TGParser::ParseTopLevelLet(MultiClass
*CurMultiClass
) {
2211 assert(Lex
.getCode() == tgtok::Let
&& "Unexpected token");
2214 // Add this entry to the let stack.
2215 SmallVector
<LetRecord
, 8> LetInfo
;
2216 ParseLetList(LetInfo
);
2217 if (LetInfo
.empty()) return true;
2218 LetStack
.push_back(std::move(LetInfo
));
2220 if (Lex
.getCode() != tgtok::In
)
2221 return TokError("expected 'in' at end of top-level 'let'");
2224 // If this is a scalar let, just handle it now
2225 if (Lex
.getCode() != tgtok::l_brace
) {
2226 // LET LetList IN Object
2227 if (ParseObject(CurMultiClass
))
2229 } else { // Object ::= LETCommand '{' ObjectList '}'
2230 SMLoc BraceLoc
= Lex
.getLoc();
2231 // Otherwise, this is a group let.
2232 Lex
.Lex(); // eat the '{'.
2234 // Parse the object list.
2235 if (ParseObjectList(CurMultiClass
))
2238 if (Lex
.getCode() != tgtok::r_brace
) {
2239 TokError("expected '}' at end of top level let command");
2240 return Error(BraceLoc
, "to match this '{'");
2245 // Outside this let scope, this let block is not active.
2246 LetStack
.pop_back();
2250 /// ParseMultiClass - Parse a multiclass definition.
2252 /// MultiClassInst ::= MULTICLASS ID TemplateArgList?
2253 /// ':' BaseMultiClassList '{' MultiClassObject+ '}'
2254 /// MultiClassObject ::= DefInst
2255 /// MultiClassObject ::= MultiClassInst
2256 /// MultiClassObject ::= DefMInst
2257 /// MultiClassObject ::= LETCommand '{' ObjectList '}'
2258 /// MultiClassObject ::= LETCommand Object
2260 bool TGParser::ParseMultiClass() {
2261 assert(Lex
.getCode() == tgtok::MultiClass
&& "Unexpected token");
2262 Lex
.Lex(); // Eat the multiclass token.
2264 if (Lex
.getCode() != tgtok::Id
)
2265 return TokError("expected identifier after multiclass for name");
2266 std::string Name
= Lex
.getCurStrVal();
2269 MultiClasses
.insert(std::make_pair(Name
,
2270 llvm::make_unique
<MultiClass
>(Name
, Lex
.getLoc(),Records
)));
2273 return TokError("multiclass '" + Name
+ "' already defined");
2275 CurMultiClass
= Result
.first
->second
.get();
2276 Lex
.Lex(); // Eat the identifier.
2278 // If there are template args, parse them.
2279 if (Lex
.getCode() == tgtok::less
)
2280 if (ParseTemplateArgList(nullptr))
2283 bool inherits
= false;
2285 // If there are submulticlasses, parse them.
2286 if (Lex
.getCode() == tgtok::colon
) {
2291 // Read all of the submulticlasses.
2292 SubMultiClassReference SubMultiClass
=
2293 ParseSubMultiClassReference(CurMultiClass
);
2296 if (!SubMultiClass
.MC
) return true;
2299 if (AddSubMultiClass(CurMultiClass
, SubMultiClass
))
2302 if (Lex
.getCode() != tgtok::comma
) break;
2303 Lex
.Lex(); // eat ','.
2304 SubMultiClass
= ParseSubMultiClassReference(CurMultiClass
);
2308 if (Lex
.getCode() != tgtok::l_brace
) {
2310 return TokError("expected '{' in multiclass definition");
2311 if (Lex
.getCode() != tgtok::semi
)
2312 return TokError("expected ';' in multiclass definition");
2313 Lex
.Lex(); // eat the ';'.
2315 if (Lex
.Lex() == tgtok::r_brace
) // eat the '{'.
2316 return TokError("multiclass must contain at least one def");
2318 while (Lex
.getCode() != tgtok::r_brace
) {
2319 switch (Lex
.getCode()) {
2321 return TokError("expected 'let', 'def' or 'defm' in multiclass body");
2325 case tgtok::Foreach
:
2326 if (ParseObject(CurMultiClass
))
2331 Lex
.Lex(); // eat the '}'.
2334 CurMultiClass
= nullptr;
2338 Record
*TGParser::InstantiateMulticlassDef(MultiClass
&MC
, Record
*DefProto
,
2340 SMRange DefmPrefixRange
,
2341 ArrayRef
<Init
*> TArgs
,
2342 ArrayRef
<Init
*> TemplateVals
) {
2343 // We need to preserve DefProto so it can be reused for later
2344 // instantiations, so create a new Record to inherit from it.
2346 // Add in the defm name. If the defm prefix is empty, give each
2347 // instantiated def a unique name. Otherwise, if "#NAME#" exists in the
2348 // name, substitute the prefix for #NAME#. Otherwise, use the defm name
2351 bool IsAnonymous
= false;
2353 DefmPrefix
= GetNewAnonymousName();
2357 Init
*DefName
= DefProto
->getNameInit();
2358 StringInit
*DefNameString
= dyn_cast
<StringInit
>(DefName
);
2360 if (DefNameString
) {
2361 // We have a fully expanded string so there are no operators to
2362 // resolve. We should concatenate the given prefix and name.
2364 BinOpInit::get(BinOpInit::STRCONCAT
,
2365 UnOpInit::get(UnOpInit::CAST
, DefmPrefix
,
2366 StringRecTy::get())->Fold(DefProto
, &MC
),
2367 DefName
, StringRecTy::get())->Fold(DefProto
, &MC
);
2370 // Make a trail of SMLocs from the multiclass instantiations.
2371 SmallVector
<SMLoc
, 4> Locs(1, DefmPrefixRange
.Start
);
2372 Locs
.append(DefProto
->getLoc().begin(), DefProto
->getLoc().end());
2373 auto CurRec
= make_unique
<Record
>(DefName
, Locs
, Records
, IsAnonymous
);
2375 SubClassReference Ref
;
2376 Ref
.RefRange
= DefmPrefixRange
;
2378 AddSubClass(CurRec
.get(), Ref
);
2380 // Set the value for NAME. We don't resolve references to it 'til later,
2381 // though, so that uses in nested multiclass names don't get
2383 if (SetValue(CurRec
.get(), Ref
.RefRange
.Start
, StringInit::get("NAME"), None
,
2384 DefmPrefix
, /*AllowSelfAssignment*/true)) {
2385 Error(DefmPrefixRange
.Start
, "Could not resolve " +
2386 CurRec
->getNameInitAsString() + ":NAME to '" +
2387 DefmPrefix
->getAsUnquotedString() + "'");
2391 // If the DefNameString didn't resolve, we probably have a reference to
2392 // NAME and need to replace it. We need to do at least this much greedily,
2393 // otherwise nested multiclasses will end up with incorrect NAME expansions.
2394 if (!DefNameString
) {
2395 RecordVal
*DefNameRV
= CurRec
->getValue("NAME");
2396 CurRec
->resolveReferencesTo(DefNameRV
);
2399 if (!CurMultiClass
) {
2400 // Now that we're at the top level, resolve all NAME references
2401 // in the resultant defs that weren't in the def names themselves.
2402 RecordVal
*DefNameRV
= CurRec
->getValue("NAME");
2403 CurRec
->resolveReferencesTo(DefNameRV
);
2405 // Check if the name is a complex pattern.
2406 // If so, resolve it.
2407 DefName
= CurRec
->getNameInit();
2408 DefNameString
= dyn_cast
<StringInit
>(DefName
);
2410 // OK the pattern is more complex than simply using NAME.
2411 // Let's use the heavy weaponery.
2412 if (!DefNameString
) {
2413 ResolveMulticlassDefArgs(MC
, CurRec
.get(), DefmPrefixRange
.Start
,
2414 Lex
.getLoc(), TArgs
, TemplateVals
,
2415 false/*Delete args*/);
2416 DefName
= CurRec
->getNameInit();
2417 DefNameString
= dyn_cast
<StringInit
>(DefName
);
2420 DefName
= DefName
->convertInitializerTo(StringRecTy::get());
2422 // We ran out of options here...
2423 DefNameString
= dyn_cast
<StringInit
>(DefName
);
2424 if (!DefNameString
) {
2425 PrintFatalError(CurRec
->getLoc()[CurRec
->getLoc().size() - 1],
2426 DefName
->getAsUnquotedString() + " is not a string.");
2430 CurRec
->setName(DefName
);
2433 // Now that NAME references are resolved and we're at the top level of
2434 // any multiclass expansions, add the record to the RecordKeeper. If we are
2435 // currently in a multiclass, it means this defm appears inside a
2436 // multiclass and its name won't be fully resolvable until we see
2437 // the top-level defm. Therefore, we don't add this to the
2438 // RecordKeeper at this point. If we did we could get duplicate
2439 // defs as more than one probably refers to NAME or some other
2440 // common internal placeholder.
2442 // Ensure redefinition doesn't happen.
2443 if (Records
.getDef(CurRec
->getNameInitAsString())) {
2444 Error(DefmPrefixRange
.Start
, "def '" + CurRec
->getNameInitAsString() +
2445 "' already defined, instantiating defm with subdef '" +
2446 DefProto
->getNameInitAsString() + "'");
2450 Record
*CurRecSave
= CurRec
.get(); // Keep a copy before we release.
2451 Records
.addDef(std::move(CurRec
));
2455 // FIXME This is bad but the ownership transfer to caller is pretty messy.
2456 // The unique_ptr in this function at least protects the exits above.
2457 return CurRec
.release();
2460 bool TGParser::ResolveMulticlassDefArgs(MultiClass
&MC
, Record
*CurRec
,
2461 SMLoc DefmPrefixLoc
, SMLoc SubClassLoc
,
2462 ArrayRef
<Init
*> TArgs
,
2463 ArrayRef
<Init
*> TemplateVals
,
2465 // Loop over all of the template arguments, setting them to the specified
2466 // value or leaving them as the default if necessary.
2467 for (unsigned i
= 0, e
= TArgs
.size(); i
!= e
; ++i
) {
2468 // Check if a value is specified for this temp-arg.
2469 if (i
< TemplateVals
.size()) {
2471 if (SetValue(CurRec
, DefmPrefixLoc
, TArgs
[i
], None
, TemplateVals
[i
]))
2475 CurRec
->resolveReferencesTo(CurRec
->getValue(TArgs
[i
]));
2479 CurRec
->removeValue(TArgs
[i
]);
2481 } else if (!CurRec
->getValue(TArgs
[i
])->getValue()->isComplete()) {
2482 return Error(SubClassLoc
, "value not specified for template argument #" +
2483 Twine(i
) + " (" + TArgs
[i
]->getAsUnquotedString() +
2484 ") of multiclassclass '" + MC
.Rec
.getNameInitAsString() +
2491 bool TGParser::ResolveMulticlassDef(MultiClass
&MC
,
2494 SMLoc DefmPrefixLoc
) {
2495 // If the mdef is inside a 'let' expression, add to each def.
2496 if (ApplyLetStack(CurRec
))
2497 return Error(DefmPrefixLoc
, "when instantiating this defm");
2499 // Don't create a top level definition for defm inside multiclasses,
2500 // instead, only update the prototypes and bind the template args
2501 // with the new created definition.
2504 for (const auto &Proto
: CurMultiClass
->DefPrototypes
)
2505 if (Proto
->getNameInit() == CurRec
->getNameInit())
2506 return Error(DefmPrefixLoc
, "defm '" + CurRec
->getNameInitAsString() +
2507 "' already defined in this multiclass!");
2508 CurMultiClass
->DefPrototypes
.push_back(std::unique_ptr
<Record
>(CurRec
));
2510 // Copy the template arguments for the multiclass into the new def.
2511 for (Init
* TA
: CurMultiClass
->Rec
.getTemplateArgs()) {
2512 const RecordVal
*RV
= CurMultiClass
->Rec
.getValue(TA
);
2513 assert(RV
&& "Template arg doesn't exist?");
2514 CurRec
->addValue(*RV
);
2520 /// ParseDefm - Parse the instantiation of a multiclass.
2522 /// DefMInst ::= DEFM ID ':' DefmSubClassRef ';'
2524 bool TGParser::ParseDefm(MultiClass
*CurMultiClass
) {
2525 assert(Lex
.getCode() == tgtok::Defm
&& "Unexpected token!");
2526 SMLoc DefmLoc
= Lex
.getLoc();
2527 Init
*DefmPrefix
= nullptr;
2529 if (Lex
.Lex() == tgtok::Id
) { // eat the defm.
2530 DefmPrefix
= ParseObjectName(CurMultiClass
);
2533 SMLoc DefmPrefixEndLoc
= Lex
.getLoc();
2534 if (Lex
.getCode() != tgtok::colon
)
2535 return TokError("expected ':' after defm identifier");
2537 // Keep track of the new generated record definitions.
2538 std::vector
<Record
*> NewRecDefs
;
2540 // This record also inherits from a regular class (non-multiclass)?
2541 bool InheritFromClass
= false;
2546 SMLoc SubClassLoc
= Lex
.getLoc();
2547 SubClassReference Ref
= ParseSubClassReference(nullptr, true);
2550 if (!Ref
.Rec
) return true;
2552 // To instantiate a multiclass, we need to first get the multiclass, then
2553 // instantiate each def contained in the multiclass with the SubClassRef
2554 // template parameters.
2555 MultiClass
*MC
= MultiClasses
[Ref
.Rec
->getName()].get();
2556 assert(MC
&& "Didn't lookup multiclass correctly?");
2557 ArrayRef
<Init
*> TemplateVals
= Ref
.TemplateArgs
;
2559 // Verify that the correct number of template arguments were specified.
2560 ArrayRef
<Init
*> TArgs
= MC
->Rec
.getTemplateArgs();
2561 if (TArgs
.size() < TemplateVals
.size())
2562 return Error(SubClassLoc
,
2563 "more template args specified than multiclass expects");
2565 // Loop over all the def's in the multiclass, instantiating each one.
2566 for (const std::unique_ptr
<Record
> &DefProto
: MC
->DefPrototypes
) {
2567 // The record name construction goes as follow:
2568 // - If the def name is a string, prepend the prefix.
2569 // - If the def name is a more complex pattern, use that pattern.
2570 // As a result, the record is instantiated before resolving
2571 // arguments, as it would make its name a string.
2572 Record
*CurRec
= InstantiateMulticlassDef(*MC
, DefProto
.get(), DefmPrefix
,
2575 TArgs
, TemplateVals
);
2579 // Now that the record is instantiated, we can resolve arguments.
2580 if (ResolveMulticlassDefArgs(*MC
, CurRec
, DefmLoc
, SubClassLoc
,
2581 TArgs
, TemplateVals
, true/*Delete args*/))
2582 return Error(SubClassLoc
, "could not instantiate def");
2584 if (ResolveMulticlassDef(*MC
, CurRec
, DefProto
.get(), DefmLoc
))
2585 return Error(SubClassLoc
, "could not instantiate def");
2587 // Defs that can be used by other definitions should be fully resolved
2589 if (DefProto
->isResolveFirst() && !CurMultiClass
) {
2590 CurRec
->resolveReferences();
2591 CurRec
->setResolveFirst(false);
2593 NewRecDefs
.push_back(CurRec
);
2597 if (Lex
.getCode() != tgtok::comma
) break;
2598 Lex
.Lex(); // eat ','.
2600 if (Lex
.getCode() != tgtok::Id
)
2601 return TokError("expected identifier");
2603 SubClassLoc
= Lex
.getLoc();
2605 // A defm can inherit from regular classes (non-multiclass) as
2606 // long as they come in the end of the inheritance list.
2607 InheritFromClass
= (Records
.getClass(Lex
.getCurStrVal()) != nullptr);
2609 if (InheritFromClass
)
2612 Ref
= ParseSubClassReference(nullptr, true);
2615 if (InheritFromClass
) {
2616 // Process all the classes to inherit as if they were part of a
2617 // regular 'def' and inherit all record values.
2618 SubClassReference SubClass
= ParseSubClassReference(nullptr, false);
2621 if (!SubClass
.Rec
) return true;
2623 // Get the expanded definition prototypes and teach them about
2624 // the record values the current class to inherit has
2625 for (Record
*CurRec
: NewRecDefs
) {
2627 if (AddSubClass(CurRec
, SubClass
))
2630 if (ApplyLetStack(CurRec
))
2634 if (Lex
.getCode() != tgtok::comma
) break;
2635 Lex
.Lex(); // eat ','.
2636 SubClass
= ParseSubClassReference(nullptr, false);
2641 for (Record
*CurRec
: NewRecDefs
)
2642 // See Record::setName(). This resolve step will see any new
2643 // name for the def that might have been created when resolving
2644 // inheritance, values and arguments above.
2645 CurRec
->resolveReferences();
2647 if (Lex
.getCode() != tgtok::semi
)
2648 return TokError("expected ';' at end of defm");
2655 /// Object ::= ClassInst
2656 /// Object ::= DefInst
2657 /// Object ::= MultiClassInst
2658 /// Object ::= DefMInst
2659 /// Object ::= LETCommand '{' ObjectList '}'
2660 /// Object ::= LETCommand Object
2661 bool TGParser::ParseObject(MultiClass
*MC
) {
2662 switch (Lex
.getCode()) {
2664 return TokError("Expected class, def, defm, multiclass or let definition");
2665 case tgtok::Let
: return ParseTopLevelLet(MC
);
2666 case tgtok::Def
: return ParseDef(MC
);
2667 case tgtok::Foreach
: return ParseForeach(MC
);
2668 case tgtok::Defm
: return ParseDefm(MC
);
2669 case tgtok::Class
: return ParseClass();
2670 case tgtok::MultiClass
: return ParseMultiClass();
2675 /// ObjectList :== Object*
2676 bool TGParser::ParseObjectList(MultiClass
*MC
) {
2677 while (isObjectStart(Lex
.getCode())) {
2678 if (ParseObject(MC
))
2684 bool TGParser::ParseFile() {
2685 Lex
.Lex(); // Prime the lexer.
2686 if (ParseObjectList()) return true;
2688 // If we have unread input at the end of the file, report it.
2689 if (Lex
.getCode() == tgtok::Eof
)
2692 return TokError("Unexpected input at top level");