From: Chris Lattner Date: Fri, 6 May 2005 06:48:21 +0000 (+0000) Subject: Preserve tail marker X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a9e9211bbb2a47f4d6db61ef100ccebe4c46c0ff;p=oota-llvm.git Preserve tail marker git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21737 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 51141162bfb..72b45319c0c 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -4232,6 +4232,8 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) { Args, Caller->getName(), Caller); } else { NC = new CallInst(Callee, Args, Caller->getName(), Caller); + if (cast(Caller)->isTailCall()) + cast(NC)->setTailCall(); } // Insert a cast of the return type as necessary... diff --git a/lib/Transforms/Utils/LowerAllocations.cpp b/lib/Transforms/Utils/LowerAllocations.cpp index 71b45fdfeaa..1502fab759a 100644 --- a/lib/Transforms/Utils/LowerAllocations.cpp +++ b/lib/Transforms/Utils/LowerAllocations.cpp @@ -150,6 +150,7 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) { // Create the call to Malloc... CallInst *MCall = new CallInst(MallocFunc, MallocArgs, "", I); + MCall->setTailCall(); // Create a cast instruction to convert to the right type... Value *MCast; @@ -180,7 +181,7 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) { FreeArgs.push_back(Constant::getNullValue(FreeFTy->getParamType(i))); // Insert a call to the free function... - new CallInst(FreeFunc, FreeArgs, "", I); + (new CallInst(FreeFunc, FreeArgs, "", I))->setTailCall(); // Delete the old free instruction I = --BBIL.erase(I); diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp index fee18aa77cf..b751bc0d26d 100644 --- a/lib/Transforms/Utils/LowerInvoke.cpp +++ b/lib/Transforms/Utils/LowerInvoke.cpp @@ -195,7 +195,7 @@ void LowerInvoke::writeAbortMessage(Instruction *IB) { Args[i] = ConstantExpr::getCast(cast(Args[i]), FT->getParamType(i)); - new CallInst(WriteFn, Args, "", IB); + (new CallInst(WriteFn, Args, "", IB))->setTailCall(); } } @@ -225,7 +225,7 @@ bool LowerInvoke::insertCheapEHSupport(Function &F) { writeAbortMessage(UI); // Insert a call to abort() - new CallInst(AbortFn, std::vector(), "", UI); + (new CallInst(AbortFn, std::vector(), "", UI))->setTailCall(); // Insert a return instruction. This really should be a "barrier", as it // is unreachable. @@ -375,7 +375,7 @@ bool LowerInvoke::insertExpensiveEHSupport(Function &F) { writeAbortMessage(RI); // Insert a call to abort() - new CallInst(AbortFn, std::vector(), "", RI); + (new CallInst(AbortFn, std::vector(), "", RI))->setTailCall(); } return Changed;