comparison test/CodeGen/X86/abi-isel.ll @ 95:afa8332a0e37 LLVM3.8

LLVM 3.8
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 13 Oct 2015 17:48:58 +0900
parents 95c75e76d11b
children 1172e4bd9c6f
comparison
equal deleted inserted replaced
84:f3e34b893a5f 95:afa8332a0e37
31 @dxsrc = global [32 x i32] zeroinitializer, align 32 31 @dxsrc = global [32 x i32] zeroinitializer, align 32
32 @dxdst = global [32 x i32] zeroinitializer, align 32 32 @dxdst = global [32 x i32] zeroinitializer, align 32
33 33
34 define void @foo00() nounwind { 34 define void @foo00() nounwind {
35 entry: 35 entry:
36 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4 36 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
37 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4 37 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 0), align 4
38 ret void 38 ret void
39 39
40 ; LINUX-64-STATIC-LABEL: foo00: 40 ; LINUX-64-STATIC-LABEL: foo00:
41 ; LINUX-64-STATIC: movl src(%rip), [[EAX:%e.x]] 41 ; LINUX-64-STATIC: movl src(%rip), [[EAX:%e.x]]
42 ; LINUX-64-STATIC: movl [[EAX]], dst 42 ; LINUX-64-STATIC: movl [[EAX]], dst
103 ; DARWIN-64-PIC-NEXT: ret 103 ; DARWIN-64-PIC-NEXT: ret
104 } 104 }
105 105
106 define void @fxo00() nounwind { 106 define void @fxo00() nounwind {
107 entry: 107 entry:
108 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4 108 %0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
109 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4 109 store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 0), align 4
110 ret void 110 ret void
111 111
112 ; LINUX-64-STATIC-LABEL: fxo00: 112 ; LINUX-64-STATIC-LABEL: fxo00:
113 ; LINUX-64-STATIC: movl xsrc(%rip), [[EAX:%e.x]] 113 ; LINUX-64-STATIC: movl xsrc(%rip), [[EAX:%e.x]]
114 ; LINUX-64-STATIC: movl [[EAX]], xdst 114 ; LINUX-64-STATIC: movl [[EAX]], xdst
175 ; DARWIN-64-PIC-NEXT: ret 175 ; DARWIN-64-PIC-NEXT: ret
176 } 176 }
177 177
178 define void @foo01() nounwind { 178 define void @foo01() nounwind {
179 entry: 179 entry:
180 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8 180 store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
181 ret void 181 ret void
182 ; LINUX-64-STATIC-LABEL: foo01: 182 ; LINUX-64-STATIC-LABEL: foo01:
183 ; LINUX-64-STATIC: movq $dst, ptr 183 ; LINUX-64-STATIC: movq $dst, ptr
184 ; LINUX-64-STATIC: ret 184 ; LINUX-64-STATIC: ret
185 185
235 ; DARWIN-64-PIC-NEXT: ret 235 ; DARWIN-64-PIC-NEXT: ret
236 } 236 }
237 237
238 define void @fxo01() nounwind { 238 define void @fxo01() nounwind {
239 entry: 239 entry:
240 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8 240 store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
241 ret void 241 ret void
242 ; LINUX-64-STATIC-LABEL: fxo01: 242 ; LINUX-64-STATIC-LABEL: fxo01:
243 ; LINUX-64-STATIC: movq $xdst, ptr 243 ; LINUX-64-STATIC: movq $xdst, ptr
244 ; LINUX-64-STATIC: ret 244 ; LINUX-64-STATIC: ret
245 245
295 ; DARWIN-64-PIC-NEXT: ret 295 ; DARWIN-64-PIC-NEXT: ret
296 } 296 }
297 297
298 define void @foo02() nounwind { 298 define void @foo02() nounwind {
299 entry: 299 entry:
300 %0 = load i32** @ptr, align 8 300 %0 = load i32*, i32** @ptr, align 8
301 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4 301 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
302 store i32 %1, i32* %0, align 4 302 store i32 %1, i32* %0, align 4
303 ret void 303 ret void
304 ; LINUX-64-STATIC-LABEL: foo02: 304 ; LINUX-64-STATIC-LABEL: foo02:
305 ; LINUX-64-STATIC: movl src(%rip), % 305 ; LINUX-64-STATIC: movl src(%rip), %
306 ; LINUX-64-STATIC: movq ptr(%rip), % 306 ; LINUX-64-STATIC: movq ptr(%rip), %
377 ; DARWIN-64-PIC-NEXT: ret 377 ; DARWIN-64-PIC-NEXT: ret
378 } 378 }
379 379
380 define void @fxo02() nounwind { 380 define void @fxo02() nounwind {
381 entry: 381 entry:
382 %0 = load i32** @ptr, align 8 382 %0 = load i32*, i32** @ptr, align 8
383 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4 383 %1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
384 store i32 %1, i32* %0, align 4 384 store i32 %1, i32* %0, align 4
385 ; LINUX-64-STATIC-LABEL: fxo02: 385 ; LINUX-64-STATIC-LABEL: fxo02:
386 ; LINUX-64-STATIC: movl xsrc(%rip), % 386 ; LINUX-64-STATIC: movl xsrc(%rip), %
387 ; LINUX-64-STATIC: movq ptr(%rip), % 387 ; LINUX-64-STATIC: movq ptr(%rip), %
388 ; LINUX-64-STATIC: movl 388 ; LINUX-64-STATIC: movl
459 ; DARWIN-64-PIC-NEXT: ret 459 ; DARWIN-64-PIC-NEXT: ret
460 } 460 }
461 461
462 define void @foo03() nounwind { 462 define void @foo03() nounwind {
463 entry: 463 entry:
464 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32 464 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
465 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32 465 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 0), align 32
466 ret void 466 ret void
467 ; LINUX-64-STATIC-LABEL: foo03: 467 ; LINUX-64-STATIC-LABEL: foo03:
468 ; LINUX-64-STATIC: movl dsrc(%rip), [[EAX:%e.x]] 468 ; LINUX-64-STATIC: movl dsrc(%rip), [[EAX:%e.x]]
469 ; LINUX-64-STATIC: movl [[EAX]], ddst 469 ; LINUX-64-STATIC: movl [[EAX]], ddst
470 ; LINUX-64-STATIC: ret 470 ; LINUX-64-STATIC: ret
520 ; DARWIN-64-PIC-NEXT: ret 520 ; DARWIN-64-PIC-NEXT: ret
521 } 521 }
522 522
523 define void @foo04() nounwind { 523 define void @foo04() nounwind {
524 entry: 524 entry:
525 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8 525 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
526 ret void 526 ret void
527 ; LINUX-64-STATIC-LABEL: foo04: 527 ; LINUX-64-STATIC-LABEL: foo04:
528 ; LINUX-64-STATIC: movq $ddst, dptr 528 ; LINUX-64-STATIC: movq $ddst, dptr
529 ; LINUX-64-STATIC: ret 529 ; LINUX-64-STATIC: ret
530 530
574 ; DARWIN-64-PIC-NEXT: ret 574 ; DARWIN-64-PIC-NEXT: ret
575 } 575 }
576 576
577 define void @foo05() nounwind { 577 define void @foo05() nounwind {
578 entry: 578 entry:
579 %0 = load i32** @dptr, align 8 579 %0 = load i32*, i32** @dptr, align 8
580 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32 580 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
581 store i32 %1, i32* %0, align 4 581 store i32 %1, i32* %0, align 4
582 ret void 582 ret void
583 ; LINUX-64-STATIC-LABEL: foo05: 583 ; LINUX-64-STATIC-LABEL: foo05:
584 ; LINUX-64-STATIC: movl dsrc(%rip), % 584 ; LINUX-64-STATIC: movl dsrc(%rip), %
585 ; LINUX-64-STATIC: movq dptr(%rip), % 585 ; LINUX-64-STATIC: movq dptr(%rip), %
646 ; DARWIN-64-PIC-NEXT: ret 646 ; DARWIN-64-PIC-NEXT: ret
647 } 647 }
648 648
649 define void @foo06() nounwind { 649 define void @foo06() nounwind {
650 entry: 650 entry:
651 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4 651 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
652 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4 652 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 0), align 4
653 ret void 653 ret void
654 ; LINUX-64-STATIC-LABEL: foo06: 654 ; LINUX-64-STATIC-LABEL: foo06:
655 ; LINUX-64-STATIC: movl lsrc(%rip), [[EAX:%e.x]] 655 ; LINUX-64-STATIC: movl lsrc(%rip), [[EAX:%e.x]]
656 ; LINUX-64-STATIC: movl [[EAX]], ldst(%rip) 656 ; LINUX-64-STATIC: movl [[EAX]], ldst(%rip)
657 ; LINUX-64-STATIC: ret 657 ; LINUX-64-STATIC: ret
705 ; DARWIN-64-PIC-NEXT: ret 705 ; DARWIN-64-PIC-NEXT: ret
706 } 706 }
707 707
708 define void @foo07() nounwind { 708 define void @foo07() nounwind {
709 entry: 709 entry:
710 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8 710 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
711 ret void 711 ret void
712 ; LINUX-64-STATIC-LABEL: foo07: 712 ; LINUX-64-STATIC-LABEL: foo07:
713 ; LINUX-64-STATIC: movq $ldst, lptr 713 ; LINUX-64-STATIC: movq $ldst, lptr
714 ; LINUX-64-STATIC: ret 714 ; LINUX-64-STATIC: ret
715 715
758 ; DARWIN-64-PIC-NEXT: ret 758 ; DARWIN-64-PIC-NEXT: ret
759 } 759 }
760 760
761 define void @foo08() nounwind { 761 define void @foo08() nounwind {
762 entry: 762 entry:
763 %0 = load i32** @lptr, align 8 763 %0 = load i32*, i32** @lptr, align 8
764 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4 764 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
765 store i32 %1, i32* %0, align 4 765 store i32 %1, i32* %0, align 4
766 ret void 766 ret void
767 ; LINUX-64-STATIC-LABEL: foo08: 767 ; LINUX-64-STATIC-LABEL: foo08:
768 ; LINUX-64-STATIC: movl lsrc(%rip), % 768 ; LINUX-64-STATIC: movl lsrc(%rip), %
769 ; LINUX-64-STATIC: movq lptr(%rip), % 769 ; LINUX-64-STATIC: movq lptr(%rip), %
828 ; DARWIN-64-PIC-NEXT: ret 828 ; DARWIN-64-PIC-NEXT: ret
829 } 829 }
830 830
831 define void @qux00() nounwind { 831 define void @qux00() nounwind {
832 entry: 832 entry:
833 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4 833 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
834 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4 834 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), align 4
835 ret void 835 ret void
836 ; LINUX-64-STATIC-LABEL: qux00: 836 ; LINUX-64-STATIC-LABEL: qux00:
837 ; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]] 837 ; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]]
838 ; LINUX-64-STATIC: movl [[EAX]], dst+64(%rip) 838 ; LINUX-64-STATIC: movl [[EAX]], dst+64(%rip)
839 ; LINUX-64-STATIC: ret 839 ; LINUX-64-STATIC: ret
899 ; DARWIN-64-PIC-NEXT: ret 899 ; DARWIN-64-PIC-NEXT: ret
900 } 900 }
901 901
902 define void @qxx00() nounwind { 902 define void @qxx00() nounwind {
903 entry: 903 entry:
904 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4 904 %0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
905 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4 905 store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), align 4
906 ret void 906 ret void
907 ; LINUX-64-STATIC-LABEL: qxx00: 907 ; LINUX-64-STATIC-LABEL: qxx00:
908 ; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]] 908 ; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]]
909 ; LINUX-64-STATIC: movl [[EAX]], xdst+64(%rip) 909 ; LINUX-64-STATIC: movl [[EAX]], xdst+64(%rip)
910 ; LINUX-64-STATIC: ret 910 ; LINUX-64-STATIC: ret
970 ; DARWIN-64-PIC-NEXT: ret 970 ; DARWIN-64-PIC-NEXT: ret
971 } 971 }
972 972
973 define void @qux01() nounwind { 973 define void @qux01() nounwind {
974 entry: 974 entry:
975 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8 975 store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
976 ret void 976 ret void
977 ; LINUX-64-STATIC-LABEL: qux01: 977 ; LINUX-64-STATIC-LABEL: qux01:
978 ; LINUX-64-STATIC: movq $dst+64, ptr 978 ; LINUX-64-STATIC: movq $dst+64, ptr
979 ; LINUX-64-STATIC: ret 979 ; LINUX-64-STATIC: ret
980 980
1036 ; DARWIN-64-PIC-NEXT: ret 1036 ; DARWIN-64-PIC-NEXT: ret
1037 } 1037 }
1038 1038
1039 define void @qxx01() nounwind { 1039 define void @qxx01() nounwind {
1040 entry: 1040 entry:
1041 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8 1041 store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1042 ret void 1042 ret void
1043 ; LINUX-64-STATIC-LABEL: qxx01: 1043 ; LINUX-64-STATIC-LABEL: qxx01:
1044 ; LINUX-64-STATIC: movq $xdst+64, ptr 1044 ; LINUX-64-STATIC: movq $xdst+64, ptr
1045 ; LINUX-64-STATIC: ret 1045 ; LINUX-64-STATIC: ret
1046 1046
1102 ; DARWIN-64-PIC-NEXT: ret 1102 ; DARWIN-64-PIC-NEXT: ret
1103 } 1103 }
1104 1104
1105 define void @qux02() nounwind { 1105 define void @qux02() nounwind {
1106 entry: 1106 entry:
1107 %0 = load i32** @ptr, align 8 1107 %0 = load i32*, i32** @ptr, align 8
1108 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4 1108 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
1109 %2 = getelementptr i32* %0, i64 16 1109 %2 = getelementptr i32, i32* %0, i64 16
1110 store i32 %1, i32* %2, align 4 1110 store i32 %1, i32* %2, align 4
1111 ; LINUX-64-STATIC-LABEL: qux02: 1111 ; LINUX-64-STATIC-LABEL: qux02:
1112 ; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]] 1112 ; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]]
1113 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 1113 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
1114 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]]) 1114 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]])
1185 ; DARWIN-64-PIC-NEXT: ret 1185 ; DARWIN-64-PIC-NEXT: ret
1186 } 1186 }
1187 1187
1188 define void @qxx02() nounwind { 1188 define void @qxx02() nounwind {
1189 entry: 1189 entry:
1190 %0 = load i32** @ptr, align 8 1190 %0 = load i32*, i32** @ptr, align 8
1191 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4 1191 %1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
1192 %2 = getelementptr i32* %0, i64 16 1192 %2 = getelementptr i32, i32* %0, i64 16
1193 store i32 %1, i32* %2, align 4 1193 store i32 %1, i32* %2, align 4
1194 ; LINUX-64-STATIC-LABEL: qxx02: 1194 ; LINUX-64-STATIC-LABEL: qxx02:
1195 ; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]] 1195 ; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]]
1196 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 1196 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
1197 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]]) 1197 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]])
1268 ; DARWIN-64-PIC-NEXT: ret 1268 ; DARWIN-64-PIC-NEXT: ret
1269 } 1269 }
1270 1270
1271 define void @qux03() nounwind { 1271 define void @qux03() nounwind {
1272 entry: 1272 entry:
1273 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32 1273 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
1274 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32 1274 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), align 32
1275 ret void 1275 ret void
1276 ; LINUX-64-STATIC-LABEL: qux03: 1276 ; LINUX-64-STATIC-LABEL: qux03:
1277 ; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]] 1277 ; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]]
1278 ; LINUX-64-STATIC: movl [[EAX]], ddst+64(%rip) 1278 ; LINUX-64-STATIC: movl [[EAX]], ddst+64(%rip)
1279 ; LINUX-64-STATIC: ret 1279 ; LINUX-64-STATIC: ret
1329 ; DARWIN-64-PIC-NEXT: ret 1329 ; DARWIN-64-PIC-NEXT: ret
1330 } 1330 }
1331 1331
1332 define void @qux04() nounwind { 1332 define void @qux04() nounwind {
1333 entry: 1333 entry:
1334 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8 1334 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1335 ret void 1335 ret void
1336 ; LINUX-64-STATIC-LABEL: qux04: 1336 ; LINUX-64-STATIC-LABEL: qux04:
1337 ; LINUX-64-STATIC: movq $ddst+64, dptr(%rip) 1337 ; LINUX-64-STATIC: movq $ddst+64, dptr(%rip)
1338 ; LINUX-64-STATIC: ret 1338 ; LINUX-64-STATIC: ret
1339 1339
1384 ; DARWIN-64-PIC-NEXT: ret 1384 ; DARWIN-64-PIC-NEXT: ret
1385 } 1385 }
1386 1386
1387 define void @qux05() nounwind { 1387 define void @qux05() nounwind {
1388 entry: 1388 entry:
1389 %0 = load i32** @dptr, align 8 1389 %0 = load i32*, i32** @dptr, align 8
1390 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32 1390 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
1391 %2 = getelementptr i32* %0, i64 16 1391 %2 = getelementptr i32, i32* %0, i64 16
1392 store i32 %1, i32* %2, align 4 1392 store i32 %1, i32* %2, align 4
1393 ; LINUX-64-STATIC-LABEL: qux05: 1393 ; LINUX-64-STATIC-LABEL: qux05:
1394 ; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]] 1394 ; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]]
1395 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 1395 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
1396 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]]) 1396 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]])
1457 ; DARWIN-64-PIC-NEXT: ret 1457 ; DARWIN-64-PIC-NEXT: ret
1458 } 1458 }
1459 1459
1460 define void @qux06() nounwind { 1460 define void @qux06() nounwind {
1461 entry: 1461 entry:
1462 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4 1462 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
1463 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4 1463 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), align 4
1464 ret void 1464 ret void
1465 ; LINUX-64-STATIC-LABEL: qux06: 1465 ; LINUX-64-STATIC-LABEL: qux06:
1466 ; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]] 1466 ; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]]
1467 ; LINUX-64-STATIC: movl [[EAX]], ldst+64 1467 ; LINUX-64-STATIC: movl [[EAX]], ldst+64
1468 ; LINUX-64-STATIC: ret 1468 ; LINUX-64-STATIC: ret
1516 ; DARWIN-64-PIC-NEXT: ret 1516 ; DARWIN-64-PIC-NEXT: ret
1517 } 1517 }
1518 1518
1519 define void @qux07() nounwind { 1519 define void @qux07() nounwind {
1520 entry: 1520 entry:
1521 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8 1521 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1522 ret void 1522 ret void
1523 ; LINUX-64-STATIC-LABEL: qux07: 1523 ; LINUX-64-STATIC-LABEL: qux07:
1524 ; LINUX-64-STATIC: movq $ldst+64, lptr 1524 ; LINUX-64-STATIC: movq $ldst+64, lptr
1525 ; LINUX-64-STATIC: ret 1525 ; LINUX-64-STATIC: ret
1526 1526
1569 ; DARWIN-64-PIC-NEXT: ret 1569 ; DARWIN-64-PIC-NEXT: ret
1570 } 1570 }
1571 1571
1572 define void @qux08() nounwind { 1572 define void @qux08() nounwind {
1573 entry: 1573 entry:
1574 %0 = load i32** @lptr, align 8 1574 %0 = load i32*, i32** @lptr, align 8
1575 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4 1575 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
1576 %2 = getelementptr i32* %0, i64 16 1576 %2 = getelementptr i32, i32* %0, i64 16
1577 store i32 %1, i32* %2, align 4 1577 store i32 %1, i32* %2, align 4
1578 ; LINUX-64-STATIC-LABEL: qux08: 1578 ; LINUX-64-STATIC-LABEL: qux08:
1579 ; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]] 1579 ; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]]
1580 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 1580 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
1581 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]]) 1581 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]])
1640 ; DARWIN-64-PIC-NEXT: ret 1640 ; DARWIN-64-PIC-NEXT: ret
1641 } 1641 }
1642 1642
1643 define void @ind00(i64 %i) nounwind { 1643 define void @ind00(i64 %i) nounwind {
1644 entry: 1644 entry:
1645 %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i 1645 %0 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
1646 %1 = load i32* %0, align 4 1646 %1 = load i32, i32* %0, align 4
1647 %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i 1647 %2 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
1648 store i32 %1, i32* %2, align 4 1648 store i32 %1, i32* %2, align 4
1649 ret void 1649 ret void
1650 ; LINUX-64-STATIC-LABEL: ind00: 1650 ; LINUX-64-STATIC-LABEL: ind00:
1651 ; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]] 1651 ; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]]
1652 ; LINUX-64-STATIC: movl [[EAX]], dst(,%rdi,4) 1652 ; LINUX-64-STATIC: movl [[EAX]], dst(,%rdi,4)
1718 ; DARWIN-64-PIC-NEXT: ret 1718 ; DARWIN-64-PIC-NEXT: ret
1719 } 1719 }
1720 1720
1721 define void @ixd00(i64 %i) nounwind { 1721 define void @ixd00(i64 %i) nounwind {
1722 entry: 1722 entry:
1723 %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i 1723 %0 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
1724 %1 = load i32* %0, align 4 1724 %1 = load i32, i32* %0, align 4
1725 %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i 1725 %2 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
1726 store i32 %1, i32* %2, align 4 1726 store i32 %1, i32* %2, align 4
1727 ret void 1727 ret void
1728 ; LINUX-64-STATIC-LABEL: ixd00: 1728 ; LINUX-64-STATIC-LABEL: ixd00:
1729 ; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]] 1729 ; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]]
1730 ; LINUX-64-STATIC: movl [[EAX]], xdst(,%rdi,4) 1730 ; LINUX-64-STATIC: movl [[EAX]], xdst(,%rdi,4)
1796 ; DARWIN-64-PIC-NEXT: ret 1796 ; DARWIN-64-PIC-NEXT: ret
1797 } 1797 }
1798 1798
1799 define void @ind01(i64 %i) nounwind { 1799 define void @ind01(i64 %i) nounwind {
1800 entry: 1800 entry:
1801 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i 1801 %0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
1802 store i32* %0, i32** @ptr, align 8 1802 store i32* %0, i32** @ptr, align 8
1803 ret void 1803 ret void
1804 ; LINUX-64-STATIC-LABEL: ind01: 1804 ; LINUX-64-STATIC-LABEL: ind01:
1805 ; LINUX-64-STATIC: leaq dst(,%rdi,4), [[RAX:%r.x]] 1805 ; LINUX-64-STATIC: leaq dst(,%rdi,4), [[RAX:%r.x]]
1806 ; LINUX-64-STATIC: movq [[RAX]], ptr 1806 ; LINUX-64-STATIC: movq [[RAX]], ptr
1872 ; DARWIN-64-PIC-NEXT: ret 1872 ; DARWIN-64-PIC-NEXT: ret
1873 } 1873 }
1874 1874
1875 define void @ixd01(i64 %i) nounwind { 1875 define void @ixd01(i64 %i) nounwind {
1876 entry: 1876 entry:
1877 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i 1877 %0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
1878 store i32* %0, i32** @ptr, align 8 1878 store i32* %0, i32** @ptr, align 8
1879 ret void 1879 ret void
1880 ; LINUX-64-STATIC-LABEL: ixd01: 1880 ; LINUX-64-STATIC-LABEL: ixd01:
1881 ; LINUX-64-STATIC: leaq xdst(,%rdi,4), [[RAX:%r.x]] 1881 ; LINUX-64-STATIC: leaq xdst(,%rdi,4), [[RAX:%r.x]]
1882 ; LINUX-64-STATIC: movq [[RAX]], ptr 1882 ; LINUX-64-STATIC: movq [[RAX]], ptr
1948 ; DARWIN-64-PIC-NEXT: ret 1948 ; DARWIN-64-PIC-NEXT: ret
1949 } 1949 }
1950 1950
1951 define void @ind02(i64 %i) nounwind { 1951 define void @ind02(i64 %i) nounwind {
1952 entry: 1952 entry:
1953 %0 = load i32** @ptr, align 8 1953 %0 = load i32*, i32** @ptr, align 8
1954 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i 1954 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
1955 %2 = load i32* %1, align 4 1955 %2 = load i32, i32* %1, align 4
1956 %3 = getelementptr i32* %0, i64 %i 1956 %3 = getelementptr i32, i32* %0, i64 %i
1957 store i32 %2, i32* %3, align 4 1957 store i32 %2, i32* %3, align 4
1958 ret void 1958 ret void
1959 ; LINUX-64-STATIC-LABEL: ind02: 1959 ; LINUX-64-STATIC-LABEL: ind02:
1960 ; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]] 1960 ; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]]
1961 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 1961 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
2037 ; DARWIN-64-PIC-NEXT: ret 2037 ; DARWIN-64-PIC-NEXT: ret
2038 } 2038 }
2039 2039
2040 define void @ixd02(i64 %i) nounwind { 2040 define void @ixd02(i64 %i) nounwind {
2041 entry: 2041 entry:
2042 %0 = load i32** @ptr, align 8 2042 %0 = load i32*, i32** @ptr, align 8
2043 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i 2043 %1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
2044 %2 = load i32* %1, align 4 2044 %2 = load i32, i32* %1, align 4
2045 %3 = getelementptr i32* %0, i64 %i 2045 %3 = getelementptr i32, i32* %0, i64 %i
2046 store i32 %2, i32* %3, align 4 2046 store i32 %2, i32* %3, align 4
2047 ret void 2047 ret void
2048 ; LINUX-64-STATIC-LABEL: ixd02: 2048 ; LINUX-64-STATIC-LABEL: ixd02:
2049 ; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]] 2049 ; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]]
2050 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 2050 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
2126 ; DARWIN-64-PIC-NEXT: ret 2126 ; DARWIN-64-PIC-NEXT: ret
2127 } 2127 }
2128 2128
2129 define void @ind03(i64 %i) nounwind { 2129 define void @ind03(i64 %i) nounwind {
2130 entry: 2130 entry:
2131 %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i 2131 %0 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
2132 %1 = load i32* %0, align 4 2132 %1 = load i32, i32* %0, align 4
2133 %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i 2133 %2 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
2134 store i32 %1, i32* %2, align 4 2134 store i32 %1, i32* %2, align 4
2135 ret void 2135 ret void
2136 ; LINUX-64-STATIC-LABEL: ind03: 2136 ; LINUX-64-STATIC-LABEL: ind03:
2137 ; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]] 2137 ; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]]
2138 ; LINUX-64-STATIC: movl [[EAX]], ddst(,%rdi,4) 2138 ; LINUX-64-STATIC: movl [[EAX]], ddst(,%rdi,4)
2200 ; DARWIN-64-PIC-NEXT: ret 2200 ; DARWIN-64-PIC-NEXT: ret
2201 } 2201 }
2202 2202
2203 define void @ind04(i64 %i) nounwind { 2203 define void @ind04(i64 %i) nounwind {
2204 entry: 2204 entry:
2205 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i 2205 %0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
2206 store i32* %0, i32** @dptr, align 8 2206 store i32* %0, i32** @dptr, align 8
2207 ret void 2207 ret void
2208 ; LINUX-64-STATIC-LABEL: ind04: 2208 ; LINUX-64-STATIC-LABEL: ind04:
2209 ; LINUX-64-STATIC: leaq ddst(,%rdi,4), [[RAX:%r.x]] 2209 ; LINUX-64-STATIC: leaq ddst(,%rdi,4), [[RAX:%r.x]]
2210 ; LINUX-64-STATIC: movq [[RAX]], dptr 2210 ; LINUX-64-STATIC: movq [[RAX]], dptr
2269 ; DARWIN-64-PIC-NEXT: ret 2269 ; DARWIN-64-PIC-NEXT: ret
2270 } 2270 }
2271 2271
2272 define void @ind05(i64 %i) nounwind { 2272 define void @ind05(i64 %i) nounwind {
2273 entry: 2273 entry:
2274 %0 = load i32** @dptr, align 8 2274 %0 = load i32*, i32** @dptr, align 8
2275 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i 2275 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
2276 %2 = load i32* %1, align 4 2276 %2 = load i32, i32* %1, align 4
2277 %3 = getelementptr i32* %0, i64 %i 2277 %3 = getelementptr i32, i32* %0, i64 %i
2278 store i32 %2, i32* %3, align 4 2278 store i32 %2, i32* %3, align 4
2279 ret void 2279 ret void
2280 ; LINUX-64-STATIC-LABEL: ind05: 2280 ; LINUX-64-STATIC-LABEL: ind05:
2281 ; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]] 2281 ; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]]
2282 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 2282 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
2351 ; DARWIN-64-PIC-NEXT: ret 2351 ; DARWIN-64-PIC-NEXT: ret
2352 } 2352 }
2353 2353
2354 define void @ind06(i64 %i) nounwind { 2354 define void @ind06(i64 %i) nounwind {
2355 entry: 2355 entry:
2356 %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i 2356 %0 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
2357 %1 = load i32* %0, align 4 2357 %1 = load i32, i32* %0, align 4
2358 %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i 2358 %2 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
2359 store i32 %1, i32* %2, align 4 2359 store i32 %1, i32* %2, align 4
2360 ret void 2360 ret void
2361 ; LINUX-64-STATIC-LABEL: ind06: 2361 ; LINUX-64-STATIC-LABEL: ind06:
2362 ; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]] 2362 ; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]]
2363 ; LINUX-64-STATIC: movl [[EAX]], ldst(,%rdi,4) 2363 ; LINUX-64-STATIC: movl [[EAX]], ldst(,%rdi,4)
2425 ; DARWIN-64-PIC-NEXT: ret 2425 ; DARWIN-64-PIC-NEXT: ret
2426 } 2426 }
2427 2427
2428 define void @ind07(i64 %i) nounwind { 2428 define void @ind07(i64 %i) nounwind {
2429 entry: 2429 entry:
2430 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i 2430 %0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
2431 store i32* %0, i32** @lptr, align 8 2431 store i32* %0, i32** @lptr, align 8
2432 ret void 2432 ret void
2433 ; LINUX-64-STATIC-LABEL: ind07: 2433 ; LINUX-64-STATIC-LABEL: ind07:
2434 ; LINUX-64-STATIC: leaq ldst(,%rdi,4), [[RAX:%r.x]] 2434 ; LINUX-64-STATIC: leaq ldst(,%rdi,4), [[RAX:%r.x]]
2435 ; LINUX-64-STATIC: movq [[RAX]], lptr 2435 ; LINUX-64-STATIC: movq [[RAX]], lptr
2493 ; DARWIN-64-PIC-NEXT: ret 2493 ; DARWIN-64-PIC-NEXT: ret
2494 } 2494 }
2495 2495
2496 define void @ind08(i64 %i) nounwind { 2496 define void @ind08(i64 %i) nounwind {
2497 entry: 2497 entry:
2498 %0 = load i32** @lptr, align 8 2498 %0 = load i32*, i32** @lptr, align 8
2499 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i 2499 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
2500 %2 = load i32* %1, align 4 2500 %2 = load i32, i32* %1, align 4
2501 %3 = getelementptr i32* %0, i64 %i 2501 %3 = getelementptr i32, i32* %0, i64 %i
2502 store i32 %2, i32* %3, align 4 2502 store i32 %2, i32* %3, align 4
2503 ret void 2503 ret void
2504 ; LINUX-64-STATIC-LABEL: ind08: 2504 ; LINUX-64-STATIC-LABEL: ind08:
2505 ; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]] 2505 ; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]]
2506 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 2506 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
2575 } 2575 }
2576 2576
2577 define void @off00(i64 %i) nounwind { 2577 define void @off00(i64 %i) nounwind {
2578 entry: 2578 entry:
2579 %0 = add i64 %i, 16 2579 %0 = add i64 %i, 16
2580 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 2580 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
2581 %2 = load i32* %1, align 4 2581 %2 = load i32, i32* %1, align 4
2582 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 2582 %3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
2583 store i32 %2, i32* %3, align 4 2583 store i32 %2, i32* %3, align 4
2584 ret void 2584 ret void
2585 ; LINUX-64-STATIC-LABEL: off00: 2585 ; LINUX-64-STATIC-LABEL: off00:
2586 ; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]] 2586 ; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]]
2587 ; LINUX-64-STATIC: movl [[EAX]], dst+64(,%rdi,4) 2587 ; LINUX-64-STATIC: movl [[EAX]], dst+64(,%rdi,4)
2654 } 2654 }
2655 2655
2656 define void @oxf00(i64 %i) nounwind { 2656 define void @oxf00(i64 %i) nounwind {
2657 entry: 2657 entry:
2658 %0 = add i64 %i, 16 2658 %0 = add i64 %i, 16
2659 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 2659 %1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
2660 %2 = load i32* %1, align 4 2660 %2 = load i32, i32* %1, align 4
2661 %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 2661 %3 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
2662 store i32 %2, i32* %3, align 4 2662 store i32 %2, i32* %3, align 4
2663 ret void 2663 ret void
2664 ; LINUX-64-STATIC-LABEL: oxf00: 2664 ; LINUX-64-STATIC-LABEL: oxf00:
2665 ; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]] 2665 ; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]]
2666 ; LINUX-64-STATIC: movl [[EAX]], xdst+64(,%rdi,4) 2666 ; LINUX-64-STATIC: movl [[EAX]], xdst+64(,%rdi,4)
2733 } 2733 }
2734 2734
2735 define void @off01(i64 %i) nounwind { 2735 define void @off01(i64 %i) nounwind {
2736 entry: 2736 entry:
2737 %.sum = add i64 %i, 16 2737 %.sum = add i64 %i, 16
2738 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum 2738 %0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
2739 store i32* %0, i32** @ptr, align 8 2739 store i32* %0, i32** @ptr, align 8
2740 ret void 2740 ret void
2741 ; LINUX-64-STATIC-LABEL: off01: 2741 ; LINUX-64-STATIC-LABEL: off01:
2742 ; LINUX-64-STATIC: leaq dst+64(,%rdi,4), [[RAX:%r.x]] 2742 ; LINUX-64-STATIC: leaq dst+64(,%rdi,4), [[RAX:%r.x]]
2743 ; LINUX-64-STATIC: movq [[RAX]], ptr 2743 ; LINUX-64-STATIC: movq [[RAX]], ptr
2810 } 2810 }
2811 2811
2812 define void @oxf01(i64 %i) nounwind { 2812 define void @oxf01(i64 %i) nounwind {
2813 entry: 2813 entry:
2814 %.sum = add i64 %i, 16 2814 %.sum = add i64 %i, 16
2815 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum 2815 %0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %.sum
2816 store i32* %0, i32** @ptr, align 8 2816 store i32* %0, i32** @ptr, align 8
2817 ret void 2817 ret void
2818 ; LINUX-64-STATIC-LABEL: oxf01: 2818 ; LINUX-64-STATIC-LABEL: oxf01:
2819 ; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), [[RAX:%r.x]] 2819 ; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), [[RAX:%r.x]]
2820 ; LINUX-64-STATIC: movq [[RAX]], ptr 2820 ; LINUX-64-STATIC: movq [[RAX]], ptr
2886 ; DARWIN-64-PIC-NEXT: ret 2886 ; DARWIN-64-PIC-NEXT: ret
2887 } 2887 }
2888 2888
2889 define void @off02(i64 %i) nounwind { 2889 define void @off02(i64 %i) nounwind {
2890 entry: 2890 entry:
2891 %0 = load i32** @ptr, align 8 2891 %0 = load i32*, i32** @ptr, align 8
2892 %1 = add i64 %i, 16 2892 %1 = add i64 %i, 16
2893 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1 2893 %2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
2894 %3 = load i32* %2, align 4 2894 %3 = load i32, i32* %2, align 4
2895 %4 = getelementptr i32* %0, i64 %1 2895 %4 = getelementptr i32, i32* %0, i64 %1
2896 store i32 %3, i32* %4, align 4 2896 store i32 %3, i32* %4, align 4
2897 ret void 2897 ret void
2898 ; LINUX-64-STATIC-LABEL: off02: 2898 ; LINUX-64-STATIC-LABEL: off02:
2899 ; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]] 2899 ; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]]
2900 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 2900 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
2976 ; DARWIN-64-PIC-NEXT: ret 2976 ; DARWIN-64-PIC-NEXT: ret
2977 } 2977 }
2978 2978
2979 define void @oxf02(i64 %i) nounwind { 2979 define void @oxf02(i64 %i) nounwind {
2980 entry: 2980 entry:
2981 %0 = load i32** @ptr, align 8 2981 %0 = load i32*, i32** @ptr, align 8
2982 %1 = add i64 %i, 16 2982 %1 = add i64 %i, 16
2983 %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1 2983 %2 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %1
2984 %3 = load i32* %2, align 4 2984 %3 = load i32, i32* %2, align 4
2985 %4 = getelementptr i32* %0, i64 %1 2985 %4 = getelementptr i32, i32* %0, i64 %1
2986 store i32 %3, i32* %4, align 4 2986 store i32 %3, i32* %4, align 4
2987 ret void 2987 ret void
2988 ; LINUX-64-STATIC-LABEL: oxf02: 2988 ; LINUX-64-STATIC-LABEL: oxf02:
2989 ; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]] 2989 ; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]]
2990 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 2990 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
3067 } 3067 }
3068 3068
3069 define void @off03(i64 %i) nounwind { 3069 define void @off03(i64 %i) nounwind {
3070 entry: 3070 entry:
3071 %0 = add i64 %i, 16 3071 %0 = add i64 %i, 16
3072 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 3072 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
3073 %2 = load i32* %1, align 4 3073 %2 = load i32, i32* %1, align 4
3074 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 3074 %3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
3075 store i32 %2, i32* %3, align 4 3075 store i32 %2, i32* %3, align 4
3076 ret void 3076 ret void
3077 ; LINUX-64-STATIC-LABEL: off03: 3077 ; LINUX-64-STATIC-LABEL: off03:
3078 ; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]] 3078 ; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]]
3079 ; LINUX-64-STATIC: movl [[EAX]], ddst+64(,%rdi,4) 3079 ; LINUX-64-STATIC: movl [[EAX]], ddst+64(,%rdi,4)
3142 } 3142 }
3143 3143
3144 define void @off04(i64 %i) nounwind { 3144 define void @off04(i64 %i) nounwind {
3145 entry: 3145 entry:
3146 %.sum = add i64 %i, 16 3146 %.sum = add i64 %i, 16
3147 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum 3147 %0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
3148 store i32* %0, i32** @dptr, align 8 3148 store i32* %0, i32** @dptr, align 8
3149 ret void 3149 ret void
3150 ; LINUX-64-STATIC-LABEL: off04: 3150 ; LINUX-64-STATIC-LABEL: off04:
3151 ; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), [[RAX:%r.x]] 3151 ; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), [[RAX:%r.x]]
3152 ; LINUX-64-STATIC: movq [[RAX]], dptr 3152 ; LINUX-64-STATIC: movq [[RAX]], dptr
3211 ; DARWIN-64-PIC-NEXT: ret 3211 ; DARWIN-64-PIC-NEXT: ret
3212 } 3212 }
3213 3213
3214 define void @off05(i64 %i) nounwind { 3214 define void @off05(i64 %i) nounwind {
3215 entry: 3215 entry:
3216 %0 = load i32** @dptr, align 8 3216 %0 = load i32*, i32** @dptr, align 8
3217 %1 = add i64 %i, 16 3217 %1 = add i64 %i, 16
3218 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1 3218 %2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
3219 %3 = load i32* %2, align 4 3219 %3 = load i32, i32* %2, align 4
3220 %4 = getelementptr i32* %0, i64 %1 3220 %4 = getelementptr i32, i32* %0, i64 %1
3221 store i32 %3, i32* %4, align 4 3221 store i32 %3, i32* %4, align 4
3222 ret void 3222 ret void
3223 ; LINUX-64-STATIC-LABEL: off05: 3223 ; LINUX-64-STATIC-LABEL: off05:
3224 ; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]] 3224 ; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]]
3225 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 3225 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
3295 } 3295 }
3296 3296
3297 define void @off06(i64 %i) nounwind { 3297 define void @off06(i64 %i) nounwind {
3298 entry: 3298 entry:
3299 %0 = add i64 %i, 16 3299 %0 = add i64 %i, 16
3300 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 3300 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
3301 %2 = load i32* %1, align 4 3301 %2 = load i32, i32* %1, align 4
3302 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 3302 %3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
3303 store i32 %2, i32* %3, align 4 3303 store i32 %2, i32* %3, align 4
3304 ret void 3304 ret void
3305 ; LINUX-64-STATIC-LABEL: off06: 3305 ; LINUX-64-STATIC-LABEL: off06:
3306 ; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]] 3306 ; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]]
3307 ; LINUX-64-STATIC: movl [[EAX]], ldst+64(,%rdi,4) 3307 ; LINUX-64-STATIC: movl [[EAX]], ldst+64(,%rdi,4)
3370 } 3370 }
3371 3371
3372 define void @off07(i64 %i) nounwind { 3372 define void @off07(i64 %i) nounwind {
3373 entry: 3373 entry:
3374 %.sum = add i64 %i, 16 3374 %.sum = add i64 %i, 16
3375 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum 3375 %0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
3376 store i32* %0, i32** @lptr, align 8 3376 store i32* %0, i32** @lptr, align 8
3377 ret void 3377 ret void
3378 ; LINUX-64-STATIC-LABEL: off07: 3378 ; LINUX-64-STATIC-LABEL: off07:
3379 ; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), [[RAX:%r.x]] 3379 ; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), [[RAX:%r.x]]
3380 ; LINUX-64-STATIC: movq [[RAX]], lptr 3380 ; LINUX-64-STATIC: movq [[RAX]], lptr
3438 ; DARWIN-64-PIC-NEXT: ret 3438 ; DARWIN-64-PIC-NEXT: ret
3439 } 3439 }
3440 3440
3441 define void @off08(i64 %i) nounwind { 3441 define void @off08(i64 %i) nounwind {
3442 entry: 3442 entry:
3443 %0 = load i32** @lptr, align 8 3443 %0 = load i32*, i32** @lptr, align 8
3444 %1 = add i64 %i, 16 3444 %1 = add i64 %i, 16
3445 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1 3445 %2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
3446 %3 = load i32* %2, align 4 3446 %3 = load i32, i32* %2, align 4
3447 %4 = getelementptr i32* %0, i64 %1 3447 %4 = getelementptr i32, i32* %0, i64 %1
3448 store i32 %3, i32* %4, align 4 3448 store i32 %3, i32* %4, align 4
3449 ret void 3449 ret void
3450 ; LINUX-64-STATIC-LABEL: off08: 3450 ; LINUX-64-STATIC-LABEL: off08:
3451 ; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]] 3451 ; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]]
3452 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 3452 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
3520 ; DARWIN-64-PIC-NEXT: ret 3520 ; DARWIN-64-PIC-NEXT: ret
3521 } 3521 }
3522 3522
3523 define void @moo00(i64 %i) nounwind { 3523 define void @moo00(i64 %i) nounwind {
3524 entry: 3524 entry:
3525 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4 3525 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
3526 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4 3526 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), align 4
3527 ret void 3527 ret void
3528 ; LINUX-64-STATIC-LABEL: moo00: 3528 ; LINUX-64-STATIC-LABEL: moo00:
3529 ; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]] 3529 ; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]]
3530 ; LINUX-64-STATIC: movl [[EAX]], dst+262144(%rip) 3530 ; LINUX-64-STATIC: movl [[EAX]], dst+262144(%rip)
3531 ; LINUX-64-STATIC: ret 3531 ; LINUX-64-STATIC: ret
3591 ; DARWIN-64-PIC-NEXT: ret 3591 ; DARWIN-64-PIC-NEXT: ret
3592 } 3592 }
3593 3593
3594 define void @moo01(i64 %i) nounwind { 3594 define void @moo01(i64 %i) nounwind {
3595 entry: 3595 entry:
3596 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8 3596 store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
3597 ret void 3597 ret void
3598 ; LINUX-64-STATIC-LABEL: moo01: 3598 ; LINUX-64-STATIC-LABEL: moo01:
3599 ; LINUX-64-STATIC: movq $dst+262144, ptr(%rip) 3599 ; LINUX-64-STATIC: movq $dst+262144, ptr(%rip)
3600 ; LINUX-64-STATIC: ret 3600 ; LINUX-64-STATIC: ret
3601 3601
3657 ; DARWIN-64-PIC-NEXT: ret 3657 ; DARWIN-64-PIC-NEXT: ret
3658 } 3658 }
3659 3659
3660 define void @moo02(i64 %i) nounwind { 3660 define void @moo02(i64 %i) nounwind {
3661 entry: 3661 entry:
3662 %0 = load i32** @ptr, align 8 3662 %0 = load i32*, i32** @ptr, align 8
3663 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4 3663 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
3664 %2 = getelementptr i32* %0, i64 65536 3664 %2 = getelementptr i32, i32* %0, i64 65536
3665 store i32 %1, i32* %2, align 4 3665 store i32 %1, i32* %2, align 4
3666 ret void 3666 ret void
3667 ; LINUX-64-STATIC-LABEL: moo02: 3667 ; LINUX-64-STATIC-LABEL: moo02:
3668 ; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]] 3668 ; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]]
3669 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 3669 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
3740 ; DARWIN-64-PIC-NEXT: ret 3740 ; DARWIN-64-PIC-NEXT: ret
3741 } 3741 }
3742 3742
3743 define void @moo03(i64 %i) nounwind { 3743 define void @moo03(i64 %i) nounwind {
3744 entry: 3744 entry:
3745 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32 3745 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3746 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32 3746 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), align 32
3747 ret void 3747 ret void
3748 ; LINUX-64-STATIC-LABEL: moo03: 3748 ; LINUX-64-STATIC-LABEL: moo03:
3749 ; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]] 3749 ; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]]
3750 ; LINUX-64-STATIC: movl [[EAX]], ddst+262144(%rip) 3750 ; LINUX-64-STATIC: movl [[EAX]], ddst+262144(%rip)
3751 ; LINUX-64-STATIC: ret 3751 ; LINUX-64-STATIC: ret
3801 ; DARWIN-64-PIC-NEXT: ret 3801 ; DARWIN-64-PIC-NEXT: ret
3802 } 3802 }
3803 3803
3804 define void @moo04(i64 %i) nounwind { 3804 define void @moo04(i64 %i) nounwind {
3805 entry: 3805 entry:
3806 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8 3806 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
3807 ret void 3807 ret void
3808 ; LINUX-64-STATIC-LABEL: moo04: 3808 ; LINUX-64-STATIC-LABEL: moo04:
3809 ; LINUX-64-STATIC: movq $ddst+262144, dptr 3809 ; LINUX-64-STATIC: movq $ddst+262144, dptr
3810 ; LINUX-64-STATIC: ret 3810 ; LINUX-64-STATIC: ret
3811 3811
3856 ; DARWIN-64-PIC-NEXT: ret 3856 ; DARWIN-64-PIC-NEXT: ret
3857 } 3857 }
3858 3858
3859 define void @moo05(i64 %i) nounwind { 3859 define void @moo05(i64 %i) nounwind {
3860 entry: 3860 entry:
3861 %0 = load i32** @dptr, align 8 3861 %0 = load i32*, i32** @dptr, align 8
3862 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32 3862 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3863 %2 = getelementptr i32* %0, i64 65536 3863 %2 = getelementptr i32, i32* %0, i64 65536
3864 store i32 %1, i32* %2, align 4 3864 store i32 %1, i32* %2, align 4
3865 ret void 3865 ret void
3866 ; LINUX-64-STATIC-LABEL: moo05: 3866 ; LINUX-64-STATIC-LABEL: moo05:
3867 ; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]] 3867 ; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]]
3868 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 3868 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
3929 ; DARWIN-64-PIC-NEXT: ret 3929 ; DARWIN-64-PIC-NEXT: ret
3930 } 3930 }
3931 3931
3932 define void @moo06(i64 %i) nounwind { 3932 define void @moo06(i64 %i) nounwind {
3933 entry: 3933 entry:
3934 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4 3934 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
3935 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4 3935 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), align 4
3936 ret void 3936 ret void
3937 ; LINUX-64-STATIC-LABEL: moo06: 3937 ; LINUX-64-STATIC-LABEL: moo06:
3938 ; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]] 3938 ; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]]
3939 ; LINUX-64-STATIC: movl [[EAX]], ldst+262144(%rip) 3939 ; LINUX-64-STATIC: movl [[EAX]], ldst+262144(%rip)
3940 ; LINUX-64-STATIC: ret 3940 ; LINUX-64-STATIC: ret
3988 ; DARWIN-64-PIC-NEXT: ret 3988 ; DARWIN-64-PIC-NEXT: ret
3989 } 3989 }
3990 3990
3991 define void @moo07(i64 %i) nounwind { 3991 define void @moo07(i64 %i) nounwind {
3992 entry: 3992 entry:
3993 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8 3993 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
3994 ret void 3994 ret void
3995 ; LINUX-64-STATIC-LABEL: moo07: 3995 ; LINUX-64-STATIC-LABEL: moo07:
3996 ; LINUX-64-STATIC: movq $ldst+262144, lptr 3996 ; LINUX-64-STATIC: movq $ldst+262144, lptr
3997 ; LINUX-64-STATIC: ret 3997 ; LINUX-64-STATIC: ret
3998 3998
4041 ; DARWIN-64-PIC-NEXT: ret 4041 ; DARWIN-64-PIC-NEXT: ret
4042 } 4042 }
4043 4043
4044 define void @moo08(i64 %i) nounwind { 4044 define void @moo08(i64 %i) nounwind {
4045 entry: 4045 entry:
4046 %0 = load i32** @lptr, align 8 4046 %0 = load i32*, i32** @lptr, align 8
4047 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4 4047 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4048 %2 = getelementptr i32* %0, i64 65536 4048 %2 = getelementptr i32, i32* %0, i64 65536
4049 store i32 %1, i32* %2, align 4 4049 store i32 %1, i32* %2, align 4
4050 ret void 4050 ret void
4051 ; LINUX-64-STATIC-LABEL: moo08: 4051 ; LINUX-64-STATIC-LABEL: moo08:
4052 ; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]] 4052 ; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]]
4053 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 4053 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
4113 } 4113 }
4114 4114
4115 define void @big00(i64 %i) nounwind { 4115 define void @big00(i64 %i) nounwind {
4116 entry: 4116 entry:
4117 %0 = add i64 %i, 65536 4117 %0 = add i64 %i, 65536
4118 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 4118 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
4119 %2 = load i32* %1, align 4 4119 %2 = load i32, i32* %1, align 4
4120 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 4120 %3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
4121 store i32 %2, i32* %3, align 4 4121 store i32 %2, i32* %3, align 4
4122 ret void 4122 ret void
4123 ; LINUX-64-STATIC-LABEL: big00: 4123 ; LINUX-64-STATIC-LABEL: big00:
4124 ; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]] 4124 ; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]]
4125 ; LINUX-64-STATIC: movl [[EAX]], dst+262144(,%rdi,4) 4125 ; LINUX-64-STATIC: movl [[EAX]], dst+262144(,%rdi,4)
4192 } 4192 }
4193 4193
4194 define void @big01(i64 %i) nounwind { 4194 define void @big01(i64 %i) nounwind {
4195 entry: 4195 entry:
4196 %.sum = add i64 %i, 65536 4196 %.sum = add i64 %i, 65536
4197 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum 4197 %0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
4198 store i32* %0, i32** @ptr, align 8 4198 store i32* %0, i32** @ptr, align 8
4199 ret void 4199 ret void
4200 ; LINUX-64-STATIC-LABEL: big01: 4200 ; LINUX-64-STATIC-LABEL: big01:
4201 ; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), [[RAX:%r.x]] 4201 ; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), [[RAX:%r.x]]
4202 ; LINUX-64-STATIC: movq [[RAX]], ptr(%rip) 4202 ; LINUX-64-STATIC: movq [[RAX]], ptr(%rip)
4268 ; DARWIN-64-PIC-NEXT: ret 4268 ; DARWIN-64-PIC-NEXT: ret
4269 } 4269 }
4270 4270
4271 define void @big02(i64 %i) nounwind { 4271 define void @big02(i64 %i) nounwind {
4272 entry: 4272 entry:
4273 %0 = load i32** @ptr, align 8 4273 %0 = load i32*, i32** @ptr, align 8
4274 %1 = add i64 %i, 65536 4274 %1 = add i64 %i, 65536
4275 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1 4275 %2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
4276 %3 = load i32* %2, align 4 4276 %3 = load i32, i32* %2, align 4
4277 %4 = getelementptr i32* %0, i64 %1 4277 %4 = getelementptr i32, i32* %0, i64 %1
4278 store i32 %3, i32* %4, align 4 4278 store i32 %3, i32* %4, align 4
4279 ret void 4279 ret void
4280 ; LINUX-64-STATIC-LABEL: big02: 4280 ; LINUX-64-STATIC-LABEL: big02:
4281 ; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]] 4281 ; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]]
4282 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 4282 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
4359 } 4359 }
4360 4360
4361 define void @big03(i64 %i) nounwind { 4361 define void @big03(i64 %i) nounwind {
4362 entry: 4362 entry:
4363 %0 = add i64 %i, 65536 4363 %0 = add i64 %i, 65536
4364 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 4364 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
4365 %2 = load i32* %1, align 4 4365 %2 = load i32, i32* %1, align 4
4366 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 4366 %3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
4367 store i32 %2, i32* %3, align 4 4367 store i32 %2, i32* %3, align 4
4368 ret void 4368 ret void
4369 ; LINUX-64-STATIC-LABEL: big03: 4369 ; LINUX-64-STATIC-LABEL: big03:
4370 ; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]] 4370 ; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4371 ; LINUX-64-STATIC: movl [[EAX]], ddst+262144(,%rdi,4) 4371 ; LINUX-64-STATIC: movl [[EAX]], ddst+262144(,%rdi,4)
4434 } 4434 }
4435 4435
4436 define void @big04(i64 %i) nounwind { 4436 define void @big04(i64 %i) nounwind {
4437 entry: 4437 entry:
4438 %.sum = add i64 %i, 65536 4438 %.sum = add i64 %i, 65536
4439 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum 4439 %0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
4440 store i32* %0, i32** @dptr, align 8 4440 store i32* %0, i32** @dptr, align 8
4441 ret void 4441 ret void
4442 ; LINUX-64-STATIC-LABEL: big04: 4442 ; LINUX-64-STATIC-LABEL: big04:
4443 ; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), [[RAX:%r.x]] 4443 ; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), [[RAX:%r.x]]
4444 ; LINUX-64-STATIC: movq [[RAX]], dptr 4444 ; LINUX-64-STATIC: movq [[RAX]], dptr
4503 ; DARWIN-64-PIC-NEXT: ret 4503 ; DARWIN-64-PIC-NEXT: ret
4504 } 4504 }
4505 4505
4506 define void @big05(i64 %i) nounwind { 4506 define void @big05(i64 %i) nounwind {
4507 entry: 4507 entry:
4508 %0 = load i32** @dptr, align 8 4508 %0 = load i32*, i32** @dptr, align 8
4509 %1 = add i64 %i, 65536 4509 %1 = add i64 %i, 65536
4510 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1 4510 %2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
4511 %3 = load i32* %2, align 4 4511 %3 = load i32, i32* %2, align 4
4512 %4 = getelementptr i32* %0, i64 %1 4512 %4 = getelementptr i32, i32* %0, i64 %1
4513 store i32 %3, i32* %4, align 4 4513 store i32 %3, i32* %4, align 4
4514 ret void 4514 ret void
4515 ; LINUX-64-STATIC-LABEL: big05: 4515 ; LINUX-64-STATIC-LABEL: big05:
4516 ; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]] 4516 ; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4517 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 4517 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
4587 } 4587 }
4588 4588
4589 define void @big06(i64 %i) nounwind { 4589 define void @big06(i64 %i) nounwind {
4590 entry: 4590 entry:
4591 %0 = add i64 %i, 65536 4591 %0 = add i64 %i, 65536
4592 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 4592 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
4593 %2 = load i32* %1, align 4 4593 %2 = load i32, i32* %1, align 4
4594 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 4594 %3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
4595 store i32 %2, i32* %3, align 4 4595 store i32 %2, i32* %3, align 4
4596 ret void 4596 ret void
4597 ; LINUX-64-STATIC-LABEL: big06: 4597 ; LINUX-64-STATIC-LABEL: big06:
4598 ; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]] 4598 ; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4599 ; LINUX-64-STATIC: movl [[EAX]], ldst+262144(,%rdi,4) 4599 ; LINUX-64-STATIC: movl [[EAX]], ldst+262144(,%rdi,4)
4662 } 4662 }
4663 4663
4664 define void @big07(i64 %i) nounwind { 4664 define void @big07(i64 %i) nounwind {
4665 entry: 4665 entry:
4666 %.sum = add i64 %i, 65536 4666 %.sum = add i64 %i, 65536
4667 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum 4667 %0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
4668 store i32* %0, i32** @lptr, align 8 4668 store i32* %0, i32** @lptr, align 8
4669 ret void 4669 ret void
4670 ; LINUX-64-STATIC-LABEL: big07: 4670 ; LINUX-64-STATIC-LABEL: big07:
4671 ; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), [[RAX:%r.x]] 4671 ; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), [[RAX:%r.x]]
4672 ; LINUX-64-STATIC: movq [[RAX]], lptr 4672 ; LINUX-64-STATIC: movq [[RAX]], lptr
4730 ; DARWIN-64-PIC-NEXT: ret 4730 ; DARWIN-64-PIC-NEXT: ret
4731 } 4731 }
4732 4732
4733 define void @big08(i64 %i) nounwind { 4733 define void @big08(i64 %i) nounwind {
4734 entry: 4734 entry:
4735 %0 = load i32** @lptr, align 8 4735 %0 = load i32*, i32** @lptr, align 8
4736 %1 = add i64 %i, 65536 4736 %1 = add i64 %i, 65536
4737 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1 4737 %2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
4738 %3 = load i32* %2, align 4 4738 %3 = load i32, i32* %2, align 4
4739 %4 = getelementptr i32* %0, i64 %1 4739 %4 = getelementptr i32, i32* %0, i64 %1
4740 store i32 %3, i32* %4, align 4 4740 store i32 %3, i32* %4, align 4
4741 ret void 4741 ret void
4742 ; LINUX-64-STATIC-LABEL: big08: 4742 ; LINUX-64-STATIC-LABEL: big08:
4743 ; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]] 4743 ; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4744 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 4744 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
5517 ; DARWIN-64-PIC-NEXT: ret 5517 ; DARWIN-64-PIC-NEXT: ret
5518 } 5518 }
5519 5519
5520 define i8* @har02() nounwind { 5520 define i8* @har02() nounwind {
5521 entry: 5521 entry:
5522 %0 = load i32** @ptr, align 8 5522 %0 = load i32*, i32** @ptr, align 8
5523 %1 = bitcast i32* %0 to i8* 5523 %1 = bitcast i32* %0 to i8*
5524 ret i8* %1 5524 ret i8* %1
5525 ; LINUX-64-STATIC-LABEL: har02: 5525 ; LINUX-64-STATIC-LABEL: har02:
5526 ; LINUX-64-STATIC: movq ptr(%rip), %rax 5526 ; LINUX-64-STATIC: movq ptr(%rip), %rax
5527 ; LINUX-64-STATIC: ret 5527 ; LINUX-64-STATIC: ret
5666 ; DARWIN-64-PIC-NEXT: ret 5666 ; DARWIN-64-PIC-NEXT: ret
5667 } 5667 }
5668 5668
5669 define i8* @har05() nounwind { 5669 define i8* @har05() nounwind {
5670 entry: 5670 entry:
5671 %0 = load i32** @dptr, align 8 5671 %0 = load i32*, i32** @dptr, align 8
5672 %1 = bitcast i32* %0 to i8* 5672 %1 = bitcast i32* %0 to i8*
5673 ret i8* %1 5673 ret i8* %1
5674 ; LINUX-64-STATIC-LABEL: har05: 5674 ; LINUX-64-STATIC-LABEL: har05:
5675 ; LINUX-64-STATIC: movq dptr(%rip), %rax 5675 ; LINUX-64-STATIC: movq dptr(%rip), %rax
5676 ; LINUX-64-STATIC: ret 5676 ; LINUX-64-STATIC: ret
5810 ; DARWIN-64-PIC-NEXT: ret 5810 ; DARWIN-64-PIC-NEXT: ret
5811 } 5811 }
5812 5812
5813 define i8* @har08() nounwind { 5813 define i8* @har08() nounwind {
5814 entry: 5814 entry:
5815 %0 = load i32** @lptr, align 8 5815 %0 = load i32*, i32** @lptr, align 8
5816 %1 = bitcast i32* %0 to i8* 5816 %1 = bitcast i32* %0 to i8*
5817 ret i8* %1 5817 ret i8* %1
5818 ; LINUX-64-STATIC-LABEL: har08: 5818 ; LINUX-64-STATIC-LABEL: har08:
5819 ; LINUX-64-STATIC: movq lptr(%rip), %rax 5819 ; LINUX-64-STATIC: movq lptr(%rip), %rax
5820 ; LINUX-64-STATIC: ret 5820 ; LINUX-64-STATIC: ret
5859 ; DARWIN-64-PIC-NEXT: ret 5859 ; DARWIN-64-PIC-NEXT: ret
5860 } 5860 }
5861 5861
5862 define i8* @bat00() nounwind { 5862 define i8* @bat00() nounwind {
5863 entry: 5863 entry:
5864 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*) 5864 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16) to i8*)
5865 ; LINUX-64-STATIC-LABEL: bat00: 5865 ; LINUX-64-STATIC-LABEL: bat00:
5866 ; LINUX-64-STATIC: movl $src+64, %eax 5866 ; LINUX-64-STATIC: movl $src+64, %eax
5867 ; LINUX-64-STATIC: ret 5867 ; LINUX-64-STATIC: ret
5868 5868
5869 ; LINUX-32-STATIC-LABEL: bat00: 5869 ; LINUX-32-STATIC-LABEL: bat00:
5912 ; DARWIN-64-PIC-NEXT: ret 5912 ; DARWIN-64-PIC-NEXT: ret
5913 } 5913 }
5914 5914
5915 define i8* @bxt00() nounwind { 5915 define i8* @bxt00() nounwind {
5916 entry: 5916 entry:
5917 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*) 5917 ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16) to i8*)
5918 ; LINUX-64-STATIC-LABEL: bxt00: 5918 ; LINUX-64-STATIC-LABEL: bxt00:
5919 ; LINUX-64-STATIC: movl $xsrc+64, %eax 5919 ; LINUX-64-STATIC: movl $xsrc+64, %eax
5920 ; LINUX-64-STATIC: ret 5920 ; LINUX-64-STATIC: ret
5921 5921
5922 ; LINUX-32-STATIC-LABEL: bxt00: 5922 ; LINUX-32-STATIC-LABEL: bxt00:
5965 ; DARWIN-64-PIC-NEXT: ret 5965 ; DARWIN-64-PIC-NEXT: ret
5966 } 5966 }
5967 5967
5968 define i8* @bat01() nounwind { 5968 define i8* @bat01() nounwind {
5969 entry: 5969 entry:
5970 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*) 5970 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16) to i8*)
5971 ; LINUX-64-STATIC-LABEL: bat01: 5971 ; LINUX-64-STATIC-LABEL: bat01:
5972 ; LINUX-64-STATIC: movl $dst+64, %eax 5972 ; LINUX-64-STATIC: movl $dst+64, %eax
5973 ; LINUX-64-STATIC: ret 5973 ; LINUX-64-STATIC: ret
5974 5974
5975 ; LINUX-32-STATIC-LABEL: bat01: 5975 ; LINUX-32-STATIC-LABEL: bat01:
6018 ; DARWIN-64-PIC-NEXT: ret 6018 ; DARWIN-64-PIC-NEXT: ret
6019 } 6019 }
6020 6020
6021 define i8* @bxt01() nounwind { 6021 define i8* @bxt01() nounwind {
6022 entry: 6022 entry:
6023 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*) 6023 ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16) to i8*)
6024 ; LINUX-64-STATIC-LABEL: bxt01: 6024 ; LINUX-64-STATIC-LABEL: bxt01:
6025 ; LINUX-64-STATIC: movl $xdst+64, %eax 6025 ; LINUX-64-STATIC: movl $xdst+64, %eax
6026 ; LINUX-64-STATIC: ret 6026 ; LINUX-64-STATIC: ret
6027 6027
6028 ; LINUX-32-STATIC-LABEL: bxt01: 6028 ; LINUX-32-STATIC-LABEL: bxt01:
6071 ; DARWIN-64-PIC-NEXT: ret 6071 ; DARWIN-64-PIC-NEXT: ret
6072 } 6072 }
6073 6073
6074 define i8* @bat02() nounwind { 6074 define i8* @bat02() nounwind {
6075 entry: 6075 entry:
6076 %0 = load i32** @ptr, align 8 6076 %0 = load i32*, i32** @ptr, align 8
6077 %1 = getelementptr i32* %0, i64 16 6077 %1 = getelementptr i32, i32* %0, i64 16
6078 %2 = bitcast i32* %1 to i8* 6078 %2 = bitcast i32* %1 to i8*
6079 ret i8* %2 6079 ret i8* %2
6080 ; LINUX-64-STATIC-LABEL: bat02: 6080 ; LINUX-64-STATIC-LABEL: bat02:
6081 ; LINUX-64-STATIC: movq ptr(%rip), %rax 6081 ; LINUX-64-STATIC: movq ptr(%rip), %rax
6082 ; LINUX-64-STATIC: addq $64, %rax 6082 ; LINUX-64-STATIC: addq $64, %rax
6137 ; DARWIN-64-PIC-NEXT: ret 6137 ; DARWIN-64-PIC-NEXT: ret
6138 } 6138 }
6139 6139
6140 define i8* @bat03() nounwind { 6140 define i8* @bat03() nounwind {
6141 entry: 6141 entry:
6142 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*) 6142 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
6143 ; LINUX-64-STATIC-LABEL: bat03: 6143 ; LINUX-64-STATIC-LABEL: bat03:
6144 ; LINUX-64-STATIC: movl $dsrc+64, %eax 6144 ; LINUX-64-STATIC: movl $dsrc+64, %eax
6145 ; LINUX-64-STATIC: ret 6145 ; LINUX-64-STATIC: ret
6146 6146
6147 ; LINUX-32-STATIC-LABEL: bat03: 6147 ; LINUX-32-STATIC-LABEL: bat03:
6185 ; DARWIN-64-PIC-NEXT: ret 6185 ; DARWIN-64-PIC-NEXT: ret
6186 } 6186 }
6187 6187
6188 define i8* @bat04() nounwind { 6188 define i8* @bat04() nounwind {
6189 entry: 6189 entry:
6190 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*) 6190 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16) to i8*)
6191 ; LINUX-64-STATIC-LABEL: bat04: 6191 ; LINUX-64-STATIC-LABEL: bat04:
6192 ; LINUX-64-STATIC: movl $ddst+64, %eax 6192 ; LINUX-64-STATIC: movl $ddst+64, %eax
6193 ; LINUX-64-STATIC: ret 6193 ; LINUX-64-STATIC: ret
6194 6194
6195 ; LINUX-32-STATIC-LABEL: bat04: 6195 ; LINUX-32-STATIC-LABEL: bat04:
6233 ; DARWIN-64-PIC-NEXT: ret 6233 ; DARWIN-64-PIC-NEXT: ret
6234 } 6234 }
6235 6235
6236 define i8* @bat05() nounwind { 6236 define i8* @bat05() nounwind {
6237 entry: 6237 entry:
6238 %0 = load i32** @dptr, align 8 6238 %0 = load i32*, i32** @dptr, align 8
6239 %1 = getelementptr i32* %0, i64 16 6239 %1 = getelementptr i32, i32* %0, i64 16
6240 %2 = bitcast i32* %1 to i8* 6240 %2 = bitcast i32* %1 to i8*
6241 ret i8* %2 6241 ret i8* %2
6242 ; LINUX-64-STATIC-LABEL: bat05: 6242 ; LINUX-64-STATIC-LABEL: bat05:
6243 ; LINUX-64-STATIC: movq dptr(%rip), %rax 6243 ; LINUX-64-STATIC: movq dptr(%rip), %rax
6244 ; LINUX-64-STATIC: addq $64, %rax 6244 ; LINUX-64-STATIC: addq $64, %rax
6294 ; DARWIN-64-PIC-NEXT: ret 6294 ; DARWIN-64-PIC-NEXT: ret
6295 } 6295 }
6296 6296
6297 define i8* @bat06() nounwind { 6297 define i8* @bat06() nounwind {
6298 entry: 6298 entry:
6299 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*) 6299 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
6300 ; LINUX-64-STATIC-LABEL: bat06: 6300 ; LINUX-64-STATIC-LABEL: bat06:
6301 ; LINUX-64-STATIC: movl $lsrc+64, %eax 6301 ; LINUX-64-STATIC: movl $lsrc+64, %eax
6302 ; LINUX-64-STATIC: ret 6302 ; LINUX-64-STATIC: ret
6303 6303
6304 ; LINUX-32-STATIC-LABEL: bat06: 6304 ; LINUX-32-STATIC-LABEL: bat06:
6341 ; DARWIN-64-PIC-NEXT: ret 6341 ; DARWIN-64-PIC-NEXT: ret
6342 } 6342 }
6343 6343
6344 define i8* @bat07() nounwind { 6344 define i8* @bat07() nounwind {
6345 entry: 6345 entry:
6346 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*) 6346 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16) to i8*)
6347 ; LINUX-64-STATIC-LABEL: bat07: 6347 ; LINUX-64-STATIC-LABEL: bat07:
6348 ; LINUX-64-STATIC: movl $ldst+64, %eax 6348 ; LINUX-64-STATIC: movl $ldst+64, %eax
6349 ; LINUX-64-STATIC: ret 6349 ; LINUX-64-STATIC: ret
6350 6350
6351 ; LINUX-32-STATIC-LABEL: bat07: 6351 ; LINUX-32-STATIC-LABEL: bat07:
6388 ; DARWIN-64-PIC-NEXT: ret 6388 ; DARWIN-64-PIC-NEXT: ret
6389 } 6389 }
6390 6390
6391 define i8* @bat08() nounwind { 6391 define i8* @bat08() nounwind {
6392 entry: 6392 entry:
6393 %0 = load i32** @lptr, align 8 6393 %0 = load i32*, i32** @lptr, align 8
6394 %1 = getelementptr i32* %0, i64 16 6394 %1 = getelementptr i32, i32* %0, i64 16
6395 %2 = bitcast i32* %1 to i8* 6395 %2 = bitcast i32* %1 to i8*
6396 ret i8* %2 6396 ret i8* %2
6397 ; LINUX-64-STATIC-LABEL: bat08: 6397 ; LINUX-64-STATIC-LABEL: bat08:
6398 ; LINUX-64-STATIC: movq lptr(%rip), %rax 6398 ; LINUX-64-STATIC: movq lptr(%rip), %rax
6399 ; LINUX-64-STATIC: addq $64, %rax 6399 ; LINUX-64-STATIC: addq $64, %rax
6448 ; DARWIN-64-PIC-NEXT: ret 6448 ; DARWIN-64-PIC-NEXT: ret
6449 } 6449 }
6450 6450
6451 define i8* @bam00() nounwind { 6451 define i8* @bam00() nounwind {
6452 entry: 6452 entry:
6453 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*) 6453 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536) to i8*)
6454 ; LINUX-64-STATIC-LABEL: bam00: 6454 ; LINUX-64-STATIC-LABEL: bam00:
6455 ; LINUX-64-STATIC: movl $src+262144, %eax 6455 ; LINUX-64-STATIC: movl $src+262144, %eax
6456 ; LINUX-64-STATIC: ret 6456 ; LINUX-64-STATIC: ret
6457 6457
6458 ; LINUX-32-STATIC-LABEL: bam00: 6458 ; LINUX-32-STATIC-LABEL: bam00:
6501 ; DARWIN-64-PIC-NEXT: ret 6501 ; DARWIN-64-PIC-NEXT: ret
6502 } 6502 }
6503 6503
6504 define i8* @bam01() nounwind { 6504 define i8* @bam01() nounwind {
6505 entry: 6505 entry:
6506 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*) 6506 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536) to i8*)
6507 ; LINUX-64-STATIC-LABEL: bam01: 6507 ; LINUX-64-STATIC-LABEL: bam01:
6508 ; LINUX-64-STATIC: movl $dst+262144, %eax 6508 ; LINUX-64-STATIC: movl $dst+262144, %eax
6509 ; LINUX-64-STATIC: ret 6509 ; LINUX-64-STATIC: ret
6510 6510
6511 ; LINUX-32-STATIC-LABEL: bam01: 6511 ; LINUX-32-STATIC-LABEL: bam01:
6554 ; DARWIN-64-PIC-NEXT: ret 6554 ; DARWIN-64-PIC-NEXT: ret
6555 } 6555 }
6556 6556
6557 define i8* @bxm01() nounwind { 6557 define i8* @bxm01() nounwind {
6558 entry: 6558 entry:
6559 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*) 6559 ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 65536) to i8*)
6560 ; LINUX-64-STATIC-LABEL: bxm01: 6560 ; LINUX-64-STATIC-LABEL: bxm01:
6561 ; LINUX-64-STATIC: movl $xdst+262144, %eax 6561 ; LINUX-64-STATIC: movl $xdst+262144, %eax
6562 ; LINUX-64-STATIC: ret 6562 ; LINUX-64-STATIC: ret
6563 6563
6564 ; LINUX-32-STATIC-LABEL: bxm01: 6564 ; LINUX-32-STATIC-LABEL: bxm01:
6607 ; DARWIN-64-PIC-NEXT: ret 6607 ; DARWIN-64-PIC-NEXT: ret
6608 } 6608 }
6609 6609
6610 define i8* @bam02() nounwind { 6610 define i8* @bam02() nounwind {
6611 entry: 6611 entry:
6612 %0 = load i32** @ptr, align 8 6612 %0 = load i32*, i32** @ptr, align 8
6613 %1 = getelementptr i32* %0, i64 65536 6613 %1 = getelementptr i32, i32* %0, i64 65536
6614 %2 = bitcast i32* %1 to i8* 6614 %2 = bitcast i32* %1 to i8*
6615 ret i8* %2 6615 ret i8* %2
6616 ; LINUX-64-STATIC-LABEL: bam02: 6616 ; LINUX-64-STATIC-LABEL: bam02:
6617 ; LINUX-64-STATIC: movl $262144, %eax 6617 ; LINUX-64-STATIC: movl $262144, %eax
6618 ; LINUX-64-STATIC: addq ptr(%rip), %rax 6618 ; LINUX-64-STATIC: addq ptr(%rip), %rax
6673 ; DARWIN-64-PIC-NEXT: ret 6673 ; DARWIN-64-PIC-NEXT: ret
6674 } 6674 }
6675 6675
6676 define i8* @bam03() nounwind { 6676 define i8* @bam03() nounwind {
6677 entry: 6677 entry:
6678 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*) 6678 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
6679 ; LINUX-64-STATIC-LABEL: bam03: 6679 ; LINUX-64-STATIC-LABEL: bam03:
6680 ; LINUX-64-STATIC: movl $dsrc+262144, %eax 6680 ; LINUX-64-STATIC: movl $dsrc+262144, %eax
6681 ; LINUX-64-STATIC: ret 6681 ; LINUX-64-STATIC: ret
6682 6682
6683 ; LINUX-32-STATIC-LABEL: bam03: 6683 ; LINUX-32-STATIC-LABEL: bam03:
6721 ; DARWIN-64-PIC-NEXT: ret 6721 ; DARWIN-64-PIC-NEXT: ret
6722 } 6722 }
6723 6723
6724 define i8* @bam04() nounwind { 6724 define i8* @bam04() nounwind {
6725 entry: 6725 entry:
6726 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*) 6726 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
6727 ; LINUX-64-STATIC-LABEL: bam04: 6727 ; LINUX-64-STATIC-LABEL: bam04:
6728 ; LINUX-64-STATIC: movl $ddst+262144, %eax 6728 ; LINUX-64-STATIC: movl $ddst+262144, %eax
6729 ; LINUX-64-STATIC: ret 6729 ; LINUX-64-STATIC: ret
6730 6730
6731 ; LINUX-32-STATIC-LABEL: bam04: 6731 ; LINUX-32-STATIC-LABEL: bam04:
6769 ; DARWIN-64-PIC-NEXT: ret 6769 ; DARWIN-64-PIC-NEXT: ret
6770 } 6770 }
6771 6771
6772 define i8* @bam05() nounwind { 6772 define i8* @bam05() nounwind {
6773 entry: 6773 entry:
6774 %0 = load i32** @dptr, align 8 6774 %0 = load i32*, i32** @dptr, align 8
6775 %1 = getelementptr i32* %0, i64 65536 6775 %1 = getelementptr i32, i32* %0, i64 65536
6776 %2 = bitcast i32* %1 to i8* 6776 %2 = bitcast i32* %1 to i8*
6777 ret i8* %2 6777 ret i8* %2
6778 ; LINUX-64-STATIC-LABEL: bam05: 6778 ; LINUX-64-STATIC-LABEL: bam05:
6779 ; LINUX-64-STATIC: movl $262144, %eax 6779 ; LINUX-64-STATIC: movl $262144, %eax
6780 ; LINUX-64-STATIC: addq dptr(%rip), %rax 6780 ; LINUX-64-STATIC: addq dptr(%rip), %rax
6830 ; DARWIN-64-PIC-NEXT: ret 6830 ; DARWIN-64-PIC-NEXT: ret
6831 } 6831 }
6832 6832
6833 define i8* @bam06() nounwind { 6833 define i8* @bam06() nounwind {
6834 entry: 6834 entry:
6835 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*) 6835 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
6836 ; LINUX-64-STATIC-LABEL: bam06: 6836 ; LINUX-64-STATIC-LABEL: bam06:
6837 ; LINUX-64-STATIC: movl $lsrc+262144, %eax 6837 ; LINUX-64-STATIC: movl $lsrc+262144, %eax
6838 ; LINUX-64-STATIC: ret 6838 ; LINUX-64-STATIC: ret
6839 6839
6840 ; LINUX-32-STATIC-LABEL: bam06: 6840 ; LINUX-32-STATIC-LABEL: bam06:
6877 ; DARWIN-64-PIC-NEXT: ret 6877 ; DARWIN-64-PIC-NEXT: ret
6878 } 6878 }
6879 6879
6880 define i8* @bam07() nounwind { 6880 define i8* @bam07() nounwind {
6881 entry: 6881 entry:
6882 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*) 6882 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
6883 ; LINUX-64-STATIC-LABEL: bam07: 6883 ; LINUX-64-STATIC-LABEL: bam07:
6884 ; LINUX-64-STATIC: movl $ldst+262144, %eax 6884 ; LINUX-64-STATIC: movl $ldst+262144, %eax
6885 ; LINUX-64-STATIC: ret 6885 ; LINUX-64-STATIC: ret
6886 6886
6887 ; LINUX-32-STATIC-LABEL: bam07: 6887 ; LINUX-32-STATIC-LABEL: bam07:
6924 ; DARWIN-64-PIC-NEXT: ret 6924 ; DARWIN-64-PIC-NEXT: ret
6925 } 6925 }
6926 6926
6927 define i8* @bam08() nounwind { 6927 define i8* @bam08() nounwind {
6928 entry: 6928 entry:
6929 %0 = load i32** @lptr, align 8 6929 %0 = load i32*, i32** @lptr, align 8
6930 %1 = getelementptr i32* %0, i64 65536 6930 %1 = getelementptr i32, i32* %0, i64 65536
6931 %2 = bitcast i32* %1 to i8* 6931 %2 = bitcast i32* %1 to i8*
6932 ret i8* %2 6932 ret i8* %2
6933 ; LINUX-64-STATIC-LABEL: bam08: 6933 ; LINUX-64-STATIC-LABEL: bam08:
6934 ; LINUX-64-STATIC: movl $262144, %eax 6934 ; LINUX-64-STATIC: movl $262144, %eax
6935 ; LINUX-64-STATIC: addq lptr(%rip), %rax 6935 ; LINUX-64-STATIC: addq lptr(%rip), %rax
6985 } 6985 }
6986 6986
6987 define i8* @cat00(i64 %i) nounwind { 6987 define i8* @cat00(i64 %i) nounwind {
6988 entry: 6988 entry:
6989 %0 = add i64 %i, 16 6989 %0 = add i64 %i, 16
6990 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 6990 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
6991 %2 = bitcast i32* %1 to i8* 6991 %2 = bitcast i32* %1 to i8*
6992 ret i8* %2 6992 ret i8* %2
6993 ; LINUX-64-STATIC-LABEL: cat00: 6993 ; LINUX-64-STATIC-LABEL: cat00:
6994 ; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax 6994 ; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax
6995 ; LINUX-64-STATIC: ret 6995 ; LINUX-64-STATIC: ret
7046 } 7046 }
7047 7047
7048 define i8* @cxt00(i64 %i) nounwind { 7048 define i8* @cxt00(i64 %i) nounwind {
7049 entry: 7049 entry:
7050 %0 = add i64 %i, 16 7050 %0 = add i64 %i, 16
7051 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 7051 %1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
7052 %2 = bitcast i32* %1 to i8* 7052 %2 = bitcast i32* %1 to i8*
7053 ret i8* %2 7053 ret i8* %2
7054 ; LINUX-64-STATIC-LABEL: cxt00: 7054 ; LINUX-64-STATIC-LABEL: cxt00:
7055 ; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax 7055 ; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax
7056 ; LINUX-64-STATIC: ret 7056 ; LINUX-64-STATIC: ret
7107 } 7107 }
7108 7108
7109 define i8* @cat01(i64 %i) nounwind { 7109 define i8* @cat01(i64 %i) nounwind {
7110 entry: 7110 entry:
7111 %0 = add i64 %i, 16 7111 %0 = add i64 %i, 16
7112 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 7112 %1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
7113 %2 = bitcast i32* %1 to i8* 7113 %2 = bitcast i32* %1 to i8*
7114 ret i8* %2 7114 ret i8* %2
7115 ; LINUX-64-STATIC-LABEL: cat01: 7115 ; LINUX-64-STATIC-LABEL: cat01:
7116 ; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax 7116 ; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax
7117 ; LINUX-64-STATIC: ret 7117 ; LINUX-64-STATIC: ret
7168 } 7168 }
7169 7169
7170 define i8* @cxt01(i64 %i) nounwind { 7170 define i8* @cxt01(i64 %i) nounwind {
7171 entry: 7171 entry:
7172 %0 = add i64 %i, 16 7172 %0 = add i64 %i, 16
7173 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 7173 %1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
7174 %2 = bitcast i32* %1 to i8* 7174 %2 = bitcast i32* %1 to i8*
7175 ret i8* %2 7175 ret i8* %2
7176 ; LINUX-64-STATIC-LABEL: cxt01: 7176 ; LINUX-64-STATIC-LABEL: cxt01:
7177 ; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax 7177 ; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax
7178 ; LINUX-64-STATIC: ret 7178 ; LINUX-64-STATIC: ret
7228 ; DARWIN-64-PIC-NEXT: ret 7228 ; DARWIN-64-PIC-NEXT: ret
7229 } 7229 }
7230 7230
7231 define i8* @cat02(i64 %i) nounwind { 7231 define i8* @cat02(i64 %i) nounwind {
7232 entry: 7232 entry:
7233 %0 = load i32** @ptr, align 8 7233 %0 = load i32*, i32** @ptr, align 8
7234 %1 = add i64 %i, 16 7234 %1 = add i64 %i, 16
7235 %2 = getelementptr i32* %0, i64 %1 7235 %2 = getelementptr i32, i32* %0, i64 %1
7236 %3 = bitcast i32* %2 to i8* 7236 %3 = bitcast i32* %2 to i8*
7237 ret i8* %3 7237 ret i8* %3
7238 ; LINUX-64-STATIC-LABEL: cat02: 7238 ; LINUX-64-STATIC-LABEL: cat02:
7239 ; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]] 7239 ; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]]
7240 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax 7240 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
7301 } 7301 }
7302 7302
7303 define i8* @cat03(i64 %i) nounwind { 7303 define i8* @cat03(i64 %i) nounwind {
7304 entry: 7304 entry:
7305 %0 = add i64 %i, 16 7305 %0 = add i64 %i, 16
7306 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 7306 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
7307 %2 = bitcast i32* %1 to i8* 7307 %2 = bitcast i32* %1 to i8*
7308 ret i8* %2 7308 ret i8* %2
7309 ; LINUX-64-STATIC-LABEL: cat03: 7309 ; LINUX-64-STATIC-LABEL: cat03:
7310 ; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax 7310 ; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax
7311 ; LINUX-64-STATIC: ret 7311 ; LINUX-64-STATIC: ret
7360 } 7360 }
7361 7361
7362 define i8* @cat04(i64 %i) nounwind { 7362 define i8* @cat04(i64 %i) nounwind {
7363 entry: 7363 entry:
7364 %0 = add i64 %i, 16 7364 %0 = add i64 %i, 16
7365 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 7365 %1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
7366 %2 = bitcast i32* %1 to i8* 7366 %2 = bitcast i32* %1 to i8*
7367 ret i8* %2 7367 ret i8* %2
7368 ; LINUX-64-STATIC-LABEL: cat04: 7368 ; LINUX-64-STATIC-LABEL: cat04:
7369 ; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax 7369 ; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax
7370 ; LINUX-64-STATIC: ret 7370 ; LINUX-64-STATIC: ret
7418 ; DARWIN-64-PIC-NEXT: ret 7418 ; DARWIN-64-PIC-NEXT: ret
7419 } 7419 }
7420 7420
7421 define i8* @cat05(i64 %i) nounwind { 7421 define i8* @cat05(i64 %i) nounwind {
7422 entry: 7422 entry:
7423 %0 = load i32** @dptr, align 8 7423 %0 = load i32*, i32** @dptr, align 8
7424 %1 = add i64 %i, 16 7424 %1 = add i64 %i, 16
7425 %2 = getelementptr i32* %0, i64 %1 7425 %2 = getelementptr i32, i32* %0, i64 %1
7426 %3 = bitcast i32* %2 to i8* 7426 %3 = bitcast i32* %2 to i8*
7427 ret i8* %3 7427 ret i8* %3
7428 ; LINUX-64-STATIC-LABEL: cat05: 7428 ; LINUX-64-STATIC-LABEL: cat05:
7429 ; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]] 7429 ; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]]
7430 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax 7430 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
7486 } 7486 }
7487 7487
7488 define i8* @cat06(i64 %i) nounwind { 7488 define i8* @cat06(i64 %i) nounwind {
7489 entry: 7489 entry:
7490 %0 = add i64 %i, 16 7490 %0 = add i64 %i, 16
7491 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 7491 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
7492 %2 = bitcast i32* %1 to i8* 7492 %2 = bitcast i32* %1 to i8*
7493 ret i8* %2 7493 ret i8* %2
7494 ; LINUX-64-STATIC-LABEL: cat06: 7494 ; LINUX-64-STATIC-LABEL: cat06:
7495 ; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax 7495 ; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax
7496 ; LINUX-64-STATIC: ret 7496 ; LINUX-64-STATIC: ret
7545 } 7545 }
7546 7546
7547 define i8* @cat07(i64 %i) nounwind { 7547 define i8* @cat07(i64 %i) nounwind {
7548 entry: 7548 entry:
7549 %0 = add i64 %i, 16 7549 %0 = add i64 %i, 16
7550 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 7550 %1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
7551 %2 = bitcast i32* %1 to i8* 7551 %2 = bitcast i32* %1 to i8*
7552 ret i8* %2 7552 ret i8* %2
7553 ; LINUX-64-STATIC-LABEL: cat07: 7553 ; LINUX-64-STATIC-LABEL: cat07:
7554 ; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax 7554 ; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax
7555 ; LINUX-64-STATIC: ret 7555 ; LINUX-64-STATIC: ret
7603 ; DARWIN-64-PIC-NEXT: ret 7603 ; DARWIN-64-PIC-NEXT: ret
7604 } 7604 }
7605 7605
7606 define i8* @cat08(i64 %i) nounwind { 7606 define i8* @cat08(i64 %i) nounwind {
7607 entry: 7607 entry:
7608 %0 = load i32** @lptr, align 8 7608 %0 = load i32*, i32** @lptr, align 8
7609 %1 = add i64 %i, 16 7609 %1 = add i64 %i, 16
7610 %2 = getelementptr i32* %0, i64 %1 7610 %2 = getelementptr i32, i32* %0, i64 %1
7611 %3 = bitcast i32* %2 to i8* 7611 %3 = bitcast i32* %2 to i8*
7612 ret i8* %3 7612 ret i8* %3
7613 ; LINUX-64-STATIC-LABEL: cat08: 7613 ; LINUX-64-STATIC-LABEL: cat08:
7614 ; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]] 7614 ; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]]
7615 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax 7615 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
7670 } 7670 }
7671 7671
7672 define i8* @cam00(i64 %i) nounwind { 7672 define i8* @cam00(i64 %i) nounwind {
7673 entry: 7673 entry:
7674 %0 = add i64 %i, 65536 7674 %0 = add i64 %i, 65536
7675 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 7675 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
7676 %2 = bitcast i32* %1 to i8* 7676 %2 = bitcast i32* %1 to i8*
7677 ret i8* %2 7677 ret i8* %2
7678 ; LINUX-64-STATIC-LABEL: cam00: 7678 ; LINUX-64-STATIC-LABEL: cam00:
7679 ; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax 7679 ; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax
7680 ; LINUX-64-STATIC: ret 7680 ; LINUX-64-STATIC: ret
7731 } 7731 }
7732 7732
7733 define i8* @cxm00(i64 %i) nounwind { 7733 define i8* @cxm00(i64 %i) nounwind {
7734 entry: 7734 entry:
7735 %0 = add i64 %i, 65536 7735 %0 = add i64 %i, 65536
7736 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 7736 %1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
7737 %2 = bitcast i32* %1 to i8* 7737 %2 = bitcast i32* %1 to i8*
7738 ret i8* %2 7738 ret i8* %2
7739 ; LINUX-64-STATIC-LABEL: cxm00: 7739 ; LINUX-64-STATIC-LABEL: cxm00:
7740 ; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax 7740 ; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax
7741 ; LINUX-64-STATIC: ret 7741 ; LINUX-64-STATIC: ret
7792 } 7792 }
7793 7793
7794 define i8* @cam01(i64 %i) nounwind { 7794 define i8* @cam01(i64 %i) nounwind {
7795 entry: 7795 entry:
7796 %0 = add i64 %i, 65536 7796 %0 = add i64 %i, 65536
7797 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 7797 %1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
7798 %2 = bitcast i32* %1 to i8* 7798 %2 = bitcast i32* %1 to i8*
7799 ret i8* %2 7799 ret i8* %2
7800 ; LINUX-64-STATIC-LABEL: cam01: 7800 ; LINUX-64-STATIC-LABEL: cam01:
7801 ; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax 7801 ; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax
7802 ; LINUX-64-STATIC: ret 7802 ; LINUX-64-STATIC: ret
7853 } 7853 }
7854 7854
7855 define i8* @cxm01(i64 %i) nounwind { 7855 define i8* @cxm01(i64 %i) nounwind {
7856 entry: 7856 entry:
7857 %0 = add i64 %i, 65536 7857 %0 = add i64 %i, 65536
7858 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 7858 %1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
7859 %2 = bitcast i32* %1 to i8* 7859 %2 = bitcast i32* %1 to i8*
7860 ret i8* %2 7860 ret i8* %2
7861 ; LINUX-64-STATIC-LABEL: cxm01: 7861 ; LINUX-64-STATIC-LABEL: cxm01:
7862 ; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax 7862 ; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax
7863 ; LINUX-64-STATIC: ret 7863 ; LINUX-64-STATIC: ret
7913 ; DARWIN-64-PIC-NEXT: ret 7913 ; DARWIN-64-PIC-NEXT: ret
7914 } 7914 }
7915 7915
7916 define i8* @cam02(i64 %i) nounwind { 7916 define i8* @cam02(i64 %i) nounwind {
7917 entry: 7917 entry:
7918 %0 = load i32** @ptr, align 8 7918 %0 = load i32*, i32** @ptr, align 8
7919 %1 = add i64 %i, 65536 7919 %1 = add i64 %i, 65536
7920 %2 = getelementptr i32* %0, i64 %1 7920 %2 = getelementptr i32, i32* %0, i64 %1
7921 %3 = bitcast i32* %2 to i8* 7921 %3 = bitcast i32* %2 to i8*
7922 ret i8* %3 7922 ret i8* %3
7923 ; LINUX-64-STATIC-LABEL: cam02: 7923 ; LINUX-64-STATIC-LABEL: cam02:
7924 ; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]] 7924 ; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]]
7925 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax 7925 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
7986 } 7986 }
7987 7987
7988 define i8* @cam03(i64 %i) nounwind { 7988 define i8* @cam03(i64 %i) nounwind {
7989 entry: 7989 entry:
7990 %0 = add i64 %i, 65536 7990 %0 = add i64 %i, 65536
7991 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 7991 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
7992 %2 = bitcast i32* %1 to i8* 7992 %2 = bitcast i32* %1 to i8*
7993 ret i8* %2 7993 ret i8* %2
7994 ; LINUX-64-STATIC-LABEL: cam03: 7994 ; LINUX-64-STATIC-LABEL: cam03:
7995 ; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax 7995 ; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax
7996 ; LINUX-64-STATIC: ret 7996 ; LINUX-64-STATIC: ret
8045 } 8045 }
8046 8046
8047 define i8* @cam04(i64 %i) nounwind { 8047 define i8* @cam04(i64 %i) nounwind {
8048 entry: 8048 entry:
8049 %0 = add i64 %i, 65536 8049 %0 = add i64 %i, 65536
8050 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 8050 %1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
8051 %2 = bitcast i32* %1 to i8* 8051 %2 = bitcast i32* %1 to i8*
8052 ret i8* %2 8052 ret i8* %2
8053 ; LINUX-64-STATIC-LABEL: cam04: 8053 ; LINUX-64-STATIC-LABEL: cam04:
8054 ; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax 8054 ; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax
8055 ; LINUX-64-STATIC: ret 8055 ; LINUX-64-STATIC: ret
8103 ; DARWIN-64-PIC-NEXT: ret 8103 ; DARWIN-64-PIC-NEXT: ret
8104 } 8104 }
8105 8105
8106 define i8* @cam05(i64 %i) nounwind { 8106 define i8* @cam05(i64 %i) nounwind {
8107 entry: 8107 entry:
8108 %0 = load i32** @dptr, align 8 8108 %0 = load i32*, i32** @dptr, align 8
8109 %1 = add i64 %i, 65536 8109 %1 = add i64 %i, 65536
8110 %2 = getelementptr i32* %0, i64 %1 8110 %2 = getelementptr i32, i32* %0, i64 %1
8111 %3 = bitcast i32* %2 to i8* 8111 %3 = bitcast i32* %2 to i8*
8112 ret i8* %3 8112 ret i8* %3
8113 ; LINUX-64-STATIC-LABEL: cam05: 8113 ; LINUX-64-STATIC-LABEL: cam05:
8114 ; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]] 8114 ; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]]
8115 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax 8115 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
8171 } 8171 }
8172 8172
8173 define i8* @cam06(i64 %i) nounwind { 8173 define i8* @cam06(i64 %i) nounwind {
8174 entry: 8174 entry:
8175 %0 = add i64 %i, 65536 8175 %0 = add i64 %i, 65536
8176 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 8176 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
8177 %2 = bitcast i32* %1 to i8* 8177 %2 = bitcast i32* %1 to i8*
8178 ret i8* %2 8178 ret i8* %2
8179 ; LINUX-64-STATIC-LABEL: cam06: 8179 ; LINUX-64-STATIC-LABEL: cam06:
8180 ; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax 8180 ; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax
8181 ; LINUX-64-STATIC: ret 8181 ; LINUX-64-STATIC: ret
8230 } 8230 }
8231 8231
8232 define i8* @cam07(i64 %i) nounwind { 8232 define i8* @cam07(i64 %i) nounwind {
8233 entry: 8233 entry:
8234 %0 = add i64 %i, 65536 8234 %0 = add i64 %i, 65536
8235 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 8235 %1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
8236 %2 = bitcast i32* %1 to i8* 8236 %2 = bitcast i32* %1 to i8*
8237 ret i8* %2 8237 ret i8* %2
8238 ; LINUX-64-STATIC-LABEL: cam07: 8238 ; LINUX-64-STATIC-LABEL: cam07:
8239 ; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax 8239 ; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax
8240 ; LINUX-64-STATIC: ret 8240 ; LINUX-64-STATIC: ret
8288 ; DARWIN-64-PIC-NEXT: ret 8288 ; DARWIN-64-PIC-NEXT: ret
8289 } 8289 }
8290 8290
8291 define i8* @cam08(i64 %i) nounwind { 8291 define i8* @cam08(i64 %i) nounwind {
8292 entry: 8292 entry:
8293 %0 = load i32** @lptr, align 8 8293 %0 = load i32*, i32** @lptr, align 8
8294 %1 = add i64 %i, 65536 8294 %1 = add i64 %i, 65536
8295 %2 = getelementptr i32* %0, i64 %1 8295 %2 = getelementptr i32, i32* %0, i64 %1
8296 %3 = bitcast i32* %2 to i8* 8296 %3 = bitcast i32* %2 to i8*
8297 ret i8* %3 8297 ret i8* %3
8298 ; LINUX-64-STATIC-LABEL: cam08: 8298 ; LINUX-64-STATIC-LABEL: cam08:
8299 ; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]] 8299 ; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]]
8300 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax 8300 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
9178 ; DARWIN-64-PIC-NEXT: ret 9178 ; DARWIN-64-PIC-NEXT: ret
9179 } 9179 }
9180 9180
9181 define void @icaller() nounwind { 9181 define void @icaller() nounwind {
9182 entry: 9182 entry:
9183 %0 = load void ()** @ifunc, align 8 9183 %0 = load void ()*, void ()** @ifunc, align 8
9184 call void %0() nounwind 9184 call void %0() nounwind
9185 %1 = load void ()** @ifunc, align 8 9185 %1 = load void ()*, void ()** @ifunc, align 8
9186 call void %1() nounwind 9186 call void %1() nounwind
9187 ret void 9187 ret void
9188 ; LINUX-64-STATIC-LABEL: icaller: 9188 ; LINUX-64-STATIC-LABEL: icaller:
9189 ; LINUX-64-STATIC: callq *ifunc 9189 ; LINUX-64-STATIC: callq *ifunc
9190 ; LINUX-64-STATIC: callq *ifunc 9190 ; LINUX-64-STATIC: callq *ifunc
9268 ; DARWIN-64-PIC-NEXT: ret 9268 ; DARWIN-64-PIC-NEXT: ret
9269 } 9269 }
9270 9270
9271 define void @dicaller() nounwind { 9271 define void @dicaller() nounwind {
9272 entry: 9272 entry:
9273 %0 = load void ()** @difunc, align 8 9273 %0 = load void ()*, void ()** @difunc, align 8
9274 call void %0() nounwind 9274 call void %0() nounwind
9275 %1 = load void ()** @difunc, align 8 9275 %1 = load void ()*, void ()** @difunc, align 8
9276 call void %1() nounwind 9276 call void %1() nounwind
9277 ret void 9277 ret void
9278 ; LINUX-64-STATIC-LABEL: dicaller: 9278 ; LINUX-64-STATIC-LABEL: dicaller:
9279 ; LINUX-64-STATIC: callq *difunc 9279 ; LINUX-64-STATIC: callq *difunc
9280 ; LINUX-64-STATIC: callq *difunc 9280 ; LINUX-64-STATIC: callq *difunc
9351 ; DARWIN-64-PIC-NEXT: ret 9351 ; DARWIN-64-PIC-NEXT: ret
9352 } 9352 }
9353 9353
9354 define void @licaller() nounwind { 9354 define void @licaller() nounwind {
9355 entry: 9355 entry:
9356 %0 = load void ()** @lifunc, align 8 9356 %0 = load void ()*, void ()** @lifunc, align 8
9357 call void %0() nounwind 9357 call void %0() nounwind
9358 %1 = load void ()** @lifunc, align 8 9358 %1 = load void ()*, void ()** @lifunc, align 8
9359 call void %1() nounwind 9359 call void %1() nounwind
9360 ret void 9360 ret void
9361 ; LINUX-64-STATIC-LABEL: licaller: 9361 ; LINUX-64-STATIC-LABEL: licaller:
9362 ; LINUX-64-STATIC: callq *lifunc 9362 ; LINUX-64-STATIC: callq *lifunc
9363 ; LINUX-64-STATIC: callq *lifunc 9363 ; LINUX-64-STATIC: callq *lifunc
9433 ; DARWIN-64-PIC-NEXT: ret 9433 ; DARWIN-64-PIC-NEXT: ret
9434 } 9434 }
9435 9435
9436 define void @itailcaller() nounwind { 9436 define void @itailcaller() nounwind {
9437 entry: 9437 entry:
9438 %0 = load void ()** @ifunc, align 8 9438 %0 = load void ()*, void ()** @ifunc, align 8
9439 call void %0() nounwind 9439 call void %0() nounwind
9440 %1 = load void ()** @ifunc, align 8 9440 %1 = load void ()*, void ()** @ifunc, align 8
9441 call void %1() nounwind 9441 call void %1() nounwind
9442 ret void 9442 ret void
9443 ; LINUX-64-STATIC-LABEL: itailcaller: 9443 ; LINUX-64-STATIC-LABEL: itailcaller:
9444 ; LINUX-64-STATIC: callq *ifunc 9444 ; LINUX-64-STATIC: callq *ifunc
9445 ; LINUX-64-STATIC: callq *ifunc 9445 ; LINUX-64-STATIC: callq *ifunc
9523 ; DARWIN-64-PIC-NEXT: ret 9523 ; DARWIN-64-PIC-NEXT: ret
9524 } 9524 }
9525 9525
9526 define void @ditailcaller() nounwind { 9526 define void @ditailcaller() nounwind {
9527 entry: 9527 entry:
9528 %0 = load void ()** @difunc, align 8 9528 %0 = load void ()*, void ()** @difunc, align 8
9529 call void %0() nounwind 9529 call void %0() nounwind
9530 ret void 9530 ret void
9531 ; LINUX-64-STATIC-LABEL: ditailcaller: 9531 ; LINUX-64-STATIC-LABEL: ditailcaller:
9532 ; LINUX-64-STATIC: callq *difunc 9532 ; LINUX-64-STATIC: callq *difunc
9533 ; LINUX-64-STATIC: ret 9533 ; LINUX-64-STATIC: ret
9591 ; DARWIN-64-PIC-NEXT: ret 9591 ; DARWIN-64-PIC-NEXT: ret
9592 } 9592 }
9593 9593
9594 define void @litailcaller() nounwind { 9594 define void @litailcaller() nounwind {
9595 entry: 9595 entry:
9596 %0 = load void ()** @lifunc, align 8 9596 %0 = load void ()*, void ()** @lifunc, align 8
9597 call void %0() nounwind 9597 call void %0() nounwind
9598 ret void 9598 ret void
9599 ; LINUX-64-STATIC-LABEL: litailcaller: 9599 ; LINUX-64-STATIC-LABEL: litailcaller:
9600 ; LINUX-64-STATIC: callq *lifunc 9600 ; LINUX-64-STATIC: callq *lifunc
9601 ; LINUX-64-STATIC: ret 9601 ; LINUX-64-STATIC: ret