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 | 9789aaad632f5a75fc8b8e70fd27aaa92199f3bb (patch) | |
tree | dc6a6e0b135910f0723dd045573c1470a6fc78be | |
parent | 18667c45458352e4d7d5f7f0147232a9ca4a7928 (diff) |
Fix an optional in flag bug.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25590 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | utils/TableGen/DAGISelEmitter.cpp | 83 |
1 files changed, 64 insertions, 19 deletions
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 5e63042c90..e76dd8fd55 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/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++) { |