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