1; RUN: opt < %s -simplifycfg -instcombine -S | grep 0x7FF8000000000000 | count 12
2; RUN: opt < %s -simplifycfg -instcombine -S | grep "0\.0" | count 3
3; RUN: opt < %s -simplifycfg -instcombine -S | grep "3\.5" | count 1
4;
5
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, float* %y, align 4		; <float> [#uses=1]
19	%1 = fpext float %0 to double		; <double> [#uses=1]
20	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
40	%1 = fpext float %0 to double		; <double> [#uses=1]
41	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
59	%1 = fpext float %0 to double		; <double> [#uses=1]
60	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
78	%1 = fpext float %0 to double		; <double> [#uses=1]
79	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
97	%1 = fpext float %0 to double		; <double> [#uses=1]
98	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
116	%1 = fpext float %0 to double		; <double> [#uses=1]
117	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
135	%1 = fpext float %0 to double		; <double> [#uses=1]
136	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
154	%1 = fpext float %0 to double		; <double> [#uses=1]
155	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
173	%1 = fpext float %0 to double		; <double> [#uses=1]
174	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
192	%1 = fpext float %0 to double		; <double> [#uses=1]
193	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
211	%1 = fpext float %0 to double		; <double> [#uses=1]
212	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
230	%1 = fpext float %0 to double		; <double> [#uses=1]
231	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
249	%1 = fpext float %0 to double		; <double> [#uses=1]
250	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
268	%1 = fpext float %0 to double		; <double> [#uses=1]
269	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
287	%1 = fpext float %0 to double		; <double> [#uses=1]
288	%2 = load float, 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], [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, float* %y, align 4		; <float> [#uses=1]
306	%1 = fpext float %0 to double		; <double> [#uses=1]
307	%2 = load float, 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], [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}
316