blob: 3ef312cb6596f50cbdfb94738af1f2d2c2518859 [file] [log] [blame]
Evan Cheng7158e082011-01-03 22:53:22 +00001; RUN: llc < %s -asm-verbose=0 -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-STATIC
2; RUN: llc < %s -asm-verbose=0 -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-PIC
Chris Lattner4f066492009-07-11 20:29:19 +00003
Evan Cheng7158e082011-01-03 22:53:22 +00004; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-64-STATIC
5; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=LINUX-64-PIC
Chris Lattner4f066492009-07-11 20:29:19 +00006
Evan Cheng7158e082011-01-03 22:53:22 +00007; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-32-STATIC
8; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC
9; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-PIC
Dan Gohman318f5052009-03-14 02:35:10 +000010
Evan Cheng7158e082011-01-03 22:53:22 +000011; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-64-STATIC
12; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-DYNAMIC
13; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-PIC
Dan Gohman318f5052009-03-14 02:35:10 +000014
15@src = external global [131072 x i32]
16@dst = external global [131072 x i32]
17@xsrc = external global [32 x i32]
18@xdst = external global [32 x i32]
19@ptr = external global i32*
20@dsrc = global [131072 x i32] zeroinitializer, align 32
21@ddst = global [131072 x i32] zeroinitializer, align 32
22@dptr = global i32* null
23@lsrc = internal global [131072 x i32] zeroinitializer
24@ldst = internal global [131072 x i32] zeroinitializer
25@lptr = internal global i32* null
26@ifunc = external global void ()*
27@difunc = global void ()* null
28@lifunc = internal global void ()* null
29@lxsrc = internal global [32 x i32] zeroinitializer, align 32
30@lxdst = internal global [32 x i32] zeroinitializer, align 32
31@dxsrc = global [32 x i32] zeroinitializer, align 32
32@dxdst = global [32 x i32] zeroinitializer, align 32
33
34define void @foo00() nounwind {
35entry:
36 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
37 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4
38 ret void
Chris Lattner4f066492009-07-11 20:29:19 +000039
40; LINUX-64-STATIC: foo00:
Dan Gohmanef74e9b2009-08-20 18:23:44 +000041; LINUX-64-STATIC: movl src(%rip), %eax
Chris Lattner4f066492009-07-11 20:29:19 +000042; LINUX-64-STATIC: movl %eax, dst
43; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000044
45; LINUX-32-STATIC: foo00:
46; LINUX-32-STATIC: movl src, %eax
47; LINUX-32-STATIC-NEXT: movl %eax, dst
48; LINUX-32-STATIC-NEXT: ret
49
50; LINUX-32-PIC: foo00:
51; LINUX-32-PIC: movl src, %eax
52; LINUX-32-PIC-NEXT: movl %eax, dst
53; LINUX-32-PIC-NEXT: ret
54
55; LINUX-64-PIC: foo00:
56; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
57; LINUX-64-PIC-NEXT: movl (%rax), %eax
58; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), %rcx
59; LINUX-64-PIC-NEXT: movl %eax, (%rcx)
60; LINUX-64-PIC-NEXT: ret
61
62; DARWIN-32-STATIC: _foo00:
63; DARWIN-32-STATIC: movl _src, %eax
64; DARWIN-32-STATIC-NEXT: movl %eax, _dst
65; DARWIN-32-STATIC-NEXT: ret
66
67; DARWIN-32-DYNAMIC: _foo00:
68; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
69; DARWIN-32-DYNAMIC-NEXT: movl (%eax), %eax
70; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %ecx
71; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
72; DARWIN-32-DYNAMIC-NEXT: ret
73
74; DARWIN-32-PIC: _foo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +000075; DARWIN-32-PIC: calll L0$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +000076; DARWIN-32-PIC-NEXT: L0$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000077; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +000078; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L0$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000079; DARWIN-32-PIC-NEXT: movl (%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +000080; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L0$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000081; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
82; DARWIN-32-PIC-NEXT: ret
83
84; DARWIN-64-STATIC: _foo00:
85; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
86; DARWIN-64-STATIC-NEXT: movl (%rax), %eax
87; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
88; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx)
89; DARWIN-64-STATIC-NEXT: ret
90
91; DARWIN-64-DYNAMIC: _foo00:
92; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
93; DARWIN-64-DYNAMIC-NEXT: movl (%rax), %eax
94; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
95; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx)
96; DARWIN-64-DYNAMIC-NEXT: ret
97
98; DARWIN-64-PIC: _foo00:
99; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
100; DARWIN-64-PIC-NEXT: movl (%rax), %eax
101; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
102; DARWIN-64-PIC-NEXT: movl %eax, (%rcx)
103; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000104}
105
106define void @fxo00() nounwind {
107entry:
108 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
109 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4
110 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000111
112; LINUX-64-STATIC: fxo00:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000113; LINUX-64-STATIC: movl xsrc(%rip), %eax
Chris Lattner4f066492009-07-11 20:29:19 +0000114; LINUX-64-STATIC: movl %eax, xdst
115; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000116
117; LINUX-32-STATIC: fxo00:
118; LINUX-32-STATIC: movl xsrc, %eax
119; LINUX-32-STATIC-NEXT: movl %eax, xdst
120; LINUX-32-STATIC-NEXT: ret
121
122; LINUX-32-PIC: fxo00:
123; LINUX-32-PIC: movl xsrc, %eax
124; LINUX-32-PIC-NEXT: movl %eax, xdst
125; LINUX-32-PIC-NEXT: ret
126
127; LINUX-64-PIC: fxo00:
128; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
129; LINUX-64-PIC-NEXT: movl (%rax), %eax
130; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), %rcx
131; LINUX-64-PIC-NEXT: movl %eax, (%rcx)
132; LINUX-64-PIC-NEXT: ret
133
134; DARWIN-32-STATIC: _fxo00:
135; DARWIN-32-STATIC: movl _xsrc, %eax
136; DARWIN-32-STATIC-NEXT: movl %eax, _xdst
137; DARWIN-32-STATIC-NEXT: ret
138
139; DARWIN-32-DYNAMIC: _fxo00:
140; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
141; DARWIN-32-DYNAMIC-NEXT: movl (%eax), %eax
142; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, %ecx
143; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
144; DARWIN-32-DYNAMIC-NEXT: ret
145
146; DARWIN-32-PIC: _fxo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000147; DARWIN-32-PIC: calll L1$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000148; DARWIN-32-PIC-NEXT: L1$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000149; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000150; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L1$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000151; DARWIN-32-PIC-NEXT: movl (%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +0000152; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L1$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000153; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
154; DARWIN-32-PIC-NEXT: ret
155
156; DARWIN-64-STATIC: _fxo00:
157; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
158; DARWIN-64-STATIC-NEXT: movl (%rax), %eax
159; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
160; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx)
161; DARWIN-64-STATIC-NEXT: ret
162
163; DARWIN-64-DYNAMIC: _fxo00:
164; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
165; DARWIN-64-DYNAMIC-NEXT: movl (%rax), %eax
166; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
167; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx)
168; DARWIN-64-DYNAMIC-NEXT: ret
169
170; DARWIN-64-PIC: _fxo00:
171; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
172; DARWIN-64-PIC-NEXT: movl (%rax), %eax
173; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
174; DARWIN-64-PIC-NEXT: movl %eax, (%rcx)
175; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000176}
177
178define void @foo01() nounwind {
179entry:
180 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
181 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000182; LINUX-64-STATIC: foo01:
183; LINUX-64-STATIC: movq $dst, ptr
184; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000185
186; LINUX-32-STATIC: foo01:
187; LINUX-32-STATIC: movl $dst, ptr
188; LINUX-32-STATIC-NEXT: ret
189
190; LINUX-32-PIC: foo01:
191; LINUX-32-PIC: movl $dst, ptr
192; LINUX-32-PIC-NEXT: ret
193
194; LINUX-64-PIC: foo01:
195; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
196; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
197; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
198; LINUX-64-PIC-NEXT: ret
199
200; DARWIN-32-STATIC: _foo01:
201; DARWIN-32-STATIC: movl $_dst, _ptr
202; DARWIN-32-STATIC-NEXT: ret
203
204; DARWIN-32-DYNAMIC: _foo01:
205; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax
206; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
207; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
208; DARWIN-32-DYNAMIC-NEXT: ret
209
210; DARWIN-32-PIC: _foo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000211; DARWIN-32-PIC: calll L2$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000212; DARWIN-32-PIC-NEXT: L2$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000213; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000214; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L2$pb(%eax), %ecx
215; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L2$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000216; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
217; DARWIN-32-PIC-NEXT: ret
218
219; DARWIN-64-STATIC: _foo01:
220; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
221; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
222; DARWIN-64-STATIC-NEXT: movq %rax, (%rcx)
223; DARWIN-64-STATIC-NEXT: ret
224
225; DARWIN-64-DYNAMIC: _foo01:
226; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
227; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
228; DARWIN-64-DYNAMIC-NEXT: movq %rax, (%rcx)
229; DARWIN-64-DYNAMIC-NEXT: ret
230
231; DARWIN-64-PIC: _foo01:
232; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
233; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
234; DARWIN-64-PIC-NEXT: movq %rax, (%rcx)
235; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000236}
237
238define void @fxo01() nounwind {
239entry:
240 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
241 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000242; LINUX-64-STATIC: fxo01:
243; LINUX-64-STATIC: movq $xdst, ptr
244; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000245
246; LINUX-32-STATIC: fxo01:
247; LINUX-32-STATIC: movl $xdst, ptr
248; LINUX-32-STATIC-NEXT: ret
249
250; LINUX-32-PIC: fxo01:
251; LINUX-32-PIC: movl $xdst, ptr
252; LINUX-32-PIC-NEXT: ret
253
254; LINUX-64-PIC: fxo01:
255; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
256; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
257; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
258; LINUX-64-PIC-NEXT: ret
259
260; DARWIN-32-STATIC: _fxo01:
261; DARWIN-32-STATIC: movl $_xdst, _ptr
262; DARWIN-32-STATIC-NEXT: ret
263
264; DARWIN-32-DYNAMIC: _fxo01:
265; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax
266; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
267; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
268; DARWIN-32-DYNAMIC-NEXT: ret
269
270; DARWIN-32-PIC: _fxo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000271; DARWIN-32-PIC: calll L3$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000272; DARWIN-32-PIC-NEXT: L3$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000273; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000274; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L3$pb(%eax), %ecx
275; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L3$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000276; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
277; DARWIN-32-PIC-NEXT: ret
278
279; DARWIN-64-STATIC: _fxo01:
280; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
281; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
282; DARWIN-64-STATIC-NEXT: movq %rax, (%rcx)
283; DARWIN-64-STATIC-NEXT: ret
284
285; DARWIN-64-DYNAMIC: _fxo01:
286; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
287; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
288; DARWIN-64-DYNAMIC-NEXT: movq %rax, (%rcx)
289; DARWIN-64-DYNAMIC-NEXT: ret
290
291; DARWIN-64-PIC: _fxo01:
292; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
293; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
294; DARWIN-64-PIC-NEXT: movq %rax, (%rcx)
295; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000296}
297
298define void @foo02() nounwind {
299entry:
300 %0 = load i32** @ptr, align 8
301 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
302 store i32 %1, i32* %0, align 4
303 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000304; LINUX-64-STATIC: foo02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000305; LINUX-64-STATIC: movl src(%rip), %
306; LINUX-64-STATIC: movq ptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000307; LINUX-64-STATIC: movl
308; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000309
310; LINUX-32-STATIC: foo02:
311; LINUX-32-STATIC: movl src, %eax
312; LINUX-32-STATIC-NEXT: movl ptr, %ecx
313; LINUX-32-STATIC-NEXT: movl %eax, (%ecx)
314; LINUX-32-STATIC-NEXT: ret
315
316; LINUX-32-PIC: foo02:
317; LINUX-32-PIC: movl src, %eax
318; LINUX-32-PIC-NEXT: movl ptr, %ecx
319; LINUX-32-PIC-NEXT: movl %eax, (%ecx)
320; LINUX-32-PIC-NEXT: ret
321
322; LINUX-64-PIC: foo02:
323; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
324; LINUX-64-PIC-NEXT: movl (%rax), %eax
325; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
326; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
327; LINUX-64-PIC-NEXT: movl %eax, (%rcx)
328; LINUX-64-PIC-NEXT: ret
329
330; DARWIN-32-STATIC: _foo02:
331; DARWIN-32-STATIC: movl _src, %eax
332; DARWIN-32-STATIC-NEXT: movl _ptr, %ecx
333; DARWIN-32-STATIC-NEXT: movl %eax, (%ecx)
334; DARWIN-32-STATIC-NEXT: ret
335
336; DARWIN-32-DYNAMIC: _foo02:
337; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
338; DARWIN-32-DYNAMIC-NEXT: movl (%eax), %eax
339; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
340; DARWIN-32-DYNAMIC-NEXT: movl (%ecx), %ecx
341; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
342; DARWIN-32-DYNAMIC-NEXT: ret
343
344; DARWIN-32-PIC: _foo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000345; DARWIN-32-PIC: calll L4$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000346; DARWIN-32-PIC-NEXT: L4$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000347; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000348; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L4$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000349; DARWIN-32-PIC-NEXT: movl (%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +0000350; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L4$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000351; DARWIN-32-PIC-NEXT: movl (%eax), %eax
352; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
353; DARWIN-32-PIC-NEXT: ret
354
355; DARWIN-64-STATIC: _foo02:
356; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
357; DARWIN-64-STATIC-NEXT: movl (%rax), %eax
358; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
359; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
360; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx)
361; DARWIN-64-STATIC-NEXT: ret
362
363; DARWIN-64-DYNAMIC: _foo02:
364; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
365; DARWIN-64-DYNAMIC-NEXT: movl (%rax), %eax
366; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
367; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
368; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx)
369; DARWIN-64-DYNAMIC-NEXT: ret
370
371; DARWIN-64-PIC: _foo02:
372; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
373; DARWIN-64-PIC-NEXT: movl (%rax), %eax
374; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
375; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
376; DARWIN-64-PIC-NEXT: movl %eax, (%rcx)
377; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000378}
379
380define void @fxo02() nounwind {
381entry:
382 %0 = load i32** @ptr, align 8
383 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
384 store i32 %1, i32* %0, align 4
Chris Lattner4f066492009-07-11 20:29:19 +0000385; LINUX-64-STATIC: fxo02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000386; LINUX-64-STATIC: movl xsrc(%rip), %
387; LINUX-64-STATIC: movq ptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000388; LINUX-64-STATIC: movl
389; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000390
391; LINUX-32-STATIC: fxo02:
392; LINUX-32-STATIC: movl xsrc, %eax
393; LINUX-32-STATIC-NEXT: movl ptr, %ecx
394; LINUX-32-STATIC-NEXT: movl %eax, (%ecx)
395; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000396 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000397
398; LINUX-32-PIC: fxo02:
399; LINUX-32-PIC: movl xsrc, %eax
400; LINUX-32-PIC-NEXT: movl ptr, %ecx
401; LINUX-32-PIC-NEXT: movl %eax, (%ecx)
402; LINUX-32-PIC-NEXT: ret
403
404; LINUX-64-PIC: fxo02:
405; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
406; LINUX-64-PIC-NEXT: movl (%rax), %eax
407; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
408; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
409; LINUX-64-PIC-NEXT: movl %eax, (%rcx)
410; LINUX-64-PIC-NEXT: ret
411
412; DARWIN-32-STATIC: _fxo02:
413; DARWIN-32-STATIC: movl _xsrc, %eax
414; DARWIN-32-STATIC-NEXT: movl _ptr, %ecx
415; DARWIN-32-STATIC-NEXT: movl %eax, (%ecx)
416; DARWIN-32-STATIC-NEXT: ret
417
418; DARWIN-32-DYNAMIC: _fxo02:
419; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
420; DARWIN-32-DYNAMIC-NEXT: movl (%eax), %eax
421; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
422; DARWIN-32-DYNAMIC-NEXT: movl (%ecx), %ecx
423; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
424; DARWIN-32-DYNAMIC-NEXT: ret
425
426; DARWIN-32-PIC: _fxo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000427; DARWIN-32-PIC: calll L5$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000428; DARWIN-32-PIC-NEXT: L5$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000429; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000430; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L5$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000431; DARWIN-32-PIC-NEXT: movl (%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +0000432; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L5$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000433; DARWIN-32-PIC-NEXT: movl (%eax), %eax
434; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
435; DARWIN-32-PIC-NEXT: ret
436
437; DARWIN-64-STATIC: _fxo02:
438; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
439; DARWIN-64-STATIC-NEXT: movl (%rax), %eax
440; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
441; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
442; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx)
443; DARWIN-64-STATIC-NEXT: ret
444
445; DARWIN-64-DYNAMIC: _fxo02:
446; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
447; DARWIN-64-DYNAMIC-NEXT: movl (%rax), %eax
448; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
449; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
450; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx)
451; DARWIN-64-DYNAMIC-NEXT: ret
452
453; DARWIN-64-PIC: _fxo02:
454; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
455; DARWIN-64-PIC-NEXT: movl (%rax), %eax
456; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
457; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
458; DARWIN-64-PIC-NEXT: movl %eax, (%rcx)
459; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000460}
461
462define void @foo03() nounwind {
463entry:
464 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
465 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32
466 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000467; LINUX-64-STATIC: foo03:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000468; LINUX-64-STATIC: movl dsrc(%rip), %eax
Chris Lattner4f066492009-07-11 20:29:19 +0000469; LINUX-64-STATIC: movl %eax, ddst
470; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000471
472; LINUX-32-STATIC: foo03:
473; LINUX-32-STATIC: movl dsrc, %eax
474; LINUX-32-STATIC-NEXT: movl %eax, ddst
475; LINUX-32-STATIC-NEXT: ret
476
477; LINUX-32-PIC: foo03:
478; LINUX-32-PIC: movl dsrc, %eax
479; LINUX-32-PIC-NEXT: movl %eax, ddst
480; LINUX-32-PIC-NEXT: ret
481
482; LINUX-64-PIC: foo03:
483; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
484; LINUX-64-PIC-NEXT: movl (%rax), %eax
485; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), %rcx
486; LINUX-64-PIC-NEXT: movl %eax, (%rcx)
487; LINUX-64-PIC-NEXT: ret
488
489; DARWIN-32-STATIC: _foo03:
490; DARWIN-32-STATIC: movl _dsrc, %eax
491; DARWIN-32-STATIC-NEXT: movl %eax, _ddst
492; DARWIN-32-STATIC-NEXT: ret
493
494; DARWIN-32-DYNAMIC: _foo03:
495; DARWIN-32-DYNAMIC: movl _dsrc, %eax
496; DARWIN-32-DYNAMIC-NEXT: movl %eax, _ddst
497; DARWIN-32-DYNAMIC-NEXT: ret
498
499; DARWIN-32-PIC: _foo03:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000500; DARWIN-32-PIC: calll L6$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000501; DARWIN-32-PIC-NEXT: L6$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000502; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000503; DARWIN-32-PIC-NEXT: movl _dsrc-L6$pb(%eax), %ecx
504; DARWIN-32-PIC-NEXT: movl %ecx, _ddst-L6$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000505; DARWIN-32-PIC-NEXT: ret
506
507; DARWIN-64-STATIC: _foo03:
508; DARWIN-64-STATIC: movl _dsrc(%rip), %eax
509; DARWIN-64-STATIC-NEXT: movl %eax, _ddst(%rip)
510; DARWIN-64-STATIC-NEXT: ret
511
512; DARWIN-64-DYNAMIC: _foo03:
513; DARWIN-64-DYNAMIC: movl _dsrc(%rip), %eax
514; DARWIN-64-DYNAMIC-NEXT: movl %eax, _ddst(%rip)
515; DARWIN-64-DYNAMIC-NEXT: ret
516
517; DARWIN-64-PIC: _foo03:
518; DARWIN-64-PIC: movl _dsrc(%rip), %eax
519; DARWIN-64-PIC-NEXT: movl %eax, _ddst(%rip)
520; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000521}
522
523define void @foo04() nounwind {
524entry:
525 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
526 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000527; LINUX-64-STATIC: foo04:
528; LINUX-64-STATIC: movq $ddst, dptr
529; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000530
531; LINUX-32-STATIC: foo04:
532; LINUX-32-STATIC: movl $ddst, dptr
533; LINUX-32-STATIC-NEXT: ret
534
535; LINUX-32-PIC: foo04:
536; LINUX-32-PIC: movl $ddst, dptr
537; LINUX-32-PIC-NEXT: ret
538
539; LINUX-64-PIC: foo04:
540; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
541; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
542; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
543; LINUX-64-PIC-NEXT: ret
544
545; DARWIN-32-STATIC: _foo04:
546; DARWIN-32-STATIC: movl $_ddst, _dptr
547; DARWIN-32-STATIC-NEXT: ret
548
549; DARWIN-32-DYNAMIC: _foo04:
550; DARWIN-32-DYNAMIC: movl $_ddst, _dptr
551; DARWIN-32-DYNAMIC-NEXT: ret
552
553; DARWIN-32-PIC: _foo04:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000554; DARWIN-32-PIC: calll L7$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000555; DARWIN-32-PIC-NEXT: L7$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000556; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000557; DARWIN-32-PIC-NEXT: leal _ddst-L7$pb(%eax), %ecx
558; DARWIN-32-PIC-NEXT: movl %ecx, _dptr-L7$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000559; DARWIN-32-PIC-NEXT: ret
560
561; DARWIN-64-STATIC: _foo04:
562; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
563; DARWIN-64-STATIC-NEXT: movq %rax, _dptr(%rip)
564; DARWIN-64-STATIC-NEXT: ret
565
566; DARWIN-64-DYNAMIC: _foo04:
567; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
568; DARWIN-64-DYNAMIC-NEXT: movq %rax, _dptr(%rip)
569; DARWIN-64-DYNAMIC-NEXT: ret
570
571; DARWIN-64-PIC: _foo04:
572; DARWIN-64-PIC: leaq _ddst(%rip), %rax
573; DARWIN-64-PIC-NEXT: movq %rax, _dptr(%rip)
574; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000575}
576
577define void @foo05() nounwind {
578entry:
579 %0 = load i32** @dptr, align 8
580 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
581 store i32 %1, i32* %0, align 4
582 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000583; LINUX-64-STATIC: foo05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000584; LINUX-64-STATIC: movl dsrc(%rip), %
585; LINUX-64-STATIC: movq dptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000586; LINUX-64-STATIC: movl
587; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000588
589; LINUX-32-STATIC: foo05:
590; LINUX-32-STATIC: movl dsrc, %eax
591; LINUX-32-STATIC-NEXT: movl dptr, %ecx
592; LINUX-32-STATIC-NEXT: movl %eax, (%ecx)
593; LINUX-32-STATIC-NEXT: ret
594
595; LINUX-32-PIC: foo05:
596; LINUX-32-PIC: movl dsrc, %eax
597; LINUX-32-PIC-NEXT: movl dptr, %ecx
598; LINUX-32-PIC-NEXT: movl %eax, (%ecx)
599; LINUX-32-PIC-NEXT: ret
600
601; LINUX-64-PIC: foo05:
602; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
603; LINUX-64-PIC-NEXT: movl (%rax), %eax
604; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
605; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
606; LINUX-64-PIC-NEXT: movl %eax, (%rcx)
607; LINUX-64-PIC-NEXT: ret
608
609; DARWIN-32-STATIC: _foo05:
610; DARWIN-32-STATIC: movl _dsrc, %eax
611; DARWIN-32-STATIC-NEXT: movl _dptr, %ecx
612; DARWIN-32-STATIC-NEXT: movl %eax, (%ecx)
613; DARWIN-32-STATIC-NEXT: ret
614
615; DARWIN-32-DYNAMIC: _foo05:
616; DARWIN-32-DYNAMIC: movl _dsrc, %eax
617; DARWIN-32-DYNAMIC-NEXT: movl _dptr, %ecx
618; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
619; DARWIN-32-DYNAMIC-NEXT: ret
620
621; DARWIN-32-PIC: _foo05:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000622; DARWIN-32-PIC: calll L8$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000623; DARWIN-32-PIC-NEXT: L8$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000624; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000625; DARWIN-32-PIC-NEXT: movl _dsrc-L8$pb(%eax), %ecx
626; DARWIN-32-PIC-NEXT: movl _dptr-L8$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000627; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
628; DARWIN-32-PIC-NEXT: ret
629
630; DARWIN-64-STATIC: _foo05:
631; DARWIN-64-STATIC: movl _dsrc(%rip), %eax
632; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), %rcx
633; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx)
634; DARWIN-64-STATIC-NEXT: ret
635
636; DARWIN-64-DYNAMIC: _foo05:
637; DARWIN-64-DYNAMIC: movl _dsrc(%rip), %eax
638; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), %rcx
639; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx)
640; DARWIN-64-DYNAMIC-NEXT: ret
641
642; DARWIN-64-PIC: _foo05:
643; DARWIN-64-PIC: movl _dsrc(%rip), %eax
644; DARWIN-64-PIC-NEXT: movq _dptr(%rip), %rcx
645; DARWIN-64-PIC-NEXT: movl %eax, (%rcx)
646; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000647}
648
649define void @foo06() nounwind {
650entry:
651 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
652 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4
653 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000654; LINUX-64-STATIC: foo06:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000655; LINUX-64-STATIC: movl lsrc(%rip), %eax
656; LINUX-64-STATIC: movl %eax, ldst(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000657; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000658
659; LINUX-32-STATIC: foo06:
660; LINUX-32-STATIC: movl lsrc, %eax
661; LINUX-32-STATIC-NEXT: movl %eax, ldst
662; LINUX-32-STATIC-NEXT: ret
663
664; LINUX-32-PIC: foo06:
665; LINUX-32-PIC: movl lsrc, %eax
666; LINUX-32-PIC-NEXT: movl %eax, ldst
667; LINUX-32-PIC-NEXT: ret
668
669; LINUX-64-PIC: foo06:
670; LINUX-64-PIC: movl lsrc(%rip), %eax
671; LINUX-64-PIC-NEXT: movl %eax, ldst(%rip)
672; LINUX-64-PIC-NEXT: ret
673
674; DARWIN-32-STATIC: _foo06:
675; DARWIN-32-STATIC: movl _lsrc, %eax
676; DARWIN-32-STATIC-NEXT: movl %eax, _ldst
677; DARWIN-32-STATIC-NEXT: ret
678
679; DARWIN-32-DYNAMIC: _foo06:
680; DARWIN-32-DYNAMIC: movl _lsrc, %eax
681; DARWIN-32-DYNAMIC-NEXT: movl %eax, _ldst
682; DARWIN-32-DYNAMIC-NEXT: ret
683
684; DARWIN-32-PIC: _foo06:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000685; DARWIN-32-PIC: calll L9$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000686; DARWIN-32-PIC-NEXT: L9$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000687; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000688; DARWIN-32-PIC-NEXT: movl _lsrc-L9$pb(%eax), %ecx
689; DARWIN-32-PIC-NEXT: movl %ecx, _ldst-L9$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000690; DARWIN-32-PIC-NEXT: ret
691
692; DARWIN-64-STATIC: _foo06:
693; DARWIN-64-STATIC: movl _lsrc(%rip), %eax
694; DARWIN-64-STATIC-NEXT: movl %eax, _ldst(%rip)
695; DARWIN-64-STATIC-NEXT: ret
696
697; DARWIN-64-DYNAMIC: _foo06:
698; DARWIN-64-DYNAMIC: movl _lsrc(%rip), %eax
699; DARWIN-64-DYNAMIC-NEXT: movl %eax, _ldst(%rip)
700; DARWIN-64-DYNAMIC-NEXT: ret
701
702; DARWIN-64-PIC: _foo06:
703; DARWIN-64-PIC: movl _lsrc(%rip), %eax
704; DARWIN-64-PIC-NEXT: movl %eax, _ldst(%rip)
705; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000706}
707
708define void @foo07() nounwind {
709entry:
710 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
711 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000712; LINUX-64-STATIC: foo07:
713; LINUX-64-STATIC: movq $ldst, lptr
714; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000715
716; LINUX-32-STATIC: foo07:
717; LINUX-32-STATIC: movl $ldst, lptr
718; LINUX-32-STATIC-NEXT: ret
719
720; LINUX-32-PIC: foo07:
721; LINUX-32-PIC: movl $ldst, lptr
722; LINUX-32-PIC-NEXT: ret
723
724; LINUX-64-PIC: foo07:
725; LINUX-64-PIC: leaq ldst(%rip), %rax
726; LINUX-64-PIC-NEXT: movq %rax, lptr(%rip)
727; LINUX-64-PIC-NEXT: ret
728
729; DARWIN-32-STATIC: _foo07:
730; DARWIN-32-STATIC: movl $_ldst, _lptr
731; DARWIN-32-STATIC-NEXT: ret
732
733; DARWIN-32-DYNAMIC: _foo07:
734; DARWIN-32-DYNAMIC: movl $_ldst, _lptr
735; DARWIN-32-DYNAMIC-NEXT: ret
736
737; DARWIN-32-PIC: _foo07:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000738; DARWIN-32-PIC: calll L10$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000739; DARWIN-32-PIC-NEXT: L10$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000740; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000741; DARWIN-32-PIC-NEXT: leal _ldst-L10$pb(%eax), %ecx
742; DARWIN-32-PIC-NEXT: movl %ecx, _lptr-L10$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000743; DARWIN-32-PIC-NEXT: ret
744
745; DARWIN-64-STATIC: _foo07:
746; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
747; DARWIN-64-STATIC-NEXT: movq %rax, _lptr(%rip)
748; DARWIN-64-STATIC-NEXT: ret
749
750; DARWIN-64-DYNAMIC: _foo07:
751; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
752; DARWIN-64-DYNAMIC-NEXT: movq %rax, _lptr(%rip)
753; DARWIN-64-DYNAMIC-NEXT: ret
754
755; DARWIN-64-PIC: _foo07:
756; DARWIN-64-PIC: leaq _ldst(%rip), %rax
757; DARWIN-64-PIC-NEXT: movq %rax, _lptr(%rip)
758; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000759}
760
761define void @foo08() nounwind {
762entry:
763 %0 = load i32** @lptr, align 8
764 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
765 store i32 %1, i32* %0, align 4
766 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000767; LINUX-64-STATIC: foo08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000768; LINUX-64-STATIC: movl lsrc(%rip), %
769; LINUX-64-STATIC: movq lptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000770; LINUX-64-STATIC: movl
771; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000772
773; LINUX-32-STATIC: foo08:
774; LINUX-32-STATIC: movl lsrc, %eax
775; LINUX-32-STATIC-NEXT: movl lptr, %ecx
776; LINUX-32-STATIC-NEXT: movl %eax, (%ecx)
777; LINUX-32-STATIC-NEXT: ret
778
779; LINUX-32-PIC: foo08:
780; LINUX-32-PIC: movl lsrc, %eax
781; LINUX-32-PIC-NEXT: movl lptr, %ecx
782; LINUX-32-PIC-NEXT: movl %eax, (%ecx)
783; LINUX-32-PIC-NEXT: ret
784
785; LINUX-64-PIC: foo08:
786; LINUX-64-PIC: movl lsrc(%rip), %eax
787; LINUX-64-PIC-NEXT: movq lptr(%rip), %rcx
788; LINUX-64-PIC-NEXT: movl %eax, (%rcx)
789; LINUX-64-PIC-NEXT: ret
790
791; DARWIN-32-STATIC: _foo08:
792; DARWIN-32-STATIC: movl _lsrc, %eax
793; DARWIN-32-STATIC-NEXT: movl _lptr, %ecx
794; DARWIN-32-STATIC-NEXT: movl %eax, (%ecx)
795; DARWIN-32-STATIC-NEXT: ret
796
797; DARWIN-32-DYNAMIC: _foo08:
798; DARWIN-32-DYNAMIC: movl _lsrc, %eax
799; DARWIN-32-DYNAMIC-NEXT: movl _lptr, %ecx
800; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
801; DARWIN-32-DYNAMIC-NEXT: ret
802
803; DARWIN-32-PIC: _foo08:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000804; DARWIN-32-PIC: calll L11$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000805; DARWIN-32-PIC-NEXT: L11$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000806; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000807; DARWIN-32-PIC-NEXT: movl _lsrc-L11$pb(%eax), %ecx
808; DARWIN-32-PIC-NEXT: movl _lptr-L11$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000809; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
810; DARWIN-32-PIC-NEXT: ret
811
812; DARWIN-64-STATIC: _foo08:
813; DARWIN-64-STATIC: movl _lsrc(%rip), %eax
814; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), %rcx
815; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx)
816; DARWIN-64-STATIC-NEXT: ret
817
818; DARWIN-64-DYNAMIC: _foo08:
819; DARWIN-64-DYNAMIC: movl _lsrc(%rip), %eax
820; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), %rcx
821; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx)
822; DARWIN-64-DYNAMIC-NEXT: ret
823
824; DARWIN-64-PIC: _foo08:
825; DARWIN-64-PIC: movl _lsrc(%rip), %eax
826; DARWIN-64-PIC-NEXT: movq _lptr(%rip), %rcx
827; DARWIN-64-PIC-NEXT: movl %eax, (%rcx)
828; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000829}
830
831define void @qux00() nounwind {
832entry:
833 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
834 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4
835 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000836; LINUX-64-STATIC: qux00:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000837; LINUX-64-STATIC: movl src+64(%rip), %eax
838; LINUX-64-STATIC: movl %eax, dst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000839; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000840
841; LINUX-32-STATIC: qux00:
842; LINUX-32-STATIC: movl src+64, %eax
843; LINUX-32-STATIC-NEXT: movl %eax, dst+64
844; LINUX-32-STATIC-NEXT: ret
845
846; LINUX-32-PIC: qux00:
847; LINUX-32-PIC: movl src+64, %eax
848; LINUX-32-PIC-NEXT: movl %eax, dst+64
849; LINUX-32-PIC-NEXT: ret
850
851; LINUX-64-PIC: qux00:
852; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
853; LINUX-64-PIC-NEXT: movl 64(%rax), %eax
854; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), %rcx
855; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx)
856; LINUX-64-PIC-NEXT: ret
857
858; DARWIN-32-STATIC: _qux00:
859; DARWIN-32-STATIC: movl _src+64, %eax
860; DARWIN-32-STATIC-NEXT: movl %eax, _dst+64
861; DARWIN-32-STATIC-NEXT: ret
862
863; DARWIN-32-DYNAMIC: _qux00:
864; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
865; DARWIN-32-DYNAMIC-NEXT: movl 64(%eax), %eax
866; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %ecx
867; DARWIN-32-DYNAMIC-NEXT: movl %eax, 64(%ecx)
868; DARWIN-32-DYNAMIC-NEXT: ret
869
870; DARWIN-32-PIC: _qux00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000871; DARWIN-32-PIC: calll L12$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000872; DARWIN-32-PIC-NEXT: L12$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000873; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000874; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L12$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000875; DARWIN-32-PIC-NEXT: movl 64(%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +0000876; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L12$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000877; DARWIN-32-PIC-NEXT: movl %ecx, 64(%eax)
878; DARWIN-32-PIC-NEXT: ret
879
880; DARWIN-64-STATIC: _qux00:
881; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
882; DARWIN-64-STATIC-NEXT: movl 64(%rax), %eax
883; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
884; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx)
885; DARWIN-64-STATIC-NEXT: ret
886
887; DARWIN-64-DYNAMIC: _qux00:
888; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
889; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax), %eax
890; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
891; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx)
892; DARWIN-64-DYNAMIC-NEXT: ret
893
894; DARWIN-64-PIC: _qux00:
895; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
896; DARWIN-64-PIC-NEXT: movl 64(%rax), %eax
897; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
898; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx)
899; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000900}
901
902define void @qxx00() nounwind {
903entry:
904 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
905 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4
906 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000907; LINUX-64-STATIC: qxx00:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000908; LINUX-64-STATIC: movl xsrc+64(%rip), %eax
909; LINUX-64-STATIC: movl %eax, xdst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000910; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000911
912; LINUX-32-STATIC: qxx00:
913; LINUX-32-STATIC: movl xsrc+64, %eax
914; LINUX-32-STATIC-NEXT: movl %eax, xdst+64
915; LINUX-32-STATIC-NEXT: ret
916
917; LINUX-32-PIC: qxx00:
918; LINUX-32-PIC: movl xsrc+64, %eax
919; LINUX-32-PIC-NEXT: movl %eax, xdst+64
920; LINUX-32-PIC-NEXT: ret
921
922; LINUX-64-PIC: qxx00:
923; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
924; LINUX-64-PIC-NEXT: movl 64(%rax), %eax
925; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), %rcx
926; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx)
927; LINUX-64-PIC-NEXT: ret
928
929; DARWIN-32-STATIC: _qxx00:
930; DARWIN-32-STATIC: movl _xsrc+64, %eax
931; DARWIN-32-STATIC-NEXT: movl %eax, _xdst+64
932; DARWIN-32-STATIC-NEXT: ret
933
934; DARWIN-32-DYNAMIC: _qxx00:
935; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
936; DARWIN-32-DYNAMIC-NEXT: movl 64(%eax), %eax
937; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, %ecx
938; DARWIN-32-DYNAMIC-NEXT: movl %eax, 64(%ecx)
939; DARWIN-32-DYNAMIC-NEXT: ret
940
941; DARWIN-32-PIC: _qxx00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000942; DARWIN-32-PIC: calll L13$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000943; DARWIN-32-PIC-NEXT: L13$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000944; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +0000945; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L13$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000946; DARWIN-32-PIC-NEXT: movl 64(%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +0000947; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L13$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000948; DARWIN-32-PIC-NEXT: movl %ecx, 64(%eax)
949; DARWIN-32-PIC-NEXT: ret
950
951; DARWIN-64-STATIC: _qxx00:
952; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
953; DARWIN-64-STATIC-NEXT: movl 64(%rax), %eax
954; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
955; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx)
956; DARWIN-64-STATIC-NEXT: ret
957
958; DARWIN-64-DYNAMIC: _qxx00:
959; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
960; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax), %eax
961; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
962; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx)
963; DARWIN-64-DYNAMIC-NEXT: ret
964
965; DARWIN-64-PIC: _qxx00:
966; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
967; DARWIN-64-PIC-NEXT: movl 64(%rax), %eax
968; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
969; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx)
970; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000971}
972
973define void @qux01() nounwind {
974entry:
975 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
976 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000977; LINUX-64-STATIC: qux01:
978; LINUX-64-STATIC: movq $dst+64, ptr
979; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000980
981; LINUX-32-STATIC: qux01:
982; LINUX-32-STATIC: movl $dst+64, ptr
983; LINUX-32-STATIC-NEXT: ret
984
985; LINUX-32-PIC: qux01:
986; LINUX-32-PIC: movl $dst+64, ptr
987; LINUX-32-PIC-NEXT: ret
988
989; LINUX-64-PIC: qux01:
990; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
991; LINUX-64-PIC-NEXT: addq $64, %rax
992; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
993; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
994; LINUX-64-PIC-NEXT: ret
995
996; DARWIN-32-STATIC: _qux01:
997; DARWIN-32-STATIC: movl $_dst+64, _ptr
998; DARWIN-32-STATIC-NEXT: ret
999
1000; DARWIN-32-DYNAMIC: _qux01:
1001; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax
1002; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
1003; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
1004; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
1005; DARWIN-32-DYNAMIC-NEXT: ret
1006
1007; DARWIN-32-PIC: _qux01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001008; DARWIN-32-PIC: calll L14$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001009; DARWIN-32-PIC-NEXT: L14$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001010; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001011; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L14$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001012; DARWIN-32-PIC-NEXT: addl $64, %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001013; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L14$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001014; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
1015; DARWIN-32-PIC-NEXT: ret
1016
1017; DARWIN-64-STATIC: _qux01:
1018; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
1019; DARWIN-64-STATIC-NEXT: addq $64, %rax
1020; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1021; DARWIN-64-STATIC-NEXT: movq %rax, (%rcx)
1022; DARWIN-64-STATIC-NEXT: ret
1023
1024; DARWIN-64-DYNAMIC: _qux01:
1025; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
1026; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
1027; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1028; DARWIN-64-DYNAMIC-NEXT: movq %rax, (%rcx)
1029; DARWIN-64-DYNAMIC-NEXT: ret
1030
1031; DARWIN-64-PIC: _qux01:
1032; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
1033; DARWIN-64-PIC-NEXT: addq $64, %rax
1034; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1035; DARWIN-64-PIC-NEXT: movq %rax, (%rcx)
1036; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001037}
1038
1039define void @qxx01() nounwind {
1040entry:
1041 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1042 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001043; LINUX-64-STATIC: qxx01:
1044; LINUX-64-STATIC: movq $xdst+64, ptr
1045; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001046
1047; LINUX-32-STATIC: qxx01:
1048; LINUX-32-STATIC: movl $xdst+64, ptr
1049; LINUX-32-STATIC-NEXT: ret
1050
1051; LINUX-32-PIC: qxx01:
1052; LINUX-32-PIC: movl $xdst+64, ptr
1053; LINUX-32-PIC-NEXT: ret
1054
1055; LINUX-64-PIC: qxx01:
1056; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
1057; LINUX-64-PIC-NEXT: addq $64, %rax
1058; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
1059; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
1060; LINUX-64-PIC-NEXT: ret
1061
1062; DARWIN-32-STATIC: _qxx01:
1063; DARWIN-32-STATIC: movl $_xdst+64, _ptr
1064; DARWIN-32-STATIC-NEXT: ret
1065
1066; DARWIN-32-DYNAMIC: _qxx01:
1067; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax
1068; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
1069; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
1070; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
1071; DARWIN-32-DYNAMIC-NEXT: ret
1072
1073; DARWIN-32-PIC: _qxx01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001074; DARWIN-32-PIC: calll L15$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001075; DARWIN-32-PIC-NEXT: L15$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001076; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001077; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L15$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001078; DARWIN-32-PIC-NEXT: addl $64, %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001079; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L15$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001080; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
1081; DARWIN-32-PIC-NEXT: ret
1082
1083; DARWIN-64-STATIC: _qxx01:
1084; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
1085; DARWIN-64-STATIC-NEXT: addq $64, %rax
1086; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1087; DARWIN-64-STATIC-NEXT: movq %rax, (%rcx)
1088; DARWIN-64-STATIC-NEXT: ret
1089
1090; DARWIN-64-DYNAMIC: _qxx01:
1091; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
1092; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
1093; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1094; DARWIN-64-DYNAMIC-NEXT: movq %rax, (%rcx)
1095; DARWIN-64-DYNAMIC-NEXT: ret
1096
1097; DARWIN-64-PIC: _qxx01:
1098; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
1099; DARWIN-64-PIC-NEXT: addq $64, %rax
1100; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1101; DARWIN-64-PIC-NEXT: movq %rax, (%rcx)
1102; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001103}
1104
1105define void @qux02() nounwind {
1106entry:
1107 %0 = load i32** @ptr, align 8
1108 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
1109 %2 = getelementptr i32* %0, i64 16
1110 store i32 %1, i32* %2, align 4
Chris Lattner4f066492009-07-11 20:29:19 +00001111; LINUX-64-STATIC: qux02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001112; LINUX-64-STATIC: movl src+64(%rip), %eax
1113; LINUX-64-STATIC: movq ptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00001114; LINUX-64-STATIC: movl %eax, 64(%rcx)
1115; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001116
1117; LINUX-32-STATIC: qux02:
1118; LINUX-32-STATIC: movl src+64, %eax
1119; LINUX-32-STATIC-NEXT: movl ptr, %ecx
1120; LINUX-32-STATIC-NEXT: movl %eax, 64(%ecx)
1121; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001122 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001123
1124; LINUX-32-PIC: qux02:
1125; LINUX-32-PIC: movl src+64, %eax
1126; LINUX-32-PIC-NEXT: movl ptr, %ecx
1127; LINUX-32-PIC-NEXT: movl %eax, 64(%ecx)
1128; LINUX-32-PIC-NEXT: ret
1129
1130; LINUX-64-PIC: qux02:
1131; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
1132; LINUX-64-PIC-NEXT: movl 64(%rax), %eax
1133; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
1134; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
1135; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx)
1136; LINUX-64-PIC-NEXT: ret
1137
1138; DARWIN-32-STATIC: _qux02:
1139; DARWIN-32-STATIC: movl _src+64, %eax
1140; DARWIN-32-STATIC-NEXT: movl _ptr, %ecx
1141; DARWIN-32-STATIC-NEXT: movl %eax, 64(%ecx)
1142; DARWIN-32-STATIC-NEXT: ret
1143
1144; DARWIN-32-DYNAMIC: _qux02:
1145; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
1146; DARWIN-32-DYNAMIC-NEXT: movl 64(%eax), %eax
1147; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
1148; DARWIN-32-DYNAMIC-NEXT: movl (%ecx), %ecx
1149; DARWIN-32-DYNAMIC-NEXT: movl %eax, 64(%ecx)
1150; DARWIN-32-DYNAMIC-NEXT: ret
1151
1152; DARWIN-32-PIC: _qux02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001153; DARWIN-32-PIC: calll L16$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001154; DARWIN-32-PIC-NEXT: L16$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001155; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001156; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L16$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001157; DARWIN-32-PIC-NEXT: movl 64(%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001158; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L16$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001159; DARWIN-32-PIC-NEXT: movl (%eax), %eax
1160; DARWIN-32-PIC-NEXT: movl %ecx, 64(%eax)
1161; DARWIN-32-PIC-NEXT: ret
1162
1163; DARWIN-64-STATIC: _qux02:
1164; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
1165; DARWIN-64-STATIC-NEXT: movl 64(%rax), %eax
1166; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1167; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
1168; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx)
1169; DARWIN-64-STATIC-NEXT: ret
1170
1171; DARWIN-64-DYNAMIC: _qux02:
1172; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
1173; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax), %eax
1174; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1175; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
1176; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx)
1177; DARWIN-64-DYNAMIC-NEXT: ret
1178
1179; DARWIN-64-PIC: _qux02:
1180; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
1181; DARWIN-64-PIC-NEXT: movl 64(%rax), %eax
1182; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1183; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
1184; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx)
1185; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001186}
1187
1188define void @qxx02() nounwind {
1189entry:
1190 %0 = load i32** @ptr, align 8
1191 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
1192 %2 = getelementptr i32* %0, i64 16
1193 store i32 %1, i32* %2, align 4
Chris Lattner4f066492009-07-11 20:29:19 +00001194; LINUX-64-STATIC: qxx02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001195; LINUX-64-STATIC: movl xsrc+64(%rip), %eax
1196; LINUX-64-STATIC: movq ptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00001197; LINUX-64-STATIC: movl %eax, 64(%rcx)
1198; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001199
1200; LINUX-32-STATIC: qxx02:
1201; LINUX-32-STATIC: movl xsrc+64, %eax
1202; LINUX-32-STATIC-NEXT: movl ptr, %ecx
1203; LINUX-32-STATIC-NEXT: movl %eax, 64(%ecx)
1204; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001205 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001206
1207; LINUX-32-PIC: qxx02:
1208; LINUX-32-PIC: movl xsrc+64, %eax
1209; LINUX-32-PIC-NEXT: movl ptr, %ecx
1210; LINUX-32-PIC-NEXT: movl %eax, 64(%ecx)
1211; LINUX-32-PIC-NEXT: ret
1212
1213; LINUX-64-PIC: qxx02:
1214; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
1215; LINUX-64-PIC-NEXT: movl 64(%rax), %eax
1216; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
1217; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
1218; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx)
1219; LINUX-64-PIC-NEXT: ret
1220
1221; DARWIN-32-STATIC: _qxx02:
1222; DARWIN-32-STATIC: movl _xsrc+64, %eax
1223; DARWIN-32-STATIC-NEXT: movl _ptr, %ecx
1224; DARWIN-32-STATIC-NEXT: movl %eax, 64(%ecx)
1225; DARWIN-32-STATIC-NEXT: ret
1226
1227; DARWIN-32-DYNAMIC: _qxx02:
1228; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
1229; DARWIN-32-DYNAMIC-NEXT: movl 64(%eax), %eax
1230; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
1231; DARWIN-32-DYNAMIC-NEXT: movl (%ecx), %ecx
1232; DARWIN-32-DYNAMIC-NEXT: movl %eax, 64(%ecx)
1233; DARWIN-32-DYNAMIC-NEXT: ret
1234
1235; DARWIN-32-PIC: _qxx02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001236; DARWIN-32-PIC: calll L17$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001237; DARWIN-32-PIC-NEXT: L17$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001238; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001239; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L17$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001240; DARWIN-32-PIC-NEXT: movl 64(%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001241; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L17$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001242; DARWIN-32-PIC-NEXT: movl (%eax), %eax
1243; DARWIN-32-PIC-NEXT: movl %ecx, 64(%eax)
1244; DARWIN-32-PIC-NEXT: ret
1245
1246; DARWIN-64-STATIC: _qxx02:
1247; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
1248; DARWIN-64-STATIC-NEXT: movl 64(%rax), %eax
1249; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1250; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
1251; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx)
1252; DARWIN-64-STATIC-NEXT: ret
1253
1254; DARWIN-64-DYNAMIC: _qxx02:
1255; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
1256; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax), %eax
1257; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1258; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
1259; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx)
1260; DARWIN-64-DYNAMIC-NEXT: ret
1261
1262; DARWIN-64-PIC: _qxx02:
1263; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
1264; DARWIN-64-PIC-NEXT: movl 64(%rax), %eax
1265; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
1266; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
1267; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx)
1268; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001269}
1270
1271define void @qux03() nounwind {
1272entry:
1273 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1274 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32
1275 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001276; LINUX-64-STATIC: qux03:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001277; LINUX-64-STATIC: movl dsrc+64(%rip), %eax
1278; LINUX-64-STATIC: movl %eax, ddst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00001279; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001280
1281; LINUX-32-STATIC: qux03:
1282; LINUX-32-STATIC: movl dsrc+64, %eax
1283; LINUX-32-STATIC-NEXT: movl %eax, ddst+64
1284; LINUX-32-STATIC-NEXT: ret
1285
1286; LINUX-32-PIC: qux03:
1287; LINUX-32-PIC: movl dsrc+64, %eax
1288; LINUX-32-PIC-NEXT: movl %eax, ddst+64
1289; LINUX-32-PIC-NEXT: ret
1290
1291; LINUX-64-PIC: qux03:
1292; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
1293; LINUX-64-PIC-NEXT: movl 64(%rax), %eax
1294; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), %rcx
1295; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx)
1296; LINUX-64-PIC-NEXT: ret
1297
1298; DARWIN-32-STATIC: _qux03:
1299; DARWIN-32-STATIC: movl _dsrc+64, %eax
1300; DARWIN-32-STATIC-NEXT: movl %eax, _ddst+64
1301; DARWIN-32-STATIC-NEXT: ret
1302
1303; DARWIN-32-DYNAMIC: _qux03:
1304; DARWIN-32-DYNAMIC: movl _dsrc+64, %eax
1305; DARWIN-32-DYNAMIC-NEXT: movl %eax, _ddst+64
1306; DARWIN-32-DYNAMIC-NEXT: ret
1307
1308; DARWIN-32-PIC: _qux03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001309; DARWIN-32-PIC: calll L18$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001310; DARWIN-32-PIC-NEXT: L18$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001311; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001312; DARWIN-32-PIC-NEXT: movl (_dsrc-L18$pb)+64(%eax), %ecx
1313; DARWIN-32-PIC-NEXT: movl %ecx, (_ddst-L18$pb)+64(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001314; DARWIN-32-PIC-NEXT: ret
1315
1316; DARWIN-64-STATIC: _qux03:
1317; DARWIN-64-STATIC: movl _dsrc+64(%rip), %eax
1318; DARWIN-64-STATIC-NEXT: movl %eax, _ddst+64(%rip)
1319; DARWIN-64-STATIC-NEXT: ret
1320
1321; DARWIN-64-DYNAMIC: _qux03:
1322; DARWIN-64-DYNAMIC: movl _dsrc+64(%rip), %eax
1323; DARWIN-64-DYNAMIC-NEXT: movl %eax, _ddst+64(%rip)
1324; DARWIN-64-DYNAMIC-NEXT: ret
1325
1326; DARWIN-64-PIC: _qux03:
1327; DARWIN-64-PIC: movl _dsrc+64(%rip), %eax
1328; DARWIN-64-PIC-NEXT: movl %eax, _ddst+64(%rip)
1329; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001330}
1331
1332define void @qux04() nounwind {
1333entry:
1334 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1335 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001336; LINUX-64-STATIC: qux04:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001337; LINUX-64-STATIC: movq $ddst+64, dptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00001338; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001339
1340; LINUX-32-STATIC: qux04:
1341; LINUX-32-STATIC: movl $ddst+64, dptr
1342; LINUX-32-STATIC-NEXT: ret
1343
1344; LINUX-32-PIC: qux04:
1345; LINUX-32-PIC: movl $ddst+64, dptr
1346; LINUX-32-PIC-NEXT: ret
1347
1348; LINUX-64-PIC: qux04:
1349; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
1350; LINUX-64-PIC-NEXT: addq $64, %rax
1351; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
1352; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
1353; LINUX-64-PIC-NEXT: ret
1354
1355; DARWIN-32-STATIC: _qux04:
1356; DARWIN-32-STATIC: movl $_ddst+64, _dptr
1357; DARWIN-32-STATIC-NEXT: ret
1358
1359; DARWIN-32-DYNAMIC: _qux04:
1360; DARWIN-32-DYNAMIC: movl $_ddst+64, _dptr
1361; DARWIN-32-DYNAMIC-NEXT: ret
1362
1363; DARWIN-32-PIC: _qux04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001364; DARWIN-32-PIC: calll L19$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001365; DARWIN-32-PIC-NEXT: L19$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001366; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001367; DARWIN-32-PIC-NEXT: leal (_ddst-L19$pb)+64(%eax), %ecx
1368; DARWIN-32-PIC-NEXT: movl %ecx, _dptr-L19$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001369; DARWIN-32-PIC-NEXT: ret
1370
1371; DARWIN-64-STATIC: _qux04:
1372; DARWIN-64-STATIC: leaq _ddst+64(%rip), %rax
1373; DARWIN-64-STATIC-NEXT: movq %rax, _dptr(%rip)
1374; DARWIN-64-STATIC-NEXT: ret
1375
1376; DARWIN-64-DYNAMIC: _qux04:
1377; DARWIN-64-DYNAMIC: leaq _ddst+64(%rip), %rax
1378; DARWIN-64-DYNAMIC-NEXT: movq %rax, _dptr(%rip)
1379; DARWIN-64-DYNAMIC-NEXT: ret
1380
1381; DARWIN-64-PIC: _qux04:
1382; DARWIN-64-PIC: leaq _ddst+64(%rip), %rax
1383; DARWIN-64-PIC-NEXT: movq %rax, _dptr(%rip)
1384; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001385}
1386
1387define void @qux05() nounwind {
1388entry:
1389 %0 = load i32** @dptr, align 8
1390 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1391 %2 = getelementptr i32* %0, i64 16
1392 store i32 %1, i32* %2, align 4
Chris Lattner4f066492009-07-11 20:29:19 +00001393; LINUX-64-STATIC: qux05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001394; LINUX-64-STATIC: movl dsrc+64(%rip), %eax
1395; LINUX-64-STATIC: movq dptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00001396; LINUX-64-STATIC: movl %eax, 64(%rcx)
1397; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001398
1399; LINUX-32-STATIC: qux05:
1400; LINUX-32-STATIC: movl dsrc+64, %eax
1401; LINUX-32-STATIC-NEXT: movl dptr, %ecx
1402; LINUX-32-STATIC-NEXT: movl %eax, 64(%ecx)
1403; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001404 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001405
1406; LINUX-32-PIC: qux05:
1407; LINUX-32-PIC: movl dsrc+64, %eax
1408; LINUX-32-PIC-NEXT: movl dptr, %ecx
1409; LINUX-32-PIC-NEXT: movl %eax, 64(%ecx)
1410; LINUX-32-PIC-NEXT: ret
1411
1412; LINUX-64-PIC: qux05:
1413; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
1414; LINUX-64-PIC-NEXT: movl 64(%rax), %eax
1415; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
1416; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
1417; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx)
1418; LINUX-64-PIC-NEXT: ret
1419
1420; DARWIN-32-STATIC: _qux05:
1421; DARWIN-32-STATIC: movl _dsrc+64, %eax
1422; DARWIN-32-STATIC-NEXT: movl _dptr, %ecx
1423; DARWIN-32-STATIC-NEXT: movl %eax, 64(%ecx)
1424; DARWIN-32-STATIC-NEXT: ret
1425
1426; DARWIN-32-DYNAMIC: _qux05:
1427; DARWIN-32-DYNAMIC: movl _dsrc+64, %eax
1428; DARWIN-32-DYNAMIC-NEXT: movl _dptr, %ecx
1429; DARWIN-32-DYNAMIC-NEXT: movl %eax, 64(%ecx)
1430; DARWIN-32-DYNAMIC-NEXT: ret
1431
1432; DARWIN-32-PIC: _qux05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001433; DARWIN-32-PIC: calll L20$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001434; DARWIN-32-PIC-NEXT: L20$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001435; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001436; DARWIN-32-PIC-NEXT: movl (_dsrc-L20$pb)+64(%eax), %ecx
1437; DARWIN-32-PIC-NEXT: movl _dptr-L20$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001438; DARWIN-32-PIC-NEXT: movl %ecx, 64(%eax)
1439; DARWIN-32-PIC-NEXT: ret
1440
1441; DARWIN-64-STATIC: _qux05:
1442; DARWIN-64-STATIC: movl _dsrc+64(%rip), %eax
1443; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), %rcx
1444; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx)
1445; DARWIN-64-STATIC-NEXT: ret
1446
1447; DARWIN-64-DYNAMIC: _qux05:
1448; DARWIN-64-DYNAMIC: movl _dsrc+64(%rip), %eax
1449; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), %rcx
1450; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx)
1451; DARWIN-64-DYNAMIC-NEXT: ret
1452
1453; DARWIN-64-PIC: _qux05:
1454; DARWIN-64-PIC: movl _dsrc+64(%rip), %eax
1455; DARWIN-64-PIC-NEXT: movq _dptr(%rip), %rcx
1456; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx)
1457; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001458}
1459
1460define void @qux06() nounwind {
1461entry:
1462 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1463 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4
1464 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001465; LINUX-64-STATIC: qux06:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001466; LINUX-64-STATIC: movl lsrc+64(%rip), %eax
Chris Lattner4f066492009-07-11 20:29:19 +00001467; LINUX-64-STATIC: movl %eax, ldst+64
1468; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001469
1470; LINUX-32-STATIC: qux06:
1471; LINUX-32-STATIC: movl lsrc+64, %eax
1472; LINUX-32-STATIC-NEXT: movl %eax, ldst+64
1473; LINUX-32-STATIC-NEXT: ret
1474
1475; LINUX-32-PIC: qux06:
1476; LINUX-32-PIC: movl lsrc+64, %eax
1477; LINUX-32-PIC-NEXT: movl %eax, ldst+64
1478; LINUX-32-PIC-NEXT: ret
1479
1480; LINUX-64-PIC: qux06:
1481; LINUX-64-PIC: movl lsrc+64(%rip), %eax
1482; LINUX-64-PIC-NEXT: movl %eax, ldst+64(%rip)
1483; LINUX-64-PIC-NEXT: ret
1484
1485; DARWIN-32-STATIC: _qux06:
1486; DARWIN-32-STATIC: movl _lsrc+64, %eax
1487; DARWIN-32-STATIC-NEXT: movl %eax, _ldst+64
1488; DARWIN-32-STATIC-NEXT: ret
1489
1490; DARWIN-32-DYNAMIC: _qux06:
1491; DARWIN-32-DYNAMIC: movl _lsrc+64, %eax
1492; DARWIN-32-DYNAMIC-NEXT: movl %eax, _ldst+64
1493; DARWIN-32-DYNAMIC-NEXT: ret
1494
1495; DARWIN-32-PIC: _qux06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001496; DARWIN-32-PIC: calll L21$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001497; DARWIN-32-PIC-NEXT: L21$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001498; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001499; DARWIN-32-PIC-NEXT: movl (_lsrc-L21$pb)+64(%eax), %ecx
1500; DARWIN-32-PIC-NEXT: movl %ecx, (_ldst-L21$pb)+64(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001501; DARWIN-32-PIC-NEXT: ret
1502
1503; DARWIN-64-STATIC: _qux06:
1504; DARWIN-64-STATIC: movl _lsrc+64(%rip), %eax
1505; DARWIN-64-STATIC-NEXT: movl %eax, _ldst+64(%rip)
1506; DARWIN-64-STATIC-NEXT: ret
1507
1508; DARWIN-64-DYNAMIC: _qux06:
1509; DARWIN-64-DYNAMIC: movl _lsrc+64(%rip), %eax
1510; DARWIN-64-DYNAMIC-NEXT: movl %eax, _ldst+64(%rip)
1511; DARWIN-64-DYNAMIC-NEXT: ret
1512
1513; DARWIN-64-PIC: _qux06:
1514; DARWIN-64-PIC: movl _lsrc+64(%rip), %eax
1515; DARWIN-64-PIC-NEXT: movl %eax, _ldst+64(%rip)
1516; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001517}
1518
1519define void @qux07() nounwind {
1520entry:
1521 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1522 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001523; LINUX-64-STATIC: qux07:
1524; LINUX-64-STATIC: movq $ldst+64, lptr
1525; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001526
1527; LINUX-32-STATIC: qux07:
1528; LINUX-32-STATIC: movl $ldst+64, lptr
1529; LINUX-32-STATIC-NEXT: ret
1530
1531; LINUX-32-PIC: qux07:
1532; LINUX-32-PIC: movl $ldst+64, lptr
1533; LINUX-32-PIC-NEXT: ret
1534
1535; LINUX-64-PIC: qux07:
1536; LINUX-64-PIC: leaq ldst+64(%rip), %rax
1537; LINUX-64-PIC-NEXT: movq %rax, lptr(%rip)
1538; LINUX-64-PIC-NEXT: ret
1539
1540; DARWIN-32-STATIC: _qux07:
1541; DARWIN-32-STATIC: movl $_ldst+64, _lptr
1542; DARWIN-32-STATIC-NEXT: ret
1543
1544; DARWIN-32-DYNAMIC: _qux07:
1545; DARWIN-32-DYNAMIC: movl $_ldst+64, _lptr
1546; DARWIN-32-DYNAMIC-NEXT: ret
1547
1548; DARWIN-32-PIC: _qux07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001549; DARWIN-32-PIC: calll L22$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001550; DARWIN-32-PIC-NEXT: L22$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001551; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001552; DARWIN-32-PIC-NEXT: leal (_ldst-L22$pb)+64(%eax), %ecx
1553; DARWIN-32-PIC-NEXT: movl %ecx, _lptr-L22$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001554; DARWIN-32-PIC-NEXT: ret
1555
1556; DARWIN-64-STATIC: _qux07:
1557; DARWIN-64-STATIC: leaq _ldst+64(%rip), %rax
1558; DARWIN-64-STATIC-NEXT: movq %rax, _lptr(%rip)
1559; DARWIN-64-STATIC-NEXT: ret
1560
1561; DARWIN-64-DYNAMIC: _qux07:
1562; DARWIN-64-DYNAMIC: leaq _ldst+64(%rip), %rax
1563; DARWIN-64-DYNAMIC-NEXT: movq %rax, _lptr(%rip)
1564; DARWIN-64-DYNAMIC-NEXT: ret
1565
1566; DARWIN-64-PIC: _qux07:
1567; DARWIN-64-PIC: leaq _ldst+64(%rip), %rax
1568; DARWIN-64-PIC-NEXT: movq %rax, _lptr(%rip)
1569; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001570}
1571
1572define void @qux08() nounwind {
1573entry:
1574 %0 = load i32** @lptr, align 8
1575 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1576 %2 = getelementptr i32* %0, i64 16
1577 store i32 %1, i32* %2, align 4
Chris Lattner4f066492009-07-11 20:29:19 +00001578; LINUX-64-STATIC: qux08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001579; LINUX-64-STATIC: movl lsrc+64(%rip), %eax
1580; LINUX-64-STATIC: movq lptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00001581; LINUX-64-STATIC: movl %eax, 64(%rcx)
1582; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001583
1584; LINUX-32-STATIC: qux08:
1585; LINUX-32-STATIC: movl lsrc+64, %eax
1586; LINUX-32-STATIC-NEXT: movl lptr, %ecx
1587; LINUX-32-STATIC-NEXT: movl %eax, 64(%ecx)
1588; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001589 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001590
1591; LINUX-32-PIC: qux08:
1592; LINUX-32-PIC: movl lsrc+64, %eax
1593; LINUX-32-PIC-NEXT: movl lptr, %ecx
1594; LINUX-32-PIC-NEXT: movl %eax, 64(%ecx)
1595; LINUX-32-PIC-NEXT: ret
1596
1597; LINUX-64-PIC: qux08:
1598; LINUX-64-PIC: movl lsrc+64(%rip), %eax
1599; LINUX-64-PIC-NEXT: movq lptr(%rip), %rcx
1600; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx)
1601; LINUX-64-PIC-NEXT: ret
1602
1603; DARWIN-32-STATIC: _qux08:
1604; DARWIN-32-STATIC: movl _lsrc+64, %eax
1605; DARWIN-32-STATIC-NEXT: movl _lptr, %ecx
1606; DARWIN-32-STATIC-NEXT: movl %eax, 64(%ecx)
1607; DARWIN-32-STATIC-NEXT: ret
1608
1609; DARWIN-32-DYNAMIC: _qux08:
1610; DARWIN-32-DYNAMIC: movl _lsrc+64, %eax
1611; DARWIN-32-DYNAMIC-NEXT: movl _lptr, %ecx
1612; DARWIN-32-DYNAMIC-NEXT: movl %eax, 64(%ecx)
1613; DARWIN-32-DYNAMIC-NEXT: ret
1614
1615; DARWIN-32-PIC: _qux08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001616; DARWIN-32-PIC: calll L23$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001617; DARWIN-32-PIC-NEXT: L23$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001618; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00001619; DARWIN-32-PIC-NEXT: movl (_lsrc-L23$pb)+64(%eax), %ecx
1620; DARWIN-32-PIC-NEXT: movl _lptr-L23$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001621; DARWIN-32-PIC-NEXT: movl %ecx, 64(%eax)
1622; DARWIN-32-PIC-NEXT: ret
1623
1624; DARWIN-64-STATIC: _qux08:
1625; DARWIN-64-STATIC: movl _lsrc+64(%rip), %eax
1626; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), %rcx
1627; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx)
1628; DARWIN-64-STATIC-NEXT: ret
1629
1630; DARWIN-64-DYNAMIC: _qux08:
1631; DARWIN-64-DYNAMIC: movl _lsrc+64(%rip), %eax
1632; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), %rcx
1633; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx)
1634; DARWIN-64-DYNAMIC-NEXT: ret
1635
1636; DARWIN-64-PIC: _qux08:
1637; DARWIN-64-PIC: movl _lsrc+64(%rip), %eax
1638; DARWIN-64-PIC-NEXT: movq _lptr(%rip), %rcx
1639; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx)
1640; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001641}
1642
1643define void @ind00(i64 %i) nounwind {
1644entry:
1645 %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1646 %1 = load i32* %0, align 4
1647 %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1648 store i32 %1, i32* %2, align 4
1649 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001650; LINUX-64-STATIC: ind00:
1651; LINUX-64-STATIC: movl src(,%rdi,4), %eax
1652; LINUX-64-STATIC: movl %eax, dst(,%rdi,4)
1653; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001654
1655; LINUX-32-STATIC: ind00:
1656; LINUX-32-STATIC: movl 4(%esp), %eax
1657; LINUX-32-STATIC-NEXT: movl src(,%eax,4), %ecx
1658; LINUX-32-STATIC-NEXT: movl %ecx, dst(,%eax,4)
1659; LINUX-32-STATIC-NEXT: ret
1660
1661; LINUX-32-PIC: ind00:
1662; LINUX-32-PIC: movl 4(%esp), %eax
1663; LINUX-32-PIC-NEXT: movl src(,%eax,4), %ecx
1664; LINUX-32-PIC-NEXT: movl %ecx, dst(,%eax,4)
1665; LINUX-32-PIC-NEXT: ret
1666
1667; LINUX-64-PIC: ind00:
1668; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
1669; LINUX-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
1670; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), %rcx
1671; LINUX-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
1672; LINUX-64-PIC-NEXT: ret
1673
1674; DARWIN-32-STATIC: _ind00:
1675; DARWIN-32-STATIC: movl 4(%esp), %eax
1676; DARWIN-32-STATIC-NEXT: movl _src(,%eax,4), %ecx
1677; DARWIN-32-STATIC-NEXT: movl %ecx, _dst(,%eax,4)
1678; DARWIN-32-STATIC-NEXT: ret
1679
1680; DARWIN-32-DYNAMIC: _ind00:
1681; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
1682; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, %ecx
1683; DARWIN-32-DYNAMIC-NEXT: movl (%ecx,%eax,4), %ecx
1684; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %edx
1685; DARWIN-32-DYNAMIC-NEXT: movl %ecx, (%edx,%eax,4)
1686; DARWIN-32-DYNAMIC-NEXT: ret
1687
1688; DARWIN-32-PIC: _ind00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001689; DARWIN-32-PIC: calll L24$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001690; DARWIN-32-PIC-NEXT: L24$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001691; DARWIN-32-PIC-NEXT: popl %eax
1692; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001693; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L24$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001694; DARWIN-32-PIC-NEXT: movl (%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001695; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L24$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001696; DARWIN-32-PIC-NEXT: movl %edx, (%eax,%ecx,4)
1697; DARWIN-32-PIC-NEXT: ret
1698
1699; DARWIN-64-STATIC: _ind00:
1700; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
1701; DARWIN-64-STATIC-NEXT: movl (%rax,%rdi,4), %eax
1702; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
1703; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx,%rdi,4)
1704; DARWIN-64-STATIC-NEXT: ret
1705
1706; DARWIN-64-DYNAMIC: _ind00:
1707; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
1708; DARWIN-64-DYNAMIC-NEXT: movl (%rax,%rdi,4), %eax
1709; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
1710; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx,%rdi,4)
1711; DARWIN-64-DYNAMIC-NEXT: ret
1712
1713; DARWIN-64-PIC: _ind00:
1714; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
1715; DARWIN-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
1716; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
1717; DARWIN-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
1718; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001719}
1720
1721define void @ixd00(i64 %i) nounwind {
1722entry:
1723 %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
1724 %1 = load i32* %0, align 4
1725 %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1726 store i32 %1, i32* %2, align 4
1727 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001728; LINUX-64-STATIC: ixd00:
1729; LINUX-64-STATIC: movl xsrc(,%rdi,4), %eax
1730; LINUX-64-STATIC: movl %eax, xdst(,%rdi,4)
1731; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001732
1733; LINUX-32-STATIC: ixd00:
1734; LINUX-32-STATIC: movl 4(%esp), %eax
1735; LINUX-32-STATIC-NEXT: movl xsrc(,%eax,4), %ecx
1736; LINUX-32-STATIC-NEXT: movl %ecx, xdst(,%eax,4)
1737; LINUX-32-STATIC-NEXT: ret
1738
1739; LINUX-32-PIC: ixd00:
1740; LINUX-32-PIC: movl 4(%esp), %eax
1741; LINUX-32-PIC-NEXT: movl xsrc(,%eax,4), %ecx
1742; LINUX-32-PIC-NEXT: movl %ecx, xdst(,%eax,4)
1743; LINUX-32-PIC-NEXT: ret
1744
1745; LINUX-64-PIC: ixd00:
1746; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
1747; LINUX-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
1748; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), %rcx
1749; LINUX-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
1750; LINUX-64-PIC-NEXT: ret
1751
1752; DARWIN-32-STATIC: _ixd00:
1753; DARWIN-32-STATIC: movl 4(%esp), %eax
1754; DARWIN-32-STATIC-NEXT: movl _xsrc(,%eax,4), %ecx
1755; DARWIN-32-STATIC-NEXT: movl %ecx, _xdst(,%eax,4)
1756; DARWIN-32-STATIC-NEXT: ret
1757
1758; DARWIN-32-DYNAMIC: _ixd00:
1759; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
1760; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, %ecx
1761; DARWIN-32-DYNAMIC-NEXT: movl (%ecx,%eax,4), %ecx
1762; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, %edx
1763; DARWIN-32-DYNAMIC-NEXT: movl %ecx, (%edx,%eax,4)
1764; DARWIN-32-DYNAMIC-NEXT: ret
1765
1766; DARWIN-32-PIC: _ixd00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001767; DARWIN-32-PIC: calll L25$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001768; DARWIN-32-PIC-NEXT: L25$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001769; DARWIN-32-PIC-NEXT: popl %eax
1770; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001771; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L25$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001772; DARWIN-32-PIC-NEXT: movl (%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001773; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L25$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001774; DARWIN-32-PIC-NEXT: movl %edx, (%eax,%ecx,4)
1775; DARWIN-32-PIC-NEXT: ret
1776
1777; DARWIN-64-STATIC: _ixd00:
1778; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
1779; DARWIN-64-STATIC-NEXT: movl (%rax,%rdi,4), %eax
1780; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
1781; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx,%rdi,4)
1782; DARWIN-64-STATIC-NEXT: ret
1783
1784; DARWIN-64-DYNAMIC: _ixd00:
1785; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
1786; DARWIN-64-DYNAMIC-NEXT: movl (%rax,%rdi,4), %eax
1787; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
1788; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx,%rdi,4)
1789; DARWIN-64-DYNAMIC-NEXT: ret
1790
1791; DARWIN-64-PIC: _ixd00:
1792; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
1793; DARWIN-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
1794; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
1795; DARWIN-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
1796; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001797}
1798
1799define void @ind01(i64 %i) nounwind {
1800entry:
1801 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1802 store i32* %0, i32** @ptr, align 8
1803 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001804; LINUX-64-STATIC: ind01:
1805; LINUX-64-STATIC: leaq dst(,%rdi,4), %rax
1806; LINUX-64-STATIC: movq %rax, ptr
1807; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001808
1809; LINUX-32-STATIC: ind01:
1810; LINUX-32-STATIC: movl 4(%esp), %eax
1811; LINUX-32-STATIC-NEXT: leal dst(,%eax,4), %eax
1812; LINUX-32-STATIC-NEXT: movl %eax, ptr
1813; LINUX-32-STATIC-NEXT: ret
1814
1815; LINUX-32-PIC: ind01:
1816; LINUX-32-PIC: movl 4(%esp), %eax
1817; LINUX-32-PIC-NEXT: leal dst(,%eax,4), %eax
1818; LINUX-32-PIC-NEXT: movl %eax, ptr
1819; LINUX-32-PIC-NEXT: ret
1820
1821; LINUX-64-PIC: ind01:
1822; LINUX-64-PIC: shlq $2, %rdi
1823; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), %rdi
1824; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rax
1825; LINUX-64-PIC-NEXT: movq %rdi, (%rax)
1826; LINUX-64-PIC-NEXT: ret
1827
1828; DARWIN-32-STATIC: _ind01:
1829; DARWIN-32-STATIC: movl 4(%esp), %eax
1830; DARWIN-32-STATIC-NEXT: leal _dst(,%eax,4), %eax
1831; DARWIN-32-STATIC-NEXT: movl %eax, _ptr
1832; DARWIN-32-STATIC-NEXT: ret
1833
1834; DARWIN-32-DYNAMIC: _ind01:
1835; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
1836; DARWIN-32-DYNAMIC-NEXT: shll $2, %eax
1837; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, %eax
1838; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
1839; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
1840; DARWIN-32-DYNAMIC-NEXT: ret
1841
1842; DARWIN-32-PIC: _ind01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001843; DARWIN-32-PIC: calll L26$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001844; DARWIN-32-PIC-NEXT: L26$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001845; DARWIN-32-PIC-NEXT: popl %eax
1846; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
1847; DARWIN-32-PIC-NEXT: shll $2, %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001848; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L26$pb(%eax), %ecx
1849; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L26$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001850; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
1851; DARWIN-32-PIC-NEXT: ret
1852
1853; DARWIN-64-STATIC: _ind01:
1854; DARWIN-64-STATIC: shlq $2, %rdi
1855; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi
1856; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rax
1857; DARWIN-64-STATIC-NEXT: movq %rdi, (%rax)
1858; DARWIN-64-STATIC-NEXT: ret
1859
1860; DARWIN-64-DYNAMIC: _ind01:
1861; DARWIN-64-DYNAMIC: shlq $2, %rdi
1862; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi
1863; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rax
1864; DARWIN-64-DYNAMIC-NEXT: movq %rdi, (%rax)
1865; DARWIN-64-DYNAMIC-NEXT: ret
1866
1867; DARWIN-64-PIC: _ind01:
1868; DARWIN-64-PIC: shlq $2, %rdi
1869; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi
1870; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rax
1871; DARWIN-64-PIC-NEXT: movq %rdi, (%rax)
1872; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001873}
1874
1875define void @ixd01(i64 %i) nounwind {
1876entry:
1877 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1878 store i32* %0, i32** @ptr, align 8
1879 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001880; LINUX-64-STATIC: ixd01:
1881; LINUX-64-STATIC: leaq xdst(,%rdi,4), %rax
1882; LINUX-64-STATIC: movq %rax, ptr
1883; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001884
1885; LINUX-32-STATIC: ixd01:
1886; LINUX-32-STATIC: movl 4(%esp), %eax
1887; LINUX-32-STATIC-NEXT: leal xdst(,%eax,4), %eax
1888; LINUX-32-STATIC-NEXT: movl %eax, ptr
1889; LINUX-32-STATIC-NEXT: ret
1890
1891; LINUX-32-PIC: ixd01:
1892; LINUX-32-PIC: movl 4(%esp), %eax
1893; LINUX-32-PIC-NEXT: leal xdst(,%eax,4), %eax
1894; LINUX-32-PIC-NEXT: movl %eax, ptr
1895; LINUX-32-PIC-NEXT: ret
1896
1897; LINUX-64-PIC: ixd01:
1898; LINUX-64-PIC: shlq $2, %rdi
1899; LINUX-64-PIC-NEXT: addq xdst@GOTPCREL(%rip), %rdi
1900; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rax
1901; LINUX-64-PIC-NEXT: movq %rdi, (%rax)
1902; LINUX-64-PIC-NEXT: ret
1903
1904; DARWIN-32-STATIC: _ixd01:
1905; DARWIN-32-STATIC: movl 4(%esp), %eax
1906; DARWIN-32-STATIC-NEXT: leal _xdst(,%eax,4), %eax
1907; DARWIN-32-STATIC-NEXT: movl %eax, _ptr
1908; DARWIN-32-STATIC-NEXT: ret
1909
1910; DARWIN-32-DYNAMIC: _ixd01:
1911; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
1912; DARWIN-32-DYNAMIC-NEXT: shll $2, %eax
1913; DARWIN-32-DYNAMIC-NEXT: addl L_xdst$non_lazy_ptr, %eax
1914; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
1915; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
1916; DARWIN-32-DYNAMIC-NEXT: ret
1917
1918; DARWIN-32-PIC: _ixd01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001919; DARWIN-32-PIC: calll L27$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001920; DARWIN-32-PIC-NEXT: L27$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001921; DARWIN-32-PIC-NEXT: popl %eax
1922; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
1923; DARWIN-32-PIC-NEXT: shll $2, %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00001924; DARWIN-32-PIC-NEXT: addl L_xdst$non_lazy_ptr-L27$pb(%eax), %ecx
1925; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L27$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001926; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
1927; DARWIN-32-PIC-NEXT: ret
1928
1929; DARWIN-64-STATIC: _ixd01:
1930; DARWIN-64-STATIC: shlq $2, %rdi
1931; DARWIN-64-STATIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi
1932; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rax
1933; DARWIN-64-STATIC-NEXT: movq %rdi, (%rax)
1934; DARWIN-64-STATIC-NEXT: ret
1935
1936; DARWIN-64-DYNAMIC: _ixd01:
1937; DARWIN-64-DYNAMIC: shlq $2, %rdi
1938; DARWIN-64-DYNAMIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi
1939; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rax
1940; DARWIN-64-DYNAMIC-NEXT: movq %rdi, (%rax)
1941; DARWIN-64-DYNAMIC-NEXT: ret
1942
1943; DARWIN-64-PIC: _ixd01:
1944; DARWIN-64-PIC: shlq $2, %rdi
1945; DARWIN-64-PIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi
1946; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rax
1947; DARWIN-64-PIC-NEXT: movq %rdi, (%rax)
1948; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001949}
1950
1951define void @ind02(i64 %i) nounwind {
1952entry:
1953 %0 = load i32** @ptr, align 8
1954 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1955 %2 = load i32* %1, align 4
1956 %3 = getelementptr i32* %0, i64 %i
1957 store i32 %2, i32* %3, align 4
1958 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001959; LINUX-64-STATIC: ind02:
1960; LINUX-64-STATIC: movl src(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001961; LINUX-64-STATIC: movq ptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00001962; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4)
1963; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001964
1965; LINUX-32-STATIC: ind02:
1966; LINUX-32-STATIC: movl 4(%esp), %eax
1967; LINUX-32-STATIC-NEXT: movl src(,%eax,4), %ecx
1968; LINUX-32-STATIC-NEXT: movl ptr, %edx
1969; LINUX-32-STATIC-NEXT: movl %ecx, (%edx,%eax,4)
1970; LINUX-32-STATIC-NEXT: ret
1971
1972; LINUX-32-PIC: ind02:
1973; LINUX-32-PIC: movl 4(%esp), %eax
1974; LINUX-32-PIC-NEXT: movl src(,%eax,4), %ecx
1975; LINUX-32-PIC-NEXT: movl ptr, %edx
1976; LINUX-32-PIC-NEXT: movl %ecx, (%edx,%eax,4)
1977; LINUX-32-PIC-NEXT: ret
1978
1979; LINUX-64-PIC: ind02:
1980; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
1981; LINUX-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
1982; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
1983; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
1984; LINUX-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
1985; LINUX-64-PIC-NEXT: ret
1986
1987; DARWIN-32-STATIC: _ind02:
1988; DARWIN-32-STATIC: movl 4(%esp), %eax
1989; DARWIN-32-STATIC-NEXT: movl _src(,%eax,4), %ecx
1990; DARWIN-32-STATIC-NEXT: movl _ptr, %edx
1991; DARWIN-32-STATIC-NEXT: movl %ecx, (%edx,%eax,4)
1992; DARWIN-32-STATIC-NEXT: ret
1993
1994; DARWIN-32-DYNAMIC: _ind02:
1995; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
1996; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, %ecx
1997; DARWIN-32-DYNAMIC-NEXT: movl (%ecx,%eax,4), %ecx
1998; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %edx
1999; DARWIN-32-DYNAMIC-NEXT: movl (%edx), %edx
2000; DARWIN-32-DYNAMIC-NEXT: movl %ecx, (%edx,%eax,4)
2001; DARWIN-32-DYNAMIC-NEXT: ret
2002
2003; DARWIN-32-PIC: _ind02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002004; DARWIN-32-PIC: calll L28$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002005; DARWIN-32-PIC-NEXT: L28$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002006; DARWIN-32-PIC-NEXT: popl %eax
2007; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002008; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L28$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002009; DARWIN-32-PIC-NEXT: movl (%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002010; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L28$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002011; DARWIN-32-PIC-NEXT: movl (%eax), %eax
2012; DARWIN-32-PIC-NEXT: movl %edx, (%eax,%ecx,4)
2013; DARWIN-32-PIC-NEXT: ret
2014
2015; DARWIN-64-STATIC: _ind02:
2016; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
2017; DARWIN-64-STATIC-NEXT: movl (%rax,%rdi,4), %eax
2018; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2019; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
2020; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx,%rdi,4)
2021; DARWIN-64-STATIC-NEXT: ret
2022
2023; DARWIN-64-DYNAMIC: _ind02:
2024; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
2025; DARWIN-64-DYNAMIC-NEXT: movl (%rax,%rdi,4), %eax
2026; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2027; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
2028; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx,%rdi,4)
2029; DARWIN-64-DYNAMIC-NEXT: ret
2030
2031; DARWIN-64-PIC: _ind02:
2032; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
2033; DARWIN-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2034; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2035; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
2036; DARWIN-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2037; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002038}
2039
2040define void @ixd02(i64 %i) nounwind {
2041entry:
2042 %0 = load i32** @ptr, align 8
2043 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
2044 %2 = load i32* %1, align 4
2045 %3 = getelementptr i32* %0, i64 %i
2046 store i32 %2, i32* %3, align 4
2047 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002048; LINUX-64-STATIC: ixd02:
2049; LINUX-64-STATIC: movl xsrc(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00002050; LINUX-64-STATIC: movq ptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00002051; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4)
2052; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002053
2054; LINUX-32-STATIC: ixd02:
2055; LINUX-32-STATIC: movl 4(%esp), %eax
2056; LINUX-32-STATIC-NEXT: movl xsrc(,%eax,4), %ecx
2057; LINUX-32-STATIC-NEXT: movl ptr, %edx
2058; LINUX-32-STATIC-NEXT: movl %ecx, (%edx,%eax,4)
2059; LINUX-32-STATIC-NEXT: ret
2060
2061; LINUX-32-PIC: ixd02:
2062; LINUX-32-PIC: movl 4(%esp), %eax
2063; LINUX-32-PIC-NEXT: movl xsrc(,%eax,4), %ecx
2064; LINUX-32-PIC-NEXT: movl ptr, %edx
2065; LINUX-32-PIC-NEXT: movl %ecx, (%edx,%eax,4)
2066; LINUX-32-PIC-NEXT: ret
2067
2068; LINUX-64-PIC: ixd02:
2069; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
2070; LINUX-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2071; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
2072; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
2073; LINUX-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2074; LINUX-64-PIC-NEXT: ret
2075
2076; DARWIN-32-STATIC: _ixd02:
2077; DARWIN-32-STATIC: movl 4(%esp), %eax
2078; DARWIN-32-STATIC-NEXT: movl _xsrc(,%eax,4), %ecx
2079; DARWIN-32-STATIC-NEXT: movl _ptr, %edx
2080; DARWIN-32-STATIC-NEXT: movl %ecx, (%edx,%eax,4)
2081; DARWIN-32-STATIC-NEXT: ret
2082
2083; DARWIN-32-DYNAMIC: _ixd02:
2084; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2085; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, %ecx
2086; DARWIN-32-DYNAMIC-NEXT: movl (%ecx,%eax,4), %ecx
2087; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %edx
2088; DARWIN-32-DYNAMIC-NEXT: movl (%edx), %edx
2089; DARWIN-32-DYNAMIC-NEXT: movl %ecx, (%edx,%eax,4)
2090; DARWIN-32-DYNAMIC-NEXT: ret
2091
2092; DARWIN-32-PIC: _ixd02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002093; DARWIN-32-PIC: calll L29$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002094; DARWIN-32-PIC-NEXT: L29$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002095; DARWIN-32-PIC-NEXT: popl %eax
2096; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002097; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L29$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002098; DARWIN-32-PIC-NEXT: movl (%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002099; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L29$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002100; DARWIN-32-PIC-NEXT: movl (%eax), %eax
2101; DARWIN-32-PIC-NEXT: movl %edx, (%eax,%ecx,4)
2102; DARWIN-32-PIC-NEXT: ret
2103
2104; DARWIN-64-STATIC: _ixd02:
2105; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
2106; DARWIN-64-STATIC-NEXT: movl (%rax,%rdi,4), %eax
2107; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2108; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
2109; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx,%rdi,4)
2110; DARWIN-64-STATIC-NEXT: ret
2111
2112; DARWIN-64-DYNAMIC: _ixd02:
2113; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
2114; DARWIN-64-DYNAMIC-NEXT: movl (%rax,%rdi,4), %eax
2115; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2116; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
2117; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx,%rdi,4)
2118; DARWIN-64-DYNAMIC-NEXT: ret
2119
2120; DARWIN-64-PIC: _ixd02:
2121; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
2122; DARWIN-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2123; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2124; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
2125; DARWIN-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2126; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002127}
2128
2129define void @ind03(i64 %i) nounwind {
2130entry:
2131 %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2132 %1 = load i32* %0, align 4
2133 %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2134 store i32 %1, i32* %2, align 4
2135 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002136; LINUX-64-STATIC: ind03:
2137; LINUX-64-STATIC: movl dsrc(,%rdi,4), %eax
2138; LINUX-64-STATIC: movl %eax, ddst(,%rdi,4)
2139; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002140
2141; LINUX-32-STATIC: ind03:
2142; LINUX-32-STATIC: movl 4(%esp), %eax
2143; LINUX-32-STATIC-NEXT: movl dsrc(,%eax,4), %ecx
2144; LINUX-32-STATIC-NEXT: movl %ecx, ddst(,%eax,4)
2145; LINUX-32-STATIC-NEXT: ret
2146
2147; LINUX-32-PIC: ind03:
2148; LINUX-32-PIC: movl 4(%esp), %eax
2149; LINUX-32-PIC-NEXT: movl dsrc(,%eax,4), %ecx
2150; LINUX-32-PIC-NEXT: movl %ecx, ddst(,%eax,4)
2151; LINUX-32-PIC-NEXT: ret
2152
2153; LINUX-64-PIC: ind03:
2154; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
2155; LINUX-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2156; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), %rcx
2157; LINUX-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2158; LINUX-64-PIC-NEXT: ret
2159
2160; DARWIN-32-STATIC: _ind03:
2161; DARWIN-32-STATIC: movl 4(%esp), %eax
2162; DARWIN-32-STATIC-NEXT: movl _dsrc(,%eax,4), %ecx
2163; DARWIN-32-STATIC-NEXT: movl %ecx, _ddst(,%eax,4)
2164; DARWIN-32-STATIC-NEXT: ret
2165
2166; DARWIN-32-DYNAMIC: _ind03:
2167; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2168; DARWIN-32-DYNAMIC-NEXT: movl _dsrc(,%eax,4), %ecx
2169; DARWIN-32-DYNAMIC-NEXT: movl %ecx, _ddst(,%eax,4)
2170; DARWIN-32-DYNAMIC-NEXT: ret
2171
2172; DARWIN-32-PIC: _ind03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002173; DARWIN-32-PIC: calll L30$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002174; DARWIN-32-PIC-NEXT: L30$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002175; DARWIN-32-PIC-NEXT: popl %eax
2176; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002177; DARWIN-32-PIC-NEXT: movl _dsrc-L30$pb(%eax,%ecx,4), %edx
2178; DARWIN-32-PIC-NEXT: movl %edx, _ddst-L30$pb(%eax,%ecx,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002179; DARWIN-32-PIC-NEXT: ret
2180
2181; DARWIN-64-STATIC: _ind03:
2182; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
2183; DARWIN-64-STATIC-NEXT: movl (%rax,%rdi,4), %eax
2184; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), %rcx
2185; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx,%rdi,4)
2186; DARWIN-64-STATIC-NEXT: ret
2187
2188; DARWIN-64-DYNAMIC: _ind03:
2189; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
2190; DARWIN-64-DYNAMIC-NEXT: movl (%rax,%rdi,4), %eax
2191; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), %rcx
2192; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx,%rdi,4)
2193; DARWIN-64-DYNAMIC-NEXT: ret
2194
2195; DARWIN-64-PIC: _ind03:
2196; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
2197; DARWIN-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2198; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), %rcx
2199; DARWIN-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2200; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002201}
2202
2203define void @ind04(i64 %i) nounwind {
2204entry:
2205 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2206 store i32* %0, i32** @dptr, align 8
2207 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002208; LINUX-64-STATIC: ind04:
2209; LINUX-64-STATIC: leaq ddst(,%rdi,4), %rax
2210; LINUX-64-STATIC: movq %rax, dptr
2211; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002212
2213; LINUX-32-STATIC: ind04:
2214; LINUX-32-STATIC: movl 4(%esp), %eax
2215; LINUX-32-STATIC-NEXT: leal ddst(,%eax,4), %eax
2216; LINUX-32-STATIC-NEXT: movl %eax, dptr
2217; LINUX-32-STATIC-NEXT: ret
2218
2219; LINUX-32-PIC: ind04:
2220; LINUX-32-PIC: movl 4(%esp), %eax
2221; LINUX-32-PIC-NEXT: leal ddst(,%eax,4), %eax
2222; LINUX-32-PIC-NEXT: movl %eax, dptr
2223; LINUX-32-PIC-NEXT: ret
2224
2225; LINUX-64-PIC: ind04:
2226; LINUX-64-PIC: shlq $2, %rdi
2227; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), %rdi
2228; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rax
2229; LINUX-64-PIC-NEXT: movq %rdi, (%rax)
2230; LINUX-64-PIC-NEXT: ret
2231
2232; DARWIN-32-STATIC: _ind04:
2233; DARWIN-32-STATIC: movl 4(%esp), %eax
2234; DARWIN-32-STATIC-NEXT: leal _ddst(,%eax,4), %eax
2235; DARWIN-32-STATIC-NEXT: movl %eax, _dptr
2236; DARWIN-32-STATIC-NEXT: ret
2237
2238; DARWIN-32-DYNAMIC: _ind04:
2239; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2240; DARWIN-32-DYNAMIC-NEXT: leal _ddst(,%eax,4), %eax
2241; DARWIN-32-DYNAMIC-NEXT: movl %eax, _dptr
2242; DARWIN-32-DYNAMIC-NEXT: ret
2243
2244; DARWIN-32-PIC: _ind04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002245; DARWIN-32-PIC: calll L31$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002246; DARWIN-32-PIC-NEXT: L31$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002247; DARWIN-32-PIC-NEXT: popl %eax
2248; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002249; DARWIN-32-PIC-NEXT: leal _ddst-L31$pb(%eax,%ecx,4), %ecx
2250; DARWIN-32-PIC-NEXT: movl %ecx, _dptr-L31$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002251; DARWIN-32-PIC-NEXT: ret
2252
2253; DARWIN-64-STATIC: _ind04:
2254; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
2255; DARWIN-64-STATIC-NEXT: leaq (%rax,%rdi,4), %rax
2256; DARWIN-64-STATIC-NEXT: movq %rax, _dptr(%rip)
2257; DARWIN-64-STATIC-NEXT: ret
2258
2259; DARWIN-64-DYNAMIC: _ind04:
2260; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
2261; DARWIN-64-DYNAMIC-NEXT: leaq (%rax,%rdi,4), %rax
2262; DARWIN-64-DYNAMIC-NEXT: movq %rax, _dptr(%rip)
2263; DARWIN-64-DYNAMIC-NEXT: ret
2264
2265; DARWIN-64-PIC: _ind04:
2266; DARWIN-64-PIC: leaq _ddst(%rip), %rax
2267; DARWIN-64-PIC-NEXT: leaq (%rax,%rdi,4), %rax
2268; DARWIN-64-PIC-NEXT: movq %rax, _dptr(%rip)
2269; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002270}
2271
2272define void @ind05(i64 %i) nounwind {
2273entry:
2274 %0 = load i32** @dptr, align 8
2275 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2276 %2 = load i32* %1, align 4
2277 %3 = getelementptr i32* %0, i64 %i
2278 store i32 %2, i32* %3, align 4
2279 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002280; LINUX-64-STATIC: ind05:
2281; LINUX-64-STATIC: movl dsrc(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00002282; LINUX-64-STATIC: movq dptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00002283; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4)
2284; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002285
2286; LINUX-32-STATIC: ind05:
2287; LINUX-32-STATIC: movl 4(%esp), %eax
2288; LINUX-32-STATIC-NEXT: movl dsrc(,%eax,4), %ecx
2289; LINUX-32-STATIC-NEXT: movl dptr, %edx
2290; LINUX-32-STATIC-NEXT: movl %ecx, (%edx,%eax,4)
2291; LINUX-32-STATIC-NEXT: ret
2292
2293; LINUX-32-PIC: ind05:
2294; LINUX-32-PIC: movl 4(%esp), %eax
2295; LINUX-32-PIC-NEXT: movl dsrc(,%eax,4), %ecx
2296; LINUX-32-PIC-NEXT: movl dptr, %edx
2297; LINUX-32-PIC-NEXT: movl %ecx, (%edx,%eax,4)
2298; LINUX-32-PIC-NEXT: ret
2299
2300; LINUX-64-PIC: ind05:
2301; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
2302; LINUX-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2303; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
2304; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
2305; LINUX-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2306; LINUX-64-PIC-NEXT: ret
2307
2308; DARWIN-32-STATIC: _ind05:
2309; DARWIN-32-STATIC: movl 4(%esp), %eax
2310; DARWIN-32-STATIC-NEXT: movl _dsrc(,%eax,4), %ecx
2311; DARWIN-32-STATIC-NEXT: movl _dptr, %edx
2312; DARWIN-32-STATIC-NEXT: movl %ecx, (%edx,%eax,4)
2313; DARWIN-32-STATIC-NEXT: ret
2314
2315; DARWIN-32-DYNAMIC: _ind05:
2316; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2317; DARWIN-32-DYNAMIC-NEXT: movl _dsrc(,%eax,4), %ecx
2318; DARWIN-32-DYNAMIC-NEXT: movl _dptr, %edx
2319; DARWIN-32-DYNAMIC-NEXT: movl %ecx, (%edx,%eax,4)
2320; DARWIN-32-DYNAMIC-NEXT: ret
2321
2322; DARWIN-32-PIC: _ind05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002323; DARWIN-32-PIC: calll L32$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002324; DARWIN-32-PIC-NEXT: L32$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002325; DARWIN-32-PIC-NEXT: popl %eax
2326; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002327; DARWIN-32-PIC-NEXT: movl _dsrc-L32$pb(%eax,%ecx,4), %edx
2328; DARWIN-32-PIC-NEXT: movl _dptr-L32$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002329; DARWIN-32-PIC-NEXT: movl %edx, (%eax,%ecx,4)
2330; DARWIN-32-PIC-NEXT: ret
2331
2332; DARWIN-64-STATIC: _ind05:
2333; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
2334; DARWIN-64-STATIC-NEXT: movl (%rax,%rdi,4), %eax
2335; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), %rcx
2336; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx,%rdi,4)
2337; DARWIN-64-STATIC-NEXT: ret
2338
2339; DARWIN-64-DYNAMIC: _ind05:
2340; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
2341; DARWIN-64-DYNAMIC-NEXT: movl (%rax,%rdi,4), %eax
2342; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), %rcx
2343; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx,%rdi,4)
2344; DARWIN-64-DYNAMIC-NEXT: ret
2345
2346; DARWIN-64-PIC: _ind05:
2347; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
2348; DARWIN-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2349; DARWIN-64-PIC-NEXT: movq _dptr(%rip), %rcx
2350; DARWIN-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2351; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002352}
2353
2354define void @ind06(i64 %i) nounwind {
2355entry:
2356 %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2357 %1 = load i32* %0, align 4
2358 %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2359 store i32 %1, i32* %2, align 4
2360 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002361; LINUX-64-STATIC: ind06:
2362; LINUX-64-STATIC: movl lsrc(,%rdi,4), %eax
2363; LINUX-64-STATIC: movl %eax, ldst(,%rdi,4)
2364; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002365
2366; LINUX-32-STATIC: ind06:
2367; LINUX-32-STATIC: movl 4(%esp), %eax
2368; LINUX-32-STATIC-NEXT: movl lsrc(,%eax,4), %ecx
2369; LINUX-32-STATIC-NEXT: movl %ecx, ldst(,%eax,4)
2370; LINUX-32-STATIC-NEXT: ret
2371
2372; LINUX-32-PIC: ind06:
2373; LINUX-32-PIC: movl 4(%esp), %eax
2374; LINUX-32-PIC-NEXT: movl lsrc(,%eax,4), %ecx
2375; LINUX-32-PIC-NEXT: movl %ecx, ldst(,%eax,4)
2376; LINUX-32-PIC-NEXT: ret
2377
2378; LINUX-64-PIC: ind06:
2379; LINUX-64-PIC: leaq lsrc(%rip), %rax
2380; LINUX-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2381; LINUX-64-PIC-NEXT: leaq ldst(%rip), %rcx
2382; LINUX-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2383; LINUX-64-PIC-NEXT: ret
2384
2385; DARWIN-32-STATIC: _ind06:
2386; DARWIN-32-STATIC: movl 4(%esp), %eax
2387; DARWIN-32-STATIC-NEXT: movl _lsrc(,%eax,4), %ecx
2388; DARWIN-32-STATIC-NEXT: movl %ecx, _ldst(,%eax,4)
2389; DARWIN-32-STATIC-NEXT: ret
2390
2391; DARWIN-32-DYNAMIC: _ind06:
2392; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2393; DARWIN-32-DYNAMIC-NEXT: movl _lsrc(,%eax,4), %ecx
2394; DARWIN-32-DYNAMIC-NEXT: movl %ecx, _ldst(,%eax,4)
2395; DARWIN-32-DYNAMIC-NEXT: ret
2396
2397; DARWIN-32-PIC: _ind06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002398; DARWIN-32-PIC: calll L33$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002399; DARWIN-32-PIC-NEXT: L33$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002400; DARWIN-32-PIC-NEXT: popl %eax
2401; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002402; DARWIN-32-PIC-NEXT: movl _lsrc-L33$pb(%eax,%ecx,4), %edx
2403; DARWIN-32-PIC-NEXT: movl %edx, _ldst-L33$pb(%eax,%ecx,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002404; DARWIN-32-PIC-NEXT: ret
2405
2406; DARWIN-64-STATIC: _ind06:
2407; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
2408; DARWIN-64-STATIC-NEXT: movl (%rax,%rdi,4), %eax
2409; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), %rcx
2410; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx,%rdi,4)
2411; DARWIN-64-STATIC-NEXT: ret
2412
2413; DARWIN-64-DYNAMIC: _ind06:
2414; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
2415; DARWIN-64-DYNAMIC-NEXT: movl (%rax,%rdi,4), %eax
2416; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), %rcx
2417; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx,%rdi,4)
2418; DARWIN-64-DYNAMIC-NEXT: ret
2419
2420; DARWIN-64-PIC: _ind06:
2421; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
2422; DARWIN-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2423; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), %rcx
2424; DARWIN-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2425; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002426}
2427
2428define void @ind07(i64 %i) nounwind {
2429entry:
2430 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2431 store i32* %0, i32** @lptr, align 8
2432 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002433; LINUX-64-STATIC: ind07:
2434; LINUX-64-STATIC: leaq ldst(,%rdi,4), %rax
2435; LINUX-64-STATIC: movq %rax, lptr
2436; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002437
2438; LINUX-32-STATIC: ind07:
2439; LINUX-32-STATIC: movl 4(%esp), %eax
2440; LINUX-32-STATIC-NEXT: leal ldst(,%eax,4), %eax
2441; LINUX-32-STATIC-NEXT: movl %eax, lptr
2442; LINUX-32-STATIC-NEXT: ret
2443
2444; LINUX-32-PIC: ind07:
2445; LINUX-32-PIC: movl 4(%esp), %eax
2446; LINUX-32-PIC-NEXT: leal ldst(,%eax,4), %eax
2447; LINUX-32-PIC-NEXT: movl %eax, lptr
2448; LINUX-32-PIC-NEXT: ret
2449
2450; LINUX-64-PIC: ind07:
2451; LINUX-64-PIC: leaq ldst(%rip), %rax
2452; LINUX-64-PIC-NEXT: leaq (%rax,%rdi,4), %rax
2453; LINUX-64-PIC-NEXT: movq %rax, lptr(%rip)
2454; LINUX-64-PIC-NEXT: ret
2455
2456; DARWIN-32-STATIC: _ind07:
2457; DARWIN-32-STATIC: movl 4(%esp), %eax
2458; DARWIN-32-STATIC-NEXT: leal _ldst(,%eax,4), %eax
2459; DARWIN-32-STATIC-NEXT: movl %eax, _lptr
2460; DARWIN-32-STATIC-NEXT: ret
2461
2462; DARWIN-32-DYNAMIC: _ind07:
2463; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2464; DARWIN-32-DYNAMIC-NEXT: leal _ldst(,%eax,4), %eax
2465; DARWIN-32-DYNAMIC-NEXT: movl %eax, _lptr
2466; DARWIN-32-DYNAMIC-NEXT: ret
2467
2468; DARWIN-32-PIC: _ind07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002469; DARWIN-32-PIC: calll L34$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002470; DARWIN-32-PIC-NEXT: L34$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002471; DARWIN-32-PIC-NEXT: popl %eax
2472; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002473; DARWIN-32-PIC-NEXT: leal _ldst-L34$pb(%eax,%ecx,4), %ecx
2474; DARWIN-32-PIC-NEXT: movl %ecx, _lptr-L34$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002475; DARWIN-32-PIC-NEXT: ret
2476
2477; DARWIN-64-STATIC: _ind07:
2478; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
2479; DARWIN-64-STATIC-NEXT: leaq (%rax,%rdi,4), %rax
2480; DARWIN-64-STATIC-NEXT: movq %rax, _lptr(%rip)
2481; DARWIN-64-STATIC-NEXT: ret
2482
2483; DARWIN-64-DYNAMIC: _ind07:
2484; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
2485; DARWIN-64-DYNAMIC-NEXT: leaq (%rax,%rdi,4), %rax
2486; DARWIN-64-DYNAMIC-NEXT: movq %rax, _lptr(%rip)
2487; DARWIN-64-DYNAMIC-NEXT: ret
2488
2489; DARWIN-64-PIC: _ind07:
2490; DARWIN-64-PIC: leaq _ldst(%rip), %rax
2491; DARWIN-64-PIC-NEXT: leaq (%rax,%rdi,4), %rax
2492; DARWIN-64-PIC-NEXT: movq %rax, _lptr(%rip)
2493; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002494}
2495
2496define void @ind08(i64 %i) nounwind {
2497entry:
2498 %0 = load i32** @lptr, align 8
2499 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2500 %2 = load i32* %1, align 4
2501 %3 = getelementptr i32* %0, i64 %i
2502 store i32 %2, i32* %3, align 4
2503 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002504; LINUX-64-STATIC: ind08:
2505; LINUX-64-STATIC: movl lsrc(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00002506; LINUX-64-STATIC: movq lptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00002507; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4)
2508; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002509
2510; LINUX-32-STATIC: ind08:
2511; LINUX-32-STATIC: movl 4(%esp), %eax
2512; LINUX-32-STATIC-NEXT: movl lsrc(,%eax,4), %ecx
2513; LINUX-32-STATIC-NEXT: movl lptr, %edx
2514; LINUX-32-STATIC-NEXT: movl %ecx, (%edx,%eax,4)
2515; LINUX-32-STATIC-NEXT: ret
2516
2517; LINUX-32-PIC: ind08:
2518; LINUX-32-PIC: movl 4(%esp), %eax
2519; LINUX-32-PIC-NEXT: movl lsrc(,%eax,4), %ecx
2520; LINUX-32-PIC-NEXT: movl lptr, %edx
2521; LINUX-32-PIC-NEXT: movl %ecx, (%edx,%eax,4)
2522; LINUX-32-PIC-NEXT: ret
2523
2524; LINUX-64-PIC: ind08:
2525; LINUX-64-PIC: leaq lsrc(%rip), %rax
2526; LINUX-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2527; LINUX-64-PIC-NEXT: movq lptr(%rip), %rcx
2528; LINUX-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2529; LINUX-64-PIC-NEXT: ret
2530
2531; DARWIN-32-STATIC: _ind08:
2532; DARWIN-32-STATIC: movl 4(%esp), %eax
2533; DARWIN-32-STATIC-NEXT: movl _lsrc(,%eax,4), %ecx
2534; DARWIN-32-STATIC-NEXT: movl _lptr, %edx
2535; DARWIN-32-STATIC-NEXT: movl %ecx, (%edx,%eax,4)
2536; DARWIN-32-STATIC-NEXT: ret
2537
2538; DARWIN-32-DYNAMIC: _ind08:
2539; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2540; DARWIN-32-DYNAMIC-NEXT: movl _lsrc(,%eax,4), %ecx
2541; DARWIN-32-DYNAMIC-NEXT: movl _lptr, %edx
2542; DARWIN-32-DYNAMIC-NEXT: movl %ecx, (%edx,%eax,4)
2543; DARWIN-32-DYNAMIC-NEXT: ret
2544
2545; DARWIN-32-PIC: _ind08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002546; DARWIN-32-PIC: calll L35$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002547; DARWIN-32-PIC-NEXT: L35$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002548; DARWIN-32-PIC-NEXT: popl %eax
2549; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002550; DARWIN-32-PIC-NEXT: movl _lsrc-L35$pb(%eax,%ecx,4), %edx
2551; DARWIN-32-PIC-NEXT: movl _lptr-L35$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002552; DARWIN-32-PIC-NEXT: movl %edx, (%eax,%ecx,4)
2553; DARWIN-32-PIC-NEXT: ret
2554
2555; DARWIN-64-STATIC: _ind08:
2556; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
2557; DARWIN-64-STATIC-NEXT: movl (%rax,%rdi,4), %eax
2558; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), %rcx
2559; DARWIN-64-STATIC-NEXT: movl %eax, (%rcx,%rdi,4)
2560; DARWIN-64-STATIC-NEXT: ret
2561
2562; DARWIN-64-DYNAMIC: _ind08:
2563; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
2564; DARWIN-64-DYNAMIC-NEXT: movl (%rax,%rdi,4), %eax
2565; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), %rcx
2566; DARWIN-64-DYNAMIC-NEXT: movl %eax, (%rcx,%rdi,4)
2567; DARWIN-64-DYNAMIC-NEXT: ret
2568
2569; DARWIN-64-PIC: _ind08:
2570; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
2571; DARWIN-64-PIC-NEXT: movl (%rax,%rdi,4), %eax
2572; DARWIN-64-PIC-NEXT: movq _lptr(%rip), %rcx
2573; DARWIN-64-PIC-NEXT: movl %eax, (%rcx,%rdi,4)
2574; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002575}
2576
2577define void @off00(i64 %i) nounwind {
2578entry:
2579 %0 = add i64 %i, 16
2580 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
2581 %2 = load i32* %1, align 4
2582 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
2583 store i32 %2, i32* %3, align 4
2584 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002585; LINUX-64-STATIC: off00:
2586; LINUX-64-STATIC: movl src+64(,%rdi,4), %eax
2587; LINUX-64-STATIC: movl %eax, dst+64(,%rdi,4)
2588; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002589
2590; LINUX-32-STATIC: off00:
2591; LINUX-32-STATIC: movl 4(%esp), %eax
2592; LINUX-32-STATIC-NEXT: movl src+64(,%eax,4), %ecx
2593; LINUX-32-STATIC-NEXT: movl %ecx, dst+64(,%eax,4)
2594; LINUX-32-STATIC-NEXT: ret
2595
2596; LINUX-32-PIC: off00:
2597; LINUX-32-PIC: movl 4(%esp), %eax
2598; LINUX-32-PIC-NEXT: movl src+64(,%eax,4), %ecx
2599; LINUX-32-PIC-NEXT: movl %ecx, dst+64(,%eax,4)
2600; LINUX-32-PIC-NEXT: ret
2601
2602; LINUX-64-PIC: off00:
2603; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
2604; LINUX-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
2605; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), %rcx
2606; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2607; LINUX-64-PIC-NEXT: ret
2608
2609; DARWIN-32-STATIC: _off00:
2610; DARWIN-32-STATIC: movl 4(%esp), %eax
2611; DARWIN-32-STATIC-NEXT: movl _src+64(,%eax,4), %ecx
2612; DARWIN-32-STATIC-NEXT: movl %ecx, _dst+64(,%eax,4)
2613; DARWIN-32-STATIC-NEXT: ret
2614
2615; DARWIN-32-DYNAMIC: _off00:
2616; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2617; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, %ecx
2618; DARWIN-32-DYNAMIC-NEXT: movl 64(%ecx,%eax,4), %ecx
2619; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %edx
2620; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 64(%edx,%eax,4)
2621; DARWIN-32-DYNAMIC-NEXT: ret
2622
2623; DARWIN-32-PIC: _off00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002624; DARWIN-32-PIC: calll L36$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002625; DARWIN-32-PIC-NEXT: L36$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002626; DARWIN-32-PIC-NEXT: popl %eax
2627; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002628; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L36$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002629; DARWIN-32-PIC-NEXT: movl 64(%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002630; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L36$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002631; DARWIN-32-PIC-NEXT: movl %edx, 64(%eax,%ecx,4)
2632; DARWIN-32-PIC-NEXT: ret
2633
2634; DARWIN-64-STATIC: _off00:
2635; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
2636; DARWIN-64-STATIC-NEXT: movl 64(%rax,%rdi,4), %eax
2637; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
2638; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2639; DARWIN-64-STATIC-NEXT: ret
2640
2641; DARWIN-64-DYNAMIC: _off00:
2642; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
2643; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax,%rdi,4), %eax
2644; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
2645; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2646; DARWIN-64-DYNAMIC-NEXT: ret
2647
2648; DARWIN-64-PIC: _off00:
2649; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
2650; DARWIN-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
2651; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
2652; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2653; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002654}
2655
2656define void @oxf00(i64 %i) nounwind {
2657entry:
2658 %0 = add i64 %i, 16
2659 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
2660 %2 = load i32* %1, align 4
2661 %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
2662 store i32 %2, i32* %3, align 4
2663 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002664; LINUX-64-STATIC: oxf00:
2665; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), %eax
2666; LINUX-64-STATIC: movl %eax, xdst+64(,%rdi,4)
2667; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002668
2669; LINUX-32-STATIC: oxf00:
2670; LINUX-32-STATIC: movl 4(%esp), %eax
2671; LINUX-32-STATIC-NEXT: movl xsrc+64(,%eax,4), %ecx
2672; LINUX-32-STATIC-NEXT: movl %ecx, xdst+64(,%eax,4)
2673; LINUX-32-STATIC-NEXT: ret
2674
2675; LINUX-32-PIC: oxf00:
2676; LINUX-32-PIC: movl 4(%esp), %eax
2677; LINUX-32-PIC-NEXT: movl xsrc+64(,%eax,4), %ecx
2678; LINUX-32-PIC-NEXT: movl %ecx, xdst+64(,%eax,4)
2679; LINUX-32-PIC-NEXT: ret
2680
2681; LINUX-64-PIC: oxf00:
2682; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
2683; LINUX-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
2684; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), %rcx
2685; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2686; LINUX-64-PIC-NEXT: ret
2687
2688; DARWIN-32-STATIC: _oxf00:
2689; DARWIN-32-STATIC: movl 4(%esp), %eax
2690; DARWIN-32-STATIC-NEXT: movl _xsrc+64(,%eax,4), %ecx
2691; DARWIN-32-STATIC-NEXT: movl %ecx, _xdst+64(,%eax,4)
2692; DARWIN-32-STATIC-NEXT: ret
2693
2694; DARWIN-32-DYNAMIC: _oxf00:
2695; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2696; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, %ecx
2697; DARWIN-32-DYNAMIC-NEXT: movl 64(%ecx,%eax,4), %ecx
2698; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, %edx
2699; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 64(%edx,%eax,4)
2700; DARWIN-32-DYNAMIC-NEXT: ret
2701
2702; DARWIN-32-PIC: _oxf00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002703; DARWIN-32-PIC: calll L37$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002704; DARWIN-32-PIC-NEXT: L37$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002705; DARWIN-32-PIC-NEXT: popl %eax
2706; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002707; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L37$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002708; DARWIN-32-PIC-NEXT: movl 64(%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002709; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L37$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002710; DARWIN-32-PIC-NEXT: movl %edx, 64(%eax,%ecx,4)
2711; DARWIN-32-PIC-NEXT: ret
2712
2713; DARWIN-64-STATIC: _oxf00:
2714; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
2715; DARWIN-64-STATIC-NEXT: movl 64(%rax,%rdi,4), %eax
2716; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
2717; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2718; DARWIN-64-STATIC-NEXT: ret
2719
2720; DARWIN-64-DYNAMIC: _oxf00:
2721; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
2722; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax,%rdi,4), %eax
2723; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
2724; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2725; DARWIN-64-DYNAMIC-NEXT: ret
2726
2727; DARWIN-64-PIC: _oxf00:
2728; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
2729; DARWIN-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
2730; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), %rcx
2731; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2732; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002733}
2734
2735define void @off01(i64 %i) nounwind {
2736entry:
2737 %.sum = add i64 %i, 16
2738 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
2739 store i32* %0, i32** @ptr, align 8
2740 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002741; LINUX-64-STATIC: off01:
2742; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax
2743; LINUX-64-STATIC: movq %rax, ptr
2744; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002745
2746; LINUX-32-STATIC: off01:
2747; LINUX-32-STATIC: movl 4(%esp), %eax
2748; LINUX-32-STATIC-NEXT: leal dst+64(,%eax,4), %eax
2749; LINUX-32-STATIC-NEXT: movl %eax, ptr
2750; LINUX-32-STATIC-NEXT: ret
2751
2752; LINUX-32-PIC: off01:
2753; LINUX-32-PIC: movl 4(%esp), %eax
2754; LINUX-32-PIC-NEXT: leal dst+64(,%eax,4), %eax
2755; LINUX-32-PIC-NEXT: movl %eax, ptr
2756; LINUX-32-PIC-NEXT: ret
2757
2758; LINUX-64-PIC: off01:
2759; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
2760; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
2761; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
2762; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
2763; LINUX-64-PIC-NEXT: ret
2764
2765; DARWIN-32-STATIC: _off01:
2766; DARWIN-32-STATIC: movl 4(%esp), %eax
2767; DARWIN-32-STATIC-NEXT: leal _dst+64(,%eax,4), %eax
2768; DARWIN-32-STATIC-NEXT: movl %eax, _ptr
2769; DARWIN-32-STATIC-NEXT: ret
2770
2771; DARWIN-32-DYNAMIC: _off01:
2772; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2773; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %ecx
2774; DARWIN-32-DYNAMIC-NEXT: leal 64(%ecx,%eax,4), %eax
2775; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
2776; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
2777; DARWIN-32-DYNAMIC-NEXT: ret
2778
2779; DARWIN-32-PIC: _off01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002780; DARWIN-32-PIC: calll L38$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002781; DARWIN-32-PIC-NEXT: L38$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002782; DARWIN-32-PIC-NEXT: popl %eax
2783; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002784; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L38$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002785; DARWIN-32-PIC-NEXT: leal 64(%edx,%ecx,4), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002786; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L38$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002787; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
2788; DARWIN-32-PIC-NEXT: ret
2789
2790; DARWIN-64-STATIC: _off01:
2791; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
2792; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
2793; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2794; DARWIN-64-STATIC-NEXT: movq %rax, (%rcx)
2795; DARWIN-64-STATIC-NEXT: ret
2796
2797; DARWIN-64-DYNAMIC: _off01:
2798; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
2799; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
2800; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2801; DARWIN-64-DYNAMIC-NEXT: movq %rax, (%rcx)
2802; DARWIN-64-DYNAMIC-NEXT: ret
2803
2804; DARWIN-64-PIC: _off01:
2805; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
2806; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
2807; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2808; DARWIN-64-PIC-NEXT: movq %rax, (%rcx)
2809; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002810}
2811
2812define void @oxf01(i64 %i) nounwind {
2813entry:
2814 %.sum = add i64 %i, 16
2815 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum
2816 store i32* %0, i32** @ptr, align 8
2817 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002818; LINUX-64-STATIC: oxf01:
2819; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax
2820; LINUX-64-STATIC: movq %rax, ptr
2821; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002822
2823; LINUX-32-STATIC: oxf01:
2824; LINUX-32-STATIC: movl 4(%esp), %eax
2825; LINUX-32-STATIC-NEXT: leal xdst+64(,%eax,4), %eax
2826; LINUX-32-STATIC-NEXT: movl %eax, ptr
2827; LINUX-32-STATIC-NEXT: ret
2828
2829; LINUX-32-PIC: oxf01:
2830; LINUX-32-PIC: movl 4(%esp), %eax
2831; LINUX-32-PIC-NEXT: leal xdst+64(,%eax,4), %eax
2832; LINUX-32-PIC-NEXT: movl %eax, ptr
2833; LINUX-32-PIC-NEXT: ret
2834
2835; LINUX-64-PIC: oxf01:
2836; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
2837; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
2838; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
2839; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
2840; LINUX-64-PIC-NEXT: ret
2841
2842; DARWIN-32-STATIC: _oxf01:
2843; DARWIN-32-STATIC: movl 4(%esp), %eax
2844; DARWIN-32-STATIC-NEXT: leal _xdst+64(,%eax,4), %eax
2845; DARWIN-32-STATIC-NEXT: movl %eax, _ptr
2846; DARWIN-32-STATIC-NEXT: ret
2847
2848; DARWIN-32-DYNAMIC: _oxf01:
2849; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2850; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, %ecx
2851; DARWIN-32-DYNAMIC-NEXT: leal 64(%ecx,%eax,4), %eax
2852; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
2853; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
2854; DARWIN-32-DYNAMIC-NEXT: ret
2855
2856; DARWIN-32-PIC: _oxf01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002857; DARWIN-32-PIC: calll L39$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002858; DARWIN-32-PIC-NEXT: L39$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002859; DARWIN-32-PIC-NEXT: popl %eax
2860; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002861; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L39$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002862; DARWIN-32-PIC-NEXT: leal 64(%edx,%ecx,4), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002863; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L39$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002864; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
2865; DARWIN-32-PIC-NEXT: ret
2866
2867; DARWIN-64-STATIC: _oxf01:
2868; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
2869; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
2870; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2871; DARWIN-64-STATIC-NEXT: movq %rax, (%rcx)
2872; DARWIN-64-STATIC-NEXT: ret
2873
2874; DARWIN-64-DYNAMIC: _oxf01:
2875; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
2876; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
2877; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2878; DARWIN-64-DYNAMIC-NEXT: movq %rax, (%rcx)
2879; DARWIN-64-DYNAMIC-NEXT: ret
2880
2881; DARWIN-64-PIC: _oxf01:
2882; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
2883; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
2884; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2885; DARWIN-64-PIC-NEXT: movq %rax, (%rcx)
2886; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002887}
2888
2889define void @off02(i64 %i) nounwind {
2890entry:
2891 %0 = load i32** @ptr, align 8
2892 %1 = add i64 %i, 16
2893 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
2894 %3 = load i32* %2, align 4
2895 %4 = getelementptr i32* %0, i64 %1
2896 store i32 %3, i32* %4, align 4
2897 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002898; LINUX-64-STATIC: off02:
2899; LINUX-64-STATIC: movl src+64(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00002900; LINUX-64-STATIC: movq ptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00002901; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4)
2902; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002903
2904; LINUX-32-STATIC: off02:
2905; LINUX-32-STATIC: movl 4(%esp), %eax
2906; LINUX-32-STATIC-NEXT: movl src+64(,%eax,4), %ecx
2907; LINUX-32-STATIC-NEXT: movl ptr, %edx
2908; LINUX-32-STATIC-NEXT: movl %ecx, 64(%edx,%eax,4)
2909; LINUX-32-STATIC-NEXT: ret
2910
2911; LINUX-32-PIC: off02:
2912; LINUX-32-PIC: movl 4(%esp), %eax
2913; LINUX-32-PIC-NEXT: movl src+64(,%eax,4), %ecx
2914; LINUX-32-PIC-NEXT: movl ptr, %edx
2915; LINUX-32-PIC-NEXT: movl %ecx, 64(%edx,%eax,4)
2916; LINUX-32-PIC-NEXT: ret
2917
2918; LINUX-64-PIC: off02:
2919; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
2920; LINUX-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
2921; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
2922; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
2923; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2924; LINUX-64-PIC-NEXT: ret
2925
2926; DARWIN-32-STATIC: _off02:
2927; DARWIN-32-STATIC: movl 4(%esp), %eax
2928; DARWIN-32-STATIC-NEXT: movl _src+64(,%eax,4), %ecx
2929; DARWIN-32-STATIC-NEXT: movl _ptr, %edx
2930; DARWIN-32-STATIC-NEXT: movl %ecx, 64(%edx,%eax,4)
2931; DARWIN-32-STATIC-NEXT: ret
2932
2933; DARWIN-32-DYNAMIC: _off02:
2934; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
2935; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, %ecx
2936; DARWIN-32-DYNAMIC-NEXT: movl 64(%ecx,%eax,4), %ecx
2937; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %edx
2938; DARWIN-32-DYNAMIC-NEXT: movl (%edx), %edx
2939; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 64(%edx,%eax,4)
2940; DARWIN-32-DYNAMIC-NEXT: ret
2941
2942; DARWIN-32-PIC: _off02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002943; DARWIN-32-PIC: calll L40$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002944; DARWIN-32-PIC-NEXT: L40$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002945; DARWIN-32-PIC-NEXT: popl %eax
2946; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002947; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L40$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002948; DARWIN-32-PIC-NEXT: movl 64(%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00002949; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L40$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002950; DARWIN-32-PIC-NEXT: movl (%eax), %eax
2951; DARWIN-32-PIC-NEXT: movl %edx, 64(%eax,%ecx,4)
2952; DARWIN-32-PIC-NEXT: ret
2953
2954; DARWIN-64-STATIC: _off02:
2955; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
2956; DARWIN-64-STATIC-NEXT: movl 64(%rax,%rdi,4), %eax
2957; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2958; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
2959; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2960; DARWIN-64-STATIC-NEXT: ret
2961
2962; DARWIN-64-DYNAMIC: _off02:
2963; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
2964; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax,%rdi,4), %eax
2965; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2966; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
2967; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2968; DARWIN-64-DYNAMIC-NEXT: ret
2969
2970; DARWIN-64-PIC: _off02:
2971; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
2972; DARWIN-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
2973; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
2974; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
2975; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
2976; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002977}
2978
2979define void @oxf02(i64 %i) nounwind {
2980entry:
2981 %0 = load i32** @ptr, align 8
2982 %1 = add i64 %i, 16
2983 %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1
2984 %3 = load i32* %2, align 4
2985 %4 = getelementptr i32* %0, i64 %1
2986 store i32 %3, i32* %4, align 4
2987 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002988; LINUX-64-STATIC: oxf02:
2989; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00002990; LINUX-64-STATIC: movq ptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00002991; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4)
2992; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002993
2994; LINUX-32-STATIC: oxf02:
2995; LINUX-32-STATIC: movl 4(%esp), %eax
2996; LINUX-32-STATIC-NEXT: movl xsrc+64(,%eax,4), %ecx
2997; LINUX-32-STATIC-NEXT: movl ptr, %edx
2998; LINUX-32-STATIC-NEXT: movl %ecx, 64(%edx,%eax,4)
2999; LINUX-32-STATIC-NEXT: ret
3000
3001; LINUX-32-PIC: oxf02:
3002; LINUX-32-PIC: movl 4(%esp), %eax
3003; LINUX-32-PIC-NEXT: movl xsrc+64(,%eax,4), %ecx
3004; LINUX-32-PIC-NEXT: movl ptr, %edx
3005; LINUX-32-PIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3006; LINUX-32-PIC-NEXT: ret
3007
3008; LINUX-64-PIC: oxf02:
3009; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
3010; LINUX-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3011; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
3012; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
3013; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3014; LINUX-64-PIC-NEXT: ret
3015
3016; DARWIN-32-STATIC: _oxf02:
3017; DARWIN-32-STATIC: movl 4(%esp), %eax
3018; DARWIN-32-STATIC-NEXT: movl _xsrc+64(,%eax,4), %ecx
3019; DARWIN-32-STATIC-NEXT: movl _ptr, %edx
3020; DARWIN-32-STATIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3021; DARWIN-32-STATIC-NEXT: ret
3022
3023; DARWIN-32-DYNAMIC: _oxf02:
3024; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
3025; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, %ecx
3026; DARWIN-32-DYNAMIC-NEXT: movl 64(%ecx,%eax,4), %ecx
3027; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %edx
3028; DARWIN-32-DYNAMIC-NEXT: movl (%edx), %edx
3029; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3030; DARWIN-32-DYNAMIC-NEXT: ret
3031
3032; DARWIN-32-PIC: _oxf02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003033; DARWIN-32-PIC: calll L41$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003034; DARWIN-32-PIC-NEXT: L41$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003035; DARWIN-32-PIC-NEXT: popl %eax
3036; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003037; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L41$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003038; DARWIN-32-PIC-NEXT: movl 64(%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003039; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L41$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003040; DARWIN-32-PIC-NEXT: movl (%eax), %eax
3041; DARWIN-32-PIC-NEXT: movl %edx, 64(%eax,%ecx,4)
3042; DARWIN-32-PIC-NEXT: ret
3043
3044; DARWIN-64-STATIC: _oxf02:
3045; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
3046; DARWIN-64-STATIC-NEXT: movl 64(%rax,%rdi,4), %eax
3047; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3048; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
3049; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3050; DARWIN-64-STATIC-NEXT: ret
3051
3052; DARWIN-64-DYNAMIC: _oxf02:
3053; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
3054; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax,%rdi,4), %eax
3055; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3056; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
3057; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3058; DARWIN-64-DYNAMIC-NEXT: ret
3059
3060; DARWIN-64-PIC: _oxf02:
3061; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
3062; DARWIN-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3063; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3064; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
3065; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3066; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003067}
3068
3069define void @off03(i64 %i) nounwind {
3070entry:
3071 %0 = add i64 %i, 16
3072 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
3073 %2 = load i32* %1, align 4
3074 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
3075 store i32 %2, i32* %3, align 4
3076 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003077; LINUX-64-STATIC: off03:
3078; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), %eax
3079; LINUX-64-STATIC: movl %eax, ddst+64(,%rdi,4)
3080; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003081
3082; LINUX-32-STATIC: off03:
3083; LINUX-32-STATIC: movl 4(%esp), %eax
3084; LINUX-32-STATIC-NEXT: movl dsrc+64(,%eax,4), %ecx
3085; LINUX-32-STATIC-NEXT: movl %ecx, ddst+64(,%eax,4)
3086; LINUX-32-STATIC-NEXT: ret
3087
3088; LINUX-32-PIC: off03:
3089; LINUX-32-PIC: movl 4(%esp), %eax
3090; LINUX-32-PIC-NEXT: movl dsrc+64(,%eax,4), %ecx
3091; LINUX-32-PIC-NEXT: movl %ecx, ddst+64(,%eax,4)
3092; LINUX-32-PIC-NEXT: ret
3093
3094; LINUX-64-PIC: off03:
3095; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
3096; LINUX-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3097; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), %rcx
3098; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3099; LINUX-64-PIC-NEXT: ret
3100
3101; DARWIN-32-STATIC: _off03:
3102; DARWIN-32-STATIC: movl 4(%esp), %eax
3103; DARWIN-32-STATIC-NEXT: movl _dsrc+64(,%eax,4), %ecx
3104; DARWIN-32-STATIC-NEXT: movl %ecx, _ddst+64(,%eax,4)
3105; DARWIN-32-STATIC-NEXT: ret
3106
3107; DARWIN-32-DYNAMIC: _off03:
3108; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
3109; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+64(,%eax,4), %ecx
3110; DARWIN-32-DYNAMIC-NEXT: movl %ecx, _ddst+64(,%eax,4)
3111; DARWIN-32-DYNAMIC-NEXT: ret
3112
3113; DARWIN-32-PIC: _off03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003114; DARWIN-32-PIC: calll L42$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003115; DARWIN-32-PIC-NEXT: L42$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003116; DARWIN-32-PIC-NEXT: popl %eax
3117; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003118; DARWIN-32-PIC-NEXT: movl (_dsrc-L42$pb)+64(%eax,%ecx,4), %edx
3119; DARWIN-32-PIC-NEXT: movl %edx, (_ddst-L42$pb)+64(%eax,%ecx,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003120; DARWIN-32-PIC-NEXT: ret
3121
3122; DARWIN-64-STATIC: _off03:
3123; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
3124; DARWIN-64-STATIC-NEXT: movl 64(%rax,%rdi,4), %eax
3125; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), %rcx
3126; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3127; DARWIN-64-STATIC-NEXT: ret
3128
3129; DARWIN-64-DYNAMIC: _off03:
3130; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
3131; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax,%rdi,4), %eax
3132; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), %rcx
3133; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3134; DARWIN-64-DYNAMIC-NEXT: ret
3135
3136; DARWIN-64-PIC: _off03:
3137; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
3138; DARWIN-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3139; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), %rcx
3140; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3141; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003142}
3143
3144define void @off04(i64 %i) nounwind {
3145entry:
3146 %.sum = add i64 %i, 16
3147 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
3148 store i32* %0, i32** @dptr, align 8
3149 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003150; LINUX-64-STATIC: off04:
3151; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax
3152; LINUX-64-STATIC: movq %rax, dptr
3153; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003154
3155; LINUX-32-STATIC: off04:
3156; LINUX-32-STATIC: movl 4(%esp), %eax
3157; LINUX-32-STATIC-NEXT: leal ddst+64(,%eax,4), %eax
3158; LINUX-32-STATIC-NEXT: movl %eax, dptr
3159; LINUX-32-STATIC-NEXT: ret
3160
3161; LINUX-32-PIC: off04:
3162; LINUX-32-PIC: movl 4(%esp), %eax
3163; LINUX-32-PIC-NEXT: leal ddst+64(,%eax,4), %eax
3164; LINUX-32-PIC-NEXT: movl %eax, dptr
3165; LINUX-32-PIC-NEXT: ret
3166
3167; LINUX-64-PIC: off04:
3168; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
3169; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
3170; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
3171; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
3172; LINUX-64-PIC-NEXT: ret
3173
3174; DARWIN-32-STATIC: _off04:
3175; DARWIN-32-STATIC: movl 4(%esp), %eax
3176; DARWIN-32-STATIC-NEXT: leal _ddst+64(,%eax,4), %eax
3177; DARWIN-32-STATIC-NEXT: movl %eax, _dptr
3178; DARWIN-32-STATIC-NEXT: ret
3179
3180; DARWIN-32-DYNAMIC: _off04:
3181; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
3182; DARWIN-32-DYNAMIC-NEXT: leal _ddst+64(,%eax,4), %eax
3183; DARWIN-32-DYNAMIC-NEXT: movl %eax, _dptr
3184; DARWIN-32-DYNAMIC-NEXT: ret
3185
3186; DARWIN-32-PIC: _off04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003187; DARWIN-32-PIC: calll L43$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003188; DARWIN-32-PIC-NEXT: L43$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003189; DARWIN-32-PIC-NEXT: popl %eax
3190; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003191; DARWIN-32-PIC-NEXT: leal (_ddst-L43$pb)+64(%eax,%ecx,4), %ecx
3192; DARWIN-32-PIC-NEXT: movl %ecx, _dptr-L43$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003193; DARWIN-32-PIC-NEXT: ret
3194
3195; DARWIN-64-STATIC: _off04:
3196; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
3197; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
3198; DARWIN-64-STATIC-NEXT: movq %rax, _dptr(%rip)
3199; DARWIN-64-STATIC-NEXT: ret
3200
3201; DARWIN-64-DYNAMIC: _off04:
3202; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
3203; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
3204; DARWIN-64-DYNAMIC-NEXT: movq %rax, _dptr(%rip)
3205; DARWIN-64-DYNAMIC-NEXT: ret
3206
3207; DARWIN-64-PIC: _off04:
3208; DARWIN-64-PIC: leaq _ddst(%rip), %rax
3209; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
3210; DARWIN-64-PIC-NEXT: movq %rax, _dptr(%rip)
3211; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003212}
3213
3214define void @off05(i64 %i) nounwind {
3215entry:
3216 %0 = load i32** @dptr, align 8
3217 %1 = add i64 %i, 16
3218 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
3219 %3 = load i32* %2, align 4
3220 %4 = getelementptr i32* %0, i64 %1
3221 store i32 %3, i32* %4, align 4
3222 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003223; LINUX-64-STATIC: off05:
3224; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003225; LINUX-64-STATIC: movq dptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00003226; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4)
3227; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003228
3229; LINUX-32-STATIC: off05:
3230; LINUX-32-STATIC: movl 4(%esp), %eax
3231; LINUX-32-STATIC-NEXT: movl dsrc+64(,%eax,4), %ecx
3232; LINUX-32-STATIC-NEXT: movl dptr, %edx
3233; LINUX-32-STATIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3234; LINUX-32-STATIC-NEXT: ret
3235
3236; LINUX-32-PIC: off05:
3237; LINUX-32-PIC: movl 4(%esp), %eax
3238; LINUX-32-PIC-NEXT: movl dsrc+64(,%eax,4), %ecx
3239; LINUX-32-PIC-NEXT: movl dptr, %edx
3240; LINUX-32-PIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3241; LINUX-32-PIC-NEXT: ret
3242
3243; LINUX-64-PIC: off05:
3244; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
3245; LINUX-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3246; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
3247; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
3248; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3249; LINUX-64-PIC-NEXT: ret
3250
3251; DARWIN-32-STATIC: _off05:
3252; DARWIN-32-STATIC: movl 4(%esp), %eax
3253; DARWIN-32-STATIC-NEXT: movl _dsrc+64(,%eax,4), %ecx
3254; DARWIN-32-STATIC-NEXT: movl _dptr, %edx
3255; DARWIN-32-STATIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3256; DARWIN-32-STATIC-NEXT: ret
3257
3258; DARWIN-32-DYNAMIC: _off05:
3259; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
3260; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+64(,%eax,4), %ecx
3261; DARWIN-32-DYNAMIC-NEXT: movl _dptr, %edx
3262; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3263; DARWIN-32-DYNAMIC-NEXT: ret
3264
3265; DARWIN-32-PIC: _off05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003266; DARWIN-32-PIC: calll L44$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003267; DARWIN-32-PIC-NEXT: L44$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003268; DARWIN-32-PIC-NEXT: popl %eax
3269; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003270; DARWIN-32-PIC-NEXT: movl (_dsrc-L44$pb)+64(%eax,%ecx,4), %edx
3271; DARWIN-32-PIC-NEXT: movl _dptr-L44$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003272; DARWIN-32-PIC-NEXT: movl %edx, 64(%eax,%ecx,4)
3273; DARWIN-32-PIC-NEXT: ret
3274
3275; DARWIN-64-STATIC: _off05:
3276; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
3277; DARWIN-64-STATIC-NEXT: movl 64(%rax,%rdi,4), %eax
3278; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), %rcx
3279; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3280; DARWIN-64-STATIC-NEXT: ret
3281
3282; DARWIN-64-DYNAMIC: _off05:
3283; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
3284; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax,%rdi,4), %eax
3285; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), %rcx
3286; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3287; DARWIN-64-DYNAMIC-NEXT: ret
3288
3289; DARWIN-64-PIC: _off05:
3290; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
3291; DARWIN-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3292; DARWIN-64-PIC-NEXT: movq _dptr(%rip), %rcx
3293; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3294; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003295}
3296
3297define void @off06(i64 %i) nounwind {
3298entry:
3299 %0 = add i64 %i, 16
3300 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
3301 %2 = load i32* %1, align 4
3302 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
3303 store i32 %2, i32* %3, align 4
3304 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003305; LINUX-64-STATIC: off06:
3306; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), %eax
3307; LINUX-64-STATIC: movl %eax, ldst+64(,%rdi,4)
3308; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003309
3310; LINUX-32-STATIC: off06:
3311; LINUX-32-STATIC: movl 4(%esp), %eax
3312; LINUX-32-STATIC-NEXT: movl lsrc+64(,%eax,4), %ecx
3313; LINUX-32-STATIC-NEXT: movl %ecx, ldst+64(,%eax,4)
3314; LINUX-32-STATIC-NEXT: ret
3315
3316; LINUX-32-PIC: off06:
3317; LINUX-32-PIC: movl 4(%esp), %eax
3318; LINUX-32-PIC-NEXT: movl lsrc+64(,%eax,4), %ecx
3319; LINUX-32-PIC-NEXT: movl %ecx, ldst+64(,%eax,4)
3320; LINUX-32-PIC-NEXT: ret
3321
3322; LINUX-64-PIC: off06:
3323; LINUX-64-PIC: leaq lsrc(%rip), %rax
3324; LINUX-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3325; LINUX-64-PIC-NEXT: leaq ldst(%rip), %rcx
3326; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3327; LINUX-64-PIC-NEXT: ret
3328
3329; DARWIN-32-STATIC: _off06:
3330; DARWIN-32-STATIC: movl 4(%esp), %eax
3331; DARWIN-32-STATIC-NEXT: movl _lsrc+64(,%eax,4), %ecx
3332; DARWIN-32-STATIC-NEXT: movl %ecx, _ldst+64(,%eax,4)
3333; DARWIN-32-STATIC-NEXT: ret
3334
3335; DARWIN-32-DYNAMIC: _off06:
3336; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
3337; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+64(,%eax,4), %ecx
3338; DARWIN-32-DYNAMIC-NEXT: movl %ecx, _ldst+64(,%eax,4)
3339; DARWIN-32-DYNAMIC-NEXT: ret
3340
3341; DARWIN-32-PIC: _off06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003342; DARWIN-32-PIC: calll L45$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003343; DARWIN-32-PIC-NEXT: L45$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003344; DARWIN-32-PIC-NEXT: popl %eax
3345; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003346; DARWIN-32-PIC-NEXT: movl (_lsrc-L45$pb)+64(%eax,%ecx,4), %edx
3347; DARWIN-32-PIC-NEXT: movl %edx, (_ldst-L45$pb)+64(%eax,%ecx,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003348; DARWIN-32-PIC-NEXT: ret
3349
3350; DARWIN-64-STATIC: _off06:
3351; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
3352; DARWIN-64-STATIC-NEXT: movl 64(%rax,%rdi,4), %eax
3353; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), %rcx
3354; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3355; DARWIN-64-STATIC-NEXT: ret
3356
3357; DARWIN-64-DYNAMIC: _off06:
3358; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
3359; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax,%rdi,4), %eax
3360; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), %rcx
3361; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3362; DARWIN-64-DYNAMIC-NEXT: ret
3363
3364; DARWIN-64-PIC: _off06:
3365; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
3366; DARWIN-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3367; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), %rcx
3368; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3369; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003370}
3371
3372define void @off07(i64 %i) nounwind {
3373entry:
3374 %.sum = add i64 %i, 16
3375 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
3376 store i32* %0, i32** @lptr, align 8
3377 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003378; LINUX-64-STATIC: off07:
3379; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax
3380; LINUX-64-STATIC: movq %rax, lptr
3381; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003382
3383; LINUX-32-STATIC: off07:
3384; LINUX-32-STATIC: movl 4(%esp), %eax
3385; LINUX-32-STATIC-NEXT: leal ldst+64(,%eax,4), %eax
3386; LINUX-32-STATIC-NEXT: movl %eax, lptr
3387; LINUX-32-STATIC-NEXT: ret
3388
3389; LINUX-32-PIC: off07:
3390; LINUX-32-PIC: movl 4(%esp), %eax
3391; LINUX-32-PIC-NEXT: leal ldst+64(,%eax,4), %eax
3392; LINUX-32-PIC-NEXT: movl %eax, lptr
3393; LINUX-32-PIC-NEXT: ret
3394
3395; LINUX-64-PIC: off07:
3396; LINUX-64-PIC: leaq ldst(%rip), %rax
3397; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
3398; LINUX-64-PIC-NEXT: movq %rax, lptr(%rip)
3399; LINUX-64-PIC-NEXT: ret
3400
3401; DARWIN-32-STATIC: _off07:
3402; DARWIN-32-STATIC: movl 4(%esp), %eax
3403; DARWIN-32-STATIC-NEXT: leal _ldst+64(,%eax,4), %eax
3404; DARWIN-32-STATIC-NEXT: movl %eax, _lptr
3405; DARWIN-32-STATIC-NEXT: ret
3406
3407; DARWIN-32-DYNAMIC: _off07:
3408; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
3409; DARWIN-32-DYNAMIC-NEXT: leal _ldst+64(,%eax,4), %eax
3410; DARWIN-32-DYNAMIC-NEXT: movl %eax, _lptr
3411; DARWIN-32-DYNAMIC-NEXT: ret
3412
3413; DARWIN-32-PIC: _off07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003414; DARWIN-32-PIC: calll L46$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003415; DARWIN-32-PIC-NEXT: L46$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003416; DARWIN-32-PIC-NEXT: popl %eax
3417; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003418; DARWIN-32-PIC-NEXT: leal (_ldst-L46$pb)+64(%eax,%ecx,4), %ecx
3419; DARWIN-32-PIC-NEXT: movl %ecx, _lptr-L46$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003420; DARWIN-32-PIC-NEXT: ret
3421
3422; DARWIN-64-STATIC: _off07:
3423; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
3424; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
3425; DARWIN-64-STATIC-NEXT: movq %rax, _lptr(%rip)
3426; DARWIN-64-STATIC-NEXT: ret
3427
3428; DARWIN-64-DYNAMIC: _off07:
3429; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
3430; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
3431; DARWIN-64-DYNAMIC-NEXT: movq %rax, _lptr(%rip)
3432; DARWIN-64-DYNAMIC-NEXT: ret
3433
3434; DARWIN-64-PIC: _off07:
3435; DARWIN-64-PIC: leaq _ldst(%rip), %rax
3436; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
3437; DARWIN-64-PIC-NEXT: movq %rax, _lptr(%rip)
3438; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003439}
3440
3441define void @off08(i64 %i) nounwind {
3442entry:
3443 %0 = load i32** @lptr, align 8
3444 %1 = add i64 %i, 16
3445 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
3446 %3 = load i32* %2, align 4
3447 %4 = getelementptr i32* %0, i64 %1
3448 store i32 %3, i32* %4, align 4
3449 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003450; LINUX-64-STATIC: off08:
3451; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003452; LINUX-64-STATIC: movq lptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00003453; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4)
3454; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003455
3456; LINUX-32-STATIC: off08:
3457; LINUX-32-STATIC: movl 4(%esp), %eax
3458; LINUX-32-STATIC-NEXT: movl lsrc+64(,%eax,4), %ecx
3459; LINUX-32-STATIC-NEXT: movl lptr, %edx
3460; LINUX-32-STATIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3461; LINUX-32-STATIC-NEXT: ret
3462
3463; LINUX-32-PIC: off08:
3464; LINUX-32-PIC: movl 4(%esp), %eax
3465; LINUX-32-PIC-NEXT: movl lsrc+64(,%eax,4), %ecx
3466; LINUX-32-PIC-NEXT: movl lptr, %edx
3467; LINUX-32-PIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3468; LINUX-32-PIC-NEXT: ret
3469
3470; LINUX-64-PIC: off08:
3471; LINUX-64-PIC: leaq lsrc(%rip), %rax
3472; LINUX-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3473; LINUX-64-PIC-NEXT: movq lptr(%rip), %rcx
3474; LINUX-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3475; LINUX-64-PIC-NEXT: ret
3476
3477; DARWIN-32-STATIC: _off08:
3478; DARWIN-32-STATIC: movl 4(%esp), %eax
3479; DARWIN-32-STATIC-NEXT: movl _lsrc+64(,%eax,4), %ecx
3480; DARWIN-32-STATIC-NEXT: movl _lptr, %edx
3481; DARWIN-32-STATIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3482; DARWIN-32-STATIC-NEXT: ret
3483
3484; DARWIN-32-DYNAMIC: _off08:
3485; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
3486; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+64(,%eax,4), %ecx
3487; DARWIN-32-DYNAMIC-NEXT: movl _lptr, %edx
3488; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 64(%edx,%eax,4)
3489; DARWIN-32-DYNAMIC-NEXT: ret
3490
3491; DARWIN-32-PIC: _off08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003492; DARWIN-32-PIC: calll L47$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003493; DARWIN-32-PIC-NEXT: L47$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003494; DARWIN-32-PIC-NEXT: popl %eax
3495; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003496; DARWIN-32-PIC-NEXT: movl (_lsrc-L47$pb)+64(%eax,%ecx,4), %edx
3497; DARWIN-32-PIC-NEXT: movl _lptr-L47$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003498; DARWIN-32-PIC-NEXT: movl %edx, 64(%eax,%ecx,4)
3499; DARWIN-32-PIC-NEXT: ret
3500
3501; DARWIN-64-STATIC: _off08:
3502; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
3503; DARWIN-64-STATIC-NEXT: movl 64(%rax,%rdi,4), %eax
3504; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), %rcx
3505; DARWIN-64-STATIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3506; DARWIN-64-STATIC-NEXT: ret
3507
3508; DARWIN-64-DYNAMIC: _off08:
3509; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
3510; DARWIN-64-DYNAMIC-NEXT: movl 64(%rax,%rdi,4), %eax
3511; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), %rcx
3512; DARWIN-64-DYNAMIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3513; DARWIN-64-DYNAMIC-NEXT: ret
3514
3515; DARWIN-64-PIC: _off08:
3516; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
3517; DARWIN-64-PIC-NEXT: movl 64(%rax,%rdi,4), %eax
3518; DARWIN-64-PIC-NEXT: movq _lptr(%rip), %rcx
3519; DARWIN-64-PIC-NEXT: movl %eax, 64(%rcx,%rdi,4)
3520; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003521}
3522
3523define void @moo00(i64 %i) nounwind {
3524entry:
3525 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3526 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4
3527 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003528; LINUX-64-STATIC: moo00:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003529; LINUX-64-STATIC: movl src+262144(%rip), %eax
3530; LINUX-64-STATIC: movl %eax, dst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003531; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003532
3533; LINUX-32-STATIC: moo00:
3534; LINUX-32-STATIC: movl src+262144, %eax
3535; LINUX-32-STATIC-NEXT: movl %eax, dst+262144
3536; LINUX-32-STATIC-NEXT: ret
3537
3538; LINUX-32-PIC: moo00:
3539; LINUX-32-PIC: movl src+262144, %eax
3540; LINUX-32-PIC-NEXT: movl %eax, dst+262144
3541; LINUX-32-PIC-NEXT: ret
3542
3543; LINUX-64-PIC: moo00:
3544; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
3545; LINUX-64-PIC-NEXT: movl 262144(%rax), %eax
3546; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), %rcx
3547; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx)
3548; LINUX-64-PIC-NEXT: ret
3549
3550; DARWIN-32-STATIC: _moo00:
3551; DARWIN-32-STATIC: movl _src+262144, %eax
3552; DARWIN-32-STATIC-NEXT: movl %eax, _dst+262144
3553; DARWIN-32-STATIC-NEXT: ret
3554
3555; DARWIN-32-DYNAMIC: _moo00:
3556; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
3557; DARWIN-32-DYNAMIC-NEXT: movl 262144(%eax), %eax
3558; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %ecx
3559; DARWIN-32-DYNAMIC-NEXT: movl %eax, 262144(%ecx)
3560; DARWIN-32-DYNAMIC-NEXT: ret
3561
3562; DARWIN-32-PIC: _moo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003563; DARWIN-32-PIC: calll L48$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003564; DARWIN-32-PIC-NEXT: L48$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003565; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00003566; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L48$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003567; DARWIN-32-PIC-NEXT: movl 262144(%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003568; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L48$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003569; DARWIN-32-PIC-NEXT: movl %ecx, 262144(%eax)
3570; DARWIN-32-PIC-NEXT: ret
3571
3572; DARWIN-64-STATIC: _moo00:
3573; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
3574; DARWIN-64-STATIC-NEXT: movl 262144(%rax), %eax
3575; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
3576; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx)
3577; DARWIN-64-STATIC-NEXT: ret
3578
3579; DARWIN-64-DYNAMIC: _moo00:
3580; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
3581; DARWIN-64-DYNAMIC-NEXT: movl 262144(%rax), %eax
3582; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
3583; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx)
3584; DARWIN-64-DYNAMIC-NEXT: ret
3585
3586; DARWIN-64-PIC: _moo00:
3587; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
3588; DARWIN-64-PIC-NEXT: movl 262144(%rax), %eax
3589; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
3590; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx)
3591; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003592}
3593
3594define void @moo01(i64 %i) nounwind {
3595entry:
3596 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
3597 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003598; LINUX-64-STATIC: moo01:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003599; LINUX-64-STATIC: movq $dst+262144, ptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003600; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003601
3602; LINUX-32-STATIC: moo01:
3603; LINUX-32-STATIC: movl $dst+262144, ptr
3604; LINUX-32-STATIC-NEXT: ret
3605
3606; LINUX-32-PIC: moo01:
3607; LINUX-32-PIC: movl $dst+262144, ptr
3608; LINUX-32-PIC-NEXT: ret
3609
3610; LINUX-64-PIC: moo01:
3611; LINUX-64-PIC: movl $262144, %eax
3612; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), %rax
3613; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
3614; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
3615; LINUX-64-PIC-NEXT: ret
3616
3617; DARWIN-32-STATIC: _moo01:
3618; DARWIN-32-STATIC: movl $_dst+262144, _ptr
3619; DARWIN-32-STATIC-NEXT: ret
3620
3621; DARWIN-32-DYNAMIC: _moo01:
3622; DARWIN-32-DYNAMIC: movl $262144, %eax
3623; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, %eax
3624; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
3625; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
3626; DARWIN-32-DYNAMIC-NEXT: ret
3627
3628; DARWIN-32-PIC: _moo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003629; DARWIN-32-PIC: calll L49$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003630; DARWIN-32-PIC-NEXT: L49$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003631; DARWIN-32-PIC-NEXT: popl %eax
3632; DARWIN-32-PIC-NEXT: movl $262144, %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003633; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L49$pb(%eax), %ecx
3634; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L49$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003635; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
3636; DARWIN-32-PIC-NEXT: ret
3637
3638; DARWIN-64-STATIC: _moo01:
3639; DARWIN-64-STATIC: movl $262144, %eax
3640; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
3641; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3642; DARWIN-64-STATIC-NEXT: movq %rax, (%rcx)
3643; DARWIN-64-STATIC-NEXT: ret
3644
3645; DARWIN-64-DYNAMIC: _moo01:
3646; DARWIN-64-DYNAMIC: movl $262144, %eax
3647; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
3648; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3649; DARWIN-64-DYNAMIC-NEXT: movq %rax, (%rcx)
3650; DARWIN-64-DYNAMIC-NEXT: ret
3651
3652; DARWIN-64-PIC: _moo01:
3653; DARWIN-64-PIC: movl $262144, %eax
3654; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
3655; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3656; DARWIN-64-PIC-NEXT: movq %rax, (%rcx)
3657; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003658}
3659
3660define void @moo02(i64 %i) nounwind {
3661entry:
3662 %0 = load i32** @ptr, align 8
3663 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3664 %2 = getelementptr i32* %0, i64 65536
3665 store i32 %1, i32* %2, align 4
3666 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003667; LINUX-64-STATIC: moo02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003668; LINUX-64-STATIC: movl src+262144(%rip), %eax
3669; LINUX-64-STATIC: movq ptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00003670; LINUX-64-STATIC: movl %eax, 262144(%rcx)
3671; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003672
3673; LINUX-32-STATIC: moo02:
3674; LINUX-32-STATIC: movl src+262144, %eax
3675; LINUX-32-STATIC-NEXT: movl ptr, %ecx
3676; LINUX-32-STATIC-NEXT: movl %eax, 262144(%ecx)
3677; LINUX-32-STATIC-NEXT: ret
3678
3679; LINUX-32-PIC: moo02:
3680; LINUX-32-PIC: movl src+262144, %eax
3681; LINUX-32-PIC-NEXT: movl ptr, %ecx
3682; LINUX-32-PIC-NEXT: movl %eax, 262144(%ecx)
3683; LINUX-32-PIC-NEXT: ret
3684
3685; LINUX-64-PIC: moo02:
3686; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
3687; LINUX-64-PIC-NEXT: movl 262144(%rax), %eax
3688; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
3689; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
3690; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx)
3691; LINUX-64-PIC-NEXT: ret
3692
3693; DARWIN-32-STATIC: _moo02:
3694; DARWIN-32-STATIC: movl _src+262144, %eax
3695; DARWIN-32-STATIC-NEXT: movl _ptr, %ecx
3696; DARWIN-32-STATIC-NEXT: movl %eax, 262144(%ecx)
3697; DARWIN-32-STATIC-NEXT: ret
3698
3699; DARWIN-32-DYNAMIC: _moo02:
3700; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
3701; DARWIN-32-DYNAMIC-NEXT: movl 262144(%eax), %eax
3702; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
3703; DARWIN-32-DYNAMIC-NEXT: movl (%ecx), %ecx
3704; DARWIN-32-DYNAMIC-NEXT: movl %eax, 262144(%ecx)
3705; DARWIN-32-DYNAMIC-NEXT: ret
3706
3707; DARWIN-32-PIC: _moo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003708; DARWIN-32-PIC: calll L50$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003709; DARWIN-32-PIC-NEXT: L50$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003710; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00003711; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L50$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003712; DARWIN-32-PIC-NEXT: movl 262144(%ecx), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00003713; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L50$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003714; DARWIN-32-PIC-NEXT: movl (%eax), %eax
3715; DARWIN-32-PIC-NEXT: movl %ecx, 262144(%eax)
3716; DARWIN-32-PIC-NEXT: ret
3717
3718; DARWIN-64-STATIC: _moo02:
3719; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
3720; DARWIN-64-STATIC-NEXT: movl 262144(%rax), %eax
3721; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3722; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
3723; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx)
3724; DARWIN-64-STATIC-NEXT: ret
3725
3726; DARWIN-64-DYNAMIC: _moo02:
3727; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
3728; DARWIN-64-DYNAMIC-NEXT: movl 262144(%rax), %eax
3729; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3730; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
3731; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx)
3732; DARWIN-64-DYNAMIC-NEXT: ret
3733
3734; DARWIN-64-PIC: _moo02:
3735; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
3736; DARWIN-64-PIC-NEXT: movl 262144(%rax), %eax
3737; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
3738; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
3739; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx)
3740; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003741}
3742
3743define void @moo03(i64 %i) nounwind {
3744entry:
3745 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3746 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32
3747 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003748; LINUX-64-STATIC: moo03:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003749; LINUX-64-STATIC: movl dsrc+262144(%rip), %eax
3750; LINUX-64-STATIC: movl %eax, ddst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003751; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003752
3753; LINUX-32-STATIC: moo03:
3754; LINUX-32-STATIC: movl dsrc+262144, %eax
3755; LINUX-32-STATIC-NEXT: movl %eax, ddst+262144
3756; LINUX-32-STATIC-NEXT: ret
3757
3758; LINUX-32-PIC: moo03:
3759; LINUX-32-PIC: movl dsrc+262144, %eax
3760; LINUX-32-PIC-NEXT: movl %eax, ddst+262144
3761; LINUX-32-PIC-NEXT: ret
3762
3763; LINUX-64-PIC: moo03:
3764; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
3765; LINUX-64-PIC-NEXT: movl 262144(%rax), %eax
3766; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), %rcx
3767; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx)
3768; LINUX-64-PIC-NEXT: ret
3769
3770; DARWIN-32-STATIC: _moo03:
3771; DARWIN-32-STATIC: movl _dsrc+262144, %eax
3772; DARWIN-32-STATIC-NEXT: movl %eax, _ddst+262144
3773; DARWIN-32-STATIC-NEXT: ret
3774
3775; DARWIN-32-DYNAMIC: _moo03:
3776; DARWIN-32-DYNAMIC: movl _dsrc+262144, %eax
3777; DARWIN-32-DYNAMIC-NEXT: movl %eax, _ddst+262144
3778; DARWIN-32-DYNAMIC-NEXT: ret
3779
3780; DARWIN-32-PIC: _moo03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003781; DARWIN-32-PIC: calll L51$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003782; DARWIN-32-PIC-NEXT: L51$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003783; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00003784; DARWIN-32-PIC-NEXT: movl (_dsrc-L51$pb)+262144(%eax), %ecx
3785; DARWIN-32-PIC-NEXT: movl %ecx, (_ddst-L51$pb)+262144(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003786; DARWIN-32-PIC-NEXT: ret
3787
3788; DARWIN-64-STATIC: _moo03:
3789; DARWIN-64-STATIC: movl _dsrc+262144(%rip), %eax
3790; DARWIN-64-STATIC-NEXT: movl %eax, _ddst+262144(%rip)
3791; DARWIN-64-STATIC-NEXT: ret
3792
3793; DARWIN-64-DYNAMIC: _moo03:
3794; DARWIN-64-DYNAMIC: movl _dsrc+262144(%rip), %eax
3795; DARWIN-64-DYNAMIC-NEXT: movl %eax, _ddst+262144(%rip)
3796; DARWIN-64-DYNAMIC-NEXT: ret
3797
3798; DARWIN-64-PIC: _moo03:
3799; DARWIN-64-PIC: movl _dsrc+262144(%rip), %eax
3800; DARWIN-64-PIC-NEXT: movl %eax, _ddst+262144(%rip)
3801; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003802}
3803
3804define void @moo04(i64 %i) nounwind {
3805entry:
3806 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
3807 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003808; LINUX-64-STATIC: moo04:
3809; LINUX-64-STATIC: movq $ddst+262144, dptr
3810; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003811
3812; LINUX-32-STATIC: moo04:
3813; LINUX-32-STATIC: movl $ddst+262144, dptr
3814; LINUX-32-STATIC-NEXT: ret
3815
3816; LINUX-32-PIC: moo04:
3817; LINUX-32-PIC: movl $ddst+262144, dptr
3818; LINUX-32-PIC-NEXT: ret
3819
3820; LINUX-64-PIC: moo04:
3821; LINUX-64-PIC: movl $262144, %eax
3822; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), %rax
3823; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
3824; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
3825; LINUX-64-PIC-NEXT: ret
3826
3827; DARWIN-32-STATIC: _moo04:
3828; DARWIN-32-STATIC: movl $_ddst+262144, _dptr
3829; DARWIN-32-STATIC-NEXT: ret
3830
3831; DARWIN-32-DYNAMIC: _moo04:
3832; DARWIN-32-DYNAMIC: movl $_ddst+262144, _dptr
3833; DARWIN-32-DYNAMIC-NEXT: ret
3834
3835; DARWIN-32-PIC: _moo04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003836; DARWIN-32-PIC: calll L52$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003837; DARWIN-32-PIC-NEXT: L52$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003838; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00003839; DARWIN-32-PIC-NEXT: leal (_ddst-L52$pb)+262144(%eax), %ecx
3840; DARWIN-32-PIC-NEXT: movl %ecx, _dptr-L52$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003841; DARWIN-32-PIC-NEXT: ret
3842
3843; DARWIN-64-STATIC: _moo04:
3844; DARWIN-64-STATIC: leaq _ddst+262144(%rip), %rax
3845; DARWIN-64-STATIC-NEXT: movq %rax, _dptr(%rip)
3846; DARWIN-64-STATIC-NEXT: ret
3847
3848; DARWIN-64-DYNAMIC: _moo04:
3849; DARWIN-64-DYNAMIC: leaq _ddst+262144(%rip), %rax
3850; DARWIN-64-DYNAMIC-NEXT: movq %rax, _dptr(%rip)
3851; DARWIN-64-DYNAMIC-NEXT: ret
3852
3853; DARWIN-64-PIC: _moo04:
3854; DARWIN-64-PIC: leaq _ddst+262144(%rip), %rax
3855; DARWIN-64-PIC-NEXT: movq %rax, _dptr(%rip)
3856; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003857}
3858
3859define void @moo05(i64 %i) nounwind {
3860entry:
3861 %0 = load i32** @dptr, align 8
3862 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3863 %2 = getelementptr i32* %0, i64 65536
3864 store i32 %1, i32* %2, align 4
3865 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003866; LINUX-64-STATIC: moo05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003867; LINUX-64-STATIC: movl dsrc+262144(%rip), %eax
3868; LINUX-64-STATIC: movq dptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00003869; LINUX-64-STATIC: movl %eax, 262144(%rcx)
3870; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003871
3872; LINUX-32-STATIC: moo05:
3873; LINUX-32-STATIC: movl dsrc+262144, %eax
3874; LINUX-32-STATIC-NEXT: movl dptr, %ecx
3875; LINUX-32-STATIC-NEXT: movl %eax, 262144(%ecx)
3876; LINUX-32-STATIC-NEXT: ret
3877
3878; LINUX-32-PIC: moo05:
3879; LINUX-32-PIC: movl dsrc+262144, %eax
3880; LINUX-32-PIC-NEXT: movl dptr, %ecx
3881; LINUX-32-PIC-NEXT: movl %eax, 262144(%ecx)
3882; LINUX-32-PIC-NEXT: ret
3883
3884; LINUX-64-PIC: moo05:
3885; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
3886; LINUX-64-PIC-NEXT: movl 262144(%rax), %eax
3887; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
3888; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
3889; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx)
3890; LINUX-64-PIC-NEXT: ret
3891
3892; DARWIN-32-STATIC: _moo05:
3893; DARWIN-32-STATIC: movl _dsrc+262144, %eax
3894; DARWIN-32-STATIC-NEXT: movl _dptr, %ecx
3895; DARWIN-32-STATIC-NEXT: movl %eax, 262144(%ecx)
3896; DARWIN-32-STATIC-NEXT: ret
3897
3898; DARWIN-32-DYNAMIC: _moo05:
3899; DARWIN-32-DYNAMIC: movl _dsrc+262144, %eax
3900; DARWIN-32-DYNAMIC-NEXT: movl _dptr, %ecx
3901; DARWIN-32-DYNAMIC-NEXT: movl %eax, 262144(%ecx)
3902; DARWIN-32-DYNAMIC-NEXT: ret
3903
3904; DARWIN-32-PIC: _moo05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003905; DARWIN-32-PIC: calll L53$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003906; DARWIN-32-PIC-NEXT: L53$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003907; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00003908; DARWIN-32-PIC-NEXT: movl (_dsrc-L53$pb)+262144(%eax), %ecx
3909; DARWIN-32-PIC-NEXT: movl _dptr-L53$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003910; DARWIN-32-PIC-NEXT: movl %ecx, 262144(%eax)
3911; DARWIN-32-PIC-NEXT: ret
3912
3913; DARWIN-64-STATIC: _moo05:
3914; DARWIN-64-STATIC: movl _dsrc+262144(%rip), %eax
3915; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), %rcx
3916; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx)
3917; DARWIN-64-STATIC-NEXT: ret
3918
3919; DARWIN-64-DYNAMIC: _moo05:
3920; DARWIN-64-DYNAMIC: movl _dsrc+262144(%rip), %eax
3921; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), %rcx
3922; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx)
3923; DARWIN-64-DYNAMIC-NEXT: ret
3924
3925; DARWIN-64-PIC: _moo05:
3926; DARWIN-64-PIC: movl _dsrc+262144(%rip), %eax
3927; DARWIN-64-PIC-NEXT: movq _dptr(%rip), %rcx
3928; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx)
3929; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003930}
3931
3932define void @moo06(i64 %i) nounwind {
3933entry:
3934 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
3935 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4
3936 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003937; LINUX-64-STATIC: moo06:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003938; LINUX-64-STATIC: movl lsrc+262144(%rip), %eax
3939; LINUX-64-STATIC: movl %eax, ldst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003940; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003941
3942; LINUX-32-STATIC: moo06:
3943; LINUX-32-STATIC: movl lsrc+262144, %eax
3944; LINUX-32-STATIC-NEXT: movl %eax, ldst+262144
3945; LINUX-32-STATIC-NEXT: ret
3946
3947; LINUX-32-PIC: moo06:
3948; LINUX-32-PIC: movl lsrc+262144, %eax
3949; LINUX-32-PIC-NEXT: movl %eax, ldst+262144
3950; LINUX-32-PIC-NEXT: ret
3951
3952; LINUX-64-PIC: moo06:
3953; LINUX-64-PIC: movl lsrc+262144(%rip), %eax
3954; LINUX-64-PIC-NEXT: movl %eax, ldst+262144(%rip)
3955; LINUX-64-PIC-NEXT: ret
3956
3957; DARWIN-32-STATIC: _moo06:
3958; DARWIN-32-STATIC: movl _lsrc+262144, %eax
3959; DARWIN-32-STATIC-NEXT: movl %eax, _ldst+262144
3960; DARWIN-32-STATIC-NEXT: ret
3961
3962; DARWIN-32-DYNAMIC: _moo06:
3963; DARWIN-32-DYNAMIC: movl _lsrc+262144, %eax
3964; DARWIN-32-DYNAMIC-NEXT: movl %eax, _ldst+262144
3965; DARWIN-32-DYNAMIC-NEXT: ret
3966
3967; DARWIN-32-PIC: _moo06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003968; DARWIN-32-PIC: calll L54$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003969; DARWIN-32-PIC-NEXT: L54$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003970; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00003971; DARWIN-32-PIC-NEXT: movl (_lsrc-L54$pb)+262144(%eax), %ecx
3972; DARWIN-32-PIC-NEXT: movl %ecx, (_ldst-L54$pb)+262144(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003973; DARWIN-32-PIC-NEXT: ret
3974
3975; DARWIN-64-STATIC: _moo06:
3976; DARWIN-64-STATIC: movl _lsrc+262144(%rip), %eax
3977; DARWIN-64-STATIC-NEXT: movl %eax, _ldst+262144(%rip)
3978; DARWIN-64-STATIC-NEXT: ret
3979
3980; DARWIN-64-DYNAMIC: _moo06:
3981; DARWIN-64-DYNAMIC: movl _lsrc+262144(%rip), %eax
3982; DARWIN-64-DYNAMIC-NEXT: movl %eax, _ldst+262144(%rip)
3983; DARWIN-64-DYNAMIC-NEXT: ret
3984
3985; DARWIN-64-PIC: _moo06:
3986; DARWIN-64-PIC: movl _lsrc+262144(%rip), %eax
3987; DARWIN-64-PIC-NEXT: movl %eax, _ldst+262144(%rip)
3988; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003989}
3990
3991define void @moo07(i64 %i) nounwind {
3992entry:
3993 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
3994 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003995; LINUX-64-STATIC: moo07:
3996; LINUX-64-STATIC: movq $ldst+262144, lptr
3997; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003998
3999; LINUX-32-STATIC: moo07:
4000; LINUX-32-STATIC: movl $ldst+262144, lptr
4001; LINUX-32-STATIC-NEXT: ret
4002
4003; LINUX-32-PIC: moo07:
4004; LINUX-32-PIC: movl $ldst+262144, lptr
4005; LINUX-32-PIC-NEXT: ret
4006
4007; LINUX-64-PIC: moo07:
4008; LINUX-64-PIC: leaq ldst+262144(%rip), %rax
4009; LINUX-64-PIC-NEXT: movq %rax, lptr(%rip)
4010; LINUX-64-PIC-NEXT: ret
4011
4012; DARWIN-32-STATIC: _moo07:
4013; DARWIN-32-STATIC: movl $_ldst+262144, _lptr
4014; DARWIN-32-STATIC-NEXT: ret
4015
4016; DARWIN-32-DYNAMIC: _moo07:
4017; DARWIN-32-DYNAMIC: movl $_ldst+262144, _lptr
4018; DARWIN-32-DYNAMIC-NEXT: ret
4019
4020; DARWIN-32-PIC: _moo07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004021; DARWIN-32-PIC: calll L55$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004022; DARWIN-32-PIC-NEXT: L55$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004023; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00004024; DARWIN-32-PIC-NEXT: leal (_ldst-L55$pb)+262144(%eax), %ecx
4025; DARWIN-32-PIC-NEXT: movl %ecx, _lptr-L55$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004026; DARWIN-32-PIC-NEXT: ret
4027
4028; DARWIN-64-STATIC: _moo07:
4029; DARWIN-64-STATIC: leaq _ldst+262144(%rip), %rax
4030; DARWIN-64-STATIC-NEXT: movq %rax, _lptr(%rip)
4031; DARWIN-64-STATIC-NEXT: ret
4032
4033; DARWIN-64-DYNAMIC: _moo07:
4034; DARWIN-64-DYNAMIC: leaq _ldst+262144(%rip), %rax
4035; DARWIN-64-DYNAMIC-NEXT: movq %rax, _lptr(%rip)
4036; DARWIN-64-DYNAMIC-NEXT: ret
4037
4038; DARWIN-64-PIC: _moo07:
4039; DARWIN-64-PIC: leaq _ldst+262144(%rip), %rax
4040; DARWIN-64-PIC-NEXT: movq %rax, _lptr(%rip)
4041; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004042}
4043
4044define void @moo08(i64 %i) nounwind {
4045entry:
4046 %0 = load i32** @lptr, align 8
4047 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4048 %2 = getelementptr i32* %0, i64 65536
4049 store i32 %1, i32* %2, align 4
4050 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004051; LINUX-64-STATIC: moo08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00004052; LINUX-64-STATIC: movl lsrc+262144(%rip), %eax
4053; LINUX-64-STATIC: movq lptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00004054; LINUX-64-STATIC: movl %eax, 262144(%rcx)
4055; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004056
4057; LINUX-32-STATIC: moo08:
4058; LINUX-32-STATIC: movl lsrc+262144, %eax
4059; LINUX-32-STATIC-NEXT: movl lptr, %ecx
4060; LINUX-32-STATIC-NEXT: movl %eax, 262144(%ecx)
4061; LINUX-32-STATIC-NEXT: ret
4062
4063; LINUX-32-PIC: moo08:
4064; LINUX-32-PIC: movl lsrc+262144, %eax
4065; LINUX-32-PIC-NEXT: movl lptr, %ecx
4066; LINUX-32-PIC-NEXT: movl %eax, 262144(%ecx)
4067; LINUX-32-PIC-NEXT: ret
4068
4069; LINUX-64-PIC: moo08:
4070; LINUX-64-PIC: movl lsrc+262144(%rip), %eax
4071; LINUX-64-PIC-NEXT: movq lptr(%rip), %rcx
4072; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx)
4073; LINUX-64-PIC-NEXT: ret
4074
4075; DARWIN-32-STATIC: _moo08:
4076; DARWIN-32-STATIC: movl _lsrc+262144, %eax
4077; DARWIN-32-STATIC-NEXT: movl _lptr, %ecx
4078; DARWIN-32-STATIC-NEXT: movl %eax, 262144(%ecx)
4079; DARWIN-32-STATIC-NEXT: ret
4080
4081; DARWIN-32-DYNAMIC: _moo08:
4082; DARWIN-32-DYNAMIC: movl _lsrc+262144, %eax
4083; DARWIN-32-DYNAMIC-NEXT: movl _lptr, %ecx
4084; DARWIN-32-DYNAMIC-NEXT: movl %eax, 262144(%ecx)
4085; DARWIN-32-DYNAMIC-NEXT: ret
4086
4087; DARWIN-32-PIC: _moo08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004088; DARWIN-32-PIC: calll L56$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004089; DARWIN-32-PIC-NEXT: L56$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004090; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00004091; DARWIN-32-PIC-NEXT: movl (_lsrc-L56$pb)+262144(%eax), %ecx
4092; DARWIN-32-PIC-NEXT: movl _lptr-L56$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004093; DARWIN-32-PIC-NEXT: movl %ecx, 262144(%eax)
4094; DARWIN-32-PIC-NEXT: ret
4095
4096; DARWIN-64-STATIC: _moo08:
4097; DARWIN-64-STATIC: movl _lsrc+262144(%rip), %eax
4098; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), %rcx
4099; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx)
4100; DARWIN-64-STATIC-NEXT: ret
4101
4102; DARWIN-64-DYNAMIC: _moo08:
4103; DARWIN-64-DYNAMIC: movl _lsrc+262144(%rip), %eax
4104; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), %rcx
4105; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx)
4106; DARWIN-64-DYNAMIC-NEXT: ret
4107
4108; DARWIN-64-PIC: _moo08:
4109; DARWIN-64-PIC: movl _lsrc+262144(%rip), %eax
4110; DARWIN-64-PIC-NEXT: movq _lptr(%rip), %rcx
4111; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx)
4112; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004113}
4114
4115define void @big00(i64 %i) nounwind {
4116entry:
4117 %0 = add i64 %i, 65536
4118 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
4119 %2 = load i32* %1, align 4
4120 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
4121 store i32 %2, i32* %3, align 4
4122 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004123; LINUX-64-STATIC: big00:
4124; LINUX-64-STATIC: movl src+262144(,%rdi,4), %eax
4125; LINUX-64-STATIC: movl %eax, dst+262144(,%rdi,4)
4126; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004127
4128; LINUX-32-STATIC: big00:
4129; LINUX-32-STATIC: movl 4(%esp), %eax
4130; LINUX-32-STATIC-NEXT: movl src+262144(,%eax,4), %ecx
4131; LINUX-32-STATIC-NEXT: movl %ecx, dst+262144(,%eax,4)
4132; LINUX-32-STATIC-NEXT: ret
4133
4134; LINUX-32-PIC: big00:
4135; LINUX-32-PIC: movl 4(%esp), %eax
4136; LINUX-32-PIC-NEXT: movl src+262144(,%eax,4), %ecx
4137; LINUX-32-PIC-NEXT: movl %ecx, dst+262144(,%eax,4)
4138; LINUX-32-PIC-NEXT: ret
4139
4140; LINUX-64-PIC: big00:
4141; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
4142; LINUX-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4143; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), %rcx
4144; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4145; LINUX-64-PIC-NEXT: ret
4146
4147; DARWIN-32-STATIC: _big00:
4148; DARWIN-32-STATIC: movl 4(%esp), %eax
4149; DARWIN-32-STATIC-NEXT: movl _src+262144(,%eax,4), %ecx
4150; DARWIN-32-STATIC-NEXT: movl %ecx, _dst+262144(,%eax,4)
4151; DARWIN-32-STATIC-NEXT: ret
4152
4153; DARWIN-32-DYNAMIC: _big00:
4154; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4155; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, %ecx
4156; DARWIN-32-DYNAMIC-NEXT: movl 262144(%ecx,%eax,4), %ecx
4157; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %edx
4158; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4159; DARWIN-32-DYNAMIC-NEXT: ret
4160
4161; DARWIN-32-PIC: _big00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004162; DARWIN-32-PIC: calll L57$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004163; DARWIN-32-PIC-NEXT: L57$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004164; DARWIN-32-PIC-NEXT: popl %eax
4165; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004166; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L57$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004167; DARWIN-32-PIC-NEXT: movl 262144(%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004168; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L57$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004169; DARWIN-32-PIC-NEXT: movl %edx, 262144(%eax,%ecx,4)
4170; DARWIN-32-PIC-NEXT: ret
4171
4172; DARWIN-64-STATIC: _big00:
4173; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
4174; DARWIN-64-STATIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4175; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
4176; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4177; DARWIN-64-STATIC-NEXT: ret
4178
4179; DARWIN-64-DYNAMIC: _big00:
4180; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
4181; DARWIN-64-DYNAMIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4182; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
4183; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4184; DARWIN-64-DYNAMIC-NEXT: ret
4185
4186; DARWIN-64-PIC: _big00:
4187; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
4188; DARWIN-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4189; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), %rcx
4190; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4191; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004192}
4193
4194define void @big01(i64 %i) nounwind {
4195entry:
4196 %.sum = add i64 %i, 65536
4197 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
4198 store i32* %0, i32** @ptr, align 8
4199 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004200; LINUX-64-STATIC: big01:
4201; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00004202; LINUX-64-STATIC: movq %rax, ptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00004203; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004204
4205; LINUX-32-STATIC: big01:
4206; LINUX-32-STATIC: movl 4(%esp), %eax
4207; LINUX-32-STATIC-NEXT: leal dst+262144(,%eax,4), %eax
4208; LINUX-32-STATIC-NEXT: movl %eax, ptr
4209; LINUX-32-STATIC-NEXT: ret
4210
4211; LINUX-32-PIC: big01:
4212; LINUX-32-PIC: movl 4(%esp), %eax
4213; LINUX-32-PIC-NEXT: leal dst+262144(,%eax,4), %eax
4214; LINUX-32-PIC-NEXT: movl %eax, ptr
4215; LINUX-32-PIC-NEXT: ret
4216
4217; LINUX-64-PIC: big01:
4218; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
4219; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4220; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
4221; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
4222; LINUX-64-PIC-NEXT: ret
4223
4224; DARWIN-32-STATIC: _big01:
4225; DARWIN-32-STATIC: movl 4(%esp), %eax
4226; DARWIN-32-STATIC-NEXT: leal _dst+262144(,%eax,4), %eax
4227; DARWIN-32-STATIC-NEXT: movl %eax, _ptr
4228; DARWIN-32-STATIC-NEXT: ret
4229
4230; DARWIN-32-DYNAMIC: _big01:
4231; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4232; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %ecx
4233; DARWIN-32-DYNAMIC-NEXT: leal 262144(%ecx,%eax,4), %eax
4234; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %ecx
4235; DARWIN-32-DYNAMIC-NEXT: movl %eax, (%ecx)
4236; DARWIN-32-DYNAMIC-NEXT: ret
4237
4238; DARWIN-32-PIC: _big01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004239; DARWIN-32-PIC: calll L58$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004240; DARWIN-32-PIC-NEXT: L58$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004241; DARWIN-32-PIC-NEXT: popl %eax
4242; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004243; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L58$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004244; DARWIN-32-PIC-NEXT: leal 262144(%edx,%ecx,4), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004245; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L58$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004246; DARWIN-32-PIC-NEXT: movl %ecx, (%eax)
4247; DARWIN-32-PIC-NEXT: ret
4248
4249; DARWIN-64-STATIC: _big01:
4250; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
4251; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4252; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
4253; DARWIN-64-STATIC-NEXT: movq %rax, (%rcx)
4254; DARWIN-64-STATIC-NEXT: ret
4255
4256; DARWIN-64-DYNAMIC: _big01:
4257; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
4258; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4259; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
4260; DARWIN-64-DYNAMIC-NEXT: movq %rax, (%rcx)
4261; DARWIN-64-DYNAMIC-NEXT: ret
4262
4263; DARWIN-64-PIC: _big01:
4264; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
4265; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4266; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
4267; DARWIN-64-PIC-NEXT: movq %rax, (%rcx)
4268; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004269}
4270
4271define void @big02(i64 %i) nounwind {
4272entry:
4273 %0 = load i32** @ptr, align 8
4274 %1 = add i64 %i, 65536
4275 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
4276 %3 = load i32* %2, align 4
4277 %4 = getelementptr i32* %0, i64 %1
4278 store i32 %3, i32* %4, align 4
4279 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004280; LINUX-64-STATIC: big02:
4281; LINUX-64-STATIC: movl src+262144(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00004282; LINUX-64-STATIC: movq ptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00004283; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4)
4284; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004285
4286; LINUX-32-STATIC: big02:
4287; LINUX-32-STATIC: movl 4(%esp), %eax
4288; LINUX-32-STATIC-NEXT: movl src+262144(,%eax,4), %ecx
4289; LINUX-32-STATIC-NEXT: movl ptr, %edx
4290; LINUX-32-STATIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4291; LINUX-32-STATIC-NEXT: ret
4292
4293; LINUX-32-PIC: big02:
4294; LINUX-32-PIC: movl 4(%esp), %eax
4295; LINUX-32-PIC-NEXT: movl src+262144(,%eax,4), %ecx
4296; LINUX-32-PIC-NEXT: movl ptr, %edx
4297; LINUX-32-PIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4298; LINUX-32-PIC-NEXT: ret
4299
4300; LINUX-64-PIC: big02:
4301; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
4302; LINUX-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4303; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), %rcx
4304; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
4305; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4306; LINUX-64-PIC-NEXT: ret
4307
4308; DARWIN-32-STATIC: _big02:
4309; DARWIN-32-STATIC: movl 4(%esp), %eax
4310; DARWIN-32-STATIC-NEXT: movl _src+262144(,%eax,4), %ecx
4311; DARWIN-32-STATIC-NEXT: movl _ptr, %edx
4312; DARWIN-32-STATIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4313; DARWIN-32-STATIC-NEXT: ret
4314
4315; DARWIN-32-DYNAMIC: _big02:
4316; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4317; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, %ecx
4318; DARWIN-32-DYNAMIC-NEXT: movl 262144(%ecx,%eax,4), %ecx
4319; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, %edx
4320; DARWIN-32-DYNAMIC-NEXT: movl (%edx), %edx
4321; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4322; DARWIN-32-DYNAMIC-NEXT: ret
4323
4324; DARWIN-32-PIC: _big02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004325; DARWIN-32-PIC: calll L59$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004326; DARWIN-32-PIC-NEXT: L59$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004327; DARWIN-32-PIC-NEXT: popl %eax
4328; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004329; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L59$pb(%eax), %edx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004330; DARWIN-32-PIC-NEXT: movl 262144(%edx,%ecx,4), %edx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004331; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L59$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004332; DARWIN-32-PIC-NEXT: movl (%eax), %eax
4333; DARWIN-32-PIC-NEXT: movl %edx, 262144(%eax,%ecx,4)
4334; DARWIN-32-PIC-NEXT: ret
4335
4336; DARWIN-64-STATIC: _big02:
4337; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
4338; DARWIN-64-STATIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4339; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
4340; DARWIN-64-STATIC-NEXT: movq (%rcx), %rcx
4341; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4342; DARWIN-64-STATIC-NEXT: ret
4343
4344; DARWIN-64-DYNAMIC: _big02:
4345; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
4346; DARWIN-64-DYNAMIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4347; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
4348; DARWIN-64-DYNAMIC-NEXT: movq (%rcx), %rcx
4349; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4350; DARWIN-64-DYNAMIC-NEXT: ret
4351
4352; DARWIN-64-PIC: _big02:
4353; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
4354; DARWIN-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4355; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), %rcx
4356; DARWIN-64-PIC-NEXT: movq (%rcx), %rcx
4357; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4358; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004359}
4360
4361define void @big03(i64 %i) nounwind {
4362entry:
4363 %0 = add i64 %i, 65536
4364 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
4365 %2 = load i32* %1, align 4
4366 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
4367 store i32 %2, i32* %3, align 4
4368 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004369; LINUX-64-STATIC: big03:
4370; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), %eax
4371; LINUX-64-STATIC: movl %eax, ddst+262144(,%rdi,4)
4372; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004373
4374; LINUX-32-STATIC: big03:
4375; LINUX-32-STATIC: movl 4(%esp), %eax
4376; LINUX-32-STATIC-NEXT: movl dsrc+262144(,%eax,4), %ecx
4377; LINUX-32-STATIC-NEXT: movl %ecx, ddst+262144(,%eax,4)
4378; LINUX-32-STATIC-NEXT: ret
4379
4380; LINUX-32-PIC: big03:
4381; LINUX-32-PIC: movl 4(%esp), %eax
4382; LINUX-32-PIC-NEXT: movl dsrc+262144(,%eax,4), %ecx
4383; LINUX-32-PIC-NEXT: movl %ecx, ddst+262144(,%eax,4)
4384; LINUX-32-PIC-NEXT: ret
4385
4386; LINUX-64-PIC: big03:
4387; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
4388; LINUX-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4389; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), %rcx
4390; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4391; LINUX-64-PIC-NEXT: ret
4392
4393; DARWIN-32-STATIC: _big03:
4394; DARWIN-32-STATIC: movl 4(%esp), %eax
4395; DARWIN-32-STATIC-NEXT: movl _dsrc+262144(,%eax,4), %ecx
4396; DARWIN-32-STATIC-NEXT: movl %ecx, _ddst+262144(,%eax,4)
4397; DARWIN-32-STATIC-NEXT: ret
4398
4399; DARWIN-32-DYNAMIC: _big03:
4400; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4401; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+262144(,%eax,4), %ecx
4402; DARWIN-32-DYNAMIC-NEXT: movl %ecx, _ddst+262144(,%eax,4)
4403; DARWIN-32-DYNAMIC-NEXT: ret
4404
4405; DARWIN-32-PIC: _big03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004406; DARWIN-32-PIC: calll L60$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004407; DARWIN-32-PIC-NEXT: L60$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004408; DARWIN-32-PIC-NEXT: popl %eax
4409; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004410; DARWIN-32-PIC-NEXT: movl (_dsrc-L60$pb)+262144(%eax,%ecx,4), %edx
4411; DARWIN-32-PIC-NEXT: movl %edx, (_ddst-L60$pb)+262144(%eax,%ecx,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004412; DARWIN-32-PIC-NEXT: ret
4413
4414; DARWIN-64-STATIC: _big03:
4415; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
4416; DARWIN-64-STATIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4417; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), %rcx
4418; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4419; DARWIN-64-STATIC-NEXT: ret
4420
4421; DARWIN-64-DYNAMIC: _big03:
4422; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
4423; DARWIN-64-DYNAMIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4424; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), %rcx
4425; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4426; DARWIN-64-DYNAMIC-NEXT: ret
4427
4428; DARWIN-64-PIC: _big03:
4429; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
4430; DARWIN-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4431; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), %rcx
4432; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4433; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004434}
4435
4436define void @big04(i64 %i) nounwind {
4437entry:
4438 %.sum = add i64 %i, 65536
4439 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
4440 store i32* %0, i32** @dptr, align 8
4441 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004442; LINUX-64-STATIC: big04:
4443; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax
4444; LINUX-64-STATIC: movq %rax, dptr
4445; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004446
4447; LINUX-32-STATIC: big04:
4448; LINUX-32-STATIC: movl 4(%esp), %eax
4449; LINUX-32-STATIC-NEXT: leal ddst+262144(,%eax,4), %eax
4450; LINUX-32-STATIC-NEXT: movl %eax, dptr
4451; LINUX-32-STATIC-NEXT: ret
4452
4453; LINUX-32-PIC: big04:
4454; LINUX-32-PIC: movl 4(%esp), %eax
4455; LINUX-32-PIC-NEXT: leal ddst+262144(,%eax,4), %eax
4456; LINUX-32-PIC-NEXT: movl %eax, dptr
4457; LINUX-32-PIC-NEXT: ret
4458
4459; LINUX-64-PIC: big04:
4460; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
4461; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4462; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
4463; LINUX-64-PIC-NEXT: movq %rax, (%rcx)
4464; LINUX-64-PIC-NEXT: ret
4465
4466; DARWIN-32-STATIC: _big04:
4467; DARWIN-32-STATIC: movl 4(%esp), %eax
4468; DARWIN-32-STATIC-NEXT: leal _ddst+262144(,%eax,4), %eax
4469; DARWIN-32-STATIC-NEXT: movl %eax, _dptr
4470; DARWIN-32-STATIC-NEXT: ret
4471
4472; DARWIN-32-DYNAMIC: _big04:
4473; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4474; DARWIN-32-DYNAMIC-NEXT: leal _ddst+262144(,%eax,4), %eax
4475; DARWIN-32-DYNAMIC-NEXT: movl %eax, _dptr
4476; DARWIN-32-DYNAMIC-NEXT: ret
4477
4478; DARWIN-32-PIC: _big04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004479; DARWIN-32-PIC: calll L61$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004480; DARWIN-32-PIC-NEXT: L61$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004481; DARWIN-32-PIC-NEXT: popl %eax
4482; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004483; DARWIN-32-PIC-NEXT: leal (_ddst-L61$pb)+262144(%eax,%ecx,4), %ecx
4484; DARWIN-32-PIC-NEXT: movl %ecx, _dptr-L61$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004485; DARWIN-32-PIC-NEXT: ret
4486
4487; DARWIN-64-STATIC: _big04:
4488; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
4489; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4490; DARWIN-64-STATIC-NEXT: movq %rax, _dptr(%rip)
4491; DARWIN-64-STATIC-NEXT: ret
4492
4493; DARWIN-64-DYNAMIC: _big04:
4494; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
4495; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4496; DARWIN-64-DYNAMIC-NEXT: movq %rax, _dptr(%rip)
4497; DARWIN-64-DYNAMIC-NEXT: ret
4498
4499; DARWIN-64-PIC: _big04:
4500; DARWIN-64-PIC: leaq _ddst(%rip), %rax
4501; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4502; DARWIN-64-PIC-NEXT: movq %rax, _dptr(%rip)
4503; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004504}
4505
4506define void @big05(i64 %i) nounwind {
4507entry:
4508 %0 = load i32** @dptr, align 8
4509 %1 = add i64 %i, 65536
4510 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
4511 %3 = load i32* %2, align 4
4512 %4 = getelementptr i32* %0, i64 %1
4513 store i32 %3, i32* %4, align 4
4514 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004515; LINUX-64-STATIC: big05:
4516; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00004517; LINUX-64-STATIC: movq dptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00004518; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4)
4519; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004520
4521; LINUX-32-STATIC: big05:
4522; LINUX-32-STATIC: movl 4(%esp), %eax
4523; LINUX-32-STATIC-NEXT: movl dsrc+262144(,%eax,4), %ecx
4524; LINUX-32-STATIC-NEXT: movl dptr, %edx
4525; LINUX-32-STATIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4526; LINUX-32-STATIC-NEXT: ret
4527
4528; LINUX-32-PIC: big05:
4529; LINUX-32-PIC: movl 4(%esp), %eax
4530; LINUX-32-PIC-NEXT: movl dsrc+262144(,%eax,4), %ecx
4531; LINUX-32-PIC-NEXT: movl dptr, %edx
4532; LINUX-32-PIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4533; LINUX-32-PIC-NEXT: ret
4534
4535; LINUX-64-PIC: big05:
4536; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
4537; LINUX-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4538; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), %rcx
4539; LINUX-64-PIC-NEXT: movq (%rcx), %rcx
4540; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4541; LINUX-64-PIC-NEXT: ret
4542
4543; DARWIN-32-STATIC: _big05:
4544; DARWIN-32-STATIC: movl 4(%esp), %eax
4545; DARWIN-32-STATIC-NEXT: movl _dsrc+262144(,%eax,4), %ecx
4546; DARWIN-32-STATIC-NEXT: movl _dptr, %edx
4547; DARWIN-32-STATIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4548; DARWIN-32-STATIC-NEXT: ret
4549
4550; DARWIN-32-DYNAMIC: _big05:
4551; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4552; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+262144(,%eax,4), %ecx
4553; DARWIN-32-DYNAMIC-NEXT: movl _dptr, %edx
4554; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4555; DARWIN-32-DYNAMIC-NEXT: ret
4556
4557; DARWIN-32-PIC: _big05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004558; DARWIN-32-PIC: calll L62$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004559; DARWIN-32-PIC-NEXT: L62$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004560; DARWIN-32-PIC-NEXT: popl %eax
4561; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004562; DARWIN-32-PIC-NEXT: movl (_dsrc-L62$pb)+262144(%eax,%ecx,4), %edx
4563; DARWIN-32-PIC-NEXT: movl _dptr-L62$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004564; DARWIN-32-PIC-NEXT: movl %edx, 262144(%eax,%ecx,4)
4565; DARWIN-32-PIC-NEXT: ret
4566
4567; DARWIN-64-STATIC: _big05:
4568; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
4569; DARWIN-64-STATIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4570; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), %rcx
4571; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4572; DARWIN-64-STATIC-NEXT: ret
4573
4574; DARWIN-64-DYNAMIC: _big05:
4575; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
4576; DARWIN-64-DYNAMIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4577; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), %rcx
4578; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4579; DARWIN-64-DYNAMIC-NEXT: ret
4580
4581; DARWIN-64-PIC: _big05:
4582; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
4583; DARWIN-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4584; DARWIN-64-PIC-NEXT: movq _dptr(%rip), %rcx
4585; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4586; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004587}
4588
4589define void @big06(i64 %i) nounwind {
4590entry:
4591 %0 = add i64 %i, 65536
4592 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
4593 %2 = load i32* %1, align 4
4594 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
4595 store i32 %2, i32* %3, align 4
4596 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004597; LINUX-64-STATIC: big06:
4598; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), %eax
4599; LINUX-64-STATIC: movl %eax, ldst+262144(,%rdi,4)
4600; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004601
4602; LINUX-32-STATIC: big06:
4603; LINUX-32-STATIC: movl 4(%esp), %eax
4604; LINUX-32-STATIC-NEXT: movl lsrc+262144(,%eax,4), %ecx
4605; LINUX-32-STATIC-NEXT: movl %ecx, ldst+262144(,%eax,4)
4606; LINUX-32-STATIC-NEXT: ret
4607
4608; LINUX-32-PIC: big06:
4609; LINUX-32-PIC: movl 4(%esp), %eax
4610; LINUX-32-PIC-NEXT: movl lsrc+262144(,%eax,4), %ecx
4611; LINUX-32-PIC-NEXT: movl %ecx, ldst+262144(,%eax,4)
4612; LINUX-32-PIC-NEXT: ret
4613
4614; LINUX-64-PIC: big06:
4615; LINUX-64-PIC: leaq lsrc(%rip), %rax
4616; LINUX-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4617; LINUX-64-PIC-NEXT: leaq ldst(%rip), %rcx
4618; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4619; LINUX-64-PIC-NEXT: ret
4620
4621; DARWIN-32-STATIC: _big06:
4622; DARWIN-32-STATIC: movl 4(%esp), %eax
4623; DARWIN-32-STATIC-NEXT: movl _lsrc+262144(,%eax,4), %ecx
4624; DARWIN-32-STATIC-NEXT: movl %ecx, _ldst+262144(,%eax,4)
4625; DARWIN-32-STATIC-NEXT: ret
4626
4627; DARWIN-32-DYNAMIC: _big06:
4628; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4629; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+262144(,%eax,4), %ecx
4630; DARWIN-32-DYNAMIC-NEXT: movl %ecx, _ldst+262144(,%eax,4)
4631; DARWIN-32-DYNAMIC-NEXT: ret
4632
4633; DARWIN-32-PIC: _big06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004634; DARWIN-32-PIC: calll L63$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004635; DARWIN-32-PIC-NEXT: L63$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004636; DARWIN-32-PIC-NEXT: popl %eax
4637; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004638; DARWIN-32-PIC-NEXT: movl (_lsrc-L63$pb)+262144(%eax,%ecx,4), %edx
4639; DARWIN-32-PIC-NEXT: movl %edx, (_ldst-L63$pb)+262144(%eax,%ecx,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004640; DARWIN-32-PIC-NEXT: ret
4641
4642; DARWIN-64-STATIC: _big06:
4643; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
4644; DARWIN-64-STATIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4645; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), %rcx
4646; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4647; DARWIN-64-STATIC-NEXT: ret
4648
4649; DARWIN-64-DYNAMIC: _big06:
4650; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
4651; DARWIN-64-DYNAMIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4652; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), %rcx
4653; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4654; DARWIN-64-DYNAMIC-NEXT: ret
4655
4656; DARWIN-64-PIC: _big06:
4657; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
4658; DARWIN-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4659; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), %rcx
4660; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4661; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004662}
4663
4664define void @big07(i64 %i) nounwind {
4665entry:
4666 %.sum = add i64 %i, 65536
4667 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
4668 store i32* %0, i32** @lptr, align 8
4669 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004670; LINUX-64-STATIC: big07:
4671; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax
4672; LINUX-64-STATIC: movq %rax, lptr
4673; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004674
4675; LINUX-32-STATIC: big07:
4676; LINUX-32-STATIC: movl 4(%esp), %eax
4677; LINUX-32-STATIC-NEXT: leal ldst+262144(,%eax,4), %eax
4678; LINUX-32-STATIC-NEXT: movl %eax, lptr
4679; LINUX-32-STATIC-NEXT: ret
4680
4681; LINUX-32-PIC: big07:
4682; LINUX-32-PIC: movl 4(%esp), %eax
4683; LINUX-32-PIC-NEXT: leal ldst+262144(,%eax,4), %eax
4684; LINUX-32-PIC-NEXT: movl %eax, lptr
4685; LINUX-32-PIC-NEXT: ret
4686
4687; LINUX-64-PIC: big07:
4688; LINUX-64-PIC: leaq ldst(%rip), %rax
4689; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4690; LINUX-64-PIC-NEXT: movq %rax, lptr(%rip)
4691; LINUX-64-PIC-NEXT: ret
4692
4693; DARWIN-32-STATIC: _big07:
4694; DARWIN-32-STATIC: movl 4(%esp), %eax
4695; DARWIN-32-STATIC-NEXT: leal _ldst+262144(,%eax,4), %eax
4696; DARWIN-32-STATIC-NEXT: movl %eax, _lptr
4697; DARWIN-32-STATIC-NEXT: ret
4698
4699; DARWIN-32-DYNAMIC: _big07:
4700; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4701; DARWIN-32-DYNAMIC-NEXT: leal _ldst+262144(,%eax,4), %eax
4702; DARWIN-32-DYNAMIC-NEXT: movl %eax, _lptr
4703; DARWIN-32-DYNAMIC-NEXT: ret
4704
4705; DARWIN-32-PIC: _big07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004706; DARWIN-32-PIC: calll L64$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004707; DARWIN-32-PIC-NEXT: L64$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004708; DARWIN-32-PIC-NEXT: popl %eax
4709; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004710; DARWIN-32-PIC-NEXT: leal (_ldst-L64$pb)+262144(%eax,%ecx,4), %ecx
4711; DARWIN-32-PIC-NEXT: movl %ecx, _lptr-L64$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004712; DARWIN-32-PIC-NEXT: ret
4713
4714; DARWIN-64-STATIC: _big07:
4715; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
4716; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4717; DARWIN-64-STATIC-NEXT: movq %rax, _lptr(%rip)
4718; DARWIN-64-STATIC-NEXT: ret
4719
4720; DARWIN-64-DYNAMIC: _big07:
4721; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
4722; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4723; DARWIN-64-DYNAMIC-NEXT: movq %rax, _lptr(%rip)
4724; DARWIN-64-DYNAMIC-NEXT: ret
4725
4726; DARWIN-64-PIC: _big07:
4727; DARWIN-64-PIC: leaq _ldst(%rip), %rax
4728; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
4729; DARWIN-64-PIC-NEXT: movq %rax, _lptr(%rip)
4730; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004731}
4732
4733define void @big08(i64 %i) nounwind {
4734entry:
4735 %0 = load i32** @lptr, align 8
4736 %1 = add i64 %i, 65536
4737 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
4738 %3 = load i32* %2, align 4
4739 %4 = getelementptr i32* %0, i64 %1
4740 store i32 %3, i32* %4, align 4
4741 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004742; LINUX-64-STATIC: big08:
4743; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00004744; LINUX-64-STATIC: movq lptr(%rip), %rcx
Chris Lattner4f066492009-07-11 20:29:19 +00004745; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4)
4746; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004747
4748; LINUX-32-STATIC: big08:
4749; LINUX-32-STATIC: movl 4(%esp), %eax
4750; LINUX-32-STATIC-NEXT: movl lsrc+262144(,%eax,4), %ecx
4751; LINUX-32-STATIC-NEXT: movl lptr, %edx
4752; LINUX-32-STATIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4753; LINUX-32-STATIC-NEXT: ret
4754
4755; LINUX-32-PIC: big08:
4756; LINUX-32-PIC: movl 4(%esp), %eax
4757; LINUX-32-PIC-NEXT: movl lsrc+262144(,%eax,4), %ecx
4758; LINUX-32-PIC-NEXT: movl lptr, %edx
4759; LINUX-32-PIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4760; LINUX-32-PIC-NEXT: ret
4761
4762; LINUX-64-PIC: big08:
4763; LINUX-64-PIC: leaq lsrc(%rip), %rax
4764; LINUX-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4765; LINUX-64-PIC-NEXT: movq lptr(%rip), %rcx
4766; LINUX-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4767; LINUX-64-PIC-NEXT: ret
4768
4769; DARWIN-32-STATIC: _big08:
4770; DARWIN-32-STATIC: movl 4(%esp), %eax
4771; DARWIN-32-STATIC-NEXT: movl _lsrc+262144(,%eax,4), %ecx
4772; DARWIN-32-STATIC-NEXT: movl _lptr, %edx
4773; DARWIN-32-STATIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4774; DARWIN-32-STATIC-NEXT: ret
4775
4776; DARWIN-32-DYNAMIC: _big08:
4777; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
4778; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+262144(,%eax,4), %ecx
4779; DARWIN-32-DYNAMIC-NEXT: movl _lptr, %edx
4780; DARWIN-32-DYNAMIC-NEXT: movl %ecx, 262144(%edx,%eax,4)
4781; DARWIN-32-DYNAMIC-NEXT: ret
4782
4783; DARWIN-32-PIC: _big08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004784; DARWIN-32-PIC: calll L65$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004785; DARWIN-32-PIC-NEXT: L65$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004786; DARWIN-32-PIC-NEXT: popl %eax
4787; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00004788; DARWIN-32-PIC-NEXT: movl (_lsrc-L65$pb)+262144(%eax,%ecx,4), %edx
4789; DARWIN-32-PIC-NEXT: movl _lptr-L65$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004790; DARWIN-32-PIC-NEXT: movl %edx, 262144(%eax,%ecx,4)
4791; DARWIN-32-PIC-NEXT: ret
4792
4793; DARWIN-64-STATIC: _big08:
4794; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
4795; DARWIN-64-STATIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4796; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), %rcx
4797; DARWIN-64-STATIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4798; DARWIN-64-STATIC-NEXT: ret
4799
4800; DARWIN-64-DYNAMIC: _big08:
4801; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
4802; DARWIN-64-DYNAMIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4803; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), %rcx
4804; DARWIN-64-DYNAMIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4805; DARWIN-64-DYNAMIC-NEXT: ret
4806
4807; DARWIN-64-PIC: _big08:
4808; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
4809; DARWIN-64-PIC-NEXT: movl 262144(%rax,%rdi,4), %eax
4810; DARWIN-64-PIC-NEXT: movq _lptr(%rip), %rcx
4811; DARWIN-64-PIC-NEXT: movl %eax, 262144(%rcx,%rdi,4)
4812; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004813}
4814
4815define i8* @bar00() nounwind {
4816entry:
4817 ret i8* bitcast ([131072 x i32]* @src to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004818; LINUX-64-STATIC: bar00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004819; LINUX-64-STATIC: movl $src, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004820; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004821
4822; LINUX-32-STATIC: bar00:
4823; LINUX-32-STATIC: movl $src, %eax
4824; LINUX-32-STATIC-NEXT: ret
4825
4826; LINUX-32-PIC: bar00:
4827; LINUX-32-PIC: movl $src, %eax
4828; LINUX-32-PIC-NEXT: ret
4829
4830; LINUX-64-PIC: bar00:
4831; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
4832; LINUX-64-PIC-NEXT: ret
4833
4834; DARWIN-32-STATIC: _bar00:
4835; DARWIN-32-STATIC: movl $_src, %eax
4836; DARWIN-32-STATIC-NEXT: ret
4837
4838; DARWIN-32-DYNAMIC: _bar00:
4839; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
4840; DARWIN-32-DYNAMIC-NEXT: ret
4841
4842; DARWIN-32-PIC: _bar00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004843; DARWIN-32-PIC: calll L66$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004844; DARWIN-32-PIC-NEXT: L66$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004845; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00004846; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L66$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004847; DARWIN-32-PIC-NEXT: ret
4848
4849; DARWIN-64-STATIC: _bar00:
4850; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
4851; DARWIN-64-STATIC-NEXT: ret
4852
4853; DARWIN-64-DYNAMIC: _bar00:
4854; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
4855; DARWIN-64-DYNAMIC-NEXT: ret
4856
4857; DARWIN-64-PIC: _bar00:
4858; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
4859; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004860}
4861
4862define i8* @bxr00() nounwind {
4863entry:
4864 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004865; LINUX-64-STATIC: bxr00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004866; LINUX-64-STATIC: movl $xsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004867; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004868
4869; LINUX-32-STATIC: bxr00:
4870; LINUX-32-STATIC: movl $xsrc, %eax
4871; LINUX-32-STATIC-NEXT: ret
4872
4873; LINUX-32-PIC: bxr00:
4874; LINUX-32-PIC: movl $xsrc, %eax
4875; LINUX-32-PIC-NEXT: ret
4876
4877; LINUX-64-PIC: bxr00:
4878; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
4879; LINUX-64-PIC-NEXT: ret
4880
4881; DARWIN-32-STATIC: _bxr00:
4882; DARWIN-32-STATIC: movl $_xsrc, %eax
4883; DARWIN-32-STATIC-NEXT: ret
4884
4885; DARWIN-32-DYNAMIC: _bxr00:
4886; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
4887; DARWIN-32-DYNAMIC-NEXT: ret
4888
4889; DARWIN-32-PIC: _bxr00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004890; DARWIN-32-PIC: calll L67$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004891; DARWIN-32-PIC-NEXT: L67$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004892; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00004893; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L67$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004894; DARWIN-32-PIC-NEXT: ret
4895
4896; DARWIN-64-STATIC: _bxr00:
4897; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
4898; DARWIN-64-STATIC-NEXT: ret
4899
4900; DARWIN-64-DYNAMIC: _bxr00:
4901; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
4902; DARWIN-64-DYNAMIC-NEXT: ret
4903
4904; DARWIN-64-PIC: _bxr00:
4905; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
4906; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004907}
4908
4909define i8* @bar01() nounwind {
4910entry:
4911 ret i8* bitcast ([131072 x i32]* @dst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004912; LINUX-64-STATIC: bar01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004913; LINUX-64-STATIC: movl $dst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004914; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004915
4916; LINUX-32-STATIC: bar01:
4917; LINUX-32-STATIC: movl $dst, %eax
4918; LINUX-32-STATIC-NEXT: ret
4919
4920; LINUX-32-PIC: bar01:
4921; LINUX-32-PIC: movl $dst, %eax
4922; LINUX-32-PIC-NEXT: ret
4923
4924; LINUX-64-PIC: bar01:
4925; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
4926; LINUX-64-PIC-NEXT: ret
4927
4928; DARWIN-32-STATIC: _bar01:
4929; DARWIN-32-STATIC: movl $_dst, %eax
4930; DARWIN-32-STATIC-NEXT: ret
4931
4932; DARWIN-32-DYNAMIC: _bar01:
4933; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax
4934; DARWIN-32-DYNAMIC-NEXT: ret
4935
4936; DARWIN-32-PIC: _bar01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004937; DARWIN-32-PIC: calll L68$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004938; DARWIN-32-PIC-NEXT: L68$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004939; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00004940; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L68$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004941; DARWIN-32-PIC-NEXT: ret
4942
4943; DARWIN-64-STATIC: _bar01:
4944; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
4945; DARWIN-64-STATIC-NEXT: ret
4946
4947; DARWIN-64-DYNAMIC: _bar01:
4948; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
4949; DARWIN-64-DYNAMIC-NEXT: ret
4950
4951; DARWIN-64-PIC: _bar01:
4952; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
4953; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004954}
4955
4956define i8* @bxr01() nounwind {
4957entry:
4958 ret i8* bitcast ([32 x i32]* @xdst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004959; LINUX-64-STATIC: bxr01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004960; LINUX-64-STATIC: movl $xdst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004961; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004962
4963; LINUX-32-STATIC: bxr01:
4964; LINUX-32-STATIC: movl $xdst, %eax
4965; LINUX-32-STATIC-NEXT: ret
4966
4967; LINUX-32-PIC: bxr01:
4968; LINUX-32-PIC: movl $xdst, %eax
4969; LINUX-32-PIC-NEXT: ret
4970
4971; LINUX-64-PIC: bxr01:
4972; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
4973; LINUX-64-PIC-NEXT: ret
4974
4975; DARWIN-32-STATIC: _bxr01:
4976; DARWIN-32-STATIC: movl $_xdst, %eax
4977; DARWIN-32-STATIC-NEXT: ret
4978
4979; DARWIN-32-DYNAMIC: _bxr01:
4980; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax
4981; DARWIN-32-DYNAMIC-NEXT: ret
4982
4983; DARWIN-32-PIC: _bxr01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004984; DARWIN-32-PIC: calll L69$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004985; DARWIN-32-PIC-NEXT: L69$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004986; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00004987; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L69$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004988; DARWIN-32-PIC-NEXT: ret
4989
4990; DARWIN-64-STATIC: _bxr01:
4991; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
4992; DARWIN-64-STATIC-NEXT: ret
4993
4994; DARWIN-64-DYNAMIC: _bxr01:
4995; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
4996; DARWIN-64-DYNAMIC-NEXT: ret
4997
4998; DARWIN-64-PIC: _bxr01:
4999; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
5000; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005001}
5002
5003define i8* @bar02() nounwind {
5004entry:
5005 ret i8* bitcast (i32** @ptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005006; LINUX-64-STATIC: bar02:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005007; LINUX-64-STATIC: movl $ptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005008; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005009
5010; LINUX-32-STATIC: bar02:
5011; LINUX-32-STATIC: movl $ptr, %eax
5012; LINUX-32-STATIC-NEXT: ret
5013
5014; LINUX-32-PIC: bar02:
5015; LINUX-32-PIC: movl $ptr, %eax
5016; LINUX-32-PIC-NEXT: ret
5017
5018; LINUX-64-PIC: bar02:
5019; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), %rax
5020; LINUX-64-PIC-NEXT: ret
5021
5022; DARWIN-32-STATIC: _bar02:
5023; DARWIN-32-STATIC: movl $_ptr, %eax
5024; DARWIN-32-STATIC-NEXT: ret
5025
5026; DARWIN-32-DYNAMIC: _bar02:
5027; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, %eax
5028; DARWIN-32-DYNAMIC-NEXT: ret
5029
5030; DARWIN-32-PIC: _bar02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005031; DARWIN-32-PIC: calll L70$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005032; DARWIN-32-PIC-NEXT: L70$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005033; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005034; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L70$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005035; DARWIN-32-PIC-NEXT: ret
5036
5037; DARWIN-64-STATIC: _bar02:
5038; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), %rax
5039; DARWIN-64-STATIC-NEXT: ret
5040
5041; DARWIN-64-DYNAMIC: _bar02:
5042; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), %rax
5043; DARWIN-64-DYNAMIC-NEXT: ret
5044
5045; DARWIN-64-PIC: _bar02:
5046; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), %rax
5047; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005048}
5049
5050define i8* @bar03() nounwind {
5051entry:
5052 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005053; LINUX-64-STATIC: bar03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005054; LINUX-64-STATIC: movl $dsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005055; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005056
5057; LINUX-32-STATIC: bar03:
5058; LINUX-32-STATIC: movl $dsrc, %eax
5059; LINUX-32-STATIC-NEXT: ret
5060
5061; LINUX-32-PIC: bar03:
5062; LINUX-32-PIC: movl $dsrc, %eax
5063; LINUX-32-PIC-NEXT: ret
5064
5065; LINUX-64-PIC: bar03:
5066; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
5067; LINUX-64-PIC-NEXT: ret
5068
5069; DARWIN-32-STATIC: _bar03:
5070; DARWIN-32-STATIC: movl $_dsrc, %eax
5071; DARWIN-32-STATIC-NEXT: ret
5072
5073; DARWIN-32-DYNAMIC: _bar03:
5074; DARWIN-32-DYNAMIC: movl $_dsrc, %eax
5075; DARWIN-32-DYNAMIC-NEXT: ret
5076
5077; DARWIN-32-PIC: _bar03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005078; DARWIN-32-PIC: calll L71$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005079; DARWIN-32-PIC-NEXT: L71$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005080; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005081; DARWIN-32-PIC-NEXT: leal _dsrc-L71$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005082; DARWIN-32-PIC-NEXT: ret
5083
5084; DARWIN-64-STATIC: _bar03:
5085; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
5086; DARWIN-64-STATIC-NEXT: ret
5087
5088; DARWIN-64-DYNAMIC: _bar03:
5089; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
5090; DARWIN-64-DYNAMIC-NEXT: ret
5091
5092; DARWIN-64-PIC: _bar03:
5093; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
5094; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005095}
5096
5097define i8* @bar04() nounwind {
5098entry:
5099 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005100; LINUX-64-STATIC: bar04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005101; LINUX-64-STATIC: movl $ddst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005102; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005103
5104; LINUX-32-STATIC: bar04:
5105; LINUX-32-STATIC: movl $ddst, %eax
5106; LINUX-32-STATIC-NEXT: ret
5107
5108; LINUX-32-PIC: bar04:
5109; LINUX-32-PIC: movl $ddst, %eax
5110; LINUX-32-PIC-NEXT: ret
5111
5112; LINUX-64-PIC: bar04:
5113; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
5114; LINUX-64-PIC-NEXT: ret
5115
5116; DARWIN-32-STATIC: _bar04:
5117; DARWIN-32-STATIC: movl $_ddst, %eax
5118; DARWIN-32-STATIC-NEXT: ret
5119
5120; DARWIN-32-DYNAMIC: _bar04:
5121; DARWIN-32-DYNAMIC: movl $_ddst, %eax
5122; DARWIN-32-DYNAMIC-NEXT: ret
5123
5124; DARWIN-32-PIC: _bar04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005125; DARWIN-32-PIC: calll L72$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005126; DARWIN-32-PIC-NEXT: L72$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005127; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005128; DARWIN-32-PIC-NEXT: leal _ddst-L72$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005129; DARWIN-32-PIC-NEXT: ret
5130
5131; DARWIN-64-STATIC: _bar04:
5132; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
5133; DARWIN-64-STATIC-NEXT: ret
5134
5135; DARWIN-64-DYNAMIC: _bar04:
5136; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
5137; DARWIN-64-DYNAMIC-NEXT: ret
5138
5139; DARWIN-64-PIC: _bar04:
5140; DARWIN-64-PIC: leaq _ddst(%rip), %rax
5141; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005142}
5143
5144define i8* @bar05() nounwind {
5145entry:
5146 ret i8* bitcast (i32** @dptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005147; LINUX-64-STATIC: bar05:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005148; LINUX-64-STATIC: movl $dptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005149; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005150
5151; LINUX-32-STATIC: bar05:
5152; LINUX-32-STATIC: movl $dptr, %eax
5153; LINUX-32-STATIC-NEXT: ret
5154
5155; LINUX-32-PIC: bar05:
5156; LINUX-32-PIC: movl $dptr, %eax
5157; LINUX-32-PIC-NEXT: ret
5158
5159; LINUX-64-PIC: bar05:
5160; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), %rax
5161; LINUX-64-PIC-NEXT: ret
5162
5163; DARWIN-32-STATIC: _bar05:
5164; DARWIN-32-STATIC: movl $_dptr, %eax
5165; DARWIN-32-STATIC-NEXT: ret
5166
5167; DARWIN-32-DYNAMIC: _bar05:
5168; DARWIN-32-DYNAMIC: movl $_dptr, %eax
5169; DARWIN-32-DYNAMIC-NEXT: ret
5170
5171; DARWIN-32-PIC: _bar05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005172; DARWIN-32-PIC: calll L73$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005173; DARWIN-32-PIC-NEXT: L73$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005174; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005175; DARWIN-32-PIC-NEXT: leal _dptr-L73$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005176; DARWIN-32-PIC-NEXT: ret
5177
5178; DARWIN-64-STATIC: _bar05:
5179; DARWIN-64-STATIC: leaq _dptr(%rip), %rax
5180; DARWIN-64-STATIC-NEXT: ret
5181
5182; DARWIN-64-DYNAMIC: _bar05:
5183; DARWIN-64-DYNAMIC: leaq _dptr(%rip), %rax
5184; DARWIN-64-DYNAMIC-NEXT: ret
5185
5186; DARWIN-64-PIC: _bar05:
5187; DARWIN-64-PIC: leaq _dptr(%rip), %rax
5188; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005189}
5190
5191define i8* @bar06() nounwind {
5192entry:
5193 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005194; LINUX-64-STATIC: bar06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005195; LINUX-64-STATIC: movl $lsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005196; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005197
5198; LINUX-32-STATIC: bar06:
5199; LINUX-32-STATIC: movl $lsrc, %eax
5200; LINUX-32-STATIC-NEXT: ret
5201
5202; LINUX-32-PIC: bar06:
5203; LINUX-32-PIC: movl $lsrc, %eax
5204; LINUX-32-PIC-NEXT: ret
5205
5206; LINUX-64-PIC: bar06:
5207; LINUX-64-PIC: leaq lsrc(%rip), %rax
5208; LINUX-64-PIC-NEXT: ret
5209
5210; DARWIN-32-STATIC: _bar06:
5211; DARWIN-32-STATIC: movl $_lsrc, %eax
5212; DARWIN-32-STATIC-NEXT: ret
5213
5214; DARWIN-32-DYNAMIC: _bar06:
5215; DARWIN-32-DYNAMIC: movl $_lsrc, %eax
5216; DARWIN-32-DYNAMIC-NEXT: ret
5217
5218; DARWIN-32-PIC: _bar06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005219; DARWIN-32-PIC: calll L74$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005220; DARWIN-32-PIC-NEXT: L74$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005221; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005222; DARWIN-32-PIC-NEXT: leal _lsrc-L74$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005223; DARWIN-32-PIC-NEXT: ret
5224
5225; DARWIN-64-STATIC: _bar06:
5226; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
5227; DARWIN-64-STATIC-NEXT: ret
5228
5229; DARWIN-64-DYNAMIC: _bar06:
5230; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
5231; DARWIN-64-DYNAMIC-NEXT: ret
5232
5233; DARWIN-64-PIC: _bar06:
5234; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
5235; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005236}
5237
5238define i8* @bar07() nounwind {
5239entry:
5240 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005241; LINUX-64-STATIC: bar07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005242; LINUX-64-STATIC: movl $ldst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005243; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005244
5245; LINUX-32-STATIC: bar07:
5246; LINUX-32-STATIC: movl $ldst, %eax
5247; LINUX-32-STATIC-NEXT: ret
5248
5249; LINUX-32-PIC: bar07:
5250; LINUX-32-PIC: movl $ldst, %eax
5251; LINUX-32-PIC-NEXT: ret
5252
5253; LINUX-64-PIC: bar07:
5254; LINUX-64-PIC: leaq ldst(%rip), %rax
5255; LINUX-64-PIC-NEXT: ret
5256
5257; DARWIN-32-STATIC: _bar07:
5258; DARWIN-32-STATIC: movl $_ldst, %eax
5259; DARWIN-32-STATIC-NEXT: ret
5260
5261; DARWIN-32-DYNAMIC: _bar07:
5262; DARWIN-32-DYNAMIC: movl $_ldst, %eax
5263; DARWIN-32-DYNAMIC-NEXT: ret
5264
5265; DARWIN-32-PIC: _bar07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005266; DARWIN-32-PIC: calll L75$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005267; DARWIN-32-PIC-NEXT: L75$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005268; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005269; DARWIN-32-PIC-NEXT: leal _ldst-L75$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005270; DARWIN-32-PIC-NEXT: ret
5271
5272; DARWIN-64-STATIC: _bar07:
5273; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
5274; DARWIN-64-STATIC-NEXT: ret
5275
5276; DARWIN-64-DYNAMIC: _bar07:
5277; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
5278; DARWIN-64-DYNAMIC-NEXT: ret
5279
5280; DARWIN-64-PIC: _bar07:
5281; DARWIN-64-PIC: leaq _ldst(%rip), %rax
5282; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005283}
5284
5285define i8* @bar08() nounwind {
5286entry:
5287 ret i8* bitcast (i32** @lptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005288; LINUX-64-STATIC: bar08:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005289; LINUX-64-STATIC: movl $lptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005290; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005291
5292; LINUX-32-STATIC: bar08:
5293; LINUX-32-STATIC: movl $lptr, %eax
5294; LINUX-32-STATIC-NEXT: ret
5295
5296; LINUX-32-PIC: bar08:
5297; LINUX-32-PIC: movl $lptr, %eax
5298; LINUX-32-PIC-NEXT: ret
5299
5300; LINUX-64-PIC: bar08:
5301; LINUX-64-PIC: leaq lptr(%rip), %rax
5302; LINUX-64-PIC-NEXT: ret
5303
5304; DARWIN-32-STATIC: _bar08:
5305; DARWIN-32-STATIC: movl $_lptr, %eax
5306; DARWIN-32-STATIC-NEXT: ret
5307
5308; DARWIN-32-DYNAMIC: _bar08:
5309; DARWIN-32-DYNAMIC: movl $_lptr, %eax
5310; DARWIN-32-DYNAMIC-NEXT: ret
5311
5312; DARWIN-32-PIC: _bar08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005313; DARWIN-32-PIC: calll L76$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005314; DARWIN-32-PIC-NEXT: L76$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005315; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005316; DARWIN-32-PIC-NEXT: leal _lptr-L76$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005317; DARWIN-32-PIC-NEXT: ret
5318
5319; DARWIN-64-STATIC: _bar08:
5320; DARWIN-64-STATIC: leaq _lptr(%rip), %rax
5321; DARWIN-64-STATIC-NEXT: ret
5322
5323; DARWIN-64-DYNAMIC: _bar08:
5324; DARWIN-64-DYNAMIC: leaq _lptr(%rip), %rax
5325; DARWIN-64-DYNAMIC-NEXT: ret
5326
5327; DARWIN-64-PIC: _bar08:
5328; DARWIN-64-PIC: leaq _lptr(%rip), %rax
5329; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005330}
5331
5332define i8* @har00() nounwind {
5333entry:
5334 ret i8* bitcast ([131072 x i32]* @src to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005335; LINUX-64-STATIC: har00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005336; LINUX-64-STATIC: movl $src, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005337; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005338
5339; LINUX-32-STATIC: har00:
5340; LINUX-32-STATIC: movl $src, %eax
5341; LINUX-32-STATIC-NEXT: ret
5342
5343; LINUX-32-PIC: har00:
5344; LINUX-32-PIC: movl $src, %eax
5345; LINUX-32-PIC-NEXT: ret
5346
5347; LINUX-64-PIC: har00:
5348; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
5349; LINUX-64-PIC-NEXT: ret
5350
5351; DARWIN-32-STATIC: _har00:
5352; DARWIN-32-STATIC: movl $_src, %eax
5353; DARWIN-32-STATIC-NEXT: ret
5354
5355; DARWIN-32-DYNAMIC: _har00:
5356; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
5357; DARWIN-32-DYNAMIC-NEXT: ret
5358
5359; DARWIN-32-PIC: _har00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005360; DARWIN-32-PIC: calll L77$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005361; DARWIN-32-PIC-NEXT: L77$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005362; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005363; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L77$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005364; DARWIN-32-PIC-NEXT: ret
5365
5366; DARWIN-64-STATIC: _har00:
5367; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
5368; DARWIN-64-STATIC-NEXT: ret
5369
5370; DARWIN-64-DYNAMIC: _har00:
5371; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
5372; DARWIN-64-DYNAMIC-NEXT: ret
5373
5374; DARWIN-64-PIC: _har00:
5375; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
5376; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005377}
5378
5379define i8* @hxr00() nounwind {
5380entry:
5381 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005382; LINUX-64-STATIC: hxr00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005383; LINUX-64-STATIC: movl $xsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005384; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005385
5386; LINUX-32-STATIC: hxr00:
5387; LINUX-32-STATIC: movl $xsrc, %eax
5388; LINUX-32-STATIC-NEXT: ret
5389
5390; LINUX-32-PIC: hxr00:
5391; LINUX-32-PIC: movl $xsrc, %eax
5392; LINUX-32-PIC-NEXT: ret
5393
5394; LINUX-64-PIC: hxr00:
5395; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
5396; LINUX-64-PIC-NEXT: ret
5397
5398; DARWIN-32-STATIC: _hxr00:
5399; DARWIN-32-STATIC: movl $_xsrc, %eax
5400; DARWIN-32-STATIC-NEXT: ret
5401
5402; DARWIN-32-DYNAMIC: _hxr00:
5403; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
5404; DARWIN-32-DYNAMIC-NEXT: ret
5405
5406; DARWIN-32-PIC: _hxr00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005407; DARWIN-32-PIC: calll L78$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005408; DARWIN-32-PIC-NEXT: L78$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005409; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005410; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L78$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005411; DARWIN-32-PIC-NEXT: ret
5412
5413; DARWIN-64-STATIC: _hxr00:
5414; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
5415; DARWIN-64-STATIC-NEXT: ret
5416
5417; DARWIN-64-DYNAMIC: _hxr00:
5418; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
5419; DARWIN-64-DYNAMIC-NEXT: ret
5420
5421; DARWIN-64-PIC: _hxr00:
5422; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
5423; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005424}
5425
5426define i8* @har01() nounwind {
5427entry:
5428 ret i8* bitcast ([131072 x i32]* @dst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005429; LINUX-64-STATIC: har01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005430; LINUX-64-STATIC: movl $dst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005431; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005432
5433; LINUX-32-STATIC: har01:
5434; LINUX-32-STATIC: movl $dst, %eax
5435; LINUX-32-STATIC-NEXT: ret
5436
5437; LINUX-32-PIC: har01:
5438; LINUX-32-PIC: movl $dst, %eax
5439; LINUX-32-PIC-NEXT: ret
5440
5441; LINUX-64-PIC: har01:
5442; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
5443; LINUX-64-PIC-NEXT: ret
5444
5445; DARWIN-32-STATIC: _har01:
5446; DARWIN-32-STATIC: movl $_dst, %eax
5447; DARWIN-32-STATIC-NEXT: ret
5448
5449; DARWIN-32-DYNAMIC: _har01:
5450; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax
5451; DARWIN-32-DYNAMIC-NEXT: ret
5452
5453; DARWIN-32-PIC: _har01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005454; DARWIN-32-PIC: calll L79$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005455; DARWIN-32-PIC-NEXT: L79$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005456; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005457; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L79$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005458; DARWIN-32-PIC-NEXT: ret
5459
5460; DARWIN-64-STATIC: _har01:
5461; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
5462; DARWIN-64-STATIC-NEXT: ret
5463
5464; DARWIN-64-DYNAMIC: _har01:
5465; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
5466; DARWIN-64-DYNAMIC-NEXT: ret
5467
5468; DARWIN-64-PIC: _har01:
5469; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
5470; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005471}
5472
5473define i8* @hxr01() nounwind {
5474entry:
5475 ret i8* bitcast ([32 x i32]* @xdst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005476; LINUX-64-STATIC: hxr01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005477; LINUX-64-STATIC: movl $xdst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005478; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005479
5480; LINUX-32-STATIC: hxr01:
5481; LINUX-32-STATIC: movl $xdst, %eax
5482; LINUX-32-STATIC-NEXT: ret
5483
5484; LINUX-32-PIC: hxr01:
5485; LINUX-32-PIC: movl $xdst, %eax
5486; LINUX-32-PIC-NEXT: ret
5487
5488; LINUX-64-PIC: hxr01:
5489; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
5490; LINUX-64-PIC-NEXT: ret
5491
5492; DARWIN-32-STATIC: _hxr01:
5493; DARWIN-32-STATIC: movl $_xdst, %eax
5494; DARWIN-32-STATIC-NEXT: ret
5495
5496; DARWIN-32-DYNAMIC: _hxr01:
5497; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax
5498; DARWIN-32-DYNAMIC-NEXT: ret
5499
5500; DARWIN-32-PIC: _hxr01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005501; DARWIN-32-PIC: calll L80$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005502; DARWIN-32-PIC-NEXT: L80$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005503; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005504; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L80$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005505; DARWIN-32-PIC-NEXT: ret
5506
5507; DARWIN-64-STATIC: _hxr01:
5508; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
5509; DARWIN-64-STATIC-NEXT: ret
5510
5511; DARWIN-64-DYNAMIC: _hxr01:
5512; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
5513; DARWIN-64-DYNAMIC-NEXT: ret
5514
5515; DARWIN-64-PIC: _hxr01:
5516; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
5517; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005518}
5519
5520define i8* @har02() nounwind {
5521entry:
5522 %0 = load i32** @ptr, align 8
5523 %1 = bitcast i32* %0 to i8*
5524 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005525; LINUX-64-STATIC: har02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005526; LINUX-64-STATIC: movq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005527; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005528
5529; LINUX-32-STATIC: har02:
5530; LINUX-32-STATIC: movl ptr, %eax
5531; LINUX-32-STATIC-NEXT: ret
5532
5533; LINUX-32-PIC: har02:
5534; LINUX-32-PIC: movl ptr, %eax
5535; LINUX-32-PIC-NEXT: ret
5536
5537; LINUX-64-PIC: har02:
5538; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), %rax
5539; LINUX-64-PIC-NEXT: movq (%rax), %rax
5540; LINUX-64-PIC-NEXT: ret
5541
5542; DARWIN-32-STATIC: _har02:
5543; DARWIN-32-STATIC: movl _ptr, %eax
5544; DARWIN-32-STATIC-NEXT: ret
5545
5546; DARWIN-32-DYNAMIC: _har02:
5547; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, %eax
5548; DARWIN-32-DYNAMIC-NEXT: movl (%eax), %eax
5549; DARWIN-32-DYNAMIC-NEXT: ret
5550
5551; DARWIN-32-PIC: _har02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005552; DARWIN-32-PIC: calll L81$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005553; DARWIN-32-PIC-NEXT: L81$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005554; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005555; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L81$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005556; DARWIN-32-PIC-NEXT: movl (%eax), %eax
5557; DARWIN-32-PIC-NEXT: ret
5558
5559; DARWIN-64-STATIC: _har02:
5560; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), %rax
5561; DARWIN-64-STATIC-NEXT: movq (%rax), %rax
5562; DARWIN-64-STATIC-NEXT: ret
5563
5564; DARWIN-64-DYNAMIC: _har02:
5565; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), %rax
5566; DARWIN-64-DYNAMIC-NEXT: movq (%rax), %rax
5567; DARWIN-64-DYNAMIC-NEXT: ret
5568
5569; DARWIN-64-PIC: _har02:
5570; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), %rax
5571; DARWIN-64-PIC-NEXT: movq (%rax), %rax
5572; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005573}
5574
5575define i8* @har03() nounwind {
5576entry:
5577 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005578; LINUX-64-STATIC: har03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005579; LINUX-64-STATIC: movl $dsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005580; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005581
5582; LINUX-32-STATIC: har03:
5583; LINUX-32-STATIC: movl $dsrc, %eax
5584; LINUX-32-STATIC-NEXT: ret
5585
5586; LINUX-32-PIC: har03:
5587; LINUX-32-PIC: movl $dsrc, %eax
5588; LINUX-32-PIC-NEXT: ret
5589
5590; LINUX-64-PIC: har03:
5591; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
5592; LINUX-64-PIC-NEXT: ret
5593
5594; DARWIN-32-STATIC: _har03:
5595; DARWIN-32-STATIC: movl $_dsrc, %eax
5596; DARWIN-32-STATIC-NEXT: ret
5597
5598; DARWIN-32-DYNAMIC: _har03:
5599; DARWIN-32-DYNAMIC: movl $_dsrc, %eax
5600; DARWIN-32-DYNAMIC-NEXT: ret
5601
5602; DARWIN-32-PIC: _har03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005603; DARWIN-32-PIC: calll L82$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005604; DARWIN-32-PIC-NEXT: L82$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005605; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005606; DARWIN-32-PIC-NEXT: leal _dsrc-L82$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005607; DARWIN-32-PIC-NEXT: ret
5608
5609; DARWIN-64-STATIC: _har03:
5610; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
5611; DARWIN-64-STATIC-NEXT: ret
5612
5613; DARWIN-64-DYNAMIC: _har03:
5614; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
5615; DARWIN-64-DYNAMIC-NEXT: ret
5616
5617; DARWIN-64-PIC: _har03:
5618; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
5619; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005620}
5621
5622define i8* @har04() nounwind {
5623entry:
5624 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005625; LINUX-64-STATIC: har04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005626; LINUX-64-STATIC: movl $ddst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005627; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005628
5629; LINUX-32-STATIC: har04:
5630; LINUX-32-STATIC: movl $ddst, %eax
5631; LINUX-32-STATIC-NEXT: ret
5632
5633; LINUX-32-PIC: har04:
5634; LINUX-32-PIC: movl $ddst, %eax
5635; LINUX-32-PIC-NEXT: ret
5636
5637; LINUX-64-PIC: har04:
5638; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
5639; LINUX-64-PIC-NEXT: ret
5640
5641; DARWIN-32-STATIC: _har04:
5642; DARWIN-32-STATIC: movl $_ddst, %eax
5643; DARWIN-32-STATIC-NEXT: ret
5644
5645; DARWIN-32-DYNAMIC: _har04:
5646; DARWIN-32-DYNAMIC: movl $_ddst, %eax
5647; DARWIN-32-DYNAMIC-NEXT: ret
5648
5649; DARWIN-32-PIC: _har04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005650; DARWIN-32-PIC: calll L83$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005651; DARWIN-32-PIC-NEXT: L83$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005652; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005653; DARWIN-32-PIC-NEXT: leal _ddst-L83$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005654; DARWIN-32-PIC-NEXT: ret
5655
5656; DARWIN-64-STATIC: _har04:
5657; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
5658; DARWIN-64-STATIC-NEXT: ret
5659
5660; DARWIN-64-DYNAMIC: _har04:
5661; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
5662; DARWIN-64-DYNAMIC-NEXT: ret
5663
5664; DARWIN-64-PIC: _har04:
5665; DARWIN-64-PIC: leaq _ddst(%rip), %rax
5666; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005667}
5668
5669define i8* @har05() nounwind {
5670entry:
5671 %0 = load i32** @dptr, align 8
5672 %1 = bitcast i32* %0 to i8*
5673 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005674; LINUX-64-STATIC: har05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005675; LINUX-64-STATIC: movq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005676; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005677
5678; LINUX-32-STATIC: har05:
5679; LINUX-32-STATIC: movl dptr, %eax
5680; LINUX-32-STATIC-NEXT: ret
5681
5682; LINUX-32-PIC: har05:
5683; LINUX-32-PIC: movl dptr, %eax
5684; LINUX-32-PIC-NEXT: ret
5685
5686; LINUX-64-PIC: har05:
5687; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), %rax
5688; LINUX-64-PIC-NEXT: movq (%rax), %rax
5689; LINUX-64-PIC-NEXT: ret
5690
5691; DARWIN-32-STATIC: _har05:
5692; DARWIN-32-STATIC: movl _dptr, %eax
5693; DARWIN-32-STATIC-NEXT: ret
5694
5695; DARWIN-32-DYNAMIC: _har05:
5696; DARWIN-32-DYNAMIC: movl _dptr, %eax
5697; DARWIN-32-DYNAMIC-NEXT: ret
5698
5699; DARWIN-32-PIC: _har05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005700; DARWIN-32-PIC: calll L84$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005701; DARWIN-32-PIC-NEXT: L84$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005702; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005703; DARWIN-32-PIC-NEXT: movl _dptr-L84$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005704; DARWIN-32-PIC-NEXT: ret
5705
5706; DARWIN-64-STATIC: _har05:
5707; DARWIN-64-STATIC: movq _dptr(%rip), %rax
5708; DARWIN-64-STATIC-NEXT: ret
5709
5710; DARWIN-64-DYNAMIC: _har05:
5711; DARWIN-64-DYNAMIC: movq _dptr(%rip), %rax
5712; DARWIN-64-DYNAMIC-NEXT: ret
5713
5714; DARWIN-64-PIC: _har05:
5715; DARWIN-64-PIC: movq _dptr(%rip), %rax
5716; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005717}
5718
5719define i8* @har06() nounwind {
5720entry:
5721 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005722; LINUX-64-STATIC: har06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005723; LINUX-64-STATIC: movl $lsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005724; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005725
5726; LINUX-32-STATIC: har06:
5727; LINUX-32-STATIC: movl $lsrc, %eax
5728; LINUX-32-STATIC-NEXT: ret
5729
5730; LINUX-32-PIC: har06:
5731; LINUX-32-PIC: movl $lsrc, %eax
5732; LINUX-32-PIC-NEXT: ret
5733
5734; LINUX-64-PIC: har06:
5735; LINUX-64-PIC: leaq lsrc(%rip), %rax
5736; LINUX-64-PIC-NEXT: ret
5737
5738; DARWIN-32-STATIC: _har06:
5739; DARWIN-32-STATIC: movl $_lsrc, %eax
5740; DARWIN-32-STATIC-NEXT: ret
5741
5742; DARWIN-32-DYNAMIC: _har06:
5743; DARWIN-32-DYNAMIC: movl $_lsrc, %eax
5744; DARWIN-32-DYNAMIC-NEXT: ret
5745
5746; DARWIN-32-PIC: _har06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005747; DARWIN-32-PIC: calll L85$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005748; DARWIN-32-PIC-NEXT: L85$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005749; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005750; DARWIN-32-PIC-NEXT: leal _lsrc-L85$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005751; DARWIN-32-PIC-NEXT: ret
5752
5753; DARWIN-64-STATIC: _har06:
5754; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
5755; DARWIN-64-STATIC-NEXT: ret
5756
5757; DARWIN-64-DYNAMIC: _har06:
5758; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
5759; DARWIN-64-DYNAMIC-NEXT: ret
5760
5761; DARWIN-64-PIC: _har06:
5762; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
5763; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005764}
5765
5766define i8* @har07() nounwind {
5767entry:
5768 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005769; LINUX-64-STATIC: har07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005770; LINUX-64-STATIC: movl $ldst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005771; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005772
5773; LINUX-32-STATIC: har07:
5774; LINUX-32-STATIC: movl $ldst, %eax
5775; LINUX-32-STATIC-NEXT: ret
5776
5777; LINUX-32-PIC: har07:
5778; LINUX-32-PIC: movl $ldst, %eax
5779; LINUX-32-PIC-NEXT: ret
5780
5781; LINUX-64-PIC: har07:
5782; LINUX-64-PIC: leaq ldst(%rip), %rax
5783; LINUX-64-PIC-NEXT: ret
5784
5785; DARWIN-32-STATIC: _har07:
5786; DARWIN-32-STATIC: movl $_ldst, %eax
5787; DARWIN-32-STATIC-NEXT: ret
5788
5789; DARWIN-32-DYNAMIC: _har07:
5790; DARWIN-32-DYNAMIC: movl $_ldst, %eax
5791; DARWIN-32-DYNAMIC-NEXT: ret
5792
5793; DARWIN-32-PIC: _har07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005794; DARWIN-32-PIC: calll L86$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005795; DARWIN-32-PIC-NEXT: L86$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005796; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005797; DARWIN-32-PIC-NEXT: leal _ldst-L86$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005798; DARWIN-32-PIC-NEXT: ret
5799
5800; DARWIN-64-STATIC: _har07:
5801; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
5802; DARWIN-64-STATIC-NEXT: ret
5803
5804; DARWIN-64-DYNAMIC: _har07:
5805; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
5806; DARWIN-64-DYNAMIC-NEXT: ret
5807
5808; DARWIN-64-PIC: _har07:
5809; DARWIN-64-PIC: leaq _ldst(%rip), %rax
5810; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005811}
5812
5813define i8* @har08() nounwind {
5814entry:
5815 %0 = load i32** @lptr, align 8
5816 %1 = bitcast i32* %0 to i8*
5817 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005818; LINUX-64-STATIC: har08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005819; LINUX-64-STATIC: movq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005820; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005821
5822; LINUX-32-STATIC: har08:
5823; LINUX-32-STATIC: movl lptr, %eax
5824; LINUX-32-STATIC-NEXT: ret
5825
5826; LINUX-32-PIC: har08:
5827; LINUX-32-PIC: movl lptr, %eax
5828; LINUX-32-PIC-NEXT: ret
5829
5830; LINUX-64-PIC: har08:
5831; LINUX-64-PIC: movq lptr(%rip), %rax
5832; LINUX-64-PIC-NEXT: ret
5833
5834; DARWIN-32-STATIC: _har08:
5835; DARWIN-32-STATIC: movl _lptr, %eax
5836; DARWIN-32-STATIC-NEXT: ret
5837
5838; DARWIN-32-DYNAMIC: _har08:
5839; DARWIN-32-DYNAMIC: movl _lptr, %eax
5840; DARWIN-32-DYNAMIC-NEXT: ret
5841
5842; DARWIN-32-PIC: _har08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005843; DARWIN-32-PIC: calll L87$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005844; DARWIN-32-PIC-NEXT: L87$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005845; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005846; DARWIN-32-PIC-NEXT: movl _lptr-L87$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005847; DARWIN-32-PIC-NEXT: ret
5848
5849; DARWIN-64-STATIC: _har08:
5850; DARWIN-64-STATIC: movq _lptr(%rip), %rax
5851; DARWIN-64-STATIC-NEXT: ret
5852
5853; DARWIN-64-DYNAMIC: _har08:
5854; DARWIN-64-DYNAMIC: movq _lptr(%rip), %rax
5855; DARWIN-64-DYNAMIC-NEXT: ret
5856
5857; DARWIN-64-PIC: _har08:
5858; DARWIN-64-PIC: movq _lptr(%rip), %rax
5859; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005860}
5861
5862define i8* @bat00() nounwind {
5863entry:
5864 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005865; LINUX-64-STATIC: bat00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005866; LINUX-64-STATIC: movl $src+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005867; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005868
5869; LINUX-32-STATIC: bat00:
5870; LINUX-32-STATIC: movl $src+64, %eax
5871; LINUX-32-STATIC-NEXT: ret
5872
5873; LINUX-32-PIC: bat00:
5874; LINUX-32-PIC: movl $src+64, %eax
5875; LINUX-32-PIC-NEXT: ret
5876
5877; LINUX-64-PIC: bat00:
5878; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
5879; LINUX-64-PIC-NEXT: addq $64, %rax
5880; LINUX-64-PIC-NEXT: ret
5881
5882; DARWIN-32-STATIC: _bat00:
5883; DARWIN-32-STATIC: movl $_src+64, %eax
5884; DARWIN-32-STATIC-NEXT: ret
5885
5886; DARWIN-32-DYNAMIC: _bat00:
5887; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
5888; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
5889; DARWIN-32-DYNAMIC-NEXT: ret
5890
5891; DARWIN-32-PIC: _bat00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005892; DARWIN-32-PIC: calll L88$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005893; DARWIN-32-PIC-NEXT: L88$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005894; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005895; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L88$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005896; DARWIN-32-PIC-NEXT: addl $64, %eax
5897; DARWIN-32-PIC-NEXT: ret
5898
5899; DARWIN-64-STATIC: _bat00:
5900; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
5901; DARWIN-64-STATIC-NEXT: addq $64, %rax
5902; DARWIN-64-STATIC-NEXT: ret
5903
5904; DARWIN-64-DYNAMIC: _bat00:
5905; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
5906; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
5907; DARWIN-64-DYNAMIC-NEXT: ret
5908
5909; DARWIN-64-PIC: _bat00:
5910; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
5911; DARWIN-64-PIC-NEXT: addq $64, %rax
5912; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005913}
5914
5915define i8* @bxt00() nounwind {
5916entry:
5917 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005918; LINUX-64-STATIC: bxt00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005919; LINUX-64-STATIC: movl $xsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005920; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005921
5922; LINUX-32-STATIC: bxt00:
5923; LINUX-32-STATIC: movl $xsrc+64, %eax
5924; LINUX-32-STATIC-NEXT: ret
5925
5926; LINUX-32-PIC: bxt00:
5927; LINUX-32-PIC: movl $xsrc+64, %eax
5928; LINUX-32-PIC-NEXT: ret
5929
5930; LINUX-64-PIC: bxt00:
5931; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
5932; LINUX-64-PIC-NEXT: addq $64, %rax
5933; LINUX-64-PIC-NEXT: ret
5934
5935; DARWIN-32-STATIC: _bxt00:
5936; DARWIN-32-STATIC: movl $_xsrc+64, %eax
5937; DARWIN-32-STATIC-NEXT: ret
5938
5939; DARWIN-32-DYNAMIC: _bxt00:
5940; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
5941; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
5942; DARWIN-32-DYNAMIC-NEXT: ret
5943
5944; DARWIN-32-PIC: _bxt00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005945; DARWIN-32-PIC: calll L89$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005946; DARWIN-32-PIC-NEXT: L89$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005947; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00005948; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L89$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005949; DARWIN-32-PIC-NEXT: addl $64, %eax
5950; DARWIN-32-PIC-NEXT: ret
5951
5952; DARWIN-64-STATIC: _bxt00:
5953; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
5954; DARWIN-64-STATIC-NEXT: addq $64, %rax
5955; DARWIN-64-STATIC-NEXT: ret
5956
5957; DARWIN-64-DYNAMIC: _bxt00:
5958; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
5959; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
5960; DARWIN-64-DYNAMIC-NEXT: ret
5961
5962; DARWIN-64-PIC: _bxt00:
5963; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
5964; DARWIN-64-PIC-NEXT: addq $64, %rax
5965; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005966}
5967
5968define i8* @bat01() nounwind {
5969entry:
5970 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005971; LINUX-64-STATIC: bat01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005972; LINUX-64-STATIC: movl $dst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005973; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005974
5975; LINUX-32-STATIC: bat01:
5976; LINUX-32-STATIC: movl $dst+64, %eax
5977; LINUX-32-STATIC-NEXT: ret
5978
5979; LINUX-32-PIC: bat01:
5980; LINUX-32-PIC: movl $dst+64, %eax
5981; LINUX-32-PIC-NEXT: ret
5982
5983; LINUX-64-PIC: bat01:
5984; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
5985; LINUX-64-PIC-NEXT: addq $64, %rax
5986; LINUX-64-PIC-NEXT: ret
5987
5988; DARWIN-32-STATIC: _bat01:
5989; DARWIN-32-STATIC: movl $_dst+64, %eax
5990; DARWIN-32-STATIC-NEXT: ret
5991
5992; DARWIN-32-DYNAMIC: _bat01:
5993; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax
5994; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
5995; DARWIN-32-DYNAMIC-NEXT: ret
5996
5997; DARWIN-32-PIC: _bat01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005998; DARWIN-32-PIC: calll L90$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005999; DARWIN-32-PIC-NEXT: L90$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006000; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006001; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L90$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006002; DARWIN-32-PIC-NEXT: addl $64, %eax
6003; DARWIN-32-PIC-NEXT: ret
6004
6005; DARWIN-64-STATIC: _bat01:
6006; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
6007; DARWIN-64-STATIC-NEXT: addq $64, %rax
6008; DARWIN-64-STATIC-NEXT: ret
6009
6010; DARWIN-64-DYNAMIC: _bat01:
6011; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
6012; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6013; DARWIN-64-DYNAMIC-NEXT: ret
6014
6015; DARWIN-64-PIC: _bat01:
6016; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
6017; DARWIN-64-PIC-NEXT: addq $64, %rax
6018; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006019}
6020
6021define i8* @bxt01() nounwind {
6022entry:
6023 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006024; LINUX-64-STATIC: bxt01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006025; LINUX-64-STATIC: movl $xdst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006026; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006027
6028; LINUX-32-STATIC: bxt01:
6029; LINUX-32-STATIC: movl $xdst+64, %eax
6030; LINUX-32-STATIC-NEXT: ret
6031
6032; LINUX-32-PIC: bxt01:
6033; LINUX-32-PIC: movl $xdst+64, %eax
6034; LINUX-32-PIC-NEXT: ret
6035
6036; LINUX-64-PIC: bxt01:
6037; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
6038; LINUX-64-PIC-NEXT: addq $64, %rax
6039; LINUX-64-PIC-NEXT: ret
6040
6041; DARWIN-32-STATIC: _bxt01:
6042; DARWIN-32-STATIC: movl $_xdst+64, %eax
6043; DARWIN-32-STATIC-NEXT: ret
6044
6045; DARWIN-32-DYNAMIC: _bxt01:
6046; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax
6047; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6048; DARWIN-32-DYNAMIC-NEXT: ret
6049
6050; DARWIN-32-PIC: _bxt01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006051; DARWIN-32-PIC: calll L91$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006052; DARWIN-32-PIC-NEXT: L91$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006053; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006054; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L91$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006055; DARWIN-32-PIC-NEXT: addl $64, %eax
6056; DARWIN-32-PIC-NEXT: ret
6057
6058; DARWIN-64-STATIC: _bxt01:
6059; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
6060; DARWIN-64-STATIC-NEXT: addq $64, %rax
6061; DARWIN-64-STATIC-NEXT: ret
6062
6063; DARWIN-64-DYNAMIC: _bxt01:
6064; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
6065; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6066; DARWIN-64-DYNAMIC-NEXT: ret
6067
6068; DARWIN-64-PIC: _bxt01:
6069; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
6070; DARWIN-64-PIC-NEXT: addq $64, %rax
6071; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006072}
6073
6074define i8* @bat02() nounwind {
6075entry:
6076 %0 = load i32** @ptr, align 8
6077 %1 = getelementptr i32* %0, i64 16
6078 %2 = bitcast i32* %1 to i8*
6079 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006080; LINUX-64-STATIC: bat02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006081; LINUX-64-STATIC: movq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006082; LINUX-64-STATIC: addq $64, %rax
6083; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006084
6085; LINUX-32-STATIC: bat02:
6086; LINUX-32-STATIC: movl ptr, %eax
6087; LINUX-32-STATIC-NEXT: addl $64, %eax
6088; LINUX-32-STATIC-NEXT: ret
6089
6090; LINUX-32-PIC: bat02:
6091; LINUX-32-PIC: movl ptr, %eax
6092; LINUX-32-PIC-NEXT: addl $64, %eax
6093; LINUX-32-PIC-NEXT: ret
6094
6095; LINUX-64-PIC: bat02:
6096; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), %rax
6097; LINUX-64-PIC-NEXT: movq (%rax), %rax
6098; LINUX-64-PIC-NEXT: addq $64, %rax
6099; LINUX-64-PIC-NEXT: ret
6100
6101; DARWIN-32-STATIC: _bat02:
6102; DARWIN-32-STATIC: movl _ptr, %eax
6103; DARWIN-32-STATIC-NEXT: addl $64, %eax
6104; DARWIN-32-STATIC-NEXT: ret
6105
6106; DARWIN-32-DYNAMIC: _bat02:
6107; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, %eax
6108; DARWIN-32-DYNAMIC-NEXT: movl (%eax), %eax
6109; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6110; DARWIN-32-DYNAMIC-NEXT: ret
6111
6112; DARWIN-32-PIC: _bat02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006113; DARWIN-32-PIC: calll L92$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006114; DARWIN-32-PIC-NEXT: L92$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006115; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006116; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L92$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006117; DARWIN-32-PIC-NEXT: movl (%eax), %eax
6118; DARWIN-32-PIC-NEXT: addl $64, %eax
6119; DARWIN-32-PIC-NEXT: ret
6120
6121; DARWIN-64-STATIC: _bat02:
6122; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), %rax
6123; DARWIN-64-STATIC-NEXT: movq (%rax), %rax
6124; DARWIN-64-STATIC-NEXT: addq $64, %rax
6125; DARWIN-64-STATIC-NEXT: ret
6126
6127; DARWIN-64-DYNAMIC: _bat02:
6128; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), %rax
6129; DARWIN-64-DYNAMIC-NEXT: movq (%rax), %rax
6130; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6131; DARWIN-64-DYNAMIC-NEXT: ret
6132
6133; DARWIN-64-PIC: _bat02:
6134; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), %rax
6135; DARWIN-64-PIC-NEXT: movq (%rax), %rax
6136; DARWIN-64-PIC-NEXT: addq $64, %rax
6137; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006138}
6139
6140define i8* @bat03() nounwind {
6141entry:
6142 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006143; LINUX-64-STATIC: bat03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006144; LINUX-64-STATIC: movl $dsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006145; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006146
6147; LINUX-32-STATIC: bat03:
6148; LINUX-32-STATIC: movl $dsrc+64, %eax
6149; LINUX-32-STATIC-NEXT: ret
6150
6151; LINUX-32-PIC: bat03:
6152; LINUX-32-PIC: movl $dsrc+64, %eax
6153; LINUX-32-PIC-NEXT: ret
6154
6155; LINUX-64-PIC: bat03:
6156; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
6157; LINUX-64-PIC-NEXT: addq $64, %rax
6158; LINUX-64-PIC-NEXT: ret
6159
6160; DARWIN-32-STATIC: _bat03:
6161; DARWIN-32-STATIC: movl $_dsrc+64, %eax
6162; DARWIN-32-STATIC-NEXT: ret
6163
6164; DARWIN-32-DYNAMIC: _bat03:
6165; DARWIN-32-DYNAMIC: movl $_dsrc+64, %eax
6166; DARWIN-32-DYNAMIC-NEXT: ret
6167
6168; DARWIN-32-PIC: _bat03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006169; DARWIN-32-PIC: calll L93$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006170; DARWIN-32-PIC-NEXT: L93$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006171; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006172; DARWIN-32-PIC-NEXT: leal (_dsrc-L93$pb)+64(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006173; DARWIN-32-PIC-NEXT: ret
6174
6175; DARWIN-64-STATIC: _bat03:
6176; DARWIN-64-STATIC: leaq _dsrc+64(%rip), %rax
6177; DARWIN-64-STATIC-NEXT: ret
6178
6179; DARWIN-64-DYNAMIC: _bat03:
6180; DARWIN-64-DYNAMIC: leaq _dsrc+64(%rip), %rax
6181; DARWIN-64-DYNAMIC-NEXT: ret
6182
6183; DARWIN-64-PIC: _bat03:
6184; DARWIN-64-PIC: leaq _dsrc+64(%rip), %rax
6185; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006186}
6187
6188define i8* @bat04() nounwind {
6189entry:
6190 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006191; LINUX-64-STATIC: bat04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006192; LINUX-64-STATIC: movl $ddst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006193; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006194
6195; LINUX-32-STATIC: bat04:
6196; LINUX-32-STATIC: movl $ddst+64, %eax
6197; LINUX-32-STATIC-NEXT: ret
6198
6199; LINUX-32-PIC: bat04:
6200; LINUX-32-PIC: movl $ddst+64, %eax
6201; LINUX-32-PIC-NEXT: ret
6202
6203; LINUX-64-PIC: bat04:
6204; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
6205; LINUX-64-PIC-NEXT: addq $64, %rax
6206; LINUX-64-PIC-NEXT: ret
6207
6208; DARWIN-32-STATIC: _bat04:
6209; DARWIN-32-STATIC: movl $_ddst+64, %eax
6210; DARWIN-32-STATIC-NEXT: ret
6211
6212; DARWIN-32-DYNAMIC: _bat04:
6213; DARWIN-32-DYNAMIC: movl $_ddst+64, %eax
6214; DARWIN-32-DYNAMIC-NEXT: ret
6215
6216; DARWIN-32-PIC: _bat04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006217; DARWIN-32-PIC: calll L94$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006218; DARWIN-32-PIC-NEXT: L94$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006219; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006220; DARWIN-32-PIC-NEXT: leal (_ddst-L94$pb)+64(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006221; DARWIN-32-PIC-NEXT: ret
6222
6223; DARWIN-64-STATIC: _bat04:
6224; DARWIN-64-STATIC: leaq _ddst+64(%rip), %rax
6225; DARWIN-64-STATIC-NEXT: ret
6226
6227; DARWIN-64-DYNAMIC: _bat04:
6228; DARWIN-64-DYNAMIC: leaq _ddst+64(%rip), %rax
6229; DARWIN-64-DYNAMIC-NEXT: ret
6230
6231; DARWIN-64-PIC: _bat04:
6232; DARWIN-64-PIC: leaq _ddst+64(%rip), %rax
6233; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006234}
6235
6236define i8* @bat05() nounwind {
6237entry:
6238 %0 = load i32** @dptr, align 8
6239 %1 = getelementptr i32* %0, i64 16
6240 %2 = bitcast i32* %1 to i8*
6241 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006242; LINUX-64-STATIC: bat05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006243; LINUX-64-STATIC: movq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006244; LINUX-64-STATIC: addq $64, %rax
6245; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006246
6247; LINUX-32-STATIC: bat05:
6248; LINUX-32-STATIC: movl dptr, %eax
6249; LINUX-32-STATIC-NEXT: addl $64, %eax
6250; LINUX-32-STATIC-NEXT: ret
6251
6252; LINUX-32-PIC: bat05:
6253; LINUX-32-PIC: movl dptr, %eax
6254; LINUX-32-PIC-NEXT: addl $64, %eax
6255; LINUX-32-PIC-NEXT: ret
6256
6257; LINUX-64-PIC: bat05:
6258; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), %rax
6259; LINUX-64-PIC-NEXT: movq (%rax), %rax
6260; LINUX-64-PIC-NEXT: addq $64, %rax
6261; LINUX-64-PIC-NEXT: ret
6262
6263; DARWIN-32-STATIC: _bat05:
6264; DARWIN-32-STATIC: movl _dptr, %eax
6265; DARWIN-32-STATIC-NEXT: addl $64, %eax
6266; DARWIN-32-STATIC-NEXT: ret
6267
6268; DARWIN-32-DYNAMIC: _bat05:
6269; DARWIN-32-DYNAMIC: movl _dptr, %eax
6270; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6271; DARWIN-32-DYNAMIC-NEXT: ret
6272
6273; DARWIN-32-PIC: _bat05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006274; DARWIN-32-PIC: calll L95$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006275; DARWIN-32-PIC-NEXT: L95$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006276; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006277; DARWIN-32-PIC-NEXT: movl _dptr-L95$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006278; DARWIN-32-PIC-NEXT: addl $64, %eax
6279; DARWIN-32-PIC-NEXT: ret
6280
6281; DARWIN-64-STATIC: _bat05:
6282; DARWIN-64-STATIC: movq _dptr(%rip), %rax
6283; DARWIN-64-STATIC-NEXT: addq $64, %rax
6284; DARWIN-64-STATIC-NEXT: ret
6285
6286; DARWIN-64-DYNAMIC: _bat05:
6287; DARWIN-64-DYNAMIC: movq _dptr(%rip), %rax
6288; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6289; DARWIN-64-DYNAMIC-NEXT: ret
6290
6291; DARWIN-64-PIC: _bat05:
6292; DARWIN-64-PIC: movq _dptr(%rip), %rax
6293; DARWIN-64-PIC-NEXT: addq $64, %rax
6294; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006295}
6296
6297define i8* @bat06() nounwind {
6298entry:
6299 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006300; LINUX-64-STATIC: bat06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006301; LINUX-64-STATIC: movl $lsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006302; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006303
6304; LINUX-32-STATIC: bat06:
6305; LINUX-32-STATIC: movl $lsrc+64, %eax
6306; LINUX-32-STATIC-NEXT: ret
6307
6308; LINUX-32-PIC: bat06:
6309; LINUX-32-PIC: movl $lsrc+64, %eax
6310; LINUX-32-PIC-NEXT: ret
6311
6312; LINUX-64-PIC: bat06:
6313; LINUX-64-PIC: leaq lsrc+64(%rip), %rax
6314; LINUX-64-PIC-NEXT: ret
6315
6316; DARWIN-32-STATIC: _bat06:
6317; DARWIN-32-STATIC: movl $_lsrc+64, %eax
6318; DARWIN-32-STATIC-NEXT: ret
6319
6320; DARWIN-32-DYNAMIC: _bat06:
6321; DARWIN-32-DYNAMIC: movl $_lsrc+64, %eax
6322; DARWIN-32-DYNAMIC-NEXT: ret
6323
6324; DARWIN-32-PIC: _bat06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006325; DARWIN-32-PIC: calll L96$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006326; DARWIN-32-PIC-NEXT: L96$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006327; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006328; DARWIN-32-PIC-NEXT: leal (_lsrc-L96$pb)+64(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006329; DARWIN-32-PIC-NEXT: ret
6330
6331; DARWIN-64-STATIC: _bat06:
6332; DARWIN-64-STATIC: leaq _lsrc+64(%rip), %rax
6333; DARWIN-64-STATIC-NEXT: ret
6334
6335; DARWIN-64-DYNAMIC: _bat06:
6336; DARWIN-64-DYNAMIC: leaq _lsrc+64(%rip), %rax
6337; DARWIN-64-DYNAMIC-NEXT: ret
6338
6339; DARWIN-64-PIC: _bat06:
6340; DARWIN-64-PIC: leaq _lsrc+64(%rip), %rax
6341; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006342}
6343
6344define i8* @bat07() nounwind {
6345entry:
6346 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006347; LINUX-64-STATIC: bat07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006348; LINUX-64-STATIC: movl $ldst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006349; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006350
6351; LINUX-32-STATIC: bat07:
6352; LINUX-32-STATIC: movl $ldst+64, %eax
6353; LINUX-32-STATIC-NEXT: ret
6354
6355; LINUX-32-PIC: bat07:
6356; LINUX-32-PIC: movl $ldst+64, %eax
6357; LINUX-32-PIC-NEXT: ret
6358
6359; LINUX-64-PIC: bat07:
6360; LINUX-64-PIC: leaq ldst+64(%rip), %rax
6361; LINUX-64-PIC-NEXT: ret
6362
6363; DARWIN-32-STATIC: _bat07:
6364; DARWIN-32-STATIC: movl $_ldst+64, %eax
6365; DARWIN-32-STATIC-NEXT: ret
6366
6367; DARWIN-32-DYNAMIC: _bat07:
6368; DARWIN-32-DYNAMIC: movl $_ldst+64, %eax
6369; DARWIN-32-DYNAMIC-NEXT: ret
6370
6371; DARWIN-32-PIC: _bat07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006372; DARWIN-32-PIC: calll L97$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006373; DARWIN-32-PIC-NEXT: L97$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006374; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006375; DARWIN-32-PIC-NEXT: leal (_ldst-L97$pb)+64(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006376; DARWIN-32-PIC-NEXT: ret
6377
6378; DARWIN-64-STATIC: _bat07:
6379; DARWIN-64-STATIC: leaq _ldst+64(%rip), %rax
6380; DARWIN-64-STATIC-NEXT: ret
6381
6382; DARWIN-64-DYNAMIC: _bat07:
6383; DARWIN-64-DYNAMIC: leaq _ldst+64(%rip), %rax
6384; DARWIN-64-DYNAMIC-NEXT: ret
6385
6386; DARWIN-64-PIC: _bat07:
6387; DARWIN-64-PIC: leaq _ldst+64(%rip), %rax
6388; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006389}
6390
6391define i8* @bat08() nounwind {
6392entry:
6393 %0 = load i32** @lptr, align 8
6394 %1 = getelementptr i32* %0, i64 16
6395 %2 = bitcast i32* %1 to i8*
6396 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006397; LINUX-64-STATIC: bat08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006398; LINUX-64-STATIC: movq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006399; LINUX-64-STATIC: addq $64, %rax
6400; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006401
6402; LINUX-32-STATIC: bat08:
6403; LINUX-32-STATIC: movl lptr, %eax
6404; LINUX-32-STATIC-NEXT: addl $64, %eax
6405; LINUX-32-STATIC-NEXT: ret
6406
6407; LINUX-32-PIC: bat08:
6408; LINUX-32-PIC: movl lptr, %eax
6409; LINUX-32-PIC-NEXT: addl $64, %eax
6410; LINUX-32-PIC-NEXT: ret
6411
6412; LINUX-64-PIC: bat08:
6413; LINUX-64-PIC: movq lptr(%rip), %rax
6414; LINUX-64-PIC-NEXT: addq $64, %rax
6415; LINUX-64-PIC-NEXT: ret
6416
6417; DARWIN-32-STATIC: _bat08:
6418; DARWIN-32-STATIC: movl _lptr, %eax
6419; DARWIN-32-STATIC-NEXT: addl $64, %eax
6420; DARWIN-32-STATIC-NEXT: ret
6421
6422; DARWIN-32-DYNAMIC: _bat08:
6423; DARWIN-32-DYNAMIC: movl _lptr, %eax
6424; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6425; DARWIN-32-DYNAMIC-NEXT: ret
6426
6427; DARWIN-32-PIC: _bat08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006428; DARWIN-32-PIC: calll L98$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006429; DARWIN-32-PIC-NEXT: L98$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006430; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006431; DARWIN-32-PIC-NEXT: movl _lptr-L98$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006432; DARWIN-32-PIC-NEXT: addl $64, %eax
6433; DARWIN-32-PIC-NEXT: ret
6434
6435; DARWIN-64-STATIC: _bat08:
6436; DARWIN-64-STATIC: movq _lptr(%rip), %rax
6437; DARWIN-64-STATIC-NEXT: addq $64, %rax
6438; DARWIN-64-STATIC-NEXT: ret
6439
6440; DARWIN-64-DYNAMIC: _bat08:
6441; DARWIN-64-DYNAMIC: movq _lptr(%rip), %rax
6442; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6443; DARWIN-64-DYNAMIC-NEXT: ret
6444
6445; DARWIN-64-PIC: _bat08:
6446; DARWIN-64-PIC: movq _lptr(%rip), %rax
6447; DARWIN-64-PIC-NEXT: addq $64, %rax
6448; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006449}
6450
6451define i8* @bam00() nounwind {
6452entry:
6453 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006454; LINUX-64-STATIC: bam00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006455; LINUX-64-STATIC: movl $src+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006456; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006457
6458; LINUX-32-STATIC: bam00:
6459; LINUX-32-STATIC: movl $src+262144, %eax
6460; LINUX-32-STATIC-NEXT: ret
6461
6462; LINUX-32-PIC: bam00:
6463; LINUX-32-PIC: movl $src+262144, %eax
6464; LINUX-32-PIC-NEXT: ret
6465
6466; LINUX-64-PIC: bam00:
6467; LINUX-64-PIC: movl $262144, %eax
6468; LINUX-64-PIC-NEXT: addq src@GOTPCREL(%rip), %rax
6469; LINUX-64-PIC-NEXT: ret
6470
6471; DARWIN-32-STATIC: _bam00:
6472; DARWIN-32-STATIC: movl $_src+262144, %eax
6473; DARWIN-32-STATIC-NEXT: ret
6474
6475; DARWIN-32-DYNAMIC: _bam00:
6476; DARWIN-32-DYNAMIC: movl $262144, %eax
6477; DARWIN-32-DYNAMIC-NEXT: addl L_src$non_lazy_ptr, %eax
6478; DARWIN-32-DYNAMIC-NEXT: ret
6479
6480; DARWIN-32-PIC: _bam00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006481; DARWIN-32-PIC: calll L99$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006482; DARWIN-32-PIC-NEXT: L99$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006483; DARWIN-32-PIC-NEXT: popl %ecx
6484; DARWIN-32-PIC-NEXT: movl $262144, %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006485; DARWIN-32-PIC-NEXT: addl L_src$non_lazy_ptr-L99$pb(%ecx), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006486; DARWIN-32-PIC-NEXT: ret
6487
6488; DARWIN-64-STATIC: _bam00:
6489; DARWIN-64-STATIC: movl $262144, %eax
6490; DARWIN-64-STATIC-NEXT: addq _src@GOTPCREL(%rip), %rax
6491; DARWIN-64-STATIC-NEXT: ret
6492
6493; DARWIN-64-DYNAMIC: _bam00:
6494; DARWIN-64-DYNAMIC: movl $262144, %eax
6495; DARWIN-64-DYNAMIC-NEXT: addq _src@GOTPCREL(%rip), %rax
6496; DARWIN-64-DYNAMIC-NEXT: ret
6497
6498; DARWIN-64-PIC: _bam00:
6499; DARWIN-64-PIC: movl $262144, %eax
6500; DARWIN-64-PIC-NEXT: addq _src@GOTPCREL(%rip), %rax
6501; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006502}
6503
6504define i8* @bam01() nounwind {
6505entry:
6506 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006507; LINUX-64-STATIC: bam01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006508; LINUX-64-STATIC: movl $dst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006509; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006510
6511; LINUX-32-STATIC: bam01:
6512; LINUX-32-STATIC: movl $dst+262144, %eax
6513; LINUX-32-STATIC-NEXT: ret
6514
6515; LINUX-32-PIC: bam01:
6516; LINUX-32-PIC: movl $dst+262144, %eax
6517; LINUX-32-PIC-NEXT: ret
6518
6519; LINUX-64-PIC: bam01:
6520; LINUX-64-PIC: movl $262144, %eax
6521; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), %rax
6522; LINUX-64-PIC-NEXT: ret
6523
6524; DARWIN-32-STATIC: _bam01:
6525; DARWIN-32-STATIC: movl $_dst+262144, %eax
6526; DARWIN-32-STATIC-NEXT: ret
6527
6528; DARWIN-32-DYNAMIC: _bam01:
6529; DARWIN-32-DYNAMIC: movl $262144, %eax
6530; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, %eax
6531; DARWIN-32-DYNAMIC-NEXT: ret
6532
6533; DARWIN-32-PIC: _bam01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006534; DARWIN-32-PIC: calll L100$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006535; DARWIN-32-PIC-NEXT: L100$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006536; DARWIN-32-PIC-NEXT: popl %ecx
6537; DARWIN-32-PIC-NEXT: movl $262144, %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006538; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L100$pb(%ecx), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006539; DARWIN-32-PIC-NEXT: ret
6540
6541; DARWIN-64-STATIC: _bam01:
6542; DARWIN-64-STATIC: movl $262144, %eax
6543; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
6544; DARWIN-64-STATIC-NEXT: ret
6545
6546; DARWIN-64-DYNAMIC: _bam01:
6547; DARWIN-64-DYNAMIC: movl $262144, %eax
6548; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
6549; DARWIN-64-DYNAMIC-NEXT: ret
6550
6551; DARWIN-64-PIC: _bam01:
6552; DARWIN-64-PIC: movl $262144, %eax
6553; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
6554; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006555}
6556
6557define i8* @bxm01() nounwind {
6558entry:
6559 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006560; LINUX-64-STATIC: bxm01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006561; LINUX-64-STATIC: movl $xdst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006562; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006563
6564; LINUX-32-STATIC: bxm01:
6565; LINUX-32-STATIC: movl $xdst+262144, %eax
6566; LINUX-32-STATIC-NEXT: ret
6567
6568; LINUX-32-PIC: bxm01:
6569; LINUX-32-PIC: movl $xdst+262144, %eax
6570; LINUX-32-PIC-NEXT: ret
6571
6572; LINUX-64-PIC: bxm01:
6573; LINUX-64-PIC: movl $262144, %eax
6574; LINUX-64-PIC-NEXT: addq xdst@GOTPCREL(%rip), %rax
6575; LINUX-64-PIC-NEXT: ret
6576
6577; DARWIN-32-STATIC: _bxm01:
6578; DARWIN-32-STATIC: movl $_xdst+262144, %eax
6579; DARWIN-32-STATIC-NEXT: ret
6580
6581; DARWIN-32-DYNAMIC: _bxm01:
6582; DARWIN-32-DYNAMIC: movl $262144, %eax
6583; DARWIN-32-DYNAMIC-NEXT: addl L_xdst$non_lazy_ptr, %eax
6584; DARWIN-32-DYNAMIC-NEXT: ret
6585
6586; DARWIN-32-PIC: _bxm01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006587; DARWIN-32-PIC: calll L101$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006588; DARWIN-32-PIC-NEXT: L101$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006589; DARWIN-32-PIC-NEXT: popl %ecx
6590; DARWIN-32-PIC-NEXT: movl $262144, %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006591; DARWIN-32-PIC-NEXT: addl L_xdst$non_lazy_ptr-L101$pb(%ecx), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006592; DARWIN-32-PIC-NEXT: ret
6593
6594; DARWIN-64-STATIC: _bxm01:
6595; DARWIN-64-STATIC: movl $262144, %eax
6596; DARWIN-64-STATIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax
6597; DARWIN-64-STATIC-NEXT: ret
6598
6599; DARWIN-64-DYNAMIC: _bxm01:
6600; DARWIN-64-DYNAMIC: movl $262144, %eax
6601; DARWIN-64-DYNAMIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax
6602; DARWIN-64-DYNAMIC-NEXT: ret
6603
6604; DARWIN-64-PIC: _bxm01:
6605; DARWIN-64-PIC: movl $262144, %eax
6606; DARWIN-64-PIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax
6607; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006608}
6609
6610define i8* @bam02() nounwind {
6611entry:
6612 %0 = load i32** @ptr, align 8
6613 %1 = getelementptr i32* %0, i64 65536
6614 %2 = bitcast i32* %1 to i8*
6615 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006616; LINUX-64-STATIC: bam02:
6617; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006618; LINUX-64-STATIC: addq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006619; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006620
6621; LINUX-32-STATIC: bam02:
6622; LINUX-32-STATIC: movl $262144, %eax
6623; LINUX-32-STATIC-NEXT: addl ptr, %eax
6624; LINUX-32-STATIC-NEXT: ret
6625
6626; LINUX-32-PIC: bam02:
6627; LINUX-32-PIC: movl $262144, %eax
6628; LINUX-32-PIC-NEXT: addl ptr, %eax
6629; LINUX-32-PIC-NEXT: ret
6630
6631; LINUX-64-PIC: bam02:
6632; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), %rcx
6633; LINUX-64-PIC-NEXT: movl $262144, %eax
6634; LINUX-64-PIC-NEXT: addq (%rcx), %rax
6635; LINUX-64-PIC-NEXT: ret
6636
6637; DARWIN-32-STATIC: _bam02:
6638; DARWIN-32-STATIC: movl $262144, %eax
6639; DARWIN-32-STATIC-NEXT: addl _ptr, %eax
6640; DARWIN-32-STATIC-NEXT: ret
6641
6642; DARWIN-32-DYNAMIC: _bam02:
6643; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, %ecx
6644; DARWIN-32-DYNAMIC-NEXT: movl $262144, %eax
6645; DARWIN-32-DYNAMIC-NEXT: addl (%ecx), %eax
6646; DARWIN-32-DYNAMIC-NEXT: ret
6647
6648; DARWIN-32-PIC: _bam02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006649; DARWIN-32-PIC: calll L102$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006650; DARWIN-32-PIC-NEXT: L102$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006651; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006652; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L102$pb(%eax), %ecx
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006653; DARWIN-32-PIC-NEXT: movl $262144, %eax
6654; DARWIN-32-PIC-NEXT: addl (%ecx), %eax
6655; DARWIN-32-PIC-NEXT: ret
6656
6657; DARWIN-64-STATIC: _bam02:
6658; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), %rcx
6659; DARWIN-64-STATIC-NEXT: movl $262144, %eax
6660; DARWIN-64-STATIC-NEXT: addq (%rcx), %rax
6661; DARWIN-64-STATIC-NEXT: ret
6662
6663; DARWIN-64-DYNAMIC: _bam02:
6664; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), %rcx
6665; DARWIN-64-DYNAMIC-NEXT: movl $262144, %eax
6666; DARWIN-64-DYNAMIC-NEXT: addq (%rcx), %rax
6667; DARWIN-64-DYNAMIC-NEXT: ret
6668
6669; DARWIN-64-PIC: _bam02:
6670; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), %rcx
6671; DARWIN-64-PIC-NEXT: movl $262144, %eax
6672; DARWIN-64-PIC-NEXT: addq (%rcx), %rax
6673; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006674}
6675
6676define i8* @bam03() nounwind {
6677entry:
6678 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006679; LINUX-64-STATIC: bam03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006680; LINUX-64-STATIC: movl $dsrc+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006681; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006682
6683; LINUX-32-STATIC: bam03:
6684; LINUX-32-STATIC: movl $dsrc+262144, %eax
6685; LINUX-32-STATIC-NEXT: ret
6686
6687; LINUX-32-PIC: bam03:
6688; LINUX-32-PIC: movl $dsrc+262144, %eax
6689; LINUX-32-PIC-NEXT: ret
6690
6691; LINUX-64-PIC: bam03:
6692; LINUX-64-PIC: movl $262144, %eax
6693; LINUX-64-PIC-NEXT: addq dsrc@GOTPCREL(%rip), %rax
6694; LINUX-64-PIC-NEXT: ret
6695
6696; DARWIN-32-STATIC: _bam03:
6697; DARWIN-32-STATIC: movl $_dsrc+262144, %eax
6698; DARWIN-32-STATIC-NEXT: ret
6699
6700; DARWIN-32-DYNAMIC: _bam03:
6701; DARWIN-32-DYNAMIC: movl $_dsrc+262144, %eax
6702; DARWIN-32-DYNAMIC-NEXT: ret
6703
6704; DARWIN-32-PIC: _bam03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006705; DARWIN-32-PIC: calll L103$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006706; DARWIN-32-PIC-NEXT: L103$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006707; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006708; DARWIN-32-PIC-NEXT: leal (_dsrc-L103$pb)+262144(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006709; DARWIN-32-PIC-NEXT: ret
6710
6711; DARWIN-64-STATIC: _bam03:
6712; DARWIN-64-STATIC: leaq _dsrc+262144(%rip), %rax
6713; DARWIN-64-STATIC-NEXT: ret
6714
6715; DARWIN-64-DYNAMIC: _bam03:
6716; DARWIN-64-DYNAMIC: leaq _dsrc+262144(%rip), %rax
6717; DARWIN-64-DYNAMIC-NEXT: ret
6718
6719; DARWIN-64-PIC: _bam03:
6720; DARWIN-64-PIC: leaq _dsrc+262144(%rip), %rax
6721; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006722}
6723
6724define i8* @bam04() nounwind {
6725entry:
6726 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006727; LINUX-64-STATIC: bam04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006728; LINUX-64-STATIC: movl $ddst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006729; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006730
6731; LINUX-32-STATIC: bam04:
6732; LINUX-32-STATIC: movl $ddst+262144, %eax
6733; LINUX-32-STATIC-NEXT: ret
6734
6735; LINUX-32-PIC: bam04:
6736; LINUX-32-PIC: movl $ddst+262144, %eax
6737; LINUX-32-PIC-NEXT: ret
6738
6739; LINUX-64-PIC: bam04:
6740; LINUX-64-PIC: movl $262144, %eax
6741; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), %rax
6742; LINUX-64-PIC-NEXT: ret
6743
6744; DARWIN-32-STATIC: _bam04:
6745; DARWIN-32-STATIC: movl $_ddst+262144, %eax
6746; DARWIN-32-STATIC-NEXT: ret
6747
6748; DARWIN-32-DYNAMIC: _bam04:
6749; DARWIN-32-DYNAMIC: movl $_ddst+262144, %eax
6750; DARWIN-32-DYNAMIC-NEXT: ret
6751
6752; DARWIN-32-PIC: _bam04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006753; DARWIN-32-PIC: calll L104$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006754; DARWIN-32-PIC-NEXT: L104$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006755; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006756; DARWIN-32-PIC-NEXT: leal (_ddst-L104$pb)+262144(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006757; DARWIN-32-PIC-NEXT: ret
6758
6759; DARWIN-64-STATIC: _bam04:
6760; DARWIN-64-STATIC: leaq _ddst+262144(%rip), %rax
6761; DARWIN-64-STATIC-NEXT: ret
6762
6763; DARWIN-64-DYNAMIC: _bam04:
6764; DARWIN-64-DYNAMIC: leaq _ddst+262144(%rip), %rax
6765; DARWIN-64-DYNAMIC-NEXT: ret
6766
6767; DARWIN-64-PIC: _bam04:
6768; DARWIN-64-PIC: leaq _ddst+262144(%rip), %rax
6769; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006770}
6771
6772define i8* @bam05() nounwind {
6773entry:
6774 %0 = load i32** @dptr, align 8
6775 %1 = getelementptr i32* %0, i64 65536
6776 %2 = bitcast i32* %1 to i8*
6777 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006778; LINUX-64-STATIC: bam05:
6779; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006780; LINUX-64-STATIC: addq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006781; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006782
6783; LINUX-32-STATIC: bam05:
6784; LINUX-32-STATIC: movl $262144, %eax
6785; LINUX-32-STATIC-NEXT: addl dptr, %eax
6786; LINUX-32-STATIC-NEXT: ret
6787
6788; LINUX-32-PIC: bam05:
6789; LINUX-32-PIC: movl $262144, %eax
6790; LINUX-32-PIC-NEXT: addl dptr, %eax
6791; LINUX-32-PIC-NEXT: ret
6792
6793; LINUX-64-PIC: bam05:
6794; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), %rcx
6795; LINUX-64-PIC-NEXT: movl $262144, %eax
6796; LINUX-64-PIC-NEXT: addq (%rcx), %rax
6797; LINUX-64-PIC-NEXT: ret
6798
6799; DARWIN-32-STATIC: _bam05:
6800; DARWIN-32-STATIC: movl $262144, %eax
6801; DARWIN-32-STATIC-NEXT: addl _dptr, %eax
6802; DARWIN-32-STATIC-NEXT: ret
6803
6804; DARWIN-32-DYNAMIC: _bam05:
6805; DARWIN-32-DYNAMIC: movl $262144, %eax
6806; DARWIN-32-DYNAMIC-NEXT: addl _dptr, %eax
6807; DARWIN-32-DYNAMIC-NEXT: ret
6808
6809; DARWIN-32-PIC: _bam05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006810; DARWIN-32-PIC: calll L105$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006811; DARWIN-32-PIC-NEXT: L105$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006812; DARWIN-32-PIC-NEXT: popl %ecx
6813; DARWIN-32-PIC-NEXT: movl $262144, %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006814; DARWIN-32-PIC-NEXT: addl _dptr-L105$pb(%ecx), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006815; DARWIN-32-PIC-NEXT: ret
6816
6817; DARWIN-64-STATIC: _bam05:
6818; DARWIN-64-STATIC: movl $262144, %eax
6819; DARWIN-64-STATIC-NEXT: addq _dptr(%rip), %rax
6820; DARWIN-64-STATIC-NEXT: ret
6821
6822; DARWIN-64-DYNAMIC: _bam05:
6823; DARWIN-64-DYNAMIC: movl $262144, %eax
6824; DARWIN-64-DYNAMIC-NEXT: addq _dptr(%rip), %rax
6825; DARWIN-64-DYNAMIC-NEXT: ret
6826
6827; DARWIN-64-PIC: _bam05:
6828; DARWIN-64-PIC: movl $262144, %eax
6829; DARWIN-64-PIC-NEXT: addq _dptr(%rip), %rax
6830; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006831}
6832
6833define i8* @bam06() nounwind {
6834entry:
6835 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006836; LINUX-64-STATIC: bam06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006837; LINUX-64-STATIC: movl $lsrc+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006838; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006839
6840; LINUX-32-STATIC: bam06:
6841; LINUX-32-STATIC: movl $lsrc+262144, %eax
6842; LINUX-32-STATIC-NEXT: ret
6843
6844; LINUX-32-PIC: bam06:
6845; LINUX-32-PIC: movl $lsrc+262144, %eax
6846; LINUX-32-PIC-NEXT: ret
6847
6848; LINUX-64-PIC: bam06:
6849; LINUX-64-PIC: leaq lsrc+262144(%rip), %rax
6850; LINUX-64-PIC-NEXT: ret
6851
6852; DARWIN-32-STATIC: _bam06:
6853; DARWIN-32-STATIC: movl $_lsrc+262144, %eax
6854; DARWIN-32-STATIC-NEXT: ret
6855
6856; DARWIN-32-DYNAMIC: _bam06:
6857; DARWIN-32-DYNAMIC: movl $_lsrc+262144, %eax
6858; DARWIN-32-DYNAMIC-NEXT: ret
6859
6860; DARWIN-32-PIC: _bam06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006861; DARWIN-32-PIC: calll L106$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006862; DARWIN-32-PIC-NEXT: L106$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006863; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006864; DARWIN-32-PIC-NEXT: leal (_lsrc-L106$pb)+262144(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006865; DARWIN-32-PIC-NEXT: ret
6866
6867; DARWIN-64-STATIC: _bam06:
6868; DARWIN-64-STATIC: leaq _lsrc+262144(%rip), %rax
6869; DARWIN-64-STATIC-NEXT: ret
6870
6871; DARWIN-64-DYNAMIC: _bam06:
6872; DARWIN-64-DYNAMIC: leaq _lsrc+262144(%rip), %rax
6873; DARWIN-64-DYNAMIC-NEXT: ret
6874
6875; DARWIN-64-PIC: _bam06:
6876; DARWIN-64-PIC: leaq _lsrc+262144(%rip), %rax
6877; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006878}
6879
6880define i8* @bam07() nounwind {
6881entry:
6882 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006883; LINUX-64-STATIC: bam07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006884; LINUX-64-STATIC: movl $ldst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006885; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006886
6887; LINUX-32-STATIC: bam07:
6888; LINUX-32-STATIC: movl $ldst+262144, %eax
6889; LINUX-32-STATIC-NEXT: ret
6890
6891; LINUX-32-PIC: bam07:
6892; LINUX-32-PIC: movl $ldst+262144, %eax
6893; LINUX-32-PIC-NEXT: ret
6894
6895; LINUX-64-PIC: bam07:
6896; LINUX-64-PIC: leaq ldst+262144(%rip), %rax
6897; LINUX-64-PIC-NEXT: ret
6898
6899; DARWIN-32-STATIC: _bam07:
6900; DARWIN-32-STATIC: movl $_ldst+262144, %eax
6901; DARWIN-32-STATIC-NEXT: ret
6902
6903; DARWIN-32-DYNAMIC: _bam07:
6904; DARWIN-32-DYNAMIC: movl $_ldst+262144, %eax
6905; DARWIN-32-DYNAMIC-NEXT: ret
6906
6907; DARWIN-32-PIC: _bam07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006908; DARWIN-32-PIC: calll L107$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006909; DARWIN-32-PIC-NEXT: L107$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006910; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006911; DARWIN-32-PIC-NEXT: leal (_ldst-L107$pb)+262144(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006912; DARWIN-32-PIC-NEXT: ret
6913
6914; DARWIN-64-STATIC: _bam07:
6915; DARWIN-64-STATIC: leaq _ldst+262144(%rip), %rax
6916; DARWIN-64-STATIC-NEXT: ret
6917
6918; DARWIN-64-DYNAMIC: _bam07:
6919; DARWIN-64-DYNAMIC: leaq _ldst+262144(%rip), %rax
6920; DARWIN-64-DYNAMIC-NEXT: ret
6921
6922; DARWIN-64-PIC: _bam07:
6923; DARWIN-64-PIC: leaq _ldst+262144(%rip), %rax
6924; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006925}
6926
6927define i8* @bam08() nounwind {
6928entry:
6929 %0 = load i32** @lptr, align 8
6930 %1 = getelementptr i32* %0, i64 65536
6931 %2 = bitcast i32* %1 to i8*
6932 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006933; LINUX-64-STATIC: bam08:
6934; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006935; LINUX-64-STATIC: addq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006936; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006937
6938; LINUX-32-STATIC: bam08:
6939; LINUX-32-STATIC: movl $262144, %eax
6940; LINUX-32-STATIC-NEXT: addl lptr, %eax
6941; LINUX-32-STATIC-NEXT: ret
6942
6943; LINUX-32-PIC: bam08:
6944; LINUX-32-PIC: movl $262144, %eax
6945; LINUX-32-PIC-NEXT: addl lptr, %eax
6946; LINUX-32-PIC-NEXT: ret
6947
6948; LINUX-64-PIC: bam08:
6949; LINUX-64-PIC: movl $262144, %eax
6950; LINUX-64-PIC-NEXT: addq lptr(%rip), %rax
6951; LINUX-64-PIC-NEXT: ret
6952
6953; DARWIN-32-STATIC: _bam08:
6954; DARWIN-32-STATIC: movl $262144, %eax
6955; DARWIN-32-STATIC-NEXT: addl _lptr, %eax
6956; DARWIN-32-STATIC-NEXT: ret
6957
6958; DARWIN-32-DYNAMIC: _bam08:
6959; DARWIN-32-DYNAMIC: movl $262144, %eax
6960; DARWIN-32-DYNAMIC-NEXT: addl _lptr, %eax
6961; DARWIN-32-DYNAMIC-NEXT: ret
6962
6963; DARWIN-32-PIC: _bam08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006964; DARWIN-32-PIC: calll L108$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006965; DARWIN-32-PIC-NEXT: L108$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006966; DARWIN-32-PIC-NEXT: popl %ecx
6967; DARWIN-32-PIC-NEXT: movl $262144, %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00006968; DARWIN-32-PIC-NEXT: addl _lptr-L108$pb(%ecx), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006969; DARWIN-32-PIC-NEXT: ret
6970
6971; DARWIN-64-STATIC: _bam08:
6972; DARWIN-64-STATIC: movl $262144, %eax
6973; DARWIN-64-STATIC-NEXT: addq _lptr(%rip), %rax
6974; DARWIN-64-STATIC-NEXT: ret
6975
6976; DARWIN-64-DYNAMIC: _bam08:
6977; DARWIN-64-DYNAMIC: movl $262144, %eax
6978; DARWIN-64-DYNAMIC-NEXT: addq _lptr(%rip), %rax
6979; DARWIN-64-DYNAMIC-NEXT: ret
6980
6981; DARWIN-64-PIC: _bam08:
6982; DARWIN-64-PIC: movl $262144, %eax
6983; DARWIN-64-PIC-NEXT: addq _lptr(%rip), %rax
6984; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006985}
6986
6987define i8* @cat00(i64 %i) nounwind {
6988entry:
6989 %0 = add i64 %i, 16
6990 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
6991 %2 = bitcast i32* %1 to i8*
6992 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006993; LINUX-64-STATIC: cat00:
6994; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax
6995; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006996
6997; LINUX-32-STATIC: cat00:
6998; LINUX-32-STATIC: movl 4(%esp), %eax
6999; LINUX-32-STATIC-NEXT: leal src+64(,%eax,4), %eax
7000; LINUX-32-STATIC-NEXT: ret
7001
7002; LINUX-32-PIC: cat00:
7003; LINUX-32-PIC: movl 4(%esp), %eax
7004; LINUX-32-PIC-NEXT: leal src+64(,%eax,4), %eax
7005; LINUX-32-PIC-NEXT: ret
7006
7007; LINUX-64-PIC: cat00:
7008; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
7009; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7010; LINUX-64-PIC-NEXT: ret
7011
7012; DARWIN-32-STATIC: _cat00:
7013; DARWIN-32-STATIC: movl 4(%esp), %eax
7014; DARWIN-32-STATIC-NEXT: leal _src+64(,%eax,4), %eax
7015; DARWIN-32-STATIC-NEXT: ret
7016
7017; DARWIN-32-DYNAMIC: _cat00:
7018; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7019; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, %ecx
7020; DARWIN-32-DYNAMIC-NEXT: leal 64(%ecx,%eax,4), %eax
7021; DARWIN-32-DYNAMIC-NEXT: ret
7022
7023; DARWIN-32-PIC: _cat00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007024; DARWIN-32-PIC: calll L109$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007025; DARWIN-32-PIC-NEXT: L109$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007026; DARWIN-32-PIC-NEXT: popl %eax
7027; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007028; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L109$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007029; DARWIN-32-PIC-NEXT: leal 64(%eax,%ecx,4), %eax
7030; DARWIN-32-PIC-NEXT: ret
7031
7032; DARWIN-64-STATIC: _cat00:
7033; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
7034; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7035; DARWIN-64-STATIC-NEXT: ret
7036
7037; DARWIN-64-DYNAMIC: _cat00:
7038; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
7039; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7040; DARWIN-64-DYNAMIC-NEXT: ret
7041
7042; DARWIN-64-PIC: _cat00:
7043; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
7044; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7045; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007046}
7047
7048define i8* @cxt00(i64 %i) nounwind {
7049entry:
7050 %0 = add i64 %i, 16
7051 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7052 %2 = bitcast i32* %1 to i8*
7053 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007054; LINUX-64-STATIC: cxt00:
7055; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax
7056; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007057
7058; LINUX-32-STATIC: cxt00:
7059; LINUX-32-STATIC: movl 4(%esp), %eax
7060; LINUX-32-STATIC-NEXT: leal xsrc+64(,%eax,4), %eax
7061; LINUX-32-STATIC-NEXT: ret
7062
7063; LINUX-32-PIC: cxt00:
7064; LINUX-32-PIC: movl 4(%esp), %eax
7065; LINUX-32-PIC-NEXT: leal xsrc+64(,%eax,4), %eax
7066; LINUX-32-PIC-NEXT: ret
7067
7068; LINUX-64-PIC: cxt00:
7069; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
7070; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7071; LINUX-64-PIC-NEXT: ret
7072
7073; DARWIN-32-STATIC: _cxt00:
7074; DARWIN-32-STATIC: movl 4(%esp), %eax
7075; DARWIN-32-STATIC-NEXT: leal _xsrc+64(,%eax,4), %eax
7076; DARWIN-32-STATIC-NEXT: ret
7077
7078; DARWIN-32-DYNAMIC: _cxt00:
7079; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7080; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, %ecx
7081; DARWIN-32-DYNAMIC-NEXT: leal 64(%ecx,%eax,4), %eax
7082; DARWIN-32-DYNAMIC-NEXT: ret
7083
7084; DARWIN-32-PIC: _cxt00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007085; DARWIN-32-PIC: calll L110$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007086; DARWIN-32-PIC-NEXT: L110$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007087; DARWIN-32-PIC-NEXT: popl %eax
7088; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007089; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L110$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007090; DARWIN-32-PIC-NEXT: leal 64(%eax,%ecx,4), %eax
7091; DARWIN-32-PIC-NEXT: ret
7092
7093; DARWIN-64-STATIC: _cxt00:
7094; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
7095; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7096; DARWIN-64-STATIC-NEXT: ret
7097
7098; DARWIN-64-DYNAMIC: _cxt00:
7099; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
7100; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7101; DARWIN-64-DYNAMIC-NEXT: ret
7102
7103; DARWIN-64-PIC: _cxt00:
7104; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
7105; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7106; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007107}
7108
7109define i8* @cat01(i64 %i) nounwind {
7110entry:
7111 %0 = add i64 %i, 16
7112 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7113 %2 = bitcast i32* %1 to i8*
7114 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007115; LINUX-64-STATIC: cat01:
7116; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax
7117; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007118
7119; LINUX-32-STATIC: cat01:
7120; LINUX-32-STATIC: movl 4(%esp), %eax
7121; LINUX-32-STATIC-NEXT: leal dst+64(,%eax,4), %eax
7122; LINUX-32-STATIC-NEXT: ret
7123
7124; LINUX-32-PIC: cat01:
7125; LINUX-32-PIC: movl 4(%esp), %eax
7126; LINUX-32-PIC-NEXT: leal dst+64(,%eax,4), %eax
7127; LINUX-32-PIC-NEXT: ret
7128
7129; LINUX-64-PIC: cat01:
7130; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
7131; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7132; LINUX-64-PIC-NEXT: ret
7133
7134; DARWIN-32-STATIC: _cat01:
7135; DARWIN-32-STATIC: movl 4(%esp), %eax
7136; DARWIN-32-STATIC-NEXT: leal _dst+64(,%eax,4), %eax
7137; DARWIN-32-STATIC-NEXT: ret
7138
7139; DARWIN-32-DYNAMIC: _cat01:
7140; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7141; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %ecx
7142; DARWIN-32-DYNAMIC-NEXT: leal 64(%ecx,%eax,4), %eax
7143; DARWIN-32-DYNAMIC-NEXT: ret
7144
7145; DARWIN-32-PIC: _cat01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007146; DARWIN-32-PIC: calll L111$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007147; DARWIN-32-PIC-NEXT: L111$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007148; DARWIN-32-PIC-NEXT: popl %eax
7149; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007150; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L111$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007151; DARWIN-32-PIC-NEXT: leal 64(%eax,%ecx,4), %eax
7152; DARWIN-32-PIC-NEXT: ret
7153
7154; DARWIN-64-STATIC: _cat01:
7155; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
7156; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7157; DARWIN-64-STATIC-NEXT: ret
7158
7159; DARWIN-64-DYNAMIC: _cat01:
7160; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
7161; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7162; DARWIN-64-DYNAMIC-NEXT: ret
7163
7164; DARWIN-64-PIC: _cat01:
7165; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
7166; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7167; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007168}
7169
7170define i8* @cxt01(i64 %i) nounwind {
7171entry:
7172 %0 = add i64 %i, 16
7173 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7174 %2 = bitcast i32* %1 to i8*
7175 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007176; LINUX-64-STATIC: cxt01:
7177; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax
7178; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007179
7180; LINUX-32-STATIC: cxt01:
7181; LINUX-32-STATIC: movl 4(%esp), %eax
7182; LINUX-32-STATIC-NEXT: leal xdst+64(,%eax,4), %eax
7183; LINUX-32-STATIC-NEXT: ret
7184
7185; LINUX-32-PIC: cxt01:
7186; LINUX-32-PIC: movl 4(%esp), %eax
7187; LINUX-32-PIC-NEXT: leal xdst+64(,%eax,4), %eax
7188; LINUX-32-PIC-NEXT: ret
7189
7190; LINUX-64-PIC: cxt01:
7191; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
7192; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7193; LINUX-64-PIC-NEXT: ret
7194
7195; DARWIN-32-STATIC: _cxt01:
7196; DARWIN-32-STATIC: movl 4(%esp), %eax
7197; DARWIN-32-STATIC-NEXT: leal _xdst+64(,%eax,4), %eax
7198; DARWIN-32-STATIC-NEXT: ret
7199
7200; DARWIN-32-DYNAMIC: _cxt01:
7201; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7202; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, %ecx
7203; DARWIN-32-DYNAMIC-NEXT: leal 64(%ecx,%eax,4), %eax
7204; DARWIN-32-DYNAMIC-NEXT: ret
7205
7206; DARWIN-32-PIC: _cxt01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007207; DARWIN-32-PIC: calll L112$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007208; DARWIN-32-PIC-NEXT: L112$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007209; DARWIN-32-PIC-NEXT: popl %eax
7210; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007211; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L112$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007212; DARWIN-32-PIC-NEXT: leal 64(%eax,%ecx,4), %eax
7213; DARWIN-32-PIC-NEXT: ret
7214
7215; DARWIN-64-STATIC: _cxt01:
7216; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
7217; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7218; DARWIN-64-STATIC-NEXT: ret
7219
7220; DARWIN-64-DYNAMIC: _cxt01:
7221; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
7222; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7223; DARWIN-64-DYNAMIC-NEXT: ret
7224
7225; DARWIN-64-PIC: _cxt01:
7226; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
7227; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7228; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007229}
7230
7231define i8* @cat02(i64 %i) nounwind {
7232entry:
7233 %0 = load i32** @ptr, align 8
7234 %1 = add i64 %i, 16
7235 %2 = getelementptr i32* %0, i64 %1
7236 %3 = bitcast i32* %2 to i8*
7237 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00007238; LINUX-64-STATIC: cat02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00007239; LINUX-64-STATIC: movq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007240; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax
7241; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007242
7243; LINUX-32-STATIC: cat02:
7244; LINUX-32-STATIC: movl 4(%esp), %eax
7245; LINUX-32-STATIC-NEXT: movl ptr, %ecx
7246; LINUX-32-STATIC-NEXT: leal 64(%ecx,%eax,4), %eax
7247; LINUX-32-STATIC-NEXT: ret
7248
7249; LINUX-32-PIC: cat02:
7250; LINUX-32-PIC: movl 4(%esp), %eax
7251; LINUX-32-PIC-NEXT: movl ptr, %ecx
7252; LINUX-32-PIC-NEXT: leal 64(%ecx,%eax,4), %eax
7253; LINUX-32-PIC-NEXT: ret
7254
7255; LINUX-64-PIC: cat02:
7256; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), %rax
7257; LINUX-64-PIC-NEXT: movq (%rax), %rax
7258; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7259; LINUX-64-PIC-NEXT: ret
7260
7261; DARWIN-32-STATIC: _cat02:
7262; DARWIN-32-STATIC: movl 4(%esp), %eax
7263; DARWIN-32-STATIC-NEXT: movl _ptr, %ecx
7264; DARWIN-32-STATIC-NEXT: leal 64(%ecx,%eax,4), %eax
7265; DARWIN-32-STATIC-NEXT: ret
7266
7267; DARWIN-32-DYNAMIC: _cat02:
7268; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, %eax
7269; DARWIN-32-DYNAMIC-NEXT: movl (%eax), %eax
7270; DARWIN-32-DYNAMIC-NEXT: movl 4(%esp), %ecx
7271; DARWIN-32-DYNAMIC-NEXT: leal 64(%eax,%ecx,4), %eax
7272; DARWIN-32-DYNAMIC-NEXT: ret
7273
7274; DARWIN-32-PIC: _cat02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007275; DARWIN-32-PIC: calll L113$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007276; DARWIN-32-PIC-NEXT: L113$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007277; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00007278; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L113$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007279; DARWIN-32-PIC-NEXT: movl (%eax), %eax
7280; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
7281; DARWIN-32-PIC-NEXT: leal 64(%eax,%ecx,4), %eax
7282; DARWIN-32-PIC-NEXT: ret
7283
7284; DARWIN-64-STATIC: _cat02:
7285; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), %rax
7286; DARWIN-64-STATIC-NEXT: movq (%rax), %rax
7287; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7288; DARWIN-64-STATIC-NEXT: ret
7289
7290; DARWIN-64-DYNAMIC: _cat02:
7291; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), %rax
7292; DARWIN-64-DYNAMIC-NEXT: movq (%rax), %rax
7293; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7294; DARWIN-64-DYNAMIC-NEXT: ret
7295
7296; DARWIN-64-PIC: _cat02:
7297; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), %rax
7298; DARWIN-64-PIC-NEXT: movq (%rax), %rax
7299; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7300; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007301}
7302
7303define i8* @cat03(i64 %i) nounwind {
7304entry:
7305 %0 = add i64 %i, 16
7306 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7307 %2 = bitcast i32* %1 to i8*
7308 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007309; LINUX-64-STATIC: cat03:
7310; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax
7311; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007312
7313; LINUX-32-STATIC: cat03:
7314; LINUX-32-STATIC: movl 4(%esp), %eax
7315; LINUX-32-STATIC-NEXT: leal dsrc+64(,%eax,4), %eax
7316; LINUX-32-STATIC-NEXT: ret
7317
7318; LINUX-32-PIC: cat03:
7319; LINUX-32-PIC: movl 4(%esp), %eax
7320; LINUX-32-PIC-NEXT: leal dsrc+64(,%eax,4), %eax
7321; LINUX-32-PIC-NEXT: ret
7322
7323; LINUX-64-PIC: cat03:
7324; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
7325; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7326; LINUX-64-PIC-NEXT: ret
7327
7328; DARWIN-32-STATIC: _cat03:
7329; DARWIN-32-STATIC: movl 4(%esp), %eax
7330; DARWIN-32-STATIC-NEXT: leal _dsrc+64(,%eax,4), %eax
7331; DARWIN-32-STATIC-NEXT: ret
7332
7333; DARWIN-32-DYNAMIC: _cat03:
7334; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7335; DARWIN-32-DYNAMIC-NEXT: leal _dsrc+64(,%eax,4), %eax
7336; DARWIN-32-DYNAMIC-NEXT: ret
7337
7338; DARWIN-32-PIC: _cat03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007339; DARWIN-32-PIC: calll L114$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007340; DARWIN-32-PIC-NEXT: L114$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007341; DARWIN-32-PIC-NEXT: popl %eax
7342; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007343; DARWIN-32-PIC-NEXT: leal (_dsrc-L114$pb)+64(%eax,%ecx,4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007344; DARWIN-32-PIC-NEXT: ret
7345
7346; DARWIN-64-STATIC: _cat03:
7347; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
7348; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7349; DARWIN-64-STATIC-NEXT: ret
7350
7351; DARWIN-64-DYNAMIC: _cat03:
7352; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
7353; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7354; DARWIN-64-DYNAMIC-NEXT: ret
7355
7356; DARWIN-64-PIC: _cat03:
7357; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
7358; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7359; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007360}
7361
7362define i8* @cat04(i64 %i) nounwind {
7363entry:
7364 %0 = add i64 %i, 16
7365 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
7366 %2 = bitcast i32* %1 to i8*
7367 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007368; LINUX-64-STATIC: cat04:
7369; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax
7370; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007371
7372; LINUX-32-STATIC: cat04:
7373; LINUX-32-STATIC: movl 4(%esp), %eax
7374; LINUX-32-STATIC-NEXT: leal ddst+64(,%eax,4), %eax
7375; LINUX-32-STATIC-NEXT: ret
7376
7377; LINUX-32-PIC: cat04:
7378; LINUX-32-PIC: movl 4(%esp), %eax
7379; LINUX-32-PIC-NEXT: leal ddst+64(,%eax,4), %eax
7380; LINUX-32-PIC-NEXT: ret
7381
7382; LINUX-64-PIC: cat04:
7383; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
7384; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7385; LINUX-64-PIC-NEXT: ret
7386
7387; DARWIN-32-STATIC: _cat04:
7388; DARWIN-32-STATIC: movl 4(%esp), %eax
7389; DARWIN-32-STATIC-NEXT: leal _ddst+64(,%eax,4), %eax
7390; DARWIN-32-STATIC-NEXT: ret
7391
7392; DARWIN-32-DYNAMIC: _cat04:
7393; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7394; DARWIN-32-DYNAMIC-NEXT: leal _ddst+64(,%eax,4), %eax
7395; DARWIN-32-DYNAMIC-NEXT: ret
7396
7397; DARWIN-32-PIC: _cat04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007398; DARWIN-32-PIC: calll L115$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007399; DARWIN-32-PIC-NEXT: L115$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007400; DARWIN-32-PIC-NEXT: popl %eax
7401; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007402; DARWIN-32-PIC-NEXT: leal (_ddst-L115$pb)+64(%eax,%ecx,4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007403; DARWIN-32-PIC-NEXT: ret
7404
7405; DARWIN-64-STATIC: _cat04:
7406; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
7407; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7408; DARWIN-64-STATIC-NEXT: ret
7409
7410; DARWIN-64-DYNAMIC: _cat04:
7411; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
7412; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7413; DARWIN-64-DYNAMIC-NEXT: ret
7414
7415; DARWIN-64-PIC: _cat04:
7416; DARWIN-64-PIC: leaq _ddst(%rip), %rax
7417; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7418; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007419}
7420
7421define i8* @cat05(i64 %i) nounwind {
7422entry:
7423 %0 = load i32** @dptr, align 8
7424 %1 = add i64 %i, 16
7425 %2 = getelementptr i32* %0, i64 %1
7426 %3 = bitcast i32* %2 to i8*
7427 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00007428; LINUX-64-STATIC: cat05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00007429; LINUX-64-STATIC: movq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007430; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax
7431; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007432
7433; LINUX-32-STATIC: cat05:
7434; LINUX-32-STATIC: movl 4(%esp), %eax
7435; LINUX-32-STATIC-NEXT: movl dptr, %ecx
7436; LINUX-32-STATIC-NEXT: leal 64(%ecx,%eax,4), %eax
7437; LINUX-32-STATIC-NEXT: ret
7438
7439; LINUX-32-PIC: cat05:
7440; LINUX-32-PIC: movl 4(%esp), %eax
7441; LINUX-32-PIC-NEXT: movl dptr, %ecx
7442; LINUX-32-PIC-NEXT: leal 64(%ecx,%eax,4), %eax
7443; LINUX-32-PIC-NEXT: ret
7444
7445; LINUX-64-PIC: cat05:
7446; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), %rax
7447; LINUX-64-PIC-NEXT: movq (%rax), %rax
7448; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7449; LINUX-64-PIC-NEXT: ret
7450
7451; DARWIN-32-STATIC: _cat05:
7452; DARWIN-32-STATIC: movl 4(%esp), %eax
7453; DARWIN-32-STATIC-NEXT: movl _dptr, %ecx
7454; DARWIN-32-STATIC-NEXT: leal 64(%ecx,%eax,4), %eax
7455; DARWIN-32-STATIC-NEXT: ret
7456
7457; DARWIN-32-DYNAMIC: _cat05:
7458; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7459; DARWIN-32-DYNAMIC-NEXT: movl _dptr, %ecx
7460; DARWIN-32-DYNAMIC-NEXT: leal 64(%ecx,%eax,4), %eax
7461; DARWIN-32-DYNAMIC-NEXT: ret
7462
7463; DARWIN-32-PIC: _cat05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007464; DARWIN-32-PIC: calll L116$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007465; DARWIN-32-PIC-NEXT: L116$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007466; DARWIN-32-PIC-NEXT: popl %eax
7467; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007468; DARWIN-32-PIC-NEXT: movl _dptr-L116$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007469; DARWIN-32-PIC-NEXT: leal 64(%eax,%ecx,4), %eax
7470; DARWIN-32-PIC-NEXT: ret
7471
7472; DARWIN-64-STATIC: _cat05:
7473; DARWIN-64-STATIC: movq _dptr(%rip), %rax
7474; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7475; DARWIN-64-STATIC-NEXT: ret
7476
7477; DARWIN-64-DYNAMIC: _cat05:
7478; DARWIN-64-DYNAMIC: movq _dptr(%rip), %rax
7479; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7480; DARWIN-64-DYNAMIC-NEXT: ret
7481
7482; DARWIN-64-PIC: _cat05:
7483; DARWIN-64-PIC: movq _dptr(%rip), %rax
7484; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7485; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007486}
7487
7488define i8* @cat06(i64 %i) nounwind {
7489entry:
7490 %0 = add i64 %i, 16
7491 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
7492 %2 = bitcast i32* %1 to i8*
7493 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007494; LINUX-64-STATIC: cat06:
7495; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax
7496; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007497
7498; LINUX-32-STATIC: cat06:
7499; LINUX-32-STATIC: movl 4(%esp), %eax
7500; LINUX-32-STATIC-NEXT: leal lsrc+64(,%eax,4), %eax
7501; LINUX-32-STATIC-NEXT: ret
7502
7503; LINUX-32-PIC: cat06:
7504; LINUX-32-PIC: movl 4(%esp), %eax
7505; LINUX-32-PIC-NEXT: leal lsrc+64(,%eax,4), %eax
7506; LINUX-32-PIC-NEXT: ret
7507
7508; LINUX-64-PIC: cat06:
7509; LINUX-64-PIC: leaq lsrc(%rip), %rax
7510; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7511; LINUX-64-PIC-NEXT: ret
7512
7513; DARWIN-32-STATIC: _cat06:
7514; DARWIN-32-STATIC: movl 4(%esp), %eax
7515; DARWIN-32-STATIC-NEXT: leal _lsrc+64(,%eax,4), %eax
7516; DARWIN-32-STATIC-NEXT: ret
7517
7518; DARWIN-32-DYNAMIC: _cat06:
7519; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7520; DARWIN-32-DYNAMIC-NEXT: leal _lsrc+64(,%eax,4), %eax
7521; DARWIN-32-DYNAMIC-NEXT: ret
7522
7523; DARWIN-32-PIC: _cat06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007524; DARWIN-32-PIC: calll L117$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007525; DARWIN-32-PIC-NEXT: L117$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007526; DARWIN-32-PIC-NEXT: popl %eax
7527; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007528; DARWIN-32-PIC-NEXT: leal (_lsrc-L117$pb)+64(%eax,%ecx,4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007529; DARWIN-32-PIC-NEXT: ret
7530
7531; DARWIN-64-STATIC: _cat06:
7532; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
7533; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7534; DARWIN-64-STATIC-NEXT: ret
7535
7536; DARWIN-64-DYNAMIC: _cat06:
7537; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
7538; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7539; DARWIN-64-DYNAMIC-NEXT: ret
7540
7541; DARWIN-64-PIC: _cat06:
7542; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
7543; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7544; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007545}
7546
7547define i8* @cat07(i64 %i) nounwind {
7548entry:
7549 %0 = add i64 %i, 16
7550 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
7551 %2 = bitcast i32* %1 to i8*
7552 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007553; LINUX-64-STATIC: cat07:
7554; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax
7555; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007556
7557; LINUX-32-STATIC: cat07:
7558; LINUX-32-STATIC: movl 4(%esp), %eax
7559; LINUX-32-STATIC-NEXT: leal ldst+64(,%eax,4), %eax
7560; LINUX-32-STATIC-NEXT: ret
7561
7562; LINUX-32-PIC: cat07:
7563; LINUX-32-PIC: movl 4(%esp), %eax
7564; LINUX-32-PIC-NEXT: leal ldst+64(,%eax,4), %eax
7565; LINUX-32-PIC-NEXT: ret
7566
7567; LINUX-64-PIC: cat07:
7568; LINUX-64-PIC: leaq ldst(%rip), %rax
7569; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7570; LINUX-64-PIC-NEXT: ret
7571
7572; DARWIN-32-STATIC: _cat07:
7573; DARWIN-32-STATIC: movl 4(%esp), %eax
7574; DARWIN-32-STATIC-NEXT: leal _ldst+64(,%eax,4), %eax
7575; DARWIN-32-STATIC-NEXT: ret
7576
7577; DARWIN-32-DYNAMIC: _cat07:
7578; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7579; DARWIN-32-DYNAMIC-NEXT: leal _ldst+64(,%eax,4), %eax
7580; DARWIN-32-DYNAMIC-NEXT: ret
7581
7582; DARWIN-32-PIC: _cat07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007583; DARWIN-32-PIC: calll L118$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007584; DARWIN-32-PIC-NEXT: L118$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007585; DARWIN-32-PIC-NEXT: popl %eax
7586; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007587; DARWIN-32-PIC-NEXT: leal (_ldst-L118$pb)+64(%eax,%ecx,4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007588; DARWIN-32-PIC-NEXT: ret
7589
7590; DARWIN-64-STATIC: _cat07:
7591; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
7592; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7593; DARWIN-64-STATIC-NEXT: ret
7594
7595; DARWIN-64-DYNAMIC: _cat07:
7596; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
7597; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7598; DARWIN-64-DYNAMIC-NEXT: ret
7599
7600; DARWIN-64-PIC: _cat07:
7601; DARWIN-64-PIC: leaq _ldst(%rip), %rax
7602; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7603; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007604}
7605
7606define i8* @cat08(i64 %i) nounwind {
7607entry:
7608 %0 = load i32** @lptr, align 8
7609 %1 = add i64 %i, 16
7610 %2 = getelementptr i32* %0, i64 %1
7611 %3 = bitcast i32* %2 to i8*
7612 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00007613; LINUX-64-STATIC: cat08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00007614; LINUX-64-STATIC: movq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007615; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax
7616; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007617
7618; LINUX-32-STATIC: cat08:
7619; LINUX-32-STATIC: movl 4(%esp), %eax
7620; LINUX-32-STATIC-NEXT: movl lptr, %ecx
7621; LINUX-32-STATIC-NEXT: leal 64(%ecx,%eax,4), %eax
7622; LINUX-32-STATIC-NEXT: ret
7623
7624; LINUX-32-PIC: cat08:
7625; LINUX-32-PIC: movl 4(%esp), %eax
7626; LINUX-32-PIC-NEXT: movl lptr, %ecx
7627; LINUX-32-PIC-NEXT: leal 64(%ecx,%eax,4), %eax
7628; LINUX-32-PIC-NEXT: ret
7629
7630; LINUX-64-PIC: cat08:
7631; LINUX-64-PIC: movq lptr(%rip), %rax
7632; LINUX-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7633; LINUX-64-PIC-NEXT: ret
7634
7635; DARWIN-32-STATIC: _cat08:
7636; DARWIN-32-STATIC: movl 4(%esp), %eax
7637; DARWIN-32-STATIC-NEXT: movl _lptr, %ecx
7638; DARWIN-32-STATIC-NEXT: leal 64(%ecx,%eax,4), %eax
7639; DARWIN-32-STATIC-NEXT: ret
7640
7641; DARWIN-32-DYNAMIC: _cat08:
7642; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7643; DARWIN-32-DYNAMIC-NEXT: movl _lptr, %ecx
7644; DARWIN-32-DYNAMIC-NEXT: leal 64(%ecx,%eax,4), %eax
7645; DARWIN-32-DYNAMIC-NEXT: ret
7646
7647; DARWIN-32-PIC: _cat08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007648; DARWIN-32-PIC: calll L119$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007649; DARWIN-32-PIC-NEXT: L119$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007650; DARWIN-32-PIC-NEXT: popl %eax
7651; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007652; DARWIN-32-PIC-NEXT: movl _lptr-L119$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007653; DARWIN-32-PIC-NEXT: leal 64(%eax,%ecx,4), %eax
7654; DARWIN-32-PIC-NEXT: ret
7655
7656; DARWIN-64-STATIC: _cat08:
7657; DARWIN-64-STATIC: movq _lptr(%rip), %rax
7658; DARWIN-64-STATIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7659; DARWIN-64-STATIC-NEXT: ret
7660
7661; DARWIN-64-DYNAMIC: _cat08:
7662; DARWIN-64-DYNAMIC: movq _lptr(%rip), %rax
7663; DARWIN-64-DYNAMIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7664; DARWIN-64-DYNAMIC-NEXT: ret
7665
7666; DARWIN-64-PIC: _cat08:
7667; DARWIN-64-PIC: movq _lptr(%rip), %rax
7668; DARWIN-64-PIC-NEXT: leaq 64(%rax,%rdi,4), %rax
7669; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007670}
7671
7672define i8* @cam00(i64 %i) nounwind {
7673entry:
7674 %0 = add i64 %i, 65536
7675 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
7676 %2 = bitcast i32* %1 to i8*
7677 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007678; LINUX-64-STATIC: cam00:
7679; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax
7680; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007681
7682; LINUX-32-STATIC: cam00:
7683; LINUX-32-STATIC: movl 4(%esp), %eax
7684; LINUX-32-STATIC-NEXT: leal src+262144(,%eax,4), %eax
7685; LINUX-32-STATIC-NEXT: ret
7686
7687; LINUX-32-PIC: cam00:
7688; LINUX-32-PIC: movl 4(%esp), %eax
7689; LINUX-32-PIC-NEXT: leal src+262144(,%eax,4), %eax
7690; LINUX-32-PIC-NEXT: ret
7691
7692; LINUX-64-PIC: cam00:
7693; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
7694; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7695; LINUX-64-PIC-NEXT: ret
7696
7697; DARWIN-32-STATIC: _cam00:
7698; DARWIN-32-STATIC: movl 4(%esp), %eax
7699; DARWIN-32-STATIC-NEXT: leal _src+262144(,%eax,4), %eax
7700; DARWIN-32-STATIC-NEXT: ret
7701
7702; DARWIN-32-DYNAMIC: _cam00:
7703; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7704; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, %ecx
7705; DARWIN-32-DYNAMIC-NEXT: leal 262144(%ecx,%eax,4), %eax
7706; DARWIN-32-DYNAMIC-NEXT: ret
7707
7708; DARWIN-32-PIC: _cam00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007709; DARWIN-32-PIC: calll L120$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007710; DARWIN-32-PIC-NEXT: L120$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007711; DARWIN-32-PIC-NEXT: popl %eax
7712; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007713; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L120$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007714; DARWIN-32-PIC-NEXT: leal 262144(%eax,%ecx,4), %eax
7715; DARWIN-32-PIC-NEXT: ret
7716
7717; DARWIN-64-STATIC: _cam00:
7718; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
7719; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7720; DARWIN-64-STATIC-NEXT: ret
7721
7722; DARWIN-64-DYNAMIC: _cam00:
7723; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
7724; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7725; DARWIN-64-DYNAMIC-NEXT: ret
7726
7727; DARWIN-64-PIC: _cam00:
7728; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
7729; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7730; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007731}
7732
7733define i8* @cxm00(i64 %i) nounwind {
7734entry:
7735 %0 = add i64 %i, 65536
7736 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7737 %2 = bitcast i32* %1 to i8*
7738 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007739; LINUX-64-STATIC: cxm00:
7740; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax
7741; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007742
7743; LINUX-32-STATIC: cxm00:
7744; LINUX-32-STATIC: movl 4(%esp), %eax
7745; LINUX-32-STATIC-NEXT: leal xsrc+262144(,%eax,4), %eax
7746; LINUX-32-STATIC-NEXT: ret
7747
7748; LINUX-32-PIC: cxm00:
7749; LINUX-32-PIC: movl 4(%esp), %eax
7750; LINUX-32-PIC-NEXT: leal xsrc+262144(,%eax,4), %eax
7751; LINUX-32-PIC-NEXT: ret
7752
7753; LINUX-64-PIC: cxm00:
7754; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
7755; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7756; LINUX-64-PIC-NEXT: ret
7757
7758; DARWIN-32-STATIC: _cxm00:
7759; DARWIN-32-STATIC: movl 4(%esp), %eax
7760; DARWIN-32-STATIC-NEXT: leal _xsrc+262144(,%eax,4), %eax
7761; DARWIN-32-STATIC-NEXT: ret
7762
7763; DARWIN-32-DYNAMIC: _cxm00:
7764; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7765; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, %ecx
7766; DARWIN-32-DYNAMIC-NEXT: leal 262144(%ecx,%eax,4), %eax
7767; DARWIN-32-DYNAMIC-NEXT: ret
7768
7769; DARWIN-32-PIC: _cxm00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007770; DARWIN-32-PIC: calll L121$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007771; DARWIN-32-PIC-NEXT: L121$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007772; DARWIN-32-PIC-NEXT: popl %eax
7773; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007774; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L121$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007775; DARWIN-32-PIC-NEXT: leal 262144(%eax,%ecx,4), %eax
7776; DARWIN-32-PIC-NEXT: ret
7777
7778; DARWIN-64-STATIC: _cxm00:
7779; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
7780; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7781; DARWIN-64-STATIC-NEXT: ret
7782
7783; DARWIN-64-DYNAMIC: _cxm00:
7784; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
7785; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7786; DARWIN-64-DYNAMIC-NEXT: ret
7787
7788; DARWIN-64-PIC: _cxm00:
7789; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
7790; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7791; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007792}
7793
7794define i8* @cam01(i64 %i) nounwind {
7795entry:
7796 %0 = add i64 %i, 65536
7797 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7798 %2 = bitcast i32* %1 to i8*
7799 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007800; LINUX-64-STATIC: cam01:
7801; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax
7802; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007803
7804; LINUX-32-STATIC: cam01:
7805; LINUX-32-STATIC: movl 4(%esp), %eax
7806; LINUX-32-STATIC-NEXT: leal dst+262144(,%eax,4), %eax
7807; LINUX-32-STATIC-NEXT: ret
7808
7809; LINUX-32-PIC: cam01:
7810; LINUX-32-PIC: movl 4(%esp), %eax
7811; LINUX-32-PIC-NEXT: leal dst+262144(,%eax,4), %eax
7812; LINUX-32-PIC-NEXT: ret
7813
7814; LINUX-64-PIC: cam01:
7815; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
7816; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7817; LINUX-64-PIC-NEXT: ret
7818
7819; DARWIN-32-STATIC: _cam01:
7820; DARWIN-32-STATIC: movl 4(%esp), %eax
7821; DARWIN-32-STATIC-NEXT: leal _dst+262144(,%eax,4), %eax
7822; DARWIN-32-STATIC-NEXT: ret
7823
7824; DARWIN-32-DYNAMIC: _cam01:
7825; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7826; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, %ecx
7827; DARWIN-32-DYNAMIC-NEXT: leal 262144(%ecx,%eax,4), %eax
7828; DARWIN-32-DYNAMIC-NEXT: ret
7829
7830; DARWIN-32-PIC: _cam01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007831; DARWIN-32-PIC: calll L122$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007832; DARWIN-32-PIC-NEXT: L122$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007833; DARWIN-32-PIC-NEXT: popl %eax
7834; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007835; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L122$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007836; DARWIN-32-PIC-NEXT: leal 262144(%eax,%ecx,4), %eax
7837; DARWIN-32-PIC-NEXT: ret
7838
7839; DARWIN-64-STATIC: _cam01:
7840; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
7841; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7842; DARWIN-64-STATIC-NEXT: ret
7843
7844; DARWIN-64-DYNAMIC: _cam01:
7845; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
7846; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7847; DARWIN-64-DYNAMIC-NEXT: ret
7848
7849; DARWIN-64-PIC: _cam01:
7850; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
7851; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7852; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007853}
7854
7855define i8* @cxm01(i64 %i) nounwind {
7856entry:
7857 %0 = add i64 %i, 65536
7858 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7859 %2 = bitcast i32* %1 to i8*
7860 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007861; LINUX-64-STATIC: cxm01:
7862; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax
7863; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007864
7865; LINUX-32-STATIC: cxm01:
7866; LINUX-32-STATIC: movl 4(%esp), %eax
7867; LINUX-32-STATIC-NEXT: leal xdst+262144(,%eax,4), %eax
7868; LINUX-32-STATIC-NEXT: ret
7869
7870; LINUX-32-PIC: cxm01:
7871; LINUX-32-PIC: movl 4(%esp), %eax
7872; LINUX-32-PIC-NEXT: leal xdst+262144(,%eax,4), %eax
7873; LINUX-32-PIC-NEXT: ret
7874
7875; LINUX-64-PIC: cxm01:
7876; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
7877; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7878; LINUX-64-PIC-NEXT: ret
7879
7880; DARWIN-32-STATIC: _cxm01:
7881; DARWIN-32-STATIC: movl 4(%esp), %eax
7882; DARWIN-32-STATIC-NEXT: leal _xdst+262144(,%eax,4), %eax
7883; DARWIN-32-STATIC-NEXT: ret
7884
7885; DARWIN-32-DYNAMIC: _cxm01:
7886; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
7887; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, %ecx
7888; DARWIN-32-DYNAMIC-NEXT: leal 262144(%ecx,%eax,4), %eax
7889; DARWIN-32-DYNAMIC-NEXT: ret
7890
7891; DARWIN-32-PIC: _cxm01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007892; DARWIN-32-PIC: calll L123$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007893; DARWIN-32-PIC-NEXT: L123$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007894; DARWIN-32-PIC-NEXT: popl %eax
7895; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00007896; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L123$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007897; DARWIN-32-PIC-NEXT: leal 262144(%eax,%ecx,4), %eax
7898; DARWIN-32-PIC-NEXT: ret
7899
7900; DARWIN-64-STATIC: _cxm01:
7901; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
7902; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7903; DARWIN-64-STATIC-NEXT: ret
7904
7905; DARWIN-64-DYNAMIC: _cxm01:
7906; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
7907; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7908; DARWIN-64-DYNAMIC-NEXT: ret
7909
7910; DARWIN-64-PIC: _cxm01:
7911; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
7912; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7913; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007914}
7915
7916define i8* @cam02(i64 %i) nounwind {
7917entry:
7918 %0 = load i32** @ptr, align 8
7919 %1 = add i64 %i, 65536
7920 %2 = getelementptr i32* %0, i64 %1
7921 %3 = bitcast i32* %2 to i8*
7922 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00007923; LINUX-64-STATIC: cam02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00007924; LINUX-64-STATIC: movq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007925; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax
7926; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007927
7928; LINUX-32-STATIC: cam02:
7929; LINUX-32-STATIC: movl 4(%esp), %eax
7930; LINUX-32-STATIC-NEXT: movl ptr, %ecx
7931; LINUX-32-STATIC-NEXT: leal 262144(%ecx,%eax,4), %eax
7932; LINUX-32-STATIC-NEXT: ret
7933
7934; LINUX-32-PIC: cam02:
7935; LINUX-32-PIC: movl 4(%esp), %eax
7936; LINUX-32-PIC-NEXT: movl ptr, %ecx
7937; LINUX-32-PIC-NEXT: leal 262144(%ecx,%eax,4), %eax
7938; LINUX-32-PIC-NEXT: ret
7939
7940; LINUX-64-PIC: cam02:
7941; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), %rax
7942; LINUX-64-PIC-NEXT: movq (%rax), %rax
7943; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7944; LINUX-64-PIC-NEXT: ret
7945
7946; DARWIN-32-STATIC: _cam02:
7947; DARWIN-32-STATIC: movl 4(%esp), %eax
7948; DARWIN-32-STATIC-NEXT: movl _ptr, %ecx
7949; DARWIN-32-STATIC-NEXT: leal 262144(%ecx,%eax,4), %eax
7950; DARWIN-32-STATIC-NEXT: ret
7951
7952; DARWIN-32-DYNAMIC: _cam02:
7953; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, %eax
7954; DARWIN-32-DYNAMIC-NEXT: movl (%eax), %eax
7955; DARWIN-32-DYNAMIC-NEXT: movl 4(%esp), %ecx
7956; DARWIN-32-DYNAMIC-NEXT: leal 262144(%eax,%ecx,4), %eax
7957; DARWIN-32-DYNAMIC-NEXT: ret
7958
7959; DARWIN-32-PIC: _cam02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007960; DARWIN-32-PIC: calll L124$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007961; DARWIN-32-PIC-NEXT: L124$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007962; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00007963; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L124$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007964; DARWIN-32-PIC-NEXT: movl (%eax), %eax
7965; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
7966; DARWIN-32-PIC-NEXT: leal 262144(%eax,%ecx,4), %eax
7967; DARWIN-32-PIC-NEXT: ret
7968
7969; DARWIN-64-STATIC: _cam02:
7970; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), %rax
7971; DARWIN-64-STATIC-NEXT: movq (%rax), %rax
7972; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7973; DARWIN-64-STATIC-NEXT: ret
7974
7975; DARWIN-64-DYNAMIC: _cam02:
7976; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), %rax
7977; DARWIN-64-DYNAMIC-NEXT: movq (%rax), %rax
7978; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7979; DARWIN-64-DYNAMIC-NEXT: ret
7980
7981; DARWIN-64-PIC: _cam02:
7982; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), %rax
7983; DARWIN-64-PIC-NEXT: movq (%rax), %rax
7984; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
7985; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007986}
7987
7988define i8* @cam03(i64 %i) nounwind {
7989entry:
7990 %0 = add i64 %i, 65536
7991 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7992 %2 = bitcast i32* %1 to i8*
7993 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007994; LINUX-64-STATIC: cam03:
7995; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax
7996; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007997
7998; LINUX-32-STATIC: cam03:
7999; LINUX-32-STATIC: movl 4(%esp), %eax
8000; LINUX-32-STATIC-NEXT: leal dsrc+262144(,%eax,4), %eax
8001; LINUX-32-STATIC-NEXT: ret
8002
8003; LINUX-32-PIC: cam03:
8004; LINUX-32-PIC: movl 4(%esp), %eax
8005; LINUX-32-PIC-NEXT: leal dsrc+262144(,%eax,4), %eax
8006; LINUX-32-PIC-NEXT: ret
8007
8008; LINUX-64-PIC: cam03:
8009; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
8010; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8011; LINUX-64-PIC-NEXT: ret
8012
8013; DARWIN-32-STATIC: _cam03:
8014; DARWIN-32-STATIC: movl 4(%esp), %eax
8015; DARWIN-32-STATIC-NEXT: leal _dsrc+262144(,%eax,4), %eax
8016; DARWIN-32-STATIC-NEXT: ret
8017
8018; DARWIN-32-DYNAMIC: _cam03:
8019; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
8020; DARWIN-32-DYNAMIC-NEXT: leal _dsrc+262144(,%eax,4), %eax
8021; DARWIN-32-DYNAMIC-NEXT: ret
8022
8023; DARWIN-32-PIC: _cam03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008024; DARWIN-32-PIC: calll L125$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008025; DARWIN-32-PIC-NEXT: L125$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008026; DARWIN-32-PIC-NEXT: popl %eax
8027; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00008028; DARWIN-32-PIC-NEXT: leal (_dsrc-L125$pb)+262144(%eax,%ecx,4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008029; DARWIN-32-PIC-NEXT: ret
8030
8031; DARWIN-64-STATIC: _cam03:
8032; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
8033; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8034; DARWIN-64-STATIC-NEXT: ret
8035
8036; DARWIN-64-DYNAMIC: _cam03:
8037; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
8038; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8039; DARWIN-64-DYNAMIC-NEXT: ret
8040
8041; DARWIN-64-PIC: _cam03:
8042; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
8043; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8044; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008045}
8046
8047define i8* @cam04(i64 %i) nounwind {
8048entry:
8049 %0 = add i64 %i, 65536
8050 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
8051 %2 = bitcast i32* %1 to i8*
8052 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00008053; LINUX-64-STATIC: cam04:
8054; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax
8055; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008056
8057; LINUX-32-STATIC: cam04:
8058; LINUX-32-STATIC: movl 4(%esp), %eax
8059; LINUX-32-STATIC-NEXT: leal ddst+262144(,%eax,4), %eax
8060; LINUX-32-STATIC-NEXT: ret
8061
8062; LINUX-32-PIC: cam04:
8063; LINUX-32-PIC: movl 4(%esp), %eax
8064; LINUX-32-PIC-NEXT: leal ddst+262144(,%eax,4), %eax
8065; LINUX-32-PIC-NEXT: ret
8066
8067; LINUX-64-PIC: cam04:
8068; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
8069; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8070; LINUX-64-PIC-NEXT: ret
8071
8072; DARWIN-32-STATIC: _cam04:
8073; DARWIN-32-STATIC: movl 4(%esp), %eax
8074; DARWIN-32-STATIC-NEXT: leal _ddst+262144(,%eax,4), %eax
8075; DARWIN-32-STATIC-NEXT: ret
8076
8077; DARWIN-32-DYNAMIC: _cam04:
8078; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
8079; DARWIN-32-DYNAMIC-NEXT: leal _ddst+262144(,%eax,4), %eax
8080; DARWIN-32-DYNAMIC-NEXT: ret
8081
8082; DARWIN-32-PIC: _cam04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008083; DARWIN-32-PIC: calll L126$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008084; DARWIN-32-PIC-NEXT: L126$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008085; DARWIN-32-PIC-NEXT: popl %eax
8086; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00008087; DARWIN-32-PIC-NEXT: leal (_ddst-L126$pb)+262144(%eax,%ecx,4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008088; DARWIN-32-PIC-NEXT: ret
8089
8090; DARWIN-64-STATIC: _cam04:
8091; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
8092; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8093; DARWIN-64-STATIC-NEXT: ret
8094
8095; DARWIN-64-DYNAMIC: _cam04:
8096; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
8097; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8098; DARWIN-64-DYNAMIC-NEXT: ret
8099
8100; DARWIN-64-PIC: _cam04:
8101; DARWIN-64-PIC: leaq _ddst(%rip), %rax
8102; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8103; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008104}
8105
8106define i8* @cam05(i64 %i) nounwind {
8107entry:
8108 %0 = load i32** @dptr, align 8
8109 %1 = add i64 %i, 65536
8110 %2 = getelementptr i32* %0, i64 %1
8111 %3 = bitcast i32* %2 to i8*
8112 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00008113; LINUX-64-STATIC: cam05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00008114; LINUX-64-STATIC: movq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00008115; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax
8116; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008117
8118; LINUX-32-STATIC: cam05:
8119; LINUX-32-STATIC: movl 4(%esp), %eax
8120; LINUX-32-STATIC-NEXT: movl dptr, %ecx
8121; LINUX-32-STATIC-NEXT: leal 262144(%ecx,%eax,4), %eax
8122; LINUX-32-STATIC-NEXT: ret
8123
8124; LINUX-32-PIC: cam05:
8125; LINUX-32-PIC: movl 4(%esp), %eax
8126; LINUX-32-PIC-NEXT: movl dptr, %ecx
8127; LINUX-32-PIC-NEXT: leal 262144(%ecx,%eax,4), %eax
8128; LINUX-32-PIC-NEXT: ret
8129
8130; LINUX-64-PIC: cam05:
8131; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), %rax
8132; LINUX-64-PIC-NEXT: movq (%rax), %rax
8133; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8134; LINUX-64-PIC-NEXT: ret
8135
8136; DARWIN-32-STATIC: _cam05:
8137; DARWIN-32-STATIC: movl 4(%esp), %eax
8138; DARWIN-32-STATIC-NEXT: movl _dptr, %ecx
8139; DARWIN-32-STATIC-NEXT: leal 262144(%ecx,%eax,4), %eax
8140; DARWIN-32-STATIC-NEXT: ret
8141
8142; DARWIN-32-DYNAMIC: _cam05:
8143; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
8144; DARWIN-32-DYNAMIC-NEXT: movl _dptr, %ecx
8145; DARWIN-32-DYNAMIC-NEXT: leal 262144(%ecx,%eax,4), %eax
8146; DARWIN-32-DYNAMIC-NEXT: ret
8147
8148; DARWIN-32-PIC: _cam05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008149; DARWIN-32-PIC: calll L127$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008150; DARWIN-32-PIC-NEXT: L127$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008151; DARWIN-32-PIC-NEXT: popl %eax
8152; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00008153; DARWIN-32-PIC-NEXT: movl _dptr-L127$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008154; DARWIN-32-PIC-NEXT: leal 262144(%eax,%ecx,4), %eax
8155; DARWIN-32-PIC-NEXT: ret
8156
8157; DARWIN-64-STATIC: _cam05:
8158; DARWIN-64-STATIC: movq _dptr(%rip), %rax
8159; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8160; DARWIN-64-STATIC-NEXT: ret
8161
8162; DARWIN-64-DYNAMIC: _cam05:
8163; DARWIN-64-DYNAMIC: movq _dptr(%rip), %rax
8164; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8165; DARWIN-64-DYNAMIC-NEXT: ret
8166
8167; DARWIN-64-PIC: _cam05:
8168; DARWIN-64-PIC: movq _dptr(%rip), %rax
8169; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8170; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008171}
8172
8173define i8* @cam06(i64 %i) nounwind {
8174entry:
8175 %0 = add i64 %i, 65536
8176 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
8177 %2 = bitcast i32* %1 to i8*
8178 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00008179; LINUX-64-STATIC: cam06:
8180; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax
8181; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008182
8183; LINUX-32-STATIC: cam06:
8184; LINUX-32-STATIC: movl 4(%esp), %eax
8185; LINUX-32-STATIC-NEXT: leal lsrc+262144(,%eax,4), %eax
8186; LINUX-32-STATIC-NEXT: ret
8187
8188; LINUX-32-PIC: cam06:
8189; LINUX-32-PIC: movl 4(%esp), %eax
8190; LINUX-32-PIC-NEXT: leal lsrc+262144(,%eax,4), %eax
8191; LINUX-32-PIC-NEXT: ret
8192
8193; LINUX-64-PIC: cam06:
8194; LINUX-64-PIC: leaq lsrc(%rip), %rax
8195; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8196; LINUX-64-PIC-NEXT: ret
8197
8198; DARWIN-32-STATIC: _cam06:
8199; DARWIN-32-STATIC: movl 4(%esp), %eax
8200; DARWIN-32-STATIC-NEXT: leal _lsrc+262144(,%eax,4), %eax
8201; DARWIN-32-STATIC-NEXT: ret
8202
8203; DARWIN-32-DYNAMIC: _cam06:
8204; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
8205; DARWIN-32-DYNAMIC-NEXT: leal _lsrc+262144(,%eax,4), %eax
8206; DARWIN-32-DYNAMIC-NEXT: ret
8207
8208; DARWIN-32-PIC: _cam06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008209; DARWIN-32-PIC: calll L128$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008210; DARWIN-32-PIC-NEXT: L128$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008211; DARWIN-32-PIC-NEXT: popl %eax
8212; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00008213; DARWIN-32-PIC-NEXT: leal (_lsrc-L128$pb)+262144(%eax,%ecx,4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008214; DARWIN-32-PIC-NEXT: ret
8215
8216; DARWIN-64-STATIC: _cam06:
8217; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
8218; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8219; DARWIN-64-STATIC-NEXT: ret
8220
8221; DARWIN-64-DYNAMIC: _cam06:
8222; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
8223; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8224; DARWIN-64-DYNAMIC-NEXT: ret
8225
8226; DARWIN-64-PIC: _cam06:
8227; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
8228; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8229; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008230}
8231
8232define i8* @cam07(i64 %i) nounwind {
8233entry:
8234 %0 = add i64 %i, 65536
8235 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
8236 %2 = bitcast i32* %1 to i8*
8237 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00008238; LINUX-64-STATIC: cam07:
8239; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax
8240; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008241
8242; LINUX-32-STATIC: cam07:
8243; LINUX-32-STATIC: movl 4(%esp), %eax
8244; LINUX-32-STATIC-NEXT: leal ldst+262144(,%eax,4), %eax
8245; LINUX-32-STATIC-NEXT: ret
8246
8247; LINUX-32-PIC: cam07:
8248; LINUX-32-PIC: movl 4(%esp), %eax
8249; LINUX-32-PIC-NEXT: leal ldst+262144(,%eax,4), %eax
8250; LINUX-32-PIC-NEXT: ret
8251
8252; LINUX-64-PIC: cam07:
8253; LINUX-64-PIC: leaq ldst(%rip), %rax
8254; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8255; LINUX-64-PIC-NEXT: ret
8256
8257; DARWIN-32-STATIC: _cam07:
8258; DARWIN-32-STATIC: movl 4(%esp), %eax
8259; DARWIN-32-STATIC-NEXT: leal _ldst+262144(,%eax,4), %eax
8260; DARWIN-32-STATIC-NEXT: ret
8261
8262; DARWIN-32-DYNAMIC: _cam07:
8263; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
8264; DARWIN-32-DYNAMIC-NEXT: leal _ldst+262144(,%eax,4), %eax
8265; DARWIN-32-DYNAMIC-NEXT: ret
8266
8267; DARWIN-32-PIC: _cam07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008268; DARWIN-32-PIC: calll L129$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008269; DARWIN-32-PIC-NEXT: L129$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008270; DARWIN-32-PIC-NEXT: popl %eax
8271; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00008272; DARWIN-32-PIC-NEXT: leal (_ldst-L129$pb)+262144(%eax,%ecx,4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008273; DARWIN-32-PIC-NEXT: ret
8274
8275; DARWIN-64-STATIC: _cam07:
8276; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
8277; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8278; DARWIN-64-STATIC-NEXT: ret
8279
8280; DARWIN-64-DYNAMIC: _cam07:
8281; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
8282; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8283; DARWIN-64-DYNAMIC-NEXT: ret
8284
8285; DARWIN-64-PIC: _cam07:
8286; DARWIN-64-PIC: leaq _ldst(%rip), %rax
8287; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8288; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008289}
8290
8291define i8* @cam08(i64 %i) nounwind {
8292entry:
8293 %0 = load i32** @lptr, align 8
8294 %1 = add i64 %i, 65536
8295 %2 = getelementptr i32* %0, i64 %1
8296 %3 = bitcast i32* %2 to i8*
8297 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00008298; LINUX-64-STATIC: cam08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00008299; LINUX-64-STATIC: movq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00008300; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax
8301; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008302
8303; LINUX-32-STATIC: cam08:
8304; LINUX-32-STATIC: movl 4(%esp), %eax
8305; LINUX-32-STATIC-NEXT: movl lptr, %ecx
8306; LINUX-32-STATIC-NEXT: leal 262144(%ecx,%eax,4), %eax
8307; LINUX-32-STATIC-NEXT: ret
8308
8309; LINUX-32-PIC: cam08:
8310; LINUX-32-PIC: movl 4(%esp), %eax
8311; LINUX-32-PIC-NEXT: movl lptr, %ecx
8312; LINUX-32-PIC-NEXT: leal 262144(%ecx,%eax,4), %eax
8313; LINUX-32-PIC-NEXT: ret
8314
8315; LINUX-64-PIC: cam08:
8316; LINUX-64-PIC: movq lptr(%rip), %rax
8317; LINUX-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8318; LINUX-64-PIC-NEXT: ret
8319
8320; DARWIN-32-STATIC: _cam08:
8321; DARWIN-32-STATIC: movl 4(%esp), %eax
8322; DARWIN-32-STATIC-NEXT: movl _lptr, %ecx
8323; DARWIN-32-STATIC-NEXT: leal 262144(%ecx,%eax,4), %eax
8324; DARWIN-32-STATIC-NEXT: ret
8325
8326; DARWIN-32-DYNAMIC: _cam08:
8327; DARWIN-32-DYNAMIC: movl 4(%esp), %eax
8328; DARWIN-32-DYNAMIC-NEXT: movl _lptr, %ecx
8329; DARWIN-32-DYNAMIC-NEXT: leal 262144(%ecx,%eax,4), %eax
8330; DARWIN-32-DYNAMIC-NEXT: ret
8331
8332; DARWIN-32-PIC: _cam08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008333; DARWIN-32-PIC: calll L130$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008334; DARWIN-32-PIC-NEXT: L130$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008335; DARWIN-32-PIC-NEXT: popl %eax
8336; DARWIN-32-PIC-NEXT: movl 4(%esp), %ecx
Dan Gohman9f23dee2010-04-17 16:29:15 +00008337; DARWIN-32-PIC-NEXT: movl _lptr-L130$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008338; DARWIN-32-PIC-NEXT: leal 262144(%eax,%ecx,4), %eax
8339; DARWIN-32-PIC-NEXT: ret
8340
8341; DARWIN-64-STATIC: _cam08:
8342; DARWIN-64-STATIC: movq _lptr(%rip), %rax
8343; DARWIN-64-STATIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8344; DARWIN-64-STATIC-NEXT: ret
8345
8346; DARWIN-64-DYNAMIC: _cam08:
8347; DARWIN-64-DYNAMIC: movq _lptr(%rip), %rax
8348; DARWIN-64-DYNAMIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8349; DARWIN-64-DYNAMIC-NEXT: ret
8350
8351; DARWIN-64-PIC: _cam08:
8352; DARWIN-64-PIC: movq _lptr(%rip), %rax
8353; DARWIN-64-PIC-NEXT: leaq 262144(%rax,%rdi,4), %rax
8354; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008355}
8356
8357define void @lcallee() nounwind {
8358entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008359 call void @x() nounwind
8360 call void @x() nounwind
8361 call void @x() nounwind
8362 call void @x() nounwind
8363 call void @x() nounwind
8364 call void @x() nounwind
8365 call void @x() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008366 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008367; LINUX-64-STATIC: lcallee:
Sean Callanan108934c2009-12-18 00:01:26 +00008368; LINUX-64-STATIC: callq x
8369; LINUX-64-STATIC: callq x
8370; LINUX-64-STATIC: callq x
8371; LINUX-64-STATIC: callq x
8372; LINUX-64-STATIC: callq x
8373; LINUX-64-STATIC: callq x
8374; LINUX-64-STATIC: callq x
Chris Lattner4f066492009-07-11 20:29:19 +00008375; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008376
8377; LINUX-32-STATIC: lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008378; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008379; LINUX-32-STATIC-NEXT: calll x
8380; LINUX-32-STATIC-NEXT: calll x
8381; LINUX-32-STATIC-NEXT: calll x
8382; LINUX-32-STATIC-NEXT: calll x
8383; LINUX-32-STATIC-NEXT: calll x
8384; LINUX-32-STATIC-NEXT: calll x
8385; LINUX-32-STATIC-NEXT: calll x
Evan Cheng7158e082011-01-03 22:53:22 +00008386; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008387; LINUX-32-STATIC-NEXT: ret
8388
8389; LINUX-32-PIC: lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008390; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008391; LINUX-32-PIC-NEXT: calll x
8392; LINUX-32-PIC-NEXT: calll x
8393; LINUX-32-PIC-NEXT: calll x
8394; LINUX-32-PIC-NEXT: calll x
8395; LINUX-32-PIC-NEXT: calll x
8396; LINUX-32-PIC-NEXT: calll x
8397; LINUX-32-PIC-NEXT: calll x
Evan Cheng7158e082011-01-03 22:53:22 +00008398; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008399; LINUX-32-PIC-NEXT: ret
8400
8401; LINUX-64-PIC: lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008402; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008403; LINUX-64-PIC-NEXT: callq x@PLT
8404; LINUX-64-PIC-NEXT: callq x@PLT
8405; LINUX-64-PIC-NEXT: callq x@PLT
8406; LINUX-64-PIC-NEXT: callq x@PLT
8407; LINUX-64-PIC-NEXT: callq x@PLT
8408; LINUX-64-PIC-NEXT: callq x@PLT
8409; LINUX-64-PIC-NEXT: callq x@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008410; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008411; LINUX-64-PIC-NEXT: ret
8412
8413; DARWIN-32-STATIC: _lcallee:
8414; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008415; DARWIN-32-STATIC-NEXT: calll _x
8416; DARWIN-32-STATIC-NEXT: calll _x
8417; DARWIN-32-STATIC-NEXT: calll _x
8418; DARWIN-32-STATIC-NEXT: calll _x
8419; DARWIN-32-STATIC-NEXT: calll _x
8420; DARWIN-32-STATIC-NEXT: calll _x
8421; DARWIN-32-STATIC-NEXT: calll _x
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008422; DARWIN-32-STATIC-NEXT: addl $12, %esp
8423; DARWIN-32-STATIC-NEXT: ret
8424
8425; DARWIN-32-DYNAMIC: _lcallee:
8426; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008427; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8428; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8429; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8430; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8431; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8432; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8433; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008434; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8435; DARWIN-32-DYNAMIC-NEXT: ret
8436
8437; DARWIN-32-PIC: _lcallee:
8438; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008439; DARWIN-32-PIC-NEXT: calll L_x$stub
8440; DARWIN-32-PIC-NEXT: calll L_x$stub
8441; DARWIN-32-PIC-NEXT: calll L_x$stub
8442; DARWIN-32-PIC-NEXT: calll L_x$stub
8443; DARWIN-32-PIC-NEXT: calll L_x$stub
8444; DARWIN-32-PIC-NEXT: calll L_x$stub
8445; DARWIN-32-PIC-NEXT: calll L_x$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008446; DARWIN-32-PIC-NEXT: addl $12, %esp
8447; DARWIN-32-PIC-NEXT: ret
8448
8449; DARWIN-64-STATIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008450; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008451; DARWIN-64-STATIC-NEXT: callq _x
8452; DARWIN-64-STATIC-NEXT: callq _x
8453; DARWIN-64-STATIC-NEXT: callq _x
8454; DARWIN-64-STATIC-NEXT: callq _x
8455; DARWIN-64-STATIC-NEXT: callq _x
8456; DARWIN-64-STATIC-NEXT: callq _x
8457; DARWIN-64-STATIC-NEXT: callq _x
Evan Cheng7158e082011-01-03 22:53:22 +00008458; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008459; DARWIN-64-STATIC-NEXT: ret
8460
8461; DARWIN-64-DYNAMIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008462; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008463; DARWIN-64-DYNAMIC-NEXT: callq _x
8464; DARWIN-64-DYNAMIC-NEXT: callq _x
8465; DARWIN-64-DYNAMIC-NEXT: callq _x
8466; DARWIN-64-DYNAMIC-NEXT: callq _x
8467; DARWIN-64-DYNAMIC-NEXT: callq _x
8468; DARWIN-64-DYNAMIC-NEXT: callq _x
8469; DARWIN-64-DYNAMIC-NEXT: callq _x
Evan Cheng7158e082011-01-03 22:53:22 +00008470; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008471; DARWIN-64-DYNAMIC-NEXT: ret
8472
8473; DARWIN-64-PIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008474; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008475; DARWIN-64-PIC-NEXT: callq _x
8476; DARWIN-64-PIC-NEXT: callq _x
8477; DARWIN-64-PIC-NEXT: callq _x
8478; DARWIN-64-PIC-NEXT: callq _x
8479; DARWIN-64-PIC-NEXT: callq _x
8480; DARWIN-64-PIC-NEXT: callq _x
8481; DARWIN-64-PIC-NEXT: callq _x
Evan Cheng7158e082011-01-03 22:53:22 +00008482; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008483; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008484}
8485
8486declare void @x()
8487
8488define internal void @dcallee() nounwind {
8489entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008490 call void @y() nounwind
8491 call void @y() nounwind
8492 call void @y() nounwind
8493 call void @y() nounwind
8494 call void @y() nounwind
8495 call void @y() nounwind
8496 call void @y() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008497 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008498; LINUX-64-STATIC: dcallee:
Sean Callanan108934c2009-12-18 00:01:26 +00008499; LINUX-64-STATIC: callq y
8500; LINUX-64-STATIC: callq y
8501; LINUX-64-STATIC: callq y
8502; LINUX-64-STATIC: callq y
8503; LINUX-64-STATIC: callq y
8504; LINUX-64-STATIC: callq y
8505; LINUX-64-STATIC: callq y
Chris Lattner4f066492009-07-11 20:29:19 +00008506; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008507
8508; LINUX-32-STATIC: dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008509; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008510; LINUX-32-STATIC-NEXT: calll y
8511; LINUX-32-STATIC-NEXT: calll y
8512; LINUX-32-STATIC-NEXT: calll y
8513; LINUX-32-STATIC-NEXT: calll y
8514; LINUX-32-STATIC-NEXT: calll y
8515; LINUX-32-STATIC-NEXT: calll y
8516; LINUX-32-STATIC-NEXT: calll y
Evan Cheng7158e082011-01-03 22:53:22 +00008517; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008518; LINUX-32-STATIC-NEXT: ret
8519
8520; LINUX-32-PIC: dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008521; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008522; LINUX-32-PIC-NEXT: calll y
8523; LINUX-32-PIC-NEXT: calll y
8524; LINUX-32-PIC-NEXT: calll y
8525; LINUX-32-PIC-NEXT: calll y
8526; LINUX-32-PIC-NEXT: calll y
8527; LINUX-32-PIC-NEXT: calll y
8528; LINUX-32-PIC-NEXT: calll y
Evan Cheng7158e082011-01-03 22:53:22 +00008529; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008530; LINUX-32-PIC-NEXT: ret
8531
8532; LINUX-64-PIC: dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008533; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008534; LINUX-64-PIC-NEXT: callq y@PLT
8535; LINUX-64-PIC-NEXT: callq y@PLT
8536; LINUX-64-PIC-NEXT: callq y@PLT
8537; LINUX-64-PIC-NEXT: callq y@PLT
8538; LINUX-64-PIC-NEXT: callq y@PLT
8539; LINUX-64-PIC-NEXT: callq y@PLT
8540; LINUX-64-PIC-NEXT: callq y@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008541; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008542; LINUX-64-PIC-NEXT: ret
8543
8544; DARWIN-32-STATIC: _dcallee:
8545; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008546; DARWIN-32-STATIC-NEXT: calll _y
8547; DARWIN-32-STATIC-NEXT: calll _y
8548; DARWIN-32-STATIC-NEXT: calll _y
8549; DARWIN-32-STATIC-NEXT: calll _y
8550; DARWIN-32-STATIC-NEXT: calll _y
8551; DARWIN-32-STATIC-NEXT: calll _y
8552; DARWIN-32-STATIC-NEXT: calll _y
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008553; DARWIN-32-STATIC-NEXT: addl $12, %esp
8554; DARWIN-32-STATIC-NEXT: ret
8555
8556; DARWIN-32-DYNAMIC: _dcallee:
8557; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008558; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8559; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8560; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8561; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8562; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8563; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8564; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008565; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8566; DARWIN-32-DYNAMIC-NEXT: ret
8567
8568; DARWIN-32-PIC: _dcallee:
8569; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008570; DARWIN-32-PIC-NEXT: calll L_y$stub
8571; DARWIN-32-PIC-NEXT: calll L_y$stub
8572; DARWIN-32-PIC-NEXT: calll L_y$stub
8573; DARWIN-32-PIC-NEXT: calll L_y$stub
8574; DARWIN-32-PIC-NEXT: calll L_y$stub
8575; DARWIN-32-PIC-NEXT: calll L_y$stub
8576; DARWIN-32-PIC-NEXT: calll L_y$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008577; DARWIN-32-PIC-NEXT: addl $12, %esp
8578; DARWIN-32-PIC-NEXT: ret
8579
8580; DARWIN-64-STATIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008581; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008582; DARWIN-64-STATIC-NEXT: callq _y
8583; DARWIN-64-STATIC-NEXT: callq _y
8584; DARWIN-64-STATIC-NEXT: callq _y
8585; DARWIN-64-STATIC-NEXT: callq _y
8586; DARWIN-64-STATIC-NEXT: callq _y
8587; DARWIN-64-STATIC-NEXT: callq _y
8588; DARWIN-64-STATIC-NEXT: callq _y
Evan Cheng7158e082011-01-03 22:53:22 +00008589; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008590; DARWIN-64-STATIC-NEXT: ret
8591
8592; DARWIN-64-DYNAMIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008593; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008594; DARWIN-64-DYNAMIC-NEXT: callq _y
8595; DARWIN-64-DYNAMIC-NEXT: callq _y
8596; DARWIN-64-DYNAMIC-NEXT: callq _y
8597; DARWIN-64-DYNAMIC-NEXT: callq _y
8598; DARWIN-64-DYNAMIC-NEXT: callq _y
8599; DARWIN-64-DYNAMIC-NEXT: callq _y
8600; DARWIN-64-DYNAMIC-NEXT: callq _y
Evan Cheng7158e082011-01-03 22:53:22 +00008601; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008602; DARWIN-64-DYNAMIC-NEXT: ret
8603
8604; DARWIN-64-PIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008605; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008606; DARWIN-64-PIC-NEXT: callq _y
8607; DARWIN-64-PIC-NEXT: callq _y
8608; DARWIN-64-PIC-NEXT: callq _y
8609; DARWIN-64-PIC-NEXT: callq _y
8610; DARWIN-64-PIC-NEXT: callq _y
8611; DARWIN-64-PIC-NEXT: callq _y
8612; DARWIN-64-PIC-NEXT: callq _y
Evan Cheng7158e082011-01-03 22:53:22 +00008613; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008614; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008615}
8616
8617declare void @y()
8618
8619define void ()* @address() nounwind {
8620entry:
8621 ret void ()* @callee
Chris Lattner4f066492009-07-11 20:29:19 +00008622; LINUX-64-STATIC: address:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008623; LINUX-64-STATIC: movl $callee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008624; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008625
8626; LINUX-32-STATIC: address:
8627; LINUX-32-STATIC: movl $callee, %eax
8628; LINUX-32-STATIC-NEXT: ret
8629
8630; LINUX-32-PIC: address:
8631; LINUX-32-PIC: movl $callee, %eax
8632; LINUX-32-PIC-NEXT: ret
8633
8634; LINUX-64-PIC: address:
8635; LINUX-64-PIC: movq callee@GOTPCREL(%rip), %rax
8636; LINUX-64-PIC-NEXT: ret
8637
8638; DARWIN-32-STATIC: _address:
8639; DARWIN-32-STATIC: movl $_callee, %eax
8640; DARWIN-32-STATIC-NEXT: ret
8641
8642; DARWIN-32-DYNAMIC: _address:
8643; DARWIN-32-DYNAMIC: movl L_callee$non_lazy_ptr, %eax
8644; DARWIN-32-DYNAMIC-NEXT: ret
8645
8646; DARWIN-32-PIC: _address:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008647; DARWIN-32-PIC: calll L133$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008648; DARWIN-32-PIC-NEXT: L133$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008649; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00008650; DARWIN-32-PIC-NEXT: movl L_callee$non_lazy_ptr-L133$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008651; DARWIN-32-PIC-NEXT: ret
8652
8653; DARWIN-64-STATIC: _address:
8654; DARWIN-64-STATIC: movq _callee@GOTPCREL(%rip), %rax
8655; DARWIN-64-STATIC-NEXT: ret
8656
8657; DARWIN-64-DYNAMIC: _address:
8658; DARWIN-64-DYNAMIC: movq _callee@GOTPCREL(%rip), %rax
8659; DARWIN-64-DYNAMIC-NEXT: ret
8660
8661; DARWIN-64-PIC: _address:
8662; DARWIN-64-PIC: movq _callee@GOTPCREL(%rip), %rax
8663; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008664}
8665
8666declare void @callee()
8667
8668define void ()* @laddress() nounwind {
8669entry:
8670 ret void ()* @lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008671; LINUX-64-STATIC: laddress:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008672; LINUX-64-STATIC: movl $lcallee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008673; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008674
8675; LINUX-32-STATIC: laddress:
8676; LINUX-32-STATIC: movl $lcallee, %eax
8677; LINUX-32-STATIC-NEXT: ret
8678
8679; LINUX-32-PIC: laddress:
8680; LINUX-32-PIC: movl $lcallee, %eax
8681; LINUX-32-PIC-NEXT: ret
8682
8683; LINUX-64-PIC: laddress:
8684; LINUX-64-PIC: movq lcallee@GOTPCREL(%rip), %rax
8685; LINUX-64-PIC-NEXT: ret
8686
8687; DARWIN-32-STATIC: _laddress:
8688; DARWIN-32-STATIC: movl $_lcallee, %eax
8689; DARWIN-32-STATIC-NEXT: ret
8690
8691; DARWIN-32-DYNAMIC: _laddress:
8692; DARWIN-32-DYNAMIC: movl $_lcallee, %eax
8693; DARWIN-32-DYNAMIC-NEXT: ret
8694
8695; DARWIN-32-PIC: _laddress:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008696; DARWIN-32-PIC: calll L134$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008697; DARWIN-32-PIC-NEXT: L134$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008698; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00008699; DARWIN-32-PIC-NEXT: leal _lcallee-L134$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008700; DARWIN-32-PIC-NEXT: ret
8701
8702; DARWIN-64-STATIC: _laddress:
8703; DARWIN-64-STATIC: leaq _lcallee(%rip), %rax
8704; DARWIN-64-STATIC-NEXT: ret
8705
8706; DARWIN-64-DYNAMIC: _laddress:
8707; DARWIN-64-DYNAMIC: leaq _lcallee(%rip), %rax
8708; DARWIN-64-DYNAMIC-NEXT: ret
8709
8710; DARWIN-64-PIC: _laddress:
8711; DARWIN-64-PIC: leaq _lcallee(%rip), %rax
8712; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008713}
8714
8715define void ()* @daddress() nounwind {
8716entry:
8717 ret void ()* @dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008718; LINUX-64-STATIC: daddress:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008719; LINUX-64-STATIC: movl $dcallee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008720; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008721
8722; LINUX-32-STATIC: daddress:
8723; LINUX-32-STATIC: movl $dcallee, %eax
8724; LINUX-32-STATIC-NEXT: ret
8725
8726; LINUX-32-PIC: daddress:
8727; LINUX-32-PIC: movl $dcallee, %eax
8728; LINUX-32-PIC-NEXT: ret
8729
8730; LINUX-64-PIC: daddress:
8731; LINUX-64-PIC: leaq dcallee(%rip), %rax
8732; LINUX-64-PIC-NEXT: ret
8733
8734; DARWIN-32-STATIC: _daddress:
8735; DARWIN-32-STATIC: movl $_dcallee, %eax
8736; DARWIN-32-STATIC-NEXT: ret
8737
8738; DARWIN-32-DYNAMIC: _daddress:
8739; DARWIN-32-DYNAMIC: movl $_dcallee, %eax
8740; DARWIN-32-DYNAMIC-NEXT: ret
8741
8742; DARWIN-32-PIC: _daddress:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008743; DARWIN-32-PIC: calll L135$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008744; DARWIN-32-PIC-NEXT: L135$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008745; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00008746; DARWIN-32-PIC-NEXT: leal _dcallee-L135$pb(%eax), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008747; DARWIN-32-PIC-NEXT: ret
8748
8749; DARWIN-64-STATIC: _daddress:
8750; DARWIN-64-STATIC: leaq _dcallee(%rip), %rax
8751; DARWIN-64-STATIC-NEXT: ret
8752
8753; DARWIN-64-DYNAMIC: _daddress:
8754; DARWIN-64-DYNAMIC: leaq _dcallee(%rip), %rax
8755; DARWIN-64-DYNAMIC-NEXT: ret
8756
8757; DARWIN-64-PIC: _daddress:
8758; DARWIN-64-PIC: leaq _dcallee(%rip), %rax
8759; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008760}
8761
8762define void @caller() nounwind {
8763entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008764 call void @callee() nounwind
8765 call void @callee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008766 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008767; LINUX-64-STATIC: caller:
Sean Callanan108934c2009-12-18 00:01:26 +00008768; LINUX-64-STATIC: callq callee
8769; LINUX-64-STATIC: callq callee
Chris Lattner4f066492009-07-11 20:29:19 +00008770; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008771
8772; LINUX-32-STATIC: caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008773; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008774; LINUX-32-STATIC-NEXT: calll callee
8775; LINUX-32-STATIC-NEXT: calll callee
Evan Cheng7158e082011-01-03 22:53:22 +00008776; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008777; LINUX-32-STATIC-NEXT: ret
8778
8779; LINUX-32-PIC: caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008780; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008781; LINUX-32-PIC-NEXT: calll callee
8782; LINUX-32-PIC-NEXT: calll callee
Evan Cheng7158e082011-01-03 22:53:22 +00008783; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008784; LINUX-32-PIC-NEXT: ret
8785
8786; LINUX-64-PIC: caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008787; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008788; LINUX-64-PIC-NEXT: callq callee@PLT
8789; LINUX-64-PIC-NEXT: callq callee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008790; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008791; LINUX-64-PIC-NEXT: ret
8792
8793; DARWIN-32-STATIC: _caller:
8794; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008795; DARWIN-32-STATIC-NEXT: calll _callee
8796; DARWIN-32-STATIC-NEXT: calll _callee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008797; DARWIN-32-STATIC-NEXT: addl $12, %esp
8798; DARWIN-32-STATIC-NEXT: ret
8799
8800; DARWIN-32-DYNAMIC: _caller:
8801; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008802; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
8803; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008804; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8805; DARWIN-32-DYNAMIC-NEXT: ret
8806
8807; DARWIN-32-PIC: _caller:
8808; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008809; DARWIN-32-PIC-NEXT: calll L_callee$stub
8810; DARWIN-32-PIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008811; DARWIN-32-PIC-NEXT: addl $12, %esp
8812; DARWIN-32-PIC-NEXT: ret
8813
8814; DARWIN-64-STATIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008815; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008816; DARWIN-64-STATIC-NEXT: callq _callee
8817; DARWIN-64-STATIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008818; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008819; DARWIN-64-STATIC-NEXT: ret
8820
8821; DARWIN-64-DYNAMIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008822; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008823; DARWIN-64-DYNAMIC-NEXT: callq _callee
8824; DARWIN-64-DYNAMIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008825; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008826; DARWIN-64-DYNAMIC-NEXT: ret
8827
8828; DARWIN-64-PIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008829; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008830; DARWIN-64-PIC-NEXT: callq _callee
8831; DARWIN-64-PIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008832; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008833; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008834}
8835
8836define void @dcaller() nounwind {
8837entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008838 call void @dcallee() nounwind
8839 call void @dcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008840 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008841; LINUX-64-STATIC: dcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00008842; LINUX-64-STATIC: callq dcallee
8843; LINUX-64-STATIC: callq dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008844; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008845
8846; LINUX-32-STATIC: dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008847; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008848; LINUX-32-STATIC-NEXT: calll dcallee
8849; LINUX-32-STATIC-NEXT: calll dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008850; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008851; LINUX-32-STATIC-NEXT: ret
8852
8853; LINUX-32-PIC: dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008854; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008855; LINUX-32-PIC-NEXT: calll dcallee
8856; LINUX-32-PIC-NEXT: calll dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008857; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008858; LINUX-32-PIC-NEXT: ret
8859
8860; LINUX-64-PIC: dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008861; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008862; LINUX-64-PIC-NEXT: callq dcallee
8863; LINUX-64-PIC-NEXT: callq dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008864; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008865; LINUX-64-PIC-NEXT: ret
8866
8867; DARWIN-32-STATIC: _dcaller:
8868; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008869; DARWIN-32-STATIC-NEXT: calll _dcallee
8870; DARWIN-32-STATIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008871; DARWIN-32-STATIC-NEXT: addl $12, %esp
8872; DARWIN-32-STATIC-NEXT: ret
8873
8874; DARWIN-32-DYNAMIC: _dcaller:
8875; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008876; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
8877; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008878; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8879; DARWIN-32-DYNAMIC-NEXT: ret
8880
8881; DARWIN-32-PIC: _dcaller:
8882; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008883; DARWIN-32-PIC-NEXT: calll _dcallee
8884; DARWIN-32-PIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008885; DARWIN-32-PIC-NEXT: addl $12, %esp
8886; DARWIN-32-PIC-NEXT: ret
8887
8888; DARWIN-64-STATIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008889; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008890; DARWIN-64-STATIC-NEXT: callq _dcallee
8891; DARWIN-64-STATIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008892; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008893; DARWIN-64-STATIC-NEXT: ret
8894
8895; DARWIN-64-DYNAMIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008896; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008897; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
8898; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008899; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008900; DARWIN-64-DYNAMIC-NEXT: ret
8901
8902; DARWIN-64-PIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008903; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008904; DARWIN-64-PIC-NEXT: callq _dcallee
8905; DARWIN-64-PIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008906; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008907; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008908}
8909
8910define void @lcaller() nounwind {
8911entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008912 call void @lcallee() nounwind
8913 call void @lcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008914 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008915; LINUX-64-STATIC: lcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00008916; LINUX-64-STATIC: callq lcallee
8917; LINUX-64-STATIC: callq lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008918; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008919
8920; LINUX-32-STATIC: lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008921; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008922; LINUX-32-STATIC-NEXT: calll lcallee
8923; LINUX-32-STATIC-NEXT: calll lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008924; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008925; LINUX-32-STATIC-NEXT: ret
8926
8927; LINUX-32-PIC: lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008928; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008929; LINUX-32-PIC-NEXT: calll lcallee
8930; LINUX-32-PIC-NEXT: calll lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008931; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008932; LINUX-32-PIC-NEXT: ret
8933
8934; LINUX-64-PIC: lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008935; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008936; LINUX-64-PIC-NEXT: callq lcallee@PLT
8937; LINUX-64-PIC-NEXT: callq lcallee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008938; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008939; LINUX-64-PIC-NEXT: ret
8940
8941; DARWIN-32-STATIC: _lcaller:
8942; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008943; DARWIN-32-STATIC-NEXT: calll _lcallee
8944; DARWIN-32-STATIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008945; DARWIN-32-STATIC-NEXT: addl $12, %esp
8946; DARWIN-32-STATIC-NEXT: ret
8947
8948; DARWIN-32-DYNAMIC: _lcaller:
8949; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008950; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
8951; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008952; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8953; DARWIN-32-DYNAMIC-NEXT: ret
8954
8955; DARWIN-32-PIC: _lcaller:
8956; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008957; DARWIN-32-PIC-NEXT: calll _lcallee
8958; DARWIN-32-PIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008959; DARWIN-32-PIC-NEXT: addl $12, %esp
8960; DARWIN-32-PIC-NEXT: ret
8961
8962; DARWIN-64-STATIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008963; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008964; DARWIN-64-STATIC-NEXT: callq _lcallee
8965; DARWIN-64-STATIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008966; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008967; DARWIN-64-STATIC-NEXT: ret
8968
8969; DARWIN-64-DYNAMIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008970; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008971; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
8972; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008973; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008974; DARWIN-64-DYNAMIC-NEXT: ret
8975
8976; DARWIN-64-PIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008977; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008978; DARWIN-64-PIC-NEXT: callq _lcallee
8979; DARWIN-64-PIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008980; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008981; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008982}
8983
8984define void @tailcaller() nounwind {
8985entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008986 call void @callee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008987 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008988; LINUX-64-STATIC: tailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00008989; LINUX-64-STATIC: callq callee
Chris Lattner4f066492009-07-11 20:29:19 +00008990; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008991
8992; LINUX-32-STATIC: tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008993; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008994; LINUX-32-STATIC-NEXT: calll callee
Evan Cheng7158e082011-01-03 22:53:22 +00008995; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008996; LINUX-32-STATIC-NEXT: ret
8997
8998; LINUX-32-PIC: tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008999; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009000; LINUX-32-PIC-NEXT: calll callee
Evan Cheng7158e082011-01-03 22:53:22 +00009001; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009002; LINUX-32-PIC-NEXT: ret
9003
9004; LINUX-64-PIC: tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009005; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009006; LINUX-64-PIC-NEXT: callq callee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00009007; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009008; LINUX-64-PIC-NEXT: ret
9009
9010; DARWIN-32-STATIC: _tailcaller:
9011; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009012; DARWIN-32-STATIC-NEXT: calll _callee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009013; DARWIN-32-STATIC-NEXT: addl $12, %esp
9014; DARWIN-32-STATIC-NEXT: ret
9015
9016; DARWIN-32-DYNAMIC: _tailcaller:
9017; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009018; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009019; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9020; DARWIN-32-DYNAMIC-NEXT: ret
9021
9022; DARWIN-32-PIC: _tailcaller:
9023; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009024; DARWIN-32-PIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009025; DARWIN-32-PIC-NEXT: addl $12, %esp
9026; DARWIN-32-PIC-NEXT: ret
9027
9028; DARWIN-64-STATIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009029; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009030; DARWIN-64-STATIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009031; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009032; DARWIN-64-STATIC-NEXT: ret
9033
9034; DARWIN-64-DYNAMIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009035; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009036; DARWIN-64-DYNAMIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009037; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009038; DARWIN-64-DYNAMIC-NEXT: ret
9039
9040; DARWIN-64-PIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009041; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009042; DARWIN-64-PIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009043; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009044; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009045}
9046
9047define void @dtailcaller() nounwind {
9048entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00009049 call void @dcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009050 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009051; LINUX-64-STATIC: dtailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009052; LINUX-64-STATIC: callq dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00009053; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009054
9055; LINUX-32-STATIC: dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009056; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009057; LINUX-32-STATIC-NEXT: calll dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009058; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009059; LINUX-32-STATIC-NEXT: ret
9060
9061; LINUX-32-PIC: dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009062; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009063; LINUX-32-PIC-NEXT: calll dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009064; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009065; LINUX-32-PIC-NEXT: ret
9066
9067; LINUX-64-PIC: dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009068; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009069; LINUX-64-PIC-NEXT: callq dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009070; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009071; LINUX-64-PIC-NEXT: ret
9072
9073; DARWIN-32-STATIC: _dtailcaller:
9074; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009075; DARWIN-32-STATIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009076; DARWIN-32-STATIC-NEXT: addl $12, %esp
9077; DARWIN-32-STATIC-NEXT: ret
9078
9079; DARWIN-32-DYNAMIC: _dtailcaller:
9080; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009081; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009082; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9083; DARWIN-32-DYNAMIC-NEXT: ret
9084
9085; DARWIN-32-PIC: _dtailcaller:
9086; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009087; DARWIN-32-PIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009088; DARWIN-32-PIC-NEXT: addl $12, %esp
9089; DARWIN-32-PIC-NEXT: ret
9090
9091; DARWIN-64-STATIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009092; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009093; DARWIN-64-STATIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009094; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009095; DARWIN-64-STATIC-NEXT: ret
9096
9097; DARWIN-64-DYNAMIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009098; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009099; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009100; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009101; DARWIN-64-DYNAMIC-NEXT: ret
9102
9103; DARWIN-64-PIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009104; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009105; DARWIN-64-PIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009106; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009107; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009108}
9109
9110define void @ltailcaller() nounwind {
9111entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00009112 call void @lcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009113 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009114; LINUX-64-STATIC: ltailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009115; LINUX-64-STATIC: callq lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00009116; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009117
9118; LINUX-32-STATIC: ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009119; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009120; LINUX-32-STATIC-NEXT: calll lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009121; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009122; LINUX-32-STATIC-NEXT: ret
9123
9124; LINUX-32-PIC: ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009125; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009126; LINUX-32-PIC-NEXT: calll lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009127; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009128; LINUX-32-PIC-NEXT: ret
9129
9130; LINUX-64-PIC: ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009131; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009132; LINUX-64-PIC-NEXT: callq lcallee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00009133; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009134; LINUX-64-PIC-NEXT: ret
9135
9136; DARWIN-32-STATIC: _ltailcaller:
9137; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009138; DARWIN-32-STATIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009139; DARWIN-32-STATIC-NEXT: addl $12, %esp
9140; DARWIN-32-STATIC-NEXT: ret
9141
9142; DARWIN-32-DYNAMIC: _ltailcaller:
9143; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009144; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009145; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9146; DARWIN-32-DYNAMIC-NEXT: ret
9147
9148; DARWIN-32-PIC: _ltailcaller:
9149; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009150; DARWIN-32-PIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009151; DARWIN-32-PIC-NEXT: addl $12, %esp
9152; DARWIN-32-PIC-NEXT: ret
9153
9154; DARWIN-64-STATIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009155; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009156; DARWIN-64-STATIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009157; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009158; DARWIN-64-STATIC-NEXT: ret
9159
9160; DARWIN-64-DYNAMIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009161; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009162; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009163; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009164; DARWIN-64-DYNAMIC-NEXT: ret
9165
9166; DARWIN-64-PIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009167; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009168; DARWIN-64-PIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009169; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009170; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009171}
9172
9173define void @icaller() nounwind {
9174entry:
9175 %0 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009176 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009177 %1 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009178 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009179 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009180; LINUX-64-STATIC: icaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009181; LINUX-64-STATIC: callq *ifunc
9182; LINUX-64-STATIC: callq *ifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009183; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009184
9185; LINUX-32-STATIC: icaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009186; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009187; LINUX-32-STATIC-NEXT: calll *ifunc
9188; LINUX-32-STATIC-NEXT: calll *ifunc
Evan Cheng7158e082011-01-03 22:53:22 +00009189; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009190; LINUX-32-STATIC-NEXT: ret
9191
9192; LINUX-32-PIC: icaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009193; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009194; LINUX-32-PIC-NEXT: calll *ifunc
9195; LINUX-32-PIC-NEXT: calll *ifunc
Evan Cheng7158e082011-01-03 22:53:22 +00009196; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009197; LINUX-32-PIC-NEXT: ret
9198
9199; LINUX-64-PIC: icaller:
9200; LINUX-64-PIC: pushq %rbx
9201; LINUX-64-PIC-NEXT: movq ifunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009202; LINUX-64-PIC-NEXT: callq *(%rbx)
9203; LINUX-64-PIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009204; LINUX-64-PIC-NEXT: popq %rbx
9205; LINUX-64-PIC-NEXT: ret
9206
9207; DARWIN-32-STATIC: _icaller:
9208; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009209; DARWIN-32-STATIC-NEXT: calll *_ifunc
9210; DARWIN-32-STATIC-NEXT: calll *_ifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009211; DARWIN-32-STATIC-NEXT: addl $12, %esp
9212; DARWIN-32-STATIC-NEXT: ret
9213
9214; DARWIN-32-DYNAMIC: _icaller:
9215; DARWIN-32-DYNAMIC: pushl %esi
9216; DARWIN-32-DYNAMIC-NEXT: subl $8, %esp
9217; DARWIN-32-DYNAMIC-NEXT: movl L_ifunc$non_lazy_ptr, %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009218; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
9219; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009220; DARWIN-32-DYNAMIC-NEXT: addl $8, %esp
9221; DARWIN-32-DYNAMIC-NEXT: popl %esi
9222; DARWIN-32-DYNAMIC-NEXT: ret
9223
9224; DARWIN-32-PIC: _icaller:
9225; DARWIN-32-PIC: pushl %esi
9226; DARWIN-32-PIC-NEXT: subl $8, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009227; DARWIN-32-PIC-NEXT: calll L142$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009228; DARWIN-32-PIC-NEXT: L142$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009229; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00009230; DARWIN-32-PIC-NEXT: movl L_ifunc$non_lazy_ptr-L142$pb(%eax), %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009231; DARWIN-32-PIC-NEXT: calll *(%esi)
9232; DARWIN-32-PIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009233; DARWIN-32-PIC-NEXT: addl $8, %esp
9234; DARWIN-32-PIC-NEXT: popl %esi
9235; DARWIN-32-PIC-NEXT: ret
9236
9237; DARWIN-64-STATIC: _icaller:
9238; DARWIN-64-STATIC: pushq %rbx
9239; DARWIN-64-STATIC-NEXT: movq _ifunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009240; DARWIN-64-STATIC-NEXT: callq *(%rbx)
9241; DARWIN-64-STATIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009242; DARWIN-64-STATIC-NEXT: popq %rbx
9243; DARWIN-64-STATIC-NEXT: ret
9244
9245; DARWIN-64-DYNAMIC: _icaller:
9246; DARWIN-64-DYNAMIC: pushq %rbx
9247; DARWIN-64-DYNAMIC-NEXT: movq _ifunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009248; DARWIN-64-DYNAMIC-NEXT: callq *(%rbx)
9249; DARWIN-64-DYNAMIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009250; DARWIN-64-DYNAMIC-NEXT: popq %rbx
9251; DARWIN-64-DYNAMIC-NEXT: ret
9252
9253; DARWIN-64-PIC: _icaller:
9254; DARWIN-64-PIC: pushq %rbx
9255; DARWIN-64-PIC-NEXT: movq _ifunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009256; DARWIN-64-PIC-NEXT: callq *(%rbx)
9257; DARWIN-64-PIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009258; DARWIN-64-PIC-NEXT: popq %rbx
9259; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009260}
9261
9262define void @dicaller() nounwind {
9263entry:
9264 %0 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009265 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009266 %1 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009267 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009268 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009269; LINUX-64-STATIC: dicaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009270; LINUX-64-STATIC: callq *difunc
9271; LINUX-64-STATIC: callq *difunc
Chris Lattner4f066492009-07-11 20:29:19 +00009272; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009273
9274; LINUX-32-STATIC: dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009275; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009276; LINUX-32-STATIC-NEXT: calll *difunc
9277; LINUX-32-STATIC-NEXT: calll *difunc
Evan Cheng7158e082011-01-03 22:53:22 +00009278; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009279; LINUX-32-STATIC-NEXT: ret
9280
9281; LINUX-32-PIC: dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009282; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009283; LINUX-32-PIC-NEXT: calll *difunc
9284; LINUX-32-PIC-NEXT: calll *difunc
Evan Cheng7158e082011-01-03 22:53:22 +00009285; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009286; LINUX-32-PIC-NEXT: ret
9287
9288; LINUX-64-PIC: dicaller:
9289; LINUX-64-PIC: pushq %rbx
9290; LINUX-64-PIC-NEXT: movq difunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009291; LINUX-64-PIC-NEXT: callq *(%rbx)
9292; LINUX-64-PIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009293; LINUX-64-PIC-NEXT: popq %rbx
9294; LINUX-64-PIC-NEXT: ret
9295
9296; DARWIN-32-STATIC: _dicaller:
9297; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009298; DARWIN-32-STATIC-NEXT: calll *_difunc
9299; DARWIN-32-STATIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009300; DARWIN-32-STATIC-NEXT: addl $12, %esp
9301; DARWIN-32-STATIC-NEXT: ret
9302
9303; DARWIN-32-DYNAMIC: _dicaller:
9304; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009305; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
9306; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009307; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9308; DARWIN-32-DYNAMIC-NEXT: ret
9309
9310; DARWIN-32-PIC: _dicaller:
9311; DARWIN-32-PIC: pushl %esi
9312; DARWIN-32-PIC-NEXT: subl $8, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009313; DARWIN-32-PIC-NEXT: calll L143$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009314; DARWIN-32-PIC-NEXT: L143$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009315; DARWIN-32-PIC-NEXT: popl %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009316; DARWIN-32-PIC-NEXT: calll *_difunc-L143$pb(%esi)
9317; DARWIN-32-PIC-NEXT: calll *_difunc-L143$pb(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009318; DARWIN-32-PIC-NEXT: addl $8, %esp
9319; DARWIN-32-PIC-NEXT: popl %esi
9320; DARWIN-32-PIC-NEXT: ret
9321
9322; DARWIN-64-STATIC: _dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009323; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009324; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
9325; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009326; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009327; DARWIN-64-STATIC-NEXT: ret
9328
9329; DARWIN-64-DYNAMIC: _dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009330; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009331; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
9332; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009333; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009334; DARWIN-64-DYNAMIC-NEXT: ret
9335
9336; DARWIN-64-PIC: _dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009337; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009338; DARWIN-64-PIC-NEXT: callq *_difunc(%rip)
9339; DARWIN-64-PIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009340; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009341; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009342}
9343
9344define void @licaller() nounwind {
9345entry:
9346 %0 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009347 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009348 %1 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009349 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009350 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009351; LINUX-64-STATIC: licaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009352; LINUX-64-STATIC: callq *lifunc
9353; LINUX-64-STATIC: callq *lifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009354; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009355
9356; LINUX-32-STATIC: licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009357; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009358; LINUX-32-STATIC-NEXT: calll *lifunc
9359; LINUX-32-STATIC-NEXT: calll *lifunc
Evan Cheng7158e082011-01-03 22:53:22 +00009360; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009361; LINUX-32-STATIC-NEXT: ret
9362
9363; LINUX-32-PIC: licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009364; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009365; LINUX-32-PIC-NEXT: calll *lifunc
9366; LINUX-32-PIC-NEXT: calll *lifunc
Evan Cheng7158e082011-01-03 22:53:22 +00009367; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009368; LINUX-32-PIC-NEXT: ret
9369
9370; LINUX-64-PIC: licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009371; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009372; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
9373; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009374; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009375; LINUX-64-PIC-NEXT: ret
9376
9377; DARWIN-32-STATIC: _licaller:
9378; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009379; DARWIN-32-STATIC-NEXT: calll *_lifunc
9380; DARWIN-32-STATIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009381; DARWIN-32-STATIC-NEXT: addl $12, %esp
9382; DARWIN-32-STATIC-NEXT: ret
9383
9384; DARWIN-32-DYNAMIC: _licaller:
9385; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009386; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
9387; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009388; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9389; DARWIN-32-DYNAMIC-NEXT: ret
9390
9391; DARWIN-32-PIC: _licaller:
9392; DARWIN-32-PIC: pushl %esi
9393; DARWIN-32-PIC-NEXT: subl $8, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009394; DARWIN-32-PIC-NEXT: calll L144$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009395; DARWIN-32-PIC-NEXT: L144$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009396; DARWIN-32-PIC-NEXT: popl %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009397; DARWIN-32-PIC-NEXT: calll *_lifunc-L144$pb(%esi)
9398; DARWIN-32-PIC-NEXT: calll *_lifunc-L144$pb(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009399; DARWIN-32-PIC-NEXT: addl $8, %esp
9400; DARWIN-32-PIC-NEXT: popl %esi
9401; DARWIN-32-PIC-NEXT: ret
9402
9403; DARWIN-64-STATIC: _licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009404; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009405; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
9406; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009407; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009408; DARWIN-64-STATIC-NEXT: ret
9409
9410; DARWIN-64-DYNAMIC: _licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009411; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009412; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
9413; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009414; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009415; DARWIN-64-DYNAMIC-NEXT: ret
9416
9417; DARWIN-64-PIC: _licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009418; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009419; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
9420; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009421; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009422; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009423}
9424
9425define void @itailcaller() nounwind {
9426entry:
9427 %0 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009428 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009429 %1 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009430 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009431 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009432; LINUX-64-STATIC: itailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009433; LINUX-64-STATIC: callq *ifunc
9434; LINUX-64-STATIC: callq *ifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009435; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009436
9437; LINUX-32-STATIC: itailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009438; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009439; LINUX-32-STATIC-NEXT: calll *ifunc
9440; LINUX-32-STATIC-NEXT: calll *ifunc
Evan Cheng7158e082011-01-03 22:53:22 +00009441; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009442; LINUX-32-STATIC-NEXT: ret
9443
9444; LINUX-32-PIC: itailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009445; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009446; LINUX-32-PIC-NEXT: calll *ifunc
9447; LINUX-32-PIC-NEXT: calll *ifunc
Evan Cheng7158e082011-01-03 22:53:22 +00009448; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009449; LINUX-32-PIC-NEXT: ret
9450
9451; LINUX-64-PIC: itailcaller:
9452; LINUX-64-PIC: pushq %rbx
9453; LINUX-64-PIC-NEXT: movq ifunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009454; LINUX-64-PIC-NEXT: callq *(%rbx)
9455; LINUX-64-PIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009456; LINUX-64-PIC-NEXT: popq %rbx
9457; LINUX-64-PIC-NEXT: ret
9458
9459; DARWIN-32-STATIC: _itailcaller:
9460; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009461; DARWIN-32-STATIC-NEXT: calll *_ifunc
9462; DARWIN-32-STATIC-NEXT: calll *_ifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009463; DARWIN-32-STATIC-NEXT: addl $12, %esp
9464; DARWIN-32-STATIC-NEXT: ret
9465
9466; DARWIN-32-DYNAMIC: _itailcaller:
9467; DARWIN-32-DYNAMIC: pushl %esi
9468; DARWIN-32-DYNAMIC-NEXT: subl $8, %esp
9469; DARWIN-32-DYNAMIC-NEXT: movl L_ifunc$non_lazy_ptr, %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009470; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
9471; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009472; DARWIN-32-DYNAMIC-NEXT: addl $8, %esp
9473; DARWIN-32-DYNAMIC-NEXT: popl %esi
9474; DARWIN-32-DYNAMIC-NEXT: ret
9475
9476; DARWIN-32-PIC: _itailcaller:
9477; DARWIN-32-PIC: pushl %esi
9478; DARWIN-32-PIC-NEXT: subl $8, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009479; DARWIN-32-PIC-NEXT: calll L145$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009480; DARWIN-32-PIC-NEXT: L145$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009481; DARWIN-32-PIC-NEXT: popl %eax
Dan Gohman9f23dee2010-04-17 16:29:15 +00009482; DARWIN-32-PIC-NEXT: movl L_ifunc$non_lazy_ptr-L145$pb(%eax), %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009483; DARWIN-32-PIC-NEXT: calll *(%esi)
9484; DARWIN-32-PIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009485; DARWIN-32-PIC-NEXT: addl $8, %esp
9486; DARWIN-32-PIC-NEXT: popl %esi
9487; DARWIN-32-PIC-NEXT: ret
9488
9489; DARWIN-64-STATIC: _itailcaller:
9490; DARWIN-64-STATIC: pushq %rbx
9491; DARWIN-64-STATIC-NEXT: movq _ifunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009492; DARWIN-64-STATIC-NEXT: callq *(%rbx)
9493; DARWIN-64-STATIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009494; DARWIN-64-STATIC-NEXT: popq %rbx
9495; DARWIN-64-STATIC-NEXT: ret
9496
9497; DARWIN-64-DYNAMIC: _itailcaller:
9498; DARWIN-64-DYNAMIC: pushq %rbx
9499; DARWIN-64-DYNAMIC-NEXT: movq _ifunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009500; DARWIN-64-DYNAMIC-NEXT: callq *(%rbx)
9501; DARWIN-64-DYNAMIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009502; DARWIN-64-DYNAMIC-NEXT: popq %rbx
9503; DARWIN-64-DYNAMIC-NEXT: ret
9504
9505; DARWIN-64-PIC: _itailcaller:
9506; DARWIN-64-PIC: pushq %rbx
9507; DARWIN-64-PIC-NEXT: movq _ifunc@GOTPCREL(%rip), %rbx
Sean Callanan108934c2009-12-18 00:01:26 +00009508; DARWIN-64-PIC-NEXT: callq *(%rbx)
9509; DARWIN-64-PIC-NEXT: callq *(%rbx)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009510; DARWIN-64-PIC-NEXT: popq %rbx
9511; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009512}
9513
9514define void @ditailcaller() nounwind {
9515entry:
9516 %0 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009517 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009518 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009519; LINUX-64-STATIC: ditailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009520; LINUX-64-STATIC: callq *difunc
Chris Lattner4f066492009-07-11 20:29:19 +00009521; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009522
9523; LINUX-32-STATIC: ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009524; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009525; LINUX-32-STATIC-NEXT: calll *difunc
Evan Cheng7158e082011-01-03 22:53:22 +00009526; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009527; LINUX-32-STATIC-NEXT: ret
9528
9529; LINUX-32-PIC: ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009530; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009531; LINUX-32-PIC-NEXT: calll *difunc
Evan Cheng7158e082011-01-03 22:53:22 +00009532; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009533; LINUX-32-PIC-NEXT: ret
9534
9535; LINUX-64-PIC: ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009536; LINUX-64-PIC: pushq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009537; LINUX-64-PIC-NEXT: movq difunc@GOTPCREL(%rip), %rax
Sean Callanan108934c2009-12-18 00:01:26 +00009538; LINUX-64-PIC-NEXT: callq *(%rax)
Evan Cheng7158e082011-01-03 22:53:22 +00009539; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009540; LINUX-64-PIC-NEXT: ret
9541
9542; DARWIN-32-STATIC: _ditailcaller:
9543; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009544; DARWIN-32-STATIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009545; DARWIN-32-STATIC-NEXT: addl $12, %esp
9546; DARWIN-32-STATIC-NEXT: ret
9547
9548; DARWIN-32-DYNAMIC: _ditailcaller:
9549; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009550; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009551; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9552; DARWIN-32-DYNAMIC-NEXT: ret
9553
9554; DARWIN-32-PIC: _ditailcaller:
9555; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009556; DARWIN-32-PIC-NEXT: calll L146$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009557; DARWIN-32-PIC-NEXT: L146$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009558; DARWIN-32-PIC-NEXT: popl %eax
Chris Lattner1eb1b682010-09-22 05:49:14 +00009559; DARWIN-32-PIC-NEXT: calll *_difunc-L146$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009560; DARWIN-32-PIC-NEXT: addl $12, %esp
9561; DARWIN-32-PIC-NEXT: ret
9562
9563; DARWIN-64-STATIC: _ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009564; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009565; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009566; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009567; DARWIN-64-STATIC-NEXT: ret
9568
9569; DARWIN-64-DYNAMIC: _ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009570; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009571; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009572; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009573; DARWIN-64-DYNAMIC-NEXT: ret
9574
9575; DARWIN-64-PIC: _ditailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009576; DARWIN-64-PIC: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009577; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009578; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009579}
9580
9581define void @litailcaller() nounwind {
9582entry:
9583 %0 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009584 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009585 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009586; LINUX-64-STATIC: litailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009587; LINUX-64-STATIC: callq *lifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009588; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009589
9590; LINUX-32-STATIC: litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009591; LINUX-32-STATIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009592; LINUX-32-STATIC-NEXT: calll *lifunc
Evan Cheng7158e082011-01-03 22:53:22 +00009593; LINUX-32-STATIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009594; LINUX-32-STATIC-NEXT: ret
9595
9596; LINUX-32-PIC: litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009597; LINUX-32-PIC: pushl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009598; LINUX-32-PIC-NEXT: calll *lifunc
Evan Cheng7158e082011-01-03 22:53:22 +00009599; LINUX-32-PIC-NEXT: popl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009600; LINUX-32-PIC-NEXT: ret
9601
9602; LINUX-64-PIC: litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009603; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009604; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009605; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009606; LINUX-64-PIC-NEXT: ret
9607
9608; DARWIN-32-STATIC: _litailcaller:
9609; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009610; DARWIN-32-STATIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009611; DARWIN-32-STATIC-NEXT: addl $12, %esp
9612; DARWIN-32-STATIC-NEXT: ret
9613
9614; DARWIN-32-DYNAMIC: _litailcaller:
9615; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009616; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009617; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9618; DARWIN-32-DYNAMIC-NEXT: ret
9619
9620; DARWIN-32-PIC: _litailcaller:
9621; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009622; DARWIN-32-PIC-NEXT: calll L147$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009623; DARWIN-32-PIC-NEXT: L147$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009624; DARWIN-32-PIC-NEXT: popl %eax
Chris Lattner1eb1b682010-09-22 05:49:14 +00009625; DARWIN-32-PIC-NEXT: calll *_lifunc-L147$pb(%eax)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009626; DARWIN-32-PIC-NEXT: addl $12, %esp
9627; DARWIN-32-PIC-NEXT: ret
9628
9629; DARWIN-64-STATIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009630; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009631; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009632; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009633; DARWIN-64-STATIC-NEXT: ret
9634
9635; DARWIN-64-DYNAMIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009636; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009637; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009638; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009639; DARWIN-64-DYNAMIC-NEXT: ret
9640
9641; DARWIN-64-PIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009642; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009643; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009644; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009645; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009646}