blob: 9a73130a65343d2dddee0151cdbfc3c0f23508ba [file] [log] [blame]
Chris Lattner65339302007-01-14 00:12:50 +00001; RUN: llvm-as < %s | llc -march=x86-64 -sched=none | grep leaq &&
2; RUN: llvm-as < %s | llc -march=x86-64 -sched=none | not grep ',%rsp)'
3; PR1103
4
5target datalayout = "e-p:64:64"
6target endian = little
7target pointersize = 64
8%i6000 = global [128 x i64] zeroinitializer, align 16
9
10implementation
11
12define void %foo(i32* %a0, i32* %a1, i32* %a2, i32* %a3, i32* %a4, i32* %a5) {
13b:
14 %r = load i32* %a0
15 %r2 = load i32* %a1
16 %r4 = load i32* %a2
17 %r6 = load i32* %a3
18 %r8 = load i32* %a4
19 %r14 = load i32* %a5
20 %r = sext i32 %r2 to i64
21 %r9 = sext i32 %r to i64
22 %r11 = add i64 %r, 0
23 %r = icmp slt i64 %r11, 0
24 %r12 = select i1 %r, i64 0, i64 %r11
25 %r16 = sext i32 %r14 to i64
26 %r17 = sext i32 %r8 to i64
27 %r18 = sub i64 %r16, 0
28 %r19 = add i64 %r18, 0
29 %r20 = icmp slt i64 %r19, 0
30 %r19h = add i64 %r18, 0
31 %r22 = select i1 %r20, i64 1, i64 %r19h
32 %r23 = mul i64 %r22, 0
33 %r23 = trunc i64 %r23 to i32
34 %r24 = shl i32 %r23, i8 0
35 %r25 = add i32 %r24, 0
36 %r = alloca i8, i32 %r25, align 16
37 %r28 = getelementptr i8* %r, i32 0
38 %r38 = shl i64 %r12, i8 0
39 %s2013 = add i64 %r38, 0
40 %c22012 = getelementptr i8* %r, i64 %s2013
41 %r42 = shl i64 %r12, i8 0
42 %s2011 = add i64 %r42, 16
43 %c22010 = getelementptr i8* %r, i64 %s2011
44 %r50 = add i64 %r16, 0
45 %r51 = icmp slt i64 %r50, 0
46 %r50sh = shl i64 %r50, i8 0
47 %r50j = add i64 %r50sh, 0
48 %r54 = select i1 %r51, i64 0, i64 %r50j
49 %r56 = mul i64 %r54, %r12
50 %r28s = add i64 %r56, 16
51 %c2 = getelementptr i8* %r, i64 %r28s
52 %r60 = sub i32 %r2, %r
53 %r61 = icmp slt i32 %r60, 0
54 br i1 %r61, label %a29b, label %b63
55a29b:
56 %r155 = sub i32 %r6, %r4
57 %r156 = icmp slt i32 %r155, 0
58 br i1 %r156, label %a109b, label %b158
59b63:
60 %r66 = sext i32 %r60 to i64
61 %r67 = add i64 %r66, 0
62 %r76 = mul i64 %r17, 0
63 %r82 = add i64 %r76, 0
64 %r84 = icmp slt i64 %r67, 0
65 br i1 %r84, label %b85, label %a25b
66b85:
67 %e641 = phi i64 [ 0, %b63 ], [ %r129, %a25b ]
68 %r137 = icmp slt i64 %e641, 0
69 br i1 %r137, label %a25b140q, label %a29b
70a25b140q:
71 br label %a25b140
72a25b:
73 %w1989 = phi i64 [ 0, %b63 ], [ %v1990, %a25b ]
74 %e642 = shl i64 %w1989, i8 0
75 %r129 = add i64 %e642, 0
76 %r132 = add i64 %e642, 0
77 %r134 = icmp slt i64 %r132, 0
78 %v1990 = add i64 %w1989, 0
79 br i1 %r134, label %b85, label %a25b
80a25b140:
81 %w1982 = phi i64 [ 0, %a25b140q ], [ %v1983, %a25b140 ]
82 %r145 = add i64 %r82, 0
83 %v1983 = add i64 %w1982, 0
84 %u1987 = icmp slt i64 %v1983, 0
85 br i1 %u1987, label %a29b, label %a25b140
86b158:
87 %r161 = sext i32 %r to i64
88 %r163 = sext i32 %r4 to i64
89 br label %a29b173
90a29b173:
91 %w1964 = phi i64 [ 0, %b158 ], [ %v1973, %b1606 ]
92 %b1974 = mul i64 %r163, 0
93 %b1975 = add i64 %r161, 0
94 %b1976 = mul i64 %w1964, 0
95 %b1977 = add i64 %b1976, 0
96 %s761 = bitcast i64 %b1977 to i64
97 %b1980 = mul i64 %w1964, 0
98 %s661 = add i64 %b1980, 0
99 br i1 %r61, label %a33b, label %b179
100a33b:
101 %r328 = icmp slt i32 %r14, 0
102 %r335 = or i1 %r328, %r61
103 br i1 %r335, label %a50b, label %b341
104b179:
105 %r182 = sext i32 %r60 to i64
106 %r183 = add i64 %r182, 0
107 %r187 = icmp slt i64 %r183, 0
108 br i1 %r187, label %b188, label %a30b
109b188:
110 %e653 = phi i64 [ 0, %b179 ], [ %r283, %a30b ]
111 %r291 = icmp slt i64 %e653, 0
112 br i1 %r291, label %a30b294q, label %a33b
113a30b294q:
114 br label %a30b294
115a30b:
116 %w = phi i64 [ 0, %b179 ], [ %v, %a30b ]
117 %b = shl i64 %w, i8 0
118 %r283 = add i64 %b, 0
119 %r286 = add i64 %b, 0
120 %r288 = icmp slt i64 %r286, 0
121 %v = add i64 %w, 0
122 br i1 %r288, label %b188, label %a30b
123a30b294:
124 %w1847 = phi i64 [ 0, %a30b294q ], [ %v1848, %a30b294 ]
125 %v1848 = add i64 %w1847, 0
126 %u = icmp slt i64 %v1848, 0
127 br i1 %u, label %a33b, label %a30b294
128a50b:
129 %r814 = add i32 %r14, 0
130 %r815 = icmp slt i32 %r814, 0
131 %r817 = or i1 %r61, %r815
132 br i1 %r817, label %a57b, label %b820
133b341:
134 %w1874 = phi i64 [ 0, %a33b ], [ %v1880, %b463 ]
135 %d753 = bitcast i64 %w1874 to i64
136 %r343 = add i64 %s661, 0
137 %r346 = add i64 %r343, 0
138 %r347 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r346
139 %r348 = load float* %r347
140 %r352 = add i64 %r343, 0
141 %r353 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r352
142 %r354 = load float* %r353
143 %r362 = load float* bitcast ([128 x i64]* %i6000 to float*)
144 %r363 = add float 0.000000e+00, %r362
145 %r370 = load float* bitcast ([128 x i64]* %i6000 to float*)
146 %r376 = icmp slt i64 %r16, 0
147 br i1 %r376, label %b377, label %a35b
148b377:
149 %d753p = phi i64 [ %d753, %b341 ], [ %r411, %a35b ]
150 %s761p = phi i64 [ %s761, %b341 ], [ 322, %a35b ]
151 %e784 = phi i64 [ 0, %b341 ], [ %r454, %a35b ]
152 %s794 = add i64 %d753p, 0
153 %r462 = icmp slt i64 %e784, 0
154 br i1 %r462, label %a35b465, label %b463
155a35b:
156 %w1865 = phi i64 [ 0, %b341 ], [ %v1866, %a35b ]
157 %e785 = shl i64 %w1865, i8 0
158 %b1877 = mul i64 %w1865, 0
159 %s795 = add i64 %b1877, 0
160 %r399 = add float %r354, 0.000000e+00
161 %r402 = add float %r370, 0.000000e+00
162 %r403 = add float %r348, 0.000000e+00
163 %r411 = add i64 %s795, 0
164 %r431 = add float %r362, 0.000000e+00
165 %r454 = add i64 %e785, 0
166 %r457 = add i64 %e785, 0
167 %r459 = icmp slt i64 %r457, 0
168 %v1866 = add i64 %w1865, 0
169 br i1 %r459, label %b377, label %a35b
170b463:
171 %r506 = add i64 %d753, 0
172 %r511 = sext i32 %r60 to i64
173 %r512 = add i64 %r511, 0
174 %r513 = icmp slt i64 %r506, 0
175 %v1880 = add i64 %w1874, 0
176 br i1 %r513, label %b341, label %b514
177a35b465:
178 %r469 = add i64 %s794, 0
179 br label %b463
180b514:
181 %r525 = mul i64 %r17, 0
182 %r533 = add i64 %r525, 0
183 br label %b535
184b535:
185 %w1855 = phi i64 [ 0, %b514 ], [ %v1856, %b712 ]
186 %s923 = phi i64 [ 0, %b514 ], [ %r799, %b712 ]
187 %s933 = phi i64 [ %r533, %b514 ], [ %r795, %b712 ]
188 %r538 = add i64 %w1855, 0
189 %r539 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r538
190 %r540 = load float* %r539
191 %r551 = load float* bitcast ([128 x i64]* %i6000 to float*)
192 %r562 = sub i64 %s933, 0
193 %r564 = icmp slt i64 %r512, 0
194 br i1 %r564, label %b565, label %a45b
195b565:
196 %e944 = phi i64 [ 0, %b535 ], [ %r703, %a45b ]
197 %r711 = icmp slt i64 %e944, 0
198 br i1 %r711, label %a45b714, label %b712
199a45b:
200 %w1852 = phi i64 [ 0, %b535 ], [ %v1853, %a45b ]
201 %e945 = shl i64 %w1852, i8 0
202 %r609 = add i64 %r562, 0
203 %r703 = add i64 %e945, 0
204 %r706 = add i64 %e945, 0
205 %r708 = icmp slt i64 %r706, 0
206 %v1853 = add i64 %w1852, 0
207 br i1 %r708, label %b565, label %a45b
208b712:
209 %r795 = add i64 %r, 0
210 %r799 = add i64 %s923, 0
211 %r802 = add i64 %w1855, 0
212 %r807 = icmp slt i64 %r802, 0
213 %v1856 = add i64 %w1855, 0
214 br i1 %r807, label %b535, label %a50b
215a45b714:
216 %r717 = add i64 %e944, 0
217 %r720 = add i64 %r717, 0
218 %r721 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r720
219 %r722 = load float* %r721
220 %r726 = add i64 %r717, 0
221 %r727 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r726
222 %r728 = load float* %r727
223 %r732 = add i64 %r717, 0
224 %r733 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r732
225 %r734 = load float* %r733
226 %r738 = add i64 %r717, 0
227 %r739 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r738
228 %r740 = load float* %r739
229 %r744 = add i64 %r717, 0
230 %r745 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r744
231 %r746 = load float* %r745
232 %r750 = add i64 %r717, 0
233 %r751 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r750
234 %r752 = load float* %r751
235 %r753 = add float %r752, %r746
236 %r754 = add float %r728, %r722
237 %r755 = add float %r734, %r754
238 %r756 = add float %r755, %r740
239 %r757 = add float %r753, %r756
240 %r759 = add float %r757, %r540
241 %r770 = add i64 %r717, 0
242 %r771 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r770
243 %r772 = load float* %r771
244 %r776 = add i64 %r717, 0
245 %r777 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r776
246 %r778 = load float* %r777
247 %r781 = add float %r363, %r772
248 %r782 = add float %r781, %r778
249 %r783 = add float %r551, %r782
250 br label %b712
251a57b:
252 br i1 %r335, label %a66b, label %b1086
253b820:
254 %r823 = sext i32 %r2 to i64
255 %r834 = sext i32 %r8 to i64
256 %r844 = add i64 %r16, 0
257 %r846 = sext i32 %r60 to i64
258 %r847 = add i64 %r846, 0
259 %r851 = load float* bitcast ([128 x i64]* %i6000 to float*)
260 %r856 = sub i64 %r, 0
261 br label %b858
262b858:
263 %w1891 = phi i64 [ 0, %b820 ], [ %v1892, %b1016 ]
264 %s1193 = phi i64 [ 0, %b820 ], [ %r1068, %b1016 ]
265 %b1894 = mul i64 %r834, 0
266 %b1896 = shl i64 %r823, i8 0
267 %b1902 = mul i64 %w1891, 0
268 %s1173 = add i64 %b1902, 0
269 %r859 = add i64 %r856, 0
270 %r862 = add i64 %w1891, 0
271 %r863 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r862
272 %r864 = load float* %r863
273 %r868 = add i64 %w1891, 0
274 %r869 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r868
275 %r870 = load float* %r869
276 %r873 = sub i64 %r859, 0
277 %r876 = sub i64 %s1173, 0
278 %r878 = icmp slt i64 %r847, 0
279 br i1 %r878, label %b879, label %a53b
280b879:
281 %e1204 = phi i64 [ 0, %b858 ], [ %r1007, %a53b ]
282 %r1015 = icmp slt i64 %e1204, 0
283 br i1 %r1015, label %a53b1019q, label %b1016
284a53b1019q:
285 %b1888 = sub i64 %r846, 0
286 %b1889 = add i64 %b1888, 0
287 br label %a53b1019
288a53b:
289 %w1881 = phi i64 [ 0, %b858 ], [ %v1882, %a53b ]
290 %e1205 = shl i64 %w1881, i8 0
291 %r1007 = add i64 %e1205, 0
292 %r1010 = add i64 %e1205, 0
293 %r1012 = icmp slt i64 %r1010, 0
294 %v1882 = add i64 %w1881, 0
295 br i1 %r1012, label %b879, label %a53b
296b1016:
297 %r1068 = add i64 %s1193, 0
298 %r1071 = add i64 %w1891, 0
299 %r1073 = icmp slt i64 %r1071, %r844
300 %v1892 = add i64 %w1891, 0
301 br i1 %r1073, label %b858, label %a57b
302a53b1019:
303 %w1885 = phi i64 [ 0, %a53b1019q ], [ %v1886, %a53b1019 ]
304 %r1022 = add i64 %r876, 0
305 %r1024 = bitcast i8* %c2 to float*
306 %r1025 = add i64 %r1022, 0
307 %r1026 = getelementptr float* %r1024, i64 %r1025
308 %r1027 = load float* %r1026
309 %r1032 = add i64 %r873, 0
310 %r1033 = add i64 %r1032, 0
311 %r1034 = getelementptr float* %r1024, i64 %r1033
312 %r1035 = load float* %r1034
313 %r1037 = bitcast i8* %c22010 to float*
314 %r1040 = getelementptr float* %r1037, i64 %r1025
315 %r1044 = add float %r864, %r1035
316 %r1046 = add float %r870, %r1027
317 %r1047 = add float %r1044, %r1046
318 %r1048 = add float %r851, %r1047
319 %v1886 = add i64 %w1885, 0
320 %u1890 = icmp slt i64 %v1886, %b1889
321 br i1 %u1890, label %b1016, label %a53b1019
322a66b:
323 br i1 %r817, label %a93b, label %b1321
324b1086:
325 %r1089 = sext i32 %r2 to i64
326 %r1090 = add i64 %r, 0
327 %r1096 = mul i64 %r9, 0
328 %r1101 = sext i32 %r8 to i64
329 %r1104 = add i64 %r1096, 0
330 %r1108 = sub i64 %r1104, 0
331 %r1110 = sext i32 %r60 to i64
332 %r1111 = add i64 %r1110, 0
333 %r1113 = sext i32 %r14 to i64
334 %r1114 = add i64 %r16, 0
335 br label %b1117
336b1117:
337 %w1915 = phi i64 [ 0, %b1086 ], [ %v1957, %b1263 ]
338 %d1353 = bitcast i64 %w1915 to i64
339 %r1120 = add i64 %s661, 0
340 %r1121 = add i64 %r1120, 0
341 %r1122 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r1121
342 %r1123 = load float* %r1122
343 %r1132 = bitcast i8* %c22012 to float*
344 %r1134 = getelementptr float* %r1132, i64 %w1915
345 %r1135 = load float* %r1134
346 %r1136 = add float %r1123, %r1135
347 %r1138 = icmp slt i64 %r1114, 0
348 br i1 %r1138, label %b1139, label %a63b
349b1139:
350 %e1364 = phi i64 [ 0, %b1117 ], [ %r1254, %a63b ]
351 %p1998 = phi i64 [ %s761, %b1117 ], [ %r1216, %a63b ]
352 %r1108p = phi i64 [ %r1108, %b1117 ], [ %r1219, %a63b ]
353 %p2004 = phi i64 [ %d1353, %b1117 ], [ %r1090, %a63b ]
354 %s1374 = phi i64 [ 0, %b1117 ], [ %r1251, %a63b ]
355 %s1384 = add i64 %r1108p, 0
356 %s1394 = add i64 %p1998, 0
357 %r1262 = icmp slt i64 %e1364, %r1114
358 br i1 %r1262, label %a63b1266q, label %b1263
359a63b1266q:
360 %b1947 = sub i64 %r1113, 0
361 %b1948 = add i64 %b1947, 0
362 br label %a63b1266
363a63b:
364 %w1904 = phi i64 [ 0, %b1117 ], [ %v1905, %a63b ]
365 %s1375 = phi i64 [ 0, %b1117 ], [ %r1251, %a63b ]
366 %b1906 = add i64 %r1089, 0
367 %b1907 = mul i64 %r1101, 0
368 %b1929 = mul i64 %w1904, 0
369 %s1395 = add i64 %b1929, 0
370 %e1365 = shl i64 %w1904, i8 0
371 %r1163 = add i64 %r1090, 0
372 %r1167 = add i64 %s1375, 0
373 %r1191 = add i64 %r1163, 0
374 %r1195 = add i64 %r1167, 0
375 %r1216 = add i64 %s1395, 0
376 %r1219 = add i64 %r1191, 0
377 %r1223 = add i64 %r1195, 0
378 %r1251 = add i64 %r1223, 0
379 %r1254 = add i64 %e1365, 0
380 %r1257 = add i64 %e1365, 0
381 %r1259 = icmp slt i64 %r1257, %r1114
382 %v1905 = add i64 %w1904, 0
383 br i1 %r1259, label %b1139, label %a63b
384b1263:
385 %r1306 = add i64 %d1353, 0
386 %r1308 = icmp slt i64 %r1306, %r1111
387 %v1957 = add i64 %w1915, 0
388 br i1 %r1308, label %b1117, label %a66b
389a63b1266:
390 %w1944 = phi i64 [ 0, %a63b1266q ], [ %v1945, %a63b1266 ]
391 %s1377 = phi i64 [ %s1374, %a63b1266q ], [ %r1297, %a63b1266 ]
392 %r1282 = add float %r1136, 0.000000e+00
393 %r1297 = add i64 %s1377, 0
394 %v1945 = add i64 %w1944, 0
395 %u1949 = icmp slt i64 %v1945, %b1948
396 br i1 %u1949, label %b1263, label %a63b1266
397a93b:
398 br i1 %r61, label %b1606, label %a97b
399b1321:
400 %r1331 = mul i64 %r17, 0
401 %r1339 = add i64 %r1331, 0
402 br label %b1342
403b1342:
404 %w1960 = phi i64 [ 0, %b1321 ], [ %v1961, %b1582 ]
405 %s1523 = phi i64 [ %r1339, %b1321 ], [ %r1587, %b1582 ]
406 %s1563 = phi i64 [ 0, %b1321 ], [ %r1591, %b1582 ]
407 %d1533 = bitcast i64 %w1960 to i64
408 %b1968 = mul i64 %w1960, 0
409 %s1543 = add i64 %b1968, 0
410 %r1345 = add i64 %s1523, 0
411 %r1348 = sub i64 %r1345, 0
412 %r1352 = add i64 %s1523, 0
413 %r1355 = sub i64 %r1352, 0
414 %r1370 = add i64 %d1533, 0
415 %r1371 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r1370
416 %r1372 = load float* %r1371
417 br label %a74b
418a74b:
419 %w1958 = phi i64 [ 0, %b1342 ], [ %v1959, %a74b ]
420 %r1379 = add i64 %s1543, 0
421 %r1403 = add i64 %r1355, 0
422 %r1422 = add i64 %r1348, 0
423 %r1526 = add float %r1372, 0.000000e+00
424 %r1573 = add i64 %w1958, 0
425 %r1581 = icmp slt i64 %r1573, 0
426 %v1959 = add i64 %w1958, 0
427 br i1 %r1581, label %a74b, label %b1582
428b1582:
429 %r1587 = add i64 %r, 0
430 %r1591 = add i64 %s1563, 0
431 %r1596 = add i64 %d1533, 0
432 %r1601 = icmp slt i64 %r1596, 0
433 %v1961 = add i64 %w1960, 0
434 br i1 %r1601, label %b1342, label %a93b
435b1606:
436 %r1833 = add i64 %w1964, 0
437 %r1840 = icmp slt i64 %r1833, 0
438 %v1973 = add i64 %w1964, 0
439 br i1 %r1840, label %a29b173, label %a109b
440a97b:
441 %w1970 = phi i64 [ 0, %a93b ], [ %v1971, %a97b ]
442 %r1613 = add i64 %w1964, 0
443 %r1614 = mul i64 %r1613, 0
444 %r1622 = add i64 %r1614, 0
445 %r1754 = bitcast i8* %r28 to float*
446 %r1756 = getelementptr float* %r1754, i64 %w1970
447 %r1757 = load float* %r1756
448 %r1761 = add i64 %r1622, 0
449 %r1762 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r1761
450 %r1763 = load float* %r1762
451 %r1767 = add i64 %r1622, 0
452 %r1768 = getelementptr float* bitcast ([128 x i64]* %i6000 to float*), i64 %r1767
453 %r1772 = add float %r1763, 0.000000e+00
454 %r1773 = add float %r1772, 0.000000e+00
455 %r1809 = add float %r1757, 0.000000e+00
456 %r1810 = add float %r1773, %r1809
457 store float %r1810, float* %r1768
458 %r1818 = add i64 %w1970, 0
459 %r1826 = icmp slt i64 %r1818, 0
460 %v1971 = add i64 %w1970, 0
461 br i1 %r1826, label %a97b, label %b1606
462a109b:
463 ret void
464}