blob: 3aedd007d44d3d26aac058aa9fdaaae5a711ab96 [file] [log] [blame]
Robert Lougher18bfb3a2018-10-24 17:03:19 +00001; RUN: llc -mtriple=x86_64-unknown-linux-gnu -o - %s | FileCheck %s
2
3; A lifetime end intrinsic should not prevent a call from being tail call
4; optimized.
5
6define void @foobar() {
7; CHECK-LABEL: foobar
8; CHECK: pushq %rax
9; CHECK: leaq 4(%rsp), %rdi
10; CHECK: callq foo
11; CHECK: popq %rax
12; CHECK: jmp bar
13entry:
14 %i = alloca i32
15 %0 = bitcast i32* %i to i8*
16 call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %0)
17 call void @foo(i32* nonnull %i)
18 tail call void @bar()
19 call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %0)
20 ret void
21}
22
23declare void @foo(i32* nocapture %p)
24declare void @bar()
25
26declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
27declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)