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
41
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
43
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
64
65
66
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
167
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
186
187define void @foo00() nounwind {
188entry:
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
191	ret void
192
193; LINUX-64-STATIC: foo00:
194; LINUX-64-STATIC: movl	src, %eax
195; LINUX-64-STATIC: movl	%eax, dst
196; LINUX-64-STATIC: ret
197}
198
199define void @fxo00() nounwind {
200entry:
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
203	ret void
204
205; LINUX-64-STATIC: fxo00:
206; LINUX-64-STATIC: movl	xsrc, %eax
207; LINUX-64-STATIC: movl	%eax, xdst
208; LINUX-64-STATIC: ret
209}
210
211define void @foo01() nounwind {
212entry:
213	store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
214	ret void
215; LINUX-64-STATIC: foo01:
216; LINUX-64-STATIC: movq	$dst, ptr
217; LINUX-64-STATIC: ret
218}
219
220define void @fxo01() nounwind {
221entry:
222	store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
223	ret void
224; LINUX-64-STATIC: fxo01:
225; LINUX-64-STATIC: movq	$xdst, ptr
226; LINUX-64-STATIC: ret
227}
228
229define void @foo02() nounwind {
230entry:
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
234	ret void
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
240}
241
242define void @fxo02() nounwind {
243entry:
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
252	ret void
253}
254
255define void @foo03() nounwind {
256entry:
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
259	ret void
260; LINUX-64-STATIC: foo03:
261; LINUX-64-STATIC: movl    dsrc, %eax
262; LINUX-64-STATIC: movl    %eax, ddst
263; LINUX-64-STATIC: ret
264}
265
266define void @foo04() nounwind {
267entry:
268	store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
269	ret void
270; LINUX-64-STATIC: foo04:
271; LINUX-64-STATIC: movq    $ddst, dptr
272; LINUX-64-STATIC: ret
273}
274
275define void @foo05() nounwind {
276entry:
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
280	ret void
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
286}
287
288define void @foo06() nounwind {
289entry:
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
292	ret void
293; LINUX-64-STATIC: foo06:
294; LINUX-64-STATIC: movl    lsrc, %eax
295; LINUX-64-STATIC: movl    %eax, ldst
296; LINUX-64-STATIC: ret
297}
298
299define void @foo07() nounwind {
300entry:
301	store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
302	ret void
303; LINUX-64-STATIC: foo07:
304; LINUX-64-STATIC: movq    $ldst, lptr
305; LINUX-64-STATIC: ret
306}
307
308define void @foo08() nounwind {
309entry:
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
313	ret void
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
319}
320
321define void @qux00() nounwind {
322entry:
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
325	ret void
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
330}
331
332define void @qxx00() nounwind {
333entry:
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
336	ret void
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
341}
342
343define void @qux01() nounwind {
344entry:
345	store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
346	ret void
347; LINUX-64-STATIC: qux01:
348; LINUX-64-STATIC: movq    $dst+64, ptr
349; LINUX-64-STATIC: ret
350}
351
352define void @qxx01() nounwind {
353entry:
354	store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
355	ret void
356; LINUX-64-STATIC: qxx01:
357; LINUX-64-STATIC: movq    $xdst+64, ptr
358; LINUX-64-STATIC: ret
359}
360
361define void @qux02() nounwind {
362entry:
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
372	ret void
373}
374
375define void @qxx02() nounwind {
376entry:
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
386	ret void
387}
388
389define void @qux03() nounwind {
390entry:
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
393	ret void
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
398}
399
400define void @qux04() nounwind {
401entry:
402	store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
403	ret void
404; LINUX-64-STATIC: qux04:
405; LINUX-64-STATIC: movq    $ddst+64, dptr
406; LINUX-64-STATIC: ret
407}
408
409define void @qux05() nounwind {
410entry:
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
420	ret void
421}
422
423define void @qux06() nounwind {
424entry:
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
427	ret void
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
432}
433
434define void @qux07() nounwind {
435entry:
436	store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
437	ret void
438; LINUX-64-STATIC: qux07:
439; LINUX-64-STATIC: movq    $ldst+64, lptr
440; LINUX-64-STATIC: ret
441}
442
443define void @qux08() nounwind {
444entry:
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
454	ret void
455}
456
457define void @ind00(i64 %i) nounwind {
458entry:
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
463	ret void
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
468}
469
470define void @ixd00(i64 %i) nounwind {
471entry:
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
476	ret void
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
481}
482
483define void @ind01(i64 %i) nounwind {
484entry:
485	%0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
486	store i32* %0, i32** @ptr, align 8
487	ret void
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
492}
493
494define void @ixd01(i64 %i) nounwind {
495entry:
496	%0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
497	store i32* %0, i32** @ptr, align 8
498	ret void
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
503}
504
505define void @ind02(i64 %i) nounwind {
506entry:
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
512	ret void
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
518}
519
520define void @ixd02(i64 %i) nounwind {
521entry:
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
527	ret void
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
533}
534
535define void @ind03(i64 %i) nounwind {
536entry:
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
541	ret void
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
546}
547
548define void @ind04(i64 %i) nounwind {
549entry:
550	%0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
551	store i32* %0, i32** @dptr, align 8
552	ret void
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
557}
558
559define void @ind05(i64 %i) nounwind {
560entry:
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
566	ret void
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
572}
573
574define void @ind06(i64 %i) nounwind {
575entry:
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
580	ret void
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
585}
586
587define void @ind07(i64 %i) nounwind {
588entry:
589	%0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
590	store i32* %0, i32** @lptr, align 8
591	ret void
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
596}
597
598define void @ind08(i64 %i) nounwind {
599entry:
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
605	ret void
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
611}
612
613define void @off00(i64 %i) nounwind {
614entry:
615	%0 = add i64 %i, 16
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
620	ret void
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
625}
626
627define void @oxf00(i64 %i) nounwind {
628entry:
629	%0 = add i64 %i, 16
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
634	ret void
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
639}
640
641define void @off01(i64 %i) nounwind {
642entry:
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
646	ret void
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
651}
652
653define void @oxf01(i64 %i) nounwind {
654entry:
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
658	ret void
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
663}
664
665define void @off02(i64 %i) nounwind {
666entry:
667	%0 = load i32** @ptr, align 8
668	%1 = add i64 %i, 16
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
673	ret void
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
679}
680
681define void @oxf02(i64 %i) nounwind {
682entry:
683	%0 = load i32** @ptr, align 8
684	%1 = add i64 %i, 16
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
689	ret void
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
695}
696
697define void @off03(i64 %i) nounwind {
698entry:
699	%0 = add i64 %i, 16
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
704	ret void
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
709}
710
711define void @off04(i64 %i) nounwind {
712entry:
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
716	ret void
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
721}
722
723define void @off05(i64 %i) nounwind {
724entry:
725	%0 = load i32** @dptr, align 8
726	%1 = add i64 %i, 16
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
731	ret void
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
737}
738
739define void @off06(i64 %i) nounwind {
740entry:
741	%0 = add i64 %i, 16
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
746	ret void
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
751}
752
753define void @off07(i64 %i) nounwind {
754entry:
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
758	ret void
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
763}
764
765define void @off08(i64 %i) nounwind {
766entry:
767	%0 = load i32** @lptr, align 8
768	%1 = add i64 %i, 16
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
773	ret void
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
779}
780
781define void @moo00(i64 %i) nounwind {
782entry:
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
785	ret void
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
790}
791
792define void @moo01(i64 %i) nounwind {
793entry:
794	store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
795	ret void
796; LINUX-64-STATIC: moo01:
797; LINUX-64-STATIC: movq    $dst+262144, ptr
798; LINUX-64-STATIC: ret
799}
800
801define void @moo02(i64 %i) nounwind {
802entry:
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
807	ret void
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
813}
814
815define void @moo03(i64 %i) nounwind {
816entry:
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
819	ret void
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
824}
825
826define void @moo04(i64 %i) nounwind {
827entry:
828	store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
829	ret void
830; LINUX-64-STATIC: moo04:
831; LINUX-64-STATIC: movq    $ddst+262144, dptr
832; LINUX-64-STATIC: ret
833}
834
835define void @moo05(i64 %i) nounwind {
836entry:
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
841	ret void
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
847}
848
849define void @moo06(i64 %i) nounwind {
850entry:
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
853	ret void
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
858}
859
860define void @moo07(i64 %i) nounwind {
861entry:
862	store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
863	ret void
864; LINUX-64-STATIC: moo07:
865; LINUX-64-STATIC: movq    $ldst+262144, lptr
866; LINUX-64-STATIC: ret
867}
868
869define void @moo08(i64 %i) nounwind {
870entry:
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
875	ret void
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
881}
882
883define void @big00(i64 %i) nounwind {
884entry:
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
890	ret void
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
895}
896
897define void @big01(i64 %i) nounwind {
898entry:
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
902	ret void
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
907}
908
909define void @big02(i64 %i) nounwind {
910entry:
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
917	ret void
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
923}
924
925define void @big03(i64 %i) nounwind {
926entry:
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
932	ret void
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
937}
938
939define void @big04(i64 %i) nounwind {
940entry:
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
944	ret void
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
949}
950
951define void @big05(i64 %i) nounwind {
952entry:
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
959	ret void
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
965}
966
967define void @big06(i64 %i) nounwind {
968entry:
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
974	ret void
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
979}
980
981define void @big07(i64 %i) nounwind {
982entry:
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
986	ret void
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
991}
992
993define void @big08(i64 %i) nounwind {
994entry:
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
1001	ret void
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
1007}
1008
1009define i8* @bar00() nounwind {
1010entry:
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
1015}
1016
1017define i8* @bxr00() nounwind {
1018entry:
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
1023}
1024
1025define i8* @bar01() nounwind {
1026entry:
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
1031}
1032
1033define i8* @bxr01() nounwind {
1034entry:
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
1039}
1040
1041define i8* @bar02() nounwind {
1042entry:
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
1047}
1048
1049define i8* @bar03() nounwind {
1050entry:
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
1055}
1056
1057define i8* @bar04() nounwind {
1058entry:
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
1063}
1064
1065define i8* @bar05() nounwind {
1066entry:
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
1071}
1072
1073define i8* @bar06() nounwind {
1074entry:
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
1079}
1080
1081define i8* @bar07() nounwind {
1082entry:
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
1087}
1088
1089define i8* @bar08() nounwind {
1090entry:
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
1095}
1096
1097define i8* @har00() nounwind {
1098entry:
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
1103}
1104
1105define i8* @hxr00() nounwind {
1106entry:
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
1111}
1112
1113define i8* @har01() nounwind {
1114entry:
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
1119}
1120
1121define i8* @hxr01() nounwind {
1122entry:
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
1127}
1128
1129define i8* @har02() nounwind {
1130entry:
1131	%0 = load i32** @ptr, align 8
1132	%1 = bitcast i32* %0 to i8*
1133	ret i8* %1
1134; LINUX-64-STATIC: har02:
1135; LINUX-64-STATIC: movq    ptr, %rax
1136; LINUX-64-STATIC: ret
1137}
1138
1139define i8* @har03() nounwind {
1140entry:
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
1145}
1146
1147define i8* @har04() nounwind {
1148entry:
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
1153}
1154
1155define i8* @har05() nounwind {
1156entry:
1157	%0 = load i32** @dptr, align 8
1158	%1 = bitcast i32* %0 to i8*
1159	ret i8* %1
1160; LINUX-64-STATIC: har05:
1161; LINUX-64-STATIC: movq    dptr, %rax
1162; LINUX-64-STATIC: ret
1163}
1164
1165define i8* @har06() nounwind {
1166entry:
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
1171}
1172
1173define i8* @har07() nounwind {
1174entry:
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
1179}
1180
1181define i8* @har08() nounwind {
1182entry:
1183	%0 = load i32** @lptr, align 8
1184	%1 = bitcast i32* %0 to i8*
1185	ret i8* %1
1186; LINUX-64-STATIC: har08:
1187; LINUX-64-STATIC: movq    lptr, %rax
1188; LINUX-64-STATIC: ret
1189}
1190
1191define i8* @bat00() nounwind {
1192entry:
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
1197}
1198
1199define i8* @bxt00() nounwind {
1200entry:
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
1205}
1206
1207define i8* @bat01() nounwind {
1208entry:
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
1213}
1214
1215define i8* @bxt01() nounwind {
1216entry:
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
1221}
1222
1223define i8* @bat02() nounwind {
1224entry:
1225	%0 = load i32** @ptr, align 8
1226	%1 = getelementptr i32* %0, i64 16
1227	%2 = bitcast i32* %1 to i8*
1228	ret i8* %2
1229; LINUX-64-STATIC: bat02:
1230; LINUX-64-STATIC: movq    ptr, %rax
1231; LINUX-64-STATIC: addq    $64, %rax
1232; LINUX-64-STATIC: ret
1233}
1234
1235define i8* @bat03() nounwind {
1236entry:
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
1241}
1242
1243define i8* @bat04() nounwind {
1244entry:
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
1249}
1250
1251define i8* @bat05() nounwind {
1252entry:
1253	%0 = load i32** @dptr, align 8
1254	%1 = getelementptr i32* %0, i64 16
1255	%2 = bitcast i32* %1 to i8*
1256	ret i8* %2
1257; LINUX-64-STATIC: bat05:
1258; LINUX-64-STATIC: movq    dptr, %rax
1259; LINUX-64-STATIC: addq    $64, %rax
1260; LINUX-64-STATIC: ret
1261}
1262
1263define i8* @bat06() nounwind {
1264entry:
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
1269}
1270
1271define i8* @bat07() nounwind {
1272entry:
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
1277}
1278
1279define i8* @bat08() nounwind {
1280entry:
1281	%0 = load i32** @lptr, align 8
1282	%1 = getelementptr i32* %0, i64 16
1283	%2 = bitcast i32* %1 to i8*
1284	ret i8* %2
1285; LINUX-64-STATIC: bat08:
1286; LINUX-64-STATIC: movq    lptr, %rax
1287; LINUX-64-STATIC: addq    $64, %rax
1288; LINUX-64-STATIC: ret
1289}
1290
1291define i8* @bam00() nounwind {
1292entry:
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
1297}
1298
1299define i8* @bam01() nounwind {
1300entry:
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
1305}
1306
1307define i8* @bxm01() nounwind {
1308entry:
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
1313}
1314
1315define i8* @bam02() nounwind {
1316entry:
1317	%0 = load i32** @ptr, align 8
1318	%1 = getelementptr i32* %0, i64 65536
1319	%2 = bitcast i32* %1 to i8*
1320	ret i8* %2
1321; LINUX-64-STATIC: bam02:
1322; LINUX-64-STATIC: movl    $262144, %eax
1323; LINUX-64-STATIC: addq    ptr, %rax
1324; LINUX-64-STATIC: ret
1325}
1326
1327define i8* @bam03() nounwind {
1328entry:
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
1333}
1334
1335define i8* @bam04() nounwind {
1336entry:
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
1341}
1342
1343define i8* @bam05() nounwind {
1344entry:
1345	%0 = load i32** @dptr, align 8
1346	%1 = getelementptr i32* %0, i64 65536
1347	%2 = bitcast i32* %1 to i8*
1348	ret i8* %2
1349; LINUX-64-STATIC: bam05:
1350; LINUX-64-STATIC: movl    $262144, %eax
1351; LINUX-64-STATIC: addq    dptr, %rax
1352; LINUX-64-STATIC: ret
1353}
1354
1355define i8* @bam06() nounwind {
1356entry:
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
1361}
1362
1363define i8* @bam07() nounwind {
1364entry:
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
1369}
1370
1371define i8* @bam08() nounwind {
1372entry:
1373	%0 = load i32** @lptr, align 8
1374	%1 = getelementptr i32* %0, i64 65536
1375	%2 = bitcast i32* %1 to i8*
1376	ret i8* %2
1377; LINUX-64-STATIC: bam08:
1378; LINUX-64-STATIC: movl    $262144, %eax
1379; LINUX-64-STATIC: addq    lptr, %rax
1380; LINUX-64-STATIC: ret
1381}
1382
1383define i8* @cat00(i64 %i) nounwind {
1384entry:
1385	%0 = add i64 %i, 16
1386	%1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
1387	%2 = bitcast i32* %1 to i8*
1388	ret i8* %2
1389; LINUX-64-STATIC: cat00:
1390; LINUX-64-STATIC: leaq    src+64(,%rdi,4), %rax
1391; LINUX-64-STATIC: ret
1392}
1393
1394define i8* @cxt00(i64 %i) nounwind {
1395entry:
1396	%0 = add i64 %i, 16
1397	%1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
1398	%2 = bitcast i32* %1 to i8*
1399	ret i8* %2
1400; LINUX-64-STATIC: cxt00:
1401; LINUX-64-STATIC: leaq    xsrc+64(,%rdi,4), %rax
1402; LINUX-64-STATIC: ret
1403}
1404
1405define i8* @cat01(i64 %i) nounwind {
1406entry:
1407	%0 = add i64 %i, 16
1408	%1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
1409	%2 = bitcast i32* %1 to i8*
1410	ret i8* %2
1411; LINUX-64-STATIC: cat01:
1412; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), %rax
1413; LINUX-64-STATIC: ret
1414}
1415
1416define i8* @cxt01(i64 %i) nounwind {
1417entry:
1418	%0 = add i64 %i, 16
1419	%1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
1420	%2 = bitcast i32* %1 to i8*
1421	ret i8* %2
1422; LINUX-64-STATIC: cxt01:
1423; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), %rax
1424; LINUX-64-STATIC: ret
1425}
1426
1427define i8* @cat02(i64 %i) nounwind {
1428entry:
1429	%0 = load i32** @ptr, align 8
1430	%1 = add i64 %i, 16
1431	%2 = getelementptr i32* %0, i64 %1
1432	%3 = bitcast i32* %2 to i8*
1433	ret i8* %3
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
1438}
1439
1440define i8* @cat03(i64 %i) nounwind {
1441entry:
1442	%0 = add i64 %i, 16
1443	%1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
1444	%2 = bitcast i32* %1 to i8*
1445	ret i8* %2
1446; LINUX-64-STATIC: cat03:
1447; LINUX-64-STATIC: leaq    dsrc+64(,%rdi,4), %rax
1448; LINUX-64-STATIC: ret
1449}
1450
1451define i8* @cat04(i64 %i) nounwind {
1452entry:
1453	%0 = add i64 %i, 16
1454	%1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
1455	%2 = bitcast i32* %1 to i8*
1456	ret i8* %2
1457; LINUX-64-STATIC: cat04:
1458; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), %rax
1459; LINUX-64-STATIC: ret
1460}
1461
1462define i8* @cat05(i64 %i) nounwind {
1463entry:
1464	%0 = load i32** @dptr, align 8
1465	%1 = add i64 %i, 16
1466	%2 = getelementptr i32* %0, i64 %1
1467	%3 = bitcast i32* %2 to i8*
1468	ret i8* %3
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
1473}
1474
1475define i8* @cat06(i64 %i) nounwind {
1476entry:
1477	%0 = add i64 %i, 16
1478	%1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
1479	%2 = bitcast i32* %1 to i8*
1480	ret i8* %2
1481; LINUX-64-STATIC: cat06:
1482; LINUX-64-STATIC: leaq    lsrc+64(,%rdi,4), %rax
1483; LINUX-64-STATIC: ret
1484}
1485
1486define i8* @cat07(i64 %i) nounwind {
1487entry:
1488	%0 = add i64 %i, 16
1489	%1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
1490	%2 = bitcast i32* %1 to i8*
1491	ret i8* %2
1492; LINUX-64-STATIC: cat07:
1493; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), %rax
1494; LINUX-64-STATIC: ret
1495}
1496
1497define i8* @cat08(i64 %i) nounwind {
1498entry:
1499	%0 = load i32** @lptr, align 8
1500	%1 = add i64 %i, 16
1501	%2 = getelementptr i32* %0, i64 %1
1502	%3 = bitcast i32* %2 to i8*
1503	ret i8* %3
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
1508}
1509
1510define i8* @cam00(i64 %i) nounwind {
1511entry:
1512	%0 = add i64 %i, 65536
1513	%1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
1514	%2 = bitcast i32* %1 to i8*
1515	ret i8* %2
1516; LINUX-64-STATIC: cam00:
1517; LINUX-64-STATIC: leaq    src+262144(,%rdi,4), %rax
1518; LINUX-64-STATIC: ret
1519}
1520
1521define i8* @cxm00(i64 %i) nounwind {
1522entry:
1523	%0 = add i64 %i, 65536
1524	%1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
1525	%2 = bitcast i32* %1 to i8*
1526	ret i8* %2
1527; LINUX-64-STATIC: cxm00:
1528; LINUX-64-STATIC: leaq    xsrc+262144(,%rdi,4), %rax
1529; LINUX-64-STATIC: ret
1530}
1531
1532define i8* @cam01(i64 %i) nounwind {
1533entry:
1534	%0 = add i64 %i, 65536
1535	%1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
1536	%2 = bitcast i32* %1 to i8*
1537	ret i8* %2
1538; LINUX-64-STATIC: cam01:
1539; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), %rax
1540; LINUX-64-STATIC: ret
1541}
1542
1543define i8* @cxm01(i64 %i) nounwind {
1544entry:
1545	%0 = add i64 %i, 65536
1546	%1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
1547	%2 = bitcast i32* %1 to i8*
1548	ret i8* %2
1549; LINUX-64-STATIC: cxm01:
1550; LINUX-64-STATIC: leaq    xdst+262144(,%rdi,4), %rax
1551; LINUX-64-STATIC: ret
1552}
1553
1554define i8* @cam02(i64 %i) nounwind {
1555entry:
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*
1560	ret i8* %3
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
1565}
1566
1567define i8* @cam03(i64 %i) nounwind {
1568entry:
1569	%0 = add i64 %i, 65536
1570	%1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
1571	%2 = bitcast i32* %1 to i8*
1572	ret i8* %2
1573; LINUX-64-STATIC: cam03:
1574; LINUX-64-STATIC: leaq    dsrc+262144(,%rdi,4), %rax
1575; LINUX-64-STATIC: ret
1576}
1577
1578define i8* @cam04(i64 %i) nounwind {
1579entry:
1580	%0 = add i64 %i, 65536
1581	%1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
1582	%2 = bitcast i32* %1 to i8*
1583	ret i8* %2
1584; LINUX-64-STATIC: cam04:
1585; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), %rax
1586; LINUX-64-STATIC: ret
1587}
1588
1589define i8* @cam05(i64 %i) nounwind {
1590entry:
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*
1595	ret i8* %3
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
1600}
1601
1602define i8* @cam06(i64 %i) nounwind {
1603entry:
1604	%0 = add i64 %i, 65536
1605	%1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
1606	%2 = bitcast i32* %1 to i8*
1607	ret i8* %2
1608; LINUX-64-STATIC: cam06:
1609; LINUX-64-STATIC: leaq    lsrc+262144(,%rdi,4), %rax
1610; LINUX-64-STATIC: ret
1611}
1612
1613define i8* @cam07(i64 %i) nounwind {
1614entry:
1615	%0 = add i64 %i, 65536
1616	%1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
1617	%2 = bitcast i32* %1 to i8*
1618	ret i8* %2
1619; LINUX-64-STATIC: cam07:
1620; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), %rax
1621; LINUX-64-STATIC: ret
1622}
1623
1624define i8* @cam08(i64 %i) nounwind {
1625entry:
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*
1630	ret i8* %3
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
1635}
1636
1637define void @lcallee() nounwind {
1638entry:
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
1646	ret void
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
1656}
1657
1658declare void @x()
1659
1660define internal void @dcallee() nounwind {
1661entry:
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
1669	ret void
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
1679}
1680
1681declare void @y()
1682
1683define void ()* @address() nounwind {
1684entry:
1685	ret void ()* @callee
1686; LINUX-64-STATIC: address:
1687; LINUX-64-STATIC: movl    $callee, %eax
1688; LINUX-64-STATIC: ret
1689}
1690
1691declare void @callee()
1692
1693define void ()* @laddress() nounwind {
1694entry:
1695	ret void ()* @lcallee
1696; LINUX-64-STATIC: laddress:
1697; LINUX-64-STATIC: movl    $lcallee, %eax
1698; LINUX-64-STATIC: ret
1699}
1700
1701define void ()* @daddress() nounwind {
1702entry:
1703	ret void ()* @dcallee
1704; LINUX-64-STATIC: daddress:
1705; LINUX-64-STATIC: movl    $dcallee, %eax
1706; LINUX-64-STATIC: ret
1707}
1708
1709define void @caller() nounwind {
1710entry:
1711	tail call void @callee() nounwind
1712	tail call void @callee() nounwind
1713	ret void
1714; LINUX-64-STATIC: caller:
1715; LINUX-64-STATIC: call    callee
1716; LINUX-64-STATIC: call    callee
1717; LINUX-64-STATIC: ret
1718}
1719
1720define void @dcaller() nounwind {
1721entry:
1722	tail call void @dcallee() nounwind
1723	tail call void @dcallee() nounwind
1724	ret void
1725; LINUX-64-STATIC: dcaller:
1726; LINUX-64-STATIC: call    dcallee
1727; LINUX-64-STATIC: call    dcallee
1728; LINUX-64-STATIC: ret
1729}
1730
1731define void @lcaller() nounwind {
1732entry:
1733	tail call void @lcallee() nounwind
1734	tail call void @lcallee() nounwind
1735	ret void
1736; LINUX-64-STATIC: lcaller:
1737; LINUX-64-STATIC: call    lcallee
1738; LINUX-64-STATIC: call    lcallee
1739; LINUX-64-STATIC: ret
1740}
1741
1742define void @tailcaller() nounwind {
1743entry:
1744	tail call void @callee() nounwind
1745	ret void
1746; LINUX-64-STATIC: tailcaller:
1747; LINUX-64-STATIC: call    callee
1748; LINUX-64-STATIC: ret
1749}
1750
1751define void @dtailcaller() nounwind {
1752entry:
1753	tail call void @dcallee() nounwind
1754	ret void
1755; LINUX-64-STATIC: dtailcaller:
1756; LINUX-64-STATIC: call    dcallee
1757; LINUX-64-STATIC: ret
1758}
1759
1760define void @ltailcaller() nounwind {
1761entry:
1762	tail call void @lcallee() nounwind
1763	ret void
1764; LINUX-64-STATIC: ltailcaller:
1765; LINUX-64-STATIC: call    lcallee
1766; LINUX-64-STATIC: ret
1767}
1768
1769define void @icaller() nounwind {
1770entry:
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
1775	ret void
1776; LINUX-64-STATIC: icaller:
1777; LINUX-64-STATIC: call    *ifunc
1778; LINUX-64-STATIC: call    *ifunc
1779; LINUX-64-STATIC: ret
1780}
1781
1782define void @dicaller() nounwind {
1783entry:
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
1788	ret void
1789; LINUX-64-STATIC: dicaller:
1790; LINUX-64-STATIC: call    *difunc
1791; LINUX-64-STATIC: call    *difunc
1792; LINUX-64-STATIC: ret
1793}
1794
1795define void @licaller() nounwind {
1796entry:
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
1801	ret void
1802; LINUX-64-STATIC: licaller:
1803; LINUX-64-STATIC: call    *lifunc
1804; LINUX-64-STATIC: call    *lifunc
1805; LINUX-64-STATIC: ret
1806}
1807
1808define void @itailcaller() nounwind {
1809entry:
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
1814	ret void
1815; LINUX-64-STATIC: itailcaller:
1816; LINUX-64-STATIC: call    *ifunc
1817; LINUX-64-STATIC: call    *ifunc
1818; LINUX-64-STATIC: ret
1819}
1820
1821define void @ditailcaller() nounwind {
1822entry:
1823	%0 = load void ()** @difunc, align 8
1824	tail call void %0() nounwind
1825	ret void
1826; LINUX-64-STATIC: ditailcaller:
1827; LINUX-64-STATIC: call    *difunc
1828; LINUX-64-STATIC: ret
1829}
1830
1831define void @litailcaller() nounwind {
1832entry:
1833	%0 = load void ()** @lifunc, align 8
1834	tail call void %0() nounwind
1835	ret void
1836; LINUX-64-STATIC: litailcaller:
1837; LINUX-64-STATIC: call    *lifunc
1838; LINUX-64-STATIC: ret
1839}
1840