xref: /llvm-project/llvm/test/CodeGen/X86/fake-use-tailcall.ll (revision 9a58b12fe7bf54c9433ec89bae2a2d6cfe489e75)
1; RUN: llc < %s -stop-after=finalize-isel -mtriple=x86_64-unknown-linux - | FileCheck %s --implicit-check-not FAKE_USE
2; Fake uses following tail calls should be pulled in front
3; of the TCRETURN instruction. Fake uses using something defined by
4; the tail call or after it should be suppressed.
5
6; CHECK: name:{{ +}}bar
7; CHECK: body:
8; CHECK: bb.0.{{.*}}:
9; CHECK: %0:{{.*}}= COPY
10; CHECK: FAKE_USE %0
11; CHECK: TCRETURN
12
13; CHECK: name:{{ +}}baz
14; CHECK: body:
15; CHECK: bb.0.{{.*}}:
16; CHECK: %0:{{.*}}= COPY
17; CHECK: FAKE_USE %0
18; CHECK: TCRETURN
19
20define void @bar(i32 %v) optdebug {
21entry:
22  %call = tail call i32 @_Z3fooi(i32 %v)
23  %mul = mul nsw i32 %call, 3
24  notail call void (...) @llvm.fake.use(i32 %mul)
25  notail call void (...) @llvm.fake.use(i32 %call)
26  notail call void (...) @llvm.fake.use(i32 %v)
27  ret void
28}
29
30define i32 @baz(i32 %v) optdebug {
31entry:
32  %call = tail call i32 @_Z3fooi(i32 %v)
33  notail call void (...) @llvm.fake.use(i32 %v)
34  ret i32 %call
35}
36
37declare i32 @_Z3fooi(i32) local_unnamed_addr
38