xref: /llvm-project/llvm/test/Transforms/DeadArgElim/musttail-indirect.ll (revision 762253b048e9f760624dea3537535c3657435902)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: -p --function-signature
2; RUN: opt -passes=deadargelim -S < %s | FileCheck %s
3
4define internal i32 @test_caller(ptr %fptr, i32 %a, i32 %b) {
5; CHECK-LABEL: define {{[^@]+}}@test_caller(ptr %fptr, i32 %a, i32 %b) {
6; CHECK-NEXT:    %r = musttail call i32 @test(ptr %fptr, i32 %a, i32 poison)
7; CHECK-NEXT:    ret i32 %r
8;
9  %r = musttail call i32 @test(ptr %fptr, i32 %a, i32 %b)
10  ret i32 %r
11}
12
13define internal i32 @test(ptr %fptr, i32 %a, i32 %b) {
14; CHECK-LABEL: define {{[^@]+}}@test(ptr %fptr, i32 %a, i32 %b) {
15; CHECK-NEXT:    %r = musttail call i32 %fptr(ptr %fptr, i32 %a, i32 0)
16; CHECK-NEXT:    ret i32 %r
17;
18  %r = musttail call i32 %fptr(ptr %fptr, i32 %a, i32 0)
19  ret i32 %r
20}
21
22define internal i32 @direct_test() {
23; CHECK-LABEL: define {{[^@]+}}@direct_test() {
24; CHECK-NEXT:    %r = musttail call i32 @foo()
25; CHECK-NEXT:    ret i32 %r
26;
27  %r = musttail call i32 @foo()
28  ret i32 %r
29}
30
31declare i32 @foo()
32
33define internal i32 @ping(i32 %x) {
34; CHECK-LABEL: define {{[^@]+}}@ping(i32 %x) {
35; CHECK-NEXT:    %r = musttail call i32 @pong(i32 %x)
36; CHECK-NEXT:    ret i32 %r
37;
38  %r = musttail call i32 @pong(i32 %x)
39  ret i32 %r
40}
41
42define internal i32 @pong(i32 %x) {
43; CHECK-LABEL: define {{[^@]+}}@pong(i32 %x) {
44; CHECK-NEXT:    %cond = icmp eq i32 %x, 2
45; CHECK-NEXT:    br i1 %cond, label %yes, label %no
46; CHECK:       yes:
47; CHECK-NEXT:    %r1 = musttail call i32 @ping(i32 %x)
48; CHECK-NEXT:    ret i32 %r1
49; CHECK:       no:
50; CHECK-NEXT:    %r2 = musttail call i32 @bar(i32 %x)
51; CHECK-NEXT:    ret i32 %r2
52;
53  %cond = icmp eq i32 %x, 2
54  br i1 %cond, label %yes, label %no
55
56yes:
57  %r1 = musttail call i32 @ping(i32 %x)
58  ret i32 %r1
59no:
60  %r2 = musttail call i32 @bar(i32 %x)
61  ret i32 %r2
62}
63
64declare i32 @bar(i32 %x)
65
66