summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-08-11 20:25:52 +0000
committerChris Lattner <sabre@nondot.org>2003-08-11 20:25:52 +0000
commitbb9dfb078247beb379dbe754b28f242dd18048a1 (patch)
tree42e819228bcaec9c4d7a3e84257ed4bf855c6539
parent1a2e6f79172a4d81a79929abb7e1c1989ff27d41 (diff)
downloadbcm5719-llvm-bb9dfb078247beb379dbe754b28f242dd18048a1.tar.gz
bcm5719-llvm-bb9dfb078247beb379dbe754b28f242dd18048a1.zip
Add support for the Arg1 argument type
llvm-svn: 7747
-rw-r--r--llvm/support/tools/TableGen/InstrSelectorEmitter.cpp17
-rw-r--r--llvm/support/tools/TableGen/InstrSelectorEmitter.h1
2 files changed, 15 insertions, 3 deletions
diff --git a/llvm/support/tools/TableGen/InstrSelectorEmitter.cpp b/llvm/support/tools/TableGen/InstrSelectorEmitter.cpp
index 229c24bca4d..153f27e512f 100644
--- a/llvm/support/tools/TableGen/InstrSelectorEmitter.cpp
+++ b/llvm/support/tools/TableGen/InstrSelectorEmitter.cpp
@@ -17,6 +17,7 @@ NodeType::ArgResultTypes NodeType::Translate(Record *R) {
if (Name == "DNVT_void") return Void;
if (Name == "DNVT_val" ) return Val;
if (Name == "DNVT_arg0") return Arg0;
+ if (Name == "DNVT_arg1") return Arg1;
if (Name == "DNVT_ptr" ) return Ptr;
throw "Unknown DagNodeValType '" + Name + "'!";
}
@@ -277,6 +278,10 @@ bool Pattern::InferTypes(TreePatternNode *N, bool &MadeChange) {
MadeChange |= Child->updateNodeType(N->getChild(0)->getType(),
TheRecord->getName());
break;
+ case NodeType::Arg1:
+ MadeChange |= Child->updateNodeType(N->getChild(1)->getType(),
+ TheRecord->getName());
+ break;
case NodeType::Val:
if (Child->getType() == MVT::isVoid)
error("Inferred a void node in an illegal place!");
@@ -298,7 +303,10 @@ bool Pattern::InferTypes(TreePatternNode *N, bool &MadeChange) {
MadeChange |= N->updateNodeType(N->getChild(0)->getType(),
TheRecord->getName());
break;
-
+ case NodeType::Arg1:
+ MadeChange |= N->updateNodeType(N->getChild(1)->getType(),
+ TheRecord->getName());
+ break;
case NodeType::Ptr:
MadeChange |= N->updateNodeType(ISE.getTarget().getPointerType(),
TheRecord->getName());
@@ -426,12 +434,15 @@ void InstrSelectorEmitter::ReadNodeTypes() {
if (a == 0 && ArgTypes.back() == NodeType::Arg0)
throw "In node " + Node->getName() + ", arg 0 cannot have type 'arg0'!";
+ if (a == 1 && ArgTypes.back() == NodeType::Arg1)
+ throw "In node " + Node->getName() + ", arg 1 cannot have type 'arg1'!";
if (ArgTypes.back() == NodeType::Void)
throw "In node " + Node->getName() + ", args cannot be void type!";
}
- if (RetTy == NodeType::Arg0 && Args->getSize() == 0)
+ if ((RetTy == NodeType::Arg0 && Args->getSize() == 0) ||
+ (RetTy == NodeType::Arg1 && Args->getSize() < 2))
throw "In node " + Node->getName() +
- ", invalid return type for nullary node!";
+ ", invalid return type for node with this many operands!";
// Add the node type mapping now...
NodeTypes[Node] = NodeType(RetTy, ArgTypes);
diff --git a/llvm/support/tools/TableGen/InstrSelectorEmitter.h b/llvm/support/tools/TableGen/InstrSelectorEmitter.h
index 20e800bf739..a1b1b6e7816 100644
--- a/llvm/support/tools/TableGen/InstrSelectorEmitter.h
+++ b/llvm/support/tools/TableGen/InstrSelectorEmitter.h
@@ -23,6 +23,7 @@ struct NodeType {
// Both argument and return types...
Val, // A non-void type
Arg0, // Value matches the type of Arg0
+ Arg1, // Value matches the type of Arg1
Ptr, // Tree node is the type of the target pointer
// Return types
OpenPOWER on IntegriCloud