diff options
author | Dan Gohman <gohman@apple.com> | 2008-09-16 01:42:28 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-09-16 01:42:28 +0000 |
commit | 1937e2f6ca0e6a04c4ad5fdb5b606b5ed9533e74 (patch) | |
tree | 805ac0b0e0259fbd40e34c9a51c8c76468310df9 | |
parent | c7e42fd5b2edf6f72910addc1466bae5f36744e7 (diff) | |
download | llvm-1937e2f6ca0e6a04c4ad5fdb5b606b5ed9533e74.tar.gz llvm-1937e2f6ca0e6a04c4ad5fdb5b606b5ed9533e74.tar.bz2 llvm-1937e2f6ca0e6a04c4ad5fdb5b606b5ed9533e74.tar.xz |
Don't take the time to CheckDAGForTailCallsAndFixThem when tail calls
are not enabled. Instead just omit the tail call flag when calls are
created.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56235 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | 11 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 3 |
2 files changed, 10 insertions, 4 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index 599f0dd82c..62a6b4f180 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -4201,7 +4201,8 @@ void SelectionDAGLowering::LowerCallTo(CallSite CS, SDValue Callee, TLI.LowerCallTo(getRoot(), CS.getType(), CS.paramHasAttr(0, ParamAttr::SExt), CS.paramHasAttr(0, ParamAttr::ZExt), - FTy->isVarArg(), CS.getCallingConv(), IsTailCall, + FTy->isVarArg(), CS.getCallingConv(), + IsTailCall && PerformTailCallOpt, Callee, Args, DAG); if (CS.getType() != Type::VoidTy) setValue(CS.getInstruction(), Result.first); @@ -5138,7 +5139,8 @@ void SelectionDAGLowering::visitMalloc(MallocInst &I) { std::pair<SDValue,SDValue> Result = TLI.LowerCallTo(getRoot(), I.getType(), false, false, false, CallingConv::C, - true, DAG.getExternalSymbol("malloc", IntPtr), Args, DAG); + PerformTailCallOpt, DAG.getExternalSymbol("malloc", IntPtr), + Args, DAG); setValue(&I, Result.first); // Pointers always fit in registers DAG.setRoot(Result.second); } @@ -5152,7 +5154,7 @@ void SelectionDAGLowering::visitFree(FreeInst &I) { MVT IntPtr = TLI.getPointerTy(); std::pair<SDValue,SDValue> Result = TLI.LowerCallTo(getRoot(), Type::VoidTy, false, false, false, - CallingConv::C, true, + CallingConv::C, PerformTailCallOpt, DAG.getExternalSymbol("free", IntPtr), Args, DAG); DAG.setRoot(Result.second); } @@ -5323,6 +5325,9 @@ TargetLowering::LowerCallTo(SDValue Chain, const Type *RetTy, unsigned CallingConv, bool isTailCall, SDValue Callee, ArgListTy &Args, SelectionDAG &DAG) { + assert((!isTailCall || PerformTailCallOpt) && + "isTailCall set when tail-call optimizations are disabled!"); + SmallVector<SDValue, 32> Ops; Ops.push_back(Chain); // Op#0 - Chain Ops.push_back(Callee); diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index fa175109e9..140bad27f5 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -526,7 +526,8 @@ void SelectionDAGISel::SelectBasicBlock(BasicBlock *LLVMBB, // with correct tailcall attribute so that the target can rely on the tailcall // attribute indicating whether the call is really eligible for tail call // optimization. - CheckDAGForTailCallsAndFixThem(*CurDAG, TLI); + if (PerformTailCallOpt) + CheckDAGForTailCallsAndFixThem(*CurDAG, TLI); // Final step, emit the lowered DAG as machine code. CodeGenAndEmitDAG(); |