xref: /aosp_15_r20/external/llvm/test/Transforms/Inline/inline-cold.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -inline -S -inlinecold-threshold=75 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; Test that functions with attribute Cold are not inlined while the
3*9880d681SAndroid Build Coastguard Worker; same function without attribute Cold will be inlined.
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -inline -S -inline-threshold=600 | FileCheck %s -check-prefix=OVERRIDE
6*9880d681SAndroid Build Coastguard Worker; The command line argument for inline-threshold should override
7*9880d681SAndroid Build Coastguard Worker; the default cold threshold, so a cold function with size bigger
8*9880d681SAndroid Build Coastguard Worker; than the default cold threshold (225) will be inlined.
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -inline -S | FileCheck %s -check-prefix=DEFAULT
11*9880d681SAndroid Build Coastguard Worker; The same cold function will not be inlined with the default behavior.
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker@a = global i32 4
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; This function should be larger than the cold threshold (75), but smaller
16*9880d681SAndroid Build Coastguard Worker; than the regular threshold.
17*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone uwtable
18*9880d681SAndroid Build Coastguard Workerdefine i32 @simpleFunction(i32 %a) #0 {
19*9880d681SAndroid Build Coastguard Workerentry:
20*9880d681SAndroid Build Coastguard Worker  %a1 = load volatile i32, i32* @a
21*9880d681SAndroid Build Coastguard Worker  %x1 = add i32 %a1,  %a1
22*9880d681SAndroid Build Coastguard Worker  %a2 = load volatile i32, i32* @a
23*9880d681SAndroid Build Coastguard Worker  %x2 = add i32 %x1, %a2
24*9880d681SAndroid Build Coastguard Worker  %a3 = load volatile i32, i32* @a
25*9880d681SAndroid Build Coastguard Worker  %x3 = add i32 %x2, %a3
26*9880d681SAndroid Build Coastguard Worker  %a4 = load volatile i32, i32* @a
27*9880d681SAndroid Build Coastguard Worker  %x4 = add i32 %x3, %a4
28*9880d681SAndroid Build Coastguard Worker  %a5 = load volatile i32, i32* @a
29*9880d681SAndroid Build Coastguard Worker  %x5 = add i32 %x4, %a5
30*9880d681SAndroid Build Coastguard Worker  %a6 = load volatile i32, i32* @a
31*9880d681SAndroid Build Coastguard Worker  %x6 = add i32 %x5, %a6
32*9880d681SAndroid Build Coastguard Worker  %a7 = load volatile i32, i32* @a
33*9880d681SAndroid Build Coastguard Worker  %x7 = add i32 %x6, %a6
34*9880d681SAndroid Build Coastguard Worker  %a8 = load volatile i32, i32* @a
35*9880d681SAndroid Build Coastguard Worker  %x8 = add i32 %x7, %a8
36*9880d681SAndroid Build Coastguard Worker  %a9 = load volatile i32, i32* @a
37*9880d681SAndroid Build Coastguard Worker  %x9 = add i32 %x8, %a9
38*9880d681SAndroid Build Coastguard Worker  %a10 = load volatile i32, i32* @a
39*9880d681SAndroid Build Coastguard Worker  %x10 = add i32 %x9, %a10
40*9880d681SAndroid Build Coastguard Worker  %a11 = load volatile i32, i32* @a
41*9880d681SAndroid Build Coastguard Worker  %x11 = add i32 %x10, %a11
42*9880d681SAndroid Build Coastguard Worker  %a12 = load volatile i32, i32* @a
43*9880d681SAndroid Build Coastguard Worker  %x12 = add i32 %x11, %a12
44*9880d681SAndroid Build Coastguard Worker  %add = add i32 %x12, %a
45*9880d681SAndroid Build Coastguard Worker  ret i32 %add
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind cold readnone uwtable
49*9880d681SAndroid Build Coastguard Workerdefine i32 @ColdFunction(i32 %a) #1 {
50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ColdFunction
51*9880d681SAndroid Build Coastguard Worker; CHECK: ret
52*9880d681SAndroid Build Coastguard Worker; OVERRIDE-LABEL: @ColdFunction
53*9880d681SAndroid Build Coastguard Worker; OVERRIDE: ret
54*9880d681SAndroid Build Coastguard Worker; DEFAULT-LABEL: @ColdFunction
55*9880d681SAndroid Build Coastguard Worker; DEFAULT: ret
56*9880d681SAndroid Build Coastguard Workerentry:
57*9880d681SAndroid Build Coastguard Worker  %a1 = load volatile i32, i32* @a
58*9880d681SAndroid Build Coastguard Worker  %x1 = add i32 %a1,  %a1
59*9880d681SAndroid Build Coastguard Worker  %a2 = load volatile i32, i32* @a
60*9880d681SAndroid Build Coastguard Worker  %x2 = add i32 %x1, %a2
61*9880d681SAndroid Build Coastguard Worker  %a3 = load volatile i32, i32* @a
62*9880d681SAndroid Build Coastguard Worker  %x3 = add i32 %x2, %a3
63*9880d681SAndroid Build Coastguard Worker  %a4 = load volatile i32, i32* @a
64*9880d681SAndroid Build Coastguard Worker  %x4 = add i32 %x3, %a4
65*9880d681SAndroid Build Coastguard Worker  %a5 = load volatile i32, i32* @a
66*9880d681SAndroid Build Coastguard Worker  %x5 = add i32 %x4, %a5
67*9880d681SAndroid Build Coastguard Worker  %a6 = load volatile i32, i32* @a
68*9880d681SAndroid Build Coastguard Worker  %x6 = add i32 %x5, %a6
69*9880d681SAndroid Build Coastguard Worker  %a7 = load volatile i32, i32* @a
70*9880d681SAndroid Build Coastguard Worker  %x7 = add i32 %x6, %a6
71*9880d681SAndroid Build Coastguard Worker  %a8 = load volatile i32, i32* @a
72*9880d681SAndroid Build Coastguard Worker  %x8 = add i32 %x7, %a8
73*9880d681SAndroid Build Coastguard Worker  %a9 = load volatile i32, i32* @a
74*9880d681SAndroid Build Coastguard Worker  %x9 = add i32 %x8, %a9
75*9880d681SAndroid Build Coastguard Worker  %a10 = load volatile i32, i32* @a
76*9880d681SAndroid Build Coastguard Worker  %x10 = add i32 %x9, %a10
77*9880d681SAndroid Build Coastguard Worker  %a11 = load volatile i32, i32* @a
78*9880d681SAndroid Build Coastguard Worker  %x11 = add i32 %x10, %a11
79*9880d681SAndroid Build Coastguard Worker  %a12 = load volatile i32, i32* @a
80*9880d681SAndroid Build Coastguard Worker  %x12 = add i32 %x11, %a12
81*9880d681SAndroid Build Coastguard Worker  %add = add i32 %x12, %a
82*9880d681SAndroid Build Coastguard Worker  ret i32 %add
83*9880d681SAndroid Build Coastguard Worker}
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; This function should be larger than the default cold threshold (225).
86*9880d681SAndroid Build Coastguard Workerdefine i32 @ColdFunction2(i32 %a) #1 {
87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ColdFunction2
88*9880d681SAndroid Build Coastguard Worker; CHECK: ret
89*9880d681SAndroid Build Coastguard Worker; OVERRIDE-LABEL: @ColdFunction2
90*9880d681SAndroid Build Coastguard Worker; OVERRIDE: ret
91*9880d681SAndroid Build Coastguard Worker; DEFAULT-LABEL: @ColdFunction2
92*9880d681SAndroid Build Coastguard Worker; DEFAULT: ret
93*9880d681SAndroid Build Coastguard Workerentry:
94*9880d681SAndroid Build Coastguard Worker  %a1 = load volatile i32, i32* @a
95*9880d681SAndroid Build Coastguard Worker  %x1 = add i32 %a1,  %a1
96*9880d681SAndroid Build Coastguard Worker  %a2 = load volatile i32, i32* @a
97*9880d681SAndroid Build Coastguard Worker  %x2 = add i32 %x1, %a2
98*9880d681SAndroid Build Coastguard Worker  %a3 = load volatile i32, i32* @a
99*9880d681SAndroid Build Coastguard Worker  %x3 = add i32 %x2, %a3
100*9880d681SAndroid Build Coastguard Worker  %a4 = load volatile i32, i32* @a
101*9880d681SAndroid Build Coastguard Worker  %x4 = add i32 %x3, %a4
102*9880d681SAndroid Build Coastguard Worker  %a5 = load volatile i32, i32* @a
103*9880d681SAndroid Build Coastguard Worker  %x5 = add i32 %x4, %a5
104*9880d681SAndroid Build Coastguard Worker  %a6 = load volatile i32, i32* @a
105*9880d681SAndroid Build Coastguard Worker  %x6 = add i32 %x5, %a6
106*9880d681SAndroid Build Coastguard Worker  %a7 = load volatile i32, i32* @a
107*9880d681SAndroid Build Coastguard Worker  %x7 = add i32 %x6, %a7
108*9880d681SAndroid Build Coastguard Worker  %a8 = load volatile i32, i32* @a
109*9880d681SAndroid Build Coastguard Worker  %x8 = add i32 %x7, %a8
110*9880d681SAndroid Build Coastguard Worker  %a9 = load volatile i32, i32* @a
111*9880d681SAndroid Build Coastguard Worker  %x9 = add i32 %x8, %a9
112*9880d681SAndroid Build Coastguard Worker  %a10 = load volatile i32, i32* @a
113*9880d681SAndroid Build Coastguard Worker  %x10 = add i32 %x9, %a10
114*9880d681SAndroid Build Coastguard Worker  %a11 = load volatile i32, i32* @a
115*9880d681SAndroid Build Coastguard Worker  %x11 = add i32 %x10, %a11
116*9880d681SAndroid Build Coastguard Worker  %a12 = load volatile i32, i32* @a
117*9880d681SAndroid Build Coastguard Worker  %x12 = add i32 %x11, %a12
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker  %a21 = load volatile i32, i32* @a
120*9880d681SAndroid Build Coastguard Worker  %x21 = add i32 %x12, %a21
121*9880d681SAndroid Build Coastguard Worker  %a22 = load volatile i32, i32* @a
122*9880d681SAndroid Build Coastguard Worker  %x22 = add i32 %x21, %a22
123*9880d681SAndroid Build Coastguard Worker  %a23 = load volatile i32, i32* @a
124*9880d681SAndroid Build Coastguard Worker  %x23 = add i32 %x22, %a23
125*9880d681SAndroid Build Coastguard Worker  %a24 = load volatile i32, i32* @a
126*9880d681SAndroid Build Coastguard Worker  %x24 = add i32 %x23, %a24
127*9880d681SAndroid Build Coastguard Worker  %a25 = load volatile i32, i32* @a
128*9880d681SAndroid Build Coastguard Worker  %x25 = add i32 %x24, %a25
129*9880d681SAndroid Build Coastguard Worker  %a26 = load volatile i32, i32* @a
130*9880d681SAndroid Build Coastguard Worker  %x26 = add i32 %x25, %a26
131*9880d681SAndroid Build Coastguard Worker  %a27 = load volatile i32, i32* @a
132*9880d681SAndroid Build Coastguard Worker  %x27 = add i32 %x26, %a27
133*9880d681SAndroid Build Coastguard Worker  %a28 = load volatile i32, i32* @a
134*9880d681SAndroid Build Coastguard Worker  %x28 = add i32 %x27, %a28
135*9880d681SAndroid Build Coastguard Worker  %a29 = load volatile i32, i32* @a
136*9880d681SAndroid Build Coastguard Worker  %x29 = add i32 %x28, %a29
137*9880d681SAndroid Build Coastguard Worker  %a30 = load volatile i32, i32* @a
138*9880d681SAndroid Build Coastguard Worker  %x30 = add i32 %x29, %a30
139*9880d681SAndroid Build Coastguard Worker  %a31 = load volatile i32, i32* @a
140*9880d681SAndroid Build Coastguard Worker  %x31 = add i32 %x30, %a31
141*9880d681SAndroid Build Coastguard Worker  %a32 = load volatile i32, i32* @a
142*9880d681SAndroid Build Coastguard Worker  %x32 = add i32 %x31, %a32
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker  %a41 = load volatile i32, i32* @a
145*9880d681SAndroid Build Coastguard Worker  %x41 = add i32 %x32, %a41
146*9880d681SAndroid Build Coastguard Worker  %a42 = load volatile i32, i32* @a
147*9880d681SAndroid Build Coastguard Worker  %x42 = add i32 %x41, %a42
148*9880d681SAndroid Build Coastguard Worker  %a43 = load volatile i32, i32* @a
149*9880d681SAndroid Build Coastguard Worker  %x43 = add i32 %x42, %a43
150*9880d681SAndroid Build Coastguard Worker  %a44 = load volatile i32, i32* @a
151*9880d681SAndroid Build Coastguard Worker  %x44 = add i32 %x43, %a44
152*9880d681SAndroid Build Coastguard Worker  %a45 = load volatile i32, i32* @a
153*9880d681SAndroid Build Coastguard Worker  %x45 = add i32 %x44, %a45
154*9880d681SAndroid Build Coastguard Worker  %a46 = load volatile i32, i32* @a
155*9880d681SAndroid Build Coastguard Worker  %x46 = add i32 %x45, %a46
156*9880d681SAndroid Build Coastguard Worker  %a47 = load volatile i32, i32* @a
157*9880d681SAndroid Build Coastguard Worker  %x47 = add i32 %x46, %a47
158*9880d681SAndroid Build Coastguard Worker  %a48 = load volatile i32, i32* @a
159*9880d681SAndroid Build Coastguard Worker  %x48 = add i32 %x47, %a48
160*9880d681SAndroid Build Coastguard Worker  %a49 = load volatile i32, i32* @a
161*9880d681SAndroid Build Coastguard Worker  %x49 = add i32 %x48, %a49
162*9880d681SAndroid Build Coastguard Worker  %a50 = load volatile i32, i32* @a
163*9880d681SAndroid Build Coastguard Worker  %x50 = add i32 %x49, %a50
164*9880d681SAndroid Build Coastguard Worker  %a51 = load volatile i32, i32* @a
165*9880d681SAndroid Build Coastguard Worker  %x51 = add i32 %x50, %a51
166*9880d681SAndroid Build Coastguard Worker  %a52 = load volatile i32, i32* @a
167*9880d681SAndroid Build Coastguard Worker  %x52 = add i32 %x51, %a52
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Worker  %add = add i32 %x52, %a
170*9880d681SAndroid Build Coastguard Worker  ret i32 %add
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone uwtable
174*9880d681SAndroid Build Coastguard Workerdefine i32 @bar(i32 %a) #0 {
175*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bar
176*9880d681SAndroid Build Coastguard Worker; CHECK: call i32 @ColdFunction(i32 5)
177*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call i32 @simpleFunction(i32 6)
178*9880d681SAndroid Build Coastguard Worker; CHECK: call i32 @ColdFunction2(i32 5)
179*9880d681SAndroid Build Coastguard Worker; CHECK: ret
180*9880d681SAndroid Build Coastguard Worker; OVERRIDE-LABEL: @bar
181*9880d681SAndroid Build Coastguard Worker; OVERRIDE-NOT: call i32 @ColdFunction(i32 5)
182*9880d681SAndroid Build Coastguard Worker; OVERRIDE-NOT: call i32 @simpleFunction(i32 6)
183*9880d681SAndroid Build Coastguard Worker; OVERRIDE-NOT: call i32 @ColdFunction2(i32 5)
184*9880d681SAndroid Build Coastguard Worker; OVERRIDE: ret
185*9880d681SAndroid Build Coastguard Worker; DEFAULT-LABEL: @bar
186*9880d681SAndroid Build Coastguard Worker; DEFAULT-NOT: call i32 @ColdFunction(i32 5)
187*9880d681SAndroid Build Coastguard Worker; DEFAULT-NOT: call i32 @simpleFunction(i32 6)
188*9880d681SAndroid Build Coastguard Worker; DEFAULT: call i32 @ColdFunction2(i32 5)
189*9880d681SAndroid Build Coastguard Worker; DEFAULT: ret
190*9880d681SAndroid Build Coastguard Workerentry:
191*9880d681SAndroid Build Coastguard Worker  %0 = tail call i32 @ColdFunction(i32 5)
192*9880d681SAndroid Build Coastguard Worker  %1 = tail call i32 @simpleFunction(i32 6)
193*9880d681SAndroid Build Coastguard Worker  %2 = tail call i32 @ColdFunction2(i32 5)
194*9880d681SAndroid Build Coastguard Worker  %3 = add i32 %0, %1
195*9880d681SAndroid Build Coastguard Worker  %add = add i32 %2, %3
196*9880d681SAndroid Build Coastguard Worker  ret i32 %add
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone uwtable }
200*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind cold readnone uwtable }
201