diff options
author | Chris Lattner <sabre@nondot.org> | 2006-03-28 00:41:33 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-03-28 00:41:33 +0000 |
commit | b026e70462d3e59f4a7b8029669d804d3e0387ed (patch) | |
tree | d4f6e795ca6535ceb083f91491b1739d8fd2294e /utils/TableGen | |
parent | 48b61a729df6576c8833a83893d4086bddff69a5 (diff) | |
download | llvm-b026e70462d3e59f4a7b8029669d804d3e0387ed.tar.gz llvm-b026e70462d3e59f4a7b8029669d804d3e0387ed.tar.bz2 llvm-b026e70462d3e59f4a7b8029669d804d3e0387ed.tar.xz |
Tblgen doesn't like multiple SDNode<> definitions that map to the sameenum value. Split them into separate enums.
Also, don't emit dynamic checks when we can compute them statically
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27202 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen')
-rw-r--r-- | utils/TableGen/DAGISelEmitter.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 7c911bd5be..38bc05c965 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -3115,19 +3115,21 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { // If the last pattern has predicates (which could fail) emit code to catch // the case where nothing handles a pattern. - if (mightNotMatch) - OS << " std::cerr << \"Cannot yet select: \";\n" - << " if (N.getOpcode() != ISD::INTRINSIC) {\n" - << " N.Val->dump(CurDAG);\n" - << " } else {\n" - << " unsigned iid = cast<ConstantSDNode>(N.getOperand(" - "N.getOperand(0).getValueType() == MVT::Other))->getValue();\n" - << " std::cerr << \"intrinsic %\"<< " - "Intrinsic::getName((Intrinsic::ID)iid);\n" - << " }\n" - << " std::cerr << '\\n';\n" + if (mightNotMatch) { + OS << " std::cerr << \"Cannot yet select: \";\n"; + if (OpcodeInfo.getEnumName() != "ISD::INTRINSIC_W_CHAIN" && + OpcodeInfo.getEnumName() != "ISD::INTRINSIC_WO_CHAIN" && + OpcodeInfo.getEnumName() != "ISD::INTRINSIC_VOID") { + OS << " N.Val->dump(CurDAG);\n"; + } else { + OS << " unsigned iid = cast<ConstantSDNode>(N.getOperand(" + "N.getOperand(0).getValueType() == MVT::Other))->getValue();\n" + << " std::cerr << \"intrinsic %\"<< " + "Intrinsic::getName((Intrinsic::ID)iid);\n"; + } + OS << " std::cerr << '\\n';\n" << " abort();\n"; - + } OS << "}\n\n"; } @@ -3285,7 +3287,9 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { OS << " } // end of big switch.\n\n" << " std::cerr << \"Cannot yet select: \";\n" - << " if (N.getOpcode() != ISD::INTRINSIC) {\n" + << " if (N.getOpcode() != ISD::INTRINSIC_W_CHAIN &&\n" + << " N.getOpcode() != ISD::INTRINSIC_WO_CHAIN &&\n" + << " N.getOpcode() != ISD::INTRINSIC_VOID) {\n" << " N.Val->dump(CurDAG);\n" << " } else {\n" << " unsigned iid = cast<ConstantSDNode>(N.getOperand(" |