xref: /llvm-project/llvm/test/CodeGen/X86/tailcall-lifetime-end.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; 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  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %i)
16  call void @foo(ptr nonnull %i)
17  tail call void @bar()
18  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %i)
19  ret void
20}
21
22declare void @foo(ptr nocapture %p)
23declare void @bar()
24
25declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
26declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
27