diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2006-01-24 20:46:50 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2006-01-24 20:46:50 +0000 |
| commit | c5c228fa5967f986b6010b37ea0978b8e18427b3 (patch) | |
| tree | a710477076ba36d50477984ea425f3fc718dbef4 | |
| parent | 295e19655865a195ccaa337bacfb262465bc40f4 (diff) | |
| download | bcm5719-llvm-c5c228fa5967f986b6010b37ea0978b8e18427b3.tar.gz bcm5719-llvm-c5c228fa5967f986b6010b37ea0978b8e18427b3.zip | |
Fix an optional in flag bug.
llvm-svn: 25590
| -rw-r--r-- | llvm/utils/TableGen/DAGISelEmitter.cpp | 83 |
1 files changed, 64 insertions, 19 deletions
diff --git a/llvm/utils/TableGen/DAGISelEmitter.cpp b/llvm/utils/TableGen/DAGISelEmitter.cpp index 5e63042c90f..e76dd8fd554 100644 --- a/llvm/utils/TableGen/DAGISelEmitter.cpp +++ b/llvm/utils/TableGen/DAGISelEmitter.cpp @@ -2206,26 +2206,71 @@ public: << NumResults << ");\n"; } } else if (HasChain || HasOutFlag) { - OS << " SDOperand Result = CurDAG->getTargetNode(" - << II.Namespace << "::" << II.TheDef->getName(); - - // Output order: results, chain, flags - // Result types. - if (NumResults > 0) { - if (N->getTypeNum(0) != MVT::isVoid) - OS << ", MVT::" << getEnumName(N->getTypeNum(0)); + if (HasOptInFlag) { + OS << " SDOperand Result = SDOperand(0, 0);\n"; + unsigned FlagNo = (unsigned) NodeHasChain + Pattern->getNumChildren(); + OS << " if (N.getNumOperands() == " << FlagNo+1 << ")\n"; + OS << " Result = CurDAG->getTargetNode(" + << II.Namespace << "::" << II.TheDef->getName(); + + // Output order: results, chain, flags + // Result types. + if (NumResults > 0) { + if (N->getTypeNum(0) != MVT::isVoid) + OS << ", MVT::" << getEnumName(N->getTypeNum(0)); + } + if (HasChain) + OS << ", MVT::Other"; + if (HasOutFlag) + OS << ", MVT::Flag"; + + // Inputs. + for (unsigned i = 0, e = Ops.size(); i != e; ++i) + OS << ", Tmp" << Ops[i]; + if (HasChain) OS << ", Chain"; + OS << ", InFlag);\n"; + + OS << " else\n"; + OS << " Result = CurDAG->getTargetNode(" + << II.Namespace << "::" << II.TheDef->getName(); + + // Output order: results, chain, flags + // Result types. + if (NumResults > 0) { + if (N->getTypeNum(0) != MVT::isVoid) + OS << ", MVT::" << getEnumName(N->getTypeNum(0)); + } + if (HasChain) + OS << ", MVT::Other"; + if (HasOutFlag) + OS << ", MVT::Flag"; + + // Inputs. + for (unsigned i = 0, e = Ops.size(); i != e; ++i) + OS << ", Tmp" << Ops[i]; + if (HasChain) OS << ", Chain);\n"; + } else { + OS << " SDOperand Result = CurDAG->getTargetNode(" + << II.Namespace << "::" << II.TheDef->getName(); + + // Output order: results, chain, flags + // Result types. + if (NumResults > 0) { + if (N->getTypeNum(0) != MVT::isVoid) + OS << ", MVT::" << getEnumName(N->getTypeNum(0)); + } + if (HasChain) + OS << ", MVT::Other"; + if (HasOutFlag) + OS << ", MVT::Flag"; + + // Inputs. + for (unsigned i = 0, e = Ops.size(); i != e; ++i) + OS << ", Tmp" << Ops[i]; + if (HasChain) OS << ", Chain"; + if (HasInFlag || HasImpInputs) OS << ", InFlag"; + OS << ");\n"; } - if (HasChain) - OS << ", MVT::Other"; - if (HasOutFlag) - OS << ", MVT::Flag"; - - // Inputs. - for (unsigned i = 0, e = Ops.size(); i != e; ++i) - OS << ", Tmp" << Ops[i]; - if (HasChain) OS << ", Chain"; - if (HasInFlag || HasOptInFlag || HasImpInputs) OS << ", InFlag"; - OS << ");\n"; unsigned ValNo = 0; for (unsigned i = 0; i < NumResults; i++) { |

