OSDN Git Service

Update LLVM for 3.5 rebase (r209712).
[android-x86/external-llvm.git] / test / Transforms / Inline / inline-cold.ll
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.
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
18 define i32 @simpleFunction(i32 %a) #0 {
19 entry:
20   %a1 = load volatile i32* @a
21   %x1 = add i32 %a1,  %a1
22   %a2 = load volatile i32* @a
23   %x2 = add i32 %x1, %a2
24   %a3 = load volatile i32* @a
25   %x3 = add i32 %x2, %a3
26   %a4 = load volatile i32* @a
27   %x4 = add i32 %x3, %a4
28   %a5 = load volatile i32* @a
29   %x5 = add i32 %x4, %a5
30   %a6 = load volatile i32* @a
31   %x6 = add i32 %x5, %a6
32   %a7 = load volatile i32* @a
33   %x7 = add i32 %x6, %a6
34   %a8 = load volatile i32* @a
35   %x8 = add i32 %x7, %a8
36   %a9 = load volatile i32* @a
37   %x9 = add i32 %x8, %a9
38   %a10 = load volatile i32* @a
39   %x10 = add i32 %x9, %a10
40   %a11 = load volatile i32* @a
41   %x11 = add i32 %x10, %a11
42   %a12 = load volatile i32* @a
43   %x12 = add i32 %x11, %a12
44   %add = add i32 %x12, %a
45   ret i32 %add
46 }
47
48 ; Function Attrs: nounwind cold readnone uwtable
49 define i32 @ColdFunction(i32 %a) #1 {
50 ; CHECK-LABEL: @ColdFunction
51 ; CHECK: ret
52 ; OVERRIDE-LABEL: @ColdFunction
53 ; OVERRIDE: ret
54 ; DEFAULT-LABEL: @ColdFunction
55 ; DEFAULT: ret
56 entry:
57   %a1 = load volatile i32* @a
58   %x1 = add i32 %a1,  %a1
59   %a2 = load volatile i32* @a
60   %x2 = add i32 %x1, %a2
61   %a3 = load volatile i32* @a
62   %x3 = add i32 %x2, %a3
63   %a4 = load volatile i32* @a
64   %x4 = add i32 %x3, %a4
65   %a5 = load volatile i32* @a
66   %x5 = add i32 %x4, %a5
67   %a6 = load volatile i32* @a
68   %x6 = add i32 %x5, %a6
69   %a7 = load volatile i32* @a
70   %x7 = add i32 %x6, %a6
71   %a8 = load volatile i32* @a
72   %x8 = add i32 %x7, %a8
73   %a9 = load volatile i32* @a
74   %x9 = add i32 %x8, %a9
75   %a10 = load volatile i32* @a
76   %x10 = add i32 %x9, %a10
77   %a11 = load volatile i32* @a
78   %x11 = add i32 %x10, %a11
79   %a12 = load volatile i32* @a
80   %x12 = add i32 %x11, %a12
81   %add = add i32 %x12, %a
82   ret i32 %add
83 }
84
85 ; This function should be larger than the default cold threshold (225).
86 define i32 @ColdFunction2(i32 %a) #1 {
87 ; CHECK-LABEL: @ColdFunction2
88 ; CHECK: ret
89 ; OVERRIDE-LABEL: @ColdFunction2
90 ; OVERRIDE: ret
91 ; DEFAULT-LABEL: @ColdFunction2
92 ; DEFAULT: ret
93 entry:
94   %a1 = load volatile i32* @a
95   %x1 = add i32 %a1,  %a1
96   %a2 = load volatile i32* @a
97   %x2 = add i32 %x1, %a2
98   %a3 = load volatile i32* @a
99   %x3 = add i32 %x2, %a3
100   %a4 = load volatile i32* @a
101   %x4 = add i32 %x3, %a4
102   %a5 = load volatile i32* @a
103   %x5 = add i32 %x4, %a5
104   %a6 = load volatile i32* @a
105   %x6 = add i32 %x5, %a6
106   %a7 = load volatile i32* @a
107   %x7 = add i32 %x6, %a7
108   %a8 = load volatile i32* @a
109   %x8 = add i32 %x7, %a8
110   %a9 = load volatile i32* @a
111   %x9 = add i32 %x8, %a9
112   %a10 = load volatile i32* @a
113   %x10 = add i32 %x9, %a10
114   %a11 = load volatile i32* @a
115   %x11 = add i32 %x10, %a11
116   %a12 = load volatile i32* @a
117   %x12 = add i32 %x11, %a12
118
119   %a21 = load volatile i32* @a
120   %x21 = add i32 %x12, %a21
121   %a22 = load volatile i32* @a
122   %x22 = add i32 %x21, %a22
123   %a23 = load volatile i32* @a
124   %x23 = add i32 %x22, %a23
125   %a24 = load volatile i32* @a
126   %x24 = add i32 %x23, %a24
127   %a25 = load volatile i32* @a
128   %x25 = add i32 %x24, %a25
129   %a26 = load volatile i32* @a
130   %x26 = add i32 %x25, %a26
131   %a27 = load volatile i32* @a
132   %x27 = add i32 %x26, %a27
133   %a28 = load volatile i32* @a
134   %x28 = add i32 %x27, %a28
135   %a29 = load volatile i32* @a
136   %x29 = add i32 %x28, %a29
137   %a30 = load volatile i32* @a
138   %x30 = add i32 %x29, %a30
139   %a31 = load volatile i32* @a
140   %x31 = add i32 %x30, %a31
141   %a32 = load volatile i32* @a
142   %x32 = add i32 %x31, %a32
143
144   %a41 = load volatile i32* @a
145   %x41 = add i32 %x32, %a41
146   %a42 = load volatile i32* @a
147   %x42 = add i32 %x41, %a42
148   %a43 = load volatile i32* @a
149   %x43 = add i32 %x42, %a43
150   %a44 = load volatile i32* @a
151   %x44 = add i32 %x43, %a44
152   %a45 = load volatile i32* @a
153   %x45 = add i32 %x44, %a45
154   %a46 = load volatile i32* @a
155   %x46 = add i32 %x45, %a46
156   %a47 = load volatile i32* @a
157   %x47 = add i32 %x46, %a47
158   %a48 = load volatile i32* @a
159   %x48 = add i32 %x47, %a48
160   %a49 = load volatile i32* @a
161   %x49 = add i32 %x48, %a49
162   %a50 = load volatile i32* @a
163   %x50 = add i32 %x49, %a50
164   %a51 = load volatile i32* @a
165   %x51 = add i32 %x50, %a51
166   %a52 = load volatile i32* @a
167   %x52 = add i32 %x51, %a52
168
169   %add = add i32 %x52, %a
170   ret i32 %add
171 }
172
173 ; Function Attrs: nounwind readnone uwtable
174 define i32 @bar(i32 %a) #0 {
175 ; CHECK-LABEL: @bar
176 ; CHECK: call i32 @ColdFunction(i32 5)
177 ; CHECK-NOT: call i32 @simpleFunction(i32 6)
178 ; CHECK: call i32 @ColdFunction2(i32 5)
179 ; CHECK: ret
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)
184 ; OVERRIDE: ret
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)
189 ; DEFAULT: ret
190 entry:
191   %0 = tail call i32 @ColdFunction(i32 5)
192   %1 = tail call i32 @simpleFunction(i32 6)
193   %2 = tail call i32 @ColdFunction2(i32 5)
194   %3 = add i32 %0, %1
195   %add = add i32 %2, %3
196   ret i32 %add
197 }
198
199 attributes #0 = { nounwind readnone uwtable }
200 attributes #1 = { nounwind cold readnone uwtable }