diff options
author | Dan Gohman <gohman@apple.com> | 2008-05-29 19:57:41 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-05-29 19:57:41 +0000 |
commit | d35121ad00667d93ea779a722dbee7d022410815 (patch) | |
tree | 167ea139429affa229aaff59e15188e662dee79e /lib/Target/X86/X86ISelDAGToDAG.cpp | |
parent | b99e2e20b2ad1e7c5bf613fba4ead50e9654876c (diff) | |
download | llvm-d35121ad00667d93ea779a722dbee7d022410815.tar.gz llvm-d35121ad00667d93ea779a722dbee7d022410815.tar.bz2 llvm-d35121ad00667d93ea779a722dbee7d022410815.tar.xz |
Fix a tblgen problem handling variable_ops in tblgen instruction
definitions. This adds a new construct, "discard", for indicating
that a named node in the input matching pattern is to be discarded,
instead of corresponding to a node in the output pattern. This
allows tblgen to know where the arguments for the varaible_ops are
supposed to begin.
This fixes "rdar://5791600", whatever that is ;-).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51699 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86ISelDAGToDAG.cpp')
-rw-r--r-- | lib/Target/X86/X86ISelDAGToDAG.cpp | 29 |
1 files changed, 0 insertions, 29 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp index 576661df2e..bb8c58ac14 100644 --- a/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -1175,35 +1175,6 @@ SDNode *X86DAGToDAGISel::Select(SDOperand N) { case X86ISD::GlobalBaseReg: return getGlobalBaseReg(); - // FIXME: This is a workaround for a tblgen problem: rdar://5791600 - case X86ISD::RET_FLAG: - if (ConstantSDNode *Amt = dyn_cast<ConstantSDNode>(N.getOperand(1))) { - if (Amt->getSignExtended() != 0) break; - - // Match (X86retflag 0). - SDOperand Chain = N.getOperand(0); - bool HasInFlag = N.getOperand(N.getNumOperands()-1).getValueType() - == MVT::Flag; - SmallVector<SDOperand, 8> Ops0; - AddToISelQueue(Chain); - SDOperand InFlag(0, 0); - if (HasInFlag) { - InFlag = N.getOperand(N.getNumOperands()-1); - AddToISelQueue(InFlag); - } - for (unsigned i = 2, e = N.getNumOperands()-(HasInFlag?1:0); i != e; - ++i) { - AddToISelQueue(N.getOperand(i)); - Ops0.push_back(N.getOperand(i)); - } - Ops0.push_back(Chain); - if (HasInFlag) - Ops0.push_back(InFlag); - return CurDAG->getTargetNode(X86::RET, MVT::Other, - &Ops0[0], Ops0.size()); - } - break; - case ISD::ADD: { // Turn ADD X, c to MOV32ri X+c. This cannot be done with tblgen'd // code and is matched first so to prevent it from being turned into |