xref: /llvm-project/llvm/test/Transforms/GlobalOpt/musttail_cc.ll (revision 8ebb3eac02a926ffa4298c12834c57aefb2e8579)
1; RUN: opt < %s -passes=globalopt -S | FileCheck %s
2; PR36546
3
4; Check that musttail callee preserves its calling convention
5
6define i32 @test(i32 %a) {
7  ; CHECK: %ca = musttail call i32 @foo(i32 %a)
8  %ca = musttail call i32 @foo(i32 %a)
9  ret i32 %ca
10}
11
12; CHECK-LABEL: define internal i32 @foo(i32 %a)
13define internal i32 @foo(i32 %a) {
14  ret i32 %a
15}
16
17; Check that musttail caller preserves its calling convention
18
19define i32 @test2(i32 %a) {
20  %ca = call i32 @foo1(i32 %a)
21  ret i32 %ca
22}
23
24; CHECK-LABEL: define internal i32 @foo1(i32 %a)
25define internal i32 @foo1(i32 %a) {
26  ; CHECK: %ca = musttail call i32 @foo2(i32 %a)
27  %ca = musttail call i32 @foo2(i32 %a)
28  ret i32 %ca
29}
30
31; CHECK-LABEL: define internal i32 @foo2(i32 %a)
32define internal i32 @foo2(i32 %a) {
33  ret i32 %a
34}
35