From 3c380e71e1de8c6adfb428e86aca0899e8906838 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Sun, 21 May 2006 06:28:50 +0000 Subject: [PATCH] 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 --- lib/Target/X86/X86ISelDAGToDAG.cpp | 63 ------------------------------ 1 file changed, 63 deletions(-) diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp index 2e744a4af71..50c42ec0406 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); -- 2.34.1