mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-29 16:12:44 +00:00
Add NAME Member
Add a Value named "NAME" to each Record. This will be set to the def or defm name when instantiating multiclasses. This will replace the #NAME# processing hack once paste functionality is in place. llvm-svn: 142518
This commit is contained in:
parent
947cd6bbaf
commit
09fc0034ab
@ -1473,6 +1473,13 @@ public:
|
||||
void addValue(const RecordVal &RV) {
|
||||
assert(getValue(RV.getName()) == 0 && "Value already added!");
|
||||
Values.push_back(RV);
|
||||
if (Values.size() > 1)
|
||||
// Keep NAME at the end of the list. It makes record dumps a
|
||||
// bit prettier and allows TableGen tests to be written more
|
||||
// naturally. Tests can use CHECK-NEXT to look for Record
|
||||
// fields they expect to see after a def. They can't do that if
|
||||
// NAME is the first Record field.
|
||||
std::swap(Values[Values.size() - 2], Values[Values.size() - 1]);
|
||||
}
|
||||
|
||||
void removeValue(Init *Name) {
|
||||
|
@ -1686,6 +1686,11 @@ unsigned Record::LastID = 0;
|
||||
|
||||
void Record::init() {
|
||||
checkName();
|
||||
|
||||
// Every record potentially has a def at the top. This value is
|
||||
// replaced with the top-level def name at instantiation time.
|
||||
RecordVal DN("NAME", StringRecTy::get(), 0);
|
||||
addValue(DN);
|
||||
}
|
||||
|
||||
void Record::checkName() {
|
||||
|
@ -1744,7 +1744,7 @@ bool TGParser::ParseClass() {
|
||||
Record *CurRec = Records.getClass(Lex.getCurStrVal());
|
||||
if (CurRec) {
|
||||
// If the body was previously defined, this is an error.
|
||||
if (!CurRec->getValues().empty() ||
|
||||
if (CurRec->getValues().size() > 1 || // Account for NAME.
|
||||
!CurRec->getSuperClasses().empty() ||
|
||||
!CurRec->getTemplateArgs().empty())
|
||||
return TokError("Class '" + CurRec->getNameInitAsString()
|
||||
|
@ -60,6 +60,7 @@ def VAL3 : bar<foo1, somedef1>;
|
||||
// CHECK-NEXT: dag Dag1 = (somedef1 1);
|
||||
// CHECK-NEXT: dag Dag2 = (somedef1 2);
|
||||
// CHECK-NEXT: dag Dag3 = (somedef1 2);
|
||||
// CHECK-NEXT: NAME = ?
|
||||
// CHECK-NEXT: }
|
||||
|
||||
|
||||
@ -68,4 +69,5 @@ def VAL4 : bar<foo2, somedef2>;
|
||||
// CHECK-NEXT: dag Dag1 = (somedef1 1);
|
||||
// CHECK-NEXT: dag Dag2 = (somedef2 2);
|
||||
// CHECK-NEXT: dag Dag3 = (somedef2 2);
|
||||
// CHECK-NEXT: NAME = ?
|
||||
// CHECK-NEXT: }
|
||||
|
@ -1,6 +1,6 @@
|
||||
// RUN: llvm-tblgen %s | grep {Jr} | count 2
|
||||
// RUN: llvm-tblgen %s | grep {Sr} | count 2
|
||||
// RUN: llvm-tblgen %s | grep {NAME} | count 1
|
||||
// RUN: llvm-tblgen %s | grep {"NAME"} | count 1
|
||||
// XFAIL: vg_leak
|
||||
|
||||
// Variables for foreach
|
||||
|
Loading…
x
Reference in New Issue
Block a user