blob: 68c51b43fc3acb7167e60107eb84fe1e4bf07323 [file] [log] [blame]
John McCalldcb9a7a2010-02-28 02:51:25 +00001; RUN: opt < %s -simplifycfg -instcombine -S | grep 0x7FF8000000000000 | count 12
Chandler Carrutha5a29f92012-07-02 12:47:22 +00002; RUN: opt < %s -simplifycfg -instcombine -S | grep "0\.0" | count 3
3; RUN: opt < %s -simplifycfg -instcombine -S | grep "3\.5" | count 1
Dale Johannesen1f864982009-01-21 20:32:55 +00004;
Dale Johannesenb5721632009-01-21 00:35:19 +00005
6; ModuleID = 'apf.c'
7target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
8target triple = "i386-apple-darwin9.6"
9@"\01LC" = internal constant [4 x i8] c"%f\0A\00" ; <[4 x i8]*> [#uses=1]
10
11define void @foo1() nounwind {
12entry:
13 %y = alloca float ; <float*> [#uses=2]
14 %x = alloca float ; <float*> [#uses=2]
15 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
16 store float 0x7FF0000000000000, float* %x, align 4
17 store float 0x7FF8000000000000, float* %y, align 4
18 %0 = load float* %y, align 4 ; <float> [#uses=1]
19 %1 = fpext float %0 to double ; <double> [#uses=1]
20 %2 = load float* %x, align 4 ; <float> [#uses=1]
21 %3 = fpext float %2 to double ; <double> [#uses=1]
22 %4 = frem double %3, %1 ; <double> [#uses=1]
23 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
24 br label %return
25
26return: ; preds = %entry
27 ret void
28}
29
30declare i32 @printf(i8*, ...) nounwind
31
32define void @foo2() nounwind {
33entry:
34 %y = alloca float ; <float*> [#uses=2]
35 %x = alloca float ; <float*> [#uses=2]
36 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
37 store float 0x7FF0000000000000, float* %x, align 4
38 store float 0.000000e+00, float* %y, align 4
39 %0 = load float* %y, align 4 ; <float> [#uses=1]
40 %1 = fpext float %0 to double ; <double> [#uses=1]
41 %2 = load float* %x, align 4 ; <float> [#uses=1]
42 %3 = fpext float %2 to double ; <double> [#uses=1]
43 %4 = frem double %3, %1 ; <double> [#uses=1]
44 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
45 br label %return
46
47return: ; preds = %entry
48 ret void
49}
50
51define void @foo3() nounwind {
52entry:
53 %y = alloca float ; <float*> [#uses=2]
54 %x = alloca float ; <float*> [#uses=2]
55 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
56 store float 0x7FF0000000000000, float* %x, align 4
57 store float 3.500000e+00, float* %y, align 4
58 %0 = load float* %y, align 4 ; <float> [#uses=1]
59 %1 = fpext float %0 to double ; <double> [#uses=1]
60 %2 = load float* %x, align 4 ; <float> [#uses=1]
61 %3 = fpext float %2 to double ; <double> [#uses=1]
62 %4 = frem double %3, %1 ; <double> [#uses=1]
63 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
64 br label %return
65
66return: ; preds = %entry
67 ret void
68}
69
70define void @foo4() nounwind {
71entry:
72 %y = alloca float ; <float*> [#uses=2]
73 %x = alloca float ; <float*> [#uses=2]
74 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
75 store float 0x7FF0000000000000, float* %x, align 4
76 store float 0x7FF0000000000000, float* %y, align 4
77 %0 = load float* %y, align 4 ; <float> [#uses=1]
78 %1 = fpext float %0 to double ; <double> [#uses=1]
79 %2 = load float* %x, align 4 ; <float> [#uses=1]
80 %3 = fpext float %2 to double ; <double> [#uses=1]
81 %4 = frem double %3, %1 ; <double> [#uses=1]
82 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
83 br label %return
84
85return: ; preds = %entry
86 ret void
87}
88
89define void @foo5() nounwind {
90entry:
91 %y = alloca float ; <float*> [#uses=2]
92 %x = alloca float ; <float*> [#uses=2]
93 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
94 store float 0x7FF8000000000000, float* %x, align 4
95 store float 0x7FF0000000000000, float* %y, align 4
96 %0 = load float* %y, align 4 ; <float> [#uses=1]
97 %1 = fpext float %0 to double ; <double> [#uses=1]
98 %2 = load float* %x, align 4 ; <float> [#uses=1]
99 %3 = fpext float %2 to double ; <double> [#uses=1]
100 %4 = frem double %3, %1 ; <double> [#uses=1]
101 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
102 br label %return
103
104return: ; preds = %entry
105 ret void
106}
107
108define void @foo6() nounwind {
109entry:
110 %y = alloca float ; <float*> [#uses=2]
111 %x = alloca float ; <float*> [#uses=2]
112 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
113 store float 0x7FF8000000000000, float* %x, align 4
114 store float 0.000000e+00, float* %y, align 4
115 %0 = load float* %y, align 4 ; <float> [#uses=1]
116 %1 = fpext float %0 to double ; <double> [#uses=1]
117 %2 = load float* %x, align 4 ; <float> [#uses=1]
118 %3 = fpext float %2 to double ; <double> [#uses=1]
119 %4 = frem double %3, %1 ; <double> [#uses=1]
120 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
121 br label %return
122
123return: ; preds = %entry
124 ret void
125}
126
127define void @foo7() nounwind {
128entry:
129 %y = alloca float ; <float*> [#uses=2]
130 %x = alloca float ; <float*> [#uses=2]
131 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
132 store float 0x7FF8000000000000, float* %x, align 4
133 store float 3.500000e+00, float* %y, align 4
134 %0 = load float* %y, align 4 ; <float> [#uses=1]
135 %1 = fpext float %0 to double ; <double> [#uses=1]
136 %2 = load float* %x, align 4 ; <float> [#uses=1]
137 %3 = fpext float %2 to double ; <double> [#uses=1]
138 %4 = frem double %3, %1 ; <double> [#uses=1]
139 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
140 br label %return
141
142return: ; preds = %entry
143 ret void
144}
145
146define void @foo8() nounwind {
147entry:
148 %y = alloca float ; <float*> [#uses=2]
149 %x = alloca float ; <float*> [#uses=2]
150 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
151 store float 0x7FF8000000000000, float* %x, align 4
152 store float 0x7FF8000000000000, float* %y, align 4
153 %0 = load float* %y, align 4 ; <float> [#uses=1]
154 %1 = fpext float %0 to double ; <double> [#uses=1]
155 %2 = load float* %x, align 4 ; <float> [#uses=1]
156 %3 = fpext float %2 to double ; <double> [#uses=1]
157 %4 = frem double %3, %1 ; <double> [#uses=1]
158 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
159 br label %return
160
161return: ; preds = %entry
162 ret void
163}
164
165define void @foo9() nounwind {
166entry:
167 %y = alloca float ; <float*> [#uses=2]
168 %x = alloca float ; <float*> [#uses=2]
169 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
170 store float 0.000000e+00, float* %x, align 4
171 store float 0x7FF8000000000000, float* %y, align 4
172 %0 = load float* %y, align 4 ; <float> [#uses=1]
173 %1 = fpext float %0 to double ; <double> [#uses=1]
174 %2 = load float* %x, align 4 ; <float> [#uses=1]
175 %3 = fpext float %2 to double ; <double> [#uses=1]
176 %4 = frem double %3, %1 ; <double> [#uses=1]
177 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
178 br label %return
179
180return: ; preds = %entry
181 ret void
182}
183
184define void @foo10() nounwind {
185entry:
186 %y = alloca float ; <float*> [#uses=2]
187 %x = alloca float ; <float*> [#uses=2]
188 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
189 store float 0.000000e+00, float* %x, align 4
190 store float 0x7FF0000000000000, float* %y, align 4
191 %0 = load float* %y, align 4 ; <float> [#uses=1]
192 %1 = fpext float %0 to double ; <double> [#uses=1]
193 %2 = load float* %x, align 4 ; <float> [#uses=1]
194 %3 = fpext float %2 to double ; <double> [#uses=1]
195 %4 = frem double %3, %1 ; <double> [#uses=1]
196 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
197 br label %return
198
199return: ; preds = %entry
200 ret void
201}
202
203define void @foo11() nounwind {
204entry:
205 %y = alloca float ; <float*> [#uses=2]
206 %x = alloca float ; <float*> [#uses=2]
207 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
208 store float 0.000000e+00, float* %x, align 4
209 store float 0.000000e+00, float* %y, align 4
210 %0 = load float* %y, align 4 ; <float> [#uses=1]
211 %1 = fpext float %0 to double ; <double> [#uses=1]
212 %2 = load float* %x, align 4 ; <float> [#uses=1]
213 %3 = fpext float %2 to double ; <double> [#uses=1]
214 %4 = frem double %3, %1 ; <double> [#uses=1]
215 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
216 br label %return
217
218return: ; preds = %entry
219 ret void
220}
221
222define void @foo12() nounwind {
223entry:
224 %y = alloca float ; <float*> [#uses=2]
225 %x = alloca float ; <float*> [#uses=2]
226 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
227 store float 0.000000e+00, float* %x, align 4
228 store float 3.500000e+00, float* %y, align 4
229 %0 = load float* %y, align 4 ; <float> [#uses=1]
230 %1 = fpext float %0 to double ; <double> [#uses=1]
231 %2 = load float* %x, align 4 ; <float> [#uses=1]
232 %3 = fpext float %2 to double ; <double> [#uses=1]
233 %4 = frem double %3, %1 ; <double> [#uses=1]
234 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
235 br label %return
236
237return: ; preds = %entry
238 ret void
239}
240
241define void @foo13() nounwind {
242entry:
243 %y = alloca float ; <float*> [#uses=2]
244 %x = alloca float ; <float*> [#uses=2]
245 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
246 store float 3.500000e+00, float* %x, align 4
247 store float 0x7FF8000000000000, float* %y, align 4
248 %0 = load float* %y, align 4 ; <float> [#uses=1]
249 %1 = fpext float %0 to double ; <double> [#uses=1]
250 %2 = load float* %x, align 4 ; <float> [#uses=1]
251 %3 = fpext float %2 to double ; <double> [#uses=1]
252 %4 = frem double %3, %1 ; <double> [#uses=1]
253 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
254 br label %return
255
256return: ; preds = %entry
257 ret void
258}
259
260define void @foo14() nounwind {
261entry:
262 %y = alloca float ; <float*> [#uses=2]
263 %x = alloca float ; <float*> [#uses=2]
264 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
265 store float 3.500000e+00, float* %x, align 4
266 store float 0x7FF0000000000000, float* %y, align 4
267 %0 = load float* %y, align 4 ; <float> [#uses=1]
268 %1 = fpext float %0 to double ; <double> [#uses=1]
269 %2 = load float* %x, align 4 ; <float> [#uses=1]
270 %3 = fpext float %2 to double ; <double> [#uses=1]
271 %4 = frem double %3, %1 ; <double> [#uses=1]
272 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
273 br label %return
274
275return: ; preds = %entry
276 ret void
277}
278
279define void @foo15() nounwind {
280entry:
281 %y = alloca float ; <float*> [#uses=2]
282 %x = alloca float ; <float*> [#uses=2]
283 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
284 store float 3.500000e+00, float* %x, align 4
285 store float 0.000000e+00, float* %y, align 4
286 %0 = load float* %y, align 4 ; <float> [#uses=1]
287 %1 = fpext float %0 to double ; <double> [#uses=1]
288 %2 = load float* %x, align 4 ; <float> [#uses=1]
289 %3 = fpext float %2 to double ; <double> [#uses=1]
290 %4 = frem double %3, %1 ; <double> [#uses=1]
291 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
292 br label %return
293
294return: ; preds = %entry
295 ret void
296}
297
298define void @foo16() nounwind {
299entry:
300 %y = alloca float ; <float*> [#uses=2]
301 %x = alloca float ; <float*> [#uses=2]
302 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
303 store float 3.500000e+00, float* %x, align 4
304 store float 3.500000e+00, float* %y, align 4
305 %0 = load float* %y, align 4 ; <float> [#uses=1]
306 %1 = fpext float %0 to double ; <double> [#uses=1]
307 %2 = load float* %x, align 4 ; <float> [#uses=1]
308 %3 = fpext float %2 to double ; <double> [#uses=1]
309 %4 = frem double %3, %1 ; <double> [#uses=1]
310 %5 = call i32 (i8*, ...)* @printf(i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0]
311 br label %return
312
313return: ; preds = %entry
314 ret void
315}