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