1 ; RUN: llvm-as < %s | llc -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small > %t
2 ; RUN: grep leal %t | count 33
3 ; RUN: grep movl %t | count 239
4 ; RUN: grep addl %t | count 20
5 ; RUN: grep subl %t | count 14
6 ; RUN: not grep leaq %t
7 ; RUN: not grep movq %t
8 ; RUN: not grep addq %t
9 ; RUN: not grep subq %t
10 ; RUN: not grep movabs %t
11 ; RUN: not grep largecomm %t
12 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
13 ; RUN: not grep @GOT %t
14 ; RUN: not grep @GOTOFF %t
15 ; RUN: not grep @GOTPCREL %t
16 ; RUN: not grep @GOTPLT %t
17 ; RUN: not grep @PLT %t
18 ; RUN: not grep @PLTOFF %t
19 ; RUN: grep {call \\\*} %t | count 10
20 ; RUN: not grep %rip %t
21 ; RUN: llvm-as < %s | llc -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=pic -code-model=small > %t
22 ; RUN: grep leal %t | count 43
23 ; RUN: grep movl %t | count 377
24 ; RUN: grep addl %t | count 179
25 ; RUN: grep subl %t | count 6
26 ; RUN: not grep leaq %t
27 ; RUN: not grep movq %t
28 ; RUN: not grep addq %t
29 ; RUN: not grep subq %t
30 ; RUN: not grep movabs %t
31 ; RUN: not grep largecomm %t
32 ; RUN: grep _GLOBAL_OFFSET_TABLE_ %t | count 148
33 ; RUN: grep @GOT %t | count 207
34 ; RUN: grep @GOTOFF %t | count 58
35 ; RUN: not grep @GOTPCREL %t
36 ; RUN: not grep @GOTPLT %t
37 ; RUN: grep @PLT %t | count 20
38 ; RUN: not grep @PLTOFF %t
39 ; RUN: grep {call \\\*} %t | count 10
40 ; RUN: not grep {%rip} %t
42 ; RUN: llvm-as < %s | llc -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-64-STATIC
44 ; RUN: llvm-as < %s | llc -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small > %t
45 ; RUN: not grep leal %t
46 ; RUN: grep movl %t | count 98
47 ; RUN: not grep addl %t
48 ; RUN: not grep subl %t
49 ; RUN: grep leaq %t | count 59
50 ; RUN: grep movq %t | count 195
51 ; RUN: grep addq %t | count 36
52 ; RUN: grep subq %t | count 11
53 ; RUN: not grep movabs %t
54 ; RUN: not grep largecomm %t
55 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
56 ; RUN: grep @GOT %t | count 149
57 ; RUN: not grep @GOTOFF %t
58 ; RUN: grep @GOTPCREL %t | count 149
59 ; RUN: not grep @GOTPLT %t
60 ; RUN: grep @PLT %t | count 20
61 ; RUN: not grep @PLTOFF %t
62 ; RUN: grep {call \\\*} %t | count 10
63 ; RUN: grep {%rip} %t | count 207
67 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small > %t
68 ; RUN: grep leal %t | count 33
69 ; RUN: grep movl %t | count 239
70 ; RUN: grep addl %t | count 20
71 ; RUN: grep subl %t | count 14
72 ; RUN: not grep leaq %t
73 ; RUN: not grep movq %t
74 ; RUN: not grep addq %t
75 ; RUN: not grep subq %t
76 ; RUN: not grep movabs %t
77 ; RUN: not grep largecomm %t
78 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
79 ; RUN: not grep @GOT %t
80 ; RUN: not grep @GOTOFF %t
81 ; RUN: not grep @GOTPCREL %t
82 ; RUN: not grep @GOTPLT %t
83 ; RUN: not grep @PLT %t
84 ; RUN: not grep @PLTOFF %t
85 ; RUN: grep {call \\\*} %t | count 10
86 ; RUN: not grep %rip %t
87 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=dynamic-no-pic -code-model=small > %t
88 ; RUN: grep leal %t | count 31
89 ; RUN: grep movl %t | count 312
90 ; RUN: grep addl %t | count 32
91 ; RUN: grep subl %t | count 14
92 ; RUN: not grep leaq %t
93 ; RUN: not grep movq %t
94 ; RUN: not grep addq %t
95 ; RUN: not grep subq %t
96 ; RUN: not grep movabs %t
97 ; RUN: not grep largecomm %t
98 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
99 ; RUN: not grep @GOT %t
100 ; RUN: not grep @GOTOFF %t
101 ; RUN: not grep @GOTPCREL %t
102 ; RUN: not grep @GOTPLT %t
103 ; RUN: not grep @PLT %t
104 ; RUN: not grep @PLTOFF %t
105 ; RUN: grep {call \\\*} %t | count 10
106 ; RUN: not grep {%rip} %t
107 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=pic -code-model=small > %t
108 ; RUN: grep leal %t | count 57
109 ; RUN: grep movl %t | count 292
110 ; RUN: grep addl %t | count 32
111 ; RUN: grep subl %t | count 14
112 ; RUN: not grep leaq %t
113 ; RUN: not grep movq %t
114 ; RUN: not grep addq %t
115 ; RUN: not grep subq %t
116 ; RUN: not grep movabs %t
117 ; RUN: not grep largecomm %t
118 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
119 ; RUN: not grep @GOT %t
120 ; RUN: not grep @GOTOFF %t
121 ; RUN: not grep @GOTPCREL %t
122 ; RUN: not grep @GOTPLT %t
123 ; RUN: not grep @PLT %t
124 ; RUN: not grep @PLTOFF %t
125 ; RUN: grep {call \\\*} %t | count 10
126 ; RUN: not grep {%rip} %t
127 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small > %t
128 ; RUN: not grep leal %t
129 ; RUN: grep movl %t | count 95
130 ; RUN: not grep addl %t
131 ; RUN: not grep subl %t
132 ; RUN: grep leaq %t | count 89
133 ; RUN: grep movq %t | count 142
134 ; RUN: grep addq %t | count 30
135 ; RUN: grep subq %t | count 12
136 ; RUN: not grep movabs %t
137 ; RUN: not grep largecomm %t
138 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
139 ; RUN: grep @GOT %t | count 92
140 ; RUN: not grep @GOTOFF %t
141 ; RUN: grep @GOTPCREL %t | count 92
142 ; RUN: not grep @GOTPLT %t
143 ; RUN: not grep @PLT %t
144 ; RUN: not grep @PLTOFF %t
145 ; RUN: grep {call \\\*} %t | count 10
146 ; RUN: grep {%rip} %t | count 208
147 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small > %t
148 ; RUN: not grep leal %t
149 ; RUN: grep movl %t | count 95
150 ; RUN: not grep addl %t
151 ; RUN: not grep subl %t
152 ; RUN: grep leaq %t | count 89
153 ; RUN: grep movq %t | count 142
154 ; RUN: grep addq %t | count 30
155 ; RUN: grep subq %t | count 12
156 ; RUN: not grep movabs %t
157 ; RUN: not grep largecomm %t
158 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
159 ; RUN: grep @GOT %t | count 92
160 ; RUN: not grep @GOTOFF %t
161 ; RUN: grep @GOTPCREL %t | count 92
162 ; RUN: not grep @GOTPLT %t
163 ; RUN: not grep @PLT %t
164 ; RUN: not grep @PLTOFF %t
165 ; RUN: grep {call \\\*} %t | count 10
166 ; RUN: grep {%rip} %t | count 208
168 @src = external global [131072 x i32]
169 @dst = external global [131072 x i32]
170 @xsrc = external global [32 x i32]
171 @xdst = external global [32 x i32]
172 @ptr = external global i32*
173 @dsrc = global [131072 x i32] zeroinitializer, align 32
174 @ddst = global [131072 x i32] zeroinitializer, align 32
175 @dptr = global i32* null
176 @lsrc = internal global [131072 x i32] zeroinitializer
177 @ldst = internal global [131072 x i32] zeroinitializer
178 @lptr = internal global i32* null
179 @ifunc = external global void ()*
180 @difunc = global void ()* null
181 @lifunc = internal global void ()* null
182 @lxsrc = internal global [32 x i32] zeroinitializer, align 32
183 @lxdst = internal global [32 x i32] zeroinitializer, align 32
184 @dxsrc = global [32 x i32] zeroinitializer, align 32
185 @dxdst = global [32 x i32] zeroinitializer, align 32
187 define void @foo00() nounwind {
189 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
190 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4
193 ; LINUX-64-STATIC: foo00:
194 ; LINUX-64-STATIC: movl src, %eax
195 ; LINUX-64-STATIC: movl %eax, dst
196 ; LINUX-64-STATIC: ret
199 define void @fxo00() nounwind {
201 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
202 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4
205 ; LINUX-64-STATIC: fxo00:
206 ; LINUX-64-STATIC: movl xsrc, %eax
207 ; LINUX-64-STATIC: movl %eax, xdst
208 ; LINUX-64-STATIC: ret
211 define void @foo01() nounwind {
213 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
215 ; LINUX-64-STATIC: foo01:
216 ; LINUX-64-STATIC: movq $dst, ptr
217 ; LINUX-64-STATIC: ret
220 define void @fxo01() nounwind {
222 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
224 ; LINUX-64-STATIC: fxo01:
225 ; LINUX-64-STATIC: movq $xdst, ptr
226 ; LINUX-64-STATIC: ret
229 define void @foo02() nounwind {
231 %0 = load i32** @ptr, align 8
232 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
233 store i32 %1, i32* %0, align 4
235 ; LINUX-64-STATIC: foo02:
236 ; LINUX-64-STATIC: movl src, %
237 ; LINUX-64-STATIC: movq ptr, %
238 ; LINUX-64-STATIC: movl
239 ; LINUX-64-STATIC: ret
242 define void @fxo02() nounwind {
244 %0 = load i32** @ptr, align 8
245 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
246 store i32 %1, i32* %0, align 4
247 ; LINUX-64-STATIC: fxo02:
248 ; LINUX-64-STATIC: movl xsrc, %
249 ; LINUX-64-STATIC: movq ptr, %
250 ; LINUX-64-STATIC: movl
251 ; LINUX-64-STATIC: ret
255 define void @foo03() nounwind {
257 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
258 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32
260 ; LINUX-64-STATIC: foo03:
261 ; LINUX-64-STATIC: movl dsrc, %eax
262 ; LINUX-64-STATIC: movl %eax, ddst
263 ; LINUX-64-STATIC: ret
266 define void @foo04() nounwind {
268 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
270 ; LINUX-64-STATIC: foo04:
271 ; LINUX-64-STATIC: movq $ddst, dptr
272 ; LINUX-64-STATIC: ret
275 define void @foo05() nounwind {
277 %0 = load i32** @dptr, align 8
278 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
279 store i32 %1, i32* %0, align 4
281 ; LINUX-64-STATIC: foo05:
282 ; LINUX-64-STATIC: movl dsrc, %
283 ; LINUX-64-STATIC: movq dptr, %
284 ; LINUX-64-STATIC: movl
285 ; LINUX-64-STATIC: ret
288 define void @foo06() nounwind {
290 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
291 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4
293 ; LINUX-64-STATIC: foo06:
294 ; LINUX-64-STATIC: movl lsrc, %eax
295 ; LINUX-64-STATIC: movl %eax, ldst
296 ; LINUX-64-STATIC: ret
299 define void @foo07() nounwind {
301 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
303 ; LINUX-64-STATIC: foo07:
304 ; LINUX-64-STATIC: movq $ldst, lptr
305 ; LINUX-64-STATIC: ret
308 define void @foo08() nounwind {
310 %0 = load i32** @lptr, align 8
311 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
312 store i32 %1, i32* %0, align 4
314 ; LINUX-64-STATIC: foo08:
315 ; LINUX-64-STATIC: movl lsrc, %
316 ; LINUX-64-STATIC: movq lptr, %
317 ; LINUX-64-STATIC: movl
318 ; LINUX-64-STATIC: ret
321 define void @qux00() nounwind {
323 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
324 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4
326 ; LINUX-64-STATIC: qux00:
327 ; LINUX-64-STATIC: movl src+64, %eax
328 ; LINUX-64-STATIC: movl %eax, dst+64
329 ; LINUX-64-STATIC: ret
332 define void @qxx00() nounwind {
334 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
335 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4
337 ; LINUX-64-STATIC: qxx00:
338 ; LINUX-64-STATIC: movl xsrc+64, %eax
339 ; LINUX-64-STATIC: movl %eax, xdst+64
340 ; LINUX-64-STATIC: ret
343 define void @qux01() nounwind {
345 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
347 ; LINUX-64-STATIC: qux01:
348 ; LINUX-64-STATIC: movq $dst+64, ptr
349 ; LINUX-64-STATIC: ret
352 define void @qxx01() nounwind {
354 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
356 ; LINUX-64-STATIC: qxx01:
357 ; LINUX-64-STATIC: movq $xdst+64, ptr
358 ; LINUX-64-STATIC: ret
361 define void @qux02() nounwind {
363 %0 = load i32** @ptr, align 8
364 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
365 %2 = getelementptr i32* %0, i64 16
366 store i32 %1, i32* %2, align 4
367 ; LINUX-64-STATIC: qux02:
368 ; LINUX-64-STATIC: movl src+64, %eax
369 ; LINUX-64-STATIC: movq ptr, %rcx
370 ; LINUX-64-STATIC: movl %eax, 64(%rcx)
371 ; LINUX-64-STATIC: ret
375 define void @qxx02() nounwind {
377 %0 = load i32** @ptr, align 8
378 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
379 %2 = getelementptr i32* %0, i64 16
380 store i32 %1, i32* %2, align 4
381 ; LINUX-64-STATIC: qxx02:
382 ; LINUX-64-STATIC: movl xsrc+64, %eax
383 ; LINUX-64-STATIC: movq ptr, %rcx
384 ; LINUX-64-STATIC: movl %eax, 64(%rcx)
385 ; LINUX-64-STATIC: ret
389 define void @qux03() nounwind {
391 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
392 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32
394 ; LINUX-64-STATIC: qux03:
395 ; LINUX-64-STATIC: movl dsrc+64, %eax
396 ; LINUX-64-STATIC: movl %eax, ddst+64
397 ; LINUX-64-STATIC: ret
400 define void @qux04() nounwind {
402 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
404 ; LINUX-64-STATIC: qux04:
405 ; LINUX-64-STATIC: movq $ddst+64, dptr
406 ; LINUX-64-STATIC: ret
409 define void @qux05() nounwind {
411 %0 = load i32** @dptr, align 8
412 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
413 %2 = getelementptr i32* %0, i64 16
414 store i32 %1, i32* %2, align 4
415 ; LINUX-64-STATIC: qux05:
416 ; LINUX-64-STATIC: movl dsrc+64, %eax
417 ; LINUX-64-STATIC: movq dptr, %rcx
418 ; LINUX-64-STATIC: movl %eax, 64(%rcx)
419 ; LINUX-64-STATIC: ret
423 define void @qux06() nounwind {
425 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
426 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4
428 ; LINUX-64-STATIC: qux06:
429 ; LINUX-64-STATIC: movl lsrc+64, %eax
430 ; LINUX-64-STATIC: movl %eax, ldst+64
431 ; LINUX-64-STATIC: ret
434 define void @qux07() nounwind {
436 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
438 ; LINUX-64-STATIC: qux07:
439 ; LINUX-64-STATIC: movq $ldst+64, lptr
440 ; LINUX-64-STATIC: ret
443 define void @qux08() nounwind {
445 %0 = load i32** @lptr, align 8
446 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
447 %2 = getelementptr i32* %0, i64 16
448 store i32 %1, i32* %2, align 4
449 ; LINUX-64-STATIC: qux08:
450 ; LINUX-64-STATIC: movl lsrc+64, %eax
451 ; LINUX-64-STATIC: movq lptr, %rcx
452 ; LINUX-64-STATIC: movl %eax, 64(%rcx)
453 ; LINUX-64-STATIC: ret
457 define void @ind00(i64 %i) nounwind {
459 %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
460 %1 = load i32* %0, align 4
461 %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
462 store i32 %1, i32* %2, align 4
464 ; LINUX-64-STATIC: ind00:
465 ; LINUX-64-STATIC: movl src(,%rdi,4), %eax
466 ; LINUX-64-STATIC: movl %eax, dst(,%rdi,4)
467 ; LINUX-64-STATIC: ret
470 define void @ixd00(i64 %i) nounwind {
472 %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
473 %1 = load i32* %0, align 4
474 %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
475 store i32 %1, i32* %2, align 4
477 ; LINUX-64-STATIC: ixd00:
478 ; LINUX-64-STATIC: movl xsrc(,%rdi,4), %eax
479 ; LINUX-64-STATIC: movl %eax, xdst(,%rdi,4)
480 ; LINUX-64-STATIC: ret
483 define void @ind01(i64 %i) nounwind {
485 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
486 store i32* %0, i32** @ptr, align 8
488 ; LINUX-64-STATIC: ind01:
489 ; LINUX-64-STATIC: leaq dst(,%rdi,4), %rax
490 ; LINUX-64-STATIC: movq %rax, ptr
491 ; LINUX-64-STATIC: ret
494 define void @ixd01(i64 %i) nounwind {
496 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
497 store i32* %0, i32** @ptr, align 8
499 ; LINUX-64-STATIC: ixd01:
500 ; LINUX-64-STATIC: leaq xdst(,%rdi,4), %rax
501 ; LINUX-64-STATIC: movq %rax, ptr
502 ; LINUX-64-STATIC: ret
505 define void @ind02(i64 %i) nounwind {
507 %0 = load i32** @ptr, align 8
508 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
509 %2 = load i32* %1, align 4
510 %3 = getelementptr i32* %0, i64 %i
511 store i32 %2, i32* %3, align 4
513 ; LINUX-64-STATIC: ind02:
514 ; LINUX-64-STATIC: movl src(,%rdi,4), %eax
515 ; LINUX-64-STATIC: movq ptr, %rcx
516 ; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4)
517 ; LINUX-64-STATIC: ret
520 define void @ixd02(i64 %i) nounwind {
522 %0 = load i32** @ptr, align 8
523 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
524 %2 = load i32* %1, align 4
525 %3 = getelementptr i32* %0, i64 %i
526 store i32 %2, i32* %3, align 4
528 ; LINUX-64-STATIC: ixd02:
529 ; LINUX-64-STATIC: movl xsrc(,%rdi,4), %eax
530 ; LINUX-64-STATIC: movq ptr, %rcx
531 ; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4)
532 ; LINUX-64-STATIC: ret
535 define void @ind03(i64 %i) nounwind {
537 %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
538 %1 = load i32* %0, align 4
539 %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
540 store i32 %1, i32* %2, align 4
542 ; LINUX-64-STATIC: ind03:
543 ; LINUX-64-STATIC: movl dsrc(,%rdi,4), %eax
544 ; LINUX-64-STATIC: movl %eax, ddst(,%rdi,4)
545 ; LINUX-64-STATIC: ret
548 define void @ind04(i64 %i) nounwind {
550 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
551 store i32* %0, i32** @dptr, align 8
553 ; LINUX-64-STATIC: ind04:
554 ; LINUX-64-STATIC: leaq ddst(,%rdi,4), %rax
555 ; LINUX-64-STATIC: movq %rax, dptr
556 ; LINUX-64-STATIC: ret
559 define void @ind05(i64 %i) nounwind {
561 %0 = load i32** @dptr, align 8
562 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
563 %2 = load i32* %1, align 4
564 %3 = getelementptr i32* %0, i64 %i
565 store i32 %2, i32* %3, align 4
567 ; LINUX-64-STATIC: ind05:
568 ; LINUX-64-STATIC: movl dsrc(,%rdi,4), %eax
569 ; LINUX-64-STATIC: movq dptr, %rcx
570 ; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4)
571 ; LINUX-64-STATIC: ret
574 define void @ind06(i64 %i) nounwind {
576 %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
577 %1 = load i32* %0, align 4
578 %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
579 store i32 %1, i32* %2, align 4
581 ; LINUX-64-STATIC: ind06:
582 ; LINUX-64-STATIC: movl lsrc(,%rdi,4), %eax
583 ; LINUX-64-STATIC: movl %eax, ldst(,%rdi,4)
584 ; LINUX-64-STATIC: ret
587 define void @ind07(i64 %i) nounwind {
589 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
590 store i32* %0, i32** @lptr, align 8
592 ; LINUX-64-STATIC: ind07:
593 ; LINUX-64-STATIC: leaq ldst(,%rdi,4), %rax
594 ; LINUX-64-STATIC: movq %rax, lptr
595 ; LINUX-64-STATIC: ret
598 define void @ind08(i64 %i) nounwind {
600 %0 = load i32** @lptr, align 8
601 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
602 %2 = load i32* %1, align 4
603 %3 = getelementptr i32* %0, i64 %i
604 store i32 %2, i32* %3, align 4
606 ; LINUX-64-STATIC: ind08:
607 ; LINUX-64-STATIC: movl lsrc(,%rdi,4), %eax
608 ; LINUX-64-STATIC: movq lptr, %rcx
609 ; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4)
610 ; LINUX-64-STATIC: ret
613 define void @off00(i64 %i) nounwind {
616 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
617 %2 = load i32* %1, align 4
618 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
619 store i32 %2, i32* %3, align 4
621 ; LINUX-64-STATIC: off00:
622 ; LINUX-64-STATIC: movl src+64(,%rdi,4), %eax
623 ; LINUX-64-STATIC: movl %eax, dst+64(,%rdi,4)
624 ; LINUX-64-STATIC: ret
627 define void @oxf00(i64 %i) nounwind {
630 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
631 %2 = load i32* %1, align 4
632 %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
633 store i32 %2, i32* %3, align 4
635 ; LINUX-64-STATIC: oxf00:
636 ; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), %eax
637 ; LINUX-64-STATIC: movl %eax, xdst+64(,%rdi,4)
638 ; LINUX-64-STATIC: ret
641 define void @off01(i64 %i) nounwind {
643 %.sum = add i64 %i, 16
644 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
645 store i32* %0, i32** @ptr, align 8
647 ; LINUX-64-STATIC: off01:
648 ; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax
649 ; LINUX-64-STATIC: movq %rax, ptr
650 ; LINUX-64-STATIC: ret
653 define void @oxf01(i64 %i) nounwind {
655 %.sum = add i64 %i, 16
656 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum
657 store i32* %0, i32** @ptr, align 8
659 ; LINUX-64-STATIC: oxf01:
660 ; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax
661 ; LINUX-64-STATIC: movq %rax, ptr
662 ; LINUX-64-STATIC: ret
665 define void @off02(i64 %i) nounwind {
667 %0 = load i32** @ptr, align 8
669 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
670 %3 = load i32* %2, align 4
671 %4 = getelementptr i32* %0, i64 %1
672 store i32 %3, i32* %4, align 4
674 ; LINUX-64-STATIC: off02:
675 ; LINUX-64-STATIC: movl src+64(,%rdi,4), %eax
676 ; LINUX-64-STATIC: movq ptr, %rcx
677 ; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4)
678 ; LINUX-64-STATIC: ret
681 define void @oxf02(i64 %i) nounwind {
683 %0 = load i32** @ptr, align 8
685 %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1
686 %3 = load i32* %2, align 4
687 %4 = getelementptr i32* %0, i64 %1
688 store i32 %3, i32* %4, align 4
690 ; LINUX-64-STATIC: oxf02:
691 ; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), %eax
692 ; LINUX-64-STATIC: movq ptr, %rcx
693 ; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4)
694 ; LINUX-64-STATIC: ret
697 define void @off03(i64 %i) nounwind {
700 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
701 %2 = load i32* %1, align 4
702 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
703 store i32 %2, i32* %3, align 4
705 ; LINUX-64-STATIC: off03:
706 ; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), %eax
707 ; LINUX-64-STATIC: movl %eax, ddst+64(,%rdi,4)
708 ; LINUX-64-STATIC: ret
711 define void @off04(i64 %i) nounwind {
713 %.sum = add i64 %i, 16
714 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
715 store i32* %0, i32** @dptr, align 8
717 ; LINUX-64-STATIC: off04:
718 ; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax
719 ; LINUX-64-STATIC: movq %rax, dptr
720 ; LINUX-64-STATIC: ret
723 define void @off05(i64 %i) nounwind {
725 %0 = load i32** @dptr, align 8
727 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
728 %3 = load i32* %2, align 4
729 %4 = getelementptr i32* %0, i64 %1
730 store i32 %3, i32* %4, align 4
732 ; LINUX-64-STATIC: off05:
733 ; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), %eax
734 ; LINUX-64-STATIC: movq dptr, %rcx
735 ; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4)
736 ; LINUX-64-STATIC: ret
739 define void @off06(i64 %i) nounwind {
742 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
743 %2 = load i32* %1, align 4
744 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
745 store i32 %2, i32* %3, align 4
747 ; LINUX-64-STATIC: off06:
748 ; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), %eax
749 ; LINUX-64-STATIC: movl %eax, ldst+64(,%rdi,4)
750 ; LINUX-64-STATIC: ret
753 define void @off07(i64 %i) nounwind {
755 %.sum = add i64 %i, 16
756 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
757 store i32* %0, i32** @lptr, align 8
759 ; LINUX-64-STATIC: off07:
760 ; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax
761 ; LINUX-64-STATIC: movq %rax, lptr
762 ; LINUX-64-STATIC: ret
765 define void @off08(i64 %i) nounwind {
767 %0 = load i32** @lptr, align 8
769 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
770 %3 = load i32* %2, align 4
771 %4 = getelementptr i32* %0, i64 %1
772 store i32 %3, i32* %4, align 4
774 ; LINUX-64-STATIC: off08:
775 ; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), %eax
776 ; LINUX-64-STATIC: movq lptr, %rcx
777 ; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4)
778 ; LINUX-64-STATIC: ret
781 define void @moo00(i64 %i) nounwind {
783 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
784 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4
786 ; LINUX-64-STATIC: moo00:
787 ; LINUX-64-STATIC: movl src+262144, %eax
788 ; LINUX-64-STATIC: movl %eax, dst+262144
789 ; LINUX-64-STATIC: ret
792 define void @moo01(i64 %i) nounwind {
794 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
796 ; LINUX-64-STATIC: moo01:
797 ; LINUX-64-STATIC: movq $dst+262144, ptr
798 ; LINUX-64-STATIC: ret
801 define void @moo02(i64 %i) nounwind {
803 %0 = load i32** @ptr, align 8
804 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
805 %2 = getelementptr i32* %0, i64 65536
806 store i32 %1, i32* %2, align 4
808 ; LINUX-64-STATIC: moo02:
809 ; LINUX-64-STATIC: movl src+262144, %eax
810 ; LINUX-64-STATIC: movq ptr, %rcx
811 ; LINUX-64-STATIC: movl %eax, 262144(%rcx)
812 ; LINUX-64-STATIC: ret
815 define void @moo03(i64 %i) nounwind {
817 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
818 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32
820 ; LINUX-64-STATIC: moo03:
821 ; LINUX-64-STATIC: movl dsrc+262144, %eax
822 ; LINUX-64-STATIC: movl %eax, ddst+262144
823 ; LINUX-64-STATIC: ret
826 define void @moo04(i64 %i) nounwind {
828 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
830 ; LINUX-64-STATIC: moo04:
831 ; LINUX-64-STATIC: movq $ddst+262144, dptr
832 ; LINUX-64-STATIC: ret
835 define void @moo05(i64 %i) nounwind {
837 %0 = load i32** @dptr, align 8
838 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
839 %2 = getelementptr i32* %0, i64 65536
840 store i32 %1, i32* %2, align 4
842 ; LINUX-64-STATIC: moo05:
843 ; LINUX-64-STATIC: movl dsrc+262144, %eax
844 ; LINUX-64-STATIC: movq dptr, %rcx
845 ; LINUX-64-STATIC: movl %eax, 262144(%rcx)
846 ; LINUX-64-STATIC: ret
849 define void @moo06(i64 %i) nounwind {
851 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
852 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4
854 ; LINUX-64-STATIC: moo06:
855 ; LINUX-64-STATIC: movl lsrc+262144, %eax
856 ; LINUX-64-STATIC: movl %eax, ldst+262144
857 ; LINUX-64-STATIC: ret
860 define void @moo07(i64 %i) nounwind {
862 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
864 ; LINUX-64-STATIC: moo07:
865 ; LINUX-64-STATIC: movq $ldst+262144, lptr
866 ; LINUX-64-STATIC: ret
869 define void @moo08(i64 %i) nounwind {
871 %0 = load i32** @lptr, align 8
872 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
873 %2 = getelementptr i32* %0, i64 65536
874 store i32 %1, i32* %2, align 4
876 ; LINUX-64-STATIC: moo08:
877 ; LINUX-64-STATIC: movl lsrc+262144, %eax
878 ; LINUX-64-STATIC: movq lptr, %rcx
879 ; LINUX-64-STATIC: movl %eax, 262144(%rcx)
880 ; LINUX-64-STATIC: ret
883 define void @big00(i64 %i) nounwind {
885 %0 = add i64 %i, 65536
886 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
887 %2 = load i32* %1, align 4
888 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
889 store i32 %2, i32* %3, align 4
891 ; LINUX-64-STATIC: big00:
892 ; LINUX-64-STATIC: movl src+262144(,%rdi,4), %eax
893 ; LINUX-64-STATIC: movl %eax, dst+262144(,%rdi,4)
894 ; LINUX-64-STATIC: ret
897 define void @big01(i64 %i) nounwind {
899 %.sum = add i64 %i, 65536
900 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
901 store i32* %0, i32** @ptr, align 8
903 ; LINUX-64-STATIC: big01:
904 ; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax
905 ; LINUX-64-STATIC: movq %rax, ptr
906 ; LINUX-64-STATIC: ret
909 define void @big02(i64 %i) nounwind {
911 %0 = load i32** @ptr, align 8
912 %1 = add i64 %i, 65536
913 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
914 %3 = load i32* %2, align 4
915 %4 = getelementptr i32* %0, i64 %1
916 store i32 %3, i32* %4, align 4
918 ; LINUX-64-STATIC: big02:
919 ; LINUX-64-STATIC: movl src+262144(,%rdi,4), %eax
920 ; LINUX-64-STATIC: movq ptr, %rcx
921 ; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4)
922 ; LINUX-64-STATIC: ret
925 define void @big03(i64 %i) nounwind {
927 %0 = add i64 %i, 65536
928 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
929 %2 = load i32* %1, align 4
930 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
931 store i32 %2, i32* %3, align 4
933 ; LINUX-64-STATIC: big03:
934 ; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), %eax
935 ; LINUX-64-STATIC: movl %eax, ddst+262144(,%rdi,4)
936 ; LINUX-64-STATIC: ret
939 define void @big04(i64 %i) nounwind {
941 %.sum = add i64 %i, 65536
942 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
943 store i32* %0, i32** @dptr, align 8
945 ; LINUX-64-STATIC: big04:
946 ; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax
947 ; LINUX-64-STATIC: movq %rax, dptr
948 ; LINUX-64-STATIC: ret
951 define void @big05(i64 %i) nounwind {
953 %0 = load i32** @dptr, align 8
954 %1 = add i64 %i, 65536
955 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
956 %3 = load i32* %2, align 4
957 %4 = getelementptr i32* %0, i64 %1
958 store i32 %3, i32* %4, align 4
960 ; LINUX-64-STATIC: big05:
961 ; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), %eax
962 ; LINUX-64-STATIC: movq dptr, %rcx
963 ; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4)
964 ; LINUX-64-STATIC: ret
967 define void @big06(i64 %i) nounwind {
969 %0 = add i64 %i, 65536
970 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
971 %2 = load i32* %1, align 4
972 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
973 store i32 %2, i32* %3, align 4
975 ; LINUX-64-STATIC: big06:
976 ; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), %eax
977 ; LINUX-64-STATIC: movl %eax, ldst+262144(,%rdi,4)
978 ; LINUX-64-STATIC: ret
981 define void @big07(i64 %i) nounwind {
983 %.sum = add i64 %i, 65536
984 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
985 store i32* %0, i32** @lptr, align 8
987 ; LINUX-64-STATIC: big07:
988 ; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax
989 ; LINUX-64-STATIC: movq %rax, lptr
990 ; LINUX-64-STATIC: ret
993 define void @big08(i64 %i) nounwind {
995 %0 = load i32** @lptr, align 8
996 %1 = add i64 %i, 65536
997 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
998 %3 = load i32* %2, align 4
999 %4 = getelementptr i32* %0, i64 %1
1000 store i32 %3, i32* %4, align 4
1002 ; LINUX-64-STATIC: big08:
1003 ; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), %eax
1004 ; LINUX-64-STATIC: movq lptr, %rcx
1005 ; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4)
1006 ; LINUX-64-STATIC: ret
1009 define i8* @bar00() nounwind {
1011 ret i8* bitcast ([131072 x i32]* @src to i8*)
1012 ; LINUX-64-STATIC: bar00:
1013 ; LINUX-64-STATIC: movl $src, %eax
1014 ; LINUX-64-STATIC: ret
1017 define i8* @bxr00() nounwind {
1019 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
1020 ; LINUX-64-STATIC: bxr00:
1021 ; LINUX-64-STATIC: movl $xsrc, %eax
1022 ; LINUX-64-STATIC: ret
1025 define i8* @bar01() nounwind {
1027 ret i8* bitcast ([131072 x i32]* @dst to i8*)
1028 ; LINUX-64-STATIC: bar01:
1029 ; LINUX-64-STATIC: movl $dst, %eax
1030 ; LINUX-64-STATIC: ret
1033 define i8* @bxr01() nounwind {
1035 ret i8* bitcast ([32 x i32]* @xdst to i8*)
1036 ; LINUX-64-STATIC: bxr01:
1037 ; LINUX-64-STATIC: movl $xdst, %eax
1038 ; LINUX-64-STATIC: ret
1041 define i8* @bar02() nounwind {
1043 ret i8* bitcast (i32** @ptr to i8*)
1044 ; LINUX-64-STATIC: bar02:
1045 ; LINUX-64-STATIC: movl $ptr, %eax
1046 ; LINUX-64-STATIC: ret
1049 define i8* @bar03() nounwind {
1051 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
1052 ; LINUX-64-STATIC: bar03:
1053 ; LINUX-64-STATIC: movl $dsrc, %eax
1054 ; LINUX-64-STATIC: ret
1057 define i8* @bar04() nounwind {
1059 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
1060 ; LINUX-64-STATIC: bar04:
1061 ; LINUX-64-STATIC: movl $ddst, %eax
1062 ; LINUX-64-STATIC: ret
1065 define i8* @bar05() nounwind {
1067 ret i8* bitcast (i32** @dptr to i8*)
1068 ; LINUX-64-STATIC: bar05:
1069 ; LINUX-64-STATIC: movl $dptr, %eax
1070 ; LINUX-64-STATIC: ret
1073 define i8* @bar06() nounwind {
1075 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
1076 ; LINUX-64-STATIC: bar06:
1077 ; LINUX-64-STATIC: movl $lsrc, %eax
1078 ; LINUX-64-STATIC: ret
1081 define i8* @bar07() nounwind {
1083 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
1084 ; LINUX-64-STATIC: bar07:
1085 ; LINUX-64-STATIC: movl $ldst, %eax
1086 ; LINUX-64-STATIC: ret
1089 define i8* @bar08() nounwind {
1091 ret i8* bitcast (i32** @lptr to i8*)
1092 ; LINUX-64-STATIC: bar08:
1093 ; LINUX-64-STATIC: movl $lptr, %eax
1094 ; LINUX-64-STATIC: ret
1097 define i8* @har00() nounwind {
1099 ret i8* bitcast ([131072 x i32]* @src to i8*)
1100 ; LINUX-64-STATIC: har00:
1101 ; LINUX-64-STATIC: movl $src, %eax
1102 ; LINUX-64-STATIC: ret
1105 define i8* @hxr00() nounwind {
1107 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
1108 ; LINUX-64-STATIC: hxr00:
1109 ; LINUX-64-STATIC: movl $xsrc, %eax
1110 ; LINUX-64-STATIC: ret
1113 define i8* @har01() nounwind {
1115 ret i8* bitcast ([131072 x i32]* @dst to i8*)
1116 ; LINUX-64-STATIC: har01:
1117 ; LINUX-64-STATIC: movl $dst, %eax
1118 ; LINUX-64-STATIC: ret
1121 define i8* @hxr01() nounwind {
1123 ret i8* bitcast ([32 x i32]* @xdst to i8*)
1124 ; LINUX-64-STATIC: hxr01:
1125 ; LINUX-64-STATIC: movl $xdst, %eax
1126 ; LINUX-64-STATIC: ret
1129 define i8* @har02() nounwind {
1131 %0 = load i32** @ptr, align 8
1132 %1 = bitcast i32* %0 to i8*
1134 ; LINUX-64-STATIC: har02:
1135 ; LINUX-64-STATIC: movq ptr, %rax
1136 ; LINUX-64-STATIC: ret
1139 define i8* @har03() nounwind {
1141 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
1142 ; LINUX-64-STATIC: har03:
1143 ; LINUX-64-STATIC: movl $dsrc, %eax
1144 ; LINUX-64-STATIC: ret
1147 define i8* @har04() nounwind {
1149 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
1150 ; LINUX-64-STATIC: har04:
1151 ; LINUX-64-STATIC: movl $ddst, %eax
1152 ; LINUX-64-STATIC: ret
1155 define i8* @har05() nounwind {
1157 %0 = load i32** @dptr, align 8
1158 %1 = bitcast i32* %0 to i8*
1160 ; LINUX-64-STATIC: har05:
1161 ; LINUX-64-STATIC: movq dptr, %rax
1162 ; LINUX-64-STATIC: ret
1165 define i8* @har06() nounwind {
1167 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
1168 ; LINUX-64-STATIC: har06:
1169 ; LINUX-64-STATIC: movl $lsrc, %eax
1170 ; LINUX-64-STATIC: ret
1173 define i8* @har07() nounwind {
1175 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
1176 ; LINUX-64-STATIC: har07:
1177 ; LINUX-64-STATIC: movl $ldst, %eax
1178 ; LINUX-64-STATIC: ret
1181 define i8* @har08() nounwind {
1183 %0 = load i32** @lptr, align 8
1184 %1 = bitcast i32* %0 to i8*
1186 ; LINUX-64-STATIC: har08:
1187 ; LINUX-64-STATIC: movq lptr, %rax
1188 ; LINUX-64-STATIC: ret
1191 define i8* @bat00() nounwind {
1193 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
1194 ; LINUX-64-STATIC: bat00:
1195 ; LINUX-64-STATIC: movl $src+64, %eax
1196 ; LINUX-64-STATIC: ret
1199 define i8* @bxt00() nounwind {
1201 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
1202 ; LINUX-64-STATIC: bxt00:
1203 ; LINUX-64-STATIC: movl $xsrc+64, %eax
1204 ; LINUX-64-STATIC: ret
1207 define i8* @bat01() nounwind {
1209 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
1210 ; LINUX-64-STATIC: bat01:
1211 ; LINUX-64-STATIC: movl $dst+64, %eax
1212 ; LINUX-64-STATIC: ret
1215 define i8* @bxt01() nounwind {
1217 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
1218 ; LINUX-64-STATIC: bxt01:
1219 ; LINUX-64-STATIC: movl $xdst+64, %eax
1220 ; LINUX-64-STATIC: ret
1223 define i8* @bat02() nounwind {
1225 %0 = load i32** @ptr, align 8
1226 %1 = getelementptr i32* %0, i64 16
1227 %2 = bitcast i32* %1 to i8*
1229 ; LINUX-64-STATIC: bat02:
1230 ; LINUX-64-STATIC: movq ptr, %rax
1231 ; LINUX-64-STATIC: addq $64, %rax
1232 ; LINUX-64-STATIC: ret
1235 define i8* @bat03() nounwind {
1237 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
1238 ; LINUX-64-STATIC: bat03:
1239 ; LINUX-64-STATIC: movl $dsrc+64, %eax
1240 ; LINUX-64-STATIC: ret
1243 define i8* @bat04() nounwind {
1245 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
1246 ; LINUX-64-STATIC: bat04:
1247 ; LINUX-64-STATIC: movl $ddst+64, %eax
1248 ; LINUX-64-STATIC: ret
1251 define i8* @bat05() nounwind {
1253 %0 = load i32** @dptr, align 8
1254 %1 = getelementptr i32* %0, i64 16
1255 %2 = bitcast i32* %1 to i8*
1257 ; LINUX-64-STATIC: bat05:
1258 ; LINUX-64-STATIC: movq dptr, %rax
1259 ; LINUX-64-STATIC: addq $64, %rax
1260 ; LINUX-64-STATIC: ret
1263 define i8* @bat06() nounwind {
1265 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
1266 ; LINUX-64-STATIC: bat06:
1267 ; LINUX-64-STATIC: movl $lsrc+64, %eax
1268 ; LINUX-64-STATIC: ret
1271 define i8* @bat07() nounwind {
1273 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
1274 ; LINUX-64-STATIC: bat07:
1275 ; LINUX-64-STATIC: movl $ldst+64, %eax
1276 ; LINUX-64-STATIC: ret
1279 define i8* @bat08() nounwind {
1281 %0 = load i32** @lptr, align 8
1282 %1 = getelementptr i32* %0, i64 16
1283 %2 = bitcast i32* %1 to i8*
1285 ; LINUX-64-STATIC: bat08:
1286 ; LINUX-64-STATIC: movq lptr, %rax
1287 ; LINUX-64-STATIC: addq $64, %rax
1288 ; LINUX-64-STATIC: ret
1291 define i8* @bam00() nounwind {
1293 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
1294 ; LINUX-64-STATIC: bam00:
1295 ; LINUX-64-STATIC: movl $src+262144, %eax
1296 ; LINUX-64-STATIC: ret
1299 define i8* @bam01() nounwind {
1301 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
1302 ; LINUX-64-STATIC: bam01:
1303 ; LINUX-64-STATIC: movl $dst+262144, %eax
1304 ; LINUX-64-STATIC: ret
1307 define i8* @bxm01() nounwind {
1309 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
1310 ; LINUX-64-STATIC: bxm01:
1311 ; LINUX-64-STATIC: movl $xdst+262144, %eax
1312 ; LINUX-64-STATIC: ret
1315 define i8* @bam02() nounwind {
1317 %0 = load i32** @ptr, align 8
1318 %1 = getelementptr i32* %0, i64 65536
1319 %2 = bitcast i32* %1 to i8*
1321 ; LINUX-64-STATIC: bam02:
1322 ; LINUX-64-STATIC: movl $262144, %eax
1323 ; LINUX-64-STATIC: addq ptr, %rax
1324 ; LINUX-64-STATIC: ret
1327 define i8* @bam03() nounwind {
1329 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
1330 ; LINUX-64-STATIC: bam03:
1331 ; LINUX-64-STATIC: movl $dsrc+262144, %eax
1332 ; LINUX-64-STATIC: ret
1335 define i8* @bam04() nounwind {
1337 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
1338 ; LINUX-64-STATIC: bam04:
1339 ; LINUX-64-STATIC: movl $ddst+262144, %eax
1340 ; LINUX-64-STATIC: ret
1343 define i8* @bam05() nounwind {
1345 %0 = load i32** @dptr, align 8
1346 %1 = getelementptr i32* %0, i64 65536
1347 %2 = bitcast i32* %1 to i8*
1349 ; LINUX-64-STATIC: bam05:
1350 ; LINUX-64-STATIC: movl $262144, %eax
1351 ; LINUX-64-STATIC: addq dptr, %rax
1352 ; LINUX-64-STATIC: ret
1355 define i8* @bam06() nounwind {
1357 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
1358 ; LINUX-64-STATIC: bam06:
1359 ; LINUX-64-STATIC: movl $lsrc+262144, %eax
1360 ; LINUX-64-STATIC: ret
1363 define i8* @bam07() nounwind {
1365 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
1366 ; LINUX-64-STATIC: bam07:
1367 ; LINUX-64-STATIC: movl $ldst+262144, %eax
1368 ; LINUX-64-STATIC: ret
1371 define i8* @bam08() nounwind {
1373 %0 = load i32** @lptr, align 8
1374 %1 = getelementptr i32* %0, i64 65536
1375 %2 = bitcast i32* %1 to i8*
1377 ; LINUX-64-STATIC: bam08:
1378 ; LINUX-64-STATIC: movl $262144, %eax
1379 ; LINUX-64-STATIC: addq lptr, %rax
1380 ; LINUX-64-STATIC: ret
1383 define i8* @cat00(i64 %i) nounwind {
1386 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
1387 %2 = bitcast i32* %1 to i8*
1389 ; LINUX-64-STATIC: cat00:
1390 ; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax
1391 ; LINUX-64-STATIC: ret
1394 define i8* @cxt00(i64 %i) nounwind {
1397 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
1398 %2 = bitcast i32* %1 to i8*
1400 ; LINUX-64-STATIC: cxt00:
1401 ; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax
1402 ; LINUX-64-STATIC: ret
1405 define i8* @cat01(i64 %i) nounwind {
1408 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
1409 %2 = bitcast i32* %1 to i8*
1411 ; LINUX-64-STATIC: cat01:
1412 ; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax
1413 ; LINUX-64-STATIC: ret
1416 define i8* @cxt01(i64 %i) nounwind {
1419 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
1420 %2 = bitcast i32* %1 to i8*
1422 ; LINUX-64-STATIC: cxt01:
1423 ; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax
1424 ; LINUX-64-STATIC: ret
1427 define i8* @cat02(i64 %i) nounwind {
1429 %0 = load i32** @ptr, align 8
1431 %2 = getelementptr i32* %0, i64 %1
1432 %3 = bitcast i32* %2 to i8*
1434 ; LINUX-64-STATIC: cat02:
1435 ; LINUX-64-STATIC: movq ptr, %rax
1436 ; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax
1437 ; LINUX-64-STATIC: ret
1440 define i8* @cat03(i64 %i) nounwind {
1443 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
1444 %2 = bitcast i32* %1 to i8*
1446 ; LINUX-64-STATIC: cat03:
1447 ; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax
1448 ; LINUX-64-STATIC: ret
1451 define i8* @cat04(i64 %i) nounwind {
1454 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
1455 %2 = bitcast i32* %1 to i8*
1457 ; LINUX-64-STATIC: cat04:
1458 ; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax
1459 ; LINUX-64-STATIC: ret
1462 define i8* @cat05(i64 %i) nounwind {
1464 %0 = load i32** @dptr, align 8
1466 %2 = getelementptr i32* %0, i64 %1
1467 %3 = bitcast i32* %2 to i8*
1469 ; LINUX-64-STATIC: cat05:
1470 ; LINUX-64-STATIC: movq dptr, %rax
1471 ; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax
1472 ; LINUX-64-STATIC: ret
1475 define i8* @cat06(i64 %i) nounwind {
1478 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
1479 %2 = bitcast i32* %1 to i8*
1481 ; LINUX-64-STATIC: cat06:
1482 ; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax
1483 ; LINUX-64-STATIC: ret
1486 define i8* @cat07(i64 %i) nounwind {
1489 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
1490 %2 = bitcast i32* %1 to i8*
1492 ; LINUX-64-STATIC: cat07:
1493 ; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax
1494 ; LINUX-64-STATIC: ret
1497 define i8* @cat08(i64 %i) nounwind {
1499 %0 = load i32** @lptr, align 8
1501 %2 = getelementptr i32* %0, i64 %1
1502 %3 = bitcast i32* %2 to i8*
1504 ; LINUX-64-STATIC: cat08:
1505 ; LINUX-64-STATIC: movq lptr, %rax
1506 ; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax
1507 ; LINUX-64-STATIC: ret
1510 define i8* @cam00(i64 %i) nounwind {
1512 %0 = add i64 %i, 65536
1513 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
1514 %2 = bitcast i32* %1 to i8*
1516 ; LINUX-64-STATIC: cam00:
1517 ; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax
1518 ; LINUX-64-STATIC: ret
1521 define i8* @cxm00(i64 %i) nounwind {
1523 %0 = add i64 %i, 65536
1524 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
1525 %2 = bitcast i32* %1 to i8*
1527 ; LINUX-64-STATIC: cxm00:
1528 ; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax
1529 ; LINUX-64-STATIC: ret
1532 define i8* @cam01(i64 %i) nounwind {
1534 %0 = add i64 %i, 65536
1535 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
1536 %2 = bitcast i32* %1 to i8*
1538 ; LINUX-64-STATIC: cam01:
1539 ; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax
1540 ; LINUX-64-STATIC: ret
1543 define i8* @cxm01(i64 %i) nounwind {
1545 %0 = add i64 %i, 65536
1546 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
1547 %2 = bitcast i32* %1 to i8*
1549 ; LINUX-64-STATIC: cxm01:
1550 ; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax
1551 ; LINUX-64-STATIC: ret
1554 define i8* @cam02(i64 %i) nounwind {
1556 %0 = load i32** @ptr, align 8
1557 %1 = add i64 %i, 65536
1558 %2 = getelementptr i32* %0, i64 %1
1559 %3 = bitcast i32* %2 to i8*
1561 ; LINUX-64-STATIC: cam02:
1562 ; LINUX-64-STATIC: movq ptr, %rax
1563 ; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax
1564 ; LINUX-64-STATIC: ret
1567 define i8* @cam03(i64 %i) nounwind {
1569 %0 = add i64 %i, 65536
1570 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
1571 %2 = bitcast i32* %1 to i8*
1573 ; LINUX-64-STATIC: cam03:
1574 ; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax
1575 ; LINUX-64-STATIC: ret
1578 define i8* @cam04(i64 %i) nounwind {
1580 %0 = add i64 %i, 65536
1581 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
1582 %2 = bitcast i32* %1 to i8*
1584 ; LINUX-64-STATIC: cam04:
1585 ; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax
1586 ; LINUX-64-STATIC: ret
1589 define i8* @cam05(i64 %i) nounwind {
1591 %0 = load i32** @dptr, align 8
1592 %1 = add i64 %i, 65536
1593 %2 = getelementptr i32* %0, i64 %1
1594 %3 = bitcast i32* %2 to i8*
1596 ; LINUX-64-STATIC: cam05:
1597 ; LINUX-64-STATIC: movq dptr, %rax
1598 ; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax
1599 ; LINUX-64-STATIC: ret
1602 define i8* @cam06(i64 %i) nounwind {
1604 %0 = add i64 %i, 65536
1605 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
1606 %2 = bitcast i32* %1 to i8*
1608 ; LINUX-64-STATIC: cam06:
1609 ; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax
1610 ; LINUX-64-STATIC: ret
1613 define i8* @cam07(i64 %i) nounwind {
1615 %0 = add i64 %i, 65536
1616 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
1617 %2 = bitcast i32* %1 to i8*
1619 ; LINUX-64-STATIC: cam07:
1620 ; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax
1621 ; LINUX-64-STATIC: ret
1624 define i8* @cam08(i64 %i) nounwind {
1626 %0 = load i32** @lptr, align 8
1627 %1 = add i64 %i, 65536
1628 %2 = getelementptr i32* %0, i64 %1
1629 %3 = bitcast i32* %2 to i8*
1631 ; LINUX-64-STATIC: cam08:
1632 ; LINUX-64-STATIC: movq lptr, %rax
1633 ; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax
1634 ; LINUX-64-STATIC: ret
1637 define void @lcallee() nounwind {
1639 tail call void @x() nounwind
1640 tail call void @x() nounwind
1641 tail call void @x() nounwind
1642 tail call void @x() nounwind
1643 tail call void @x() nounwind
1644 tail call void @x() nounwind
1645 tail call void @x() nounwind
1647 ; LINUX-64-STATIC: lcallee:
1648 ; LINUX-64-STATIC: call x
1649 ; LINUX-64-STATIC: call x
1650 ; LINUX-64-STATIC: call x
1651 ; LINUX-64-STATIC: call x
1652 ; LINUX-64-STATIC: call x
1653 ; LINUX-64-STATIC: call x
1654 ; LINUX-64-STATIC: call x
1655 ; LINUX-64-STATIC: ret
1660 define internal void @dcallee() nounwind {
1662 tail call void @y() nounwind
1663 tail call void @y() nounwind
1664 tail call void @y() nounwind
1665 tail call void @y() nounwind
1666 tail call void @y() nounwind
1667 tail call void @y() nounwind
1668 tail call void @y() nounwind
1670 ; LINUX-64-STATIC: dcallee:
1671 ; LINUX-64-STATIC: call y
1672 ; LINUX-64-STATIC: call y
1673 ; LINUX-64-STATIC: call y
1674 ; LINUX-64-STATIC: call y
1675 ; LINUX-64-STATIC: call y
1676 ; LINUX-64-STATIC: call y
1677 ; LINUX-64-STATIC: call y
1678 ; LINUX-64-STATIC: ret
1683 define void ()* @address() nounwind {
1685 ret void ()* @callee
1686 ; LINUX-64-STATIC: address:
1687 ; LINUX-64-STATIC: movl $callee, %eax
1688 ; LINUX-64-STATIC: ret
1691 declare void @callee()
1693 define void ()* @laddress() nounwind {
1695 ret void ()* @lcallee
1696 ; LINUX-64-STATIC: laddress:
1697 ; LINUX-64-STATIC: movl $lcallee, %eax
1698 ; LINUX-64-STATIC: ret
1701 define void ()* @daddress() nounwind {
1703 ret void ()* @dcallee
1704 ; LINUX-64-STATIC: daddress:
1705 ; LINUX-64-STATIC: movl $dcallee, %eax
1706 ; LINUX-64-STATIC: ret
1709 define void @caller() nounwind {
1711 tail call void @callee() nounwind
1712 tail call void @callee() nounwind
1714 ; LINUX-64-STATIC: caller:
1715 ; LINUX-64-STATIC: call callee
1716 ; LINUX-64-STATIC: call callee
1717 ; LINUX-64-STATIC: ret
1720 define void @dcaller() nounwind {
1722 tail call void @dcallee() nounwind
1723 tail call void @dcallee() nounwind
1725 ; LINUX-64-STATIC: dcaller:
1726 ; LINUX-64-STATIC: call dcallee
1727 ; LINUX-64-STATIC: call dcallee
1728 ; LINUX-64-STATIC: ret
1731 define void @lcaller() nounwind {
1733 tail call void @lcallee() nounwind
1734 tail call void @lcallee() nounwind
1736 ; LINUX-64-STATIC: lcaller:
1737 ; LINUX-64-STATIC: call lcallee
1738 ; LINUX-64-STATIC: call lcallee
1739 ; LINUX-64-STATIC: ret
1742 define void @tailcaller() nounwind {
1744 tail call void @callee() nounwind
1746 ; LINUX-64-STATIC: tailcaller:
1747 ; LINUX-64-STATIC: call callee
1748 ; LINUX-64-STATIC: ret
1751 define void @dtailcaller() nounwind {
1753 tail call void @dcallee() nounwind
1755 ; LINUX-64-STATIC: dtailcaller:
1756 ; LINUX-64-STATIC: call dcallee
1757 ; LINUX-64-STATIC: ret
1760 define void @ltailcaller() nounwind {
1762 tail call void @lcallee() nounwind
1764 ; LINUX-64-STATIC: ltailcaller:
1765 ; LINUX-64-STATIC: call lcallee
1766 ; LINUX-64-STATIC: ret
1769 define void @icaller() nounwind {
1771 %0 = load void ()** @ifunc, align 8
1772 tail call void %0() nounwind
1773 %1 = load void ()** @ifunc, align 8
1774 tail call void %1() nounwind
1776 ; LINUX-64-STATIC: icaller:
1777 ; LINUX-64-STATIC: call *ifunc
1778 ; LINUX-64-STATIC: call *ifunc
1779 ; LINUX-64-STATIC: ret
1782 define void @dicaller() nounwind {
1784 %0 = load void ()** @difunc, align 8
1785 tail call void %0() nounwind
1786 %1 = load void ()** @difunc, align 8
1787 tail call void %1() nounwind
1789 ; LINUX-64-STATIC: dicaller:
1790 ; LINUX-64-STATIC: call *difunc
1791 ; LINUX-64-STATIC: call *difunc
1792 ; LINUX-64-STATIC: ret
1795 define void @licaller() nounwind {
1797 %0 = load void ()** @lifunc, align 8
1798 tail call void %0() nounwind
1799 %1 = load void ()** @lifunc, align 8
1800 tail call void %1() nounwind
1802 ; LINUX-64-STATIC: licaller:
1803 ; LINUX-64-STATIC: call *lifunc
1804 ; LINUX-64-STATIC: call *lifunc
1805 ; LINUX-64-STATIC: ret
1808 define void @itailcaller() nounwind {
1810 %0 = load void ()** @ifunc, align 8
1811 tail call void %0() nounwind
1812 %1 = load void ()** @ifunc, align 8
1813 tail call void %1() nounwind
1815 ; LINUX-64-STATIC: itailcaller:
1816 ; LINUX-64-STATIC: call *ifunc
1817 ; LINUX-64-STATIC: call *ifunc
1818 ; LINUX-64-STATIC: ret
1821 define void @ditailcaller() nounwind {
1823 %0 = load void ()** @difunc, align 8
1824 tail call void %0() nounwind
1826 ; LINUX-64-STATIC: ditailcaller:
1827 ; LINUX-64-STATIC: call *difunc
1828 ; LINUX-64-STATIC: ret
1831 define void @litailcaller() nounwind {
1833 %0 = load void ()** @lifunc, align 8
1834 tail call void %0() nounwind
1836 ; LINUX-64-STATIC: litailcaller:
1837 ; LINUX-64-STATIC: call *lifunc
1838 ; LINUX-64-STATIC: ret