• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-STATIC
2; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-PIC
3
4; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-64-STATIC
5; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-64-PIC
6
7; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-STATIC
8; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-apple-darwin9 -march=x86 -relocation-model=dynamic-no-pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC
9; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-apple-darwin9 -march=x86 -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-PIC
10
11; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-STATIC
12; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-DYNAMIC
13; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-PIC
14
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, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
37	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 0), align 4
38	ret void
39
40; LINUX-64-STATIC-LABEL: foo00:
41; LINUX-64-STATIC: movl	src(%rip), [[EAX:%e.x]]
42; LINUX-64-STATIC: movl	[[EAX]], dst
43; LINUX-64-STATIC: ret
44
45; LINUX-32-STATIC-LABEL: foo00:
46; LINUX-32-STATIC: 	movl	src, [[EAX:%e.x]]
47; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], dst
48; LINUX-32-STATIC-NEXT: 	ret
49
50; LINUX-32-PIC-LABEL: foo00:
51; LINUX-32-PIC: 	movl	src, [[EAX:%e.x]]
52; LINUX-32-PIC-NEXT: 	movl	[[EAX]], dst
53; LINUX-32-PIC-NEXT: 	ret
54
55; LINUX-64-PIC-LABEL: foo00:
56; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r..]]
57; LINUX-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e..]]
58; LINUX-64-PIC-NEXT: 	movq	dst@GOTPCREL(%rip), [[RCX:%r..]]
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:%e.x]]
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:%e..]]
69; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EAX]]), [[EAX:%e..]]
70; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[ECX:%e..]]
71; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
72; DARWIN-32-DYNAMIC-NEXT: 	ret
73
74; DARWIN-32-PIC: _foo00:
75; DARWIN-32-PIC: 	calll	L0$pb
76; DARWIN-32-PIC-NEXT: L0$pb:
77; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e..]]
78; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L0$pb([[EAX]]), [[ECX:%e..]]
79; DARWIN-32-PIC-NEXT: 	movl	([[ECX]]), [[ECX:%e..]]
80; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L0$pb([[EAX]]), [[EAX:%e..]]
81; 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:%r..]]
86; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]]), [[EAX:%e..]]
87; DARWIN-64-STATIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r..]]
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:%r..]]
93; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]]), [[EAX:%e..]]
94; DARWIN-64-DYNAMIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r..]]
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:%r..]]
100; DARWIN-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e..]]
101; DARWIN-64-PIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r..]]
102; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]])
103; DARWIN-64-PIC-NEXT: 	ret
104}
105
106define void @fxo00() nounwind {
107entry:
108	%0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
109	store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 0), align 4
110	ret void
111
112; LINUX-64-STATIC-LABEL: fxo00:
113; LINUX-64-STATIC: movl	xsrc(%rip), [[EAX:%e.x]]
114; LINUX-64-STATIC: movl	[[EAX]], xdst
115; LINUX-64-STATIC: ret
116
117; LINUX-32-STATIC-LABEL: fxo00:
118; LINUX-32-STATIC: 	movl	xsrc, [[EAX:%e.x]]
119; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], xdst
120; LINUX-32-STATIC-NEXT: 	ret
121
122; LINUX-32-PIC-LABEL: fxo00:
123; LINUX-32-PIC: 	movl	xsrc, [[EAX:%e.x]]
124; LINUX-32-PIC-NEXT: 	movl	[[EAX]], xdst
125; LINUX-32-PIC-NEXT: 	ret
126
127; LINUX-64-PIC-LABEL: fxo00:
128; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
129; LINUX-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
130; LINUX-64-PIC-NEXT: 	movq	xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
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:%e.x]]
141; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
142; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xdst$non_lazy_ptr, [[ECX:%e.x]]
143; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
144; DARWIN-32-DYNAMIC-NEXT: 	ret
145
146; DARWIN-32-PIC: _fxo00:
147; DARWIN-32-PIC: 	calll	L1$pb
148; DARWIN-32-PIC-NEXT: L1$pb:
149; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
150; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L1$pb([[EAX]]), [[ECX:%e.x]]
151; DARWIN-32-PIC-NEXT: 	movl	([[ECX]]), [[ECX:%e.x]]
152; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L1$pb([[EAX]]), [[EAX:%e.x]]
153; 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:%r.x]]
158; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
159; DARWIN-64-STATIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
165; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
166; DARWIN-64-DYNAMIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
172; DARWIN-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
173; DARWIN-64-PIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
174; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]])
175; DARWIN-64-PIC-NEXT: 	ret
176}
177
178define void @foo01() nounwind {
179entry:
180	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
181	ret void
182; LINUX-64-STATIC-LABEL: foo01:
183; LINUX-64-STATIC: movq	$dst, ptr
184; LINUX-64-STATIC: ret
185
186; LINUX-32-STATIC-LABEL: foo01:
187; LINUX-32-STATIC: 	movl	$dst, ptr
188; LINUX-32-STATIC-NEXT: 	ret
189
190; LINUX-32-PIC-LABEL: foo01:
191; LINUX-32-PIC: 	movl	$dst, ptr
192; LINUX-32-PIC-NEXT: 	ret
193
194; LINUX-64-PIC-LABEL: foo01:
195; LINUX-64-PIC: 	movq	dst@GOTPCREL(%rip), [[RAX:%r.x]]
196; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
206; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
207; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
208; DARWIN-32-DYNAMIC-NEXT: 	ret
209
210; DARWIN-32-PIC: _foo01:
211; DARWIN-32-PIC: 	calll	L2$pb
212; DARWIN-32-PIC-NEXT: L2$pb:
213; DARWIN-32-PIC-NEXT: 	popl
214; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L2$pb(
215; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L2$pb(
216; DARWIN-32-PIC-NEXT: 	movl
217; DARWIN-32-PIC-NEXT: 	ret
218
219; DARWIN-64-STATIC: _foo01:
220; DARWIN-64-STATIC: 	movq	_dst@GOTPCREL(%rip), [[RAX:%r.x]]
221; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
227; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
233; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
234; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], ([[RCX]])
235; DARWIN-64-PIC-NEXT: 	ret
236}
237
238define void @fxo01() nounwind {
239entry:
240	store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
241	ret void
242; LINUX-64-STATIC-LABEL: fxo01:
243; LINUX-64-STATIC: movq	$xdst, ptr
244; LINUX-64-STATIC: ret
245
246; LINUX-32-STATIC-LABEL: fxo01:
247; LINUX-32-STATIC: 	movl	$xdst, ptr
248; LINUX-32-STATIC-NEXT: 	ret
249
250; LINUX-32-PIC-LABEL: fxo01:
251; LINUX-32-PIC: 	movl	$xdst, ptr
252; LINUX-32-PIC-NEXT: 	ret
253
254; LINUX-64-PIC-LABEL: fxo01:
255; LINUX-64-PIC: 	movq	xdst@GOTPCREL(%rip), [[RAX:%r.x]]
256; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
266; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
267; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
268; DARWIN-32-DYNAMIC-NEXT: 	ret
269
270; DARWIN-32-PIC: _fxo01:
271; DARWIN-32-PIC: 	calll	L3$pb
272; DARWIN-32-PIC-NEXT: L3$pb:
273; DARWIN-32-PIC-NEXT: 	popl	[[R0:%e..]]
274; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L3$pb([[R0]]), [[R1:%e..]]
275; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L3$pb([[R0]]), [[R2:%e..]]
276; DARWIN-32-PIC-NEXT: 	movl	[[R1:%e..]], ([[R2]])
277; DARWIN-32-PIC-NEXT: 	ret
278
279; DARWIN-64-STATIC: _fxo01:
280; DARWIN-64-STATIC: 	movq	_xdst@GOTPCREL(%rip), [[RAX:%r.x]]
281; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
287; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
293; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
294; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], ([[RCX]])
295; DARWIN-64-PIC-NEXT: 	ret
296}
297
298define void @foo02() nounwind {
299entry:
300	%0 = load i32*, i32** @ptr, align 8
301	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
302	store i32 %1, i32* %0, align 4
303	ret void
304; LINUX-64-STATIC-LABEL: foo02:
305; LINUX-64-STATIC: movl    src(%rip), %
306; LINUX-64-STATIC: movq    ptr(%rip), %
307; LINUX-64-STATIC: movl
308; LINUX-64-STATIC: ret
309
310; LINUX-32-STATIC-LABEL: foo02:
311; LINUX-32-STATIC: 	movl	src, [[EAX:%e.x]]
312; LINUX-32-STATIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
313; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ([[ECX]])
314; LINUX-32-STATIC-NEXT: 	ret
315
316; LINUX-32-PIC-LABEL: foo02:
317; LINUX-32-PIC: 	movl	src, [[EAX:%e.x]]
318; LINUX-32-PIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
319; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ([[ECX]])
320; LINUX-32-PIC-NEXT: 	ret
321
322; LINUX-64-PIC-LABEL: foo02:
323; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
324; LINUX-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
325; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
326; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
332; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[ECX:%e.x]]
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:%e.x]]
338; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
339; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
340; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]]), [[ECX:%e.x]]
341; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
342; DARWIN-32-DYNAMIC-NEXT: 	ret
343
344; DARWIN-32-PIC: _foo02:
345; DARWIN-32-PIC: 	calll	L4$pb
346; DARWIN-32-PIC-NEXT: L4$pb:
347; DARWIN-32-PIC-NEXT: 	popl	[[R0:%e..]]
348; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L4$pb([[R0]]), [[R1:%e..]]
349; DARWIN-32-PIC-NEXT: 	movl	([[R1]]), [[R2:%e..]]
350; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L4$pb([[R0]]), [[R3:%e..]]
351; DARWIN-32-PIC-NEXT: 	movl	([[R3]]), [[R4:%e..]]
352; DARWIN-32-PIC-NEXT: 	movl	[[R2]], ([[R4]])
353; DARWIN-32-PIC-NEXT: 	ret
354
355; DARWIN-64-STATIC: _foo02:
356; DARWIN-64-STATIC: 	movq	_src@GOTPCREL(%rip), [[RAX:%r.x]]
357; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
358; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
359; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
365; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
366; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
367; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
373; DARWIN-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
374; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
375; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
376; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]])
377; DARWIN-64-PIC-NEXT: 	ret
378}
379
380define void @fxo02() nounwind {
381entry:
382	%0 = load i32*, i32** @ptr, align 8
383	%1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
384	store i32 %1, i32* %0, align 4
385; LINUX-64-STATIC-LABEL: fxo02:
386; LINUX-64-STATIC: movl    xsrc(%rip), %
387; LINUX-64-STATIC: movq    ptr(%rip), %
388; LINUX-64-STATIC: movl
389; LINUX-64-STATIC: ret
390
391; LINUX-32-STATIC-LABEL: fxo02:
392; LINUX-32-STATIC: 	movl	xsrc, [[EAX:%e.x]]
393; LINUX-32-STATIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
394; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ([[ECX]])
395; LINUX-32-STATIC-NEXT: 	ret
396	ret void
397
398; LINUX-32-PIC-LABEL: fxo02:
399; LINUX-32-PIC: 	movl	xsrc, [[EAX:%e.x]]
400; LINUX-32-PIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
401; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ([[ECX]])
402; LINUX-32-PIC-NEXT: 	ret
403
404; LINUX-64-PIC-LABEL: fxo02:
405; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
406; LINUX-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
407; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
408; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
414; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[ECX:%e.x]]
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:%e.x]]
420; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
421; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
422; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]]), [[ECX:%e.x]]
423; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
424; DARWIN-32-DYNAMIC-NEXT: 	ret
425
426; DARWIN-32-PIC: _fxo02:
427; DARWIN-32-PIC: 	calll	L5$pb
428; DARWIN-32-PIC-NEXT: L5$pb:
429; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
430; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L5$pb([[EAX]]), [[ECX:%e.x]]
431; DARWIN-32-PIC-NEXT: 	movl	([[ECX]]), [[ECX:%e.x]]
432; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L5$pb([[EAX]]), [[EAX:%e.x]]
433; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
439; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
440; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
441; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
447; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
448; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
449; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
455; DARWIN-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
456; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
457; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
458; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]])
459; DARWIN-64-PIC-NEXT: 	ret
460}
461
462define void @foo03() nounwind {
463entry:
464	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
465	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 0), align 32
466	ret void
467; LINUX-64-STATIC-LABEL: foo03:
468; LINUX-64-STATIC: movl    dsrc(%rip), [[EAX:%e.x]]
469; LINUX-64-STATIC: movl    [[EAX]], ddst
470; LINUX-64-STATIC: ret
471
472; LINUX-32-STATIC-LABEL: foo03:
473; LINUX-32-STATIC: 	movl	dsrc, [[EAX:%e.x]]
474; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ddst
475; LINUX-32-STATIC-NEXT: 	ret
476
477; LINUX-32-PIC-LABEL: foo03:
478; LINUX-32-PIC: 	movl	dsrc, [[EAX:%e.x]]
479; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ddst
480; LINUX-32-PIC-NEXT: 	ret
481
482; LINUX-64-PIC-LABEL: foo03:
483; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
484; LINUX-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
485; LINUX-64-PIC-NEXT: 	movq	ddst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
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:%e.x]]
496; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _ddst
497; DARWIN-32-DYNAMIC-NEXT: 	ret
498
499; DARWIN-32-PIC: _foo03:
500; DARWIN-32-PIC: 	calll	L6$pb
501; DARWIN-32-PIC-NEXT: L6$pb:
502; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
503; DARWIN-32-PIC-NEXT: 	movl	_dsrc-L6$pb([[EAX]]), [[ECX:%e.x]]
504; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _ddst-L6$pb([[EAX]])
505; DARWIN-32-PIC-NEXT: 	ret
506
507; DARWIN-64-STATIC: _foo03:
508; DARWIN-64-STATIC: 	movl	_dsrc(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
519; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], _ddst(%rip)
520; DARWIN-64-PIC-NEXT: 	ret
521}
522
523define void @foo04() nounwind {
524entry:
525	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
526	ret void
527; LINUX-64-STATIC-LABEL: foo04:
528; LINUX-64-STATIC: movq    $ddst, dptr
529; LINUX-64-STATIC: ret
530
531; LINUX-32-STATIC-LABEL: foo04:
532; LINUX-32-STATIC: 	movl	$ddst, dptr
533; LINUX-32-STATIC-NEXT: 	ret
534
535; LINUX-32-PIC-LABEL: foo04:
536; LINUX-32-PIC: 	movl	$ddst, dptr
537; LINUX-32-PIC-NEXT: 	ret
538
539; LINUX-64-PIC-LABEL: foo04:
540; LINUX-64-PIC: 	movq	ddst@GOTPCREL(%rip), [[RAX:%r.x]]
541; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:
554; DARWIN-32-PIC: 	calll	L7$pb
555; DARWIN-32-PIC-NEXT: L7$pb:
556; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
557; DARWIN-32-PIC-NEXT: 	leal	_ddst-L7$pb([[EAX]]), [[ECX:%e.x]]
558; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _dptr-L7$pb([[EAX]])
559; DARWIN-32-PIC-NEXT: 	ret
560
561; DARWIN-64-STATIC: _foo04:
562; DARWIN-64-STATIC: 	leaq	_ddst(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
573; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _dptr(%rip)
574; DARWIN-64-PIC-NEXT: 	ret
575}
576
577define void @foo05() nounwind {
578entry:
579	%0 = load i32*, i32** @dptr, align 8
580	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
581	store i32 %1, i32* %0, align 4
582	ret void
583; LINUX-64-STATIC-LABEL: foo05:
584; LINUX-64-STATIC: movl    dsrc(%rip), %
585; LINUX-64-STATIC: movq    dptr(%rip), %
586; LINUX-64-STATIC: movl
587; LINUX-64-STATIC: ret
588
589; LINUX-32-STATIC-LABEL: foo05:
590; LINUX-32-STATIC: 	movl	dsrc, [[EAX:%e.x]]
591; LINUX-32-STATIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
592; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ([[ECX]])
593; LINUX-32-STATIC-NEXT: 	ret
594
595; LINUX-32-PIC-LABEL: foo05:
596; LINUX-32-PIC: 	movl	dsrc, [[EAX:%e.x]]
597; LINUX-32-PIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
598; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ([[ECX]])
599; LINUX-32-PIC-NEXT: 	ret
600
601; LINUX-64-PIC-LABEL: foo05:
602; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
603; LINUX-64-PIC-NEXT: 	movl	([[RAX]]), [[EAX:%e.x]]
604; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
605; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
611; DARWIN-32-STATIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
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:%e.x]]
617; DARWIN-32-DYNAMIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
618; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
619; DARWIN-32-DYNAMIC-NEXT: 	ret
620
621; DARWIN-32-PIC: _foo05:
622; DARWIN-32-PIC: 	calll	L8$pb
623; DARWIN-32-PIC-NEXT: L8$pb:
624; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
625; DARWIN-32-PIC-NEXT: 	movl	_dsrc-L8$pb([[EAX]]), [[ECX:%e.x]]
626; DARWIN-32-PIC-NEXT: 	movl	_dptr-L8$pb([[EAX]]), [[EAX:%e.x]]
627; 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:%e.x]]
632; DARWIN-64-STATIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%e.x]]
638; DARWIN-64-DYNAMIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%e.x]]
644; DARWIN-64-PIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
645; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]])
646; DARWIN-64-PIC-NEXT: 	ret
647}
648
649define void @foo06() nounwind {
650entry:
651	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
652	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 0), align 4
653	ret void
654; LINUX-64-STATIC-LABEL: foo06:
655; LINUX-64-STATIC: movl    lsrc(%rip), [[EAX:%e.x]]
656; LINUX-64-STATIC: movl    [[EAX]], ldst(%rip)
657; LINUX-64-STATIC: ret
658
659; LINUX-32-STATIC-LABEL: foo06:
660; LINUX-32-STATIC: 	movl	lsrc, [[EAX:%e.x]]
661; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ldst
662; LINUX-32-STATIC-NEXT: 	ret
663
664; LINUX-32-PIC-LABEL: foo06:
665; LINUX-32-PIC: 	movl	lsrc, [[EAX:%e.x]]
666; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ldst
667; LINUX-32-PIC-NEXT: 	ret
668
669; LINUX-64-PIC-LABEL: foo06:
670; LINUX-64-PIC: 	movl	lsrc(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
681; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _ldst
682; DARWIN-32-DYNAMIC-NEXT: 	ret
683
684; DARWIN-32-PIC: _foo06:
685; DARWIN-32-PIC: 	calll	L9$pb
686; DARWIN-32-PIC-NEXT: L9$pb:
687; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
688; DARWIN-32-PIC-NEXT: 	movl	_lsrc-L9$pb([[EAX]]), [[ECX:%e.x]]
689; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _ldst-L9$pb([[EAX]])
690; DARWIN-32-PIC-NEXT: 	ret
691
692; DARWIN-64-STATIC: _foo06:
693; DARWIN-64-STATIC: 	movl	_lsrc(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
704; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], _ldst(%rip)
705; DARWIN-64-PIC-NEXT: 	ret
706}
707
708define void @foo07() nounwind {
709entry:
710	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
711	ret void
712; LINUX-64-STATIC-LABEL: foo07:
713; LINUX-64-STATIC: movq    $ldst, lptr
714; LINUX-64-STATIC: ret
715
716; LINUX-32-STATIC-LABEL: foo07:
717; LINUX-32-STATIC: 	movl	$ldst, lptr
718; LINUX-32-STATIC-NEXT: 	ret
719
720; LINUX-32-PIC-LABEL: foo07:
721; LINUX-32-PIC: 	movl	$ldst, lptr
722; LINUX-32-PIC-NEXT: 	ret
723
724; LINUX-64-PIC-LABEL: foo07:
725; LINUX-64-PIC: 	leaq	ldst(%rip), [[RAX:%r.x]]
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:
738; DARWIN-32-PIC: 	calll	L10$pb
739; DARWIN-32-PIC-NEXT: L10$pb:
740; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
741; DARWIN-32-PIC-NEXT: 	leal	_ldst-L10$pb([[EAX]]), [[ECX:%e.x]]
742; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _lptr-L10$pb([[EAX]])
743; DARWIN-32-PIC-NEXT: 	ret
744
745; DARWIN-64-STATIC: _foo07:
746; DARWIN-64-STATIC: 	leaq	_ldst(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
757; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _lptr(%rip)
758; DARWIN-64-PIC-NEXT: 	ret
759}
760
761define void @foo08() nounwind {
762entry:
763	%0 = load i32*, i32** @lptr, align 8
764	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
765	store i32 %1, i32* %0, align 4
766	ret void
767; LINUX-64-STATIC-LABEL: foo08:
768; LINUX-64-STATIC: movl    lsrc(%rip), %
769; LINUX-64-STATIC: movq    lptr(%rip), %
770; LINUX-64-STATIC: movl
771; LINUX-64-STATIC: ret
772
773; LINUX-32-STATIC-LABEL: foo08:
774; LINUX-32-STATIC: 	movl	lsrc, [[EAX:%e.x]]
775; LINUX-32-STATIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
776; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ([[ECX]])
777; LINUX-32-STATIC-NEXT: 	ret
778
779; LINUX-32-PIC-LABEL: foo08:
780; LINUX-32-PIC: 	movl	lsrc, [[EAX:%e.x]]
781; LINUX-32-PIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
782; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ([[ECX]])
783; LINUX-32-PIC-NEXT: 	ret
784
785; LINUX-64-PIC-LABEL: foo08:
786; LINUX-64-PIC: 	movl	lsrc(%rip), [[EAX:%e.x]]
787; LINUX-64-PIC-NEXT: 	movq	lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
793; DARWIN-32-STATIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
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:%e.x]]
799; DARWIN-32-DYNAMIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
800; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
801; DARWIN-32-DYNAMIC-NEXT: 	ret
802
803; DARWIN-32-PIC: _foo08:
804; DARWIN-32-PIC: 	calll	L11$pb
805; DARWIN-32-PIC-NEXT: L11$pb:
806; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
807; DARWIN-32-PIC-NEXT: 	movl	_lsrc-L11$pb([[EAX]]), [[ECX:%e.x]]
808; DARWIN-32-PIC-NEXT: 	movl	_lptr-L11$pb([[EAX]]), [[EAX:%e.x]]
809; 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:%e.x]]
814; DARWIN-64-STATIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
820; DARWIN-64-DYNAMIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
826; DARWIN-64-PIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
827; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]])
828; DARWIN-64-PIC-NEXT: 	ret
829}
830
831define void @qux00() nounwind {
832entry:
833	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
834	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), align 4
835	ret void
836; LINUX-64-STATIC-LABEL: qux00:
837; LINUX-64-STATIC: movl    src+64(%rip), [[EAX:%e.x]]
838; LINUX-64-STATIC: movl    [[EAX]], dst+64(%rip)
839; LINUX-64-STATIC: ret
840
841; LINUX-32-STATIC-LABEL: qux00:
842; LINUX-32-STATIC: 	movl	src+64, [[EAX:%e.x]]
843; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], dst+64
844; LINUX-32-STATIC-NEXT: 	ret
845
846; LINUX-32-PIC-LABEL: qux00:
847; LINUX-32-PIC: 	movl	src+64, [[EAX:%e.x]]
848; LINUX-32-PIC-NEXT: 	movl	[[EAX]], dst+64
849; LINUX-32-PIC-NEXT: 	ret
850
851; LINUX-64-PIC-LABEL: qux00:
852; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
853; LINUX-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
854; LINUX-64-PIC-NEXT: 	movq	dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
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:%e.x]]
865; DARWIN-32-DYNAMIC-NEXT: 	movl	64([[EAX]]), [[EAX:%e.x]]
866; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[ECX:%e.x]]
867; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
868; DARWIN-32-DYNAMIC-NEXT: 	ret
869
870; DARWIN-32-PIC: _qux00:
871; DARWIN-32-PIC: 	calll	L12$pb
872; DARWIN-32-PIC-NEXT: L12$pb:
873; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
874; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L12$pb([[EAX]]), [[ECX:%e.x]]
875; DARWIN-32-PIC-NEXT: 	movl	64([[ECX]]), [[ECX:%e.x]]
876; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L12$pb([[EAX]]), [[EAX:%e.x]]
877; 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:%r.x]]
882; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
883; DARWIN-64-STATIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
889; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
890; DARWIN-64-DYNAMIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
896; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
897; DARWIN-64-PIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
898; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]])
899; DARWIN-64-PIC-NEXT: 	ret
900}
901
902define void @qxx00() nounwind {
903entry:
904	%0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
905	store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), align 4
906	ret void
907; LINUX-64-STATIC-LABEL: qxx00:
908; LINUX-64-STATIC: movl    xsrc+64(%rip), [[EAX:%e.x]]
909; LINUX-64-STATIC: movl    [[EAX]], xdst+64(%rip)
910; LINUX-64-STATIC: ret
911
912; LINUX-32-STATIC-LABEL: qxx00:
913; LINUX-32-STATIC: 	movl	xsrc+64, [[EAX:%e.x]]
914; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], xdst+64
915; LINUX-32-STATIC-NEXT: 	ret
916
917; LINUX-32-PIC-LABEL: qxx00:
918; LINUX-32-PIC: 	movl	xsrc+64, [[EAX:%e.x]]
919; LINUX-32-PIC-NEXT: 	movl	[[EAX]], xdst+64
920; LINUX-32-PIC-NEXT: 	ret
921
922; LINUX-64-PIC-LABEL: qxx00:
923; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
924; LINUX-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
925; LINUX-64-PIC-NEXT: 	movq	xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
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:%e.x]]
936; DARWIN-32-DYNAMIC-NEXT: 	movl	64([[EAX]]), [[EAX:%e.x]]
937; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xdst$non_lazy_ptr, [[ECX:%e.x]]
938; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
939; DARWIN-32-DYNAMIC-NEXT: 	ret
940
941; DARWIN-32-PIC: _qxx00:
942; DARWIN-32-PIC: 	calll	L13$pb
943; DARWIN-32-PIC-NEXT: L13$pb:
944; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
945; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L13$pb([[EAX]]), [[ECX:%e.x]]
946; DARWIN-32-PIC-NEXT: 	movl	64([[ECX]]), [[ECX:%e.x]]
947; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L13$pb([[EAX]]), [[EAX:%e.x]]
948; 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:%r.x]]
953; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
954; DARWIN-64-STATIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
960; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
961; DARWIN-64-DYNAMIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
967; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
968; DARWIN-64-PIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
969; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]])
970; DARWIN-64-PIC-NEXT: 	ret
971}
972
973define void @qux01() nounwind {
974entry:
975	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
976	ret void
977; LINUX-64-STATIC-LABEL: qux01:
978; LINUX-64-STATIC: movq    $dst+64, ptr
979; LINUX-64-STATIC: ret
980
981; LINUX-32-STATIC-LABEL: qux01:
982; LINUX-32-STATIC: 	movl	$dst+64, ptr
983; LINUX-32-STATIC-NEXT: 	ret
984
985; LINUX-32-PIC-LABEL: qux01:
986; LINUX-32-PIC: 	movl	$dst+64, ptr
987; LINUX-32-PIC-NEXT: 	ret
988
989; LINUX-64-PIC-LABEL: qux01:
990; LINUX-64-PIC: 	movq	dst@GOTPCREL(%rip), [[RAX:%r.x]]
991; LINUX-64-PIC-NEXT: 	addq	$64, [[RAX:%r.x]]
992; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
1002; DARWIN-32-DYNAMIC-NEXT: 	addl	$64, [[EAX:%e.x]]
1003; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1004; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
1005; DARWIN-32-DYNAMIC-NEXT: 	ret
1006
1007; DARWIN-32-PIC: _qux01:
1008; DARWIN-32-PIC: 	calll	L14$pb
1009; DARWIN-32-PIC-NEXT: L14$pb:
1010; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1011; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L14$pb([[EAX]]), [[ECX:%e.x]]
1012; DARWIN-32-PIC-NEXT: 	addl	$64, [[ECX:%e.x]]
1013; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L14$pb([[EAX]]), [[EAX:%e.x]]
1014; 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:%r.x]]
1019; DARWIN-64-STATIC-NEXT: 	addq	$64, [[RAX:%r.x]]
1020; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
1026; DARWIN-64-DYNAMIC-NEXT: 	addq	$64, [[RAX:%r.x]]
1027; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
1033; DARWIN-64-PIC-NEXT: 	addq	$64, [[RAX:%r.x]]
1034; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1035; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], ([[RCX]])
1036; DARWIN-64-PIC-NEXT: 	ret
1037}
1038
1039define void @qxx01() nounwind {
1040entry:
1041	store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1042	ret void
1043; LINUX-64-STATIC-LABEL: qxx01:
1044; LINUX-64-STATIC: movq    $xdst+64, ptr
1045; LINUX-64-STATIC: ret
1046
1047; LINUX-32-STATIC-LABEL: qxx01:
1048; LINUX-32-STATIC: 	movl	$xdst+64, ptr
1049; LINUX-32-STATIC-NEXT: 	ret
1050
1051; LINUX-32-PIC-LABEL: qxx01:
1052; LINUX-32-PIC: 	movl	$xdst+64, ptr
1053; LINUX-32-PIC-NEXT: 	ret
1054
1055; LINUX-64-PIC-LABEL: qxx01:
1056; LINUX-64-PIC: 	movq	xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1057; LINUX-64-PIC-NEXT: 	addq	$64, [[RAX:%r.x]]
1058; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
1068; DARWIN-32-DYNAMIC-NEXT: 	addl	$64, [[EAX:%e.x]]
1069; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1070; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
1071; DARWIN-32-DYNAMIC-NEXT: 	ret
1072
1073; DARWIN-32-PIC: _qxx01:
1074; DARWIN-32-PIC: 	calll	L15$pb
1075; DARWIN-32-PIC-NEXT: L15$pb:
1076; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1077; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L15$pb([[EAX]]), [[ECX:%e.x]]
1078; DARWIN-32-PIC-NEXT: 	addl	$64, [[ECX:%e.x]]
1079; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L15$pb([[EAX]]), [[EAX:%e.x]]
1080; 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:%r.x]]
1085; DARWIN-64-STATIC-NEXT: 	addq	$64, [[RAX:%r.x]]
1086; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
1092; DARWIN-64-DYNAMIC-NEXT: 	addq	$64, [[RAX:%r.x]]
1093; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
1099; DARWIN-64-PIC-NEXT: 	addq	$64, [[RAX:%r.x]]
1100; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1101; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], ([[RCX]])
1102; DARWIN-64-PIC-NEXT: 	ret
1103}
1104
1105define void @qux02() nounwind {
1106entry:
1107	%0 = load i32*, i32** @ptr, align 8
1108	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
1109	%2 = getelementptr i32, i32* %0, i64 16
1110	store i32 %1, i32* %2, align 4
1111; LINUX-64-STATIC-LABEL: qux02:
1112; LINUX-64-STATIC: movl    src+64(%rip), [[EAX:%e.x]]
1113; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1114; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1115; LINUX-64-STATIC: ret
1116
1117; LINUX-32-STATIC-LABEL: qux02:
1118; LINUX-32-STATIC: 	movl	src+64, [[EAX:%e.x]]
1119; LINUX-32-STATIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
1120; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1121; LINUX-32-STATIC-NEXT: 	ret
1122	ret void
1123
1124; LINUX-32-PIC-LABEL: qux02:
1125; LINUX-32-PIC: 	movl	src+64, [[EAX:%e.x]]
1126; LINUX-32-PIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
1127; LINUX-32-PIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1128; LINUX-32-PIC-NEXT: 	ret
1129
1130; LINUX-64-PIC-LABEL: qux02:
1131; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
1132; LINUX-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1133; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1134; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
1140; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[ECX:%e.x]]
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:%e.x]]
1146; DARWIN-32-DYNAMIC-NEXT: 	movl	64([[EAX]]), [[EAX:%e.x]]
1147; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1148; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]]), [[ECX:%e.x]]
1149; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1150; DARWIN-32-DYNAMIC-NEXT: 	ret
1151
1152; DARWIN-32-PIC: _qux02:
1153; DARWIN-32-PIC: 	calll	L16$pb
1154; DARWIN-32-PIC-NEXT: L16$pb:
1155; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1156; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L16$pb([[EAX]]), [[ECX:%e.x]]
1157; DARWIN-32-PIC-NEXT: 	movl	64([[ECX]]), [[ECX:%e.x]]
1158; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L16$pb([[EAX]]), [[EAX:%e.x]]
1159; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
1165; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1166; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1167; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
1173; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1174; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1175; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
1181; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1182; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1183; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
1184; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]])
1185; DARWIN-64-PIC-NEXT: 	ret
1186}
1187
1188define void @qxx02() nounwind {
1189entry:
1190	%0 = load i32*, i32** @ptr, align 8
1191	%1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
1192	%2 = getelementptr i32, i32* %0, i64 16
1193	store i32 %1, i32* %2, align 4
1194; LINUX-64-STATIC-LABEL: qxx02:
1195; LINUX-64-STATIC: movl    xsrc+64(%rip), [[EAX:%e.x]]
1196; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1197; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1198; LINUX-64-STATIC: ret
1199
1200; LINUX-32-STATIC-LABEL: qxx02:
1201; LINUX-32-STATIC: 	movl	xsrc+64, [[EAX:%e.x]]
1202; LINUX-32-STATIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
1203; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1204; LINUX-32-STATIC-NEXT: 	ret
1205	ret void
1206
1207; LINUX-32-PIC-LABEL: qxx02:
1208; LINUX-32-PIC: 	movl	xsrc+64, [[EAX:%e.x]]
1209; LINUX-32-PIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
1210; LINUX-32-PIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1211; LINUX-32-PIC-NEXT: 	ret
1212
1213; LINUX-64-PIC-LABEL: qxx02:
1214; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1215; LINUX-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1216; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1217; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
1223; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[ECX:%e.x]]
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:%e.x]]
1229; DARWIN-32-DYNAMIC-NEXT: 	movl	64([[EAX]]), [[EAX:%e.x]]
1230; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1231; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]]), [[ECX:%e.x]]
1232; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1233; DARWIN-32-DYNAMIC-NEXT: 	ret
1234
1235; DARWIN-32-PIC: _qxx02:
1236; DARWIN-32-PIC: 	calll	L17$pb
1237; DARWIN-32-PIC-NEXT: L17$pb:
1238; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1239; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L17$pb([[EAX]]), [[ECX:%e.x]]
1240; DARWIN-32-PIC-NEXT: 	movl	64([[ECX]]), [[ECX:%e.x]]
1241; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L17$pb([[EAX]]), [[EAX:%e.x]]
1242; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
1248; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1249; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1250; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
1256; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1257; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1258; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
1264; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1265; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1266; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
1267; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]])
1268; DARWIN-64-PIC-NEXT: 	ret
1269}
1270
1271define void @qux03() nounwind {
1272entry:
1273	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
1274	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), align 32
1275	ret void
1276; LINUX-64-STATIC-LABEL: qux03:
1277; LINUX-64-STATIC: movl    dsrc+64(%rip), [[EAX:%e.x]]
1278; LINUX-64-STATIC: movl    [[EAX]], ddst+64(%rip)
1279; LINUX-64-STATIC: ret
1280
1281; LINUX-32-STATIC-LABEL: qux03:
1282; LINUX-32-STATIC: 	movl	dsrc+64, [[EAX:%e.x]]
1283; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ddst+64
1284; LINUX-32-STATIC-NEXT: 	ret
1285
1286; LINUX-32-PIC-LABEL: qux03:
1287; LINUX-32-PIC: 	movl	dsrc+64, [[EAX:%e.x]]
1288; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ddst+64
1289; LINUX-32-PIC-NEXT: 	ret
1290
1291; LINUX-64-PIC-LABEL: qux03:
1292; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1293; LINUX-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1294; LINUX-64-PIC-NEXT: 	movq	ddst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
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:%e.x]]
1305; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _ddst+64
1306; DARWIN-32-DYNAMIC-NEXT: 	ret
1307
1308; DARWIN-32-PIC: _qux03:
1309; DARWIN-32-PIC: 	calll	L18$pb
1310; DARWIN-32-PIC-NEXT: L18$pb:
1311; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1312; DARWIN-32-PIC-NEXT: 	movl	(_dsrc-L18$pb)+64([[EAX]]), [[ECX:%e.x]]
1313; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], (_ddst-L18$pb)+64([[EAX]])
1314; DARWIN-32-PIC-NEXT: 	ret
1315
1316; DARWIN-64-STATIC: _qux03:
1317; DARWIN-64-STATIC: 	movl	_dsrc+64(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
1328; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], _ddst+64(%rip)
1329; DARWIN-64-PIC-NEXT: 	ret
1330}
1331
1332define void @qux04() nounwind {
1333entry:
1334	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1335	ret void
1336; LINUX-64-STATIC-LABEL: qux04:
1337; LINUX-64-STATIC: movq    $ddst+64, dptr(%rip)
1338; LINUX-64-STATIC: ret
1339
1340; LINUX-32-STATIC-LABEL: qux04:
1341; LINUX-32-STATIC: 	movl	$ddst+64, dptr
1342; LINUX-32-STATIC-NEXT: 	ret
1343
1344; LINUX-32-PIC-LABEL: qux04:
1345; LINUX-32-PIC: 	movl	$ddst+64, dptr
1346; LINUX-32-PIC-NEXT: 	ret
1347
1348; LINUX-64-PIC-LABEL: qux04:
1349; LINUX-64-PIC: 	movq	ddst@GOTPCREL(%rip), [[RAX:%r.x]]
1350; LINUX-64-PIC-NEXT: 	addq	$64, [[RAX:%r.x]]
1351; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:
1364; DARWIN-32-PIC: 	calll	L19$pb
1365; DARWIN-32-PIC-NEXT: L19$pb:
1366; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1367; DARWIN-32-PIC-NEXT: 	leal	(_ddst-L19$pb)+64([[EAX]]), [[ECX:%e.x]]
1368; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _dptr-L19$pb([[EAX]])
1369; DARWIN-32-PIC-NEXT: 	ret
1370
1371; DARWIN-64-STATIC: _qux04:
1372; DARWIN-64-STATIC: 	leaq	_ddst+64(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
1383; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _dptr(%rip)
1384; DARWIN-64-PIC-NEXT: 	ret
1385}
1386
1387define void @qux05() nounwind {
1388entry:
1389	%0 = load i32*, i32** @dptr, align 8
1390	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
1391	%2 = getelementptr i32, i32* %0, i64 16
1392	store i32 %1, i32* %2, align 4
1393; LINUX-64-STATIC-LABEL: qux05:
1394; LINUX-64-STATIC: movl    dsrc+64(%rip), [[EAX:%e.x]]
1395; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
1396; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1397; LINUX-64-STATIC: ret
1398
1399; LINUX-32-STATIC-LABEL: qux05:
1400; LINUX-32-STATIC: 	movl	dsrc+64, [[EAX:%e.x]]
1401; LINUX-32-STATIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
1402; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1403; LINUX-32-STATIC-NEXT: 	ret
1404	ret void
1405
1406; LINUX-32-PIC-LABEL: qux05:
1407; LINUX-32-PIC: 	movl	dsrc+64, [[EAX:%e.x]]
1408; LINUX-32-PIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
1409; LINUX-32-PIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1410; LINUX-32-PIC-NEXT: 	ret
1411
1412; LINUX-64-PIC-LABEL: qux05:
1413; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1414; LINUX-64-PIC-NEXT: 	movl	64([[RAX]]), [[EAX:%e.x]]
1415; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
1416; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
1422; DARWIN-32-STATIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
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:%e.x]]
1428; DARWIN-32-DYNAMIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
1429; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1430; DARWIN-32-DYNAMIC-NEXT: 	ret
1431
1432; DARWIN-32-PIC: _qux05:
1433; DARWIN-32-PIC: 	calll	L20$pb
1434; DARWIN-32-PIC-NEXT: L20$pb:
1435; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1436; DARWIN-32-PIC-NEXT: 	movl	(_dsrc-L20$pb)+64([[EAX]]), [[ECX:%e.x]]
1437; DARWIN-32-PIC-NEXT: 	movl	_dptr-L20$pb([[EAX]]), [[EAX:%e.x]]
1438; 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:%e.x]]
1443; DARWIN-64-STATIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%e.x]]
1449; DARWIN-64-DYNAMIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%e.x]]
1455; DARWIN-64-PIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
1456; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]])
1457; DARWIN-64-PIC-NEXT: 	ret
1458}
1459
1460define void @qux06() nounwind {
1461entry:
1462	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
1463	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), align 4
1464	ret void
1465; LINUX-64-STATIC-LABEL: qux06:
1466; LINUX-64-STATIC: movl    lsrc+64(%rip), [[EAX:%e.x]]
1467; LINUX-64-STATIC: movl    [[EAX]], ldst+64
1468; LINUX-64-STATIC: ret
1469
1470; LINUX-32-STATIC-LABEL: qux06:
1471; LINUX-32-STATIC: 	movl	lsrc+64, [[EAX:%e.x]]
1472; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ldst+64
1473; LINUX-32-STATIC-NEXT: 	ret
1474
1475; LINUX-32-PIC-LABEL: qux06:
1476; LINUX-32-PIC: 	movl	lsrc+64, [[EAX:%e.x]]
1477; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ldst+64
1478; LINUX-32-PIC-NEXT: 	ret
1479
1480; LINUX-64-PIC-LABEL: qux06:
1481; LINUX-64-PIC: 	movl	lsrc+64(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
1492; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _ldst+64
1493; DARWIN-32-DYNAMIC-NEXT: 	ret
1494
1495; DARWIN-32-PIC: _qux06:
1496; DARWIN-32-PIC: 	calll	L21$pb
1497; DARWIN-32-PIC-NEXT: L21$pb:
1498; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1499; DARWIN-32-PIC-NEXT: 	movl	(_lsrc-L21$pb)+64([[EAX]]), [[ECX:%e.x]]
1500; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], (_ldst-L21$pb)+64([[EAX]])
1501; DARWIN-32-PIC-NEXT: 	ret
1502
1503; DARWIN-64-STATIC: _qux06:
1504; DARWIN-64-STATIC: 	movl	_lsrc+64(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
1515; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], _ldst+64(%rip)
1516; DARWIN-64-PIC-NEXT: 	ret
1517}
1518
1519define void @qux07() nounwind {
1520entry:
1521	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1522	ret void
1523; LINUX-64-STATIC-LABEL: qux07:
1524; LINUX-64-STATIC: movq    $ldst+64, lptr
1525; LINUX-64-STATIC: ret
1526
1527; LINUX-32-STATIC-LABEL: qux07:
1528; LINUX-32-STATIC: 	movl	$ldst+64, lptr
1529; LINUX-32-STATIC-NEXT: 	ret
1530
1531; LINUX-32-PIC-LABEL: qux07:
1532; LINUX-32-PIC: 	movl	$ldst+64, lptr
1533; LINUX-32-PIC-NEXT: 	ret
1534
1535; LINUX-64-PIC-LABEL: qux07:
1536; LINUX-64-PIC: 	leaq	ldst+64(%rip), [[RAX:%r.x]]
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:
1549; DARWIN-32-PIC: 	calll	L22$pb
1550; DARWIN-32-PIC-NEXT: L22$pb:
1551; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1552; DARWIN-32-PIC-NEXT: 	leal	(_ldst-L22$pb)+64([[EAX]]), [[ECX:%e.x]]
1553; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _lptr-L22$pb([[EAX]])
1554; DARWIN-32-PIC-NEXT: 	ret
1555
1556; DARWIN-64-STATIC: _qux07:
1557; DARWIN-64-STATIC: 	leaq	_ldst+64(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
1568; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _lptr(%rip)
1569; DARWIN-64-PIC-NEXT: 	ret
1570}
1571
1572define void @qux08() nounwind {
1573entry:
1574	%0 = load i32*, i32** @lptr, align 8
1575	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
1576	%2 = getelementptr i32, i32* %0, i64 16
1577	store i32 %1, i32* %2, align 4
1578; LINUX-64-STATIC-LABEL: qux08:
1579; LINUX-64-STATIC: movl    lsrc+64(%rip), [[EAX:%e.x]]
1580; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
1581; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1582; LINUX-64-STATIC: ret
1583
1584; LINUX-32-STATIC-LABEL: qux08:
1585; LINUX-32-STATIC: 	movl	lsrc+64, [[EAX:%e.x]]
1586; LINUX-32-STATIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
1587; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1588; LINUX-32-STATIC-NEXT: 	ret
1589	ret void
1590
1591; LINUX-32-PIC-LABEL: qux08:
1592; LINUX-32-PIC: 	movl	lsrc+64, [[EAX:%e.x]]
1593; LINUX-32-PIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
1594; LINUX-32-PIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1595; LINUX-32-PIC-NEXT: 	ret
1596
1597; LINUX-64-PIC-LABEL: qux08:
1598; LINUX-64-PIC: 	movl	lsrc+64(%rip), [[EAX:%e.x]]
1599; LINUX-64-PIC-NEXT: 	movq	lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
1605; DARWIN-32-STATIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
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:%e.x]]
1611; DARWIN-32-DYNAMIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
1612; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 64([[ECX]])
1613; DARWIN-32-DYNAMIC-NEXT: 	ret
1614
1615; DARWIN-32-PIC: _qux08:
1616; DARWIN-32-PIC: 	calll	L23$pb
1617; DARWIN-32-PIC-NEXT: L23$pb:
1618; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1619; DARWIN-32-PIC-NEXT: 	movl	(_lsrc-L23$pb)+64([[EAX]]), [[ECX:%e.x]]
1620; DARWIN-32-PIC-NEXT: 	movl	_lptr-L23$pb([[EAX]]), [[EAX:%e.x]]
1621; 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:%e.x]]
1626; DARWIN-64-STATIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
1632; DARWIN-64-DYNAMIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
1638; DARWIN-64-PIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
1639; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]])
1640; DARWIN-64-PIC-NEXT: 	ret
1641}
1642
1643define void @ind00(i64 %i) nounwind {
1644entry:
1645	%0 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
1646	%1 = load i32, i32* %0, align 4
1647	%2 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
1648	store i32 %1, i32* %2, align 4
1649	ret void
1650; LINUX-64-STATIC-LABEL: ind00:
1651; LINUX-64-STATIC: movl    src(,%rdi,4), [[EAX:%e.x]]
1652; LINUX-64-STATIC: movl    [[EAX]], dst(,%rdi,4)
1653; LINUX-64-STATIC: ret
1654
1655; LINUX-32-STATIC-LABEL: ind00:
1656; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
1657; LINUX-32-STATIC-NEXT: 	movl	src(,[[EAX]],4), [[ECX:%e.x]]
1658; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], dst(,[[EAX]],4)
1659; LINUX-32-STATIC-NEXT: 	ret
1660
1661; LINUX-32-PIC-LABEL: ind00:
1662; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
1663; LINUX-32-PIC-NEXT: 	movl	src(,[[EAX]],4), [[ECX:%e.x]]
1664; LINUX-32-PIC-NEXT: 	movl	[[ECX]], dst(,[[EAX]],4)
1665; LINUX-32-PIC-NEXT: 	ret
1666
1667; LINUX-64-PIC-LABEL: ind00:
1668; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
1669; LINUX-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1670; LINUX-64-PIC-NEXT: 	movq	dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
1676; DARWIN-32-STATIC-NEXT: 	movl	_src(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
1682; DARWIN-32-DYNAMIC-NEXT: 	movl	L_src$non_lazy_ptr, [[ECX:%e.x]]
1683; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1684; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[EDX:%e.x]]
1685; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
1686; DARWIN-32-DYNAMIC-NEXT: 	ret
1687
1688; DARWIN-32-PIC: _ind00:
1689; DARWIN-32-PIC: 	calll	L24$pb
1690; DARWIN-32-PIC-NEXT: L24$pb:
1691; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1692; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
1693; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L24$pb([[EAX]]), [[EDX:%e.x]]
1694; DARWIN-32-PIC-NEXT: 	movl	([[EDX]],[[ECX]],4), [[EDX:%e.x]]
1695; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L24$pb([[EAX]]), [[EAX:%e.x]]
1696; 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:%r.x]]
1701; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1702; DARWIN-64-STATIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
1708; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1709; DARWIN-64-DYNAMIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
1715; DARWIN-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1716; DARWIN-64-PIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
1717; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]],%rdi,4)
1718; DARWIN-64-PIC-NEXT: 	ret
1719}
1720
1721define void @ixd00(i64 %i) nounwind {
1722entry:
1723	%0 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
1724	%1 = load i32, i32* %0, align 4
1725	%2 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
1726	store i32 %1, i32* %2, align 4
1727	ret void
1728; LINUX-64-STATIC-LABEL: ixd00:
1729; LINUX-64-STATIC: movl    xsrc(,%rdi,4), [[EAX:%e.x]]
1730; LINUX-64-STATIC: movl    [[EAX]], xdst(,%rdi,4)
1731; LINUX-64-STATIC: ret
1732
1733; LINUX-32-STATIC-LABEL: ixd00:
1734; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
1735; LINUX-32-STATIC-NEXT: 	movl	xsrc(,[[EAX]],4), [[ECX:%e.x]]
1736; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], xdst(,[[EAX]],4)
1737; LINUX-32-STATIC-NEXT: 	ret
1738
1739; LINUX-32-PIC-LABEL: ixd00:
1740; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
1741; LINUX-32-PIC-NEXT: 	movl	xsrc(,[[EAX]],4), [[ECX:%e.x]]
1742; LINUX-32-PIC-NEXT: 	movl	[[ECX]], xdst(,[[EAX]],4)
1743; LINUX-32-PIC-NEXT: 	ret
1744
1745; LINUX-64-PIC-LABEL: ixd00:
1746; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1747; LINUX-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1748; LINUX-64-PIC-NEXT: 	movq	xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
1754; DARWIN-32-STATIC-NEXT: 	movl	_xsrc(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
1760; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
1761; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1762; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xdst$non_lazy_ptr, [[EDX:%e.x]]
1763; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
1764; DARWIN-32-DYNAMIC-NEXT: 	ret
1765
1766; DARWIN-32-PIC: _ixd00:
1767; DARWIN-32-PIC: 	calll	L25$pb
1768; DARWIN-32-PIC-NEXT: L25$pb:
1769; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1770; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
1771; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L25$pb([[EAX]]), [[EDX:%e.x]]
1772; DARWIN-32-PIC-NEXT: 	movl	([[EDX]],[[ECX]],4), [[EDX:%e.x]]
1773; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L25$pb([[EAX]]), [[EAX:%e.x]]
1774; 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:%r.x]]
1779; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1780; DARWIN-64-STATIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
1786; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1787; DARWIN-64-DYNAMIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
1793; DARWIN-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1794; DARWIN-64-PIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1795; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]],%rdi,4)
1796; DARWIN-64-PIC-NEXT: 	ret
1797}
1798
1799define void @ind01(i64 %i) nounwind {
1800entry:
1801	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
1802	store i32* %0, i32** @ptr, align 8
1803	ret void
1804; LINUX-64-STATIC-LABEL: ind01:
1805; LINUX-64-STATIC: leaq    dst(,%rdi,4), [[RAX:%r.x]]
1806; LINUX-64-STATIC: movq    [[RAX]], ptr
1807; LINUX-64-STATIC: ret
1808
1809; LINUX-32-STATIC-LABEL: ind01:
1810; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
1811; LINUX-32-STATIC-NEXT: 	leal	dst(,[[EAX]],4), [[EAX:%e.x]]
1812; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ptr
1813; LINUX-32-STATIC-NEXT: 	ret
1814
1815; LINUX-32-PIC-LABEL: ind01:
1816; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
1817; LINUX-32-PIC-NEXT: 	leal	dst(,[[EAX]],4), [[EAX:%e.x]]
1818; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ptr
1819; LINUX-32-PIC-NEXT: 	ret
1820
1821; LINUX-64-PIC-LABEL: 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:%r.x]]
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:%e.x]]
1830; DARWIN-32-STATIC-NEXT: 	leal	_dst(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
1836; DARWIN-32-DYNAMIC-NEXT: 	shll	$2, [[EAX:%e.x]]
1837; DARWIN-32-DYNAMIC-NEXT: 	addl	L_dst$non_lazy_ptr, [[EAX:%e.x]]
1838; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1839; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
1840; DARWIN-32-DYNAMIC-NEXT: 	ret
1841
1842; DARWIN-32-PIC: _ind01:
1843; DARWIN-32-PIC: 	calll	L26$pb
1844; DARWIN-32-PIC-NEXT: L26$pb:
1845; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1846; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
1847; DARWIN-32-PIC-NEXT: 	shll	$2, [[ECX:%e.x]]
1848; DARWIN-32-PIC-NEXT: 	addl	L_dst$non_lazy_ptr-L26$pb([[EAX]]), [[ECX:%e.x]]
1849; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L26$pb([[EAX]]), [[EAX:%e.x]]
1850; 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:%r.x]]
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:%r.x]]
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:%r.x]]
1871; DARWIN-64-PIC-NEXT: 	movq	%rdi, ([[RAX]])
1872; DARWIN-64-PIC-NEXT: 	ret
1873}
1874
1875define void @ixd01(i64 %i) nounwind {
1876entry:
1877	%0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
1878	store i32* %0, i32** @ptr, align 8
1879	ret void
1880; LINUX-64-STATIC-LABEL: ixd01:
1881; LINUX-64-STATIC: leaq    xdst(,%rdi,4), [[RAX:%r.x]]
1882; LINUX-64-STATIC: movq    [[RAX]], ptr
1883; LINUX-64-STATIC: ret
1884
1885; LINUX-32-STATIC-LABEL: ixd01:
1886; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
1887; LINUX-32-STATIC-NEXT: 	leal	xdst(,[[EAX]],4), [[EAX:%e.x]]
1888; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ptr
1889; LINUX-32-STATIC-NEXT: 	ret
1890
1891; LINUX-32-PIC-LABEL: ixd01:
1892; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
1893; LINUX-32-PIC-NEXT: 	leal	xdst(,[[EAX]],4), [[EAX:%e.x]]
1894; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ptr
1895; LINUX-32-PIC-NEXT: 	ret
1896
1897; LINUX-64-PIC-LABEL: 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:%r.x]]
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:%e.x]]
1906; DARWIN-32-STATIC-NEXT: 	leal	_xdst(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
1912; DARWIN-32-DYNAMIC-NEXT: 	shll	$2, [[EAX:%e.x]]
1913; DARWIN-32-DYNAMIC-NEXT: 	addl	L_xdst$non_lazy_ptr, [[EAX:%e.x]]
1914; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1915; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
1916; DARWIN-32-DYNAMIC-NEXT: 	ret
1917
1918; DARWIN-32-PIC: _ixd01:
1919; DARWIN-32-PIC: 	calll	L27$pb
1920; DARWIN-32-PIC-NEXT: L27$pb:
1921; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
1922; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
1923; DARWIN-32-PIC-NEXT: 	shll	$2, [[ECX:%e.x]]
1924; DARWIN-32-PIC-NEXT: 	addl	L_xdst$non_lazy_ptr-L27$pb([[EAX]]), [[ECX:%e.x]]
1925; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L27$pb([[EAX]]), [[EAX:%e.x]]
1926; 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:%r.x]]
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:%r.x]]
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:%r.x]]
1947; DARWIN-64-PIC-NEXT: 	movq	%rdi, ([[RAX]])
1948; DARWIN-64-PIC-NEXT: 	ret
1949}
1950
1951define void @ind02(i64 %i) nounwind {
1952entry:
1953	%0 = load i32*, i32** @ptr, align 8
1954	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
1955	%2 = load i32, i32* %1, align 4
1956	%3 = getelementptr i32, i32* %0, i64 %i
1957	store i32 %2, i32* %3, align 4
1958	ret void
1959; LINUX-64-STATIC-LABEL: ind02:
1960; LINUX-64-STATIC: movl    src(,%rdi,4), [[EAX:%e.x]]
1961; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1962; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
1963; LINUX-64-STATIC: ret
1964
1965; LINUX-32-STATIC-LABEL: ind02:
1966; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
1967; LINUX-32-STATIC-NEXT: 	movl	src(,[[EAX]],4), [[ECX:%e.x]]
1968; LINUX-32-STATIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
1969; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
1970; LINUX-32-STATIC-NEXT: 	ret
1971
1972; LINUX-32-PIC-LABEL: ind02:
1973; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
1974; LINUX-32-PIC-NEXT: 	movl	src(,[[EAX]],4), [[ECX:%e.x]]
1975; LINUX-32-PIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
1976; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
1977; LINUX-32-PIC-NEXT: 	ret
1978
1979; LINUX-64-PIC-LABEL: ind02:
1980; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
1981; LINUX-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
1982; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1983; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
1989; DARWIN-32-STATIC-NEXT: 	movl	_src(,[[EAX]],4), [[ECX:%e.x]]
1990; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[EDX:%e.x]]
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:%e.x]]
1996; DARWIN-32-DYNAMIC-NEXT: 	movl	L_src$non_lazy_ptr, [[ECX:%e.x]]
1997; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1998; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[EDX:%e.x]]
1999; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EDX]]), [[EDX:%e.x]]
2000; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2001; DARWIN-32-DYNAMIC-NEXT: 	ret
2002
2003; DARWIN-32-PIC: _ind02:
2004; DARWIN-32-PIC: 	calll	L28$pb
2005; DARWIN-32-PIC-NEXT: L28$pb:
2006; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2007; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2008; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L28$pb([[EAX]]), [[EDX:%e.x]]
2009; DARWIN-32-PIC-NEXT: 	movl	([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2010; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L28$pb([[EAX]]), [[EAX:%e.x]]
2011; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
2017; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2018; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2019; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
2025; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2026; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2027; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
2033; DARWIN-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2034; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2035; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
2036; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]],%rdi,4)
2037; DARWIN-64-PIC-NEXT: 	ret
2038}
2039
2040define void @ixd02(i64 %i) nounwind {
2041entry:
2042	%0 = load i32*, i32** @ptr, align 8
2043	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
2044	%2 = load i32, i32* %1, align 4
2045	%3 = getelementptr i32, i32* %0, i64 %i
2046	store i32 %2, i32* %3, align 4
2047	ret void
2048; LINUX-64-STATIC-LABEL: ixd02:
2049; LINUX-64-STATIC: movl    xsrc(,%rdi,4), [[EAX:%e.x]]
2050; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
2051; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2052; LINUX-64-STATIC: ret
2053
2054; LINUX-32-STATIC-LABEL: ixd02:
2055; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2056; LINUX-32-STATIC-NEXT: 	movl	xsrc(,[[EAX]],4), [[ECX:%e.x]]
2057; LINUX-32-STATIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
2058; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2059; LINUX-32-STATIC-NEXT: 	ret
2060
2061; LINUX-32-PIC-LABEL: ixd02:
2062; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2063; LINUX-32-PIC-NEXT: 	movl	xsrc(,[[EAX]],4), [[ECX:%e.x]]
2064; LINUX-32-PIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
2065; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2066; LINUX-32-PIC-NEXT: 	ret
2067
2068; LINUX-64-PIC-LABEL: ixd02:
2069; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2070; LINUX-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2071; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2072; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
2078; DARWIN-32-STATIC-NEXT: 	movl	_xsrc(,[[EAX]],4), [[ECX:%e.x]]
2079; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[EDX:%e.x]]
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:%e.x]]
2085; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
2086; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2087; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2088; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EDX]]), [[EDX:%e.x]]
2089; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2090; DARWIN-32-DYNAMIC-NEXT: 	ret
2091
2092; DARWIN-32-PIC: _ixd02:
2093; DARWIN-32-PIC: 	calll	L29$pb
2094; DARWIN-32-PIC-NEXT: L29$pb:
2095; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2096; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2097; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L29$pb([[EAX]]), [[EDX:%e.x]]
2098; DARWIN-32-PIC-NEXT: 	movl	([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2099; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L29$pb([[EAX]]), [[EAX:%e.x]]
2100; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
2106; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2107; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2108; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
2114; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2115; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2116; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
2122; DARWIN-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2123; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2124; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
2125; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]],%rdi,4)
2126; DARWIN-64-PIC-NEXT: 	ret
2127}
2128
2129define void @ind03(i64 %i) nounwind {
2130entry:
2131	%0 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
2132	%1 = load i32, i32* %0, align 4
2133	%2 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
2134	store i32 %1, i32* %2, align 4
2135	ret void
2136; LINUX-64-STATIC-LABEL: ind03:
2137; LINUX-64-STATIC: movl    dsrc(,%rdi,4), [[EAX:%e.x]]
2138; LINUX-64-STATIC: movl    [[EAX]], ddst(,%rdi,4)
2139; LINUX-64-STATIC: ret
2140
2141; LINUX-32-STATIC-LABEL: ind03:
2142; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2143; LINUX-32-STATIC-NEXT: 	movl	dsrc(,[[EAX]],4), [[ECX:%e.x]]
2144; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ddst(,[[EAX]],4)
2145; LINUX-32-STATIC-NEXT: 	ret
2146
2147; LINUX-32-PIC-LABEL: ind03:
2148; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2149; LINUX-32-PIC-NEXT: 	movl	dsrc(,[[EAX]],4), [[ECX:%e.x]]
2150; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ddst(,[[EAX]],4)
2151; LINUX-32-PIC-NEXT: 	ret
2152
2153; LINUX-64-PIC-LABEL: ind03:
2154; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2155; LINUX-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2156; LINUX-64-PIC-NEXT: 	movq	ddst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
2162; DARWIN-32-STATIC-NEXT: 	movl	_dsrc(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
2168; DARWIN-32-DYNAMIC-NEXT: 	movl	_dsrc(,[[EAX]],4), [[ECX:%e.x]]
2169; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], _ddst(,[[EAX]],4)
2170; DARWIN-32-DYNAMIC-NEXT: 	ret
2171
2172; DARWIN-32-PIC: _ind03:
2173; DARWIN-32-PIC: 	calll	L30$pb
2174; DARWIN-32-PIC-NEXT: L30$pb:
2175; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2176; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2177; DARWIN-32-PIC-NEXT: 	movl	_dsrc-L30$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2178; DARWIN-32-PIC-NEXT: 	movl	[[EDX]], _ddst-L30$pb([[EAX]],[[ECX]],4)
2179; DARWIN-32-PIC-NEXT: 	ret
2180
2181; DARWIN-64-STATIC: _ind03:
2182; DARWIN-64-STATIC: 	leaq	_dsrc(%rip), [[RAX:%r.x]]
2183; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2184; DARWIN-64-STATIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
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:%r.x]]
2190; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2191; DARWIN-64-DYNAMIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
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:%r.x]]
2197; DARWIN-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2198; DARWIN-64-PIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
2199; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]],%rdi,4)
2200; DARWIN-64-PIC-NEXT: 	ret
2201}
2202
2203define void @ind04(i64 %i) nounwind {
2204entry:
2205	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
2206	store i32* %0, i32** @dptr, align 8
2207	ret void
2208; LINUX-64-STATIC-LABEL: ind04:
2209; LINUX-64-STATIC: leaq    ddst(,%rdi,4), [[RAX:%r.x]]
2210; LINUX-64-STATIC: movq    [[RAX]], dptr
2211; LINUX-64-STATIC: ret
2212
2213; LINUX-32-STATIC-LABEL: ind04:
2214; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2215; LINUX-32-STATIC-NEXT: 	leal	ddst(,[[EAX]],4), [[EAX:%e.x]]
2216; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], dptr
2217; LINUX-32-STATIC-NEXT: 	ret
2218
2219; LINUX-32-PIC-LABEL: ind04:
2220; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2221; LINUX-32-PIC-NEXT: 	leal	ddst(,[[EAX]],4), [[EAX:%e.x]]
2222; LINUX-32-PIC-NEXT: 	movl	[[EAX]], dptr
2223; LINUX-32-PIC-NEXT: 	ret
2224
2225; LINUX-64-PIC-LABEL: 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:%r.x]]
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:%e.x]]
2234; DARWIN-32-STATIC-NEXT: 	leal	_ddst(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
2240; DARWIN-32-DYNAMIC-NEXT: 	leal	_ddst(,[[EAX]],4), [[EAX:%e.x]]
2241; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _dptr
2242; DARWIN-32-DYNAMIC-NEXT: 	ret
2243
2244; DARWIN-32-PIC: _ind04:
2245; DARWIN-32-PIC: 	calll	L31$pb
2246; DARWIN-32-PIC-NEXT: L31$pb:
2247; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2248; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2249; DARWIN-32-PIC-NEXT: 	leal	_ddst-L31$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]]
2250; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _dptr-L31$pb([[EAX]])
2251; DARWIN-32-PIC-NEXT: 	ret
2252
2253; DARWIN-64-STATIC: _ind04:
2254; DARWIN-64-STATIC: 	leaq	_ddst(%rip), [[RAX:%r.x]]
2255; DARWIN-64-STATIC-NEXT: 	leaq	([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
2261; DARWIN-64-DYNAMIC-NEXT: 	leaq	([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
2267; DARWIN-64-PIC-NEXT: 	leaq	([[RAX]],%rdi,4), [[RAX:%r.x]]
2268; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _dptr(%rip)
2269; DARWIN-64-PIC-NEXT: 	ret
2270}
2271
2272define void @ind05(i64 %i) nounwind {
2273entry:
2274	%0 = load i32*, i32** @dptr, align 8
2275	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
2276	%2 = load i32, i32* %1, align 4
2277	%3 = getelementptr i32, i32* %0, i64 %i
2278	store i32 %2, i32* %3, align 4
2279	ret void
2280; LINUX-64-STATIC-LABEL: ind05:
2281; LINUX-64-STATIC: movl    dsrc(,%rdi,4), [[EAX:%e.x]]
2282; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
2283; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2284; LINUX-64-STATIC: ret
2285
2286; LINUX-32-STATIC-LABEL: ind05:
2287; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2288; LINUX-32-STATIC-NEXT: 	movl	dsrc(,[[EAX]],4), [[ECX:%e.x]]
2289; LINUX-32-STATIC-NEXT: 	movl	dptr, [[EDX:%e.x]]
2290; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2291; LINUX-32-STATIC-NEXT: 	ret
2292
2293; LINUX-32-PIC-LABEL: ind05:
2294; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2295; LINUX-32-PIC-NEXT: 	movl	dsrc(,[[EAX]],4), [[ECX:%e.x]]
2296; LINUX-32-PIC-NEXT: 	movl	dptr, [[EDX:%e.x]]
2297; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2298; LINUX-32-PIC-NEXT: 	ret
2299
2300; LINUX-64-PIC-LABEL: ind05:
2301; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2302; LINUX-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2303; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
2304; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
2310; DARWIN-32-STATIC-NEXT: 	movl	_dsrc(,[[EAX]],4), [[ECX:%e.x]]
2311; DARWIN-32-STATIC-NEXT: 	movl	_dptr, [[EDX:%e.x]]
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:%e.x]]
2317; DARWIN-32-DYNAMIC-NEXT: 	movl	_dsrc(,[[EAX]],4), [[ECX:%e.x]]
2318; DARWIN-32-DYNAMIC-NEXT: 	movl	_dptr, [[EDX:%e.x]]
2319; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2320; DARWIN-32-DYNAMIC-NEXT: 	ret
2321
2322; DARWIN-32-PIC: _ind05:
2323; DARWIN-32-PIC: 	calll	L32$pb
2324; DARWIN-32-PIC-NEXT: L32$pb:
2325; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2326; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2327; DARWIN-32-PIC-NEXT: 	movl	_dsrc-L32$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2328; DARWIN-32-PIC-NEXT: 	movl	_dptr-L32$pb([[EAX]]), [[EAX:%e.x]]
2329; 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:%r.x]]
2334; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2335; DARWIN-64-STATIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%r.x]]
2341; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2342; DARWIN-64-DYNAMIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%r.x]]
2348; DARWIN-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2349; DARWIN-64-PIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
2350; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]],%rdi,4)
2351; DARWIN-64-PIC-NEXT: 	ret
2352}
2353
2354define void @ind06(i64 %i) nounwind {
2355entry:
2356	%0 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
2357	%1 = load i32, i32* %0, align 4
2358	%2 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
2359	store i32 %1, i32* %2, align 4
2360	ret void
2361; LINUX-64-STATIC-LABEL: ind06:
2362; LINUX-64-STATIC: movl    lsrc(,%rdi,4), [[EAX:%e.x]]
2363; LINUX-64-STATIC: movl    [[EAX]], ldst(,%rdi,4)
2364; LINUX-64-STATIC: ret
2365
2366; LINUX-32-STATIC-LABEL: ind06:
2367; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2368; LINUX-32-STATIC-NEXT: 	movl	lsrc(,[[EAX]],4), [[ECX:%e.x]]
2369; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ldst(,[[EAX]],4)
2370; LINUX-32-STATIC-NEXT: 	ret
2371
2372; LINUX-32-PIC-LABEL: ind06:
2373; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2374; LINUX-32-PIC-NEXT: 	movl	lsrc(,[[EAX]],4), [[ECX:%e.x]]
2375; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ldst(,[[EAX]],4)
2376; LINUX-32-PIC-NEXT: 	ret
2377
2378; LINUX-64-PIC-LABEL: ind06:
2379; LINUX-64-PIC: 	leaq	lsrc(%rip), [[RAX:%r.x]]
2380; LINUX-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2381; LINUX-64-PIC-NEXT: 	leaq	ldst(%rip), [[RCX:%r.x]]
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:%e.x]]
2387; DARWIN-32-STATIC-NEXT: 	movl	_lsrc(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
2393; DARWIN-32-DYNAMIC-NEXT: 	movl	_lsrc(,[[EAX]],4), [[ECX:%e.x]]
2394; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], _ldst(,[[EAX]],4)
2395; DARWIN-32-DYNAMIC-NEXT: 	ret
2396
2397; DARWIN-32-PIC: _ind06:
2398; DARWIN-32-PIC: 	calll	L33$pb
2399; DARWIN-32-PIC-NEXT: L33$pb:
2400; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2401; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2402; DARWIN-32-PIC-NEXT: 	movl	_lsrc-L33$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2403; DARWIN-32-PIC-NEXT: 	movl	[[EDX]], _ldst-L33$pb([[EAX]],[[ECX]],4)
2404; DARWIN-32-PIC-NEXT: 	ret
2405
2406; DARWIN-64-STATIC: _ind06:
2407; DARWIN-64-STATIC: 	leaq	_lsrc(%rip), [[RAX:%r.x]]
2408; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2409; DARWIN-64-STATIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
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:%r.x]]
2415; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2416; DARWIN-64-DYNAMIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
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:%r.x]]
2422; DARWIN-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2423; DARWIN-64-PIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
2424; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]],%rdi,4)
2425; DARWIN-64-PIC-NEXT: 	ret
2426}
2427
2428define void @ind07(i64 %i) nounwind {
2429entry:
2430	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
2431	store i32* %0, i32** @lptr, align 8
2432	ret void
2433; LINUX-64-STATIC-LABEL: ind07:
2434; LINUX-64-STATIC: leaq    ldst(,%rdi,4), [[RAX:%r.x]]
2435; LINUX-64-STATIC: movq    [[RAX]], lptr
2436; LINUX-64-STATIC: ret
2437
2438; LINUX-32-STATIC-LABEL: ind07:
2439; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2440; LINUX-32-STATIC-NEXT: 	leal	ldst(,[[EAX]],4), [[EAX:%e.x]]
2441; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], lptr
2442; LINUX-32-STATIC-NEXT: 	ret
2443
2444; LINUX-32-PIC-LABEL: ind07:
2445; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2446; LINUX-32-PIC-NEXT: 	leal	ldst(,[[EAX]],4), [[EAX:%e.x]]
2447; LINUX-32-PIC-NEXT: 	movl	[[EAX]], lptr
2448; LINUX-32-PIC-NEXT: 	ret
2449
2450; LINUX-64-PIC-LABEL: ind07:
2451; LINUX-64-PIC: 	leaq	ldst(%rip), [[RAX:%r.x]]
2452; LINUX-64-PIC-NEXT: 	leaq	([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%e.x]]
2458; DARWIN-32-STATIC-NEXT: 	leal	_ldst(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
2464; DARWIN-32-DYNAMIC-NEXT: 	leal	_ldst(,[[EAX]],4), [[EAX:%e.x]]
2465; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _lptr
2466; DARWIN-32-DYNAMIC-NEXT: 	ret
2467
2468; DARWIN-32-PIC: _ind07:
2469; DARWIN-32-PIC: 	calll	L34$pb
2470; DARWIN-32-PIC-NEXT: L34$pb:
2471; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2472; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2473; DARWIN-32-PIC-NEXT: 	leal	_ldst-L34$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]]
2474; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _lptr-L34$pb([[EAX]])
2475; DARWIN-32-PIC-NEXT: 	ret
2476
2477; DARWIN-64-STATIC: _ind07:
2478; DARWIN-64-STATIC: 	leaq	_ldst(%rip), [[RAX:%r.x]]
2479; DARWIN-64-STATIC-NEXT: 	leaq	([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
2485; DARWIN-64-DYNAMIC-NEXT: 	leaq	([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
2491; DARWIN-64-PIC-NEXT: 	leaq	([[RAX]],%rdi,4), [[RAX:%r.x]]
2492; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _lptr(%rip)
2493; DARWIN-64-PIC-NEXT: 	ret
2494}
2495
2496define void @ind08(i64 %i) nounwind {
2497entry:
2498	%0 = load i32*, i32** @lptr, align 8
2499	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
2500	%2 = load i32, i32* %1, align 4
2501	%3 = getelementptr i32, i32* %0, i64 %i
2502	store i32 %2, i32* %3, align 4
2503	ret void
2504; LINUX-64-STATIC-LABEL: ind08:
2505; LINUX-64-STATIC: movl    lsrc(,%rdi,4), [[EAX:%e.x]]
2506; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
2507; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2508; LINUX-64-STATIC: ret
2509
2510; LINUX-32-STATIC-LABEL: ind08:
2511; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2512; LINUX-32-STATIC-NEXT: 	movl	lsrc(,[[EAX]],4), [[ECX:%e.x]]
2513; LINUX-32-STATIC-NEXT: 	movl	lptr, [[EDX:%e.x]]
2514; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2515; LINUX-32-STATIC-NEXT: 	ret
2516
2517; LINUX-32-PIC-LABEL: ind08:
2518; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2519; LINUX-32-PIC-NEXT: 	movl	lsrc(,[[EAX]],4), [[ECX:%e.x]]
2520; LINUX-32-PIC-NEXT: 	movl	lptr, [[EDX:%e.x]]
2521; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2522; LINUX-32-PIC-NEXT: 	ret
2523
2524; LINUX-64-PIC-LABEL: ind08:
2525; LINUX-64-PIC: 	leaq	lsrc(%rip), [[RAX:%r.x]]
2526; LINUX-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2527; LINUX-64-PIC-NEXT: 	movq	lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
2533; DARWIN-32-STATIC-NEXT: 	movl	_lsrc(,[[EAX]],4), [[ECX:%e.x]]
2534; DARWIN-32-STATIC-NEXT: 	movl	_lptr, [[EDX:%e.x]]
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:%e.x]]
2540; DARWIN-32-DYNAMIC-NEXT: 	movl	_lsrc(,[[EAX]],4), [[ECX:%e.x]]
2541; DARWIN-32-DYNAMIC-NEXT: 	movl	_lptr, [[EDX:%e.x]]
2542; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], ([[EDX]],[[EAX]],4)
2543; DARWIN-32-DYNAMIC-NEXT: 	ret
2544
2545; DARWIN-32-PIC: _ind08:
2546; DARWIN-32-PIC: 	calll	L35$pb
2547; DARWIN-32-PIC-NEXT: L35$pb:
2548; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2549; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2550; DARWIN-32-PIC-NEXT: 	movl	_lsrc-L35$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2551; DARWIN-32-PIC-NEXT: 	movl	_lptr-L35$pb([[EAX]]), [[EAX:%e.x]]
2552; 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:%r.x]]
2557; DARWIN-64-STATIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2558; DARWIN-64-STATIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%r.x]]
2564; DARWIN-64-DYNAMIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2565; DARWIN-64-DYNAMIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%r.x]]
2571; DARWIN-64-PIC-NEXT: 	movl	([[RAX]],%rdi,4), [[EAX:%e.x]]
2572; DARWIN-64-PIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
2573; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], ([[RCX]],%rdi,4)
2574; DARWIN-64-PIC-NEXT: 	ret
2575}
2576
2577define void @off00(i64 %i) nounwind {
2578entry:
2579	%0 = add i64 %i, 16
2580	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
2581	%2 = load i32, i32* %1, align 4
2582	%3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
2583	store i32 %2, i32* %3, align 4
2584	ret void
2585; LINUX-64-STATIC-LABEL: off00:
2586; LINUX-64-STATIC: movl    src+64(,%rdi,4), [[EAX:%e.x]]
2587; LINUX-64-STATIC: movl    [[EAX]], dst+64(,%rdi,4)
2588; LINUX-64-STATIC: ret
2589
2590; LINUX-32-STATIC-LABEL: off00:
2591; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2592; LINUX-32-STATIC-NEXT: 	movl	src+64(,[[EAX]],4), [[ECX:%e.x]]
2593; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], dst+64(,[[EAX]],4)
2594; LINUX-32-STATIC-NEXT: 	ret
2595
2596; LINUX-32-PIC-LABEL: off00:
2597; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2598; LINUX-32-PIC-NEXT: 	movl	src+64(,[[EAX]],4), [[ECX:%e.x]]
2599; LINUX-32-PIC-NEXT: 	movl	[[ECX]], dst+64(,[[EAX]],4)
2600; LINUX-32-PIC-NEXT: 	ret
2601
2602; LINUX-64-PIC-LABEL: off00:
2603; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
2604; LINUX-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2605; LINUX-64-PIC-NEXT: 	movq	dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
2611; DARWIN-32-STATIC-NEXT: 	movl	_src+64(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
2617; DARWIN-32-DYNAMIC-NEXT: 	movl	L_src$non_lazy_ptr, [[ECX:%e.x]]
2618; DARWIN-32-DYNAMIC-NEXT: 	movl	64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2619; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[EDX:%e.x]]
2620; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
2621; DARWIN-32-DYNAMIC-NEXT: 	ret
2622
2623; DARWIN-32-PIC: _off00:
2624; DARWIN-32-PIC: 	calll	L36$pb
2625; DARWIN-32-PIC-NEXT: L36$pb:
2626; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2627; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2628; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L36$pb([[EAX]]), [[EDX:%e.x]]
2629; DARWIN-32-PIC-NEXT: 	movl	64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2630; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L36$pb([[EAX]]), [[EAX:%e.x]]
2631; 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:%r.x]]
2636; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2637; DARWIN-64-STATIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
2643; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2644; DARWIN-64-DYNAMIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
2650; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2651; DARWIN-64-PIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
2652; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]],%rdi,4)
2653; DARWIN-64-PIC-NEXT: 	ret
2654}
2655
2656define void @oxf00(i64 %i) nounwind {
2657entry:
2658	%0 = add i64 %i, 16
2659	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
2660	%2 = load i32, i32* %1, align 4
2661	%3 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
2662	store i32 %2, i32* %3, align 4
2663	ret void
2664; LINUX-64-STATIC-LABEL: oxf00:
2665; LINUX-64-STATIC: movl    xsrc+64(,%rdi,4), [[EAX:%e.x]]
2666; LINUX-64-STATIC: movl    [[EAX]], xdst+64(,%rdi,4)
2667; LINUX-64-STATIC: ret
2668
2669; LINUX-32-STATIC-LABEL: oxf00:
2670; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2671; LINUX-32-STATIC-NEXT: 	movl	xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2672; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], xdst+64(,[[EAX]],4)
2673; LINUX-32-STATIC-NEXT: 	ret
2674
2675; LINUX-32-PIC-LABEL: oxf00:
2676; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2677; LINUX-32-PIC-NEXT: 	movl	xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2678; LINUX-32-PIC-NEXT: 	movl	[[ECX]], xdst+64(,[[EAX]],4)
2679; LINUX-32-PIC-NEXT: 	ret
2680
2681; LINUX-64-PIC-LABEL: oxf00:
2682; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2683; LINUX-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2684; LINUX-64-PIC-NEXT: 	movq	xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
2690; DARWIN-32-STATIC-NEXT: 	movl	_xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
2696; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
2697; DARWIN-32-DYNAMIC-NEXT: 	movl	64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2698; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xdst$non_lazy_ptr, [[EDX:%e.x]]
2699; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
2700; DARWIN-32-DYNAMIC-NEXT: 	ret
2701
2702; DARWIN-32-PIC: _oxf00:
2703; DARWIN-32-PIC: 	calll	L37$pb
2704; DARWIN-32-PIC-NEXT: L37$pb:
2705; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2706; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2707; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L37$pb([[EAX]]), [[EDX:%e.x]]
2708; DARWIN-32-PIC-NEXT: 	movl	64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2709; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L37$pb([[EAX]]), [[EAX:%e.x]]
2710; 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:%r.x]]
2715; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2716; DARWIN-64-STATIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
2722; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2723; DARWIN-64-DYNAMIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
2729; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2730; DARWIN-64-PIC-NEXT: 	movq	_xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2731; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]],%rdi,4)
2732; DARWIN-64-PIC-NEXT: 	ret
2733}
2734
2735define void @off01(i64 %i) nounwind {
2736entry:
2737	%.sum = add i64 %i, 16
2738	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
2739	store i32* %0, i32** @ptr, align 8
2740	ret void
2741; LINUX-64-STATIC-LABEL: off01:
2742; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), [[RAX:%r.x]]
2743; LINUX-64-STATIC: movq    [[RAX]], ptr
2744; LINUX-64-STATIC: ret
2745
2746; LINUX-32-STATIC-LABEL: off01:
2747; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2748; LINUX-32-STATIC-NEXT: 	leal	dst+64(,[[EAX]],4), [[EAX:%e.x]]
2749; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ptr
2750; LINUX-32-STATIC-NEXT: 	ret
2751
2752; LINUX-32-PIC-LABEL: off01:
2753; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2754; LINUX-32-PIC-NEXT: 	leal	dst+64(,[[EAX]],4), [[EAX:%e.x]]
2755; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ptr
2756; LINUX-32-PIC-NEXT: 	ret
2757
2758; LINUX-64-PIC-LABEL: off01:
2759; LINUX-64-PIC: 	movq	dst@GOTPCREL(%rip), [[RAX:%r.x]]
2760; LINUX-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
2761; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
2767; DARWIN-32-STATIC-NEXT: 	leal	_dst+64(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
2773; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[ECX:%e.x]]
2774; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), [[EAX:%e.x]]
2775; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
2776; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
2777; DARWIN-32-DYNAMIC-NEXT: 	ret
2778
2779; DARWIN-32-PIC: _off01:
2780; DARWIN-32-PIC: 	calll	L38$pb
2781; DARWIN-32-PIC-NEXT: L38$pb:
2782; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2783; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2784; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L38$pb([[EAX]]), [[EDX:%e.x]]
2785; DARWIN-32-PIC-NEXT: 	leal	64([[EDX]],[[ECX]],4), [[ECX:%e.x]]
2786; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L38$pb([[EAX]]), [[EAX:%e.x]]
2787; 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:%r.x]]
2792; DARWIN-64-STATIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
2793; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
2799; DARWIN-64-DYNAMIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
2800; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
2806; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
2807; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2808; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], ([[RCX]])
2809; DARWIN-64-PIC-NEXT: 	ret
2810}
2811
2812define void @oxf01(i64 %i) nounwind {
2813entry:
2814	%.sum = add i64 %i, 16
2815	%0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %.sum
2816	store i32* %0, i32** @ptr, align 8
2817	ret void
2818; LINUX-64-STATIC-LABEL: oxf01:
2819; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), [[RAX:%r.x]]
2820; LINUX-64-STATIC: movq    [[RAX]], ptr
2821; LINUX-64-STATIC: ret
2822
2823; LINUX-32-STATIC-LABEL: oxf01:
2824; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2825; LINUX-32-STATIC-NEXT: 	leal	xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2826; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ptr
2827; LINUX-32-STATIC-NEXT: 	ret
2828
2829; LINUX-32-PIC-LABEL: oxf01:
2830; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2831; LINUX-32-PIC-NEXT: 	leal	xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2832; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ptr
2833; LINUX-32-PIC-NEXT: 	ret
2834
2835; LINUX-64-PIC-LABEL: oxf01:
2836; LINUX-64-PIC: 	movq	xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2837; LINUX-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
2838; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
2844; DARWIN-32-STATIC-NEXT: 	leal	_xdst+64(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
2850; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xdst$non_lazy_ptr, [[ECX:%e.x]]
2851; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), [[EAX:%e.x]]
2852; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
2853; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
2854; DARWIN-32-DYNAMIC-NEXT: 	ret
2855
2856; DARWIN-32-PIC: _oxf01:
2857; DARWIN-32-PIC: 	calll	L39$pb
2858; DARWIN-32-PIC-NEXT: L39$pb:
2859; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2860; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2861; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L39$pb([[EAX]]), [[EDX:%e.x]]
2862; DARWIN-32-PIC-NEXT: 	leal	64([[EDX]],[[ECX]],4), [[ECX:%e.x]]
2863; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L39$pb([[EAX]]), [[EAX:%e.x]]
2864; 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:%r.x]]
2869; DARWIN-64-STATIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
2870; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
2876; DARWIN-64-DYNAMIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
2877; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
2883; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
2884; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2885; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], ([[RCX]])
2886; DARWIN-64-PIC-NEXT: 	ret
2887}
2888
2889define void @off02(i64 %i) nounwind {
2890entry:
2891	%0 = load i32*, i32** @ptr, align 8
2892	%1 = add i64 %i, 16
2893	%2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
2894	%3 = load i32, i32* %2, align 4
2895	%4 = getelementptr i32, i32* %0, i64 %1
2896	store i32 %3, i32* %4, align 4
2897	ret void
2898; LINUX-64-STATIC-LABEL: off02:
2899; LINUX-64-STATIC: movl    src+64(,%rdi,4), [[EAX:%e.x]]
2900; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
2901; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
2902; LINUX-64-STATIC: ret
2903
2904; LINUX-32-STATIC-LABEL: off02:
2905; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2906; LINUX-32-STATIC-NEXT: 	movl	src+64(,[[EAX]],4), [[ECX:%e.x]]
2907; LINUX-32-STATIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
2908; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
2909; LINUX-32-STATIC-NEXT: 	ret
2910
2911; LINUX-32-PIC-LABEL: off02:
2912; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
2913; LINUX-32-PIC-NEXT: 	movl	src+64(,[[EAX]],4), [[ECX:%e.x]]
2914; LINUX-32-PIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
2915; LINUX-32-PIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
2916; LINUX-32-PIC-NEXT: 	ret
2917
2918; LINUX-64-PIC-LABEL: off02:
2919; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
2920; LINUX-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2921; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2922; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
2928; DARWIN-32-STATIC-NEXT: 	movl	_src+64(,[[EAX]],4), [[ECX:%e.x]]
2929; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[EDX:%e.x]]
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:%e.x]]
2935; DARWIN-32-DYNAMIC-NEXT: 	movl	L_src$non_lazy_ptr, [[ECX:%e.x]]
2936; DARWIN-32-DYNAMIC-NEXT: 	movl	64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2937; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2938; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EDX]]), [[EDX:%e.x]]
2939; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
2940; DARWIN-32-DYNAMIC-NEXT: 	ret
2941
2942; DARWIN-32-PIC: _off02:
2943; DARWIN-32-PIC: 	calll	L40$pb
2944; DARWIN-32-PIC-NEXT: L40$pb:
2945; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
2946; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
2947; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L40$pb([[EAX]]), [[EDX:%e.x]]
2948; DARWIN-32-PIC-NEXT: 	movl	64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2949; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L40$pb([[EAX]]), [[EAX:%e.x]]
2950; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
2956; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2957; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2958; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
2964; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2965; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2966; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
2972; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
2973; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2974; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
2975; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]],%rdi,4)
2976; DARWIN-64-PIC-NEXT: 	ret
2977}
2978
2979define void @oxf02(i64 %i) nounwind {
2980entry:
2981	%0 = load i32*, i32** @ptr, align 8
2982	%1 = add i64 %i, 16
2983	%2 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %1
2984	%3 = load i32, i32* %2, align 4
2985	%4 = getelementptr i32, i32* %0, i64 %1
2986	store i32 %3, i32* %4, align 4
2987	ret void
2988; LINUX-64-STATIC-LABEL: oxf02:
2989; LINUX-64-STATIC: movl    xsrc+64(,%rdi,4), [[EAX:%e.x]]
2990; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
2991; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
2992; LINUX-64-STATIC: ret
2993
2994; LINUX-32-STATIC-LABEL: oxf02:
2995; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
2996; LINUX-32-STATIC-NEXT: 	movl	xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2997; LINUX-32-STATIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
2998; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
2999; LINUX-32-STATIC-NEXT: 	ret
3000
3001; LINUX-32-PIC-LABEL: oxf02:
3002; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
3003; LINUX-32-PIC-NEXT: 	movl	xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3004; LINUX-32-PIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
3005; LINUX-32-PIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
3006; LINUX-32-PIC-NEXT: 	ret
3007
3008; LINUX-64-PIC-LABEL: oxf02:
3009; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3010; LINUX-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3011; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3012; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
3018; DARWIN-32-STATIC-NEXT: 	movl	_xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3019; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[EDX:%e.x]]
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:%e.x]]
3025; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
3026; DARWIN-32-DYNAMIC-NEXT: 	movl	64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
3027; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[EDX:%e.x]]
3028; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EDX]]), [[EDX:%e.x]]
3029; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
3030; DARWIN-32-DYNAMIC-NEXT: 	ret
3031
3032; DARWIN-32-PIC: _oxf02:
3033; DARWIN-32-PIC: 	calll	L41$pb
3034; DARWIN-32-PIC-NEXT: L41$pb:
3035; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3036; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
3037; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L41$pb([[EAX]]), [[EDX:%e.x]]
3038; DARWIN-32-PIC-NEXT: 	movl	64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
3039; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L41$pb([[EAX]]), [[EAX:%e.x]]
3040; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
3046; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3047; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3048; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
3054; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3055; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3056; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
3062; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3063; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3064; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
3065; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]],%rdi,4)
3066; DARWIN-64-PIC-NEXT: 	ret
3067}
3068
3069define void @off03(i64 %i) nounwind {
3070entry:
3071	%0 = add i64 %i, 16
3072	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
3073	%2 = load i32, i32* %1, align 4
3074	%3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
3075	store i32 %2, i32* %3, align 4
3076	ret void
3077; LINUX-64-STATIC-LABEL: off03:
3078; LINUX-64-STATIC: movl    dsrc+64(,%rdi,4), [[EAX:%e.x]]
3079; LINUX-64-STATIC: movl    [[EAX]], ddst+64(,%rdi,4)
3080; LINUX-64-STATIC: ret
3081
3082; LINUX-32-STATIC-LABEL: off03:
3083; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
3084; LINUX-32-STATIC-NEXT: 	movl	dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3085; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ddst+64(,[[EAX]],4)
3086; LINUX-32-STATIC-NEXT: 	ret
3087
3088; LINUX-32-PIC-LABEL: off03:
3089; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
3090; LINUX-32-PIC-NEXT: 	movl	dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3091; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ddst+64(,[[EAX]],4)
3092; LINUX-32-PIC-NEXT: 	ret
3093
3094; LINUX-64-PIC-LABEL: off03:
3095; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3096; LINUX-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3097; LINUX-64-PIC-NEXT: 	movq	ddst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
3103; DARWIN-32-STATIC-NEXT: 	movl	_dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
3109; DARWIN-32-DYNAMIC-NEXT: 	movl	_dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3110; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], _ddst+64(,[[EAX]],4)
3111; DARWIN-32-DYNAMIC-NEXT: 	ret
3112
3113; DARWIN-32-PIC: _off03:
3114; DARWIN-32-PIC: 	calll	L42$pb
3115; DARWIN-32-PIC-NEXT: L42$pb:
3116; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3117; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
3118; DARWIN-32-PIC-NEXT: 	movl	(_dsrc-L42$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3119; DARWIN-32-PIC-NEXT: 	movl	[[EDX]], (_ddst-L42$pb)+64([[EAX]],[[ECX]],4)
3120; DARWIN-32-PIC-NEXT: 	ret
3121
3122; DARWIN-64-STATIC: _off03:
3123; DARWIN-64-STATIC: 	leaq	_dsrc(%rip), [[RAX:%r.x]]
3124; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3125; DARWIN-64-STATIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
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:%r.x]]
3131; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3132; DARWIN-64-DYNAMIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
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:%r.x]]
3138; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3139; DARWIN-64-PIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
3140; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]],%rdi,4)
3141; DARWIN-64-PIC-NEXT: 	ret
3142}
3143
3144define void @off04(i64 %i) nounwind {
3145entry:
3146	%.sum = add i64 %i, 16
3147	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
3148	store i32* %0, i32** @dptr, align 8
3149	ret void
3150; LINUX-64-STATIC-LABEL: off04:
3151; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), [[RAX:%r.x]]
3152; LINUX-64-STATIC: movq    [[RAX]], dptr
3153; LINUX-64-STATIC: ret
3154
3155; LINUX-32-STATIC-LABEL: off04:
3156; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
3157; LINUX-32-STATIC-NEXT: 	leal	ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3158; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], dptr
3159; LINUX-32-STATIC-NEXT: 	ret
3160
3161; LINUX-32-PIC-LABEL: off04:
3162; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
3163; LINUX-32-PIC-NEXT: 	leal	ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3164; LINUX-32-PIC-NEXT: 	movl	[[EAX]], dptr
3165; LINUX-32-PIC-NEXT: 	ret
3166
3167; LINUX-64-PIC-LABEL: off04:
3168; LINUX-64-PIC: 	movq	ddst@GOTPCREL(%rip), [[RAX:%r.x]]
3169; LINUX-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
3170; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
3176; DARWIN-32-STATIC-NEXT: 	leal	_ddst+64(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
3182; DARWIN-32-DYNAMIC-NEXT: 	leal	_ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3183; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _dptr
3184; DARWIN-32-DYNAMIC-NEXT: 	ret
3185
3186; DARWIN-32-PIC: _off04:
3187; DARWIN-32-PIC: 	calll	L43$pb
3188; DARWIN-32-PIC-NEXT: L43$pb:
3189; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3190; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
3191; DARWIN-32-PIC-NEXT: 	leal	(_ddst-L43$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]]
3192; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _dptr-L43$pb([[EAX]])
3193; DARWIN-32-PIC-NEXT: 	ret
3194
3195; DARWIN-64-STATIC: _off04:
3196; DARWIN-64-STATIC: 	leaq	_ddst(%rip), [[RAX:%r.x]]
3197; DARWIN-64-STATIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
3203; DARWIN-64-DYNAMIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
3209; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
3210; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _dptr(%rip)
3211; DARWIN-64-PIC-NEXT: 	ret
3212}
3213
3214define void @off05(i64 %i) nounwind {
3215entry:
3216	%0 = load i32*, i32** @dptr, align 8
3217	%1 = add i64 %i, 16
3218	%2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
3219	%3 = load i32, i32* %2, align 4
3220	%4 = getelementptr i32, i32* %0, i64 %1
3221	store i32 %3, i32* %4, align 4
3222	ret void
3223; LINUX-64-STATIC-LABEL: off05:
3224; LINUX-64-STATIC: movl    dsrc+64(,%rdi,4), [[EAX:%e.x]]
3225; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
3226; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
3227; LINUX-64-STATIC: ret
3228
3229; LINUX-32-STATIC-LABEL: off05:
3230; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
3231; LINUX-32-STATIC-NEXT: 	movl	dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3232; LINUX-32-STATIC-NEXT: 	movl	dptr, [[EDX:%e.x]]
3233; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
3234; LINUX-32-STATIC-NEXT: 	ret
3235
3236; LINUX-32-PIC-LABEL: off05:
3237; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
3238; LINUX-32-PIC-NEXT: 	movl	dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3239; LINUX-32-PIC-NEXT: 	movl	dptr, [[EDX:%e.x]]
3240; LINUX-32-PIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
3241; LINUX-32-PIC-NEXT: 	ret
3242
3243; LINUX-64-PIC-LABEL: off05:
3244; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3245; LINUX-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3246; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3247; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
3253; DARWIN-32-STATIC-NEXT: 	movl	_dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3254; DARWIN-32-STATIC-NEXT: 	movl	_dptr, [[EDX:%e.x]]
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:%e.x]]
3260; DARWIN-32-DYNAMIC-NEXT: 	movl	_dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3261; DARWIN-32-DYNAMIC-NEXT: 	movl	_dptr, [[EDX:%e.x]]
3262; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
3263; DARWIN-32-DYNAMIC-NEXT: 	ret
3264
3265; DARWIN-32-PIC: _off05:
3266; DARWIN-32-PIC: 	calll	L44$pb
3267; DARWIN-32-PIC-NEXT: L44$pb:
3268; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3269; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
3270; DARWIN-32-PIC-NEXT: 	movl	(_dsrc-L44$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3271; DARWIN-32-PIC-NEXT: 	movl	_dptr-L44$pb([[EAX]]), [[EAX:%e.x]]
3272; 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:%r.x]]
3277; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3278; DARWIN-64-STATIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%r.x]]
3284; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3285; DARWIN-64-DYNAMIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%r.x]]
3291; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3292; DARWIN-64-PIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
3293; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]],%rdi,4)
3294; DARWIN-64-PIC-NEXT: 	ret
3295}
3296
3297define void @off06(i64 %i) nounwind {
3298entry:
3299	%0 = add i64 %i, 16
3300	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
3301	%2 = load i32, i32* %1, align 4
3302	%3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
3303	store i32 %2, i32* %3, align 4
3304	ret void
3305; LINUX-64-STATIC-LABEL: off06:
3306; LINUX-64-STATIC: movl    lsrc+64(,%rdi,4), [[EAX:%e.x]]
3307; LINUX-64-STATIC: movl    [[EAX]], ldst+64(,%rdi,4)
3308; LINUX-64-STATIC: ret
3309
3310; LINUX-32-STATIC-LABEL: off06:
3311; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
3312; LINUX-32-STATIC-NEXT: 	movl	lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3313; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ldst+64(,[[EAX]],4)
3314; LINUX-32-STATIC-NEXT: 	ret
3315
3316; LINUX-32-PIC-LABEL: off06:
3317; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
3318; LINUX-32-PIC-NEXT: 	movl	lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3319; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ldst+64(,[[EAX]],4)
3320; LINUX-32-PIC-NEXT: 	ret
3321
3322; LINUX-64-PIC-LABEL: off06:
3323; LINUX-64-PIC: 	leaq	lsrc(%rip), [[RAX:%r.x]]
3324; LINUX-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3325; LINUX-64-PIC-NEXT: 	leaq	ldst(%rip), [[RCX:%r.x]]
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:%e.x]]
3331; DARWIN-32-STATIC-NEXT: 	movl	_lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
3337; DARWIN-32-DYNAMIC-NEXT: 	movl	_lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3338; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], _ldst+64(,[[EAX]],4)
3339; DARWIN-32-DYNAMIC-NEXT: 	ret
3340
3341; DARWIN-32-PIC: _off06:
3342; DARWIN-32-PIC: 	calll	L45$pb
3343; DARWIN-32-PIC-NEXT: L45$pb:
3344; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3345; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
3346; DARWIN-32-PIC-NEXT: 	movl	(_lsrc-L45$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3347; DARWIN-32-PIC-NEXT: 	movl	[[EDX]], (_ldst-L45$pb)+64([[EAX]],[[ECX]],4)
3348; DARWIN-32-PIC-NEXT: 	ret
3349
3350; DARWIN-64-STATIC: _off06:
3351; DARWIN-64-STATIC: 	leaq	_lsrc(%rip), [[RAX:%r.x]]
3352; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3353; DARWIN-64-STATIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
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:%r.x]]
3359; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3360; DARWIN-64-DYNAMIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
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:%r.x]]
3366; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3367; DARWIN-64-PIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
3368; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]],%rdi,4)
3369; DARWIN-64-PIC-NEXT: 	ret
3370}
3371
3372define void @off07(i64 %i) nounwind {
3373entry:
3374	%.sum = add i64 %i, 16
3375	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
3376	store i32* %0, i32** @lptr, align 8
3377	ret void
3378; LINUX-64-STATIC-LABEL: off07:
3379; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), [[RAX:%r.x]]
3380; LINUX-64-STATIC: movq    [[RAX]], lptr
3381; LINUX-64-STATIC: ret
3382
3383; LINUX-32-STATIC-LABEL: off07:
3384; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
3385; LINUX-32-STATIC-NEXT: 	leal	ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3386; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], lptr
3387; LINUX-32-STATIC-NEXT: 	ret
3388
3389; LINUX-32-PIC-LABEL: off07:
3390; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
3391; LINUX-32-PIC-NEXT: 	leal	ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3392; LINUX-32-PIC-NEXT: 	movl	[[EAX]], lptr
3393; LINUX-32-PIC-NEXT: 	ret
3394
3395; LINUX-64-PIC-LABEL: off07:
3396; LINUX-64-PIC: 	leaq	ldst(%rip), [[RAX:%r.x]]
3397; LINUX-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%e.x]]
3403; DARWIN-32-STATIC-NEXT: 	leal	_ldst+64(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
3409; DARWIN-32-DYNAMIC-NEXT: 	leal	_ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3410; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _lptr
3411; DARWIN-32-DYNAMIC-NEXT: 	ret
3412
3413; DARWIN-32-PIC: _off07:
3414; DARWIN-32-PIC: 	calll	L46$pb
3415; DARWIN-32-PIC-NEXT: L46$pb:
3416; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3417; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
3418; DARWIN-32-PIC-NEXT: 	leal	(_ldst-L46$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]]
3419; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _lptr-L46$pb([[EAX]])
3420; DARWIN-32-PIC-NEXT: 	ret
3421
3422; DARWIN-64-STATIC: _off07:
3423; DARWIN-64-STATIC: 	leaq	_ldst(%rip), [[RAX:%r.x]]
3424; DARWIN-64-STATIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
3430; DARWIN-64-DYNAMIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
3436; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), [[RAX:%r.x]]
3437; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _lptr(%rip)
3438; DARWIN-64-PIC-NEXT: 	ret
3439}
3440
3441define void @off08(i64 %i) nounwind {
3442entry:
3443	%0 = load i32*, i32** @lptr, align 8
3444	%1 = add i64 %i, 16
3445	%2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
3446	%3 = load i32, i32* %2, align 4
3447	%4 = getelementptr i32, i32* %0, i64 %1
3448	store i32 %3, i32* %4, align 4
3449	ret void
3450; LINUX-64-STATIC-LABEL: off08:
3451; LINUX-64-STATIC: movl    lsrc+64(,%rdi,4), [[EAX:%e.x]]
3452; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
3453; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
3454; LINUX-64-STATIC: ret
3455
3456; LINUX-32-STATIC-LABEL: off08:
3457; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
3458; LINUX-32-STATIC-NEXT: 	movl	lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3459; LINUX-32-STATIC-NEXT: 	movl	lptr, [[EDX:%e.x]]
3460; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
3461; LINUX-32-STATIC-NEXT: 	ret
3462
3463; LINUX-32-PIC-LABEL: off08:
3464; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
3465; LINUX-32-PIC-NEXT: 	movl	lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3466; LINUX-32-PIC-NEXT: 	movl	lptr, [[EDX:%e.x]]
3467; LINUX-32-PIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
3468; LINUX-32-PIC-NEXT: 	ret
3469
3470; LINUX-64-PIC-LABEL: off08:
3471; LINUX-64-PIC: 	leaq	lsrc(%rip), [[RAX:%r.x]]
3472; LINUX-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3473; LINUX-64-PIC-NEXT: 	movq	lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
3479; DARWIN-32-STATIC-NEXT: 	movl	_lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3480; DARWIN-32-STATIC-NEXT: 	movl	_lptr, [[EDX:%e.x]]
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:%e.x]]
3486; DARWIN-32-DYNAMIC-NEXT: 	movl	_lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3487; DARWIN-32-DYNAMIC-NEXT: 	movl	_lptr, [[EDX:%e.x]]
3488; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 64([[EDX]],[[EAX]],4)
3489; DARWIN-32-DYNAMIC-NEXT: 	ret
3490
3491; DARWIN-32-PIC: _off08:
3492; DARWIN-32-PIC: 	calll	L47$pb
3493; DARWIN-32-PIC-NEXT: L47$pb:
3494; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3495; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
3496; DARWIN-32-PIC-NEXT: 	movl	(_lsrc-L47$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3497; DARWIN-32-PIC-NEXT: 	movl	_lptr-L47$pb([[EAX]]), [[EAX:%e.x]]
3498; 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:%r.x]]
3503; DARWIN-64-STATIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3504; DARWIN-64-STATIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%r.x]]
3510; DARWIN-64-DYNAMIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3511; DARWIN-64-DYNAMIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%r.x]]
3517; DARWIN-64-PIC-NEXT: 	movl	64([[RAX]],%rdi,4), [[EAX:%e.x]]
3518; DARWIN-64-PIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
3519; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 64([[RCX]],%rdi,4)
3520; DARWIN-64-PIC-NEXT: 	ret
3521}
3522
3523define void @moo00(i64 %i) nounwind {
3524entry:
3525	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
3526	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), align 4
3527	ret void
3528; LINUX-64-STATIC-LABEL: moo00:
3529; LINUX-64-STATIC: movl    src+262144(%rip), [[EAX:%e.x]]
3530; LINUX-64-STATIC: movl    [[EAX]], dst+262144(%rip)
3531; LINUX-64-STATIC: ret
3532
3533; LINUX-32-STATIC-LABEL: moo00:
3534; LINUX-32-STATIC: 	movl	src+262144, [[EAX:%e.x]]
3535; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], dst+262144
3536; LINUX-32-STATIC-NEXT: 	ret
3537
3538; LINUX-32-PIC-LABEL: moo00:
3539; LINUX-32-PIC: 	movl	src+262144, [[EAX:%e.x]]
3540; LINUX-32-PIC-NEXT: 	movl	[[EAX]], dst+262144
3541; LINUX-32-PIC-NEXT: 	ret
3542
3543; LINUX-64-PIC-LABEL: moo00:
3544; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
3545; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3546; LINUX-64-PIC-NEXT: 	movq	dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
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:%e.x]]
3557; DARWIN-32-DYNAMIC-NEXT: 	movl	262144([[EAX]]), [[EAX:%e.x]]
3558; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[ECX:%e.x]]
3559; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
3560; DARWIN-32-DYNAMIC-NEXT: 	ret
3561
3562; DARWIN-32-PIC: _moo00:
3563; DARWIN-32-PIC: 	calll	L48$pb
3564; DARWIN-32-PIC-NEXT: L48$pb:
3565; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3566; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L48$pb([[EAX]]), [[ECX:%e.x]]
3567; DARWIN-32-PIC-NEXT: 	movl	262144([[ECX]]), [[ECX:%e.x]]
3568; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L48$pb([[EAX]]), [[EAX:%e.x]]
3569; 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:%r.x]]
3574; DARWIN-64-STATIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3575; DARWIN-64-STATIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
3581; DARWIN-64-DYNAMIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3582; DARWIN-64-DYNAMIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
3588; DARWIN-64-PIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3589; DARWIN-64-PIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
3590; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]])
3591; DARWIN-64-PIC-NEXT: 	ret
3592}
3593
3594define void @moo01(i64 %i) nounwind {
3595entry:
3596	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
3597	ret void
3598; LINUX-64-STATIC-LABEL: moo01:
3599; LINUX-64-STATIC: movq    $dst+262144, ptr(%rip)
3600; LINUX-64-STATIC: ret
3601
3602; LINUX-32-STATIC-LABEL: moo01:
3603; LINUX-32-STATIC: 	movl	$dst+262144, ptr
3604; LINUX-32-STATIC-NEXT: 	ret
3605
3606; LINUX-32-PIC-LABEL: moo01:
3607; LINUX-32-PIC: 	movl	$dst+262144, ptr
3608; LINUX-32-PIC-NEXT: 	ret
3609
3610; LINUX-64-PIC-LABEL: moo01:
3611; LINUX-64-PIC: 	movl	$262144, [[EAX:%e.x]]
3612; LINUX-64-PIC-NEXT: 	addq	dst@GOTPCREL(%rip), [[RAX:%r.x]]
3613; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
3623; DARWIN-32-DYNAMIC-NEXT: 	addl	L_dst$non_lazy_ptr, [[EAX:%e.x]]
3624; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
3625; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
3626; DARWIN-32-DYNAMIC-NEXT: 	ret
3627
3628; DARWIN-32-PIC: _moo01:
3629; DARWIN-32-PIC: 	calll	L49$pb
3630; DARWIN-32-PIC-NEXT: L49$pb:
3631; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3632; DARWIN-32-PIC-NEXT: 	movl	$262144, [[ECX:%e.x]]
3633; DARWIN-32-PIC-NEXT: 	addl	L_dst$non_lazy_ptr-L49$pb([[EAX]]), [[ECX:%e.x]]
3634; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L49$pb([[EAX]]), [[EAX:%e.x]]
3635; 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:%e.x]]
3640; DARWIN-64-STATIC-NEXT: 	addq	_dst@GOTPCREL(%rip), [[RAX:%r.x]]
3641; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
3647; DARWIN-64-DYNAMIC-NEXT: 	addq	_dst@GOTPCREL(%rip), [[RAX:%r.x]]
3648; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
3654; DARWIN-64-PIC-NEXT: 	addq	_dst@GOTPCREL(%rip), [[RAX:%r.x]]
3655; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3656; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], ([[RCX]])
3657; DARWIN-64-PIC-NEXT: 	ret
3658}
3659
3660define void @moo02(i64 %i) nounwind {
3661entry:
3662	%0 = load i32*, i32** @ptr, align 8
3663	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
3664	%2 = getelementptr i32, i32* %0, i64 65536
3665	store i32 %1, i32* %2, align 4
3666	ret void
3667; LINUX-64-STATIC-LABEL: moo02:
3668; LINUX-64-STATIC: movl    src+262144(%rip), [[EAX:%e.x]]
3669; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
3670; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
3671; LINUX-64-STATIC: ret
3672
3673; LINUX-32-STATIC-LABEL: moo02:
3674; LINUX-32-STATIC: 	movl	src+262144, [[EAX:%e.x]]
3675; LINUX-32-STATIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
3676; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
3677; LINUX-32-STATIC-NEXT: 	ret
3678
3679; LINUX-32-PIC-LABEL: moo02:
3680; LINUX-32-PIC: 	movl	src+262144, [[EAX:%e.x]]
3681; LINUX-32-PIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
3682; LINUX-32-PIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
3683; LINUX-32-PIC-NEXT: 	ret
3684
3685; LINUX-64-PIC-LABEL: moo02:
3686; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
3687; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3688; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3689; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
3695; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[ECX:%e.x]]
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:%e.x]]
3701; DARWIN-32-DYNAMIC-NEXT: 	movl	262144([[EAX]]), [[EAX:%e.x]]
3702; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
3703; DARWIN-32-DYNAMIC-NEXT: 	movl	([[ECX]]), [[ECX:%e.x]]
3704; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
3705; DARWIN-32-DYNAMIC-NEXT: 	ret
3706
3707; DARWIN-32-PIC: _moo02:
3708; DARWIN-32-PIC: 	calll	L50$pb
3709; DARWIN-32-PIC-NEXT: L50$pb:
3710; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3711; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L50$pb([[EAX]]), [[ECX:%e.x]]
3712; DARWIN-32-PIC-NEXT: 	movl	262144([[ECX]]), [[ECX:%e.x]]
3713; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L50$pb([[EAX]]), [[EAX:%e.x]]
3714; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
3720; DARWIN-64-STATIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3721; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3722; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
3728; DARWIN-64-DYNAMIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3729; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3730; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
3736; DARWIN-64-PIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3737; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3738; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
3739; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]])
3740; DARWIN-64-PIC-NEXT: 	ret
3741}
3742
3743define void @moo03(i64 %i) nounwind {
3744entry:
3745	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3746	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), align 32
3747	ret void
3748; LINUX-64-STATIC-LABEL: moo03:
3749; LINUX-64-STATIC: movl    dsrc+262144(%rip), [[EAX:%e.x]]
3750; LINUX-64-STATIC: movl    [[EAX]], ddst+262144(%rip)
3751; LINUX-64-STATIC: ret
3752
3753; LINUX-32-STATIC-LABEL: moo03:
3754; LINUX-32-STATIC: 	movl	dsrc+262144, [[EAX:%e.x]]
3755; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ddst+262144
3756; LINUX-32-STATIC-NEXT: 	ret
3757
3758; LINUX-32-PIC-LABEL: moo03:
3759; LINUX-32-PIC: 	movl	dsrc+262144, [[EAX:%e.x]]
3760; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ddst+262144
3761; LINUX-32-PIC-NEXT: 	ret
3762
3763; LINUX-64-PIC-LABEL: moo03:
3764; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3765; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3766; LINUX-64-PIC-NEXT: 	movq	ddst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
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:%e.x]]
3777; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _ddst+262144
3778; DARWIN-32-DYNAMIC-NEXT: 	ret
3779
3780; DARWIN-32-PIC: _moo03:
3781; DARWIN-32-PIC: 	calll	L51$pb
3782; DARWIN-32-PIC-NEXT: L51$pb:
3783; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3784; DARWIN-32-PIC-NEXT: 	movl	(_dsrc-L51$pb)+262144([[EAX]]), [[ECX:%e.x]]
3785; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], (_ddst-L51$pb)+262144([[EAX]])
3786; DARWIN-32-PIC-NEXT: 	ret
3787
3788; DARWIN-64-STATIC: _moo03:
3789; DARWIN-64-STATIC: 	movl	_dsrc+262144(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
3800; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], _ddst+262144(%rip)
3801; DARWIN-64-PIC-NEXT: 	ret
3802}
3803
3804define void @moo04(i64 %i) nounwind {
3805entry:
3806	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
3807	ret void
3808; LINUX-64-STATIC-LABEL: moo04:
3809; LINUX-64-STATIC: movq    $ddst+262144, dptr
3810; LINUX-64-STATIC: ret
3811
3812; LINUX-32-STATIC-LABEL: moo04:
3813; LINUX-32-STATIC: 	movl	$ddst+262144, dptr
3814; LINUX-32-STATIC-NEXT: 	ret
3815
3816; LINUX-32-PIC-LABEL: moo04:
3817; LINUX-32-PIC: 	movl	$ddst+262144, dptr
3818; LINUX-32-PIC-NEXT: 	ret
3819
3820; LINUX-64-PIC-LABEL: moo04:
3821; LINUX-64-PIC: 	movl	$262144, [[EAX:%e.x]]
3822; LINUX-64-PIC-NEXT: 	addq	ddst@GOTPCREL(%rip), [[RAX:%r.x]]
3823; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:
3836; DARWIN-32-PIC: 	calll	L52$pb
3837; DARWIN-32-PIC-NEXT: L52$pb:
3838; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3839; DARWIN-32-PIC-NEXT: 	leal	(_ddst-L52$pb)+262144([[EAX]]), [[ECX:%e.x]]
3840; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _dptr-L52$pb([[EAX]])
3841; DARWIN-32-PIC-NEXT: 	ret
3842
3843; DARWIN-64-STATIC: _moo04:
3844; DARWIN-64-STATIC: 	leaq	_ddst+262144(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
3855; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _dptr(%rip)
3856; DARWIN-64-PIC-NEXT: 	ret
3857}
3858
3859define void @moo05(i64 %i) nounwind {
3860entry:
3861	%0 = load i32*, i32** @dptr, align 8
3862	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3863	%2 = getelementptr i32, i32* %0, i64 65536
3864	store i32 %1, i32* %2, align 4
3865	ret void
3866; LINUX-64-STATIC-LABEL: moo05:
3867; LINUX-64-STATIC: movl    dsrc+262144(%rip), [[EAX:%e.x]]
3868; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
3869; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
3870; LINUX-64-STATIC: ret
3871
3872; LINUX-32-STATIC-LABEL: moo05:
3873; LINUX-32-STATIC: 	movl	dsrc+262144, [[EAX:%e.x]]
3874; LINUX-32-STATIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
3875; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
3876; LINUX-32-STATIC-NEXT: 	ret
3877
3878; LINUX-32-PIC-LABEL: moo05:
3879; LINUX-32-PIC: 	movl	dsrc+262144, [[EAX:%e.x]]
3880; LINUX-32-PIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
3881; LINUX-32-PIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
3882; LINUX-32-PIC-NEXT: 	ret
3883
3884; LINUX-64-PIC-LABEL: moo05:
3885; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3886; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]]), [[EAX:%e.x]]
3887; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3888; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
3894; DARWIN-32-STATIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
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:%e.x]]
3900; DARWIN-32-DYNAMIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
3901; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
3902; DARWIN-32-DYNAMIC-NEXT: 	ret
3903
3904; DARWIN-32-PIC: _moo05:
3905; DARWIN-32-PIC: 	calll	L53$pb
3906; DARWIN-32-PIC-NEXT: L53$pb:
3907; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3908; DARWIN-32-PIC-NEXT: 	movl	(_dsrc-L53$pb)+262144([[EAX]]), [[ECX:%e.x]]
3909; DARWIN-32-PIC-NEXT: 	movl	_dptr-L53$pb([[EAX]]), [[EAX:%e.x]]
3910; 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:%e.x]]
3915; DARWIN-64-STATIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%e.x]]
3921; DARWIN-64-DYNAMIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%e.x]]
3927; DARWIN-64-PIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
3928; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]])
3929; DARWIN-64-PIC-NEXT: 	ret
3930}
3931
3932define void @moo06(i64 %i) nounwind {
3933entry:
3934	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
3935	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), align 4
3936	ret void
3937; LINUX-64-STATIC-LABEL: moo06:
3938; LINUX-64-STATIC: movl    lsrc+262144(%rip), [[EAX:%e.x]]
3939; LINUX-64-STATIC: movl    [[EAX]], ldst+262144(%rip)
3940; LINUX-64-STATIC: ret
3941
3942; LINUX-32-STATIC-LABEL: moo06:
3943; LINUX-32-STATIC: 	movl	lsrc+262144, [[EAX:%e.x]]
3944; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ldst+262144
3945; LINUX-32-STATIC-NEXT: 	ret
3946
3947; LINUX-32-PIC-LABEL: moo06:
3948; LINUX-32-PIC: 	movl	lsrc+262144, [[EAX:%e.x]]
3949; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ldst+262144
3950; LINUX-32-PIC-NEXT: 	ret
3951
3952; LINUX-64-PIC-LABEL: moo06:
3953; LINUX-64-PIC: 	movl	lsrc+262144(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
3964; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _ldst+262144
3965; DARWIN-32-DYNAMIC-NEXT: 	ret
3966
3967; DARWIN-32-PIC: _moo06:
3968; DARWIN-32-PIC: 	calll	L54$pb
3969; DARWIN-32-PIC-NEXT: L54$pb:
3970; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
3971; DARWIN-32-PIC-NEXT: 	movl	(_lsrc-L54$pb)+262144([[EAX]]), [[ECX:%e.x]]
3972; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], (_ldst-L54$pb)+262144([[EAX]])
3973; DARWIN-32-PIC-NEXT: 	ret
3974
3975; DARWIN-64-STATIC: _moo06:
3976; DARWIN-64-STATIC: 	movl	_lsrc+262144(%rip), [[EAX:%e.x]]
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:%e.x]]
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:%e.x]]
3987; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], _ldst+262144(%rip)
3988; DARWIN-64-PIC-NEXT: 	ret
3989}
3990
3991define void @moo07(i64 %i) nounwind {
3992entry:
3993	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
3994	ret void
3995; LINUX-64-STATIC-LABEL: moo07:
3996; LINUX-64-STATIC: movq    $ldst+262144, lptr
3997; LINUX-64-STATIC: ret
3998
3999; LINUX-32-STATIC-LABEL: moo07:
4000; LINUX-32-STATIC: 	movl	$ldst+262144, lptr
4001; LINUX-32-STATIC-NEXT: 	ret
4002
4003; LINUX-32-PIC-LABEL: moo07:
4004; LINUX-32-PIC: 	movl	$ldst+262144, lptr
4005; LINUX-32-PIC-NEXT: 	ret
4006
4007; LINUX-64-PIC-LABEL: moo07:
4008; LINUX-64-PIC: 	leaq	ldst+262144(%rip), [[RAX:%r.x]]
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:
4021; DARWIN-32-PIC: 	calll	L55$pb
4022; DARWIN-32-PIC-NEXT: L55$pb:
4023; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4024; DARWIN-32-PIC-NEXT: 	leal	(_ldst-L55$pb)+262144([[EAX]]), [[ECX:%e.x]]
4025; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _lptr-L55$pb([[EAX]])
4026; DARWIN-32-PIC-NEXT: 	ret
4027
4028; DARWIN-64-STATIC: _moo07:
4029; DARWIN-64-STATIC: 	leaq	_ldst+262144(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
4040; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _lptr(%rip)
4041; DARWIN-64-PIC-NEXT: 	ret
4042}
4043
4044define void @moo08(i64 %i) nounwind {
4045entry:
4046	%0 = load i32*, i32** @lptr, align 8
4047	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4048	%2 = getelementptr i32, i32* %0, i64 65536
4049	store i32 %1, i32* %2, align 4
4050	ret void
4051; LINUX-64-STATIC-LABEL: moo08:
4052; LINUX-64-STATIC: movl    lsrc+262144(%rip), [[EAX:%e.x]]
4053; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
4054; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
4055; LINUX-64-STATIC: ret
4056
4057; LINUX-32-STATIC-LABEL: moo08:
4058; LINUX-32-STATIC: 	movl	lsrc+262144, [[EAX:%e.x]]
4059; LINUX-32-STATIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
4060; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
4061; LINUX-32-STATIC-NEXT: 	ret
4062
4063; LINUX-32-PIC-LABEL: moo08:
4064; LINUX-32-PIC: 	movl	lsrc+262144, [[EAX:%e.x]]
4065; LINUX-32-PIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
4066; LINUX-32-PIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
4067; LINUX-32-PIC-NEXT: 	ret
4068
4069; LINUX-64-PIC-LABEL: moo08:
4070; LINUX-64-PIC: 	movl	lsrc+262144(%rip), [[EAX:%e.x]]
4071; LINUX-64-PIC-NEXT: 	movq	lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
4077; DARWIN-32-STATIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
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:%e.x]]
4083; DARWIN-32-DYNAMIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
4084; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], 262144([[ECX]])
4085; DARWIN-32-DYNAMIC-NEXT: 	ret
4086
4087; DARWIN-32-PIC: _moo08:
4088; DARWIN-32-PIC: 	calll	L56$pb
4089; DARWIN-32-PIC-NEXT: L56$pb:
4090; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4091; DARWIN-32-PIC-NEXT: 	movl	(_lsrc-L56$pb)+262144([[EAX]]), [[ECX:%e.x]]
4092; DARWIN-32-PIC-NEXT: 	movl	_lptr-L56$pb([[EAX]]), [[EAX:%e.x]]
4093; 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:%e.x]]
4098; DARWIN-64-STATIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
4104; DARWIN-64-DYNAMIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
4110; DARWIN-64-PIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
4111; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]])
4112; DARWIN-64-PIC-NEXT: 	ret
4113}
4114
4115define void @big00(i64 %i) nounwind {
4116entry:
4117	%0 = add i64 %i, 65536
4118	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
4119	%2 = load i32, i32* %1, align 4
4120	%3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
4121	store i32 %2, i32* %3, align 4
4122	ret void
4123; LINUX-64-STATIC-LABEL: big00:
4124; LINUX-64-STATIC: movl    src+262144(,%rdi,4), [[EAX:%e.x]]
4125; LINUX-64-STATIC: movl    [[EAX]], dst+262144(,%rdi,4)
4126; LINUX-64-STATIC: ret
4127
4128; LINUX-32-STATIC-LABEL: big00:
4129; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4130; LINUX-32-STATIC-NEXT: 	movl	src+262144(,[[EAX]],4), [[ECX:%e.x]]
4131; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], dst+262144(,[[EAX]],4)
4132; LINUX-32-STATIC-NEXT: 	ret
4133
4134; LINUX-32-PIC-LABEL: big00:
4135; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4136; LINUX-32-PIC-NEXT: 	movl	src+262144(,[[EAX]],4), [[ECX:%e.x]]
4137; LINUX-32-PIC-NEXT: 	movl	[[ECX]], dst+262144(,[[EAX]],4)
4138; LINUX-32-PIC-NEXT: 	ret
4139
4140; LINUX-64-PIC-LABEL: big00:
4141; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
4142; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4143; LINUX-64-PIC-NEXT: 	movq	dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
4149; DARWIN-32-STATIC-NEXT: 	movl	_src+262144(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
4155; DARWIN-32-DYNAMIC-NEXT: 	movl	L_src$non_lazy_ptr, [[ECX:%e.x]]
4156; DARWIN-32-DYNAMIC-NEXT: 	movl	262144([[ECX]],[[EAX]],4), [[ECX:%e.x]]
4157; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[EDX:%e.x]]
4158; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4159; DARWIN-32-DYNAMIC-NEXT: 	ret
4160
4161; DARWIN-32-PIC: _big00:
4162; DARWIN-32-PIC: 	calll	L57$pb
4163; DARWIN-32-PIC-NEXT: L57$pb:
4164; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4165; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4166; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L57$pb([[EAX]]), [[EDX:%e.x]]
4167; DARWIN-32-PIC-NEXT: 	movl	262144([[EDX]],[[ECX]],4), [[EDX:%e.x]]
4168; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L57$pb([[EAX]]), [[EAX:%e.x]]
4169; 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:%r.x]]
4174; DARWIN-64-STATIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4175; DARWIN-64-STATIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
4181; DARWIN-64-DYNAMIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4182; DARWIN-64-DYNAMIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
4188; DARWIN-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4189; DARWIN-64-PIC-NEXT: 	movq	_dst@GOTPCREL(%rip), [[RCX:%r.x]]
4190; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]],%rdi,4)
4191; DARWIN-64-PIC-NEXT: 	ret
4192}
4193
4194define void @big01(i64 %i) nounwind {
4195entry:
4196	%.sum = add i64 %i, 65536
4197	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
4198	store i32* %0, i32** @ptr, align 8
4199	ret void
4200; LINUX-64-STATIC-LABEL: big01:
4201; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), [[RAX:%r.x]]
4202; LINUX-64-STATIC: movq    [[RAX]], ptr(%rip)
4203; LINUX-64-STATIC: ret
4204
4205; LINUX-32-STATIC-LABEL: big01:
4206; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4207; LINUX-32-STATIC-NEXT: 	leal	dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4208; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], ptr
4209; LINUX-32-STATIC-NEXT: 	ret
4210
4211; LINUX-32-PIC-LABEL: big01:
4212; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4213; LINUX-32-PIC-NEXT: 	leal	dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4214; LINUX-32-PIC-NEXT: 	movl	[[EAX]], ptr
4215; LINUX-32-PIC-NEXT: 	ret
4216
4217; LINUX-64-PIC-LABEL: big01:
4218; LINUX-64-PIC: 	movq	dst@GOTPCREL(%rip), [[RAX:%r.x]]
4219; LINUX-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4220; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
4226; DARWIN-32-STATIC-NEXT: 	leal	_dst+262144(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
4232; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[ECX:%e.x]]
4233; DARWIN-32-DYNAMIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), [[EAX:%e.x]]
4234; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[ECX:%e.x]]
4235; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], ([[ECX]])
4236; DARWIN-32-DYNAMIC-NEXT: 	ret
4237
4238; DARWIN-32-PIC: _big01:
4239; DARWIN-32-PIC: 	calll	L58$pb
4240; DARWIN-32-PIC-NEXT: L58$pb:
4241; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4242; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4243; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L58$pb([[EAX]]), [[EDX:%e.x]]
4244; DARWIN-32-PIC-NEXT: 	leal	262144([[EDX]],[[ECX]],4), [[ECX:%e.x]]
4245; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L58$pb([[EAX]]), [[EAX:%e.x]]
4246; 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:%r.x]]
4251; DARWIN-64-STATIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4252; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
4258; DARWIN-64-DYNAMIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4259; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%r.x]]
4265; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4266; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4267; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], ([[RCX]])
4268; DARWIN-64-PIC-NEXT: 	ret
4269}
4270
4271define void @big02(i64 %i) nounwind {
4272entry:
4273	%0 = load i32*, i32** @ptr, align 8
4274	%1 = add i64 %i, 65536
4275	%2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
4276	%3 = load i32, i32* %2, align 4
4277	%4 = getelementptr i32, i32* %0, i64 %1
4278	store i32 %3, i32* %4, align 4
4279	ret void
4280; LINUX-64-STATIC-LABEL: big02:
4281; LINUX-64-STATIC: movl    src+262144(,%rdi,4), [[EAX:%e.x]]
4282; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
4283; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4284; LINUX-64-STATIC: ret
4285
4286; LINUX-32-STATIC-LABEL: big02:
4287; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4288; LINUX-32-STATIC-NEXT: 	movl	src+262144(,[[EAX]],4), [[ECX:%e.x]]
4289; LINUX-32-STATIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
4290; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4291; LINUX-32-STATIC-NEXT: 	ret
4292
4293; LINUX-32-PIC-LABEL: big02:
4294; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4295; LINUX-32-PIC-NEXT: 	movl	src+262144(,[[EAX]],4), [[ECX:%e.x]]
4296; LINUX-32-PIC-NEXT: 	movl	ptr, [[EDX:%e.x]]
4297; LINUX-32-PIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4298; LINUX-32-PIC-NEXT: 	ret
4299
4300; LINUX-64-PIC-LABEL: big02:
4301; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
4302; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4303; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4304; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
4310; DARWIN-32-STATIC-NEXT: 	movl	_src+262144(,[[EAX]],4), [[ECX:%e.x]]
4311; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[EDX:%e.x]]
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:%e.x]]
4317; DARWIN-32-DYNAMIC-NEXT: 	movl	L_src$non_lazy_ptr, [[ECX:%e.x]]
4318; DARWIN-32-DYNAMIC-NEXT: 	movl	262144([[ECX]],[[EAX]],4), [[ECX:%e.x]]
4319; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ptr$non_lazy_ptr, [[EDX:%e.x]]
4320; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EDX]]), [[EDX:%e.x]]
4321; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4322; DARWIN-32-DYNAMIC-NEXT: 	ret
4323
4324; DARWIN-32-PIC: _big02:
4325; DARWIN-32-PIC: 	calll	L59$pb
4326; DARWIN-32-PIC-NEXT: L59$pb:
4327; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4328; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4329; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L59$pb([[EAX]]), [[EDX:%e.x]]
4330; DARWIN-32-PIC-NEXT: 	movl	262144([[EDX]],[[ECX]],4), [[EDX:%e.x]]
4331; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L59$pb([[EAX]]), [[EAX:%e.x]]
4332; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
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:%r.x]]
4338; DARWIN-64-STATIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4339; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4340; DARWIN-64-STATIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
4346; DARWIN-64-DYNAMIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4347; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4348; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%r.x]]
4354; DARWIN-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4355; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4356; DARWIN-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
4357; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]],%rdi,4)
4358; DARWIN-64-PIC-NEXT: 	ret
4359}
4360
4361define void @big03(i64 %i) nounwind {
4362entry:
4363	%0 = add i64 %i, 65536
4364	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
4365	%2 = load i32, i32* %1, align 4
4366	%3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
4367	store i32 %2, i32* %3, align 4
4368	ret void
4369; LINUX-64-STATIC-LABEL: big03:
4370; LINUX-64-STATIC: movl    dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4371; LINUX-64-STATIC: movl    [[EAX]], ddst+262144(,%rdi,4)
4372; LINUX-64-STATIC: ret
4373
4374; LINUX-32-STATIC-LABEL: big03:
4375; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4376; LINUX-32-STATIC-NEXT: 	movl	dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4377; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ddst+262144(,[[EAX]],4)
4378; LINUX-32-STATIC-NEXT: 	ret
4379
4380; LINUX-32-PIC-LABEL: big03:
4381; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4382; LINUX-32-PIC-NEXT: 	movl	dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4383; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ddst+262144(,[[EAX]],4)
4384; LINUX-32-PIC-NEXT: 	ret
4385
4386; LINUX-64-PIC-LABEL: big03:
4387; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
4388; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4389; LINUX-64-PIC-NEXT: 	movq	ddst@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
4395; DARWIN-32-STATIC-NEXT: 	movl	_dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
4401; DARWIN-32-DYNAMIC-NEXT: 	movl	_dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4402; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], _ddst+262144(,[[EAX]],4)
4403; DARWIN-32-DYNAMIC-NEXT: 	ret
4404
4405; DARWIN-32-PIC: _big03:
4406; DARWIN-32-PIC: 	calll	L60$pb
4407; DARWIN-32-PIC-NEXT: L60$pb:
4408; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4409; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4410; DARWIN-32-PIC-NEXT: 	movl	(_dsrc-L60$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4411; DARWIN-32-PIC-NEXT: 	movl	[[EDX]], (_ddst-L60$pb)+262144([[EAX]],[[ECX]],4)
4412; DARWIN-32-PIC-NEXT: 	ret
4413
4414; DARWIN-64-STATIC: _big03:
4415; DARWIN-64-STATIC: 	leaq	_dsrc(%rip), [[RAX:%r.x]]
4416; DARWIN-64-STATIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4417; DARWIN-64-STATIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
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:%r.x]]
4423; DARWIN-64-DYNAMIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4424; DARWIN-64-DYNAMIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
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:%r.x]]
4430; DARWIN-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4431; DARWIN-64-PIC-NEXT: 	leaq	_ddst(%rip), [[RCX:%r.x]]
4432; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]],%rdi,4)
4433; DARWIN-64-PIC-NEXT: 	ret
4434}
4435
4436define void @big04(i64 %i) nounwind {
4437entry:
4438	%.sum = add i64 %i, 65536
4439	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
4440	store i32* %0, i32** @dptr, align 8
4441	ret void
4442; LINUX-64-STATIC-LABEL: big04:
4443; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), [[RAX:%r.x]]
4444; LINUX-64-STATIC: movq    [[RAX]], dptr
4445; LINUX-64-STATIC: ret
4446
4447; LINUX-32-STATIC-LABEL: big04:
4448; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4449; LINUX-32-STATIC-NEXT: 	leal	ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4450; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], dptr
4451; LINUX-32-STATIC-NEXT: 	ret
4452
4453; LINUX-32-PIC-LABEL: big04:
4454; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4455; LINUX-32-PIC-NEXT: 	leal	ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4456; LINUX-32-PIC-NEXT: 	movl	[[EAX]], dptr
4457; LINUX-32-PIC-NEXT: 	ret
4458
4459; LINUX-64-PIC-LABEL: big04:
4460; LINUX-64-PIC: 	movq	ddst@GOTPCREL(%rip), [[RAX:%r.x]]
4461; LINUX-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4462; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
4468; DARWIN-32-STATIC-NEXT: 	leal	_ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
4474; DARWIN-32-DYNAMIC-NEXT: 	leal	_ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4475; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _dptr
4476; DARWIN-32-DYNAMIC-NEXT: 	ret
4477
4478; DARWIN-32-PIC: _big04:
4479; DARWIN-32-PIC: 	calll	L61$pb
4480; DARWIN-32-PIC-NEXT: L61$pb:
4481; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4482; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4483; DARWIN-32-PIC-NEXT: 	leal	(_ddst-L61$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]]
4484; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _dptr-L61$pb([[EAX]])
4485; DARWIN-32-PIC-NEXT: 	ret
4486
4487; DARWIN-64-STATIC: _big04:
4488; DARWIN-64-STATIC: 	leaq	_ddst(%rip), [[RAX:%r.x]]
4489; DARWIN-64-STATIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
4495; DARWIN-64-DYNAMIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
4501; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4502; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _dptr(%rip)
4503; DARWIN-64-PIC-NEXT: 	ret
4504}
4505
4506define void @big05(i64 %i) nounwind {
4507entry:
4508	%0 = load i32*, i32** @dptr, align 8
4509	%1 = add i64 %i, 65536
4510	%2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
4511	%3 = load i32, i32* %2, align 4
4512	%4 = getelementptr i32, i32* %0, i64 %1
4513	store i32 %3, i32* %4, align 4
4514	ret void
4515; LINUX-64-STATIC-LABEL: big05:
4516; LINUX-64-STATIC: movl    dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4517; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
4518; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4519; LINUX-64-STATIC: ret
4520
4521; LINUX-32-STATIC-LABEL: big05:
4522; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4523; LINUX-32-STATIC-NEXT: 	movl	dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4524; LINUX-32-STATIC-NEXT: 	movl	dptr, [[EDX:%e.x]]
4525; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4526; LINUX-32-STATIC-NEXT: 	ret
4527
4528; LINUX-32-PIC-LABEL: big05:
4529; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4530; LINUX-32-PIC-NEXT: 	movl	dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4531; LINUX-32-PIC-NEXT: 	movl	dptr, [[EDX:%e.x]]
4532; LINUX-32-PIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4533; LINUX-32-PIC-NEXT: 	ret
4534
4535; LINUX-64-PIC-LABEL: big05:
4536; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
4537; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4538; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
4539; LINUX-64-PIC-NEXT: 	movq	([[RCX]]), [[RCX:%r.x]]
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:%e.x]]
4545; DARWIN-32-STATIC-NEXT: 	movl	_dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4546; DARWIN-32-STATIC-NEXT: 	movl	_dptr, [[EDX:%e.x]]
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:%e.x]]
4552; DARWIN-32-DYNAMIC-NEXT: 	movl	_dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4553; DARWIN-32-DYNAMIC-NEXT: 	movl	_dptr, [[EDX:%e.x]]
4554; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4555; DARWIN-32-DYNAMIC-NEXT: 	ret
4556
4557; DARWIN-32-PIC: _big05:
4558; DARWIN-32-PIC: 	calll	L62$pb
4559; DARWIN-32-PIC-NEXT: L62$pb:
4560; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4561; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4562; DARWIN-32-PIC-NEXT: 	movl	(_dsrc-L62$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4563; DARWIN-32-PIC-NEXT: 	movl	_dptr-L62$pb([[EAX]]), [[EAX:%e.x]]
4564; 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:%r.x]]
4569; DARWIN-64-STATIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4570; DARWIN-64-STATIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%r.x]]
4576; DARWIN-64-DYNAMIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4577; DARWIN-64-DYNAMIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
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:%r.x]]
4583; DARWIN-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4584; DARWIN-64-PIC-NEXT: 	movq	_dptr(%rip), [[RCX:%r.x]]
4585; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]],%rdi,4)
4586; DARWIN-64-PIC-NEXT: 	ret
4587}
4588
4589define void @big06(i64 %i) nounwind {
4590entry:
4591	%0 = add i64 %i, 65536
4592	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
4593	%2 = load i32, i32* %1, align 4
4594	%3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
4595	store i32 %2, i32* %3, align 4
4596	ret void
4597; LINUX-64-STATIC-LABEL: big06:
4598; LINUX-64-STATIC: movl    lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4599; LINUX-64-STATIC: movl    [[EAX]], ldst+262144(,%rdi,4)
4600; LINUX-64-STATIC: ret
4601
4602; LINUX-32-STATIC-LABEL: big06:
4603; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4604; LINUX-32-STATIC-NEXT: 	movl	lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4605; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], ldst+262144(,[[EAX]],4)
4606; LINUX-32-STATIC-NEXT: 	ret
4607
4608; LINUX-32-PIC-LABEL: big06:
4609; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4610; LINUX-32-PIC-NEXT: 	movl	lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4611; LINUX-32-PIC-NEXT: 	movl	[[ECX]], ldst+262144(,[[EAX]],4)
4612; LINUX-32-PIC-NEXT: 	ret
4613
4614; LINUX-64-PIC-LABEL: big06:
4615; LINUX-64-PIC: 	leaq	lsrc(%rip), [[RAX:%r.x]]
4616; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4617; LINUX-64-PIC-NEXT: 	leaq	ldst(%rip), [[RCX:%r.x]]
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:%e.x]]
4623; DARWIN-32-STATIC-NEXT: 	movl	_lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
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:%e.x]]
4629; DARWIN-32-DYNAMIC-NEXT: 	movl	_lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4630; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], _ldst+262144(,[[EAX]],4)
4631; DARWIN-32-DYNAMIC-NEXT: 	ret
4632
4633; DARWIN-32-PIC: _big06:
4634; DARWIN-32-PIC: 	calll	L63$pb
4635; DARWIN-32-PIC-NEXT: L63$pb:
4636; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4637; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4638; DARWIN-32-PIC-NEXT: 	movl	(_lsrc-L63$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4639; DARWIN-32-PIC-NEXT: 	movl	[[EDX]], (_ldst-L63$pb)+262144([[EAX]],[[ECX]],4)
4640; DARWIN-32-PIC-NEXT: 	ret
4641
4642; DARWIN-64-STATIC: _big06:
4643; DARWIN-64-STATIC: 	leaq	_lsrc(%rip), [[RAX:%r.x]]
4644; DARWIN-64-STATIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4645; DARWIN-64-STATIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
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:%r.x]]
4651; DARWIN-64-DYNAMIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4652; DARWIN-64-DYNAMIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
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:%r.x]]
4658; DARWIN-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4659; DARWIN-64-PIC-NEXT: 	leaq	_ldst(%rip), [[RCX:%r.x]]
4660; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]],%rdi,4)
4661; DARWIN-64-PIC-NEXT: 	ret
4662}
4663
4664define void @big07(i64 %i) nounwind {
4665entry:
4666	%.sum = add i64 %i, 65536
4667	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
4668	store i32* %0, i32** @lptr, align 8
4669	ret void
4670; LINUX-64-STATIC-LABEL: big07:
4671; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), [[RAX:%r.x]]
4672; LINUX-64-STATIC: movq    [[RAX]], lptr
4673; LINUX-64-STATIC: ret
4674
4675; LINUX-32-STATIC-LABEL: big07:
4676; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4677; LINUX-32-STATIC-NEXT: 	leal	ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4678; LINUX-32-STATIC-NEXT: 	movl	[[EAX]], lptr
4679; LINUX-32-STATIC-NEXT: 	ret
4680
4681; LINUX-32-PIC-LABEL: big07:
4682; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4683; LINUX-32-PIC-NEXT: 	leal	ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4684; LINUX-32-PIC-NEXT: 	movl	[[EAX]], lptr
4685; LINUX-32-PIC-NEXT: 	ret
4686
4687; LINUX-64-PIC-LABEL: big07:
4688; LINUX-64-PIC: 	leaq	ldst(%rip), [[RAX:%r.x]]
4689; LINUX-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%e.x]]
4695; DARWIN-32-STATIC-NEXT: 	leal	_ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
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:%e.x]]
4701; DARWIN-32-DYNAMIC-NEXT: 	leal	_ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4702; DARWIN-32-DYNAMIC-NEXT: 	movl	[[EAX]], _lptr
4703; DARWIN-32-DYNAMIC-NEXT: 	ret
4704
4705; DARWIN-32-PIC: _big07:
4706; DARWIN-32-PIC: 	calll	L64$pb
4707; DARWIN-32-PIC-NEXT: L64$pb:
4708; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4709; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4710; DARWIN-32-PIC-NEXT: 	leal	(_ldst-L64$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]]
4711; DARWIN-32-PIC-NEXT: 	movl	[[ECX]], _lptr-L64$pb([[EAX]])
4712; DARWIN-32-PIC-NEXT: 	ret
4713
4714; DARWIN-64-STATIC: _big07:
4715; DARWIN-64-STATIC: 	leaq	_ldst(%rip), [[RAX:%r.x]]
4716; DARWIN-64-STATIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
4722; DARWIN-64-DYNAMIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
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:%r.x]]
4728; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4729; DARWIN-64-PIC-NEXT: 	movq	[[RAX]], _lptr(%rip)
4730; DARWIN-64-PIC-NEXT: 	ret
4731}
4732
4733define void @big08(i64 %i) nounwind {
4734entry:
4735	%0 = load i32*, i32** @lptr, align 8
4736	%1 = add i64 %i, 65536
4737	%2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
4738	%3 = load i32, i32* %2, align 4
4739	%4 = getelementptr i32, i32* %0, i64 %1
4740	store i32 %3, i32* %4, align 4
4741	ret void
4742; LINUX-64-STATIC-LABEL: big08:
4743; LINUX-64-STATIC: movl    lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4744; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
4745; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4746; LINUX-64-STATIC: ret
4747
4748; LINUX-32-STATIC-LABEL: big08:
4749; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
4750; LINUX-32-STATIC-NEXT: 	movl	lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4751; LINUX-32-STATIC-NEXT: 	movl	lptr, [[EDX:%e.x]]
4752; LINUX-32-STATIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4753; LINUX-32-STATIC-NEXT: 	ret
4754
4755; LINUX-32-PIC-LABEL: big08:
4756; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
4757; LINUX-32-PIC-NEXT: 	movl	lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4758; LINUX-32-PIC-NEXT: 	movl	lptr, [[EDX:%e.x]]
4759; LINUX-32-PIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4760; LINUX-32-PIC-NEXT: 	ret
4761
4762; LINUX-64-PIC-LABEL: big08:
4763; LINUX-64-PIC: 	leaq	lsrc(%rip), [[RAX:%r.x]]
4764; LINUX-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4765; LINUX-64-PIC-NEXT: 	movq	lptr(%rip), [[RCX:%r.x]]
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:%e.x]]
4771; DARWIN-32-STATIC-NEXT: 	movl	_lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4772; DARWIN-32-STATIC-NEXT: 	movl	_lptr, [[EDX:%e.x]]
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:%e.x]]
4778; DARWIN-32-DYNAMIC-NEXT: 	movl	_lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4779; DARWIN-32-DYNAMIC-NEXT: 	movl	_lptr, [[EDX:%e.x]]
4780; DARWIN-32-DYNAMIC-NEXT: 	movl	[[ECX]], 262144([[EDX]],[[EAX]],4)
4781; DARWIN-32-DYNAMIC-NEXT: 	ret
4782
4783; DARWIN-32-PIC: _big08:
4784; DARWIN-32-PIC: 	calll	L65$pb
4785; DARWIN-32-PIC-NEXT: L65$pb:
4786; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4787; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
4788; DARWIN-32-PIC-NEXT: 	movl	(_lsrc-L65$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4789; DARWIN-32-PIC-NEXT: 	movl	_lptr-L65$pb([[EAX]]), [[EAX:%e.x]]
4790; 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:%r.x]]
4795; DARWIN-64-STATIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4796; DARWIN-64-STATIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%r.x]]
4802; DARWIN-64-DYNAMIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4803; DARWIN-64-DYNAMIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
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:%r.x]]
4809; DARWIN-64-PIC-NEXT: 	movl	262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4810; DARWIN-64-PIC-NEXT: 	movq	_lptr(%rip), [[RCX:%r.x]]
4811; DARWIN-64-PIC-NEXT: 	movl	[[EAX]], 262144([[RCX]],%rdi,4)
4812; DARWIN-64-PIC-NEXT: 	ret
4813}
4814
4815define i8* @bar00() nounwind {
4816entry:
4817	ret i8* bitcast ([131072 x i32]* @src to i8*)
4818; LINUX-64-STATIC-LABEL: bar00:
4819; LINUX-64-STATIC: movl    $src, %eax
4820; LINUX-64-STATIC: ret
4821
4822; LINUX-32-STATIC-LABEL: bar00:
4823; LINUX-32-STATIC: 	movl	$src, %eax
4824; LINUX-32-STATIC-NEXT: 	ret
4825
4826; LINUX-32-PIC-LABEL: bar00:
4827; LINUX-32-PIC: 	movl	$src, %eax
4828; LINUX-32-PIC-NEXT: 	ret
4829
4830; LINUX-64-PIC-LABEL: 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:
4843; DARWIN-32-PIC: 	calll	L66$pb
4844; DARWIN-32-PIC-NEXT: L66$pb:
4845; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4846; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L66$pb([[EAX]]), %eax
4847; 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
4860}
4861
4862define i8* @bxr00() nounwind {
4863entry:
4864	ret i8* bitcast ([32 x i32]* @xsrc to i8*)
4865; LINUX-64-STATIC-LABEL: bxr00:
4866; LINUX-64-STATIC: movl    $xsrc, %eax
4867; LINUX-64-STATIC: ret
4868
4869; LINUX-32-STATIC-LABEL: bxr00:
4870; LINUX-32-STATIC: 	movl	$xsrc, %eax
4871; LINUX-32-STATIC-NEXT: 	ret
4872
4873; LINUX-32-PIC-LABEL: bxr00:
4874; LINUX-32-PIC: 	movl	$xsrc, %eax
4875; LINUX-32-PIC-NEXT: 	ret
4876
4877; LINUX-64-PIC-LABEL: 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:
4890; DARWIN-32-PIC: 	calll	L67$pb
4891; DARWIN-32-PIC-NEXT: L67$pb:
4892; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4893; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L67$pb([[EAX]]), %eax
4894; 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
4907}
4908
4909define i8* @bar01() nounwind {
4910entry:
4911	ret i8* bitcast ([131072 x i32]* @dst to i8*)
4912; LINUX-64-STATIC-LABEL: bar01:
4913; LINUX-64-STATIC: movl    $dst, %eax
4914; LINUX-64-STATIC: ret
4915
4916; LINUX-32-STATIC-LABEL: bar01:
4917; LINUX-32-STATIC: 	movl	$dst, %eax
4918; LINUX-32-STATIC-NEXT: 	ret
4919
4920; LINUX-32-PIC-LABEL: bar01:
4921; LINUX-32-PIC: 	movl	$dst, %eax
4922; LINUX-32-PIC-NEXT: 	ret
4923
4924; LINUX-64-PIC-LABEL: 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:
4937; DARWIN-32-PIC: 	calll	L68$pb
4938; DARWIN-32-PIC-NEXT: L68$pb:
4939; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4940; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L68$pb([[EAX]]), %eax
4941; 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
4954}
4955
4956define i8* @bxr01() nounwind {
4957entry:
4958	ret i8* bitcast ([32 x i32]* @xdst to i8*)
4959; LINUX-64-STATIC-LABEL: bxr01:
4960; LINUX-64-STATIC: movl    $xdst, %eax
4961; LINUX-64-STATIC: ret
4962
4963; LINUX-32-STATIC-LABEL: bxr01:
4964; LINUX-32-STATIC: 	movl	$xdst, %eax
4965; LINUX-32-STATIC-NEXT: 	ret
4966
4967; LINUX-32-PIC-LABEL: bxr01:
4968; LINUX-32-PIC: 	movl	$xdst, %eax
4969; LINUX-32-PIC-NEXT: 	ret
4970
4971; LINUX-64-PIC-LABEL: 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:
4984; DARWIN-32-PIC: 	calll	L69$pb
4985; DARWIN-32-PIC-NEXT: L69$pb:
4986; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
4987; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L69$pb([[EAX]]), %eax
4988; 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
5001}
5002
5003define i8* @bar02() nounwind {
5004entry:
5005	ret i8* bitcast (i32** @ptr to i8*)
5006; LINUX-64-STATIC-LABEL: bar02:
5007; LINUX-64-STATIC: movl    $ptr, %eax
5008; LINUX-64-STATIC: ret
5009
5010; LINUX-32-STATIC-LABEL: bar02:
5011; LINUX-32-STATIC: 	movl	$ptr, %eax
5012; LINUX-32-STATIC-NEXT: 	ret
5013
5014; LINUX-32-PIC-LABEL: bar02:
5015; LINUX-32-PIC: 	movl	$ptr, %eax
5016; LINUX-32-PIC-NEXT: 	ret
5017
5018; LINUX-64-PIC-LABEL: 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:
5031; DARWIN-32-PIC: 	calll	L70$pb
5032; DARWIN-32-PIC-NEXT: L70$pb:
5033; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5034; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L70$pb([[EAX]]), %eax
5035; 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
5048}
5049
5050define i8* @bar03() nounwind {
5051entry:
5052	ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
5053; LINUX-64-STATIC-LABEL: bar03:
5054; LINUX-64-STATIC: movl    $dsrc, %eax
5055; LINUX-64-STATIC: ret
5056
5057; LINUX-32-STATIC-LABEL: bar03:
5058; LINUX-32-STATIC: 	movl	$dsrc, %eax
5059; LINUX-32-STATIC-NEXT: 	ret
5060
5061; LINUX-32-PIC-LABEL: bar03:
5062; LINUX-32-PIC: 	movl	$dsrc, %eax
5063; LINUX-32-PIC-NEXT: 	ret
5064
5065; LINUX-64-PIC-LABEL: 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:
5078; DARWIN-32-PIC: 	calll	L71$pb
5079; DARWIN-32-PIC-NEXT: L71$pb:
5080; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5081; DARWIN-32-PIC-NEXT: 	leal	_dsrc-L71$pb([[EAX]]), %eax
5082; 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
5095}
5096
5097define i8* @bar04() nounwind {
5098entry:
5099	ret i8* bitcast ([131072 x i32]* @ddst to i8*)
5100; LINUX-64-STATIC-LABEL: bar04:
5101; LINUX-64-STATIC: movl    $ddst, %eax
5102; LINUX-64-STATIC: ret
5103
5104; LINUX-32-STATIC-LABEL: bar04:
5105; LINUX-32-STATIC: 	movl	$ddst, %eax
5106; LINUX-32-STATIC-NEXT: 	ret
5107
5108; LINUX-32-PIC-LABEL: bar04:
5109; LINUX-32-PIC: 	movl	$ddst, %eax
5110; LINUX-32-PIC-NEXT: 	ret
5111
5112; LINUX-64-PIC-LABEL: 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:
5125; DARWIN-32-PIC: 	calll	L72$pb
5126; DARWIN-32-PIC-NEXT: L72$pb:
5127; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5128; DARWIN-32-PIC-NEXT: 	leal	_ddst-L72$pb([[EAX]]), %eax
5129; 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
5142}
5143
5144define i8* @bar05() nounwind {
5145entry:
5146	ret i8* bitcast (i32** @dptr to i8*)
5147; LINUX-64-STATIC-LABEL: bar05:
5148; LINUX-64-STATIC: movl    $dptr, %eax
5149; LINUX-64-STATIC: ret
5150
5151; LINUX-32-STATIC-LABEL: bar05:
5152; LINUX-32-STATIC: 	movl	$dptr, %eax
5153; LINUX-32-STATIC-NEXT: 	ret
5154
5155; LINUX-32-PIC-LABEL: bar05:
5156; LINUX-32-PIC: 	movl	$dptr, %eax
5157; LINUX-32-PIC-NEXT: 	ret
5158
5159; LINUX-64-PIC-LABEL: 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:
5172; DARWIN-32-PIC: 	calll	L73$pb
5173; DARWIN-32-PIC-NEXT: L73$pb:
5174; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5175; DARWIN-32-PIC-NEXT: 	leal	_dptr-L73$pb([[EAX]]), %eax
5176; 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
5189}
5190
5191define i8* @bar06() nounwind {
5192entry:
5193	ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
5194; LINUX-64-STATIC-LABEL: bar06:
5195; LINUX-64-STATIC: movl    $lsrc, %eax
5196; LINUX-64-STATIC: ret
5197
5198; LINUX-32-STATIC-LABEL: bar06:
5199; LINUX-32-STATIC: 	movl	$lsrc, %eax
5200; LINUX-32-STATIC-NEXT: 	ret
5201
5202; LINUX-32-PIC-LABEL: bar06:
5203; LINUX-32-PIC: 	movl	$lsrc, %eax
5204; LINUX-32-PIC-NEXT: 	ret
5205
5206; LINUX-64-PIC-LABEL: 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:
5219; DARWIN-32-PIC: 	calll	L74$pb
5220; DARWIN-32-PIC-NEXT: L74$pb:
5221; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5222; DARWIN-32-PIC-NEXT: 	leal	_lsrc-L74$pb([[EAX]]), %eax
5223; 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
5236}
5237
5238define i8* @bar07() nounwind {
5239entry:
5240	ret i8* bitcast ([131072 x i32]* @ldst to i8*)
5241; LINUX-64-STATIC-LABEL: bar07:
5242; LINUX-64-STATIC: movl    $ldst, %eax
5243; LINUX-64-STATIC: ret
5244
5245; LINUX-32-STATIC-LABEL: bar07:
5246; LINUX-32-STATIC: 	movl	$ldst, %eax
5247; LINUX-32-STATIC-NEXT: 	ret
5248
5249; LINUX-32-PIC-LABEL: bar07:
5250; LINUX-32-PIC: 	movl	$ldst, %eax
5251; LINUX-32-PIC-NEXT: 	ret
5252
5253; LINUX-64-PIC-LABEL: 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:
5266; DARWIN-32-PIC: 	calll	L75$pb
5267; DARWIN-32-PIC-NEXT: L75$pb:
5268; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5269; DARWIN-32-PIC-NEXT: 	leal	_ldst-L75$pb([[EAX]]), %eax
5270; 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
5283}
5284
5285define i8* @bar08() nounwind {
5286entry:
5287	ret i8* bitcast (i32** @lptr to i8*)
5288; LINUX-64-STATIC-LABEL: bar08:
5289; LINUX-64-STATIC: movl    $lptr, %eax
5290; LINUX-64-STATIC: ret
5291
5292; LINUX-32-STATIC-LABEL: bar08:
5293; LINUX-32-STATIC: 	movl	$lptr, %eax
5294; LINUX-32-STATIC-NEXT: 	ret
5295
5296; LINUX-32-PIC-LABEL: bar08:
5297; LINUX-32-PIC: 	movl	$lptr, %eax
5298; LINUX-32-PIC-NEXT: 	ret
5299
5300; LINUX-64-PIC-LABEL: 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:
5313; DARWIN-32-PIC: 	calll	L76$pb
5314; DARWIN-32-PIC-NEXT: L76$pb:
5315; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5316; DARWIN-32-PIC-NEXT: 	leal	_lptr-L76$pb([[EAX]]), %eax
5317; 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
5330}
5331
5332define i8* @har00() nounwind {
5333entry:
5334	ret i8* bitcast ([131072 x i32]* @src to i8*)
5335; LINUX-64-STATIC-LABEL: har00:
5336; LINUX-64-STATIC: movl    $src, %eax
5337; LINUX-64-STATIC: ret
5338
5339; LINUX-32-STATIC-LABEL: har00:
5340; LINUX-32-STATIC: 	movl	$src, %eax
5341; LINUX-32-STATIC-NEXT: 	ret
5342
5343; LINUX-32-PIC-LABEL: har00:
5344; LINUX-32-PIC: 	movl	$src, %eax
5345; LINUX-32-PIC-NEXT: 	ret
5346
5347; LINUX-64-PIC-LABEL: 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:
5360; DARWIN-32-PIC: 	calll	L77$pb
5361; DARWIN-32-PIC-NEXT: L77$pb:
5362; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5363; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L77$pb([[EAX]]), %eax
5364; 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
5377}
5378
5379define i8* @hxr00() nounwind {
5380entry:
5381	ret i8* bitcast ([32 x i32]* @xsrc to i8*)
5382; LINUX-64-STATIC-LABEL: hxr00:
5383; LINUX-64-STATIC: movl    $xsrc, %eax
5384; LINUX-64-STATIC: ret
5385
5386; LINUX-32-STATIC-LABEL: hxr00:
5387; LINUX-32-STATIC: 	movl	$xsrc, %eax
5388; LINUX-32-STATIC-NEXT: 	ret
5389
5390; LINUX-32-PIC-LABEL: hxr00:
5391; LINUX-32-PIC: 	movl	$xsrc, %eax
5392; LINUX-32-PIC-NEXT: 	ret
5393
5394; LINUX-64-PIC-LABEL: 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:
5407; DARWIN-32-PIC: 	calll	L78$pb
5408; DARWIN-32-PIC-NEXT: L78$pb:
5409; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5410; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L78$pb([[EAX]]), %eax
5411; 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
5424}
5425
5426define i8* @har01() nounwind {
5427entry:
5428	ret i8* bitcast ([131072 x i32]* @dst to i8*)
5429; LINUX-64-STATIC-LABEL: har01:
5430; LINUX-64-STATIC: movl    $dst, %eax
5431; LINUX-64-STATIC: ret
5432
5433; LINUX-32-STATIC-LABEL: har01:
5434; LINUX-32-STATIC: 	movl	$dst, %eax
5435; LINUX-32-STATIC-NEXT: 	ret
5436
5437; LINUX-32-PIC-LABEL: har01:
5438; LINUX-32-PIC: 	movl	$dst, %eax
5439; LINUX-32-PIC-NEXT: 	ret
5440
5441; LINUX-64-PIC-LABEL: 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:
5454; DARWIN-32-PIC: 	calll	L79$pb
5455; DARWIN-32-PIC-NEXT: L79$pb:
5456; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5457; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L79$pb([[EAX]]), %eax
5458; 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
5471}
5472
5473define i8* @hxr01() nounwind {
5474entry:
5475	ret i8* bitcast ([32 x i32]* @xdst to i8*)
5476; LINUX-64-STATIC-LABEL: hxr01:
5477; LINUX-64-STATIC: movl    $xdst, %eax
5478; LINUX-64-STATIC: ret
5479
5480; LINUX-32-STATIC-LABEL: hxr01:
5481; LINUX-32-STATIC: 	movl	$xdst, %eax
5482; LINUX-32-STATIC-NEXT: 	ret
5483
5484; LINUX-32-PIC-LABEL: hxr01:
5485; LINUX-32-PIC: 	movl	$xdst, %eax
5486; LINUX-32-PIC-NEXT: 	ret
5487
5488; LINUX-64-PIC-LABEL: 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:
5501; DARWIN-32-PIC: 	calll	L80$pb
5502; DARWIN-32-PIC-NEXT: L80$pb:
5503; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5504; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L80$pb([[EAX]]), %eax
5505; 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
5518}
5519
5520define i8* @har02() nounwind {
5521entry:
5522	%0 = load i32*, i32** @ptr, align 8
5523	%1 = bitcast i32* %0 to i8*
5524	ret i8* %1
5525; LINUX-64-STATIC-LABEL: har02:
5526; LINUX-64-STATIC: movq    ptr(%rip), %rax
5527; LINUX-64-STATIC: ret
5528
5529; LINUX-32-STATIC-LABEL: har02:
5530; LINUX-32-STATIC: 	movl	ptr, %eax
5531; LINUX-32-STATIC-NEXT: 	ret
5532
5533; LINUX-32-PIC-LABEL: har02:
5534; LINUX-32-PIC: 	movl	ptr, %eax
5535; LINUX-32-PIC-NEXT: 	ret
5536
5537; LINUX-64-PIC-LABEL: har02:
5538; LINUX-64-PIC: 	movq	ptr@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
5548; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EAX]]), %eax
5549; DARWIN-32-DYNAMIC-NEXT: 	ret
5550
5551; DARWIN-32-PIC: _har02:
5552; DARWIN-32-PIC: 	calll	L81$pb
5553; DARWIN-32-PIC-NEXT: L81$pb:
5554; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5555; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L81$pb([[EAX]]), [[EAX:%e.x]]
5556; 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:%r.x]]
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:%r.x]]
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:%r.x]]
5571; DARWIN-64-PIC-NEXT: 	movq	([[RAX]]), %rax
5572; DARWIN-64-PIC-NEXT: 	ret
5573}
5574
5575define i8* @har03() nounwind {
5576entry:
5577	ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
5578; LINUX-64-STATIC-LABEL: har03:
5579; LINUX-64-STATIC: movl    $dsrc, %eax
5580; LINUX-64-STATIC: ret
5581
5582; LINUX-32-STATIC-LABEL: har03:
5583; LINUX-32-STATIC: 	movl	$dsrc, %eax
5584; LINUX-32-STATIC-NEXT: 	ret
5585
5586; LINUX-32-PIC-LABEL: har03:
5587; LINUX-32-PIC: 	movl	$dsrc, %eax
5588; LINUX-32-PIC-NEXT: 	ret
5589
5590; LINUX-64-PIC-LABEL: 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:
5603; DARWIN-32-PIC: 	calll	L82$pb
5604; DARWIN-32-PIC-NEXT: L82$pb:
5605; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5606; DARWIN-32-PIC-NEXT: 	leal	_dsrc-L82$pb([[EAX]]), %eax
5607; 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
5620}
5621
5622define i8* @har04() nounwind {
5623entry:
5624	ret i8* bitcast ([131072 x i32]* @ddst to i8*)
5625; LINUX-64-STATIC-LABEL: har04:
5626; LINUX-64-STATIC: movl    $ddst, %eax
5627; LINUX-64-STATIC: ret
5628
5629; LINUX-32-STATIC-LABEL: har04:
5630; LINUX-32-STATIC: 	movl	$ddst, %eax
5631; LINUX-32-STATIC-NEXT: 	ret
5632
5633; LINUX-32-PIC-LABEL: har04:
5634; LINUX-32-PIC: 	movl	$ddst, %eax
5635; LINUX-32-PIC-NEXT: 	ret
5636
5637; LINUX-64-PIC-LABEL: 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:
5650; DARWIN-32-PIC: 	calll	L83$pb
5651; DARWIN-32-PIC-NEXT: L83$pb:
5652; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5653; DARWIN-32-PIC-NEXT: 	leal	_ddst-L83$pb([[EAX]]), %eax
5654; 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
5667}
5668
5669define i8* @har05() nounwind {
5670entry:
5671	%0 = load i32*, i32** @dptr, align 8
5672	%1 = bitcast i32* %0 to i8*
5673	ret i8* %1
5674; LINUX-64-STATIC-LABEL: har05:
5675; LINUX-64-STATIC: movq    dptr(%rip), %rax
5676; LINUX-64-STATIC: ret
5677
5678; LINUX-32-STATIC-LABEL: har05:
5679; LINUX-32-STATIC: 	movl	dptr, %eax
5680; LINUX-32-STATIC-NEXT: 	ret
5681
5682; LINUX-32-PIC-LABEL: har05:
5683; LINUX-32-PIC: 	movl	dptr, %eax
5684; LINUX-32-PIC-NEXT: 	ret
5685
5686; LINUX-64-PIC-LABEL: har05:
5687; LINUX-64-PIC: 	movq	dptr@GOTPCREL(%rip), [[RAX:%r.x]]
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:
5700; DARWIN-32-PIC: 	calll	L84$pb
5701; DARWIN-32-PIC-NEXT: L84$pb:
5702; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5703; DARWIN-32-PIC-NEXT: 	movl	_dptr-L84$pb([[EAX]]), %eax
5704; 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
5717}
5718
5719define i8* @har06() nounwind {
5720entry:
5721	ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
5722; LINUX-64-STATIC-LABEL: har06:
5723; LINUX-64-STATIC: movl    $lsrc, %eax
5724; LINUX-64-STATIC: ret
5725
5726; LINUX-32-STATIC-LABEL: har06:
5727; LINUX-32-STATIC: 	movl	$lsrc, %eax
5728; LINUX-32-STATIC-NEXT: 	ret
5729
5730; LINUX-32-PIC-LABEL: har06:
5731; LINUX-32-PIC: 	movl	$lsrc, %eax
5732; LINUX-32-PIC-NEXT: 	ret
5733
5734; LINUX-64-PIC-LABEL: 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:
5747; DARWIN-32-PIC: 	calll	L85$pb
5748; DARWIN-32-PIC-NEXT: L85$pb:
5749; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5750; DARWIN-32-PIC-NEXT: 	leal	_lsrc-L85$pb([[EAX]]), %eax
5751; 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
5764}
5765
5766define i8* @har07() nounwind {
5767entry:
5768	ret i8* bitcast ([131072 x i32]* @ldst to i8*)
5769; LINUX-64-STATIC-LABEL: har07:
5770; LINUX-64-STATIC: movl    $ldst, %eax
5771; LINUX-64-STATIC: ret
5772
5773; LINUX-32-STATIC-LABEL: har07:
5774; LINUX-32-STATIC: 	movl	$ldst, %eax
5775; LINUX-32-STATIC-NEXT: 	ret
5776
5777; LINUX-32-PIC-LABEL: har07:
5778; LINUX-32-PIC: 	movl	$ldst, %eax
5779; LINUX-32-PIC-NEXT: 	ret
5780
5781; LINUX-64-PIC-LABEL: 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:
5794; DARWIN-32-PIC: 	calll	L86$pb
5795; DARWIN-32-PIC-NEXT: L86$pb:
5796; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5797; DARWIN-32-PIC-NEXT: 	leal	_ldst-L86$pb([[EAX]]), %eax
5798; 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
5811}
5812
5813define i8* @har08() nounwind {
5814entry:
5815	%0 = load i32*, i32** @lptr, align 8
5816	%1 = bitcast i32* %0 to i8*
5817	ret i8* %1
5818; LINUX-64-STATIC-LABEL: har08:
5819; LINUX-64-STATIC: movq    lptr(%rip), %rax
5820; LINUX-64-STATIC: ret
5821
5822; LINUX-32-STATIC-LABEL: har08:
5823; LINUX-32-STATIC: 	movl	lptr, %eax
5824; LINUX-32-STATIC-NEXT: 	ret
5825
5826; LINUX-32-PIC-LABEL: har08:
5827; LINUX-32-PIC: 	movl	lptr, %eax
5828; LINUX-32-PIC-NEXT: 	ret
5829
5830; LINUX-64-PIC-LABEL: 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:
5843; DARWIN-32-PIC: 	calll	L87$pb
5844; DARWIN-32-PIC-NEXT: L87$pb:
5845; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5846; DARWIN-32-PIC-NEXT: 	movl	_lptr-L87$pb([[EAX]]), %eax
5847; 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
5860}
5861
5862define i8* @bat00() nounwind {
5863entry:
5864	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16) to i8*)
5865; LINUX-64-STATIC-LABEL: bat00:
5866; LINUX-64-STATIC: movl    $src+64, %eax
5867; LINUX-64-STATIC: ret
5868
5869; LINUX-32-STATIC-LABEL: bat00:
5870; LINUX-32-STATIC: 	movl	$src+64, %eax
5871; LINUX-32-STATIC-NEXT: 	ret
5872
5873; LINUX-32-PIC-LABEL: bat00:
5874; LINUX-32-PIC: 	movl	$src+64, %eax
5875; LINUX-32-PIC-NEXT: 	ret
5876
5877; LINUX-64-PIC-LABEL: 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:
5892; DARWIN-32-PIC: 	calll	L88$pb
5893; DARWIN-32-PIC-NEXT: L88$pb:
5894; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5895; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L88$pb([[EAX]]), %eax
5896; 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
5913}
5914
5915define i8* @bxt00() nounwind {
5916entry:
5917	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16) to i8*)
5918; LINUX-64-STATIC-LABEL: bxt00:
5919; LINUX-64-STATIC: movl    $xsrc+64, %eax
5920; LINUX-64-STATIC: ret
5921
5922; LINUX-32-STATIC-LABEL: bxt00:
5923; LINUX-32-STATIC: 	movl	$xsrc+64, %eax
5924; LINUX-32-STATIC-NEXT: 	ret
5925
5926; LINUX-32-PIC-LABEL: bxt00:
5927; LINUX-32-PIC: 	movl	$xsrc+64, %eax
5928; LINUX-32-PIC-NEXT: 	ret
5929
5930; LINUX-64-PIC-LABEL: 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:
5945; DARWIN-32-PIC: 	calll	L89$pb
5946; DARWIN-32-PIC-NEXT: L89$pb:
5947; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
5948; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L89$pb([[EAX]]), %eax
5949; 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
5966}
5967
5968define i8* @bat01() nounwind {
5969entry:
5970	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16) to i8*)
5971; LINUX-64-STATIC-LABEL: bat01:
5972; LINUX-64-STATIC: movl    $dst+64, %eax
5973; LINUX-64-STATIC: ret
5974
5975; LINUX-32-STATIC-LABEL: bat01:
5976; LINUX-32-STATIC: 	movl	$dst+64, %eax
5977; LINUX-32-STATIC-NEXT: 	ret
5978
5979; LINUX-32-PIC-LABEL: bat01:
5980; LINUX-32-PIC: 	movl	$dst+64, %eax
5981; LINUX-32-PIC-NEXT: 	ret
5982
5983; LINUX-64-PIC-LABEL: 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:
5998; DARWIN-32-PIC: 	calll	L90$pb
5999; DARWIN-32-PIC-NEXT: L90$pb:
6000; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6001; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L90$pb([[EAX]]), %eax
6002; 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
6019}
6020
6021define i8* @bxt01() nounwind {
6022entry:
6023	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16) to i8*)
6024; LINUX-64-STATIC-LABEL: bxt01:
6025; LINUX-64-STATIC: movl    $xdst+64, %eax
6026; LINUX-64-STATIC: ret
6027
6028; LINUX-32-STATIC-LABEL: bxt01:
6029; LINUX-32-STATIC: 	movl	$xdst+64, %eax
6030; LINUX-32-STATIC-NEXT: 	ret
6031
6032; LINUX-32-PIC-LABEL: bxt01:
6033; LINUX-32-PIC: 	movl	$xdst+64, %eax
6034; LINUX-32-PIC-NEXT: 	ret
6035
6036; LINUX-64-PIC-LABEL: 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:
6051; DARWIN-32-PIC: 	calll	L91$pb
6052; DARWIN-32-PIC-NEXT: L91$pb:
6053; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6054; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L91$pb([[EAX]]), %eax
6055; 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
6072}
6073
6074define i8* @bat02() nounwind {
6075entry:
6076	%0 = load i32*, i32** @ptr, align 8
6077	%1 = getelementptr i32, i32* %0, i64 16
6078	%2 = bitcast i32* %1 to i8*
6079	ret i8* %2
6080; LINUX-64-STATIC-LABEL: bat02:
6081; LINUX-64-STATIC: movq    ptr(%rip), %rax
6082; LINUX-64-STATIC: addq    $64, %rax
6083; LINUX-64-STATIC: ret
6084
6085; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: bat02:
6096; LINUX-64-PIC: 	movq	ptr@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
6108; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
6109; DARWIN-32-DYNAMIC-NEXT: 	addl	$64, %eax
6110; DARWIN-32-DYNAMIC-NEXT: 	ret
6111
6112; DARWIN-32-PIC: _bat02:
6113; DARWIN-32-PIC: 	calll	L92$pb
6114; DARWIN-32-PIC-NEXT: L92$pb:
6115; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6116; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L92$pb([[EAX]]), [[EAX:%e.x]]
6117; 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:%r.x]]
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:%r.x]]
6129; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%r.x]]
6135; DARWIN-64-PIC-NEXT: 	movq	([[RAX]]), %rax
6136; DARWIN-64-PIC-NEXT: 	addq	$64, %rax
6137; DARWIN-64-PIC-NEXT: 	ret
6138}
6139
6140define i8* @bat03() nounwind {
6141entry:
6142	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
6143; LINUX-64-STATIC-LABEL: bat03:
6144; LINUX-64-STATIC: movl    $dsrc+64, %eax
6145; LINUX-64-STATIC: ret
6146
6147; LINUX-32-STATIC-LABEL: bat03:
6148; LINUX-32-STATIC: 	movl	$dsrc+64, %eax
6149; LINUX-32-STATIC-NEXT: 	ret
6150
6151; LINUX-32-PIC-LABEL: bat03:
6152; LINUX-32-PIC: 	movl	$dsrc+64, %eax
6153; LINUX-32-PIC-NEXT: 	ret
6154
6155; LINUX-64-PIC-LABEL: 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:
6169; DARWIN-32-PIC: 	calll	L93$pb
6170; DARWIN-32-PIC-NEXT: L93$pb:
6171; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6172; DARWIN-32-PIC-NEXT: 	leal	(_dsrc-L93$pb)+64([[EAX]]), %eax
6173; 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
6186}
6187
6188define i8* @bat04() nounwind {
6189entry:
6190	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16) to i8*)
6191; LINUX-64-STATIC-LABEL: bat04:
6192; LINUX-64-STATIC: movl    $ddst+64, %eax
6193; LINUX-64-STATIC: ret
6194
6195; LINUX-32-STATIC-LABEL: bat04:
6196; LINUX-32-STATIC: 	movl	$ddst+64, %eax
6197; LINUX-32-STATIC-NEXT: 	ret
6198
6199; LINUX-32-PIC-LABEL: bat04:
6200; LINUX-32-PIC: 	movl	$ddst+64, %eax
6201; LINUX-32-PIC-NEXT: 	ret
6202
6203; LINUX-64-PIC-LABEL: 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:
6217; DARWIN-32-PIC: 	calll	L94$pb
6218; DARWIN-32-PIC-NEXT: L94$pb:
6219; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6220; DARWIN-32-PIC-NEXT: 	leal	(_ddst-L94$pb)+64([[EAX]]), %eax
6221; 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
6234}
6235
6236define i8* @bat05() nounwind {
6237entry:
6238	%0 = load i32*, i32** @dptr, align 8
6239	%1 = getelementptr i32, i32* %0, i64 16
6240	%2 = bitcast i32* %1 to i8*
6241	ret i8* %2
6242; LINUX-64-STATIC-LABEL: bat05:
6243; LINUX-64-STATIC: movq    dptr(%rip), %rax
6244; LINUX-64-STATIC: addq    $64, %rax
6245; LINUX-64-STATIC: ret
6246
6247; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: bat05:
6258; LINUX-64-PIC: 	movq	dptr@GOTPCREL(%rip), [[RAX:%r.x]]
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:
6274; DARWIN-32-PIC: 	calll	L95$pb
6275; DARWIN-32-PIC-NEXT: L95$pb:
6276; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6277; DARWIN-32-PIC-NEXT: 	movl	_dptr-L95$pb([[EAX]]), %eax
6278; 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
6295}
6296
6297define i8* @bat06() nounwind {
6298entry:
6299	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
6300; LINUX-64-STATIC-LABEL: bat06:
6301; LINUX-64-STATIC: movl    $lsrc+64, %eax
6302; LINUX-64-STATIC: ret
6303
6304; LINUX-32-STATIC-LABEL: bat06:
6305; LINUX-32-STATIC: 	movl	$lsrc+64, %eax
6306; LINUX-32-STATIC-NEXT: 	ret
6307
6308; LINUX-32-PIC-LABEL: bat06:
6309; LINUX-32-PIC: 	movl	$lsrc+64, %eax
6310; LINUX-32-PIC-NEXT: 	ret
6311
6312; LINUX-64-PIC-LABEL: 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:
6325; DARWIN-32-PIC: 	calll	L96$pb
6326; DARWIN-32-PIC-NEXT: L96$pb:
6327; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6328; DARWIN-32-PIC-NEXT: 	leal	(_lsrc-L96$pb)+64([[EAX]]), %eax
6329; 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
6342}
6343
6344define i8* @bat07() nounwind {
6345entry:
6346	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16) to i8*)
6347; LINUX-64-STATIC-LABEL: bat07:
6348; LINUX-64-STATIC: movl    $ldst+64, %eax
6349; LINUX-64-STATIC: ret
6350
6351; LINUX-32-STATIC-LABEL: bat07:
6352; LINUX-32-STATIC: 	movl	$ldst+64, %eax
6353; LINUX-32-STATIC-NEXT: 	ret
6354
6355; LINUX-32-PIC-LABEL: bat07:
6356; LINUX-32-PIC: 	movl	$ldst+64, %eax
6357; LINUX-32-PIC-NEXT: 	ret
6358
6359; LINUX-64-PIC-LABEL: 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:
6372; DARWIN-32-PIC: 	calll	L97$pb
6373; DARWIN-32-PIC-NEXT: L97$pb:
6374; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6375; DARWIN-32-PIC-NEXT: 	leal	(_ldst-L97$pb)+64([[EAX]]), %eax
6376; 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
6389}
6390
6391define i8* @bat08() nounwind {
6392entry:
6393	%0 = load i32*, i32** @lptr, align 8
6394	%1 = getelementptr i32, i32* %0, i64 16
6395	%2 = bitcast i32* %1 to i8*
6396	ret i8* %2
6397; LINUX-64-STATIC-LABEL: bat08:
6398; LINUX-64-STATIC: movq    lptr(%rip), %rax
6399; LINUX-64-STATIC: addq    $64, %rax
6400; LINUX-64-STATIC: ret
6401
6402; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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:
6428; DARWIN-32-PIC: 	calll	L98$pb
6429; DARWIN-32-PIC-NEXT: L98$pb:
6430; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6431; DARWIN-32-PIC-NEXT: 	movl	_lptr-L98$pb([[EAX]]), %eax
6432; 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
6449}
6450
6451define i8* @bam00() nounwind {
6452entry:
6453	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536) to i8*)
6454; LINUX-64-STATIC-LABEL: bam00:
6455; LINUX-64-STATIC: movl    $src+262144, %eax
6456; LINUX-64-STATIC: ret
6457
6458; LINUX-32-STATIC-LABEL: bam00:
6459; LINUX-32-STATIC: 	movl	$src+262144, %eax
6460; LINUX-32-STATIC-NEXT: 	ret
6461
6462; LINUX-32-PIC-LABEL: bam00:
6463; LINUX-32-PIC: 	movl	$src+262144, %eax
6464; LINUX-32-PIC-NEXT: 	ret
6465
6466; LINUX-64-PIC-LABEL: 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:
6481; DARWIN-32-PIC: 	calll	L99$pb
6482; DARWIN-32-PIC-NEXT: L99$pb:
6483; DARWIN-32-PIC-NEXT: 	popl	[[ECX:%e.x]]
6484; DARWIN-32-PIC-NEXT: 	movl	$262144, %eax
6485; DARWIN-32-PIC-NEXT: 	addl	L_src$non_lazy_ptr-L99$pb([[ECX]]), %eax
6486; 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
6502}
6503
6504define i8* @bam01() nounwind {
6505entry:
6506	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536) to i8*)
6507; LINUX-64-STATIC-LABEL: bam01:
6508; LINUX-64-STATIC: movl    $dst+262144, %eax
6509; LINUX-64-STATIC: ret
6510
6511; LINUX-32-STATIC-LABEL: bam01:
6512; LINUX-32-STATIC: 	movl	$dst+262144, %eax
6513; LINUX-32-STATIC-NEXT: 	ret
6514
6515; LINUX-32-PIC-LABEL: bam01:
6516; LINUX-32-PIC: 	movl	$dst+262144, %eax
6517; LINUX-32-PIC-NEXT: 	ret
6518
6519; LINUX-64-PIC-LABEL: 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:
6534; DARWIN-32-PIC: 	calll	L100$pb
6535; DARWIN-32-PIC-NEXT: L100$pb:
6536; DARWIN-32-PIC-NEXT: 	popl	[[ECX:%e.x]]
6537; DARWIN-32-PIC-NEXT: 	movl	$262144, %eax
6538; DARWIN-32-PIC-NEXT: 	addl	L_dst$non_lazy_ptr-L100$pb([[ECX]]), %eax
6539; 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
6555}
6556
6557define i8* @bxm01() nounwind {
6558entry:
6559	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 65536) to i8*)
6560; LINUX-64-STATIC-LABEL: bxm01:
6561; LINUX-64-STATIC: movl    $xdst+262144, %eax
6562; LINUX-64-STATIC: ret
6563
6564; LINUX-32-STATIC-LABEL: bxm01:
6565; LINUX-32-STATIC: 	movl	$xdst+262144, %eax
6566; LINUX-32-STATIC-NEXT: 	ret
6567
6568; LINUX-32-PIC-LABEL: bxm01:
6569; LINUX-32-PIC: 	movl	$xdst+262144, %eax
6570; LINUX-32-PIC-NEXT: 	ret
6571
6572; LINUX-64-PIC-LABEL: 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:
6587; DARWIN-32-PIC: 	calll	L101$pb
6588; DARWIN-32-PIC-NEXT: L101$pb:
6589; DARWIN-32-PIC-NEXT: 	popl	[[ECX:%e.x]]
6590; DARWIN-32-PIC-NEXT: 	movl	$262144, %eax
6591; DARWIN-32-PIC-NEXT: 	addl	L_xdst$non_lazy_ptr-L101$pb([[ECX]]), %eax
6592; 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
6608}
6609
6610define i8* @bam02() nounwind {
6611entry:
6612	%0 = load i32*, i32** @ptr, align 8
6613	%1 = getelementptr i32, i32* %0, i64 65536
6614	%2 = bitcast i32* %1 to i8*
6615	ret i8* %2
6616; LINUX-64-STATIC-LABEL: bam02:
6617; LINUX-64-STATIC: movl    $262144, %eax
6618; LINUX-64-STATIC: addq    ptr(%rip), %rax
6619; LINUX-64-STATIC: ret
6620
6621; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: bam02:
6632; LINUX-64-PIC: 	movl	$262144, %eax
6633; LINUX-64-PIC-NEXT: 	movq	ptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:%e.x]]
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:
6649; DARWIN-32-PIC: 	calll	L102$pb
6650; DARWIN-32-PIC-NEXT: L102$pb:
6651; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6652; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L102$pb([[EAX]]), [[ECX:%e.x]]
6653; 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: 	movl	$262144, %eax
6659; DARWIN-64-STATIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6660; DARWIN-64-STATIC-NEXT: 	addq	([[RCX]]), %rax
6661; DARWIN-64-STATIC-NEXT: 	ret
6662
6663; DARWIN-64-DYNAMIC: _bam02:
6664; DARWIN-64-DYNAMIC: 	movl	$262144, %eax
6665; DARWIN-64-DYNAMIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6666; DARWIN-64-DYNAMIC-NEXT: 	addq	([[RCX]]), %rax
6667; DARWIN-64-DYNAMIC-NEXT: 	ret
6668
6669; DARWIN-64-PIC: _bam02:
6670; DARWIN-64-PIC: 	movl	$262144, %eax
6671; DARWIN-64-PIC-NEXT: 	movq	_ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6672; DARWIN-64-PIC-NEXT: 	addq	([[RCX]]), %rax
6673; DARWIN-64-PIC-NEXT: 	ret
6674}
6675
6676define i8* @bam03() nounwind {
6677entry:
6678	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
6679; LINUX-64-STATIC-LABEL: bam03:
6680; LINUX-64-STATIC: movl    $dsrc+262144, %eax
6681; LINUX-64-STATIC: ret
6682
6683; LINUX-32-STATIC-LABEL: bam03:
6684; LINUX-32-STATIC: 	movl	$dsrc+262144, %eax
6685; LINUX-32-STATIC-NEXT: 	ret
6686
6687; LINUX-32-PIC-LABEL: bam03:
6688; LINUX-32-PIC: 	movl	$dsrc+262144, %eax
6689; LINUX-32-PIC-NEXT: 	ret
6690
6691; LINUX-64-PIC-LABEL: 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:
6705; DARWIN-32-PIC: 	calll	L103$pb
6706; DARWIN-32-PIC-NEXT: L103$pb:
6707; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6708; DARWIN-32-PIC-NEXT: 	leal	(_dsrc-L103$pb)+262144([[EAX]]), %eax
6709; 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
6722}
6723
6724define i8* @bam04() nounwind {
6725entry:
6726	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
6727; LINUX-64-STATIC-LABEL: bam04:
6728; LINUX-64-STATIC: movl    $ddst+262144, %eax
6729; LINUX-64-STATIC: ret
6730
6731; LINUX-32-STATIC-LABEL: bam04:
6732; LINUX-32-STATIC: 	movl	$ddst+262144, %eax
6733; LINUX-32-STATIC-NEXT: 	ret
6734
6735; LINUX-32-PIC-LABEL: bam04:
6736; LINUX-32-PIC: 	movl	$ddst+262144, %eax
6737; LINUX-32-PIC-NEXT: 	ret
6738
6739; LINUX-64-PIC-LABEL: 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:
6753; DARWIN-32-PIC: 	calll	L104$pb
6754; DARWIN-32-PIC-NEXT: L104$pb:
6755; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6756; DARWIN-32-PIC-NEXT: 	leal	(_ddst-L104$pb)+262144([[EAX]]), %eax
6757; 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
6770}
6771
6772define i8* @bam05() nounwind {
6773entry:
6774	%0 = load i32*, i32** @dptr, align 8
6775	%1 = getelementptr i32, i32* %0, i64 65536
6776	%2 = bitcast i32* %1 to i8*
6777	ret i8* %2
6778; LINUX-64-STATIC-LABEL: bam05:
6779; LINUX-64-STATIC: movl    $262144, %eax
6780; LINUX-64-STATIC: addq    dptr(%rip), %rax
6781; LINUX-64-STATIC: ret
6782
6783; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: bam05:
6794; LINUX-64-PIC: 	movl	$262144, %eax
6795; LINUX-64-PIC-NEXT: 	movq	dptr@GOTPCREL(%rip), [[RCX:%r.x]]
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:
6810; DARWIN-32-PIC: 	calll	L105$pb
6811; DARWIN-32-PIC-NEXT: L105$pb:
6812; DARWIN-32-PIC-NEXT: 	popl	[[ECX:%e.x]]
6813; DARWIN-32-PIC-NEXT: 	movl	$262144, %eax
6814; DARWIN-32-PIC-NEXT: 	addl	_dptr-L105$pb([[ECX]]), %eax
6815; 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
6831}
6832
6833define i8* @bam06() nounwind {
6834entry:
6835	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
6836; LINUX-64-STATIC-LABEL: bam06:
6837; LINUX-64-STATIC: movl    $lsrc+262144, %eax
6838; LINUX-64-STATIC: ret
6839
6840; LINUX-32-STATIC-LABEL: bam06:
6841; LINUX-32-STATIC: 	movl	$lsrc+262144, %eax
6842; LINUX-32-STATIC-NEXT: 	ret
6843
6844; LINUX-32-PIC-LABEL: bam06:
6845; LINUX-32-PIC: 	movl	$lsrc+262144, %eax
6846; LINUX-32-PIC-NEXT: 	ret
6847
6848; LINUX-64-PIC-LABEL: 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:
6861; DARWIN-32-PIC: 	calll	L106$pb
6862; DARWIN-32-PIC-NEXT: L106$pb:
6863; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
6864; DARWIN-32-PIC-NEXT: 	leal	(_lsrc-L106$pb)+262144([[EAX]]), %eax
6865; 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
6878}
6879
6880define i8* @bam07() nounwind {
6881entry:
6882	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
6883; LINUX-64-STATIC-LABEL: bam07:
6884; LINUX-64-STATIC: movl    $ldst+262144, %eax
6885; LINUX-64-STATIC: ret
6886
6887; LINUX-32-STATIC-LABEL: bam07:
6888; LINUX-32-STATIC: 	movl	$ldst+262144, %eax
6889; LINUX-32-STATIC-NEXT: 	ret
6890
6891; LINUX-32-PIC-LABEL: bam07:
6892; LINUX-32-PIC: 	movl	$ldst+262144, %eax
6893; LINUX-32-PIC-NEXT: 	ret
6894
6895; LINUX-64-PIC-LABEL: 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:
6908; DARWIN-32-PIC: 	calll	L107$pb
6909; DARWIN-32-PIC-NEXT: L107$pb:
6910; DARWIN-32-PIC-NEXT: 	popl	%eax
6911; DARWIN-32-PIC-NEXT: 	leal	(_ldst-L107$pb)+262144([[EAX]]), %eax
6912; 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
6925}
6926
6927define i8* @bam08() nounwind {
6928entry:
6929	%0 = load i32*, i32** @lptr, align 8
6930	%1 = getelementptr i32, i32* %0, i64 65536
6931	%2 = bitcast i32* %1 to i8*
6932	ret i8* %2
6933; LINUX-64-STATIC-LABEL: bam08:
6934; LINUX-64-STATIC: movl    $262144, %eax
6935; LINUX-64-STATIC: addq    lptr(%rip), %rax
6936; LINUX-64-STATIC: ret
6937
6938; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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:
6964; DARWIN-32-PIC: 	calll	L108$pb
6965; DARWIN-32-PIC-NEXT: L108$pb:
6966; DARWIN-32-PIC-NEXT: 	popl	[[ECX:%e.x]]
6967; DARWIN-32-PIC-NEXT: 	movl	$262144, %eax
6968; DARWIN-32-PIC-NEXT: 	addl	_lptr-L108$pb([[ECX]]), %eax
6969; 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
6985}
6986
6987define i8* @cat00(i64 %i) nounwind {
6988entry:
6989	%0 = add i64 %i, 16
6990	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
6991	%2 = bitcast i32* %1 to i8*
6992	ret i8* %2
6993; LINUX-64-STATIC-LABEL: cat00:
6994; LINUX-64-STATIC: leaq    src+64(,%rdi,4), %rax
6995; LINUX-64-STATIC: ret
6996
6997; LINUX-32-STATIC-LABEL: cat00:
6998; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
6999; LINUX-32-STATIC-NEXT: 	leal	src+64(,[[EAX]],4), %eax
7000; LINUX-32-STATIC-NEXT: 	ret
7001
7002; LINUX-32-PIC-LABEL: cat00:
7003; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7004; LINUX-32-PIC-NEXT: 	leal	src+64(,[[EAX]],4), %eax
7005; LINUX-32-PIC-NEXT: 	ret
7006
7007; LINUX-64-PIC-LABEL: cat00:
7008; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7019; DARWIN-32-DYNAMIC-NEXT: 	movl	L_src$non_lazy_ptr, [[ECX:%e.x]]
7020; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7021; DARWIN-32-DYNAMIC-NEXT: 	ret
7022
7023; DARWIN-32-PIC: _cat00:
7024; DARWIN-32-PIC: 	calll	L109$pb
7025; DARWIN-32-PIC-NEXT: L109$pb:
7026; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7027; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7028; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L109$pb([[EAX]]), [[EAX:%e.x]]
7029; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7044; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7045; DARWIN-64-PIC-NEXT: 	ret
7046}
7047
7048define i8* @cxt00(i64 %i) nounwind {
7049entry:
7050	%0 = add i64 %i, 16
7051	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
7052	%2 = bitcast i32* %1 to i8*
7053	ret i8* %2
7054; LINUX-64-STATIC-LABEL: cxt00:
7055; LINUX-64-STATIC: leaq    xsrc+64(,%rdi,4), %rax
7056; LINUX-64-STATIC: ret
7057
7058; LINUX-32-STATIC-LABEL: cxt00:
7059; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7060; LINUX-32-STATIC-NEXT: 	leal	xsrc+64(,[[EAX]],4), %eax
7061; LINUX-32-STATIC-NEXT: 	ret
7062
7063; LINUX-32-PIC-LABEL: cxt00:
7064; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7065; LINUX-32-PIC-NEXT: 	leal	xsrc+64(,[[EAX]],4), %eax
7066; LINUX-32-PIC-NEXT: 	ret
7067
7068; LINUX-64-PIC-LABEL: cxt00:
7069; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7080; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
7081; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7082; DARWIN-32-DYNAMIC-NEXT: 	ret
7083
7084; DARWIN-32-PIC: _cxt00:
7085; DARWIN-32-PIC: 	calll	L110$pb
7086; DARWIN-32-PIC-NEXT: L110$pb:
7087; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7088; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7089; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L110$pb([[EAX]]), [[EAX:%e.x]]
7090; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7105; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7106; DARWIN-64-PIC-NEXT: 	ret
7107}
7108
7109define i8* @cat01(i64 %i) nounwind {
7110entry:
7111	%0 = add i64 %i, 16
7112	%1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
7113	%2 = bitcast i32* %1 to i8*
7114	ret i8* %2
7115; LINUX-64-STATIC-LABEL: cat01:
7116; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), %rax
7117; LINUX-64-STATIC: ret
7118
7119; LINUX-32-STATIC-LABEL: cat01:
7120; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7121; LINUX-32-STATIC-NEXT: 	leal	dst+64(,[[EAX]],4), %eax
7122; LINUX-32-STATIC-NEXT: 	ret
7123
7124; LINUX-32-PIC-LABEL: cat01:
7125; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7126; LINUX-32-PIC-NEXT: 	leal	dst+64(,[[EAX]],4), %eax
7127; LINUX-32-PIC-NEXT: 	ret
7128
7129; LINUX-64-PIC-LABEL: cat01:
7130; LINUX-64-PIC: 	movq	dst@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7141; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[ECX:%e.x]]
7142; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7143; DARWIN-32-DYNAMIC-NEXT: 	ret
7144
7145; DARWIN-32-PIC: _cat01:
7146; DARWIN-32-PIC: 	calll	L111$pb
7147; DARWIN-32-PIC-NEXT: L111$pb:
7148; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7149; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7150; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L111$pb([[EAX]]), [[EAX:%e.x]]
7151; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7166; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7167; DARWIN-64-PIC-NEXT: 	ret
7168}
7169
7170define i8* @cxt01(i64 %i) nounwind {
7171entry:
7172	%0 = add i64 %i, 16
7173	%1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
7174	%2 = bitcast i32* %1 to i8*
7175	ret i8* %2
7176; LINUX-64-STATIC-LABEL: cxt01:
7177; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), %rax
7178; LINUX-64-STATIC: ret
7179
7180; LINUX-32-STATIC-LABEL: cxt01:
7181; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7182; LINUX-32-STATIC-NEXT: 	leal	xdst+64(,[[EAX]],4), %eax
7183; LINUX-32-STATIC-NEXT: 	ret
7184
7185; LINUX-32-PIC-LABEL: cxt01:
7186; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7187; LINUX-32-PIC-NEXT: 	leal	xdst+64(,[[EAX]],4), %eax
7188; LINUX-32-PIC-NEXT: 	ret
7189
7190; LINUX-64-PIC-LABEL: cxt01:
7191; LINUX-64-PIC: 	movq	xdst@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7202; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xdst$non_lazy_ptr, [[ECX:%e.x]]
7203; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7204; DARWIN-32-DYNAMIC-NEXT: 	ret
7205
7206; DARWIN-32-PIC: _cxt01:
7207; DARWIN-32-PIC: 	calll	L112$pb
7208; DARWIN-32-PIC-NEXT: L112$pb:
7209; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7210; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7211; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L112$pb([[EAX]]), [[EAX:%e.x]]
7212; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7227; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7228; DARWIN-64-PIC-NEXT: 	ret
7229}
7230
7231define i8* @cat02(i64 %i) nounwind {
7232entry:
7233	%0 = load i32*, i32** @ptr, align 8
7234	%1 = add i64 %i, 16
7235	%2 = getelementptr i32, i32* %0, i64 %1
7236	%3 = bitcast i32* %2 to i8*
7237	ret i8* %3
7238; LINUX-64-STATIC-LABEL: cat02:
7239; LINUX-64-STATIC: movq    ptr(%rip), [[RAX:%r.x]]
7240; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7241; LINUX-64-STATIC: ret
7242
7243; LINUX-32-STATIC-LABEL: cat02:
7244; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7245; LINUX-32-STATIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
7246; LINUX-32-STATIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7247; LINUX-32-STATIC-NEXT: 	ret
7248
7249; LINUX-32-PIC-LABEL: cat02:
7250; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7251; LINUX-32-PIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
7252; LINUX-32-PIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7253; LINUX-32-PIC-NEXT: 	ret
7254
7255; LINUX-64-PIC-LABEL: cat02:
7256; LINUX-64-PIC: 	movq	ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7257; LINUX-64-PIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%e.x]]
7263; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[ECX:%e.x]]
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:%e.x]]
7269; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
7270; DARWIN-32-DYNAMIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7271; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[EAX]],[[ECX]],4), %eax
7272; DARWIN-32-DYNAMIC-NEXT: 	ret
7273
7274; DARWIN-32-PIC: _cat02:
7275; DARWIN-32-PIC: 	calll	L113$pb
7276; DARWIN-32-PIC-NEXT: L113$pb:
7277; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7278; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L113$pb([[EAX]]), [[EAX:%e.x]]
7279; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
7280; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
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:%r.x]]
7286; DARWIN-64-STATIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%r.x]]
7292; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%r.x]]
7298; DARWIN-64-PIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
7299; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7300; DARWIN-64-PIC-NEXT: 	ret
7301}
7302
7303define i8* @cat03(i64 %i) nounwind {
7304entry:
7305	%0 = add i64 %i, 16
7306	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
7307	%2 = bitcast i32* %1 to i8*
7308	ret i8* %2
7309; LINUX-64-STATIC-LABEL: cat03:
7310; LINUX-64-STATIC: leaq    dsrc+64(,%rdi,4), %rax
7311; LINUX-64-STATIC: ret
7312
7313; LINUX-32-STATIC-LABEL: cat03:
7314; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7315; LINUX-32-STATIC-NEXT: 	leal	dsrc+64(,[[EAX]],4), %eax
7316; LINUX-32-STATIC-NEXT: 	ret
7317
7318; LINUX-32-PIC-LABEL: cat03:
7319; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7320; LINUX-32-PIC-NEXT: 	leal	dsrc+64(,[[EAX]],4), %eax
7321; LINUX-32-PIC-NEXT: 	ret
7322
7323; LINUX-64-PIC-LABEL: cat03:
7324; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7335; DARWIN-32-DYNAMIC-NEXT: 	leal	_dsrc+64(,[[EAX]],4), %eax
7336; DARWIN-32-DYNAMIC-NEXT: 	ret
7337
7338; DARWIN-32-PIC: _cat03:
7339; DARWIN-32-PIC: 	calll	L114$pb
7340; DARWIN-32-PIC-NEXT: L114$pb:
7341; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7342; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7343; DARWIN-32-PIC-NEXT: 	leal	(_dsrc-L114$pb)+64([[EAX]],[[ECX]],4), %eax
7344; DARWIN-32-PIC-NEXT: 	ret
7345
7346; DARWIN-64-STATIC: _cat03:
7347; DARWIN-64-STATIC: 	leaq	_dsrc(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
7358; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7359; DARWIN-64-PIC-NEXT: 	ret
7360}
7361
7362define i8* @cat04(i64 %i) nounwind {
7363entry:
7364	%0 = add i64 %i, 16
7365	%1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
7366	%2 = bitcast i32* %1 to i8*
7367	ret i8* %2
7368; LINUX-64-STATIC-LABEL: cat04:
7369; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), %rax
7370; LINUX-64-STATIC: ret
7371
7372; LINUX-32-STATIC-LABEL: cat04:
7373; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7374; LINUX-32-STATIC-NEXT: 	leal	ddst+64(,[[EAX]],4), %eax
7375; LINUX-32-STATIC-NEXT: 	ret
7376
7377; LINUX-32-PIC-LABEL: cat04:
7378; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7379; LINUX-32-PIC-NEXT: 	leal	ddst+64(,[[EAX]],4), %eax
7380; LINUX-32-PIC-NEXT: 	ret
7381
7382; LINUX-64-PIC-LABEL: cat04:
7383; LINUX-64-PIC: 	movq	ddst@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7394; DARWIN-32-DYNAMIC-NEXT: 	leal	_ddst+64(,[[EAX]],4), %eax
7395; DARWIN-32-DYNAMIC-NEXT: 	ret
7396
7397; DARWIN-32-PIC: _cat04:
7398; DARWIN-32-PIC: 	calll	L115$pb
7399; DARWIN-32-PIC-NEXT: L115$pb:
7400; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7401; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7402; DARWIN-32-PIC-NEXT: 	leal	(_ddst-L115$pb)+64([[EAX]],[[ECX]],4), %eax
7403; DARWIN-32-PIC-NEXT: 	ret
7404
7405; DARWIN-64-STATIC: _cat04:
7406; DARWIN-64-STATIC: 	leaq	_ddst(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
7417; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7418; DARWIN-64-PIC-NEXT: 	ret
7419}
7420
7421define i8* @cat05(i64 %i) nounwind {
7422entry:
7423	%0 = load i32*, i32** @dptr, align 8
7424	%1 = add i64 %i, 16
7425	%2 = getelementptr i32, i32* %0, i64 %1
7426	%3 = bitcast i32* %2 to i8*
7427	ret i8* %3
7428; LINUX-64-STATIC-LABEL: cat05:
7429; LINUX-64-STATIC: movq    dptr(%rip), [[RAX:%r.x]]
7430; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7431; LINUX-64-STATIC: ret
7432
7433; LINUX-32-STATIC-LABEL: cat05:
7434; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7435; LINUX-32-STATIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
7436; LINUX-32-STATIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7437; LINUX-32-STATIC-NEXT: 	ret
7438
7439; LINUX-32-PIC-LABEL: cat05:
7440; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7441; LINUX-32-PIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
7442; LINUX-32-PIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7443; LINUX-32-PIC-NEXT: 	ret
7444
7445; LINUX-64-PIC-LABEL: cat05:
7446; LINUX-64-PIC: 	movq	dptr@GOTPCREL(%rip), [[RAX:%r.x]]
7447; LINUX-64-PIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%e.x]]
7453; DARWIN-32-STATIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
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:%e.x]]
7459; DARWIN-32-DYNAMIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
7460; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7461; DARWIN-32-DYNAMIC-NEXT: 	ret
7462
7463; DARWIN-32-PIC: _cat05:
7464; DARWIN-32-PIC: 	calll	L116$pb
7465; DARWIN-32-PIC-NEXT: L116$pb:
7466; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7467; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7468; DARWIN-32-PIC-NEXT: 	movl	_dptr-L116$pb([[EAX]]), [[EAX:%e.x]]
7469; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7484; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7485; DARWIN-64-PIC-NEXT: 	ret
7486}
7487
7488define i8* @cat06(i64 %i) nounwind {
7489entry:
7490	%0 = add i64 %i, 16
7491	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
7492	%2 = bitcast i32* %1 to i8*
7493	ret i8* %2
7494; LINUX-64-STATIC-LABEL: cat06:
7495; LINUX-64-STATIC: leaq    lsrc+64(,%rdi,4), %rax
7496; LINUX-64-STATIC: ret
7497
7498; LINUX-32-STATIC-LABEL: cat06:
7499; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7500; LINUX-32-STATIC-NEXT: 	leal	lsrc+64(,[[EAX]],4), %eax
7501; LINUX-32-STATIC-NEXT: 	ret
7502
7503; LINUX-32-PIC-LABEL: cat06:
7504; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7505; LINUX-32-PIC-NEXT: 	leal	lsrc+64(,[[EAX]],4), %eax
7506; LINUX-32-PIC-NEXT: 	ret
7507
7508; LINUX-64-PIC-LABEL: cat06:
7509; LINUX-64-PIC: 	leaq	lsrc(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7520; DARWIN-32-DYNAMIC-NEXT: 	leal	_lsrc+64(,[[EAX]],4), %eax
7521; DARWIN-32-DYNAMIC-NEXT: 	ret
7522
7523; DARWIN-32-PIC: _cat06:
7524; DARWIN-32-PIC: 	calll	L117$pb
7525; DARWIN-32-PIC-NEXT: L117$pb:
7526; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7527; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7528; DARWIN-32-PIC-NEXT: 	leal	(_lsrc-L117$pb)+64([[EAX]],[[ECX]],4), %eax
7529; DARWIN-32-PIC-NEXT: 	ret
7530
7531; DARWIN-64-STATIC: _cat06:
7532; DARWIN-64-STATIC: 	leaq	_lsrc(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
7543; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7544; DARWIN-64-PIC-NEXT: 	ret
7545}
7546
7547define i8* @cat07(i64 %i) nounwind {
7548entry:
7549	%0 = add i64 %i, 16
7550	%1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
7551	%2 = bitcast i32* %1 to i8*
7552	ret i8* %2
7553; LINUX-64-STATIC-LABEL: cat07:
7554; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), %rax
7555; LINUX-64-STATIC: ret
7556
7557; LINUX-32-STATIC-LABEL: cat07:
7558; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7559; LINUX-32-STATIC-NEXT: 	leal	ldst+64(,[[EAX]],4), %eax
7560; LINUX-32-STATIC-NEXT: 	ret
7561
7562; LINUX-32-PIC-LABEL: cat07:
7563; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7564; LINUX-32-PIC-NEXT: 	leal	ldst+64(,[[EAX]],4), %eax
7565; LINUX-32-PIC-NEXT: 	ret
7566
7567; LINUX-64-PIC-LABEL: cat07:
7568; LINUX-64-PIC: 	leaq	ldst(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7579; DARWIN-32-DYNAMIC-NEXT: 	leal	_ldst+64(,[[EAX]],4), %eax
7580; DARWIN-32-DYNAMIC-NEXT: 	ret
7581
7582; DARWIN-32-PIC: _cat07:
7583; DARWIN-32-PIC: 	calll	L118$pb
7584; DARWIN-32-PIC-NEXT: L118$pb:
7585; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7586; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7587; DARWIN-32-PIC-NEXT: 	leal	(_ldst-L118$pb)+64([[EAX]],[[ECX]],4), %eax
7588; DARWIN-32-PIC-NEXT: 	ret
7589
7590; DARWIN-64-STATIC: _cat07:
7591; DARWIN-64-STATIC: 	leaq	_ldst(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
7602; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7603; DARWIN-64-PIC-NEXT: 	ret
7604}
7605
7606define i8* @cat08(i64 %i) nounwind {
7607entry:
7608	%0 = load i32*, i32** @lptr, align 8
7609	%1 = add i64 %i, 16
7610	%2 = getelementptr i32, i32* %0, i64 %1
7611	%3 = bitcast i32* %2 to i8*
7612	ret i8* %3
7613; LINUX-64-STATIC-LABEL: cat08:
7614; LINUX-64-STATIC: movq    lptr(%rip), [[RAX:%r.x]]
7615; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7616; LINUX-64-STATIC: ret
7617
7618; LINUX-32-STATIC-LABEL: cat08:
7619; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7620; LINUX-32-STATIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
7621; LINUX-32-STATIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7622; LINUX-32-STATIC-NEXT: 	ret
7623
7624; LINUX-32-PIC-LABEL: cat08:
7625; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7626; LINUX-32-PIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
7627; LINUX-32-PIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7628; LINUX-32-PIC-NEXT: 	ret
7629
7630; LINUX-64-PIC-LABEL: cat08:
7631; LINUX-64-PIC: 	movq	lptr(%rip), [[RAX:%r.x]]
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:%e.x]]
7637; DARWIN-32-STATIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
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:%e.x]]
7643; DARWIN-32-DYNAMIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
7644; DARWIN-32-DYNAMIC-NEXT: 	leal	64([[ECX]],[[EAX]],4), %eax
7645; DARWIN-32-DYNAMIC-NEXT: 	ret
7646
7647; DARWIN-32-PIC: _cat08:
7648; DARWIN-32-PIC: 	calll	L119$pb
7649; DARWIN-32-PIC-NEXT: L119$pb:
7650; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7651; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7652; DARWIN-32-PIC-NEXT: 	movl	_lptr-L119$pb([[EAX]]), [[EAX:%e.x]]
7653; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7668; DARWIN-64-PIC-NEXT: 	leaq	64([[RAX]],%rdi,4), %rax
7669; DARWIN-64-PIC-NEXT: 	ret
7670}
7671
7672define i8* @cam00(i64 %i) nounwind {
7673entry:
7674	%0 = add i64 %i, 65536
7675	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
7676	%2 = bitcast i32* %1 to i8*
7677	ret i8* %2
7678; LINUX-64-STATIC-LABEL: cam00:
7679; LINUX-64-STATIC: leaq    src+262144(,%rdi,4), %rax
7680; LINUX-64-STATIC: ret
7681
7682; LINUX-32-STATIC-LABEL: cam00:
7683; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7684; LINUX-32-STATIC-NEXT: 	leal	src+262144(,[[EAX]],4), %eax
7685; LINUX-32-STATIC-NEXT: 	ret
7686
7687; LINUX-32-PIC-LABEL: cam00:
7688; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7689; LINUX-32-PIC-NEXT: 	leal	src+262144(,[[EAX]],4), %eax
7690; LINUX-32-PIC-NEXT: 	ret
7691
7692; LINUX-64-PIC-LABEL: cam00:
7693; LINUX-64-PIC: 	movq	src@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7704; DARWIN-32-DYNAMIC-NEXT: 	movl	L_src$non_lazy_ptr, [[ECX:%e.x]]
7705; DARWIN-32-DYNAMIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
7706; DARWIN-32-DYNAMIC-NEXT: 	ret
7707
7708; DARWIN-32-PIC: _cam00:
7709; DARWIN-32-PIC: 	calll	L120$pb
7710; DARWIN-32-PIC-NEXT: L120$pb:
7711; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7712; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7713; DARWIN-32-PIC-NEXT: 	movl	L_src$non_lazy_ptr-L120$pb([[EAX]]), [[EAX:%e.x]]
7714; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7729; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
7730; DARWIN-64-PIC-NEXT: 	ret
7731}
7732
7733define i8* @cxm00(i64 %i) nounwind {
7734entry:
7735	%0 = add i64 %i, 65536
7736	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
7737	%2 = bitcast i32* %1 to i8*
7738	ret i8* %2
7739; LINUX-64-STATIC-LABEL: cxm00:
7740; LINUX-64-STATIC: leaq    xsrc+262144(,%rdi,4), %rax
7741; LINUX-64-STATIC: ret
7742
7743; LINUX-32-STATIC-LABEL: cxm00:
7744; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7745; LINUX-32-STATIC-NEXT: 	leal	xsrc+262144(,[[EAX]],4), %eax
7746; LINUX-32-STATIC-NEXT: 	ret
7747
7748; LINUX-32-PIC-LABEL: cxm00:
7749; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7750; LINUX-32-PIC-NEXT: 	leal	xsrc+262144(,[[EAX]],4), %eax
7751; LINUX-32-PIC-NEXT: 	ret
7752
7753; LINUX-64-PIC-LABEL: cxm00:
7754; LINUX-64-PIC: 	movq	xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7765; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
7766; DARWIN-32-DYNAMIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
7767; DARWIN-32-DYNAMIC-NEXT: 	ret
7768
7769; DARWIN-32-PIC: _cxm00:
7770; DARWIN-32-PIC: 	calll	L121$pb
7771; DARWIN-32-PIC-NEXT: L121$pb:
7772; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7773; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7774; DARWIN-32-PIC-NEXT: 	movl	L_xsrc$non_lazy_ptr-L121$pb([[EAX]]), [[EAX:%e.x]]
7775; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7790; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
7791; DARWIN-64-PIC-NEXT: 	ret
7792}
7793
7794define i8* @cam01(i64 %i) nounwind {
7795entry:
7796	%0 = add i64 %i, 65536
7797	%1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
7798	%2 = bitcast i32* %1 to i8*
7799	ret i8* %2
7800; LINUX-64-STATIC-LABEL: cam01:
7801; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), %rax
7802; LINUX-64-STATIC: ret
7803
7804; LINUX-32-STATIC-LABEL: cam01:
7805; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7806; LINUX-32-STATIC-NEXT: 	leal	dst+262144(,[[EAX]],4), %eax
7807; LINUX-32-STATIC-NEXT: 	ret
7808
7809; LINUX-32-PIC-LABEL: cam01:
7810; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7811; LINUX-32-PIC-NEXT: 	leal	dst+262144(,[[EAX]],4), %eax
7812; LINUX-32-PIC-NEXT: 	ret
7813
7814; LINUX-64-PIC-LABEL: cam01:
7815; LINUX-64-PIC: 	movq	dst@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7826; DARWIN-32-DYNAMIC-NEXT: 	movl	L_dst$non_lazy_ptr, [[ECX:%e.x]]
7827; DARWIN-32-DYNAMIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
7828; DARWIN-32-DYNAMIC-NEXT: 	ret
7829
7830; DARWIN-32-PIC: _cam01:
7831; DARWIN-32-PIC: 	calll	L122$pb
7832; DARWIN-32-PIC-NEXT: L122$pb:
7833; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7834; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7835; DARWIN-32-PIC-NEXT: 	movl	L_dst$non_lazy_ptr-L122$pb([[EAX]]), [[EAX:%e.x]]
7836; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7851; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
7852; DARWIN-64-PIC-NEXT: 	ret
7853}
7854
7855define i8* @cxm01(i64 %i) nounwind {
7856entry:
7857	%0 = add i64 %i, 65536
7858	%1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
7859	%2 = bitcast i32* %1 to i8*
7860	ret i8* %2
7861; LINUX-64-STATIC-LABEL: cxm01:
7862; LINUX-64-STATIC: leaq    xdst+262144(,%rdi,4), %rax
7863; LINUX-64-STATIC: ret
7864
7865; LINUX-32-STATIC-LABEL: 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-LABEL: cxm01:
7871; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7872; LINUX-32-PIC-NEXT: 	leal	xdst+262144(,[[EAX]],4), %eax
7873; LINUX-32-PIC-NEXT: 	ret
7874
7875; LINUX-64-PIC-LABEL: cxm01:
7876; LINUX-64-PIC: 	movq	xdst@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
7887; DARWIN-32-DYNAMIC-NEXT: 	movl	L_xdst$non_lazy_ptr, [[ECX:%e.x]]
7888; DARWIN-32-DYNAMIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
7889; DARWIN-32-DYNAMIC-NEXT: 	ret
7890
7891; DARWIN-32-PIC: _cxm01:
7892; DARWIN-32-PIC: 	calll	L123$pb
7893; DARWIN-32-PIC-NEXT: L123$pb:
7894; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7895; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7896; DARWIN-32-PIC-NEXT: 	movl	L_xdst$non_lazy_ptr-L123$pb([[EAX]]), [[EAX:%e.x]]
7897; 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:%r.x]]
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:%r.x]]
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:%r.x]]
7912; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
7913; DARWIN-64-PIC-NEXT: 	ret
7914}
7915
7916define i8* @cam02(i64 %i) nounwind {
7917entry:
7918	%0 = load i32*, i32** @ptr, align 8
7919	%1 = add i64 %i, 65536
7920	%2 = getelementptr i32, i32* %0, i64 %1
7921	%3 = bitcast i32* %2 to i8*
7922	ret i8* %3
7923; LINUX-64-STATIC-LABEL: cam02:
7924; LINUX-64-STATIC: movq    ptr(%rip), [[RAX:%r.x]]
7925; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
7926; LINUX-64-STATIC: ret
7927
7928; LINUX-32-STATIC-LABEL: cam02:
7929; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
7930; LINUX-32-STATIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
7931; LINUX-32-STATIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
7932; LINUX-32-STATIC-NEXT: 	ret
7933
7934; LINUX-32-PIC-LABEL: cam02:
7935; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
7936; LINUX-32-PIC-NEXT: 	movl	ptr, [[ECX:%e.x]]
7937; LINUX-32-PIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
7938; LINUX-32-PIC-NEXT: 	ret
7939
7940; LINUX-64-PIC-LABEL: cam02:
7941; LINUX-64-PIC: 	movq	ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7942; LINUX-64-PIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%e.x]]
7948; DARWIN-32-STATIC-NEXT: 	movl	_ptr, [[ECX:%e.x]]
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:%e.x]]
7954; DARWIN-32-DYNAMIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
7955; DARWIN-32-DYNAMIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
7956; DARWIN-32-DYNAMIC-NEXT: 	leal	262144([[EAX]],[[ECX]],4), %eax
7957; DARWIN-32-DYNAMIC-NEXT: 	ret
7958
7959; DARWIN-32-PIC: _cam02:
7960; DARWIN-32-PIC: 	calll	L124$pb
7961; DARWIN-32-PIC-NEXT: L124$pb:
7962; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
7963; DARWIN-32-PIC-NEXT: 	movl	L_ptr$non_lazy_ptr-L124$pb([[EAX]]), [[EAX:%e.x]]
7964; DARWIN-32-PIC-NEXT: 	movl	([[EAX]]), [[EAX:%e.x]]
7965; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
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:%r.x]]
7971; DARWIN-64-STATIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%r.x]]
7977; DARWIN-64-DYNAMIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%r.x]]
7983; DARWIN-64-PIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
7984; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
7985; DARWIN-64-PIC-NEXT: 	ret
7986}
7987
7988define i8* @cam03(i64 %i) nounwind {
7989entry:
7990	%0 = add i64 %i, 65536
7991	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
7992	%2 = bitcast i32* %1 to i8*
7993	ret i8* %2
7994; LINUX-64-STATIC-LABEL: cam03:
7995; LINUX-64-STATIC: leaq    dsrc+262144(,%rdi,4), %rax
7996; LINUX-64-STATIC: ret
7997
7998; LINUX-32-STATIC-LABEL: cam03:
7999; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
8000; LINUX-32-STATIC-NEXT: 	leal	dsrc+262144(,[[EAX]],4), %eax
8001; LINUX-32-STATIC-NEXT: 	ret
8002
8003; LINUX-32-PIC-LABEL: cam03:
8004; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
8005; LINUX-32-PIC-NEXT: 	leal	dsrc+262144(,[[EAX]],4), %eax
8006; LINUX-32-PIC-NEXT: 	ret
8007
8008; LINUX-64-PIC-LABEL: cam03:
8009; LINUX-64-PIC: 	movq	dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
8020; DARWIN-32-DYNAMIC-NEXT: 	leal	_dsrc+262144(,[[EAX]],4), %eax
8021; DARWIN-32-DYNAMIC-NEXT: 	ret
8022
8023; DARWIN-32-PIC: _cam03:
8024; DARWIN-32-PIC: 	calll	L125$pb
8025; DARWIN-32-PIC-NEXT: L125$pb:
8026; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8027; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
8028; DARWIN-32-PIC-NEXT: 	leal	(_dsrc-L125$pb)+262144([[EAX]],[[ECX]],4), %eax
8029; DARWIN-32-PIC-NEXT: 	ret
8030
8031; DARWIN-64-STATIC: _cam03:
8032; DARWIN-64-STATIC: 	leaq	_dsrc(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
8043; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
8044; DARWIN-64-PIC-NEXT: 	ret
8045}
8046
8047define i8* @cam04(i64 %i) nounwind {
8048entry:
8049	%0 = add i64 %i, 65536
8050	%1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
8051	%2 = bitcast i32* %1 to i8*
8052	ret i8* %2
8053; LINUX-64-STATIC-LABEL: cam04:
8054; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), %rax
8055; LINUX-64-STATIC: ret
8056
8057; LINUX-32-STATIC-LABEL: cam04:
8058; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
8059; LINUX-32-STATIC-NEXT: 	leal	ddst+262144(,[[EAX]],4), %eax
8060; LINUX-32-STATIC-NEXT: 	ret
8061
8062; LINUX-32-PIC-LABEL: cam04:
8063; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
8064; LINUX-32-PIC-NEXT: 	leal	ddst+262144(,[[EAX]],4), %eax
8065; LINUX-32-PIC-NEXT: 	ret
8066
8067; LINUX-64-PIC-LABEL: cam04:
8068; LINUX-64-PIC: 	movq	ddst@GOTPCREL(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
8079; DARWIN-32-DYNAMIC-NEXT: 	leal	_ddst+262144(,[[EAX]],4), %eax
8080; DARWIN-32-DYNAMIC-NEXT: 	ret
8081
8082; DARWIN-32-PIC: _cam04:
8083; DARWIN-32-PIC: 	calll	L126$pb
8084; DARWIN-32-PIC-NEXT: L126$pb:
8085; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8086; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
8087; DARWIN-32-PIC-NEXT: 	leal	(_ddst-L126$pb)+262144([[EAX]],[[ECX]],4), %eax
8088; DARWIN-32-PIC-NEXT: 	ret
8089
8090; DARWIN-64-STATIC: _cam04:
8091; DARWIN-64-STATIC: 	leaq	_ddst(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
8102; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
8103; DARWIN-64-PIC-NEXT: 	ret
8104}
8105
8106define i8* @cam05(i64 %i) nounwind {
8107entry:
8108	%0 = load i32*, i32** @dptr, align 8
8109	%1 = add i64 %i, 65536
8110	%2 = getelementptr i32, i32* %0, i64 %1
8111	%3 = bitcast i32* %2 to i8*
8112	ret i8* %3
8113; LINUX-64-STATIC-LABEL: cam05:
8114; LINUX-64-STATIC: movq    dptr(%rip), [[RAX:%r.x]]
8115; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
8116; LINUX-64-STATIC: ret
8117
8118; LINUX-32-STATIC-LABEL: cam05:
8119; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
8120; LINUX-32-STATIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
8121; LINUX-32-STATIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
8122; LINUX-32-STATIC-NEXT: 	ret
8123
8124; LINUX-32-PIC-LABEL: cam05:
8125; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
8126; LINUX-32-PIC-NEXT: 	movl	dptr, [[ECX:%e.x]]
8127; LINUX-32-PIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
8128; LINUX-32-PIC-NEXT: 	ret
8129
8130; LINUX-64-PIC-LABEL: cam05:
8131; LINUX-64-PIC: 	movq	dptr@GOTPCREL(%rip), [[RAX:%r.x]]
8132; LINUX-64-PIC-NEXT: 	movq	([[RAX]]), [[RAX:%r.x]]
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:%e.x]]
8138; DARWIN-32-STATIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
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:%e.x]]
8144; DARWIN-32-DYNAMIC-NEXT: 	movl	_dptr, [[ECX:%e.x]]
8145; DARWIN-32-DYNAMIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
8146; DARWIN-32-DYNAMIC-NEXT: 	ret
8147
8148; DARWIN-32-PIC: _cam05:
8149; DARWIN-32-PIC: 	calll	L127$pb
8150; DARWIN-32-PIC-NEXT: L127$pb:
8151; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8152; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
8153; DARWIN-32-PIC-NEXT: 	movl	_dptr-L127$pb([[EAX]]), [[EAX:%e.x]]
8154; 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:%r.x]]
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:%r.x]]
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:%r.x]]
8169; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
8170; DARWIN-64-PIC-NEXT: 	ret
8171}
8172
8173define i8* @cam06(i64 %i) nounwind {
8174entry:
8175	%0 = add i64 %i, 65536
8176	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
8177	%2 = bitcast i32* %1 to i8*
8178	ret i8* %2
8179; LINUX-64-STATIC-LABEL: cam06:
8180; LINUX-64-STATIC: leaq    lsrc+262144(,%rdi,4), %rax
8181; LINUX-64-STATIC: ret
8182
8183; LINUX-32-STATIC-LABEL: cam06:
8184; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
8185; LINUX-32-STATIC-NEXT: 	leal	lsrc+262144(,[[EAX]],4), %eax
8186; LINUX-32-STATIC-NEXT: 	ret
8187
8188; LINUX-32-PIC-LABEL: cam06:
8189; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
8190; LINUX-32-PIC-NEXT: 	leal	lsrc+262144(,[[EAX]],4), %eax
8191; LINUX-32-PIC-NEXT: 	ret
8192
8193; LINUX-64-PIC-LABEL: cam06:
8194; LINUX-64-PIC: 	leaq	lsrc(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
8205; DARWIN-32-DYNAMIC-NEXT: 	leal	_lsrc+262144(,[[EAX]],4), %eax
8206; DARWIN-32-DYNAMIC-NEXT: 	ret
8207
8208; DARWIN-32-PIC: _cam06:
8209; DARWIN-32-PIC: 	calll	L128$pb
8210; DARWIN-32-PIC-NEXT: L128$pb:
8211; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8212; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
8213; DARWIN-32-PIC-NEXT: 	leal	(_lsrc-L128$pb)+262144([[EAX]],[[ECX]],4), %eax
8214; DARWIN-32-PIC-NEXT: 	ret
8215
8216; DARWIN-64-STATIC: _cam06:
8217; DARWIN-64-STATIC: 	leaq	_lsrc(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
8228; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
8229; DARWIN-64-PIC-NEXT: 	ret
8230}
8231
8232define i8* @cam07(i64 %i) nounwind {
8233entry:
8234	%0 = add i64 %i, 65536
8235	%1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
8236	%2 = bitcast i32* %1 to i8*
8237	ret i8* %2
8238; LINUX-64-STATIC-LABEL: cam07:
8239; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), %rax
8240; LINUX-64-STATIC: ret
8241
8242; LINUX-32-STATIC-LABEL: cam07:
8243; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
8244; LINUX-32-STATIC-NEXT: 	leal	ldst+262144(,[[EAX]],4), %eax
8245; LINUX-32-STATIC-NEXT: 	ret
8246
8247; LINUX-32-PIC-LABEL: cam07:
8248; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
8249; LINUX-32-PIC-NEXT: 	leal	ldst+262144(,[[EAX]],4), %eax
8250; LINUX-32-PIC-NEXT: 	ret
8251
8252; LINUX-64-PIC-LABEL: cam07:
8253; LINUX-64-PIC: 	leaq	ldst(%rip), [[RAX:%r.x]]
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:%e.x]]
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:%e.x]]
8264; DARWIN-32-DYNAMIC-NEXT: 	leal	_ldst+262144(,[[EAX]],4), %eax
8265; DARWIN-32-DYNAMIC-NEXT: 	ret
8266
8267; DARWIN-32-PIC: _cam07:
8268; DARWIN-32-PIC: 	calll	L129$pb
8269; DARWIN-32-PIC-NEXT: L129$pb:
8270; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8271; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
8272; DARWIN-32-PIC-NEXT: 	leal	(_ldst-L129$pb)+262144([[EAX]],[[ECX]],4), %eax
8273; DARWIN-32-PIC-NEXT: 	ret
8274
8275; DARWIN-64-STATIC: _cam07:
8276; DARWIN-64-STATIC: 	leaq	_ldst(%rip), [[RAX:%r.x]]
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:%r.x]]
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:%r.x]]
8287; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
8288; DARWIN-64-PIC-NEXT: 	ret
8289}
8290
8291define i8* @cam08(i64 %i) nounwind {
8292entry:
8293	%0 = load i32*, i32** @lptr, align 8
8294	%1 = add i64 %i, 65536
8295	%2 = getelementptr i32, i32* %0, i64 %1
8296	%3 = bitcast i32* %2 to i8*
8297	ret i8* %3
8298; LINUX-64-STATIC-LABEL: cam08:
8299; LINUX-64-STATIC: movq    lptr(%rip), [[RAX:%r.x]]
8300; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
8301; LINUX-64-STATIC: ret
8302
8303; LINUX-32-STATIC-LABEL: cam08:
8304; LINUX-32-STATIC: 	movl	4(%esp), [[EAX:%e.x]]
8305; LINUX-32-STATIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
8306; LINUX-32-STATIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
8307; LINUX-32-STATIC-NEXT: 	ret
8308
8309; LINUX-32-PIC-LABEL: cam08:
8310; LINUX-32-PIC: 	movl	4(%esp), [[EAX:%e.x]]
8311; LINUX-32-PIC-NEXT: 	movl	lptr, [[ECX:%e.x]]
8312; LINUX-32-PIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
8313; LINUX-32-PIC-NEXT: 	ret
8314
8315; LINUX-64-PIC-LABEL: cam08:
8316; LINUX-64-PIC: 	movq	lptr(%rip), [[RAX:%r.x]]
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:%e.x]]
8322; DARWIN-32-STATIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
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:%e.x]]
8328; DARWIN-32-DYNAMIC-NEXT: 	movl	_lptr, [[ECX:%e.x]]
8329; DARWIN-32-DYNAMIC-NEXT: 	leal	262144([[ECX]],[[EAX]],4), %eax
8330; DARWIN-32-DYNAMIC-NEXT: 	ret
8331
8332; DARWIN-32-PIC: _cam08:
8333; DARWIN-32-PIC: 	calll	L130$pb
8334; DARWIN-32-PIC-NEXT: L130$pb:
8335; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8336; DARWIN-32-PIC-NEXT: 	movl	4(%esp), [[ECX:%e.x]]
8337; DARWIN-32-PIC-NEXT: 	movl	_lptr-L130$pb([[EAX]]), [[EAX:%e.x]]
8338; 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:%r.x]]
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:%r.x]]
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:%r.x]]
8353; DARWIN-64-PIC-NEXT: 	leaq	262144([[RAX]],%rdi,4), %rax
8354; DARWIN-64-PIC-NEXT: 	ret
8355}
8356
8357define void @lcallee() nounwind {
8358entry:
8359	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
8366	ret void
8367; LINUX-64-STATIC-LABEL: lcallee:
8368; 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
8375; LINUX-64-STATIC: ret
8376
8377; LINUX-32-STATIC-LABEL: lcallee:
8378; LINUX-32-STATIC: 	subl
8379; 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
8386; LINUX-32-STATIC-NEXT: 	addl
8387; LINUX-32-STATIC-NEXT: 	ret
8388
8389; LINUX-32-PIC-LABEL: lcallee:
8390; LINUX-32-PIC: 	subl
8391; 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
8398; LINUX-32-PIC-NEXT: 	addl
8399
8400; LINUX-32-PIC-NEXT: 	ret
8401
8402; LINUX-64-PIC-LABEL: lcallee:
8403; LINUX-64-PIC: 	pushq
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
8410; LINUX-64-PIC-NEXT: 	callq	x@PLT
8411; LINUX-64-PIC-NEXT: 	popq
8412; LINUX-64-PIC-NEXT: 	ret
8413
8414; DARWIN-32-STATIC: _lcallee:
8415; DARWIN-32-STATIC: 	subl	$12, %esp
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
8422; DARWIN-32-STATIC-NEXT: 	calll	_x
8423; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
8424; DARWIN-32-STATIC-NEXT: 	ret
8425
8426; DARWIN-32-DYNAMIC: _lcallee:
8427; DARWIN-32-DYNAMIC: 	subl	$12, %esp
8428; DARWIN-32-DYNAMIC-NEXT: 	calll	_x
8429; DARWIN-32-DYNAMIC-NEXT: 	calll	_x
8430; DARWIN-32-DYNAMIC-NEXT: 	calll	_x
8431; DARWIN-32-DYNAMIC-NEXT: 	calll	_x
8432; DARWIN-32-DYNAMIC-NEXT: 	calll	_x
8433; DARWIN-32-DYNAMIC-NEXT: 	calll	_x
8434; DARWIN-32-DYNAMIC-NEXT: 	calll	_x
8435; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
8436; DARWIN-32-DYNAMIC-NEXT: 	ret
8437
8438; DARWIN-32-PIC: _lcallee:
8439; DARWIN-32-PIC: 	subl	$12, %esp
8440; DARWIN-32-PIC-NEXT: 	calll	_x
8441; DARWIN-32-PIC-NEXT: 	calll	_x
8442; DARWIN-32-PIC-NEXT: 	calll	_x
8443; DARWIN-32-PIC-NEXT: 	calll	_x
8444; DARWIN-32-PIC-NEXT: 	calll	_x
8445; DARWIN-32-PIC-NEXT: 	calll	_x
8446; DARWIN-32-PIC-NEXT: 	calll	_x
8447; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
8448; DARWIN-32-PIC-NEXT: 	ret
8449
8450; DARWIN-64-STATIC: _lcallee:
8451; DARWIN-64-STATIC: 	pushq
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
8458; DARWIN-64-STATIC-NEXT: 	callq	_x
8459; DARWIN-64-STATIC-NEXT: 	popq
8460; DARWIN-64-STATIC-NEXT: 	ret
8461
8462; DARWIN-64-DYNAMIC: _lcallee:
8463; DARWIN-64-DYNAMIC: 	pushq
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
8470; DARWIN-64-DYNAMIC-NEXT: 	callq	_x
8471; DARWIN-64-DYNAMIC-NEXT: 	popq
8472; DARWIN-64-DYNAMIC-NEXT: 	ret
8473
8474; DARWIN-64-PIC: _lcallee:
8475; DARWIN-64-PIC: 	pushq
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
8482; DARWIN-64-PIC-NEXT: 	callq	_x
8483; DARWIN-64-PIC-NEXT: 	popq
8484; DARWIN-64-PIC-NEXT: 	ret
8485}
8486
8487declare void @x()
8488
8489define internal void @dcallee() nounwind {
8490entry:
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
8497	call void @y() nounwind
8498	ret void
8499; LINUX-64-STATIC-LABEL: dcallee:
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
8506; LINUX-64-STATIC: callq   y
8507; LINUX-64-STATIC: ret
8508
8509; LINUX-32-STATIC-LABEL: dcallee:
8510; LINUX-32-STATIC: 	subl
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
8517; LINUX-32-STATIC-NEXT: 	calll	y
8518; LINUX-32-STATIC-NEXT: 	addl
8519; LINUX-32-STATIC-NEXT: 	ret
8520
8521; LINUX-32-PIC-LABEL: dcallee:
8522; LINUX-32-PIC: 	subl
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
8529; LINUX-32-PIC-NEXT: 	calll	y
8530; LINUX-32-PIC-NEXT: 	addl
8531
8532; LINUX-32-PIC-NEXT: 	ret
8533
8534; LINUX-64-PIC-LABEL: dcallee:
8535; LINUX-64-PIC: 	pushq
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
8541; LINUX-64-PIC-NEXT: 	callq	y@PLT
8542; LINUX-64-PIC-NEXT: 	callq	y@PLT
8543; LINUX-64-PIC-NEXT: 	popq
8544; LINUX-64-PIC-NEXT: 	ret
8545
8546; DARWIN-32-STATIC: _dcallee:
8547; DARWIN-32-STATIC: 	subl	$12, %esp
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
8553; DARWIN-32-STATIC-NEXT: 	calll	_y
8554; DARWIN-32-STATIC-NEXT: 	calll	_y
8555; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
8556; DARWIN-32-STATIC-NEXT: 	ret
8557
8558; DARWIN-32-DYNAMIC: _dcallee:
8559; DARWIN-32-DYNAMIC: 	subl	$12, %esp
8560; DARWIN-32-DYNAMIC-NEXT: 	calll	_y
8561; DARWIN-32-DYNAMIC-NEXT: 	calll	_y
8562; DARWIN-32-DYNAMIC-NEXT: 	calll	_y
8563; DARWIN-32-DYNAMIC-NEXT: 	calll	_y
8564; DARWIN-32-DYNAMIC-NEXT: 	calll	_y
8565; DARWIN-32-DYNAMIC-NEXT: 	calll	_y
8566; DARWIN-32-DYNAMIC-NEXT: 	calll	_y
8567; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
8568; DARWIN-32-DYNAMIC-NEXT: 	ret
8569
8570; DARWIN-32-PIC: _dcallee:
8571; DARWIN-32-PIC: 	subl	$12, %esp
8572; DARWIN-32-PIC-NEXT: 	calll	_y
8573; DARWIN-32-PIC-NEXT: 	calll	_y
8574; DARWIN-32-PIC-NEXT: 	calll	_y
8575; DARWIN-32-PIC-NEXT: 	calll	_y
8576; DARWIN-32-PIC-NEXT: 	calll	_y
8577; DARWIN-32-PIC-NEXT: 	calll	_y
8578; DARWIN-32-PIC-NEXT: 	calll	_y
8579; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
8580; DARWIN-32-PIC-NEXT: 	ret
8581
8582; DARWIN-64-STATIC: _dcallee:
8583; DARWIN-64-STATIC: 	pushq
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
8589; DARWIN-64-STATIC-NEXT: 	callq	_y
8590; DARWIN-64-STATIC-NEXT: 	callq	_y
8591; DARWIN-64-STATIC-NEXT: 	popq
8592; DARWIN-64-STATIC-NEXT: 	ret
8593
8594; DARWIN-64-DYNAMIC: _dcallee:
8595; DARWIN-64-DYNAMIC: 	pushq
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
8601; DARWIN-64-DYNAMIC-NEXT: 	callq	_y
8602; DARWIN-64-DYNAMIC-NEXT: 	callq	_y
8603; DARWIN-64-DYNAMIC-NEXT: 	popq
8604; DARWIN-64-DYNAMIC-NEXT: 	ret
8605
8606; DARWIN-64-PIC: _dcallee:
8607; DARWIN-64-PIC: 	pushq
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
8613; DARWIN-64-PIC-NEXT: 	callq	_y
8614; DARWIN-64-PIC-NEXT: 	callq	_y
8615; DARWIN-64-PIC-NEXT: 	popq
8616; DARWIN-64-PIC-NEXT: 	ret
8617}
8618
8619declare void @y()
8620
8621define void ()* @address() nounwind {
8622entry:
8623	ret void ()* @callee
8624; LINUX-64-STATIC-LABEL: address:
8625; LINUX-64-STATIC: movl    $callee, %eax
8626; LINUX-64-STATIC: ret
8627
8628; LINUX-32-STATIC-LABEL: address:
8629; LINUX-32-STATIC: 	movl	$callee, %eax
8630; LINUX-32-STATIC-NEXT: 	ret
8631
8632; LINUX-32-PIC-LABEL: address:
8633; LINUX-32-PIC: 	movl	$callee, %eax
8634; LINUX-32-PIC-NEXT: 	ret
8635
8636; LINUX-64-PIC-LABEL: address:
8637; LINUX-64-PIC: 	movq	callee@GOTPCREL(%rip), %rax
8638; LINUX-64-PIC-NEXT: 	ret
8639
8640; DARWIN-32-STATIC: _address:
8641; DARWIN-32-STATIC: 	movl	$_callee, %eax
8642; DARWIN-32-STATIC-NEXT: 	ret
8643
8644; DARWIN-32-DYNAMIC: _address:
8645; DARWIN-32-DYNAMIC: 	movl	L_callee$non_lazy_ptr, %eax
8646; DARWIN-32-DYNAMIC-NEXT: 	ret
8647
8648; DARWIN-32-PIC: _address:
8649; DARWIN-32-PIC: 	calll	L133$pb
8650; DARWIN-32-PIC-NEXT: L133$pb:
8651; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8652; DARWIN-32-PIC-NEXT: 	movl	L_callee$non_lazy_ptr-L133$pb([[EAX]]), %eax
8653; DARWIN-32-PIC-NEXT: 	ret
8654
8655; DARWIN-64-STATIC: _address:
8656; DARWIN-64-STATIC: 	movq	_callee@GOTPCREL(%rip), %rax
8657; DARWIN-64-STATIC-NEXT: 	ret
8658
8659; DARWIN-64-DYNAMIC: _address:
8660; DARWIN-64-DYNAMIC: 	movq	_callee@GOTPCREL(%rip), %rax
8661; DARWIN-64-DYNAMIC-NEXT: 	ret
8662
8663; DARWIN-64-PIC: _address:
8664; DARWIN-64-PIC: 	movq	_callee@GOTPCREL(%rip), %rax
8665; DARWIN-64-PIC-NEXT: 	ret
8666}
8667
8668declare void @callee()
8669
8670define void ()* @laddress() nounwind {
8671entry:
8672	ret void ()* @lcallee
8673; LINUX-64-STATIC-LABEL: laddress:
8674; LINUX-64-STATIC: movl    $lcallee, %eax
8675; LINUX-64-STATIC: ret
8676
8677; LINUX-32-STATIC-LABEL: laddress:
8678; LINUX-32-STATIC: 	movl	$lcallee, %eax
8679; LINUX-32-STATIC-NEXT: 	ret
8680
8681; LINUX-32-PIC-LABEL: laddress:
8682; LINUX-32-PIC: 	movl	$lcallee, %eax
8683; LINUX-32-PIC-NEXT: 	ret
8684
8685; LINUX-64-PIC-LABEL: laddress:
8686; LINUX-64-PIC: 	movq	lcallee@GOTPCREL(%rip), %rax
8687; LINUX-64-PIC-NEXT: 	ret
8688
8689; DARWIN-32-STATIC: _laddress:
8690; DARWIN-32-STATIC: 	movl	$_lcallee, %eax
8691; DARWIN-32-STATIC-NEXT: 	ret
8692
8693; DARWIN-32-DYNAMIC: _laddress:
8694; DARWIN-32-DYNAMIC: 	movl	$_lcallee, %eax
8695; DARWIN-32-DYNAMIC-NEXT: 	ret
8696
8697; DARWIN-32-PIC: _laddress:
8698; DARWIN-32-PIC: 	calll	L134$pb
8699; DARWIN-32-PIC-NEXT: L134$pb:
8700; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8701; DARWIN-32-PIC-NEXT: 	leal	_lcallee-L134$pb([[EAX]]), %eax
8702; DARWIN-32-PIC-NEXT: 	ret
8703
8704; DARWIN-64-STATIC: _laddress:
8705; DARWIN-64-STATIC: 	leaq	_lcallee(%rip), %rax
8706; DARWIN-64-STATIC-NEXT: 	ret
8707
8708; DARWIN-64-DYNAMIC: _laddress:
8709; DARWIN-64-DYNAMIC: 	leaq	_lcallee(%rip), %rax
8710; DARWIN-64-DYNAMIC-NEXT: 	ret
8711
8712; DARWIN-64-PIC: _laddress:
8713; DARWIN-64-PIC: 	leaq	_lcallee(%rip), %rax
8714; DARWIN-64-PIC-NEXT: 	ret
8715}
8716
8717define void ()* @daddress() nounwind {
8718entry:
8719	ret void ()* @dcallee
8720; LINUX-64-STATIC-LABEL: daddress:
8721; LINUX-64-STATIC: movl    $dcallee, %eax
8722; LINUX-64-STATIC: ret
8723
8724; LINUX-32-STATIC-LABEL: daddress:
8725; LINUX-32-STATIC: 	movl	$dcallee, %eax
8726; LINUX-32-STATIC-NEXT: 	ret
8727
8728; LINUX-32-PIC-LABEL: daddress:
8729; LINUX-32-PIC: 	movl	$dcallee, %eax
8730; LINUX-32-PIC-NEXT: 	ret
8731
8732; LINUX-64-PIC-LABEL: daddress:
8733; LINUX-64-PIC: 	leaq	dcallee(%rip), %rax
8734; LINUX-64-PIC-NEXT: 	ret
8735
8736; DARWIN-32-STATIC: _daddress:
8737; DARWIN-32-STATIC: 	movl	$_dcallee, %eax
8738; DARWIN-32-STATIC-NEXT: 	ret
8739
8740; DARWIN-32-DYNAMIC: _daddress:
8741; DARWIN-32-DYNAMIC: 	movl	$_dcallee, %eax
8742; DARWIN-32-DYNAMIC-NEXT: 	ret
8743
8744; DARWIN-32-PIC: _daddress:
8745; DARWIN-32-PIC: 	calll	L135$pb
8746; DARWIN-32-PIC-NEXT: L135$pb:
8747; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
8748; DARWIN-32-PIC-NEXT: 	leal	_dcallee-L135$pb([[EAX]]), %eax
8749; DARWIN-32-PIC-NEXT: 	ret
8750
8751; DARWIN-64-STATIC: _daddress:
8752; DARWIN-64-STATIC: 	leaq	_dcallee(%rip), %rax
8753; DARWIN-64-STATIC-NEXT: 	ret
8754
8755; DARWIN-64-DYNAMIC: _daddress:
8756; DARWIN-64-DYNAMIC: 	leaq	_dcallee(%rip), %rax
8757; DARWIN-64-DYNAMIC-NEXT: 	ret
8758
8759; DARWIN-64-PIC: _daddress:
8760; DARWIN-64-PIC: 	leaq	_dcallee(%rip), %rax
8761; DARWIN-64-PIC-NEXT: 	ret
8762}
8763
8764define void @caller() nounwind {
8765entry:
8766	call void @callee() nounwind
8767	call void @callee() nounwind
8768	ret void
8769; LINUX-64-STATIC-LABEL: caller:
8770; LINUX-64-STATIC: callq   callee
8771; LINUX-64-STATIC: callq   callee
8772; LINUX-64-STATIC: ret
8773
8774; LINUX-32-STATIC-LABEL: caller:
8775; LINUX-32-STATIC: 	subl
8776; LINUX-32-STATIC-NEXT: 	calll	callee
8777; LINUX-32-STATIC-NEXT: 	calll	callee
8778; LINUX-32-STATIC-NEXT: 	addl
8779; LINUX-32-STATIC-NEXT: 	ret
8780
8781; LINUX-32-PIC-LABEL: caller:
8782; LINUX-32-PIC: 	subl
8783; LINUX-32-PIC-NEXT: 	calll	callee
8784; LINUX-32-PIC-NEXT: 	calll	callee
8785; LINUX-32-PIC-NEXT: 	addl
8786
8787; LINUX-32-PIC-NEXT: 	ret
8788
8789; LINUX-64-PIC-LABEL: caller:
8790; LINUX-64-PIC: 	pushq
8791; LINUX-64-PIC-NEXT: 	callq	callee@PLT
8792; LINUX-64-PIC-NEXT: 	callq	callee@PLT
8793; LINUX-64-PIC-NEXT: 	popq
8794; LINUX-64-PIC-NEXT: 	ret
8795
8796; DARWIN-32-STATIC: _caller:
8797; DARWIN-32-STATIC: 	subl	$12, %esp
8798; DARWIN-32-STATIC-NEXT: 	calll	_callee
8799; DARWIN-32-STATIC-NEXT: 	calll	_callee
8800; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
8801; DARWIN-32-STATIC-NEXT: 	ret
8802
8803; DARWIN-32-DYNAMIC: _caller:
8804; DARWIN-32-DYNAMIC: 	subl	$12, %esp
8805; DARWIN-32-DYNAMIC-NEXT: 	calll	_callee
8806; DARWIN-32-DYNAMIC-NEXT: 	calll	_callee
8807; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
8808; DARWIN-32-DYNAMIC-NEXT: 	ret
8809
8810; DARWIN-32-PIC: _caller:
8811; DARWIN-32-PIC: 	subl	$12, %esp
8812; DARWIN-32-PIC-NEXT: 	calll	_callee
8813; DARWIN-32-PIC-NEXT: 	calll	_callee
8814; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
8815; DARWIN-32-PIC-NEXT: 	ret
8816
8817; DARWIN-64-STATIC: _caller:
8818; DARWIN-64-STATIC: 	pushq
8819; DARWIN-64-STATIC-NEXT: 	callq	_callee
8820; DARWIN-64-STATIC-NEXT: 	callq	_callee
8821; DARWIN-64-STATIC-NEXT: 	popq
8822; DARWIN-64-STATIC-NEXT: 	ret
8823
8824; DARWIN-64-DYNAMIC: _caller:
8825; DARWIN-64-DYNAMIC: 	pushq
8826; DARWIN-64-DYNAMIC-NEXT: 	callq	_callee
8827; DARWIN-64-DYNAMIC-NEXT: 	callq	_callee
8828; DARWIN-64-DYNAMIC-NEXT: 	popq
8829; DARWIN-64-DYNAMIC-NEXT: 	ret
8830
8831; DARWIN-64-PIC: _caller:
8832; DARWIN-64-PIC: 	pushq
8833; DARWIN-64-PIC-NEXT: 	callq	_callee
8834; DARWIN-64-PIC-NEXT: 	callq	_callee
8835; DARWIN-64-PIC-NEXT: 	popq
8836; DARWIN-64-PIC-NEXT: 	ret
8837}
8838
8839define void @dcaller() nounwind {
8840entry:
8841	call void @dcallee() nounwind
8842	call void @dcallee() nounwind
8843	ret void
8844; LINUX-64-STATIC-LABEL: dcaller:
8845; LINUX-64-STATIC: callq   dcallee
8846; LINUX-64-STATIC: callq   dcallee
8847; LINUX-64-STATIC: ret
8848
8849; LINUX-32-STATIC-LABEL: dcaller:
8850; LINUX-32-STATIC: 	subl
8851; LINUX-32-STATIC-NEXT: 	calll	dcallee
8852; LINUX-32-STATIC-NEXT: 	calll	dcallee
8853; LINUX-32-STATIC-NEXT: 	addl
8854; LINUX-32-STATIC-NEXT: 	ret
8855
8856; LINUX-32-PIC-LABEL: dcaller:
8857; LINUX-32-PIC: 	subl
8858; LINUX-32-PIC-NEXT: 	calll	dcallee
8859; LINUX-32-PIC-NEXT: 	calll	dcallee
8860; LINUX-32-PIC-NEXT: 	addl
8861
8862; LINUX-32-PIC-NEXT: 	ret
8863
8864; LINUX-64-PIC-LABEL: dcaller:
8865; LINUX-64-PIC: 	pushq
8866; LINUX-64-PIC-NEXT: 	callq	dcallee
8867; LINUX-64-PIC-NEXT: 	callq	dcallee
8868; LINUX-64-PIC-NEXT: 	popq
8869; LINUX-64-PIC-NEXT: 	ret
8870
8871; DARWIN-32-STATIC: _dcaller:
8872; DARWIN-32-STATIC: 	subl	$12, %esp
8873; DARWIN-32-STATIC-NEXT: 	calll	_dcallee
8874; DARWIN-32-STATIC-NEXT: 	calll	_dcallee
8875; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
8876; DARWIN-32-STATIC-NEXT: 	ret
8877
8878; DARWIN-32-DYNAMIC: _dcaller:
8879; DARWIN-32-DYNAMIC: 	subl	$12, %esp
8880; DARWIN-32-DYNAMIC-NEXT: 	calll	_dcallee
8881; DARWIN-32-DYNAMIC-NEXT: 	calll	_dcallee
8882; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
8883; DARWIN-32-DYNAMIC-NEXT: 	ret
8884
8885; DARWIN-32-PIC: _dcaller:
8886; DARWIN-32-PIC: 	subl	$12, %esp
8887; DARWIN-32-PIC-NEXT: 	calll	_dcallee
8888; DARWIN-32-PIC-NEXT: 	calll	_dcallee
8889; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
8890; DARWIN-32-PIC-NEXT: 	ret
8891
8892; DARWIN-64-STATIC: _dcaller:
8893; DARWIN-64-STATIC: 	pushq
8894; DARWIN-64-STATIC-NEXT: 	callq	_dcallee
8895; DARWIN-64-STATIC-NEXT: 	callq	_dcallee
8896; DARWIN-64-STATIC-NEXT: 	popq
8897; DARWIN-64-STATIC-NEXT: 	ret
8898
8899; DARWIN-64-DYNAMIC: _dcaller:
8900; DARWIN-64-DYNAMIC: 	pushq
8901; DARWIN-64-DYNAMIC-NEXT: 	callq	_dcallee
8902; DARWIN-64-DYNAMIC-NEXT: 	callq	_dcallee
8903; DARWIN-64-DYNAMIC-NEXT: 	popq
8904; DARWIN-64-DYNAMIC-NEXT: 	ret
8905
8906; DARWIN-64-PIC: _dcaller:
8907; DARWIN-64-PIC: 	pushq
8908; DARWIN-64-PIC-NEXT: 	callq	_dcallee
8909; DARWIN-64-PIC-NEXT: 	callq	_dcallee
8910; DARWIN-64-PIC-NEXT: 	popq
8911; DARWIN-64-PIC-NEXT: 	ret
8912}
8913
8914define void @lcaller() nounwind {
8915entry:
8916	call void @lcallee() nounwind
8917	call void @lcallee() nounwind
8918	ret void
8919; LINUX-64-STATIC-LABEL: lcaller:
8920; LINUX-64-STATIC: callq   lcallee
8921; LINUX-64-STATIC: callq   lcallee
8922; LINUX-64-STATIC: ret
8923
8924; LINUX-32-STATIC-LABEL: lcaller:
8925; LINUX-32-STATIC: 	subl
8926; LINUX-32-STATIC-NEXT: 	calll	lcallee
8927; LINUX-32-STATIC-NEXT: 	calll	lcallee
8928; LINUX-32-STATIC-NEXT: 	addl
8929; LINUX-32-STATIC-NEXT: 	ret
8930
8931; LINUX-32-PIC-LABEL: lcaller:
8932; LINUX-32-PIC: 	subl
8933; LINUX-32-PIC-NEXT: 	calll	lcallee
8934; LINUX-32-PIC-NEXT: 	calll	lcallee
8935; LINUX-32-PIC-NEXT: 	addl
8936
8937; LINUX-32-PIC-NEXT: 	ret
8938
8939; LINUX-64-PIC-LABEL: lcaller:
8940; LINUX-64-PIC: 	pushq
8941; LINUX-64-PIC-NEXT: 	callq	lcallee@PLT
8942; LINUX-64-PIC-NEXT: 	callq	lcallee@PLT
8943; LINUX-64-PIC-NEXT: 	popq
8944; LINUX-64-PIC-NEXT: 	ret
8945
8946; DARWIN-32-STATIC: _lcaller:
8947; DARWIN-32-STATIC: 	subl	$12, %esp
8948; DARWIN-32-STATIC-NEXT: 	calll	_lcallee
8949; DARWIN-32-STATIC-NEXT: 	calll	_lcallee
8950; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
8951; DARWIN-32-STATIC-NEXT: 	ret
8952
8953; DARWIN-32-DYNAMIC: _lcaller:
8954; DARWIN-32-DYNAMIC: 	subl	$12, %esp
8955; DARWIN-32-DYNAMIC-NEXT: 	calll	_lcallee
8956; DARWIN-32-DYNAMIC-NEXT: 	calll	_lcallee
8957; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
8958; DARWIN-32-DYNAMIC-NEXT: 	ret
8959
8960; DARWIN-32-PIC: _lcaller:
8961; DARWIN-32-PIC: 	subl	$12, %esp
8962; DARWIN-32-PIC-NEXT: 	calll	_lcallee
8963; DARWIN-32-PIC-NEXT: 	calll	_lcallee
8964; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
8965; DARWIN-32-PIC-NEXT: 	ret
8966
8967; DARWIN-64-STATIC: _lcaller:
8968; DARWIN-64-STATIC: 	pushq
8969; DARWIN-64-STATIC-NEXT: 	callq	_lcallee
8970; DARWIN-64-STATIC-NEXT: 	callq	_lcallee
8971; DARWIN-64-STATIC-NEXT: 	popq
8972; DARWIN-64-STATIC-NEXT: 	ret
8973
8974; DARWIN-64-DYNAMIC: _lcaller:
8975; DARWIN-64-DYNAMIC: 	pushq
8976; DARWIN-64-DYNAMIC-NEXT: 	callq	_lcallee
8977; DARWIN-64-DYNAMIC-NEXT: 	callq	_lcallee
8978; DARWIN-64-DYNAMIC-NEXT: 	popq
8979; DARWIN-64-DYNAMIC-NEXT: 	ret
8980
8981; DARWIN-64-PIC: _lcaller:
8982; DARWIN-64-PIC: 	pushq
8983; DARWIN-64-PIC-NEXT: 	callq	_lcallee
8984; DARWIN-64-PIC-NEXT: 	callq	_lcallee
8985; DARWIN-64-PIC-NEXT: 	popq
8986; DARWIN-64-PIC-NEXT: 	ret
8987}
8988
8989define void @tailcaller() nounwind {
8990entry:
8991	call void @callee() nounwind
8992	ret void
8993; LINUX-64-STATIC-LABEL: tailcaller:
8994; LINUX-64-STATIC: callq   callee
8995; LINUX-64-STATIC: ret
8996
8997; LINUX-32-STATIC-LABEL: tailcaller:
8998; LINUX-32-STATIC: 	subl
8999; LINUX-32-STATIC-NEXT: 	calll	callee
9000; LINUX-32-STATIC-NEXT: 	addl
9001; LINUX-32-STATIC-NEXT: 	ret
9002
9003; LINUX-32-PIC-LABEL: tailcaller:
9004; LINUX-32-PIC: 	subl
9005; LINUX-32-PIC-NEXT: 	calll	callee
9006; LINUX-32-PIC-NEXT: 	addl
9007
9008; LINUX-32-PIC-NEXT: 	ret
9009
9010; LINUX-64-PIC-LABEL: tailcaller:
9011; LINUX-64-PIC: 	pushq
9012; LINUX-64-PIC-NEXT: 	callq	callee@PLT
9013; LINUX-64-PIC-NEXT: 	popq
9014; LINUX-64-PIC-NEXT: 	ret
9015
9016; DARWIN-32-STATIC: _tailcaller:
9017; DARWIN-32-STATIC: 	subl	$12, %esp
9018; DARWIN-32-STATIC-NEXT: 	calll	_callee
9019; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9020; DARWIN-32-STATIC-NEXT: 	ret
9021
9022; DARWIN-32-DYNAMIC: _tailcaller:
9023; DARWIN-32-DYNAMIC: 	subl	$12, %esp
9024; DARWIN-32-DYNAMIC-NEXT: 	calll	_callee
9025; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
9026; DARWIN-32-DYNAMIC-NEXT: 	ret
9027
9028; DARWIN-32-PIC: _tailcaller:
9029; DARWIN-32-PIC: 	subl	$12, %esp
9030; DARWIN-32-PIC-NEXT: 	calll	_callee
9031; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
9032; DARWIN-32-PIC-NEXT: 	ret
9033
9034; DARWIN-64-STATIC: _tailcaller:
9035; DARWIN-64-STATIC: 	pushq
9036; DARWIN-64-STATIC-NEXT: 	callq	_callee
9037; DARWIN-64-STATIC-NEXT: 	popq
9038; DARWIN-64-STATIC-NEXT: 	ret
9039
9040; DARWIN-64-DYNAMIC: _tailcaller:
9041; DARWIN-64-DYNAMIC: 	pushq
9042; DARWIN-64-DYNAMIC-NEXT: 	callq	_callee
9043; DARWIN-64-DYNAMIC-NEXT: 	popq
9044; DARWIN-64-DYNAMIC-NEXT: 	ret
9045
9046; DARWIN-64-PIC: _tailcaller:
9047; DARWIN-64-PIC: 	pushq
9048; DARWIN-64-PIC-NEXT: 	callq	_callee
9049; DARWIN-64-PIC-NEXT: 	popq
9050; DARWIN-64-PIC-NEXT: 	ret
9051}
9052
9053define void @dtailcaller() nounwind {
9054entry:
9055	call void @dcallee() nounwind
9056	ret void
9057; LINUX-64-STATIC-LABEL: dtailcaller:
9058; LINUX-64-STATIC: callq   dcallee
9059; LINUX-64-STATIC: ret
9060
9061; LINUX-32-STATIC-LABEL: dtailcaller:
9062; LINUX-32-STATIC: 	subl
9063; LINUX-32-STATIC-NEXT: 	calll	dcallee
9064; LINUX-32-STATIC-NEXT: 	addl
9065; LINUX-32-STATIC-NEXT: 	ret
9066
9067; LINUX-32-PIC-LABEL: dtailcaller:
9068; LINUX-32-PIC: 	subl
9069; LINUX-32-PIC-NEXT: 	calll	dcallee
9070; LINUX-32-PIC-NEXT: 	addl
9071
9072; LINUX-32-PIC-NEXT: 	ret
9073
9074; LINUX-64-PIC-LABEL: dtailcaller:
9075; LINUX-64-PIC: 	pushq
9076; LINUX-64-PIC-NEXT: 	callq	dcallee
9077; LINUX-64-PIC-NEXT: 	popq
9078; LINUX-64-PIC-NEXT: 	ret
9079
9080; DARWIN-32-STATIC: _dtailcaller:
9081; DARWIN-32-STATIC: 	subl	$12, %esp
9082; DARWIN-32-STATIC-NEXT: 	calll	_dcallee
9083; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9084; DARWIN-32-STATIC-NEXT: 	ret
9085
9086; DARWIN-32-DYNAMIC: _dtailcaller:
9087; DARWIN-32-DYNAMIC: 	subl	$12, %esp
9088; DARWIN-32-DYNAMIC-NEXT: 	calll	_dcallee
9089; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
9090; DARWIN-32-DYNAMIC-NEXT: 	ret
9091
9092; DARWIN-32-PIC: _dtailcaller:
9093; DARWIN-32-PIC: 	subl	$12, %esp
9094; DARWIN-32-PIC-NEXT: 	calll	_dcallee
9095; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
9096; DARWIN-32-PIC-NEXT: 	ret
9097
9098; DARWIN-64-STATIC: _dtailcaller:
9099; DARWIN-64-STATIC: 	pushq
9100; DARWIN-64-STATIC-NEXT: 	callq	_dcallee
9101; DARWIN-64-STATIC-NEXT: 	popq
9102; DARWIN-64-STATIC-NEXT: 	ret
9103
9104; DARWIN-64-DYNAMIC: _dtailcaller:
9105; DARWIN-64-DYNAMIC: 	pushq
9106; DARWIN-64-DYNAMIC-NEXT: 	callq	_dcallee
9107; DARWIN-64-DYNAMIC-NEXT: 	popq
9108; DARWIN-64-DYNAMIC-NEXT: 	ret
9109
9110; DARWIN-64-PIC: _dtailcaller:
9111; DARWIN-64-PIC: 	pushq
9112; DARWIN-64-PIC-NEXT: 	callq	_dcallee
9113; DARWIN-64-PIC-NEXT: 	popq
9114; DARWIN-64-PIC-NEXT: 	ret
9115}
9116
9117define void @ltailcaller() nounwind {
9118entry:
9119	call void @lcallee() nounwind
9120	ret void
9121; LINUX-64-STATIC-LABEL: ltailcaller:
9122; LINUX-64-STATIC: callq   lcallee
9123; LINUX-64-STATIC: ret
9124
9125; LINUX-32-STATIC-LABEL: ltailcaller:
9126; LINUX-32-STATIC: 	subl
9127; LINUX-32-STATIC-NEXT: 	calll	lcallee
9128; LINUX-32-STATIC-NEXT: 	addl
9129; LINUX-32-STATIC-NEXT: 	ret
9130
9131; LINUX-32-PIC-LABEL: ltailcaller:
9132; LINUX-32-PIC: 	subl
9133; LINUX-32-PIC-NEXT: 	calll	lcallee
9134; LINUX-32-PIC-NEXT: 	addl
9135
9136; LINUX-32-PIC-NEXT: 	ret
9137
9138; LINUX-64-PIC-LABEL: ltailcaller:
9139; LINUX-64-PIC: 	pushq
9140; LINUX-64-PIC-NEXT: 	callq	lcallee@PLT
9141; LINUX-64-PIC-NEXT: 	popq
9142; LINUX-64-PIC-NEXT: 	ret
9143
9144; DARWIN-32-STATIC: _ltailcaller:
9145; DARWIN-32-STATIC: 	subl	$12, %esp
9146; DARWIN-32-STATIC-NEXT: 	calll	_lcallee
9147; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9148; DARWIN-32-STATIC-NEXT: 	ret
9149
9150; DARWIN-32-DYNAMIC: _ltailcaller:
9151; DARWIN-32-DYNAMIC: 	subl	$12, %esp
9152; DARWIN-32-DYNAMIC-NEXT: 	calll	_lcallee
9153; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
9154; DARWIN-32-DYNAMIC-NEXT: 	ret
9155
9156; DARWIN-32-PIC: _ltailcaller:
9157; DARWIN-32-PIC: 	subl	$12, %esp
9158; DARWIN-32-PIC-NEXT: 	calll	_lcallee
9159; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
9160; DARWIN-32-PIC-NEXT: 	ret
9161
9162; DARWIN-64-STATIC: _ltailcaller:
9163; DARWIN-64-STATIC: 	pushq
9164; DARWIN-64-STATIC-NEXT: 	callq	_lcallee
9165; DARWIN-64-STATIC-NEXT: 	popq
9166; DARWIN-64-STATIC-NEXT: 	ret
9167
9168; DARWIN-64-DYNAMIC: _ltailcaller:
9169; DARWIN-64-DYNAMIC: 	pushq
9170; DARWIN-64-DYNAMIC-NEXT: 	callq	_lcallee
9171; DARWIN-64-DYNAMIC-NEXT: 	popq
9172; DARWIN-64-DYNAMIC-NEXT: 	ret
9173
9174; DARWIN-64-PIC: _ltailcaller:
9175; DARWIN-64-PIC: 	pushq
9176; DARWIN-64-PIC-NEXT: 	callq	_lcallee
9177; DARWIN-64-PIC-NEXT: 	popq
9178; DARWIN-64-PIC-NEXT: 	ret
9179}
9180
9181define void @icaller() nounwind {
9182entry:
9183	%0 = load void ()*, void ()** @ifunc, align 8
9184	call void %0() nounwind
9185	%1 = load void ()*, void ()** @ifunc, align 8
9186	call void %1() nounwind
9187	ret void
9188; LINUX-64-STATIC-LABEL: icaller:
9189; LINUX-64-STATIC: callq   *ifunc
9190; LINUX-64-STATIC: callq   *ifunc
9191; LINUX-64-STATIC: ret
9192
9193; LINUX-32-STATIC-LABEL: icaller:
9194; LINUX-32-STATIC: 	subl
9195; LINUX-32-STATIC-NEXT: 	calll	*ifunc
9196; LINUX-32-STATIC-NEXT: 	calll	*ifunc
9197; LINUX-32-STATIC-NEXT: 	addl
9198; LINUX-32-STATIC-NEXT: 	ret
9199
9200; LINUX-32-PIC-LABEL: icaller:
9201; LINUX-32-PIC: 	subl
9202; LINUX-32-PIC-NEXT: 	calll	*ifunc
9203; LINUX-32-PIC-NEXT: 	calll	*ifunc
9204; LINUX-32-PIC-NEXT: 	addl
9205
9206; LINUX-32-PIC-NEXT: 	ret
9207
9208; LINUX-64-PIC-LABEL: icaller:
9209; LINUX-64-PIC: 	pushq	[[RBX:%r.x]]
9210; LINUX-64-PIC-NEXT: 	movq	ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9211; LINUX-64-PIC-NEXT: 	callq	*([[RBX]])
9212; LINUX-64-PIC-NEXT: 	callq	*([[RBX]])
9213; LINUX-64-PIC-NEXT: 	popq	[[RBX:%r.x]]
9214; LINUX-64-PIC-NEXT: 	ret
9215
9216; DARWIN-32-STATIC: _icaller:
9217; DARWIN-32-STATIC: 	subl	$12, %esp
9218; DARWIN-32-STATIC-NEXT: 	calll	*_ifunc
9219; DARWIN-32-STATIC-NEXT: 	calll	*_ifunc
9220; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9221; DARWIN-32-STATIC-NEXT: 	ret
9222
9223; DARWIN-32-DYNAMIC: _icaller:
9224; DARWIN-32-DYNAMIC: 	pushl	%esi
9225; DARWIN-32-DYNAMIC-NEXT: 	subl	$8, %esp
9226; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ifunc$non_lazy_ptr, %esi
9227; DARWIN-32-DYNAMIC-NEXT: 	calll	*(%esi)
9228; DARWIN-32-DYNAMIC-NEXT: 	calll	*(%esi)
9229; DARWIN-32-DYNAMIC-NEXT: 	addl	$8, %esp
9230; DARWIN-32-DYNAMIC-NEXT: 	popl	%esi
9231; DARWIN-32-DYNAMIC-NEXT: 	ret
9232
9233; DARWIN-32-PIC: _icaller:
9234; DARWIN-32-PIC: 	pushl	%esi
9235; DARWIN-32-PIC-NEXT: 	subl	$8, %esp
9236; DARWIN-32-PIC-NEXT: 	calll	L142$pb
9237; DARWIN-32-PIC-NEXT: L142$pb:
9238; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
9239; DARWIN-32-PIC-NEXT: 	movl	L_ifunc$non_lazy_ptr-L142$pb([[EAX]]), %esi
9240; DARWIN-32-PIC-NEXT: 	calll	*(%esi)
9241; DARWIN-32-PIC-NEXT: 	calll	*(%esi)
9242; DARWIN-32-PIC-NEXT: 	addl	$8, %esp
9243; DARWIN-32-PIC-NEXT: 	popl	%esi
9244; DARWIN-32-PIC-NEXT: 	ret
9245
9246; DARWIN-64-STATIC: _icaller:
9247; DARWIN-64-STATIC: 	pushq	[[RBX:%r.x]]
9248; DARWIN-64-STATIC-NEXT: 	movq	_ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9249; DARWIN-64-STATIC-NEXT: 	callq	*([[RBX]])
9250; DARWIN-64-STATIC-NEXT: 	callq	*([[RBX]])
9251; DARWIN-64-STATIC-NEXT: 	popq	[[RBX:%r.x]]
9252; DARWIN-64-STATIC-NEXT: 	ret
9253
9254; DARWIN-64-DYNAMIC: _icaller:
9255; DARWIN-64-DYNAMIC: 	pushq	[[RBX:%r.x]]
9256; DARWIN-64-DYNAMIC-NEXT: 	movq	_ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9257; DARWIN-64-DYNAMIC-NEXT: 	callq	*([[RBX]])
9258; DARWIN-64-DYNAMIC-NEXT: 	callq	*([[RBX]])
9259; DARWIN-64-DYNAMIC-NEXT: 	popq	[[RBX:%r.x]]
9260; DARWIN-64-DYNAMIC-NEXT: 	ret
9261
9262; DARWIN-64-PIC: _icaller:
9263; DARWIN-64-PIC: 	pushq	[[RBX:%r.x]]
9264; DARWIN-64-PIC-NEXT: 	movq	_ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9265; DARWIN-64-PIC-NEXT: 	callq	*([[RBX]])
9266; DARWIN-64-PIC-NEXT: 	callq	*([[RBX]])
9267; DARWIN-64-PIC-NEXT: 	popq	[[RBX:%r.x]]
9268; DARWIN-64-PIC-NEXT: 	ret
9269}
9270
9271define void @dicaller() nounwind {
9272entry:
9273	%0 = load void ()*, void ()** @difunc, align 8
9274	call void %0() nounwind
9275	%1 = load void ()*, void ()** @difunc, align 8
9276	call void %1() nounwind
9277	ret void
9278; LINUX-64-STATIC-LABEL: dicaller:
9279; LINUX-64-STATIC: callq   *difunc
9280; LINUX-64-STATIC: callq   *difunc
9281; LINUX-64-STATIC: ret
9282
9283; LINUX-32-STATIC-LABEL: dicaller:
9284; LINUX-32-STATIC: 	subl
9285; LINUX-32-STATIC-NEXT: 	calll	*difunc
9286; LINUX-32-STATIC-NEXT: 	calll	*difunc
9287; LINUX-32-STATIC-NEXT: 	addl
9288; LINUX-32-STATIC-NEXT: 	ret
9289
9290; LINUX-32-PIC-LABEL: dicaller:
9291; LINUX-32-PIC: 	subl
9292; LINUX-32-PIC-NEXT: 	calll	*difunc
9293; LINUX-32-PIC-NEXT: 	calll	*difunc
9294; LINUX-32-PIC-NEXT: 	addl
9295
9296; LINUX-32-PIC-NEXT: 	ret
9297
9298; LINUX-64-PIC-LABEL: dicaller:
9299; LINUX-64-PIC: 	pushq	[[RBX:%r.x]]
9300; LINUX-64-PIC-NEXT: 	movq	difunc@GOTPCREL(%rip), [[RBX:%r.x]]
9301; LINUX-64-PIC-NEXT: 	callq	*([[RBX]])
9302; LINUX-64-PIC-NEXT: 	callq	*([[RBX]])
9303; LINUX-64-PIC-NEXT: 	popq	[[RBX:%r.x]]
9304; LINUX-64-PIC-NEXT: 	ret
9305
9306; DARWIN-32-STATIC: _dicaller:
9307; DARWIN-32-STATIC: 	subl	$12, %esp
9308; DARWIN-32-STATIC-NEXT: 	calll	*_difunc
9309; DARWIN-32-STATIC-NEXT: 	calll	*_difunc
9310; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9311; DARWIN-32-STATIC-NEXT: 	ret
9312
9313; DARWIN-32-DYNAMIC: _dicaller:
9314; DARWIN-32-DYNAMIC: 	subl	$12, %esp
9315; DARWIN-32-DYNAMIC-NEXT: 	calll	*_difunc
9316; DARWIN-32-DYNAMIC-NEXT: 	calll	*_difunc
9317; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
9318; DARWIN-32-DYNAMIC-NEXT: 	ret
9319
9320; DARWIN-32-PIC: _dicaller:
9321; DARWIN-32-PIC: 	pushl	%esi
9322; DARWIN-32-PIC-NEXT: 	subl	$8, %esp
9323; DARWIN-32-PIC-NEXT: 	calll	L143$pb
9324; DARWIN-32-PIC-NEXT: L143$pb:
9325; DARWIN-32-PIC-NEXT: 	popl	%esi
9326; DARWIN-32-PIC-NEXT: 	calll	*_difunc-L143$pb(%esi)
9327; DARWIN-32-PIC-NEXT: 	calll	*_difunc-L143$pb(%esi)
9328; DARWIN-32-PIC-NEXT: 	addl	$8, %esp
9329; DARWIN-32-PIC-NEXT: 	popl	%esi
9330; DARWIN-32-PIC-NEXT: 	ret
9331
9332; DARWIN-64-STATIC: _dicaller:
9333; DARWIN-64-STATIC: 	pushq
9334; DARWIN-64-STATIC-NEXT: 	callq	*_difunc(%rip)
9335; DARWIN-64-STATIC-NEXT: 	callq	*_difunc(%rip)
9336; DARWIN-64-STATIC-NEXT: 	popq
9337; DARWIN-64-STATIC-NEXT: 	ret
9338
9339; DARWIN-64-DYNAMIC: _dicaller:
9340; DARWIN-64-DYNAMIC: 	pushq
9341; DARWIN-64-DYNAMIC-NEXT: 	callq	*_difunc(%rip)
9342; DARWIN-64-DYNAMIC-NEXT: 	callq	*_difunc(%rip)
9343; DARWIN-64-DYNAMIC-NEXT: 	popq
9344; DARWIN-64-DYNAMIC-NEXT: 	ret
9345
9346; DARWIN-64-PIC: _dicaller:
9347; DARWIN-64-PIC: 	pushq
9348; DARWIN-64-PIC-NEXT: 	callq	*_difunc(%rip)
9349; DARWIN-64-PIC-NEXT: 	callq	*_difunc(%rip)
9350; DARWIN-64-PIC-NEXT: 	popq
9351; DARWIN-64-PIC-NEXT: 	ret
9352}
9353
9354define void @licaller() nounwind {
9355entry:
9356	%0 = load void ()*, void ()** @lifunc, align 8
9357	call void %0() nounwind
9358	%1 = load void ()*, void ()** @lifunc, align 8
9359	call void %1() nounwind
9360	ret void
9361; LINUX-64-STATIC-LABEL: licaller:
9362; LINUX-64-STATIC: callq   *lifunc
9363; LINUX-64-STATIC: callq   *lifunc
9364; LINUX-64-STATIC: ret
9365
9366; LINUX-32-STATIC-LABEL: licaller:
9367; LINUX-32-STATIC: 	subl
9368; LINUX-32-STATIC-NEXT: 	calll	*lifunc
9369; LINUX-32-STATIC-NEXT: 	calll	*lifunc
9370; LINUX-32-STATIC-NEXT: 	addl
9371; LINUX-32-STATIC-NEXT: 	ret
9372
9373; LINUX-32-PIC-LABEL: licaller:
9374; LINUX-32-PIC: 	subl
9375; LINUX-32-PIC-NEXT: 	calll	*lifunc
9376; LINUX-32-PIC-NEXT: 	calll	*lifunc
9377; LINUX-32-PIC-NEXT: 	addl
9378
9379; LINUX-32-PIC-NEXT: 	ret
9380
9381; LINUX-64-PIC-LABEL: licaller:
9382; LINUX-64-PIC: 	pushq
9383; LINUX-64-PIC-NEXT: 	callq	*lifunc(%rip)
9384; LINUX-64-PIC-NEXT: 	callq	*lifunc(%rip)
9385; LINUX-64-PIC-NEXT: 	popq
9386; LINUX-64-PIC-NEXT: 	ret
9387
9388; DARWIN-32-STATIC: _licaller:
9389; DARWIN-32-STATIC: 	subl	$12, %esp
9390; DARWIN-32-STATIC-NEXT: 	calll	*_lifunc
9391; DARWIN-32-STATIC-NEXT: 	calll	*_lifunc
9392; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9393; DARWIN-32-STATIC-NEXT: 	ret
9394
9395; DARWIN-32-DYNAMIC: _licaller:
9396; DARWIN-32-DYNAMIC: 	subl	$12, %esp
9397; DARWIN-32-DYNAMIC-NEXT: 	calll	*_lifunc
9398; DARWIN-32-DYNAMIC-NEXT: 	calll	*_lifunc
9399; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
9400; DARWIN-32-DYNAMIC-NEXT: 	ret
9401
9402; DARWIN-32-PIC: _licaller:
9403; DARWIN-32-PIC: 	pushl	%esi
9404; DARWIN-32-PIC-NEXT: 	subl	$8, %esp
9405; DARWIN-32-PIC-NEXT: 	calll	L144$pb
9406; DARWIN-32-PIC-NEXT: L144$pb:
9407; DARWIN-32-PIC-NEXT: 	popl	%esi
9408; DARWIN-32-PIC-NEXT: 	calll	*_lifunc-L144$pb(%esi)
9409; DARWIN-32-PIC-NEXT: 	calll	*_lifunc-L144$pb(%esi)
9410; DARWIN-32-PIC-NEXT: 	addl	$8, %esp
9411; DARWIN-32-PIC-NEXT: 	popl	%esi
9412; DARWIN-32-PIC-NEXT: 	ret
9413
9414; DARWIN-64-STATIC: _licaller:
9415; DARWIN-64-STATIC: 	pushq
9416; DARWIN-64-STATIC-NEXT: 	callq	*_lifunc(%rip)
9417; DARWIN-64-STATIC-NEXT: 	callq	*_lifunc(%rip)
9418; DARWIN-64-STATIC-NEXT: 	popq
9419; DARWIN-64-STATIC-NEXT: 	ret
9420
9421; DARWIN-64-DYNAMIC: _licaller:
9422; DARWIN-64-DYNAMIC: 	pushq
9423; DARWIN-64-DYNAMIC-NEXT: 	callq	*_lifunc(%rip)
9424; DARWIN-64-DYNAMIC-NEXT: 	callq	*_lifunc(%rip)
9425; DARWIN-64-DYNAMIC-NEXT: 	popq
9426; DARWIN-64-DYNAMIC-NEXT: 	ret
9427
9428; DARWIN-64-PIC: _licaller:
9429; DARWIN-64-PIC: 	pushq
9430; DARWIN-64-PIC-NEXT: 	callq	*_lifunc(%rip)
9431; DARWIN-64-PIC-NEXT: 	callq	*_lifunc(%rip)
9432; DARWIN-64-PIC-NEXT: 	popq
9433; DARWIN-64-PIC-NEXT: 	ret
9434}
9435
9436define void @itailcaller() nounwind {
9437entry:
9438	%0 = load void ()*, void ()** @ifunc, align 8
9439	call void %0() nounwind
9440	%1 = load void ()*, void ()** @ifunc, align 8
9441	call void %1() nounwind
9442	ret void
9443; LINUX-64-STATIC-LABEL: itailcaller:
9444; LINUX-64-STATIC: callq   *ifunc
9445; LINUX-64-STATIC: callq   *ifunc
9446; LINUX-64-STATIC: ret
9447
9448; LINUX-32-STATIC-LABEL: itailcaller:
9449; LINUX-32-STATIC: 	subl
9450; LINUX-32-STATIC-NEXT: 	calll	*ifunc
9451; LINUX-32-STATIC-NEXT: 	calll	*ifunc
9452; LINUX-32-STATIC-NEXT: 	addl
9453; LINUX-32-STATIC-NEXT: 	ret
9454
9455; LINUX-32-PIC-LABEL: itailcaller:
9456; LINUX-32-PIC: 	subl
9457; LINUX-32-PIC-NEXT: 	calll	*ifunc
9458; LINUX-32-PIC-NEXT: 	calll	*ifunc
9459; LINUX-32-PIC-NEXT: 	addl
9460
9461; LINUX-32-PIC-NEXT: 	ret
9462
9463; LINUX-64-PIC-LABEL: itailcaller:
9464; LINUX-64-PIC: 	pushq	[[RBX:%r.x]]
9465; LINUX-64-PIC-NEXT: 	movq	ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9466; LINUX-64-PIC-NEXT: 	callq	*([[RBX]])
9467; LINUX-64-PIC-NEXT: 	callq	*([[RBX]])
9468; LINUX-64-PIC-NEXT: 	popq	[[RBX:%r.x]]
9469; LINUX-64-PIC-NEXT: 	ret
9470
9471; DARWIN-32-STATIC: _itailcaller:
9472; DARWIN-32-STATIC: 	subl	$12, %esp
9473; DARWIN-32-STATIC-NEXT: 	calll	*_ifunc
9474; DARWIN-32-STATIC-NEXT: 	calll	*_ifunc
9475; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9476; DARWIN-32-STATIC-NEXT: 	ret
9477
9478; DARWIN-32-DYNAMIC: _itailcaller:
9479; DARWIN-32-DYNAMIC: 	pushl	%esi
9480; DARWIN-32-DYNAMIC-NEXT: 	subl	$8, %esp
9481; DARWIN-32-DYNAMIC-NEXT: 	movl	L_ifunc$non_lazy_ptr, %esi
9482; DARWIN-32-DYNAMIC-NEXT: 	calll	*(%esi)
9483; DARWIN-32-DYNAMIC-NEXT: 	calll	*(%esi)
9484; DARWIN-32-DYNAMIC-NEXT: 	addl	$8, %esp
9485; DARWIN-32-DYNAMIC-NEXT: 	popl	%esi
9486; DARWIN-32-DYNAMIC-NEXT: 	ret
9487
9488; DARWIN-32-PIC: _itailcaller:
9489; DARWIN-32-PIC: 	pushl	%esi
9490; DARWIN-32-PIC-NEXT: 	subl	$8, %esp
9491; DARWIN-32-PIC-NEXT: 	calll	L145$pb
9492; DARWIN-32-PIC-NEXT: L145$pb:
9493; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
9494; DARWIN-32-PIC-NEXT: 	movl	L_ifunc$non_lazy_ptr-L145$pb([[EAX]]), %esi
9495; DARWIN-32-PIC-NEXT: 	calll	*(%esi)
9496; DARWIN-32-PIC-NEXT: 	calll	*(%esi)
9497; DARWIN-32-PIC-NEXT: 	addl	$8, %esp
9498; DARWIN-32-PIC-NEXT: 	popl	%esi
9499; DARWIN-32-PIC-NEXT: 	ret
9500
9501; DARWIN-64-STATIC: _itailcaller:
9502; DARWIN-64-STATIC: 	pushq	[[RBX:%r.x]]
9503; DARWIN-64-STATIC-NEXT: 	movq	_ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9504; DARWIN-64-STATIC-NEXT: 	callq	*([[RBX]])
9505; DARWIN-64-STATIC-NEXT: 	callq	*([[RBX]])
9506; DARWIN-64-STATIC-NEXT: 	popq	[[RBX:%r.x]]
9507; DARWIN-64-STATIC-NEXT: 	ret
9508
9509; DARWIN-64-DYNAMIC: _itailcaller:
9510; DARWIN-64-DYNAMIC: 	pushq	[[RBX:%r.x]]
9511; DARWIN-64-DYNAMIC-NEXT: 	movq	_ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9512; DARWIN-64-DYNAMIC-NEXT: 	callq	*([[RBX]])
9513; DARWIN-64-DYNAMIC-NEXT: 	callq	*([[RBX]])
9514; DARWIN-64-DYNAMIC-NEXT: 	popq	[[RBX:%r.x]]
9515; DARWIN-64-DYNAMIC-NEXT: 	ret
9516
9517; DARWIN-64-PIC: _itailcaller:
9518; DARWIN-64-PIC: 	pushq	[[RBX:%r.x]]
9519; DARWIN-64-PIC-NEXT: 	movq	_ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9520; DARWIN-64-PIC-NEXT: 	callq	*([[RBX]])
9521; DARWIN-64-PIC-NEXT: 	callq	*([[RBX]])
9522; DARWIN-64-PIC-NEXT: 	popq	[[RBX:%r.x]]
9523; DARWIN-64-PIC-NEXT: 	ret
9524}
9525
9526define void @ditailcaller() nounwind {
9527entry:
9528	%0 = load void ()*, void ()** @difunc, align 8
9529	call void %0() nounwind
9530	ret void
9531; LINUX-64-STATIC-LABEL: ditailcaller:
9532; LINUX-64-STATIC: callq   *difunc
9533; LINUX-64-STATIC: ret
9534
9535; LINUX-32-STATIC-LABEL: ditailcaller:
9536; LINUX-32-STATIC: 	subl
9537; LINUX-32-STATIC-NEXT: 	calll	*difunc
9538; LINUX-32-STATIC-NEXT: 	addl
9539; LINUX-32-STATIC-NEXT: 	ret
9540
9541; LINUX-32-PIC-LABEL: ditailcaller:
9542; LINUX-32-PIC: 	subl
9543; LINUX-32-PIC-NEXT: 	calll	*difunc
9544; LINUX-32-PIC-NEXT: 	addl
9545
9546; LINUX-32-PIC-NEXT: 	ret
9547
9548; LINUX-64-PIC-LABEL: ditailcaller:
9549; LINUX-64-PIC: 	pushq
9550; LINUX-64-PIC-NEXT: 	movq	difunc@GOTPCREL(%rip), [[RAX:%r.x]]
9551; LINUX-64-PIC-NEXT: 	callq	*([[RAX]])
9552; LINUX-64-PIC-NEXT: 	popq
9553; LINUX-64-PIC-NEXT: 	ret
9554
9555; DARWIN-32-STATIC: _ditailcaller:
9556; DARWIN-32-STATIC: 	subl	$12, %esp
9557; DARWIN-32-STATIC-NEXT: 	calll	*_difunc
9558; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9559; DARWIN-32-STATIC-NEXT: 	ret
9560
9561; DARWIN-32-DYNAMIC: _ditailcaller:
9562; DARWIN-32-DYNAMIC: 	subl	$12, %esp
9563; DARWIN-32-DYNAMIC-NEXT: 	calll	*_difunc
9564; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
9565; DARWIN-32-DYNAMIC-NEXT: 	ret
9566
9567; DARWIN-32-PIC: _ditailcaller:
9568; DARWIN-32-PIC: 	subl	$12, %esp
9569; DARWIN-32-PIC-NEXT: 	calll	L146$pb
9570; DARWIN-32-PIC-NEXT: L146$pb:
9571; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
9572; DARWIN-32-PIC-NEXT: 	calll	*_difunc-L146$pb([[EAX]])
9573; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
9574; DARWIN-32-PIC-NEXT: 	ret
9575
9576; DARWIN-64-STATIC: _ditailcaller:
9577; DARWIN-64-STATIC: 	pushq
9578; DARWIN-64-STATIC-NEXT: 	callq	*_difunc(%rip)
9579; DARWIN-64-STATIC-NEXT: 	popq
9580; DARWIN-64-STATIC-NEXT: 	ret
9581
9582; DARWIN-64-DYNAMIC: _ditailcaller:
9583; DARWIN-64-DYNAMIC: 	pushq
9584; DARWIN-64-DYNAMIC-NEXT: 	callq	*_difunc(%rip)
9585; DARWIN-64-DYNAMIC-NEXT: 	popq
9586; DARWIN-64-DYNAMIC-NEXT: 	ret
9587
9588; DARWIN-64-PIC: _ditailcaller:
9589; DARWIN-64-PIC: 	callq	*_difunc(%rip)
9590; DARWIN-64-PIC-NEXT: 	popq
9591; DARWIN-64-PIC-NEXT: 	ret
9592}
9593
9594define void @litailcaller() nounwind {
9595entry:
9596	%0 = load void ()*, void ()** @lifunc, align 8
9597	call void %0() nounwind
9598	ret void
9599; LINUX-64-STATIC-LABEL: litailcaller:
9600; LINUX-64-STATIC: callq   *lifunc
9601; LINUX-64-STATIC: ret
9602
9603; LINUX-32-STATIC-LABEL: litailcaller:
9604; LINUX-32-STATIC: 	subl
9605; LINUX-32-STATIC-NEXT: 	calll	*lifunc
9606; LINUX-32-STATIC-NEXT: 	addl
9607; LINUX-32-STATIC-NEXT: 	ret
9608
9609; LINUX-32-PIC-LABEL: litailcaller:
9610; LINUX-32-PIC: 	subl
9611; LINUX-32-PIC-NEXT: 	calll	*lifunc
9612; LINUX-32-PIC-NEXT: 	addl
9613
9614; LINUX-32-PIC-NEXT: 	ret
9615
9616; LINUX-64-PIC-LABEL: litailcaller:
9617; LINUX-64-PIC: 	pushq
9618; LINUX-64-PIC-NEXT: 	callq	*lifunc(%rip)
9619; LINUX-64-PIC-NEXT: 	popq
9620; LINUX-64-PIC-NEXT: 	ret
9621
9622; DARWIN-32-STATIC: _litailcaller:
9623; DARWIN-32-STATIC: 	subl	$12, %esp
9624; DARWIN-32-STATIC-NEXT: 	calll	*_lifunc
9625; DARWIN-32-STATIC-NEXT: 	addl	$12, %esp
9626; DARWIN-32-STATIC-NEXT: 	ret
9627
9628; DARWIN-32-DYNAMIC: _litailcaller:
9629; DARWIN-32-DYNAMIC: 	subl	$12, %esp
9630; DARWIN-32-DYNAMIC-NEXT: 	calll	*_lifunc
9631; DARWIN-32-DYNAMIC-NEXT: 	addl	$12, %esp
9632; DARWIN-32-DYNAMIC-NEXT: 	ret
9633
9634; DARWIN-32-PIC: _litailcaller:
9635; DARWIN-32-PIC: 	subl	$12, %esp
9636; DARWIN-32-PIC-NEXT: 	calll	L147$pb
9637; DARWIN-32-PIC-NEXT: L147$pb:
9638; DARWIN-32-PIC-NEXT: 	popl	[[EAX:%e.x]]
9639; DARWIN-32-PIC-NEXT: 	calll	*_lifunc-L147$pb([[EAX]])
9640; DARWIN-32-PIC-NEXT: 	addl	$12, %esp
9641; DARWIN-32-PIC-NEXT: 	ret
9642
9643; DARWIN-64-STATIC: _litailcaller:
9644; DARWIN-64-STATIC: 	pushq
9645; DARWIN-64-STATIC-NEXT: 	callq	*_lifunc(%rip)
9646; DARWIN-64-STATIC-NEXT: 	popq
9647; DARWIN-64-STATIC-NEXT: 	ret
9648
9649; DARWIN-64-DYNAMIC: _litailcaller:
9650; DARWIN-64-DYNAMIC: 	pushq
9651; DARWIN-64-DYNAMIC-NEXT: 	callq	*_lifunc(%rip)
9652; DARWIN-64-DYNAMIC-NEXT: 	popq
9653; DARWIN-64-DYNAMIC-NEXT: 	ret
9654
9655; DARWIN-64-PIC: _litailcaller:
9656; DARWIN-64-PIC: 	pushq
9657; DARWIN-64-PIC-NEXT: 	callq	*_lifunc(%rip)
9658; DARWIN-64-PIC-NEXT: 	popq
9659; DARWIN-64-PIC-NEXT: 	ret
9660}
9661