diff options
| author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-04-01 02:51:26 +0000 |
|---|---|---|
| committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-04-01 02:51:26 +0000 |
| commit | 18b92968eabd0c3c79417e29d97e9ab502143ed3 (patch) | |
| tree | 3178d09354a7505ce3f8ddb479d25ec950e97b2d /llvm/test/Transforms | |
| parent | 9d41a8f269a284cf1b08c0cd37d3c38be6f0d2a2 (diff) | |
| download | bcm5719-llvm-18b92968eabd0c3c79417e29d97e9ab502143ed3.tar.gz bcm5719-llvm-18b92968eabd0c3c79417e29d97e9ab502143ed3.zip | |
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).
llvm-svn: 265100
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/Inline/deoptimize-intrinsic.ll | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Inline/deoptimize-intrinsic.ll b/llvm/test/Transforms/Inline/deoptimize-intrinsic.ll index 84e54a09e8a..d9b88985551 100644 --- a/llvm/test/Transforms/Inline/deoptimize-intrinsic.ll +++ b/llvm/test/Transforms/Inline/deoptimize-intrinsic.ll @@ -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 +} |

