diff options
| author | Chris Lattner <sabre@nondot.org> | 2003-08-11 20:25:52 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2003-08-11 20:25:52 +0000 |
| commit | bb9dfb078247beb379dbe754b28f242dd18048a1 (patch) | |
| tree | 42e819228bcaec9c4d7a3e84257ed4bf855c6539 | |
| parent | 1a2e6f79172a4d81a79929abb7e1c1989ff27d41 (diff) | |
| download | bcm5719-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.cpp | 17 | ||||
| -rw-r--r-- | llvm/support/tools/TableGen/InstrSelectorEmitter.h | 1 |
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 |

