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