[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / Transforms / Inline / inline-cold.ll
blobe0e679ad4036df2abd3de6b30b105b9950a18c01
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.
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.
13 @a = global i32 4
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 {
19 entry:
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
49 ; Function Attrs: nounwind cold readnone uwtable
50 define 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
57 entry:
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
71 ; This function should be larger than the default cold threshold (225).
72 define 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
79 entry:
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
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
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
156   %add = add i32 %x52, %a
157   ret i32 %add
160 ; Function Attrs: nounwind readnone uwtable
161 define 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
177 entry:
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
186 declare void @extern()
187 attributes #0 = { nounwind readnone uwtable }
188 attributes #1 = { nounwind cold readnone uwtable }