blob: 33621059201485b46e44c4f5de0bae25ac4e1f9f [file] [log] [blame]
Dan Gohman318f5052009-03-14 02:35:10 +00001; 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
Chris Lattner4f066492009-07-11 20:29:19 +000041
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
Dan Gohman318f5052009-03-14 02:35:10 +000044; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000127; 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
Chris Lattner4f066492009-07-11 20:29:19 +0000192
193; LINUX-64-STATIC: foo00:
194; LINUX-64-STATIC: movl src, %eax
195; LINUX-64-STATIC: movl %eax, dst
196; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000197}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000204
205; LINUX-64-STATIC: fxo00:
206; LINUX-64-STATIC: movl xsrc, %eax
207; LINUX-64-STATIC: movl %eax, xdst
208; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000209}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000215; LINUX-64-STATIC: foo01:
216; LINUX-64-STATIC: movq $dst, ptr
217; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000218}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000224; LINUX-64-STATIC: fxo01:
225; LINUX-64-STATIC: movq $xdst, ptr
226; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000227}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000235; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000240}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000247; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000252 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
Chris Lattner4f066492009-07-11 20:29:19 +0000260; LINUX-64-STATIC: foo03:
261; LINUX-64-STATIC: movl dsrc, %eax
262; LINUX-64-STATIC: movl %eax, ddst
263; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000264}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000270; LINUX-64-STATIC: foo04:
271; LINUX-64-STATIC: movq $ddst, dptr
272; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000273}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000281; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000286}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000293; LINUX-64-STATIC: foo06:
294; LINUX-64-STATIC: movl lsrc, %eax
295; LINUX-64-STATIC: movl %eax, ldst
296; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000297}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000303; LINUX-64-STATIC: foo07:
304; LINUX-64-STATIC: movq $ldst, lptr
305; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000306}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000314; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000319}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000326; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000330}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000337; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000341}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000347; LINUX-64-STATIC: qux01:
348; LINUX-64-STATIC: movq $dst+64, ptr
349; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000350}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000356; LINUX-64-STATIC: qxx01:
357; LINUX-64-STATIC: movq $xdst+64, ptr
358; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000359}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000367; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000372 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
Chris Lattner4f066492009-07-11 20:29:19 +0000381; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000386 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
Chris Lattner4f066492009-07-11 20:29:19 +0000394; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000398}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000404; LINUX-64-STATIC: qux04:
405; LINUX-64-STATIC: movq $ddst+64, dptr
406; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000407}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000415; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000420 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
Chris Lattner4f066492009-07-11 20:29:19 +0000428; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000432}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000438; LINUX-64-STATIC: qux07:
439; LINUX-64-STATIC: movq $ldst+64, lptr
440; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000441}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000449; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000454 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
Chris Lattner4f066492009-07-11 20:29:19 +0000464; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000468}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000477; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000481}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000488; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000492}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000499; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000503}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000513; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000518}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000528; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000533}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000542; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000546}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000553; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000557}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000567; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000572}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000581; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000585}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000592; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000596}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000606; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000611}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000621; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000625}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000635; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000639}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000647; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000651}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000659; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000663}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000674; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000679}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000690; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000695}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000705; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000709}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000717; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000721}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000732; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000737}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000747; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000751}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000759; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000763}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000774; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000779}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000786; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000790}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000796; LINUX-64-STATIC: moo01:
797; LINUX-64-STATIC: movq $dst+262144, ptr
798; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000799}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000808; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000813}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000820; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000824}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000830; LINUX-64-STATIC: moo04:
831; LINUX-64-STATIC: movq $ddst+262144, dptr
832; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000833}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000842; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000847}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000854; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000858}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000864; LINUX-64-STATIC: moo07:
865; LINUX-64-STATIC: movq $ldst+262144, lptr
866; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000867}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000876; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000881}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000891; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000895}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000903; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000907}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000918; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000923}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000933; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000937}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000945; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000949}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000960; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000965}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000975; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000979}
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
Chris Lattner4f066492009-07-11 20:29:19 +0000987; 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
Dan Gohman318f5052009-03-14 02:35:10 +0000991}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001002; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001007}
1008
1009define i8* @bar00() nounwind {
1010entry:
1011 ret i8* bitcast ([131072 x i32]* @src to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001012; LINUX-64-STATIC: bar00:
1013; LINUX-64-STATIC: leaq src, %rax
1014; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001015}
1016
1017define i8* @bxr00() nounwind {
1018entry:
1019 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001020; LINUX-64-STATIC: bxr00:
1021; LINUX-64-STATIC: leaq xsrc, %rax
1022; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001023}
1024
1025define i8* @bar01() nounwind {
1026entry:
1027 ret i8* bitcast ([131072 x i32]* @dst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001028; LINUX-64-STATIC: bar01:
1029; LINUX-64-STATIC: leaq dst, %rax
1030; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001031}
1032
1033define i8* @bxr01() nounwind {
1034entry:
1035 ret i8* bitcast ([32 x i32]* @xdst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001036; LINUX-64-STATIC: bxr01:
1037; LINUX-64-STATIC: leaq xdst, %rax
1038; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001039}
1040
1041define i8* @bar02() nounwind {
1042entry:
1043 ret i8* bitcast (i32** @ptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001044; LINUX-64-STATIC: bar02:
1045; LINUX-64-STATIC: leaq ptr, %rax
1046; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001047}
1048
1049define i8* @bar03() nounwind {
1050entry:
1051 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001052; LINUX-64-STATIC: bar03:
1053; LINUX-64-STATIC: leaq dsrc, %rax
1054; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001055}
1056
1057define i8* @bar04() nounwind {
1058entry:
1059 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001060; LINUX-64-STATIC: bar04:
1061; LINUX-64-STATIC: leaq ddst, %rax
1062; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001063}
1064
1065define i8* @bar05() nounwind {
1066entry:
1067 ret i8* bitcast (i32** @dptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001068; LINUX-64-STATIC: bar05:
1069; LINUX-64-STATIC: leaq dptr, %rax
1070; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001071}
1072
1073define i8* @bar06() nounwind {
1074entry:
1075 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001076; LINUX-64-STATIC: bar06:
1077; LINUX-64-STATIC: leaq lsrc, %rax
1078; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001079}
1080
1081define i8* @bar07() nounwind {
1082entry:
1083 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001084; LINUX-64-STATIC: bar07:
1085; LINUX-64-STATIC: leaq ldst, %rax
1086; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001087}
1088
1089define i8* @bar08() nounwind {
1090entry:
1091 ret i8* bitcast (i32** @lptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001092; LINUX-64-STATIC: bar08:
1093; LINUX-64-STATIC: leaq lptr, %rax
1094; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001095}
1096
1097define i8* @har00() nounwind {
1098entry:
1099 ret i8* bitcast ([131072 x i32]* @src to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001100; LINUX-64-STATIC: har00:
1101; LINUX-64-STATIC: leaq src, %rax
1102; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001103}
1104
1105define i8* @hxr00() nounwind {
1106entry:
1107 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001108; LINUX-64-STATIC: hxr00:
1109; LINUX-64-STATIC: leaq xsrc, %rax
1110; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001111}
1112
1113define i8* @har01() nounwind {
1114entry:
1115 ret i8* bitcast ([131072 x i32]* @dst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001116; LINUX-64-STATIC: har01:
1117; LINUX-64-STATIC: leaq dst, %rax
1118; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001119}
1120
1121define i8* @hxr01() nounwind {
1122entry:
1123 ret i8* bitcast ([32 x i32]* @xdst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001124; LINUX-64-STATIC: hxr01:
1125; LINUX-64-STATIC: leaq xdst, %rax
1126; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001127}
1128
1129define i8* @har02() nounwind {
1130entry:
1131 %0 = load i32** @ptr, align 8
1132 %1 = bitcast i32* %0 to i8*
1133 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00001134; LINUX-64-STATIC: har02:
1135; LINUX-64-STATIC: movq ptr, %rax
1136; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001137}
1138
1139define i8* @har03() nounwind {
1140entry:
1141 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001142; LINUX-64-STATIC: har03:
1143; LINUX-64-STATIC: leaq dsrc, %rax
1144; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001145}
1146
1147define i8* @har04() nounwind {
1148entry:
1149 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001150; LINUX-64-STATIC: har04:
1151; LINUX-64-STATIC: leaq ddst, %rax
1152; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001153}
1154
1155define i8* @har05() nounwind {
1156entry:
1157 %0 = load i32** @dptr, align 8
1158 %1 = bitcast i32* %0 to i8*
1159 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00001160; LINUX-64-STATIC: har05:
1161; LINUX-64-STATIC: movq dptr, %rax
1162; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001163}
1164
1165define i8* @har06() nounwind {
1166entry:
1167 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001168; LINUX-64-STATIC: har06:
1169; LINUX-64-STATIC: leaq lsrc, %rax
1170; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001171}
1172
1173define i8* @har07() nounwind {
1174entry:
1175 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001176; LINUX-64-STATIC: har07:
1177; LINUX-64-STATIC: leaq ldst, %rax
1178; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001179}
1180
1181define i8* @har08() nounwind {
1182entry:
1183 %0 = load i32** @lptr, align 8
1184 %1 = bitcast i32* %0 to i8*
1185 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00001186; LINUX-64-STATIC: har08:
1187; LINUX-64-STATIC: movq lptr, %rax
1188; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001189}
1190
1191define i8* @bat00() nounwind {
1192entry:
1193 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001194; LINUX-64-STATIC: bat00:
1195; LINUX-64-STATIC: leaq src+64, %rax
1196; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001197}
1198
1199define i8* @bxt00() nounwind {
1200entry:
1201 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001202; LINUX-64-STATIC: bxt00:
1203; LINUX-64-STATIC: leaq xsrc+64, %rax
1204; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001205}
1206
1207define i8* @bat01() nounwind {
1208entry:
1209 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001210; LINUX-64-STATIC: bat01:
1211; LINUX-64-STATIC: leaq dst+64, %rax
1212; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001213}
1214
1215define i8* @bxt01() nounwind {
1216entry:
1217 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001218; LINUX-64-STATIC: bxt01:
1219; LINUX-64-STATIC: leaq xdst+64, %rax
1220; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001221}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001229; LINUX-64-STATIC: bat02:
1230; LINUX-64-STATIC: movq ptr, %rax
1231; LINUX-64-STATIC: addq $64, %rax
1232; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001233}
1234
1235define i8* @bat03() nounwind {
1236entry:
1237 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001238; LINUX-64-STATIC: bat03:
1239; LINUX-64-STATIC: leaq dsrc+64, %rax
1240; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001241}
1242
1243define i8* @bat04() nounwind {
1244entry:
1245 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001246; LINUX-64-STATIC: bat04:
1247; LINUX-64-STATIC: leaq ddst+64, %rax
1248; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001249}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001257; LINUX-64-STATIC: bat05:
1258; LINUX-64-STATIC: movq dptr, %rax
1259; LINUX-64-STATIC: addq $64, %rax
1260; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001261}
1262
1263define i8* @bat06() nounwind {
1264entry:
1265 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001266; LINUX-64-STATIC: bat06:
1267; LINUX-64-STATIC: leaq lsrc+64, %rax
1268; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001269}
1270
1271define i8* @bat07() nounwind {
1272entry:
1273 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001274; LINUX-64-STATIC: bat07:
1275; LINUX-64-STATIC: leaq ldst+64, %rax
1276; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001277}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001285; LINUX-64-STATIC: bat08:
1286; LINUX-64-STATIC: movq lptr, %rax
1287; LINUX-64-STATIC: addq $64, %rax
1288; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001289}
1290
1291define i8* @bam00() nounwind {
1292entry:
1293 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001294; LINUX-64-STATIC: bam00:
1295; LINUX-64-STATIC: leaq src+262144, %rax
1296; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001297}
1298
1299define i8* @bam01() nounwind {
1300entry:
1301 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001302; LINUX-64-STATIC: bam01:
1303; LINUX-64-STATIC: leaq dst+262144, %rax
1304; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001305}
1306
1307define i8* @bxm01() nounwind {
1308entry:
1309 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001310; LINUX-64-STATIC: bxm01:
1311; LINUX-64-STATIC: leaq xdst+262144, %rax
1312; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001313}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001321; LINUX-64-STATIC: bam02:
1322; LINUX-64-STATIC: movl $262144, %eax
1323; LINUX-64-STATIC: addq ptr, %rax
1324; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001325}
1326
1327define i8* @bam03() nounwind {
1328entry:
1329 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001330; LINUX-64-STATIC: bam03:
1331; LINUX-64-STATIC: leaq dsrc+262144, %rax
1332; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001333}
1334
1335define i8* @bam04() nounwind {
1336entry:
1337 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001338; LINUX-64-STATIC: bam04:
1339; LINUX-64-STATIC: leaq ddst+262144, %rax
1340; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001341}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001349; LINUX-64-STATIC: bam05:
1350; LINUX-64-STATIC: movl $262144, %eax
1351; LINUX-64-STATIC: addq dptr, %rax
1352; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001353}
1354
1355define i8* @bam06() nounwind {
1356entry:
1357 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001358; LINUX-64-STATIC: bam06:
1359; LINUX-64-STATIC: leaq lsrc+262144, %rax
1360; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001361}
1362
1363define i8* @bam07() nounwind {
1364entry:
1365 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00001366; LINUX-64-STATIC: bam07:
1367; LINUX-64-STATIC: leaq ldst+262144, %rax
1368; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001369}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001377; LINUX-64-STATIC: bam08:
1378; LINUX-64-STATIC: movl $262144, %eax
1379; LINUX-64-STATIC: addq lptr, %rax
1380; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001381}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001389; LINUX-64-STATIC: cat00:
1390; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax
1391; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001392}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001400; LINUX-64-STATIC: cxt00:
1401; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax
1402; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001403}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001411; LINUX-64-STATIC: cat01:
1412; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax
1413; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001414}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001422; LINUX-64-STATIC: cxt01:
1423; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax
1424; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001425}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001434; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001438}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001446; LINUX-64-STATIC: cat03:
1447; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax
1448; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001449}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001457; LINUX-64-STATIC: cat04:
1458; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax
1459; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001460}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001469; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001473}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001481; LINUX-64-STATIC: cat06:
1482; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax
1483; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001484}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001492; LINUX-64-STATIC: cat07:
1493; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax
1494; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001495}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001504; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001508}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001516; LINUX-64-STATIC: cam00:
1517; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax
1518; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001519}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001527; LINUX-64-STATIC: cxm00:
1528; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax
1529; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001530}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001538; LINUX-64-STATIC: cam01:
1539; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax
1540; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001541}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001549; LINUX-64-STATIC: cxm01:
1550; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax
1551; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001552}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001561; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001565}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001573; LINUX-64-STATIC: cam03:
1574; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax
1575; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001576}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001584; LINUX-64-STATIC: cam04:
1585; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax
1586; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001587}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001596; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001600}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001608; LINUX-64-STATIC: cam06:
1609; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax
1610; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001611}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001619; LINUX-64-STATIC: cam07:
1620; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax
1621; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001622}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001631; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001635}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001647; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001656}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001670; 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
Dan Gohman318f5052009-03-14 02:35:10 +00001679}
1680
1681declare void @y()
1682
1683define void ()* @address() nounwind {
1684entry:
1685 ret void ()* @callee
Chris Lattner4f066492009-07-11 20:29:19 +00001686; LINUX-64-STATIC: address:
1687; LINUX-64-STATIC: leaq callee, %rax
1688; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001689}
1690
1691declare void @callee()
1692
1693define void ()* @laddress() nounwind {
1694entry:
1695 ret void ()* @lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00001696; LINUX-64-STATIC: laddress:
1697; LINUX-64-STATIC: leaq lcallee, %rax
1698; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001699}
1700
1701define void ()* @daddress() nounwind {
1702entry:
1703 ret void ()* @dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00001704; LINUX-64-STATIC: daddress:
1705; LINUX-64-STATIC: leaq dcallee, %rax
1706; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001707}
1708
1709define void @caller() nounwind {
1710entry:
1711 tail call void @callee() nounwind
1712 tail call void @callee() nounwind
1713 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001714; LINUX-64-STATIC: caller:
1715; LINUX-64-STATIC: call callee
1716; LINUX-64-STATIC: call callee
1717; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001718}
1719
1720define void @dcaller() nounwind {
1721entry:
1722 tail call void @dcallee() nounwind
1723 tail call void @dcallee() nounwind
1724 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001725; LINUX-64-STATIC: dcaller:
1726; LINUX-64-STATIC: call dcallee
1727; LINUX-64-STATIC: call dcallee
1728; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001729}
1730
1731define void @lcaller() nounwind {
1732entry:
1733 tail call void @lcallee() nounwind
1734 tail call void @lcallee() nounwind
1735 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001736; LINUX-64-STATIC: lcaller:
1737; LINUX-64-STATIC: call lcallee
1738; LINUX-64-STATIC: call lcallee
1739; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001740}
1741
1742define void @tailcaller() nounwind {
1743entry:
1744 tail call void @callee() nounwind
1745 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001746; LINUX-64-STATIC: tailcaller:
1747; LINUX-64-STATIC: call callee
1748; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001749}
1750
1751define void @dtailcaller() nounwind {
1752entry:
1753 tail call void @dcallee() nounwind
1754 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001755; LINUX-64-STATIC: dtailcaller:
1756; LINUX-64-STATIC: call dcallee
1757; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001758}
1759
1760define void @ltailcaller() nounwind {
1761entry:
1762 tail call void @lcallee() nounwind
1763 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001764; LINUX-64-STATIC: ltailcaller:
1765; LINUX-64-STATIC: call lcallee
1766; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001767}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001776; LINUX-64-STATIC: icaller:
1777; LINUX-64-STATIC: call *ifunc
1778; LINUX-64-STATIC: call *ifunc
1779; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001780}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001789; LINUX-64-STATIC: dicaller:
1790; LINUX-64-STATIC: call *difunc
1791; LINUX-64-STATIC: call *difunc
1792; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001793}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001802; LINUX-64-STATIC: licaller:
1803; LINUX-64-STATIC: call *lifunc
1804; LINUX-64-STATIC: call *lifunc
1805; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001806}
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
Chris Lattner4f066492009-07-11 20:29:19 +00001815; LINUX-64-STATIC: itailcaller:
1816; LINUX-64-STATIC: call *ifunc
1817; LINUX-64-STATIC: call *ifunc
1818; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001819}
1820
1821define void @ditailcaller() nounwind {
1822entry:
1823 %0 = load void ()** @difunc, align 8
1824 tail call void %0() nounwind
1825 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001826; LINUX-64-STATIC: ditailcaller:
1827; LINUX-64-STATIC: call *difunc
1828; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001829}
1830
1831define void @litailcaller() nounwind {
1832entry:
1833 %0 = load void ()** @lifunc, align 8
1834 tail call void %0() nounwind
1835 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001836; LINUX-64-STATIC: litailcaller:
1837; LINUX-64-STATIC: call *lifunc
1838; LINUX-64-STATIC: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001839}