summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/InlineFunction.cpp
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-04-01 02:51:30 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-04-01 02:51:30 +0000
commitf83ab6de56eeb651b1ce06ea98ada9175a2beb17 (patch)
tree5d3ba00e67c95f3de501064f1a954de7e16e09e2 /llvm/lib/Transforms/Utils/InlineFunction.cpp
parent18b92968eabd0c3c79417e29d97e9ab502143ed3 (diff)
downloadbcm5719-llvm-f83ab6de56eeb651b1ce06ea98ada9175a2beb17.tar.gz
bcm5719-llvm-f83ab6de56eeb651b1ce06ea98ada9175a2beb17.zip
Don't insert stackrestore on deoptimizing returns
They're not necessary (since the stack pointer is trivially restored on return), and the way LLVM inserts the stackrestore calls breaks the IR (we get a stackrestore between the deoptimize call and the return). llvm-svn: 265101
Diffstat (limited to 'llvm/lib/Transforms/Utils/InlineFunction.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/InlineFunction.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index 42179851718..646afd8cd61 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -1731,10 +1731,12 @@ bool llvm::InlineFunction(CallSite CS, InlineFunctionInfo &IFI,
// Insert a call to llvm.stackrestore before any return instructions in the
// inlined function.
for (ReturnInst *RI : Returns) {
- // Don't insert llvm.stackrestore calls between a musttail call and a
- // return. The return will restore the stack pointer.
+ // Don't insert llvm.stackrestore calls between a musttail or deoptimize
+ // call and a return. The return will restore the stack pointer.
if (InlinedMustTailCalls && RI->getParent()->getTerminatingMustTailCall())
continue;
+ if (InlinedDeoptimizeCalls && RI->getParent()->getTerminatingDeoptimizeCall())
+ continue;
IRBuilder<>(RI).CreateCall(StackRestore, SavedPtr);
}
}
OpenPOWER on IntegriCloud