summaryrefslogtreecommitdiff
path: root/lib/Target
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-05-21 06:28:50 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-05-21 06:28:50 +0000
commit3c380e71e1de8c6adfb428e86aca0899e8906838 (patch)
treec5b2f822f9e727f6afc2d7f402f9541bdfc47edc /lib/Target
parente8263e64371a02572ae5073cb4affe24ac35788e (diff)
downloadllvm-3c380e71e1de8c6adfb428e86aca0899e8906838.tar.gz
llvm-3c380e71e1de8c6adfb428e86aca0899e8906838.tar.bz2
llvm-3c380e71e1de8c6adfb428e86aca0899e8906838.tar.xz
Back out indirect branch load folding hack. It broke some tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28425 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r--lib/Target/X86/X86ISelDAGToDAG.cpp63
1 files changed, 0 insertions, 63 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp
index 2e744a4af7..50c42ec040 100644
--- a/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -835,69 +835,6 @@ void X86DAGToDAGISel::Select(SDOperand &Result, SDOperand N) {
break;
}
-
- case X86ISD::CALL:
- case X86ISD::TAILCALL: {
- // Handle indirect call which folds a load here. This never matches by
- // the TableGen generated code since the load's chain result is read by
- // the callseq_start node or by a TokenFactor which feeds into the
- // callseq_start.
- SDOperand N1 = Node->getOperand(1);
- if (N1.getOpcode() == ISD::LOAD && N1.hasOneUse() &&
- !CodeGenMap.count(N1.getValue(0))) {
- SDOperand Chain = Node->getOperand(0);
- SDNode *CallStart = FindCallStartFromCall(Chain.Val);
- if (!CallStart) break;
- SDNode *CSOp0 = CallStart->getOperand(0).Val;
- if (! (CSOp0 == N1.Val ||
- (CSOp0->getOpcode() == ISD::TokenFactor &&
- N1.Val->isOperand(CSOp0))))
- break;
- SDOperand Base, Scale, Index, Disp;
- if (SelectAddr(N1.getOperand(1), Base, Scale, Index, Disp)) {
- Select(Base, Base);
- Select(Scale, Scale);
- Select(Index, Index);
- Select(Disp, Disp);
- Select(Chain, Chain);
- bool HasOptInFlag = false;
- SDOperand InFlag;
- if (N.getNumOperands() == 3) {
- Select(InFlag, N.getOperand(2));
- HasOptInFlag = true;
- }
- SDNode *ResNode;
- if (HasOptInFlag)
- ResNode = CurDAG->getTargetNode(X86::CALL32m, MVT::Other, MVT::Flag,
- Base, Scale, Index, Disp, Chain,
- InFlag);
- else
- ResNode = CurDAG->getTargetNode(X86::CALL32m, MVT::Other, MVT::Flag,
- Base, Scale, Index, Disp, Chain);
-
- SelectionDAG::InsertISelMapEntry(CodeGenMap, N.Val, 0, Chain.Val,
- Chain.ResNo);
- SelectionDAG::InsertISelMapEntry(CodeGenMap, N.Val, 1, ResNode, 1);
- // CALLSEQ_START needs a chain! It can't be ResNode, that would cause
- // a cycle. It should be the chain of the load.
- Select(Chain, N1.getOperand(0));
- SelectionDAG::InsertISelMapEntry(CodeGenMap, N1.Val, 1, Chain.Val,
- Chain.ResNo);
- AddHandleReplacement(N1.Val, 1, Chain.Val, Chain.ResNo);
- Result = SDOperand(ResNode, 0);
-
-#ifndef NDEBUG
- DEBUG(std::cerr << std::string(Indent-2, ' '));
- DEBUG(std::cerr << "== ");
- DEBUG(Result.Val->dump(CurDAG));
- DEBUG(std::cerr << "\n");
- Indent -= 2;
-#endif
- return;
- }
- }
- break;
- }
}
SelectCode(Result, N);