summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/TableGen/defmclass.td2
-rw-r--r--utils/TableGen/TGParser.cpp8
2 files changed, 6 insertions, 4 deletions
diff --git a/test/TableGen/defmclass.td b/test/TableGen/defmclass.td
index ef8e8f794b..55482da4d0 100644
--- a/test/TableGen/defmclass.td
+++ b/test/TableGen/defmclass.td
@@ -16,6 +16,7 @@ class BaseI {
class I<bits<4> op> : BaseI {
bits<4> opcode = op;
int val = !if(!eq(Prefix, xd.Prefix), 7, 21);
+ int check = !if(hasVEX_4VPrefix, 0, 10);
}
multiclass R {
@@ -33,4 +34,5 @@ multiclass Y {
defm SD : R, M, XS;
}
+// CHECK: int check = 0;
defm Instr : Y, VEX;
diff --git a/utils/TableGen/TGParser.cpp b/utils/TableGen/TGParser.cpp
index 3770848702..f81aabe79b 100644
--- a/utils/TableGen/TGParser.cpp
+++ b/utils/TableGen/TGParser.cpp
@@ -2020,7 +2020,6 @@ bool TGParser::ParseDefm(MultiClass *CurMultiClass) {
}
} else {
Records.addDef(CurRec);
- CurRec->resolveReferences();
}
NewRecDefs.push_back(CurRec);
@@ -2064,9 +2063,6 @@ bool TGParser::ParseDefm(MultiClass *CurMultiClass) {
if (SetValue(CurRec, LetStack[i][j].Loc, LetStack[i][j].Name,
LetStack[i][j].Bits, LetStack[i][j].Value))
return true;
-
- if (!CurMultiClass)
- CurRec->resolveReferences();
}
if (Lex.getCode() != tgtok::comma) break;
@@ -2075,6 +2071,10 @@ bool TGParser::ParseDefm(MultiClass *CurMultiClass) {
}
}
+ if (!CurMultiClass)
+ for (unsigned i = 0, e = NewRecDefs.size(); i != e; ++i)
+ NewRecDefs[i]->resolveReferences();
+
if (Lex.getCode() != tgtok::semi)
return TokError("expected ';' at end of defm");
Lex.Lex();