xref: /llvm-project/llvm/test/Transforms/Inline/call-site-attrs.ll (revision e5369823bc0655806469724335d0ca5a4c17d8c7)
1; RUN: opt < %s -passes=inline -S | FileCheck %s
2; RUN: opt < %s -passes='cgscc(inline)' -S | FileCheck %s
3
4; Always prefer call site attribute over function attribute
5
6define internal i32 @inner1() {
7; CHECK: @inner1(
8  ret i32 1
9}
10
11define i32 @outer1() {
12; CHECK-LABEL: @outer1(
13; CHECK: call
14
15   %r = call i32 @inner1() noinline
16   ret i32 %r
17}
18
19define internal i32 @inner2() alwaysinline {
20; CHECK: @inner2(
21  ret i32 1
22}
23
24define i32 @outer2() {
25; CHECK-LABEL: @outer2(
26; CHECK: call
27
28   %r = call i32 @inner2() noinline
29   ret i32 %r
30}
31
32define i32 @inner3() alwaysinline {
33; CHECK: @inner3(
34  ret i32 1
35}
36
37define i32 @outer3() {
38; CHECK-LABEL: @outer3(
39; CHECK: call
40
41   %r = call i32 @inner3() noinline
42   ret i32 %r
43}
44
45define i32 @inner4() noinline {
46; CHECK: @inner4(
47  ret i32 1
48}
49
50define i32 @outer4() {
51; CHECK-LABEL: @outer4(
52; CHECK-NOT: call
53; CHECK: ret
54
55   %r = call i32 @inner4() alwaysinline
56
57   ret i32 %r
58}
59
60