summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-03-31 05:25:56 +0000
committerChris Lattner <sabre@nondot.org>2006-03-31 05:25:56 +0000
commit6b7ccbe4d8c20c66fc5680d40d8a5efdbd0b9040 (patch)
treeced12f0b39279e4216adfe30263eb119b253fd44 /llvm/utils/TableGen
parentd7495ae7e9a5d266abd360c4aa5a2d5d2c90cf9d (diff)
downloadbcm5719-llvm-6b7ccbe4d8c20c66fc5680d40d8a5efdbd0b9040.tar.gz
bcm5719-llvm-6b7ccbe4d8c20c66fc5680d40d8a5efdbd0b9040.zip
Allow bits init values to be used in patterns, turn them into ints.
llvm-svn: 27286
Diffstat (limited to 'llvm/utils/TableGen')
-rw-r--r--llvm/utils/TableGen/DAGISelEmitter.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/DAGISelEmitter.cpp b/llvm/utils/TableGen/DAGISelEmitter.cpp
index 06e0d5b7135..5d1689c3fdd 100644
--- a/llvm/utils/TableGen/DAGISelEmitter.cpp
+++ b/llvm/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();
OpenPOWER on IntegriCloud