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