summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-06-16 23:24:12 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-06-16 23:24:12 +0000
commite87de41189b1591afd88e4dc12eeb17e06b77d3e (patch)
tree31621b77739ec01945f812c060d5e52df8ba5bee /utils
parentd0e8469ba65c54b593df15b7249d7fe12097c4cf (diff)
downloadllvm-e87de41189b1591afd88e4dc12eeb17e06b77d3e.tar.gz
llvm-e87de41189b1591afd88e4dc12eeb17e06b77d3e.tar.bz2
llvm-e87de41189b1591afd88e4dc12eeb17e06b77d3e.tar.xz
let the '!eq' expression support 'int' and 'bit' types
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106171 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r--utils/TableGen/Record.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp
index 4f9f6045c1..d9c5dd30e1 100644
--- a/utils/TableGen/Record.cpp
+++ b/utils/TableGen/Record.cpp
@@ -721,9 +721,20 @@ Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
break;
}
case EQ: {
- // Make sure we've resolved
+ // try to fold eq comparison for 'bit' and 'int', otherwise fallback
+ // to string objects.
+ IntInit* L =
+ dynamic_cast<IntInit*>(LHS->convertInitializerTo(new IntRecTy()));
+ IntInit* R =
+ dynamic_cast<IntInit*>(RHS->convertInitializerTo(new IntRecTy()));
+
+ if (L && R)
+ return new IntInit(L->getValue() == R->getValue());
+
StringInit *LHSs = dynamic_cast<StringInit*>(LHS);
StringInit *RHSs = dynamic_cast<StringInit*>(RHS);
+
+ // Make sure we've resolved
if (LHSs && RHSs)
return new IntInit(LHSs->getValue() == RHSs->getValue());