[llvm] r265100 - Don't insert lifetime end markers on deoptimizing returns
Sanjoy Das via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 31 19:51:27 PDT 2016
Author: sanjoy
Date: Thu Mar 31 21:51:26 2016
New Revision: 265100
URL: http://llvm.org/viewvc/llvm-project?rev=265100&view=rev
Log:
Don't insert lifetime end markers on deoptimizing returns
They're not necessary (since the lifetime of the alloca is trivially
over due to the return), and the way LLVM inserts the lifetime.end
markers breaks the IR (we get a lifetime end marker between the
deoptimize call and the return).
Modified:
llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
llvm/trunk/test/Transforms/Inline/deoptimize-intrinsic.ll
Modified: llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=265100&r1=265099&r2=265100&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp Thu Mar 31 21:51:26 2016
@@ -1703,11 +1703,14 @@ bool llvm::InlineFunction(CallSite CS, I
builder.CreateLifetimeStart(AI, AllocaSize);
for (ReturnInst *RI : Returns) {
- // Don't insert llvm.lifetime.end calls between a musttail call and a
- // return. The return kills all local allocas.
+ // Don't insert llvm.lifetime.end calls between a musttail or deoptimize
+ // call and a return. The return kills all local allocas.
if (InlinedMustTailCalls &&
RI->getParent()->getTerminatingMustTailCall())
continue;
+ if (InlinedDeoptimizeCalls &&
+ RI->getParent()->getTerminatingDeoptimizeCall())
+ continue;
IRBuilder<>(RI).CreateLifetimeEnd(AI, AllocaSize);
}
}
Modified: llvm/trunk/test/Transforms/Inline/deoptimize-intrinsic.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/deoptimize-intrinsic.ll?rev=265100&r1=265099&r2=265100&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/Inline/deoptimize-intrinsic.ll (original)
+++ llvm/trunk/test/Transforms/Inline/deoptimize-intrinsic.ll Thu Mar 31 21:51:26 2016
@@ -88,3 +88,19 @@ normal:
store i8 %v, i8* %ptr
ret i32 42
}
+
+define i8 @callee_with_alloca() alwaysinline {
+ %t = alloca i8
+ %v0 = call i8(...) @llvm.experimental.deoptimize.i8(i32 1) [ "deopt"(i8* %t) ]
+ ret i8 %v0
+}
+
+define void @caller_with_lifetime() {
+; CHECK-LABLE: @caller_with_lifetime(
+; CHECK: call void (...) @llvm.experimental.deoptimize.isVoid(i32 1) [ "deopt"(i8* %t.i) ]
+; CHECK-NEXT: ret void
+
+entry:
+ call i8 @callee_with_alloca();
+ ret void
+}
More information about the llvm-commits
mailing list