aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/TableGen/DAGISelEmitter.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp
index 06e0d5b713..5d1689c3fd 100644
--- a/utils/TableGen/DAGISelEmitter.cpp
+++ b/utils/TableGen/DAGISelEmitter.cpp
@@ -830,6 +830,15 @@ TreePatternNode *TreePattern::ParseTreePattern(DagInit *Dag) {
New = new TreePatternNode(II);
if (!Dag->getArgName(0).empty())
error("Constant int argument should not have a name!");
+ } else if (BitsInit *BI = dynamic_cast<BitsInit*>(Arg)) {
+ // Turn this into an IntInit.
+ Init *II = BI->convertInitializerTo(new IntRecTy());
+ if (II == 0 || !dynamic_cast<IntInit*>(II))
+ error("Bits value must be constants!");
+
+ New = new TreePatternNode(dynamic_cast<IntInit*>(II));
+ if (!Dag->getArgName(0).empty())
+ error("Constant int argument should not have a name!");
} else {
Arg->dump();
error("Unknown leaf value for tree pattern!");
@@ -888,6 +897,16 @@ TreePatternNode *TreePattern::ParseTreePattern(DagInit *Dag) {
if (!Dag->getArgName(i).empty())
error("Constant int argument should not have a name!");
Children.push_back(Node);
+ } else if (BitsInit *BI = dynamic_cast<BitsInit*>(Arg)) {
+ // Turn this into an IntInit.
+ Init *II = BI->convertInitializerTo(new IntRecTy());
+ if (II == 0 || !dynamic_cast<IntInit*>(II))
+ error("Bits value must be constants!");
+
+ TreePatternNode *Node = new TreePatternNode(dynamic_cast<IntInit*>(II));
+ if (!Dag->getArgName(i).empty())
+ error("Constant int argument should not have a name!");
+ Children.push_back(Node);
} else {
std::cerr << '"';
Arg->dump();