1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; NOTE: Use the --no_x86_scrub_rip additional argument to keep the rip address math.
3
4; RUN: llc < %s -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-64-STATIC
5; RUN: llc < %s -mcpu=generic -mtriple=i686-unknown-linux-gnu -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-STATIC
6; RUN: llc < %s -mcpu=generic -mtriple=i686-unknown-linux-gnu -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-PIC
7; RUN: llc < %s -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-64-PIC
8
9; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-STATIC
10; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin9 -relocation-model=dynamic-no-pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC
11; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin9 -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-PIC
12
13; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-darwin -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-STATIC
14; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-darwin -relocation-model=dynamic-no-pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-DYNAMIC
15; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-darwin -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-PIC
16
17@src = external global [131072 x i32]
18@dst = external global [131072 x i32]
19@xsrc = external global [32 x i32]
20@xdst = external global [32 x i32]
21@ptr = external global i32*
22@dsrc = global [131072 x i32] zeroinitializer, align 32
23@ddst = global [131072 x i32] zeroinitializer, align 32
24@dptr = global i32* null
25@lsrc = internal global [131072 x i32] zeroinitializer
26@ldst = internal global [131072 x i32] zeroinitializer
27@lptr = internal global i32* null
28@ifunc = external global void ()*
29@difunc = global void ()* null
30@lifunc = internal global void ()* null
31@lxsrc = internal global [32 x i32] zeroinitializer, align 32
32@lxdst = internal global [32 x i32] zeroinitializer, align 32
33@dxsrc = global [32 x i32] zeroinitializer, align 32
34@dxdst = global [32 x i32] zeroinitializer, align 32
35
36define void @foo00() nounwind {
37; LINUX-64-STATIC-LABEL: foo00:
38; LINUX-64-STATIC:       # %bb.0: # %entry
39; LINUX-64-STATIC-NEXT:    movl src(%rip), %eax
40; LINUX-64-STATIC-NEXT:    movl %eax, dst(%rip)
41; LINUX-64-STATIC-NEXT:    retq
42;
43; LINUX-32-STATIC-LABEL: foo00:
44; LINUX-32-STATIC:       # %bb.0: # %entry
45; LINUX-32-STATIC-NEXT:    movl src, %eax
46; LINUX-32-STATIC-NEXT:    movl %eax, dst
47; LINUX-32-STATIC-NEXT:    retl
48;
49; LINUX-32-PIC-LABEL: foo00:
50; LINUX-32-PIC:       # %bb.0: # %entry
51; LINUX-32-PIC-NEXT:    calll .L0$pb
52; LINUX-32-PIC-NEXT:  .L0$pb:
53; LINUX-32-PIC-NEXT:    popl %eax
54; LINUX-32-PIC-NEXT:  .Ltmp0:
55; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp0-.L0$pb), %eax
56; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
57; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
58; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
59; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
60; LINUX-32-PIC-NEXT:    retl
61;
62; LINUX-64-PIC-LABEL: foo00:
63; LINUX-64-PIC:       # %bb.0: # %entry
64; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
65; LINUX-64-PIC-NEXT:    movl (%rax), %eax
66; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
67; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
68; LINUX-64-PIC-NEXT:    retq
69;
70; DARWIN-32-STATIC-LABEL: foo00:
71; DARWIN-32-STATIC:       ## %bb.0: ## %entry
72; DARWIN-32-STATIC-NEXT:    movl _src, %eax
73; DARWIN-32-STATIC-NEXT:    movl %eax, _dst
74; DARWIN-32-STATIC-NEXT:    retl
75;
76; DARWIN-32-DYNAMIC-LABEL: foo00:
77; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
78; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
79; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
80; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
81; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
82; DARWIN-32-DYNAMIC-NEXT:    retl
83;
84; DARWIN-32-PIC-LABEL: foo00:
85; DARWIN-32-PIC:       ## %bb.0: ## %entry
86; DARWIN-32-PIC-NEXT:    calll L0$pb
87; DARWIN-32-PIC-NEXT:  L0$pb:
88; DARWIN-32-PIC-NEXT:    popl %eax
89; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L0$pb(%eax), %ecx
90; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
91; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L0$pb(%eax), %eax
92; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
93; DARWIN-32-PIC-NEXT:    retl
94;
95; DARWIN-64-STATIC-LABEL: foo00:
96; DARWIN-64-STATIC:       ## %bb.0: ## %entry
97; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
98; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
99; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
100; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
101; DARWIN-64-STATIC-NEXT:    retq
102;
103; DARWIN-64-DYNAMIC-LABEL: foo00:
104; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
105; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
106; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
107; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
108; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
109; DARWIN-64-DYNAMIC-NEXT:    retq
110;
111; DARWIN-64-PIC-LABEL: foo00:
112; DARWIN-64-PIC:       ## %bb.0: ## %entry
113; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
114; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
115; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
116; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
117; DARWIN-64-PIC-NEXT:    retq
118
119entry:
120	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
121	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 0), align 4
122	ret void
123
124}
125
126define void @fxo00() nounwind {
127; LINUX-64-STATIC-LABEL: fxo00:
128; LINUX-64-STATIC:       # %bb.0: # %entry
129; LINUX-64-STATIC-NEXT:    movl xsrc(%rip), %eax
130; LINUX-64-STATIC-NEXT:    movl %eax, xdst(%rip)
131; LINUX-64-STATIC-NEXT:    retq
132;
133; LINUX-32-STATIC-LABEL: fxo00:
134; LINUX-32-STATIC:       # %bb.0: # %entry
135; LINUX-32-STATIC-NEXT:    movl xsrc, %eax
136; LINUX-32-STATIC-NEXT:    movl %eax, xdst
137; LINUX-32-STATIC-NEXT:    retl
138;
139; LINUX-32-PIC-LABEL: fxo00:
140; LINUX-32-PIC:       # %bb.0: # %entry
141; LINUX-32-PIC-NEXT:    calll .L1$pb
142; LINUX-32-PIC-NEXT:  .L1$pb:
143; LINUX-32-PIC-NEXT:    popl %eax
144; LINUX-32-PIC-NEXT:  .Ltmp1:
145; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp1-.L1$pb), %eax
146; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
147; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
148; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
149; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
150; LINUX-32-PIC-NEXT:    retl
151;
152; LINUX-64-PIC-LABEL: fxo00:
153; LINUX-64-PIC:       # %bb.0: # %entry
154; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
155; LINUX-64-PIC-NEXT:    movl (%rax), %eax
156; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
157; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
158; LINUX-64-PIC-NEXT:    retq
159;
160; DARWIN-32-STATIC-LABEL: fxo00:
161; DARWIN-32-STATIC:       ## %bb.0: ## %entry
162; DARWIN-32-STATIC-NEXT:    movl _xsrc, %eax
163; DARWIN-32-STATIC-NEXT:    movl %eax, _xdst
164; DARWIN-32-STATIC-NEXT:    retl
165;
166; DARWIN-32-DYNAMIC-LABEL: fxo00:
167; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
168; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
169; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
170; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
171; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
172; DARWIN-32-DYNAMIC-NEXT:    retl
173;
174; DARWIN-32-PIC-LABEL: fxo00:
175; DARWIN-32-PIC:       ## %bb.0: ## %entry
176; DARWIN-32-PIC-NEXT:    calll L1$pb
177; DARWIN-32-PIC-NEXT:  L1$pb:
178; DARWIN-32-PIC-NEXT:    popl %eax
179; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L1$pb(%eax), %ecx
180; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
181; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L1$pb(%eax), %eax
182; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
183; DARWIN-32-PIC-NEXT:    retl
184;
185; DARWIN-64-STATIC-LABEL: fxo00:
186; DARWIN-64-STATIC:       ## %bb.0: ## %entry
187; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
188; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
189; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
190; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
191; DARWIN-64-STATIC-NEXT:    retq
192;
193; DARWIN-64-DYNAMIC-LABEL: fxo00:
194; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
195; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
196; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
197; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
198; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
199; DARWIN-64-DYNAMIC-NEXT:    retq
200;
201; DARWIN-64-PIC-LABEL: fxo00:
202; DARWIN-64-PIC:       ## %bb.0: ## %entry
203; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
204; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
205; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
206; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
207; DARWIN-64-PIC-NEXT:    retq
208
209entry:
210	%0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
211	store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 0), align 4
212	ret void
213
214}
215
216define void @foo01() nounwind {
217; LINUX-64-STATIC-LABEL: foo01:
218; LINUX-64-STATIC:       # %bb.0: # %entry
219; LINUX-64-STATIC-NEXT:    movq $dst, ptr(%rip)
220; LINUX-64-STATIC-NEXT:    retq
221;
222; LINUX-32-STATIC-LABEL: foo01:
223; LINUX-32-STATIC:       # %bb.0: # %entry
224; LINUX-32-STATIC-NEXT:    movl $dst, ptr
225; LINUX-32-STATIC-NEXT:    retl
226;
227; LINUX-32-PIC-LABEL: foo01:
228; LINUX-32-PIC:       # %bb.0: # %entry
229; LINUX-32-PIC-NEXT:    calll .L2$pb
230; LINUX-32-PIC-NEXT:  .L2$pb:
231; LINUX-32-PIC-NEXT:    popl %eax
232; LINUX-32-PIC-NEXT:  .Ltmp2:
233; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp2-.L2$pb), %eax
234; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %ecx
235; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
236; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
237; LINUX-32-PIC-NEXT:    retl
238;
239; LINUX-64-PIC-LABEL: foo01:
240; LINUX-64-PIC:       # %bb.0: # %entry
241; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
242; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
243; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
244; LINUX-64-PIC-NEXT:    retq
245;
246; DARWIN-32-STATIC-LABEL: foo01:
247; DARWIN-32-STATIC:       ## %bb.0: ## %entry
248; DARWIN-32-STATIC-NEXT:    movl $_dst, _ptr
249; DARWIN-32-STATIC-NEXT:    retl
250;
251; DARWIN-32-DYNAMIC-LABEL: foo01:
252; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
253; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
254; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
255; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
256; DARWIN-32-DYNAMIC-NEXT:    retl
257;
258; DARWIN-32-PIC-LABEL: foo01:
259; DARWIN-32-PIC:       ## %bb.0: ## %entry
260; DARWIN-32-PIC-NEXT:    calll L2$pb
261; DARWIN-32-PIC-NEXT:  L2$pb:
262; DARWIN-32-PIC-NEXT:    popl %eax
263; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L2$pb(%eax), %ecx
264; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L2$pb(%eax), %eax
265; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
266; DARWIN-32-PIC-NEXT:    retl
267;
268; DARWIN-64-STATIC-LABEL: foo01:
269; DARWIN-64-STATIC:       ## %bb.0: ## %entry
270; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
271; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
272; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
273; DARWIN-64-STATIC-NEXT:    retq
274;
275; DARWIN-64-DYNAMIC-LABEL: foo01:
276; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
277; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
278; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
279; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
280; DARWIN-64-DYNAMIC-NEXT:    retq
281;
282; DARWIN-64-PIC-LABEL: foo01:
283; DARWIN-64-PIC:       ## %bb.0: ## %entry
284; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
285; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
286; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
287; DARWIN-64-PIC-NEXT:    retq
288
289entry:
290	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
291	ret void
292}
293
294define void @fxo01() nounwind {
295; LINUX-64-STATIC-LABEL: fxo01:
296; LINUX-64-STATIC:       # %bb.0: # %entry
297; LINUX-64-STATIC-NEXT:    movq $xdst, ptr(%rip)
298; LINUX-64-STATIC-NEXT:    retq
299;
300; LINUX-32-STATIC-LABEL: fxo01:
301; LINUX-32-STATIC:       # %bb.0: # %entry
302; LINUX-32-STATIC-NEXT:    movl $xdst, ptr
303; LINUX-32-STATIC-NEXT:    retl
304;
305; LINUX-32-PIC-LABEL: fxo01:
306; LINUX-32-PIC:       # %bb.0: # %entry
307; LINUX-32-PIC-NEXT:    calll .L3$pb
308; LINUX-32-PIC-NEXT:  .L3$pb:
309; LINUX-32-PIC-NEXT:    popl %eax
310; LINUX-32-PIC-NEXT:  .Ltmp3:
311; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp3-.L3$pb), %eax
312; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %ecx
313; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
314; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
315; LINUX-32-PIC-NEXT:    retl
316;
317; LINUX-64-PIC-LABEL: fxo01:
318; LINUX-64-PIC:       # %bb.0: # %entry
319; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
320; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
321; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
322; LINUX-64-PIC-NEXT:    retq
323;
324; DARWIN-32-STATIC-LABEL: fxo01:
325; DARWIN-32-STATIC:       ## %bb.0: ## %entry
326; DARWIN-32-STATIC-NEXT:    movl $_xdst, _ptr
327; DARWIN-32-STATIC-NEXT:    retl
328;
329; DARWIN-32-DYNAMIC-LABEL: fxo01:
330; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
331; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
332; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
333; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
334; DARWIN-32-DYNAMIC-NEXT:    retl
335;
336; DARWIN-32-PIC-LABEL: fxo01:
337; DARWIN-32-PIC:       ## %bb.0: ## %entry
338; DARWIN-32-PIC-NEXT:    calll L3$pb
339; DARWIN-32-PIC-NEXT:  L3$pb:
340; DARWIN-32-PIC-NEXT:    popl %eax
341; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L3$pb(%eax), %ecx
342; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L3$pb(%eax), %eax
343; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
344; DARWIN-32-PIC-NEXT:    retl
345;
346; DARWIN-64-STATIC-LABEL: fxo01:
347; DARWIN-64-STATIC:       ## %bb.0: ## %entry
348; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
349; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
350; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
351; DARWIN-64-STATIC-NEXT:    retq
352;
353; DARWIN-64-DYNAMIC-LABEL: fxo01:
354; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
355; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
356; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
357; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
358; DARWIN-64-DYNAMIC-NEXT:    retq
359;
360; DARWIN-64-PIC-LABEL: fxo01:
361; DARWIN-64-PIC:       ## %bb.0: ## %entry
362; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
363; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
364; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
365; DARWIN-64-PIC-NEXT:    retq
366
367entry:
368	store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
369	ret void
370}
371
372define void @foo02() nounwind {
373; LINUX-64-STATIC-LABEL: foo02:
374; LINUX-64-STATIC:       # %bb.0: # %entry
375; LINUX-64-STATIC-NEXT:    movl src(%rip), %eax
376; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
377; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
378; LINUX-64-STATIC-NEXT:    retq
379;
380; LINUX-32-STATIC-LABEL: foo02:
381; LINUX-32-STATIC:       # %bb.0: # %entry
382; LINUX-32-STATIC-NEXT:    movl src, %eax
383; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
384; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
385; LINUX-32-STATIC-NEXT:    retl
386;
387; LINUX-32-PIC-LABEL: foo02:
388; LINUX-32-PIC:       # %bb.0: # %entry
389; LINUX-32-PIC-NEXT:    calll .L4$pb
390; LINUX-32-PIC-NEXT:  .L4$pb:
391; LINUX-32-PIC-NEXT:    popl %eax
392; LINUX-32-PIC-NEXT:  .Ltmp4:
393; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp4-.L4$pb), %eax
394; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
395; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
396; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
397; LINUX-32-PIC-NEXT:    movl (%eax), %eax
398; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
399; LINUX-32-PIC-NEXT:    retl
400;
401; LINUX-64-PIC-LABEL: foo02:
402; LINUX-64-PIC:       # %bb.0: # %entry
403; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
404; LINUX-64-PIC-NEXT:    movl (%rax), %eax
405; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
406; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
407; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
408; LINUX-64-PIC-NEXT:    retq
409;
410; DARWIN-32-STATIC-LABEL: foo02:
411; DARWIN-32-STATIC:       ## %bb.0: ## %entry
412; DARWIN-32-STATIC-NEXT:    movl _src, %eax
413; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
414; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
415; DARWIN-32-STATIC-NEXT:    retl
416;
417; DARWIN-32-DYNAMIC-LABEL: foo02:
418; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
419; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
420; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
421; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
422; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
423; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
424; DARWIN-32-DYNAMIC-NEXT:    retl
425;
426; DARWIN-32-PIC-LABEL: foo02:
427; DARWIN-32-PIC:       ## %bb.0: ## %entry
428; DARWIN-32-PIC-NEXT:    calll L4$pb
429; DARWIN-32-PIC-NEXT:  L4$pb:
430; DARWIN-32-PIC-NEXT:    popl %eax
431; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L4$pb(%eax), %ecx
432; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
433; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L4$pb(%eax), %eax
434; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
435; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
436; DARWIN-32-PIC-NEXT:    retl
437;
438; DARWIN-64-STATIC-LABEL: foo02:
439; DARWIN-64-STATIC:       ## %bb.0: ## %entry
440; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
441; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
442; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
443; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
444; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
445; DARWIN-64-STATIC-NEXT:    retq
446;
447; DARWIN-64-DYNAMIC-LABEL: foo02:
448; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
449; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
450; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
451; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
452; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
453; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
454; DARWIN-64-DYNAMIC-NEXT:    retq
455;
456; DARWIN-64-PIC-LABEL: foo02:
457; DARWIN-64-PIC:       ## %bb.0: ## %entry
458; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
459; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
460; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
461; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
462; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
463; DARWIN-64-PIC-NEXT:    retq
464
465entry:
466	%0 = load i32*, i32** @ptr, align 8
467	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
468	store i32 %1, i32* %0, align 4
469	ret void
470}
471
472define void @fxo02() nounwind {
473; LINUX-64-STATIC-LABEL: fxo02:
474; LINUX-64-STATIC:       # %bb.0: # %entry
475; LINUX-64-STATIC-NEXT:    movl xsrc(%rip), %eax
476; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
477; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
478; LINUX-64-STATIC-NEXT:    retq
479;
480; LINUX-32-STATIC-LABEL: fxo02:
481; LINUX-32-STATIC:       # %bb.0: # %entry
482; LINUX-32-STATIC-NEXT:    movl xsrc, %eax
483; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
484; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
485; LINUX-32-STATIC-NEXT:    retl
486;
487; LINUX-32-PIC-LABEL: fxo02:
488; LINUX-32-PIC:       # %bb.0: # %entry
489; LINUX-32-PIC-NEXT:    calll .L5$pb
490; LINUX-32-PIC-NEXT:  .L5$pb:
491; LINUX-32-PIC-NEXT:    popl %eax
492; LINUX-32-PIC-NEXT:  .Ltmp5:
493; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp5-.L5$pb), %eax
494; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
495; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
496; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
497; LINUX-32-PIC-NEXT:    movl (%eax), %eax
498; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
499; LINUX-32-PIC-NEXT:    retl
500;
501; LINUX-64-PIC-LABEL: fxo02:
502; LINUX-64-PIC:       # %bb.0: # %entry
503; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
504; LINUX-64-PIC-NEXT:    movl (%rax), %eax
505; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
506; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
507; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
508; LINUX-64-PIC-NEXT:    retq
509;
510; DARWIN-32-STATIC-LABEL: fxo02:
511; DARWIN-32-STATIC:       ## %bb.0: ## %entry
512; DARWIN-32-STATIC-NEXT:    movl _xsrc, %eax
513; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
514; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
515; DARWIN-32-STATIC-NEXT:    retl
516;
517; DARWIN-32-DYNAMIC-LABEL: fxo02:
518; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
519; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
520; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
521; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
522; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
523; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
524; DARWIN-32-DYNAMIC-NEXT:    retl
525;
526; DARWIN-32-PIC-LABEL: fxo02:
527; DARWIN-32-PIC:       ## %bb.0: ## %entry
528; DARWIN-32-PIC-NEXT:    calll L5$pb
529; DARWIN-32-PIC-NEXT:  L5$pb:
530; DARWIN-32-PIC-NEXT:    popl %eax
531; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L5$pb(%eax), %ecx
532; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
533; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L5$pb(%eax), %eax
534; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
535; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
536; DARWIN-32-PIC-NEXT:    retl
537;
538; DARWIN-64-STATIC-LABEL: fxo02:
539; DARWIN-64-STATIC:       ## %bb.0: ## %entry
540; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
541; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
542; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
543; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
544; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
545; DARWIN-64-STATIC-NEXT:    retq
546;
547; DARWIN-64-DYNAMIC-LABEL: fxo02:
548; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
549; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
550; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
551; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
552; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
553; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
554; DARWIN-64-DYNAMIC-NEXT:    retq
555;
556; DARWIN-64-PIC-LABEL: fxo02:
557; DARWIN-64-PIC:       ## %bb.0: ## %entry
558; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
559; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
560; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
561; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
562; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
563; DARWIN-64-PIC-NEXT:    retq
564
565entry:
566	%0 = load i32*, i32** @ptr, align 8
567	%1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
568	store i32 %1, i32* %0, align 4
569	ret void
570}
571
572define void @foo03() nounwind {
573; LINUX-64-STATIC-LABEL: foo03:
574; LINUX-64-STATIC:       # %bb.0: # %entry
575; LINUX-64-STATIC-NEXT:    movl dsrc(%rip), %eax
576; LINUX-64-STATIC-NEXT:    movl %eax, ddst(%rip)
577; LINUX-64-STATIC-NEXT:    retq
578;
579; LINUX-32-STATIC-LABEL: foo03:
580; LINUX-32-STATIC:       # %bb.0: # %entry
581; LINUX-32-STATIC-NEXT:    movl dsrc, %eax
582; LINUX-32-STATIC-NEXT:    movl %eax, ddst
583; LINUX-32-STATIC-NEXT:    retl
584;
585; LINUX-32-PIC-LABEL: foo03:
586; LINUX-32-PIC:       # %bb.0: # %entry
587; LINUX-32-PIC-NEXT:    calll .L6$pb
588; LINUX-32-PIC-NEXT:  .L6$pb:
589; LINUX-32-PIC-NEXT:    popl %eax
590; LINUX-32-PIC-NEXT:  .Ltmp6:
591; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp6-.L6$pb), %eax
592; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
593; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
594; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
595; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
596; LINUX-32-PIC-NEXT:    retl
597;
598; LINUX-64-PIC-LABEL: foo03:
599; LINUX-64-PIC:       # %bb.0: # %entry
600; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
601; LINUX-64-PIC-NEXT:    movl (%rax), %eax
602; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
603; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
604; LINUX-64-PIC-NEXT:    retq
605;
606; DARWIN-32-STATIC-LABEL: foo03:
607; DARWIN-32-STATIC:       ## %bb.0: ## %entry
608; DARWIN-32-STATIC-NEXT:    movl _dsrc, %eax
609; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst
610; DARWIN-32-STATIC-NEXT:    retl
611;
612; DARWIN-32-DYNAMIC-LABEL: foo03:
613; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
614; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc, %eax
615; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst
616; DARWIN-32-DYNAMIC-NEXT:    retl
617;
618; DARWIN-32-PIC-LABEL: foo03:
619; DARWIN-32-PIC:       ## %bb.0: ## %entry
620; DARWIN-32-PIC-NEXT:    calll L6$pb
621; DARWIN-32-PIC-NEXT:  L6$pb:
622; DARWIN-32-PIC-NEXT:    popl %eax
623; DARWIN-32-PIC-NEXT:    movl _dsrc-L6$pb(%eax), %ecx
624; DARWIN-32-PIC-NEXT:    movl %ecx, _ddst-L6$pb(%eax)
625; DARWIN-32-PIC-NEXT:    retl
626;
627; DARWIN-64-STATIC-LABEL: foo03:
628; DARWIN-64-STATIC:       ## %bb.0: ## %entry
629; DARWIN-64-STATIC-NEXT:    movl _dsrc(%rip), %eax
630; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst(%rip)
631; DARWIN-64-STATIC-NEXT:    retq
632;
633; DARWIN-64-DYNAMIC-LABEL: foo03:
634; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
635; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc(%rip), %eax
636; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst(%rip)
637; DARWIN-64-DYNAMIC-NEXT:    retq
638;
639; DARWIN-64-PIC-LABEL: foo03:
640; DARWIN-64-PIC:       ## %bb.0: ## %entry
641; DARWIN-64-PIC-NEXT:    movl _dsrc(%rip), %eax
642; DARWIN-64-PIC-NEXT:    movl %eax, _ddst(%rip)
643; DARWIN-64-PIC-NEXT:    retq
644
645entry:
646	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
647	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 0), align 32
648	ret void
649}
650
651define void @foo04() nounwind {
652; LINUX-64-STATIC-LABEL: foo04:
653; LINUX-64-STATIC:       # %bb.0: # %entry
654; LINUX-64-STATIC-NEXT:    movq $ddst, dptr(%rip)
655; LINUX-64-STATIC-NEXT:    retq
656;
657; LINUX-32-STATIC-LABEL: foo04:
658; LINUX-32-STATIC:       # %bb.0: # %entry
659; LINUX-32-STATIC-NEXT:    movl $ddst, dptr
660; LINUX-32-STATIC-NEXT:    retl
661;
662; LINUX-32-PIC-LABEL: foo04:
663; LINUX-32-PIC:       # %bb.0: # %entry
664; LINUX-32-PIC-NEXT:    calll .L7$pb
665; LINUX-32-PIC-NEXT:  .L7$pb:
666; LINUX-32-PIC-NEXT:    popl %eax
667; LINUX-32-PIC-NEXT:  .Ltmp7:
668; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp7-.L7$pb), %eax
669; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %ecx
670; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
671; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
672; LINUX-32-PIC-NEXT:    retl
673;
674; LINUX-64-PIC-LABEL: foo04:
675; LINUX-64-PIC:       # %bb.0: # %entry
676; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
677; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
678; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
679; LINUX-64-PIC-NEXT:    retq
680;
681; DARWIN-32-STATIC-LABEL: foo04:
682; DARWIN-32-STATIC:       ## %bb.0: ## %entry
683; DARWIN-32-STATIC-NEXT:    movl $_ddst, _dptr
684; DARWIN-32-STATIC-NEXT:    retl
685;
686; DARWIN-32-DYNAMIC-LABEL: foo04:
687; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
688; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, _dptr
689; DARWIN-32-DYNAMIC-NEXT:    retl
690;
691; DARWIN-32-PIC-LABEL: foo04:
692; DARWIN-32-PIC:       ## %bb.0: ## %entry
693; DARWIN-32-PIC-NEXT:    calll L7$pb
694; DARWIN-32-PIC-NEXT:  L7$pb:
695; DARWIN-32-PIC-NEXT:    popl %eax
696; DARWIN-32-PIC-NEXT:    leal _ddst-L7$pb(%eax), %ecx
697; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L7$pb(%eax)
698; DARWIN-32-PIC-NEXT:    retl
699;
700; DARWIN-64-STATIC-LABEL: foo04:
701; DARWIN-64-STATIC:       ## %bb.0: ## %entry
702; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
703; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
704; DARWIN-64-STATIC-NEXT:    retq
705;
706; DARWIN-64-DYNAMIC-LABEL: foo04:
707; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
708; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
709; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
710; DARWIN-64-DYNAMIC-NEXT:    retq
711;
712; DARWIN-64-PIC-LABEL: foo04:
713; DARWIN-64-PIC:       ## %bb.0: ## %entry
714; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
715; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
716; DARWIN-64-PIC-NEXT:    retq
717
718entry:
719	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
720	ret void
721}
722
723define void @foo05() nounwind {
724; LINUX-64-STATIC-LABEL: foo05:
725; LINUX-64-STATIC:       # %bb.0: # %entry
726; LINUX-64-STATIC-NEXT:    movl dsrc(%rip), %eax
727; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
728; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
729; LINUX-64-STATIC-NEXT:    retq
730;
731; LINUX-32-STATIC-LABEL: foo05:
732; LINUX-32-STATIC:       # %bb.0: # %entry
733; LINUX-32-STATIC-NEXT:    movl dsrc, %eax
734; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
735; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
736; LINUX-32-STATIC-NEXT:    retl
737;
738; LINUX-32-PIC-LABEL: foo05:
739; LINUX-32-PIC:       # %bb.0: # %entry
740; LINUX-32-PIC-NEXT:    calll .L8$pb
741; LINUX-32-PIC-NEXT:  .L8$pb:
742; LINUX-32-PIC-NEXT:    popl %eax
743; LINUX-32-PIC-NEXT:  .Ltmp8:
744; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp8-.L8$pb), %eax
745; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
746; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
747; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
748; LINUX-32-PIC-NEXT:    movl (%eax), %eax
749; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
750; LINUX-32-PIC-NEXT:    retl
751;
752; LINUX-64-PIC-LABEL: foo05:
753; LINUX-64-PIC:       # %bb.0: # %entry
754; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
755; LINUX-64-PIC-NEXT:    movl (%rax), %eax
756; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
757; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
758; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
759; LINUX-64-PIC-NEXT:    retq
760;
761; DARWIN-32-STATIC-LABEL: foo05:
762; DARWIN-32-STATIC:       ## %bb.0: ## %entry
763; DARWIN-32-STATIC-NEXT:    movl _dsrc, %eax
764; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
765; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
766; DARWIN-32-STATIC-NEXT:    retl
767;
768; DARWIN-32-DYNAMIC-LABEL: foo05:
769; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
770; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc, %eax
771; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
772; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
773; DARWIN-32-DYNAMIC-NEXT:    retl
774;
775; DARWIN-32-PIC-LABEL: foo05:
776; DARWIN-32-PIC:       ## %bb.0: ## %entry
777; DARWIN-32-PIC-NEXT:    calll L8$pb
778; DARWIN-32-PIC-NEXT:  L8$pb:
779; DARWIN-32-PIC-NEXT:    popl %eax
780; DARWIN-32-PIC-NEXT:    movl _dsrc-L8$pb(%eax), %ecx
781; DARWIN-32-PIC-NEXT:    movl _dptr-L8$pb(%eax), %eax
782; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
783; DARWIN-32-PIC-NEXT:    retl
784;
785; DARWIN-64-STATIC-LABEL: foo05:
786; DARWIN-64-STATIC:       ## %bb.0: ## %entry
787; DARWIN-64-STATIC-NEXT:    movl _dsrc(%rip), %eax
788; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
789; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
790; DARWIN-64-STATIC-NEXT:    retq
791;
792; DARWIN-64-DYNAMIC-LABEL: foo05:
793; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
794; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc(%rip), %eax
795; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
796; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
797; DARWIN-64-DYNAMIC-NEXT:    retq
798;
799; DARWIN-64-PIC-LABEL: foo05:
800; DARWIN-64-PIC:       ## %bb.0: ## %entry
801; DARWIN-64-PIC-NEXT:    movl _dsrc(%rip), %eax
802; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
803; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
804; DARWIN-64-PIC-NEXT:    retq
805
806entry:
807	%0 = load i32*, i32** @dptr, align 8
808	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
809	store i32 %1, i32* %0, align 4
810	ret void
811}
812
813define void @foo06() nounwind {
814; LINUX-64-STATIC-LABEL: foo06:
815; LINUX-64-STATIC:       # %bb.0: # %entry
816; LINUX-64-STATIC-NEXT:    movl lsrc(%rip), %eax
817; LINUX-64-STATIC-NEXT:    movl %eax, ldst(%rip)
818; LINUX-64-STATIC-NEXT:    retq
819;
820; LINUX-32-STATIC-LABEL: foo06:
821; LINUX-32-STATIC:       # %bb.0: # %entry
822; LINUX-32-STATIC-NEXT:    movl lsrc, %eax
823; LINUX-32-STATIC-NEXT:    movl %eax, ldst
824; LINUX-32-STATIC-NEXT:    retl
825;
826; LINUX-32-PIC-LABEL: foo06:
827; LINUX-32-PIC:       # %bb.0: # %entry
828; LINUX-32-PIC-NEXT:    calll .L9$pb
829; LINUX-32-PIC-NEXT:  .L9$pb:
830; LINUX-32-PIC-NEXT:    popl %eax
831; LINUX-32-PIC-NEXT:  .Ltmp9:
832; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp9-.L9$pb), %eax
833; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax), %ecx
834; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF(%eax)
835; LINUX-32-PIC-NEXT:    retl
836;
837; LINUX-64-PIC-LABEL: foo06:
838; LINUX-64-PIC:       # %bb.0: # %entry
839; LINUX-64-PIC-NEXT:    movl lsrc(%rip), %eax
840; LINUX-64-PIC-NEXT:    movl %eax, ldst(%rip)
841; LINUX-64-PIC-NEXT:    retq
842;
843; DARWIN-32-STATIC-LABEL: foo06:
844; DARWIN-32-STATIC:       ## %bb.0: ## %entry
845; DARWIN-32-STATIC-NEXT:    movl _lsrc, %eax
846; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst
847; DARWIN-32-STATIC-NEXT:    retl
848;
849; DARWIN-32-DYNAMIC-LABEL: foo06:
850; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
851; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc, %eax
852; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst
853; DARWIN-32-DYNAMIC-NEXT:    retl
854;
855; DARWIN-32-PIC-LABEL: foo06:
856; DARWIN-32-PIC:       ## %bb.0: ## %entry
857; DARWIN-32-PIC-NEXT:    calll L9$pb
858; DARWIN-32-PIC-NEXT:  L9$pb:
859; DARWIN-32-PIC-NEXT:    popl %eax
860; DARWIN-32-PIC-NEXT:    movl _lsrc-L9$pb(%eax), %ecx
861; DARWIN-32-PIC-NEXT:    movl %ecx, _ldst-L9$pb(%eax)
862; DARWIN-32-PIC-NEXT:    retl
863;
864; DARWIN-64-STATIC-LABEL: foo06:
865; DARWIN-64-STATIC:       ## %bb.0: ## %entry
866; DARWIN-64-STATIC-NEXT:    movl _lsrc(%rip), %eax
867; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst(%rip)
868; DARWIN-64-STATIC-NEXT:    retq
869;
870; DARWIN-64-DYNAMIC-LABEL: foo06:
871; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
872; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc(%rip), %eax
873; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst(%rip)
874; DARWIN-64-DYNAMIC-NEXT:    retq
875;
876; DARWIN-64-PIC-LABEL: foo06:
877; DARWIN-64-PIC:       ## %bb.0: ## %entry
878; DARWIN-64-PIC-NEXT:    movl _lsrc(%rip), %eax
879; DARWIN-64-PIC-NEXT:    movl %eax, _ldst(%rip)
880; DARWIN-64-PIC-NEXT:    retq
881
882entry:
883	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
884	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 0), align 4
885	ret void
886}
887
888define void @foo07() nounwind {
889; LINUX-64-STATIC-LABEL: foo07:
890; LINUX-64-STATIC:       # %bb.0: # %entry
891; LINUX-64-STATIC-NEXT:    movq $ldst, lptr(%rip)
892; LINUX-64-STATIC-NEXT:    retq
893;
894; LINUX-32-STATIC-LABEL: foo07:
895; LINUX-32-STATIC:       # %bb.0: # %entry
896; LINUX-32-STATIC-NEXT:    movl $ldst, lptr
897; LINUX-32-STATIC-NEXT:    retl
898;
899; LINUX-32-PIC-LABEL: foo07:
900; LINUX-32-PIC:       # %bb.0: # %entry
901; LINUX-32-PIC-NEXT:    calll .L10$pb
902; LINUX-32-PIC-NEXT:  .L10$pb:
903; LINUX-32-PIC-NEXT:    popl %eax
904; LINUX-32-PIC-NEXT:  .Ltmp10:
905; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp10-.L10$pb), %eax
906; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %ecx
907; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
908; LINUX-32-PIC-NEXT:    retl
909;
910; LINUX-64-PIC-LABEL: foo07:
911; LINUX-64-PIC:       # %bb.0: # %entry
912; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
913; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
914; LINUX-64-PIC-NEXT:    retq
915;
916; DARWIN-32-STATIC-LABEL: foo07:
917; DARWIN-32-STATIC:       ## %bb.0: ## %entry
918; DARWIN-32-STATIC-NEXT:    movl $_ldst, _lptr
919; DARWIN-32-STATIC-NEXT:    retl
920;
921; DARWIN-32-DYNAMIC-LABEL: foo07:
922; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
923; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, _lptr
924; DARWIN-32-DYNAMIC-NEXT:    retl
925;
926; DARWIN-32-PIC-LABEL: foo07:
927; DARWIN-32-PIC:       ## %bb.0: ## %entry
928; DARWIN-32-PIC-NEXT:    calll L10$pb
929; DARWIN-32-PIC-NEXT:  L10$pb:
930; DARWIN-32-PIC-NEXT:    popl %eax
931; DARWIN-32-PIC-NEXT:    leal _ldst-L10$pb(%eax), %ecx
932; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L10$pb(%eax)
933; DARWIN-32-PIC-NEXT:    retl
934;
935; DARWIN-64-STATIC-LABEL: foo07:
936; DARWIN-64-STATIC:       ## %bb.0: ## %entry
937; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
938; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
939; DARWIN-64-STATIC-NEXT:    retq
940;
941; DARWIN-64-DYNAMIC-LABEL: foo07:
942; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
943; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
944; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
945; DARWIN-64-DYNAMIC-NEXT:    retq
946;
947; DARWIN-64-PIC-LABEL: foo07:
948; DARWIN-64-PIC:       ## %bb.0: ## %entry
949; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
950; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
951; DARWIN-64-PIC-NEXT:    retq
952
953entry:
954	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
955	ret void
956}
957
958define void @foo08() nounwind {
959; LINUX-64-STATIC-LABEL: foo08:
960; LINUX-64-STATIC:       # %bb.0: # %entry
961; LINUX-64-STATIC-NEXT:    movl lsrc(%rip), %eax
962; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
963; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
964; LINUX-64-STATIC-NEXT:    retq
965;
966; LINUX-32-STATIC-LABEL: foo08:
967; LINUX-32-STATIC:       # %bb.0: # %entry
968; LINUX-32-STATIC-NEXT:    movl lsrc, %eax
969; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
970; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
971; LINUX-32-STATIC-NEXT:    retl
972;
973; LINUX-32-PIC-LABEL: foo08:
974; LINUX-32-PIC:       # %bb.0: # %entry
975; LINUX-32-PIC-NEXT:    calll .L11$pb
976; LINUX-32-PIC-NEXT:  .L11$pb:
977; LINUX-32-PIC-NEXT:    popl %eax
978; LINUX-32-PIC-NEXT:  .Ltmp11:
979; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp11-.L11$pb), %eax
980; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax), %ecx
981; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
982; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
983; LINUX-32-PIC-NEXT:    retl
984;
985; LINUX-64-PIC-LABEL: foo08:
986; LINUX-64-PIC:       # %bb.0: # %entry
987; LINUX-64-PIC-NEXT:    movl lsrc(%rip), %eax
988; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
989; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
990; LINUX-64-PIC-NEXT:    retq
991;
992; DARWIN-32-STATIC-LABEL: foo08:
993; DARWIN-32-STATIC:       ## %bb.0: ## %entry
994; DARWIN-32-STATIC-NEXT:    movl _lsrc, %eax
995; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
996; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
997; DARWIN-32-STATIC-NEXT:    retl
998;
999; DARWIN-32-DYNAMIC-LABEL: foo08:
1000; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1001; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc, %eax
1002; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
1003; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
1004; DARWIN-32-DYNAMIC-NEXT:    retl
1005;
1006; DARWIN-32-PIC-LABEL: foo08:
1007; DARWIN-32-PIC:       ## %bb.0: ## %entry
1008; DARWIN-32-PIC-NEXT:    calll L11$pb
1009; DARWIN-32-PIC-NEXT:  L11$pb:
1010; DARWIN-32-PIC-NEXT:    popl %eax
1011; DARWIN-32-PIC-NEXT:    movl _lsrc-L11$pb(%eax), %ecx
1012; DARWIN-32-PIC-NEXT:    movl _lptr-L11$pb(%eax), %eax
1013; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
1014; DARWIN-32-PIC-NEXT:    retl
1015;
1016; DARWIN-64-STATIC-LABEL: foo08:
1017; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1018; DARWIN-64-STATIC-NEXT:    movl _lsrc(%rip), %eax
1019; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
1020; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
1021; DARWIN-64-STATIC-NEXT:    retq
1022;
1023; DARWIN-64-DYNAMIC-LABEL: foo08:
1024; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1025; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc(%rip), %eax
1026; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
1027; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
1028; DARWIN-64-DYNAMIC-NEXT:    retq
1029;
1030; DARWIN-64-PIC-LABEL: foo08:
1031; DARWIN-64-PIC:       ## %bb.0: ## %entry
1032; DARWIN-64-PIC-NEXT:    movl _lsrc(%rip), %eax
1033; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
1034; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
1035; DARWIN-64-PIC-NEXT:    retq
1036
1037entry:
1038	%0 = load i32*, i32** @lptr, align 8
1039	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
1040	store i32 %1, i32* %0, align 4
1041	ret void
1042}
1043
1044define void @qux00() nounwind {
1045; LINUX-64-STATIC-LABEL: qux00:
1046; LINUX-64-STATIC:       # %bb.0: # %entry
1047; LINUX-64-STATIC-NEXT:    movl src+64(%rip), %eax
1048; LINUX-64-STATIC-NEXT:    movl %eax, dst+64(%rip)
1049; LINUX-64-STATIC-NEXT:    retq
1050;
1051; LINUX-32-STATIC-LABEL: qux00:
1052; LINUX-32-STATIC:       # %bb.0: # %entry
1053; LINUX-32-STATIC-NEXT:    movl src+64, %eax
1054; LINUX-32-STATIC-NEXT:    movl %eax, dst+64
1055; LINUX-32-STATIC-NEXT:    retl
1056;
1057; LINUX-32-PIC-LABEL: qux00:
1058; LINUX-32-PIC:       # %bb.0: # %entry
1059; LINUX-32-PIC-NEXT:    calll .L12$pb
1060; LINUX-32-PIC-NEXT:  .L12$pb:
1061; LINUX-32-PIC-NEXT:    popl %eax
1062; LINUX-32-PIC-NEXT:  .Ltmp12:
1063; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp12-.L12$pb), %eax
1064; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
1065; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1066; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
1067; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1068; LINUX-32-PIC-NEXT:    retl
1069;
1070; LINUX-64-PIC-LABEL: qux00:
1071; LINUX-64-PIC:       # %bb.0: # %entry
1072; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
1073; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1074; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
1075; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1076; LINUX-64-PIC-NEXT:    retq
1077;
1078; DARWIN-32-STATIC-LABEL: qux00:
1079; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1080; DARWIN-32-STATIC-NEXT:    movl _src+64, %eax
1081; DARWIN-32-STATIC-NEXT:    movl %eax, _dst+64
1082; DARWIN-32-STATIC-NEXT:    retl
1083;
1084; DARWIN-32-DYNAMIC-LABEL: qux00:
1085; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1086; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
1087; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
1088; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
1089; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1090; DARWIN-32-DYNAMIC-NEXT:    retl
1091;
1092; DARWIN-32-PIC-LABEL: qux00:
1093; DARWIN-32-PIC:       ## %bb.0: ## %entry
1094; DARWIN-32-PIC-NEXT:    calll L12$pb
1095; DARWIN-32-PIC-NEXT:  L12$pb:
1096; DARWIN-32-PIC-NEXT:    popl %eax
1097; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L12$pb(%eax), %ecx
1098; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
1099; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L12$pb(%eax), %eax
1100; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1101; DARWIN-32-PIC-NEXT:    retl
1102;
1103; DARWIN-64-STATIC-LABEL: qux00:
1104; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1105; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1106; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
1107; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
1108; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1109; DARWIN-64-STATIC-NEXT:    retq
1110;
1111; DARWIN-64-DYNAMIC-LABEL: qux00:
1112; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1113; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1114; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
1115; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
1116; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1117; DARWIN-64-DYNAMIC-NEXT:    retq
1118;
1119; DARWIN-64-PIC-LABEL: qux00:
1120; DARWIN-64-PIC:       ## %bb.0: ## %entry
1121; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1122; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
1123; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
1124; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1125; DARWIN-64-PIC-NEXT:    retq
1126
1127entry:
1128	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
1129	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), align 4
1130	ret void
1131}
1132
1133define void @qxx00() nounwind {
1134; LINUX-64-STATIC-LABEL: qxx00:
1135; LINUX-64-STATIC:       # %bb.0: # %entry
1136; LINUX-64-STATIC-NEXT:    movl xsrc+64(%rip), %eax
1137; LINUX-64-STATIC-NEXT:    movl %eax, xdst+64(%rip)
1138; LINUX-64-STATIC-NEXT:    retq
1139;
1140; LINUX-32-STATIC-LABEL: qxx00:
1141; LINUX-32-STATIC:       # %bb.0: # %entry
1142; LINUX-32-STATIC-NEXT:    movl xsrc+64, %eax
1143; LINUX-32-STATIC-NEXT:    movl %eax, xdst+64
1144; LINUX-32-STATIC-NEXT:    retl
1145;
1146; LINUX-32-PIC-LABEL: qxx00:
1147; LINUX-32-PIC:       # %bb.0: # %entry
1148; LINUX-32-PIC-NEXT:    calll .L13$pb
1149; LINUX-32-PIC-NEXT:  .L13$pb:
1150; LINUX-32-PIC-NEXT:    popl %eax
1151; LINUX-32-PIC-NEXT:  .Ltmp13:
1152; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp13-.L13$pb), %eax
1153; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
1154; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1155; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
1156; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1157; LINUX-32-PIC-NEXT:    retl
1158;
1159; LINUX-64-PIC-LABEL: qxx00:
1160; LINUX-64-PIC:       # %bb.0: # %entry
1161; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
1162; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1163; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
1164; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1165; LINUX-64-PIC-NEXT:    retq
1166;
1167; DARWIN-32-STATIC-LABEL: qxx00:
1168; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1169; DARWIN-32-STATIC-NEXT:    movl _xsrc+64, %eax
1170; DARWIN-32-STATIC-NEXT:    movl %eax, _xdst+64
1171; DARWIN-32-STATIC-NEXT:    retl
1172;
1173; DARWIN-32-DYNAMIC-LABEL: qxx00:
1174; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1175; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
1176; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
1177; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
1178; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1179; DARWIN-32-DYNAMIC-NEXT:    retl
1180;
1181; DARWIN-32-PIC-LABEL: qxx00:
1182; DARWIN-32-PIC:       ## %bb.0: ## %entry
1183; DARWIN-32-PIC-NEXT:    calll L13$pb
1184; DARWIN-32-PIC-NEXT:  L13$pb:
1185; DARWIN-32-PIC-NEXT:    popl %eax
1186; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L13$pb(%eax), %ecx
1187; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
1188; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L13$pb(%eax), %eax
1189; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1190; DARWIN-32-PIC-NEXT:    retl
1191;
1192; DARWIN-64-STATIC-LABEL: qxx00:
1193; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1194; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1195; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
1196; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
1197; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1198; DARWIN-64-STATIC-NEXT:    retq
1199;
1200; DARWIN-64-DYNAMIC-LABEL: qxx00:
1201; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1202; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1203; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
1204; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
1205; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1206; DARWIN-64-DYNAMIC-NEXT:    retq
1207;
1208; DARWIN-64-PIC-LABEL: qxx00:
1209; DARWIN-64-PIC:       ## %bb.0: ## %entry
1210; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1211; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
1212; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
1213; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1214; DARWIN-64-PIC-NEXT:    retq
1215
1216entry:
1217	%0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
1218	store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), align 4
1219	ret void
1220}
1221
1222define void @qux01() nounwind {
1223; LINUX-64-STATIC-LABEL: qux01:
1224; LINUX-64-STATIC:       # %bb.0: # %entry
1225; LINUX-64-STATIC-NEXT:    movq $dst+64, ptr(%rip)
1226; LINUX-64-STATIC-NEXT:    retq
1227;
1228; LINUX-32-STATIC-LABEL: qux01:
1229; LINUX-32-STATIC:       # %bb.0: # %entry
1230; LINUX-32-STATIC-NEXT:    movl $dst+64, ptr
1231; LINUX-32-STATIC-NEXT:    retl
1232;
1233; LINUX-32-PIC-LABEL: qux01:
1234; LINUX-32-PIC:       # %bb.0: # %entry
1235; LINUX-32-PIC-NEXT:    calll .L14$pb
1236; LINUX-32-PIC-NEXT:  .L14$pb:
1237; LINUX-32-PIC-NEXT:    popl %eax
1238; LINUX-32-PIC-NEXT:  .Ltmp14:
1239; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp14-.L14$pb), %eax
1240; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %ecx
1241; LINUX-32-PIC-NEXT:    addl $64, %ecx
1242; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
1243; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
1244; LINUX-32-PIC-NEXT:    retl
1245;
1246; LINUX-64-PIC-LABEL: qux01:
1247; LINUX-64-PIC:       # %bb.0: # %entry
1248; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
1249; LINUX-64-PIC-NEXT:    addq $64, %rax
1250; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1251; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
1252; LINUX-64-PIC-NEXT:    retq
1253;
1254; DARWIN-32-STATIC-LABEL: qux01:
1255; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1256; DARWIN-32-STATIC-NEXT:    movl $_dst+64, _ptr
1257; DARWIN-32-STATIC-NEXT:    retl
1258;
1259; DARWIN-32-DYNAMIC-LABEL: qux01:
1260; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1261; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
1262; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
1263; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
1264; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
1265; DARWIN-32-DYNAMIC-NEXT:    retl
1266;
1267; DARWIN-32-PIC-LABEL: qux01:
1268; DARWIN-32-PIC:       ## %bb.0: ## %entry
1269; DARWIN-32-PIC-NEXT:    calll L14$pb
1270; DARWIN-32-PIC-NEXT:  L14$pb:
1271; DARWIN-32-PIC-NEXT:    popl %eax
1272; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L14$pb(%eax), %ecx
1273; DARWIN-32-PIC-NEXT:    addl $64, %ecx
1274; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L14$pb(%eax), %eax
1275; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
1276; DARWIN-32-PIC-NEXT:    retl
1277;
1278; DARWIN-64-STATIC-LABEL: qux01:
1279; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1280; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
1281; DARWIN-64-STATIC-NEXT:    addq $64, %rax
1282; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1283; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
1284; DARWIN-64-STATIC-NEXT:    retq
1285;
1286; DARWIN-64-DYNAMIC-LABEL: qux01:
1287; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1288; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
1289; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
1290; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1291; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
1292; DARWIN-64-DYNAMIC-NEXT:    retq
1293;
1294; DARWIN-64-PIC-LABEL: qux01:
1295; DARWIN-64-PIC:       ## %bb.0: ## %entry
1296; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
1297; DARWIN-64-PIC-NEXT:    addq $64, %rax
1298; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1299; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
1300; DARWIN-64-PIC-NEXT:    retq
1301
1302entry:
1303	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
1304	ret void
1305}
1306
1307define void @qxx01() nounwind {
1308; LINUX-64-STATIC-LABEL: qxx01:
1309; LINUX-64-STATIC:       # %bb.0: # %entry
1310; LINUX-64-STATIC-NEXT:    movq $xdst+64, ptr(%rip)
1311; LINUX-64-STATIC-NEXT:    retq
1312;
1313; LINUX-32-STATIC-LABEL: qxx01:
1314; LINUX-32-STATIC:       # %bb.0: # %entry
1315; LINUX-32-STATIC-NEXT:    movl $xdst+64, ptr
1316; LINUX-32-STATIC-NEXT:    retl
1317;
1318; LINUX-32-PIC-LABEL: qxx01:
1319; LINUX-32-PIC:       # %bb.0: # %entry
1320; LINUX-32-PIC-NEXT:    calll .L15$pb
1321; LINUX-32-PIC-NEXT:  .L15$pb:
1322; LINUX-32-PIC-NEXT:    popl %eax
1323; LINUX-32-PIC-NEXT:  .Ltmp15:
1324; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp15-.L15$pb), %eax
1325; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %ecx
1326; LINUX-32-PIC-NEXT:    addl $64, %ecx
1327; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
1328; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
1329; LINUX-32-PIC-NEXT:    retl
1330;
1331; LINUX-64-PIC-LABEL: qxx01:
1332; LINUX-64-PIC:       # %bb.0: # %entry
1333; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
1334; LINUX-64-PIC-NEXT:    addq $64, %rax
1335; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1336; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
1337; LINUX-64-PIC-NEXT:    retq
1338;
1339; DARWIN-32-STATIC-LABEL: qxx01:
1340; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1341; DARWIN-32-STATIC-NEXT:    movl $_xdst+64, _ptr
1342; DARWIN-32-STATIC-NEXT:    retl
1343;
1344; DARWIN-32-DYNAMIC-LABEL: qxx01:
1345; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1346; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
1347; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
1348; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
1349; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
1350; DARWIN-32-DYNAMIC-NEXT:    retl
1351;
1352; DARWIN-32-PIC-LABEL: qxx01:
1353; DARWIN-32-PIC:       ## %bb.0: ## %entry
1354; DARWIN-32-PIC-NEXT:    calll L15$pb
1355; DARWIN-32-PIC-NEXT:  L15$pb:
1356; DARWIN-32-PIC-NEXT:    popl %eax
1357; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L15$pb(%eax), %ecx
1358; DARWIN-32-PIC-NEXT:    addl $64, %ecx
1359; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L15$pb(%eax), %eax
1360; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
1361; DARWIN-32-PIC-NEXT:    retl
1362;
1363; DARWIN-64-STATIC-LABEL: qxx01:
1364; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1365; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
1366; DARWIN-64-STATIC-NEXT:    addq $64, %rax
1367; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1368; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
1369; DARWIN-64-STATIC-NEXT:    retq
1370;
1371; DARWIN-64-DYNAMIC-LABEL: qxx01:
1372; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1373; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
1374; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
1375; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1376; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
1377; DARWIN-64-DYNAMIC-NEXT:    retq
1378;
1379; DARWIN-64-PIC-LABEL: qxx01:
1380; DARWIN-64-PIC:       ## %bb.0: ## %entry
1381; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
1382; DARWIN-64-PIC-NEXT:    addq $64, %rax
1383; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1384; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
1385; DARWIN-64-PIC-NEXT:    retq
1386
1387entry:
1388	store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1389	ret void
1390}
1391
1392define void @qux02() nounwind {
1393; LINUX-64-STATIC-LABEL: qux02:
1394; LINUX-64-STATIC:       # %bb.0: # %entry
1395; LINUX-64-STATIC-NEXT:    movl src+64(%rip), %eax
1396; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
1397; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1398; LINUX-64-STATIC-NEXT:    retq
1399;
1400; LINUX-32-STATIC-LABEL: qux02:
1401; LINUX-32-STATIC:       # %bb.0: # %entry
1402; LINUX-32-STATIC-NEXT:    movl src+64, %eax
1403; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
1404; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1405; LINUX-32-STATIC-NEXT:    retl
1406;
1407; LINUX-32-PIC-LABEL: qux02:
1408; LINUX-32-PIC:       # %bb.0: # %entry
1409; LINUX-32-PIC-NEXT:    calll .L16$pb
1410; LINUX-32-PIC-NEXT:  .L16$pb:
1411; LINUX-32-PIC-NEXT:    popl %eax
1412; LINUX-32-PIC-NEXT:  .Ltmp16:
1413; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp16-.L16$pb), %eax
1414; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
1415; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1416; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
1417; LINUX-32-PIC-NEXT:    movl (%eax), %eax
1418; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1419; LINUX-32-PIC-NEXT:    retl
1420;
1421; LINUX-64-PIC-LABEL: qux02:
1422; LINUX-64-PIC:       # %bb.0: # %entry
1423; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
1424; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1425; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1426; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
1427; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1428; LINUX-64-PIC-NEXT:    retq
1429;
1430; DARWIN-32-STATIC-LABEL: qux02:
1431; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1432; DARWIN-32-STATIC-NEXT:    movl _src+64, %eax
1433; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
1434; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1435; DARWIN-32-STATIC-NEXT:    retl
1436;
1437; DARWIN-32-DYNAMIC-LABEL: qux02:
1438; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1439; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
1440; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
1441; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
1442; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
1443; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1444; DARWIN-32-DYNAMIC-NEXT:    retl
1445;
1446; DARWIN-32-PIC-LABEL: qux02:
1447; DARWIN-32-PIC:       ## %bb.0: ## %entry
1448; DARWIN-32-PIC-NEXT:    calll L16$pb
1449; DARWIN-32-PIC-NEXT:  L16$pb:
1450; DARWIN-32-PIC-NEXT:    popl %eax
1451; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L16$pb(%eax), %ecx
1452; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
1453; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L16$pb(%eax), %eax
1454; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
1455; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1456; DARWIN-32-PIC-NEXT:    retl
1457;
1458; DARWIN-64-STATIC-LABEL: qux02:
1459; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1460; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1461; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
1462; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1463; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
1464; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1465; DARWIN-64-STATIC-NEXT:    retq
1466;
1467; DARWIN-64-DYNAMIC-LABEL: qux02:
1468; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1469; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1470; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
1471; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1472; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
1473; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1474; DARWIN-64-DYNAMIC-NEXT:    retq
1475;
1476; DARWIN-64-PIC-LABEL: qux02:
1477; DARWIN-64-PIC:       ## %bb.0: ## %entry
1478; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1479; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
1480; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1481; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
1482; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1483; DARWIN-64-PIC-NEXT:    retq
1484
1485entry:
1486	%0 = load i32*, i32** @ptr, align 8
1487	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
1488	%2 = getelementptr i32, i32* %0, i64 16
1489	store i32 %1, i32* %2, align 4
1490	ret void
1491}
1492
1493define void @qxx02() nounwind {
1494; LINUX-64-STATIC-LABEL: qxx02:
1495; LINUX-64-STATIC:       # %bb.0: # %entry
1496; LINUX-64-STATIC-NEXT:    movl xsrc+64(%rip), %eax
1497; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
1498; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1499; LINUX-64-STATIC-NEXT:    retq
1500;
1501; LINUX-32-STATIC-LABEL: qxx02:
1502; LINUX-32-STATIC:       # %bb.0: # %entry
1503; LINUX-32-STATIC-NEXT:    movl xsrc+64, %eax
1504; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
1505; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1506; LINUX-32-STATIC-NEXT:    retl
1507;
1508; LINUX-32-PIC-LABEL: qxx02:
1509; LINUX-32-PIC:       # %bb.0: # %entry
1510; LINUX-32-PIC-NEXT:    calll .L17$pb
1511; LINUX-32-PIC-NEXT:  .L17$pb:
1512; LINUX-32-PIC-NEXT:    popl %eax
1513; LINUX-32-PIC-NEXT:  .Ltmp17:
1514; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp17-.L17$pb), %eax
1515; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
1516; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1517; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
1518; LINUX-32-PIC-NEXT:    movl (%eax), %eax
1519; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1520; LINUX-32-PIC-NEXT:    retl
1521;
1522; LINUX-64-PIC-LABEL: qxx02:
1523; LINUX-64-PIC:       # %bb.0: # %entry
1524; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
1525; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1526; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1527; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
1528; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1529; LINUX-64-PIC-NEXT:    retq
1530;
1531; DARWIN-32-STATIC-LABEL: qxx02:
1532; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1533; DARWIN-32-STATIC-NEXT:    movl _xsrc+64, %eax
1534; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
1535; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1536; DARWIN-32-STATIC-NEXT:    retl
1537;
1538; DARWIN-32-DYNAMIC-LABEL: qxx02:
1539; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1540; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
1541; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
1542; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
1543; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
1544; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1545; DARWIN-32-DYNAMIC-NEXT:    retl
1546;
1547; DARWIN-32-PIC-LABEL: qxx02:
1548; DARWIN-32-PIC:       ## %bb.0: ## %entry
1549; DARWIN-32-PIC-NEXT:    calll L17$pb
1550; DARWIN-32-PIC-NEXT:  L17$pb:
1551; DARWIN-32-PIC-NEXT:    popl %eax
1552; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L17$pb(%eax), %ecx
1553; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
1554; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L17$pb(%eax), %eax
1555; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
1556; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1557; DARWIN-32-PIC-NEXT:    retl
1558;
1559; DARWIN-64-STATIC-LABEL: qxx02:
1560; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1561; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1562; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
1563; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1564; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
1565; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1566; DARWIN-64-STATIC-NEXT:    retq
1567;
1568; DARWIN-64-DYNAMIC-LABEL: qxx02:
1569; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1570; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1571; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
1572; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1573; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
1574; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1575; DARWIN-64-DYNAMIC-NEXT:    retq
1576;
1577; DARWIN-64-PIC-LABEL: qxx02:
1578; DARWIN-64-PIC:       ## %bb.0: ## %entry
1579; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1580; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
1581; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1582; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
1583; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1584; DARWIN-64-PIC-NEXT:    retq
1585
1586entry:
1587	%0 = load i32*, i32** @ptr, align 8
1588	%1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
1589	%2 = getelementptr i32, i32* %0, i64 16
1590	store i32 %1, i32* %2, align 4
1591	ret void
1592}
1593
1594define void @qux03() nounwind {
1595; LINUX-64-STATIC-LABEL: qux03:
1596; LINUX-64-STATIC:       # %bb.0: # %entry
1597; LINUX-64-STATIC-NEXT:    movl dsrc+64(%rip), %eax
1598; LINUX-64-STATIC-NEXT:    movl %eax, ddst+64(%rip)
1599; LINUX-64-STATIC-NEXT:    retq
1600;
1601; LINUX-32-STATIC-LABEL: qux03:
1602; LINUX-32-STATIC:       # %bb.0: # %entry
1603; LINUX-32-STATIC-NEXT:    movl dsrc+64, %eax
1604; LINUX-32-STATIC-NEXT:    movl %eax, ddst+64
1605; LINUX-32-STATIC-NEXT:    retl
1606;
1607; LINUX-32-PIC-LABEL: qux03:
1608; LINUX-32-PIC:       # %bb.0: # %entry
1609; LINUX-32-PIC-NEXT:    calll .L18$pb
1610; LINUX-32-PIC-NEXT:  .L18$pb:
1611; LINUX-32-PIC-NEXT:    popl %eax
1612; LINUX-32-PIC-NEXT:  .Ltmp18:
1613; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp18-.L18$pb), %eax
1614; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
1615; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1616; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
1617; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1618; LINUX-32-PIC-NEXT:    retl
1619;
1620; LINUX-64-PIC-LABEL: qux03:
1621; LINUX-64-PIC:       # %bb.0: # %entry
1622; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
1623; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1624; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
1625; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1626; LINUX-64-PIC-NEXT:    retq
1627;
1628; DARWIN-32-STATIC-LABEL: qux03:
1629; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1630; DARWIN-32-STATIC-NEXT:    movl _dsrc+64, %eax
1631; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst+64
1632; DARWIN-32-STATIC-NEXT:    retl
1633;
1634; DARWIN-32-DYNAMIC-LABEL: qux03:
1635; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1636; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64, %eax
1637; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst+64
1638; DARWIN-32-DYNAMIC-NEXT:    retl
1639;
1640; DARWIN-32-PIC-LABEL: qux03:
1641; DARWIN-32-PIC:       ## %bb.0: ## %entry
1642; DARWIN-32-PIC-NEXT:    calll L18$pb
1643; DARWIN-32-PIC-NEXT:  L18$pb:
1644; DARWIN-32-PIC-NEXT:    popl %eax
1645; DARWIN-32-PIC-NEXT:    movl (_dsrc-L18$pb)+64(%eax), %ecx
1646; DARWIN-32-PIC-NEXT:    movl %ecx, (_ddst-L18$pb)+64(%eax)
1647; DARWIN-32-PIC-NEXT:    retl
1648;
1649; DARWIN-64-STATIC-LABEL: qux03:
1650; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1651; DARWIN-64-STATIC-NEXT:    movl _dsrc+64(%rip), %eax
1652; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst+64(%rip)
1653; DARWIN-64-STATIC-NEXT:    retq
1654;
1655; DARWIN-64-DYNAMIC-LABEL: qux03:
1656; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1657; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+64(%rip), %eax
1658; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst+64(%rip)
1659; DARWIN-64-DYNAMIC-NEXT:    retq
1660;
1661; DARWIN-64-PIC-LABEL: qux03:
1662; DARWIN-64-PIC:       ## %bb.0: ## %entry
1663; DARWIN-64-PIC-NEXT:    movl _dsrc+64(%rip), %eax
1664; DARWIN-64-PIC-NEXT:    movl %eax, _ddst+64(%rip)
1665; DARWIN-64-PIC-NEXT:    retq
1666
1667entry:
1668	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
1669	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), align 32
1670	ret void
1671}
1672
1673define void @qux04() nounwind {
1674; LINUX-64-STATIC-LABEL: qux04:
1675; LINUX-64-STATIC:       # %bb.0: # %entry
1676; LINUX-64-STATIC-NEXT:    movq $ddst+64, dptr(%rip)
1677; LINUX-64-STATIC-NEXT:    retq
1678;
1679; LINUX-32-STATIC-LABEL: qux04:
1680; LINUX-32-STATIC:       # %bb.0: # %entry
1681; LINUX-32-STATIC-NEXT:    movl $ddst+64, dptr
1682; LINUX-32-STATIC-NEXT:    retl
1683;
1684; LINUX-32-PIC-LABEL: qux04:
1685; LINUX-32-PIC:       # %bb.0: # %entry
1686; LINUX-32-PIC-NEXT:    calll .L19$pb
1687; LINUX-32-PIC-NEXT:  .L19$pb:
1688; LINUX-32-PIC-NEXT:    popl %eax
1689; LINUX-32-PIC-NEXT:  .Ltmp19:
1690; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp19-.L19$pb), %eax
1691; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %ecx
1692; LINUX-32-PIC-NEXT:    addl $64, %ecx
1693; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
1694; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
1695; LINUX-32-PIC-NEXT:    retl
1696;
1697; LINUX-64-PIC-LABEL: qux04:
1698; LINUX-64-PIC:       # %bb.0: # %entry
1699; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
1700; LINUX-64-PIC-NEXT:    addq $64, %rax
1701; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
1702; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
1703; LINUX-64-PIC-NEXT:    retq
1704;
1705; DARWIN-32-STATIC-LABEL: qux04:
1706; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1707; DARWIN-32-STATIC-NEXT:    movl $_ddst+64, _dptr
1708; DARWIN-32-STATIC-NEXT:    retl
1709;
1710; DARWIN-32-DYNAMIC-LABEL: qux04:
1711; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1712; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+64, _dptr
1713; DARWIN-32-DYNAMIC-NEXT:    retl
1714;
1715; DARWIN-32-PIC-LABEL: qux04:
1716; DARWIN-32-PIC:       ## %bb.0: ## %entry
1717; DARWIN-32-PIC-NEXT:    calll L19$pb
1718; DARWIN-32-PIC-NEXT:  L19$pb:
1719; DARWIN-32-PIC-NEXT:    popl %eax
1720; DARWIN-32-PIC-NEXT:    leal (_ddst-L19$pb)+64(%eax), %ecx
1721; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L19$pb(%eax)
1722; DARWIN-32-PIC-NEXT:    retl
1723;
1724; DARWIN-64-STATIC-LABEL: qux04:
1725; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1726; DARWIN-64-STATIC-NEXT:    leaq _ddst+64(%rip), %rax
1727; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
1728; DARWIN-64-STATIC-NEXT:    retq
1729;
1730; DARWIN-64-DYNAMIC-LABEL: qux04:
1731; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1732; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+64(%rip), %rax
1733; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
1734; DARWIN-64-DYNAMIC-NEXT:    retq
1735;
1736; DARWIN-64-PIC-LABEL: qux04:
1737; DARWIN-64-PIC:       ## %bb.0: ## %entry
1738; DARWIN-64-PIC-NEXT:    leaq _ddst+64(%rip), %rax
1739; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
1740; DARWIN-64-PIC-NEXT:    retq
1741
1742entry:
1743	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1744	ret void
1745}
1746
1747define void @qux05() nounwind {
1748; LINUX-64-STATIC-LABEL: qux05:
1749; LINUX-64-STATIC:       # %bb.0: # %entry
1750; LINUX-64-STATIC-NEXT:    movl dsrc+64(%rip), %eax
1751; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
1752; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1753; LINUX-64-STATIC-NEXT:    retq
1754;
1755; LINUX-32-STATIC-LABEL: qux05:
1756; LINUX-32-STATIC:       # %bb.0: # %entry
1757; LINUX-32-STATIC-NEXT:    movl dsrc+64, %eax
1758; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
1759; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1760; LINUX-32-STATIC-NEXT:    retl
1761;
1762; LINUX-32-PIC-LABEL: qux05:
1763; LINUX-32-PIC:       # %bb.0: # %entry
1764; LINUX-32-PIC-NEXT:    calll .L20$pb
1765; LINUX-32-PIC-NEXT:  .L20$pb:
1766; LINUX-32-PIC-NEXT:    popl %eax
1767; LINUX-32-PIC-NEXT:  .Ltmp20:
1768; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp20-.L20$pb), %eax
1769; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
1770; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1771; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
1772; LINUX-32-PIC-NEXT:    movl (%eax), %eax
1773; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1774; LINUX-32-PIC-NEXT:    retl
1775;
1776; LINUX-64-PIC-LABEL: qux05:
1777; LINUX-64-PIC:       # %bb.0: # %entry
1778; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
1779; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1780; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
1781; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
1782; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1783; LINUX-64-PIC-NEXT:    retq
1784;
1785; DARWIN-32-STATIC-LABEL: qux05:
1786; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1787; DARWIN-32-STATIC-NEXT:    movl _dsrc+64, %eax
1788; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
1789; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1790; DARWIN-32-STATIC-NEXT:    retl
1791;
1792; DARWIN-32-DYNAMIC-LABEL: qux05:
1793; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1794; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64, %eax
1795; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
1796; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1797; DARWIN-32-DYNAMIC-NEXT:    retl
1798;
1799; DARWIN-32-PIC-LABEL: qux05:
1800; DARWIN-32-PIC:       ## %bb.0: ## %entry
1801; DARWIN-32-PIC-NEXT:    calll L20$pb
1802; DARWIN-32-PIC-NEXT:  L20$pb:
1803; DARWIN-32-PIC-NEXT:    popl %eax
1804; DARWIN-32-PIC-NEXT:    movl (_dsrc-L20$pb)+64(%eax), %ecx
1805; DARWIN-32-PIC-NEXT:    movl _dptr-L20$pb(%eax), %eax
1806; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1807; DARWIN-32-PIC-NEXT:    retl
1808;
1809; DARWIN-64-STATIC-LABEL: qux05:
1810; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1811; DARWIN-64-STATIC-NEXT:    movl _dsrc+64(%rip), %eax
1812; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
1813; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1814; DARWIN-64-STATIC-NEXT:    retq
1815;
1816; DARWIN-64-DYNAMIC-LABEL: qux05:
1817; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1818; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+64(%rip), %eax
1819; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
1820; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1821; DARWIN-64-DYNAMIC-NEXT:    retq
1822;
1823; DARWIN-64-PIC-LABEL: qux05:
1824; DARWIN-64-PIC:       ## %bb.0: ## %entry
1825; DARWIN-64-PIC-NEXT:    movl _dsrc+64(%rip), %eax
1826; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
1827; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1828; DARWIN-64-PIC-NEXT:    retq
1829
1830entry:
1831	%0 = load i32*, i32** @dptr, align 8
1832	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
1833	%2 = getelementptr i32, i32* %0, i64 16
1834	store i32 %1, i32* %2, align 4
1835	ret void
1836}
1837
1838define void @qux06() nounwind {
1839; LINUX-64-STATIC-LABEL: qux06:
1840; LINUX-64-STATIC:       # %bb.0: # %entry
1841; LINUX-64-STATIC-NEXT:    movl lsrc+64(%rip), %eax
1842; LINUX-64-STATIC-NEXT:    movl %eax, ldst+64(%rip)
1843; LINUX-64-STATIC-NEXT:    retq
1844;
1845; LINUX-32-STATIC-LABEL: qux06:
1846; LINUX-32-STATIC:       # %bb.0: # %entry
1847; LINUX-32-STATIC-NEXT:    movl lsrc+64, %eax
1848; LINUX-32-STATIC-NEXT:    movl %eax, ldst+64
1849; LINUX-32-STATIC-NEXT:    retl
1850;
1851; LINUX-32-PIC-LABEL: qux06:
1852; LINUX-32-PIC:       # %bb.0: # %entry
1853; LINUX-32-PIC-NEXT:    calll .L21$pb
1854; LINUX-32-PIC-NEXT:  .L21$pb:
1855; LINUX-32-PIC-NEXT:    popl %eax
1856; LINUX-32-PIC-NEXT:  .Ltmp21:
1857; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp21-.L21$pb), %eax
1858; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax), %ecx
1859; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF+64(%eax)
1860; LINUX-32-PIC-NEXT:    retl
1861;
1862; LINUX-64-PIC-LABEL: qux06:
1863; LINUX-64-PIC:       # %bb.0: # %entry
1864; LINUX-64-PIC-NEXT:    movl lsrc+64(%rip), %eax
1865; LINUX-64-PIC-NEXT:    movl %eax, ldst+64(%rip)
1866; LINUX-64-PIC-NEXT:    retq
1867;
1868; DARWIN-32-STATIC-LABEL: qux06:
1869; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1870; DARWIN-32-STATIC-NEXT:    movl _lsrc+64, %eax
1871; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst+64
1872; DARWIN-32-STATIC-NEXT:    retl
1873;
1874; DARWIN-32-DYNAMIC-LABEL: qux06:
1875; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1876; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64, %eax
1877; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst+64
1878; DARWIN-32-DYNAMIC-NEXT:    retl
1879;
1880; DARWIN-32-PIC-LABEL: qux06:
1881; DARWIN-32-PIC:       ## %bb.0: ## %entry
1882; DARWIN-32-PIC-NEXT:    calll L21$pb
1883; DARWIN-32-PIC-NEXT:  L21$pb:
1884; DARWIN-32-PIC-NEXT:    popl %eax
1885; DARWIN-32-PIC-NEXT:    movl (_lsrc-L21$pb)+64(%eax), %ecx
1886; DARWIN-32-PIC-NEXT:    movl %ecx, (_ldst-L21$pb)+64(%eax)
1887; DARWIN-32-PIC-NEXT:    retl
1888;
1889; DARWIN-64-STATIC-LABEL: qux06:
1890; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1891; DARWIN-64-STATIC-NEXT:    movl _lsrc+64(%rip), %eax
1892; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst+64(%rip)
1893; DARWIN-64-STATIC-NEXT:    retq
1894;
1895; DARWIN-64-DYNAMIC-LABEL: qux06:
1896; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1897; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+64(%rip), %eax
1898; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst+64(%rip)
1899; DARWIN-64-DYNAMIC-NEXT:    retq
1900;
1901; DARWIN-64-PIC-LABEL: qux06:
1902; DARWIN-64-PIC:       ## %bb.0: ## %entry
1903; DARWIN-64-PIC-NEXT:    movl _lsrc+64(%rip), %eax
1904; DARWIN-64-PIC-NEXT:    movl %eax, _ldst+64(%rip)
1905; DARWIN-64-PIC-NEXT:    retq
1906
1907entry:
1908	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
1909	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), align 4
1910	ret void
1911}
1912
1913define void @qux07() nounwind {
1914; LINUX-64-STATIC-LABEL: qux07:
1915; LINUX-64-STATIC:       # %bb.0: # %entry
1916; LINUX-64-STATIC-NEXT:    movq $ldst+64, lptr(%rip)
1917; LINUX-64-STATIC-NEXT:    retq
1918;
1919; LINUX-32-STATIC-LABEL: qux07:
1920; LINUX-32-STATIC:       # %bb.0: # %entry
1921; LINUX-32-STATIC-NEXT:    movl $ldst+64, lptr
1922; LINUX-32-STATIC-NEXT:    retl
1923;
1924; LINUX-32-PIC-LABEL: qux07:
1925; LINUX-32-PIC:       # %bb.0: # %entry
1926; LINUX-32-PIC-NEXT:    calll .L22$pb
1927; LINUX-32-PIC-NEXT:  .L22$pb:
1928; LINUX-32-PIC-NEXT:    popl %eax
1929; LINUX-32-PIC-NEXT:  .Ltmp22:
1930; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp22-.L22$pb), %eax
1931; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax), %ecx
1932; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
1933; LINUX-32-PIC-NEXT:    retl
1934;
1935; LINUX-64-PIC-LABEL: qux07:
1936; LINUX-64-PIC:       # %bb.0: # %entry
1937; LINUX-64-PIC-NEXT:    leaq ldst+64(%rip), %rax
1938; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
1939; LINUX-64-PIC-NEXT:    retq
1940;
1941; DARWIN-32-STATIC-LABEL: qux07:
1942; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1943; DARWIN-32-STATIC-NEXT:    movl $_ldst+64, _lptr
1944; DARWIN-32-STATIC-NEXT:    retl
1945;
1946; DARWIN-32-DYNAMIC-LABEL: qux07:
1947; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1948; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+64, _lptr
1949; DARWIN-32-DYNAMIC-NEXT:    retl
1950;
1951; DARWIN-32-PIC-LABEL: qux07:
1952; DARWIN-32-PIC:       ## %bb.0: ## %entry
1953; DARWIN-32-PIC-NEXT:    calll L22$pb
1954; DARWIN-32-PIC-NEXT:  L22$pb:
1955; DARWIN-32-PIC-NEXT:    popl %eax
1956; DARWIN-32-PIC-NEXT:    leal (_ldst-L22$pb)+64(%eax), %ecx
1957; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L22$pb(%eax)
1958; DARWIN-32-PIC-NEXT:    retl
1959;
1960; DARWIN-64-STATIC-LABEL: qux07:
1961; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1962; DARWIN-64-STATIC-NEXT:    leaq _ldst+64(%rip), %rax
1963; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
1964; DARWIN-64-STATIC-NEXT:    retq
1965;
1966; DARWIN-64-DYNAMIC-LABEL: qux07:
1967; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1968; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+64(%rip), %rax
1969; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
1970; DARWIN-64-DYNAMIC-NEXT:    retq
1971;
1972; DARWIN-64-PIC-LABEL: qux07:
1973; DARWIN-64-PIC:       ## %bb.0: ## %entry
1974; DARWIN-64-PIC-NEXT:    leaq _ldst+64(%rip), %rax
1975; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
1976; DARWIN-64-PIC-NEXT:    retq
1977
1978entry:
1979	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1980	ret void
1981}
1982
1983define void @qux08() nounwind {
1984; LINUX-64-STATIC-LABEL: qux08:
1985; LINUX-64-STATIC:       # %bb.0: # %entry
1986; LINUX-64-STATIC-NEXT:    movl lsrc+64(%rip), %eax
1987; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
1988; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1989; LINUX-64-STATIC-NEXT:    retq
1990;
1991; LINUX-32-STATIC-LABEL: qux08:
1992; LINUX-32-STATIC:       # %bb.0: # %entry
1993; LINUX-32-STATIC-NEXT:    movl lsrc+64, %eax
1994; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
1995; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1996; LINUX-32-STATIC-NEXT:    retl
1997;
1998; LINUX-32-PIC-LABEL: qux08:
1999; LINUX-32-PIC:       # %bb.0: # %entry
2000; LINUX-32-PIC-NEXT:    calll .L23$pb
2001; LINUX-32-PIC-NEXT:  .L23$pb:
2002; LINUX-32-PIC-NEXT:    popl %eax
2003; LINUX-32-PIC-NEXT:  .Ltmp23:
2004; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp23-.L23$pb), %eax
2005; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax), %ecx
2006; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
2007; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
2008; LINUX-32-PIC-NEXT:    retl
2009;
2010; LINUX-64-PIC-LABEL: qux08:
2011; LINUX-64-PIC:       # %bb.0: # %entry
2012; LINUX-64-PIC-NEXT:    movl lsrc+64(%rip), %eax
2013; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
2014; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
2015; LINUX-64-PIC-NEXT:    retq
2016;
2017; DARWIN-32-STATIC-LABEL: qux08:
2018; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2019; DARWIN-32-STATIC-NEXT:    movl _lsrc+64, %eax
2020; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
2021; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
2022; DARWIN-32-STATIC-NEXT:    retl
2023;
2024; DARWIN-32-DYNAMIC-LABEL: qux08:
2025; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2026; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64, %eax
2027; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
2028; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
2029; DARWIN-32-DYNAMIC-NEXT:    retl
2030;
2031; DARWIN-32-PIC-LABEL: qux08:
2032; DARWIN-32-PIC:       ## %bb.0: ## %entry
2033; DARWIN-32-PIC-NEXT:    calll L23$pb
2034; DARWIN-32-PIC-NEXT:  L23$pb:
2035; DARWIN-32-PIC-NEXT:    popl %eax
2036; DARWIN-32-PIC-NEXT:    movl (_lsrc-L23$pb)+64(%eax), %ecx
2037; DARWIN-32-PIC-NEXT:    movl _lptr-L23$pb(%eax), %eax
2038; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
2039; DARWIN-32-PIC-NEXT:    retl
2040;
2041; DARWIN-64-STATIC-LABEL: qux08:
2042; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2043; DARWIN-64-STATIC-NEXT:    movl _lsrc+64(%rip), %eax
2044; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
2045; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
2046; DARWIN-64-STATIC-NEXT:    retq
2047;
2048; DARWIN-64-DYNAMIC-LABEL: qux08:
2049; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2050; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+64(%rip), %eax
2051; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
2052; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
2053; DARWIN-64-DYNAMIC-NEXT:    retq
2054;
2055; DARWIN-64-PIC-LABEL: qux08:
2056; DARWIN-64-PIC:       ## %bb.0: ## %entry
2057; DARWIN-64-PIC-NEXT:    movl _lsrc+64(%rip), %eax
2058; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
2059; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
2060; DARWIN-64-PIC-NEXT:    retq
2061
2062entry:
2063	%0 = load i32*, i32** @lptr, align 8
2064	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
2065	%2 = getelementptr i32, i32* %0, i64 16
2066	store i32 %1, i32* %2, align 4
2067	ret void
2068}
2069
2070define void @ind00(i64 %i) nounwind {
2071; LINUX-64-STATIC-LABEL: ind00:
2072; LINUX-64-STATIC:       # %bb.0: # %entry
2073; LINUX-64-STATIC-NEXT:    movl src(,%rdi,4), %eax
2074; LINUX-64-STATIC-NEXT:    movl %eax, dst(,%rdi,4)
2075; LINUX-64-STATIC-NEXT:    retq
2076;
2077; LINUX-32-STATIC-LABEL: ind00:
2078; LINUX-32-STATIC:       # %bb.0: # %entry
2079; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2080; LINUX-32-STATIC-NEXT:    movl src(,%eax,4), %ecx
2081; LINUX-32-STATIC-NEXT:    movl %ecx, dst(,%eax,4)
2082; LINUX-32-STATIC-NEXT:    retl
2083;
2084; LINUX-32-PIC-LABEL: ind00:
2085; LINUX-32-PIC:       # %bb.0: # %entry
2086; LINUX-32-PIC-NEXT:    calll .L24$pb
2087; LINUX-32-PIC-NEXT:  .L24$pb:
2088; LINUX-32-PIC-NEXT:    popl %eax
2089; LINUX-32-PIC-NEXT:  .Ltmp24:
2090; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp24-.L24$pb), %eax
2091; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2092; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
2093; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2094; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
2095; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2096; LINUX-32-PIC-NEXT:    retl
2097;
2098; LINUX-64-PIC-LABEL: ind00:
2099; LINUX-64-PIC:       # %bb.0: # %entry
2100; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
2101; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2102; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
2103; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2104; LINUX-64-PIC-NEXT:    retq
2105;
2106; DARWIN-32-STATIC-LABEL: ind00:
2107; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2108; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2109; DARWIN-32-STATIC-NEXT:    movl _src(,%eax,4), %ecx
2110; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst(,%eax,4)
2111; DARWIN-32-STATIC-NEXT:    retl
2112;
2113; DARWIN-32-DYNAMIC-LABEL: ind00:
2114; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2115; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2116; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
2117; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
2118; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
2119; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2120; DARWIN-32-DYNAMIC-NEXT:    retl
2121;
2122; DARWIN-32-PIC-LABEL: ind00:
2123; DARWIN-32-PIC:       ## %bb.0: ## %entry
2124; DARWIN-32-PIC-NEXT:    calll L24$pb
2125; DARWIN-32-PIC-NEXT:  L24$pb:
2126; DARWIN-32-PIC-NEXT:    popl %eax
2127; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2128; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L24$pb(%eax), %edx
2129; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2130; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L24$pb(%eax), %eax
2131; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2132; DARWIN-32-PIC-NEXT:    retl
2133;
2134; DARWIN-64-STATIC-LABEL: ind00:
2135; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2136; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2137; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2138; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
2139; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2140; DARWIN-64-STATIC-NEXT:    retq
2141;
2142; DARWIN-64-DYNAMIC-LABEL: ind00:
2143; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2144; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2145; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2146; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
2147; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2148; DARWIN-64-DYNAMIC-NEXT:    retq
2149;
2150; DARWIN-64-PIC-LABEL: ind00:
2151; DARWIN-64-PIC:       ## %bb.0: ## %entry
2152; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2153; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2154; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
2155; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2156; DARWIN-64-PIC-NEXT:    retq
2157
2158entry:
2159	%0 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
2160	%1 = load i32, i32* %0, align 4
2161	%2 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
2162	store i32 %1, i32* %2, align 4
2163	ret void
2164}
2165
2166define void @ixd00(i64 %i) nounwind {
2167; LINUX-64-STATIC-LABEL: ixd00:
2168; LINUX-64-STATIC:       # %bb.0: # %entry
2169; LINUX-64-STATIC-NEXT:    movl xsrc(,%rdi,4), %eax
2170; LINUX-64-STATIC-NEXT:    movl %eax, xdst(,%rdi,4)
2171; LINUX-64-STATIC-NEXT:    retq
2172;
2173; LINUX-32-STATIC-LABEL: ixd00:
2174; LINUX-32-STATIC:       # %bb.0: # %entry
2175; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2176; LINUX-32-STATIC-NEXT:    movl xsrc(,%eax,4), %ecx
2177; LINUX-32-STATIC-NEXT:    movl %ecx, xdst(,%eax,4)
2178; LINUX-32-STATIC-NEXT:    retl
2179;
2180; LINUX-32-PIC-LABEL: ixd00:
2181; LINUX-32-PIC:       # %bb.0: # %entry
2182; LINUX-32-PIC-NEXT:    calll .L25$pb
2183; LINUX-32-PIC-NEXT:  .L25$pb:
2184; LINUX-32-PIC-NEXT:    popl %eax
2185; LINUX-32-PIC-NEXT:  .Ltmp25:
2186; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp25-.L25$pb), %eax
2187; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2188; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
2189; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2190; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
2191; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2192; LINUX-32-PIC-NEXT:    retl
2193;
2194; LINUX-64-PIC-LABEL: ixd00:
2195; LINUX-64-PIC:       # %bb.0: # %entry
2196; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
2197; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2198; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
2199; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2200; LINUX-64-PIC-NEXT:    retq
2201;
2202; DARWIN-32-STATIC-LABEL: ixd00:
2203; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2204; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2205; DARWIN-32-STATIC-NEXT:    movl _xsrc(,%eax,4), %ecx
2206; DARWIN-32-STATIC-NEXT:    movl %ecx, _xdst(,%eax,4)
2207; DARWIN-32-STATIC-NEXT:    retl
2208;
2209; DARWIN-32-DYNAMIC-LABEL: ixd00:
2210; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2211; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2212; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
2213; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
2214; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %edx
2215; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2216; DARWIN-32-DYNAMIC-NEXT:    retl
2217;
2218; DARWIN-32-PIC-LABEL: ixd00:
2219; DARWIN-32-PIC:       ## %bb.0: ## %entry
2220; DARWIN-32-PIC-NEXT:    calll L25$pb
2221; DARWIN-32-PIC-NEXT:  L25$pb:
2222; DARWIN-32-PIC-NEXT:    popl %eax
2223; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2224; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L25$pb(%eax), %edx
2225; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2226; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L25$pb(%eax), %eax
2227; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2228; DARWIN-32-PIC-NEXT:    retl
2229;
2230; DARWIN-64-STATIC-LABEL: ixd00:
2231; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2232; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2233; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2234; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
2235; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2236; DARWIN-64-STATIC-NEXT:    retq
2237;
2238; DARWIN-64-DYNAMIC-LABEL: ixd00:
2239; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2240; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2241; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2242; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
2243; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2244; DARWIN-64-DYNAMIC-NEXT:    retq
2245;
2246; DARWIN-64-PIC-LABEL: ixd00:
2247; DARWIN-64-PIC:       ## %bb.0: ## %entry
2248; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2249; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2250; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
2251; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2252; DARWIN-64-PIC-NEXT:    retq
2253
2254entry:
2255	%0 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
2256	%1 = load i32, i32* %0, align 4
2257	%2 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
2258	store i32 %1, i32* %2, align 4
2259	ret void
2260}
2261
2262define void @ind01(i64 %i) nounwind {
2263; LINUX-64-STATIC-LABEL: ind01:
2264; LINUX-64-STATIC:       # %bb.0: # %entry
2265; LINUX-64-STATIC-NEXT:    leaq dst(,%rdi,4), %rax
2266; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
2267; LINUX-64-STATIC-NEXT:    retq
2268;
2269; LINUX-32-STATIC-LABEL: ind01:
2270; LINUX-32-STATIC:       # %bb.0: # %entry
2271; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2272; LINUX-32-STATIC-NEXT:    leal dst(,%eax,4), %eax
2273; LINUX-32-STATIC-NEXT:    movl %eax, ptr
2274; LINUX-32-STATIC-NEXT:    retl
2275;
2276; LINUX-32-PIC-LABEL: ind01:
2277; LINUX-32-PIC:       # %bb.0: # %entry
2278; LINUX-32-PIC-NEXT:    calll .L26$pb
2279; LINUX-32-PIC-NEXT:  .L26$pb:
2280; LINUX-32-PIC-NEXT:    popl %eax
2281; LINUX-32-PIC-NEXT:  .Ltmp26:
2282; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp26-.L26$pb), %eax
2283; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2284; LINUX-32-PIC-NEXT:    shll $2, %ecx
2285; LINUX-32-PIC-NEXT:    addl dst@GOT(%eax), %ecx
2286; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
2287; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
2288; LINUX-32-PIC-NEXT:    retl
2289;
2290; LINUX-64-PIC-LABEL: ind01:
2291; LINUX-64-PIC:       # %bb.0: # %entry
2292; LINUX-64-PIC-NEXT:    shlq $2, %rdi
2293; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rdi
2294; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
2295; LINUX-64-PIC-NEXT:    movq %rdi, (%rax)
2296; LINUX-64-PIC-NEXT:    retq
2297;
2298; DARWIN-32-STATIC-LABEL: ind01:
2299; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2300; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2301; DARWIN-32-STATIC-NEXT:    leal _dst(,%eax,4), %eax
2302; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
2303; DARWIN-32-STATIC-NEXT:    retl
2304;
2305; DARWIN-32-DYNAMIC-LABEL: ind01:
2306; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2307; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2308; DARWIN-32-DYNAMIC-NEXT:    shll $2, %eax
2309; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
2310; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
2311; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
2312; DARWIN-32-DYNAMIC-NEXT:    retl
2313;
2314; DARWIN-32-PIC-LABEL: ind01:
2315; DARWIN-32-PIC:       ## %bb.0: ## %entry
2316; DARWIN-32-PIC-NEXT:    calll L26$pb
2317; DARWIN-32-PIC-NEXT:  L26$pb:
2318; DARWIN-32-PIC-NEXT:    popl %eax
2319; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2320; DARWIN-32-PIC-NEXT:    shll $2, %ecx
2321; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L26$pb(%eax), %ecx
2322; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L26$pb(%eax), %eax
2323; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
2324; DARWIN-32-PIC-NEXT:    retl
2325;
2326; DARWIN-64-STATIC-LABEL: ind01:
2327; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2328; DARWIN-64-STATIC-NEXT:    shlq $2, %rdi
2329; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
2330; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2331; DARWIN-64-STATIC-NEXT:    movq %rdi, (%rax)
2332; DARWIN-64-STATIC-NEXT:    retq
2333;
2334; DARWIN-64-DYNAMIC-LABEL: ind01:
2335; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2336; DARWIN-64-DYNAMIC-NEXT:    shlq $2, %rdi
2337; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
2338; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2339; DARWIN-64-DYNAMIC-NEXT:    movq %rdi, (%rax)
2340; DARWIN-64-DYNAMIC-NEXT:    retq
2341;
2342; DARWIN-64-PIC-LABEL: ind01:
2343; DARWIN-64-PIC:       ## %bb.0: ## %entry
2344; DARWIN-64-PIC-NEXT:    shlq $2, %rdi
2345; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
2346; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2347; DARWIN-64-PIC-NEXT:    movq %rdi, (%rax)
2348; DARWIN-64-PIC-NEXT:    retq
2349
2350entry:
2351	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
2352	store i32* %0, i32** @ptr, align 8
2353	ret void
2354}
2355
2356define void @ixd01(i64 %i) nounwind {
2357; LINUX-64-STATIC-LABEL: ixd01:
2358; LINUX-64-STATIC:       # %bb.0: # %entry
2359; LINUX-64-STATIC-NEXT:    leaq xdst(,%rdi,4), %rax
2360; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
2361; LINUX-64-STATIC-NEXT:    retq
2362;
2363; LINUX-32-STATIC-LABEL: ixd01:
2364; LINUX-32-STATIC:       # %bb.0: # %entry
2365; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2366; LINUX-32-STATIC-NEXT:    leal xdst(,%eax,4), %eax
2367; LINUX-32-STATIC-NEXT:    movl %eax, ptr
2368; LINUX-32-STATIC-NEXT:    retl
2369;
2370; LINUX-32-PIC-LABEL: ixd01:
2371; LINUX-32-PIC:       # %bb.0: # %entry
2372; LINUX-32-PIC-NEXT:    calll .L27$pb
2373; LINUX-32-PIC-NEXT:  .L27$pb:
2374; LINUX-32-PIC-NEXT:    popl %eax
2375; LINUX-32-PIC-NEXT:  .Ltmp27:
2376; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp27-.L27$pb), %eax
2377; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2378; LINUX-32-PIC-NEXT:    shll $2, %ecx
2379; LINUX-32-PIC-NEXT:    addl xdst@GOT(%eax), %ecx
2380; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
2381; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
2382; LINUX-32-PIC-NEXT:    retl
2383;
2384; LINUX-64-PIC-LABEL: ixd01:
2385; LINUX-64-PIC:       # %bb.0: # %entry
2386; LINUX-64-PIC-NEXT:    shlq $2, %rdi
2387; LINUX-64-PIC-NEXT:    addq xdst@GOTPCREL(%rip), %rdi
2388; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
2389; LINUX-64-PIC-NEXT:    movq %rdi, (%rax)
2390; LINUX-64-PIC-NEXT:    retq
2391;
2392; DARWIN-32-STATIC-LABEL: ixd01:
2393; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2394; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2395; DARWIN-32-STATIC-NEXT:    leal _xdst(,%eax,4), %eax
2396; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
2397; DARWIN-32-STATIC-NEXT:    retl
2398;
2399; DARWIN-32-DYNAMIC-LABEL: ixd01:
2400; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2401; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2402; DARWIN-32-DYNAMIC-NEXT:    shll $2, %eax
2403; DARWIN-32-DYNAMIC-NEXT:    addl L_xdst$non_lazy_ptr, %eax
2404; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
2405; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
2406; DARWIN-32-DYNAMIC-NEXT:    retl
2407;
2408; DARWIN-32-PIC-LABEL: ixd01:
2409; DARWIN-32-PIC:       ## %bb.0: ## %entry
2410; DARWIN-32-PIC-NEXT:    calll L27$pb
2411; DARWIN-32-PIC-NEXT:  L27$pb:
2412; DARWIN-32-PIC-NEXT:    popl %eax
2413; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2414; DARWIN-32-PIC-NEXT:    shll $2, %ecx
2415; DARWIN-32-PIC-NEXT:    addl L_xdst$non_lazy_ptr-L27$pb(%eax), %ecx
2416; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L27$pb(%eax), %eax
2417; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
2418; DARWIN-32-PIC-NEXT:    retl
2419;
2420; DARWIN-64-STATIC-LABEL: ixd01:
2421; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2422; DARWIN-64-STATIC-NEXT:    shlq $2, %rdi
2423; DARWIN-64-STATIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
2424; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2425; DARWIN-64-STATIC-NEXT:    movq %rdi, (%rax)
2426; DARWIN-64-STATIC-NEXT:    retq
2427;
2428; DARWIN-64-DYNAMIC-LABEL: ixd01:
2429; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2430; DARWIN-64-DYNAMIC-NEXT:    shlq $2, %rdi
2431; DARWIN-64-DYNAMIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
2432; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2433; DARWIN-64-DYNAMIC-NEXT:    movq %rdi, (%rax)
2434; DARWIN-64-DYNAMIC-NEXT:    retq
2435;
2436; DARWIN-64-PIC-LABEL: ixd01:
2437; DARWIN-64-PIC:       ## %bb.0: ## %entry
2438; DARWIN-64-PIC-NEXT:    shlq $2, %rdi
2439; DARWIN-64-PIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
2440; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2441; DARWIN-64-PIC-NEXT:    movq %rdi, (%rax)
2442; DARWIN-64-PIC-NEXT:    retq
2443
2444entry:
2445	%0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
2446	store i32* %0, i32** @ptr, align 8
2447	ret void
2448}
2449
2450define void @ind02(i64 %i) nounwind {
2451; LINUX-64-STATIC-LABEL: ind02:
2452; LINUX-64-STATIC:       # %bb.0: # %entry
2453; LINUX-64-STATIC-NEXT:    movl src(,%rdi,4), %eax
2454; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
2455; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2456; LINUX-64-STATIC-NEXT:    retq
2457;
2458; LINUX-32-STATIC-LABEL: ind02:
2459; LINUX-32-STATIC:       # %bb.0: # %entry
2460; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2461; LINUX-32-STATIC-NEXT:    movl src(,%eax,4), %ecx
2462; LINUX-32-STATIC-NEXT:    movl ptr, %edx
2463; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2464; LINUX-32-STATIC-NEXT:    retl
2465;
2466; LINUX-32-PIC-LABEL: ind02:
2467; LINUX-32-PIC:       # %bb.0: # %entry
2468; LINUX-32-PIC-NEXT:    calll .L28$pb
2469; LINUX-32-PIC-NEXT:  .L28$pb:
2470; LINUX-32-PIC-NEXT:    popl %eax
2471; LINUX-32-PIC-NEXT:  .Ltmp28:
2472; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp28-.L28$pb), %eax
2473; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2474; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
2475; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2476; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
2477; LINUX-32-PIC-NEXT:    movl (%eax), %eax
2478; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2479; LINUX-32-PIC-NEXT:    retl
2480;
2481; LINUX-64-PIC-LABEL: ind02:
2482; LINUX-64-PIC:       # %bb.0: # %entry
2483; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
2484; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2485; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
2486; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
2487; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2488; LINUX-64-PIC-NEXT:    retq
2489;
2490; DARWIN-32-STATIC-LABEL: ind02:
2491; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2492; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2493; DARWIN-32-STATIC-NEXT:    movl _src(,%eax,4), %ecx
2494; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
2495; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2496; DARWIN-32-STATIC-NEXT:    retl
2497;
2498; DARWIN-32-DYNAMIC-LABEL: ind02:
2499; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2500; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2501; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
2502; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
2503; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
2504; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
2505; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2506; DARWIN-32-DYNAMIC-NEXT:    retl
2507;
2508; DARWIN-32-PIC-LABEL: ind02:
2509; DARWIN-32-PIC:       ## %bb.0: ## %entry
2510; DARWIN-32-PIC-NEXT:    calll L28$pb
2511; DARWIN-32-PIC-NEXT:  L28$pb:
2512; DARWIN-32-PIC-NEXT:    popl %eax
2513; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2514; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L28$pb(%eax), %edx
2515; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2516; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L28$pb(%eax), %eax
2517; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
2518; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2519; DARWIN-32-PIC-NEXT:    retl
2520;
2521; DARWIN-64-STATIC-LABEL: ind02:
2522; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2523; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2524; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2525; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2526; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
2527; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2528; DARWIN-64-STATIC-NEXT:    retq
2529;
2530; DARWIN-64-DYNAMIC-LABEL: ind02:
2531; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2532; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2533; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2534; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2535; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
2536; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2537; DARWIN-64-DYNAMIC-NEXT:    retq
2538;
2539; DARWIN-64-PIC-LABEL: ind02:
2540; DARWIN-64-PIC:       ## %bb.0: ## %entry
2541; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2542; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2543; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2544; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
2545; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2546; DARWIN-64-PIC-NEXT:    retq
2547
2548entry:
2549	%0 = load i32*, i32** @ptr, align 8
2550	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
2551	%2 = load i32, i32* %1, align 4
2552	%3 = getelementptr i32, i32* %0, i64 %i
2553	store i32 %2, i32* %3, align 4
2554	ret void
2555}
2556
2557define void @ixd02(i64 %i) nounwind {
2558; LINUX-64-STATIC-LABEL: ixd02:
2559; LINUX-64-STATIC:       # %bb.0: # %entry
2560; LINUX-64-STATIC-NEXT:    movl xsrc(,%rdi,4), %eax
2561; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
2562; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2563; LINUX-64-STATIC-NEXT:    retq
2564;
2565; LINUX-32-STATIC-LABEL: ixd02:
2566; LINUX-32-STATIC:       # %bb.0: # %entry
2567; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2568; LINUX-32-STATIC-NEXT:    movl xsrc(,%eax,4), %ecx
2569; LINUX-32-STATIC-NEXT:    movl ptr, %edx
2570; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2571; LINUX-32-STATIC-NEXT:    retl
2572;
2573; LINUX-32-PIC-LABEL: ixd02:
2574; LINUX-32-PIC:       # %bb.0: # %entry
2575; LINUX-32-PIC-NEXT:    calll .L29$pb
2576; LINUX-32-PIC-NEXT:  .L29$pb:
2577; LINUX-32-PIC-NEXT:    popl %eax
2578; LINUX-32-PIC-NEXT:  .Ltmp29:
2579; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp29-.L29$pb), %eax
2580; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2581; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
2582; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2583; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
2584; LINUX-32-PIC-NEXT:    movl (%eax), %eax
2585; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2586; LINUX-32-PIC-NEXT:    retl
2587;
2588; LINUX-64-PIC-LABEL: ixd02:
2589; LINUX-64-PIC:       # %bb.0: # %entry
2590; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
2591; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2592; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
2593; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
2594; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2595; LINUX-64-PIC-NEXT:    retq
2596;
2597; DARWIN-32-STATIC-LABEL: ixd02:
2598; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2599; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2600; DARWIN-32-STATIC-NEXT:    movl _xsrc(,%eax,4), %ecx
2601; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
2602; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2603; DARWIN-32-STATIC-NEXT:    retl
2604;
2605; DARWIN-32-DYNAMIC-LABEL: ixd02:
2606; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2607; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2608; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
2609; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
2610; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
2611; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
2612; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2613; DARWIN-32-DYNAMIC-NEXT:    retl
2614;
2615; DARWIN-32-PIC-LABEL: ixd02:
2616; DARWIN-32-PIC:       ## %bb.0: ## %entry
2617; DARWIN-32-PIC-NEXT:    calll L29$pb
2618; DARWIN-32-PIC-NEXT:  L29$pb:
2619; DARWIN-32-PIC-NEXT:    popl %eax
2620; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2621; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L29$pb(%eax), %edx
2622; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2623; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L29$pb(%eax), %eax
2624; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
2625; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2626; DARWIN-32-PIC-NEXT:    retl
2627;
2628; DARWIN-64-STATIC-LABEL: ixd02:
2629; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2630; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2631; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2632; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2633; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
2634; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2635; DARWIN-64-STATIC-NEXT:    retq
2636;
2637; DARWIN-64-DYNAMIC-LABEL: ixd02:
2638; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2639; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2640; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2641; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2642; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
2643; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2644; DARWIN-64-DYNAMIC-NEXT:    retq
2645;
2646; DARWIN-64-PIC-LABEL: ixd02:
2647; DARWIN-64-PIC:       ## %bb.0: ## %entry
2648; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2649; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2650; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2651; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
2652; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2653; DARWIN-64-PIC-NEXT:    retq
2654
2655entry:
2656	%0 = load i32*, i32** @ptr, align 8
2657	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
2658	%2 = load i32, i32* %1, align 4
2659	%3 = getelementptr i32, i32* %0, i64 %i
2660	store i32 %2, i32* %3, align 4
2661	ret void
2662}
2663
2664define void @ind03(i64 %i) nounwind {
2665; LINUX-64-STATIC-LABEL: ind03:
2666; LINUX-64-STATIC:       # %bb.0: # %entry
2667; LINUX-64-STATIC-NEXT:    movl dsrc(,%rdi,4), %eax
2668; LINUX-64-STATIC-NEXT:    movl %eax, ddst(,%rdi,4)
2669; LINUX-64-STATIC-NEXT:    retq
2670;
2671; LINUX-32-STATIC-LABEL: ind03:
2672; LINUX-32-STATIC:       # %bb.0: # %entry
2673; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2674; LINUX-32-STATIC-NEXT:    movl dsrc(,%eax,4), %ecx
2675; LINUX-32-STATIC-NEXT:    movl %ecx, ddst(,%eax,4)
2676; LINUX-32-STATIC-NEXT:    retl
2677;
2678; LINUX-32-PIC-LABEL: ind03:
2679; LINUX-32-PIC:       # %bb.0: # %entry
2680; LINUX-32-PIC-NEXT:    calll .L30$pb
2681; LINUX-32-PIC-NEXT:  .L30$pb:
2682; LINUX-32-PIC-NEXT:    popl %eax
2683; LINUX-32-PIC-NEXT:  .Ltmp30:
2684; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp30-.L30$pb), %eax
2685; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2686; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
2687; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2688; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
2689; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2690; LINUX-32-PIC-NEXT:    retl
2691;
2692; LINUX-64-PIC-LABEL: ind03:
2693; LINUX-64-PIC:       # %bb.0: # %entry
2694; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
2695; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2696; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
2697; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2698; LINUX-64-PIC-NEXT:    retq
2699;
2700; DARWIN-32-STATIC-LABEL: ind03:
2701; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2702; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2703; DARWIN-32-STATIC-NEXT:    movl _dsrc(,%eax,4), %ecx
2704; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst(,%eax,4)
2705; DARWIN-32-STATIC-NEXT:    retl
2706;
2707; DARWIN-32-DYNAMIC-LABEL: ind03:
2708; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2709; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2710; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc(,%eax,4), %ecx
2711; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst(,%eax,4)
2712; DARWIN-32-DYNAMIC-NEXT:    retl
2713;
2714; DARWIN-32-PIC-LABEL: ind03:
2715; DARWIN-32-PIC:       ## %bb.0: ## %entry
2716; DARWIN-32-PIC-NEXT:    calll L30$pb
2717; DARWIN-32-PIC-NEXT:  L30$pb:
2718; DARWIN-32-PIC-NEXT:    popl %eax
2719; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2720; DARWIN-32-PIC-NEXT:    movl _dsrc-L30$pb(%eax,%ecx,4), %edx
2721; DARWIN-32-PIC-NEXT:    movl %edx, _ddst-L30$pb(%eax,%ecx,4)
2722; DARWIN-32-PIC-NEXT:    retl
2723;
2724; DARWIN-64-STATIC-LABEL: ind03:
2725; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2726; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
2727; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2728; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
2729; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2730; DARWIN-64-STATIC-NEXT:    retq
2731;
2732; DARWIN-64-DYNAMIC-LABEL: ind03:
2733; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2734; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
2735; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2736; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
2737; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2738; DARWIN-64-DYNAMIC-NEXT:    retq
2739;
2740; DARWIN-64-PIC-LABEL: ind03:
2741; DARWIN-64-PIC:       ## %bb.0: ## %entry
2742; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
2743; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2744; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
2745; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2746; DARWIN-64-PIC-NEXT:    retq
2747
2748entry:
2749	%0 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
2750	%1 = load i32, i32* %0, align 4
2751	%2 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
2752	store i32 %1, i32* %2, align 4
2753	ret void
2754}
2755
2756define void @ind04(i64 %i) nounwind {
2757; LINUX-64-STATIC-LABEL: ind04:
2758; LINUX-64-STATIC:       # %bb.0: # %entry
2759; LINUX-64-STATIC-NEXT:    leaq ddst(,%rdi,4), %rax
2760; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
2761; LINUX-64-STATIC-NEXT:    retq
2762;
2763; LINUX-32-STATIC-LABEL: ind04:
2764; LINUX-32-STATIC:       # %bb.0: # %entry
2765; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2766; LINUX-32-STATIC-NEXT:    leal ddst(,%eax,4), %eax
2767; LINUX-32-STATIC-NEXT:    movl %eax, dptr
2768; LINUX-32-STATIC-NEXT:    retl
2769;
2770; LINUX-32-PIC-LABEL: ind04:
2771; LINUX-32-PIC:       # %bb.0: # %entry
2772; LINUX-32-PIC-NEXT:    calll .L31$pb
2773; LINUX-32-PIC-NEXT:  .L31$pb:
2774; LINUX-32-PIC-NEXT:    popl %eax
2775; LINUX-32-PIC-NEXT:  .Ltmp31:
2776; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp31-.L31$pb), %eax
2777; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2778; LINUX-32-PIC-NEXT:    shll $2, %ecx
2779; LINUX-32-PIC-NEXT:    addl ddst@GOT(%eax), %ecx
2780; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
2781; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
2782; LINUX-32-PIC-NEXT:    retl
2783;
2784; LINUX-64-PIC-LABEL: ind04:
2785; LINUX-64-PIC:       # %bb.0: # %entry
2786; LINUX-64-PIC-NEXT:    shlq $2, %rdi
2787; LINUX-64-PIC-NEXT:    addq ddst@GOTPCREL(%rip), %rdi
2788; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
2789; LINUX-64-PIC-NEXT:    movq %rdi, (%rax)
2790; LINUX-64-PIC-NEXT:    retq
2791;
2792; DARWIN-32-STATIC-LABEL: ind04:
2793; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2794; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2795; DARWIN-32-STATIC-NEXT:    leal _ddst(,%eax,4), %eax
2796; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
2797; DARWIN-32-STATIC-NEXT:    retl
2798;
2799; DARWIN-32-DYNAMIC-LABEL: ind04:
2800; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2801; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2802; DARWIN-32-DYNAMIC-NEXT:    leal _ddst(,%eax,4), %eax
2803; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
2804; DARWIN-32-DYNAMIC-NEXT:    retl
2805;
2806; DARWIN-32-PIC-LABEL: ind04:
2807; DARWIN-32-PIC:       ## %bb.0: ## %entry
2808; DARWIN-32-PIC-NEXT:    calll L31$pb
2809; DARWIN-32-PIC-NEXT:  L31$pb:
2810; DARWIN-32-PIC-NEXT:    popl %eax
2811; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2812; DARWIN-32-PIC-NEXT:    leal _ddst-L31$pb(%eax,%ecx,4), %ecx
2813; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L31$pb(%eax)
2814; DARWIN-32-PIC-NEXT:    retl
2815;
2816; DARWIN-64-STATIC-LABEL: ind04:
2817; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2818; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
2819; DARWIN-64-STATIC-NEXT:    leaq (%rax,%rdi,4), %rax
2820; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
2821; DARWIN-64-STATIC-NEXT:    retq
2822;
2823; DARWIN-64-DYNAMIC-LABEL: ind04:
2824; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2825; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
2826; DARWIN-64-DYNAMIC-NEXT:    leaq (%rax,%rdi,4), %rax
2827; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
2828; DARWIN-64-DYNAMIC-NEXT:    retq
2829;
2830; DARWIN-64-PIC-LABEL: ind04:
2831; DARWIN-64-PIC:       ## %bb.0: ## %entry
2832; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
2833; DARWIN-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
2834; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
2835; DARWIN-64-PIC-NEXT:    retq
2836
2837entry:
2838	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
2839	store i32* %0, i32** @dptr, align 8
2840	ret void
2841}
2842
2843define void @ind05(i64 %i) nounwind {
2844; LINUX-64-STATIC-LABEL: ind05:
2845; LINUX-64-STATIC:       # %bb.0: # %entry
2846; LINUX-64-STATIC-NEXT:    movl dsrc(,%rdi,4), %eax
2847; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
2848; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2849; LINUX-64-STATIC-NEXT:    retq
2850;
2851; LINUX-32-STATIC-LABEL: ind05:
2852; LINUX-32-STATIC:       # %bb.0: # %entry
2853; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2854; LINUX-32-STATIC-NEXT:    movl dsrc(,%eax,4), %ecx
2855; LINUX-32-STATIC-NEXT:    movl dptr, %edx
2856; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2857; LINUX-32-STATIC-NEXT:    retl
2858;
2859; LINUX-32-PIC-LABEL: ind05:
2860; LINUX-32-PIC:       # %bb.0: # %entry
2861; LINUX-32-PIC-NEXT:    calll .L32$pb
2862; LINUX-32-PIC-NEXT:  .L32$pb:
2863; LINUX-32-PIC-NEXT:    popl %eax
2864; LINUX-32-PIC-NEXT:  .Ltmp32:
2865; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp32-.L32$pb), %eax
2866; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2867; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
2868; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2869; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
2870; LINUX-32-PIC-NEXT:    movl (%eax), %eax
2871; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2872; LINUX-32-PIC-NEXT:    retl
2873;
2874; LINUX-64-PIC-LABEL: ind05:
2875; LINUX-64-PIC:       # %bb.0: # %entry
2876; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
2877; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2878; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
2879; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
2880; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2881; LINUX-64-PIC-NEXT:    retq
2882;
2883; DARWIN-32-STATIC-LABEL: ind05:
2884; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2885; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2886; DARWIN-32-STATIC-NEXT:    movl _dsrc(,%eax,4), %ecx
2887; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
2888; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2889; DARWIN-32-STATIC-NEXT:    retl
2890;
2891; DARWIN-32-DYNAMIC-LABEL: ind05:
2892; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2893; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2894; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc(,%eax,4), %ecx
2895; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
2896; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2897; DARWIN-32-DYNAMIC-NEXT:    retl
2898;
2899; DARWIN-32-PIC-LABEL: ind05:
2900; DARWIN-32-PIC:       ## %bb.0: ## %entry
2901; DARWIN-32-PIC-NEXT:    calll L32$pb
2902; DARWIN-32-PIC-NEXT:  L32$pb:
2903; DARWIN-32-PIC-NEXT:    popl %eax
2904; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2905; DARWIN-32-PIC-NEXT:    movl _dsrc-L32$pb(%eax,%ecx,4), %edx
2906; DARWIN-32-PIC-NEXT:    movl _dptr-L32$pb(%eax), %eax
2907; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2908; DARWIN-32-PIC-NEXT:    retl
2909;
2910; DARWIN-64-STATIC-LABEL: ind05:
2911; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2912; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
2913; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2914; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
2915; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2916; DARWIN-64-STATIC-NEXT:    retq
2917;
2918; DARWIN-64-DYNAMIC-LABEL: ind05:
2919; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2920; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
2921; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2922; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
2923; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2924; DARWIN-64-DYNAMIC-NEXT:    retq
2925;
2926; DARWIN-64-PIC-LABEL: ind05:
2927; DARWIN-64-PIC:       ## %bb.0: ## %entry
2928; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
2929; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2930; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
2931; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2932; DARWIN-64-PIC-NEXT:    retq
2933
2934entry:
2935	%0 = load i32*, i32** @dptr, align 8
2936	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
2937	%2 = load i32, i32* %1, align 4
2938	%3 = getelementptr i32, i32* %0, i64 %i
2939	store i32 %2, i32* %3, align 4
2940	ret void
2941}
2942
2943define void @ind06(i64 %i) nounwind {
2944; LINUX-64-STATIC-LABEL: ind06:
2945; LINUX-64-STATIC:       # %bb.0: # %entry
2946; LINUX-64-STATIC-NEXT:    movl lsrc(,%rdi,4), %eax
2947; LINUX-64-STATIC-NEXT:    movl %eax, ldst(,%rdi,4)
2948; LINUX-64-STATIC-NEXT:    retq
2949;
2950; LINUX-32-STATIC-LABEL: ind06:
2951; LINUX-32-STATIC:       # %bb.0: # %entry
2952; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2953; LINUX-32-STATIC-NEXT:    movl lsrc(,%eax,4), %ecx
2954; LINUX-32-STATIC-NEXT:    movl %ecx, ldst(,%eax,4)
2955; LINUX-32-STATIC-NEXT:    retl
2956;
2957; LINUX-32-PIC-LABEL: ind06:
2958; LINUX-32-PIC:       # %bb.0: # %entry
2959; LINUX-32-PIC-NEXT:    calll .L33$pb
2960; LINUX-32-PIC-NEXT:  .L33$pb:
2961; LINUX-32-PIC-NEXT:    popl %eax
2962; LINUX-32-PIC-NEXT:  .Ltmp33:
2963; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp33-.L33$pb), %eax
2964; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2965; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax,%ecx,4), %edx
2966; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF(%eax,%ecx,4)
2967; LINUX-32-PIC-NEXT:    retl
2968;
2969; LINUX-64-PIC-LABEL: ind06:
2970; LINUX-64-PIC:       # %bb.0: # %entry
2971; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
2972; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2973; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
2974; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2975; LINUX-64-PIC-NEXT:    retq
2976;
2977; DARWIN-32-STATIC-LABEL: ind06:
2978; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2979; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2980; DARWIN-32-STATIC-NEXT:    movl _lsrc(,%eax,4), %ecx
2981; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst(,%eax,4)
2982; DARWIN-32-STATIC-NEXT:    retl
2983;
2984; DARWIN-32-DYNAMIC-LABEL: ind06:
2985; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2986; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2987; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc(,%eax,4), %ecx
2988; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst(,%eax,4)
2989; DARWIN-32-DYNAMIC-NEXT:    retl
2990;
2991; DARWIN-32-PIC-LABEL: ind06:
2992; DARWIN-32-PIC:       ## %bb.0: ## %entry
2993; DARWIN-32-PIC-NEXT:    calll L33$pb
2994; DARWIN-32-PIC-NEXT:  L33$pb:
2995; DARWIN-32-PIC-NEXT:    popl %eax
2996; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2997; DARWIN-32-PIC-NEXT:    movl _lsrc-L33$pb(%eax,%ecx,4), %edx
2998; DARWIN-32-PIC-NEXT:    movl %edx, _ldst-L33$pb(%eax,%ecx,4)
2999; DARWIN-32-PIC-NEXT:    retl
3000;
3001; DARWIN-64-STATIC-LABEL: ind06:
3002; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3003; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
3004; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
3005; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
3006; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3007; DARWIN-64-STATIC-NEXT:    retq
3008;
3009; DARWIN-64-DYNAMIC-LABEL: ind06:
3010; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3011; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
3012; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
3013; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
3014; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3015; DARWIN-64-DYNAMIC-NEXT:    retq
3016;
3017; DARWIN-64-PIC-LABEL: ind06:
3018; DARWIN-64-PIC:       ## %bb.0: ## %entry
3019; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
3020; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
3021; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
3022; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3023; DARWIN-64-PIC-NEXT:    retq
3024
3025entry:
3026	%0 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
3027	%1 = load i32, i32* %0, align 4
3028	%2 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
3029	store i32 %1, i32* %2, align 4
3030	ret void
3031}
3032
3033define void @ind07(i64 %i) nounwind {
3034; LINUX-64-STATIC-LABEL: ind07:
3035; LINUX-64-STATIC:       # %bb.0: # %entry
3036; LINUX-64-STATIC-NEXT:    leaq ldst(,%rdi,4), %rax
3037; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
3038; LINUX-64-STATIC-NEXT:    retq
3039;
3040; LINUX-32-STATIC-LABEL: ind07:
3041; LINUX-32-STATIC:       # %bb.0: # %entry
3042; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3043; LINUX-32-STATIC-NEXT:    leal ldst(,%eax,4), %eax
3044; LINUX-32-STATIC-NEXT:    movl %eax, lptr
3045; LINUX-32-STATIC-NEXT:    retl
3046;
3047; LINUX-32-PIC-LABEL: ind07:
3048; LINUX-32-PIC:       # %bb.0: # %entry
3049; LINUX-32-PIC-NEXT:    calll .L34$pb
3050; LINUX-32-PIC-NEXT:  .L34$pb:
3051; LINUX-32-PIC-NEXT:    popl %eax
3052; LINUX-32-PIC-NEXT:  .Ltmp34:
3053; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp34-.L34$pb), %eax
3054; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3055; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax,%ecx,4), %ecx
3056; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
3057; LINUX-32-PIC-NEXT:    retl
3058;
3059; LINUX-64-PIC-LABEL: ind07:
3060; LINUX-64-PIC:       # %bb.0: # %entry
3061; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
3062; LINUX-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
3063; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
3064; LINUX-64-PIC-NEXT:    retq
3065;
3066; DARWIN-32-STATIC-LABEL: ind07:
3067; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3068; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3069; DARWIN-32-STATIC-NEXT:    leal _ldst(,%eax,4), %eax
3070; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
3071; DARWIN-32-STATIC-NEXT:    retl
3072;
3073; DARWIN-32-DYNAMIC-LABEL: ind07:
3074; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3075; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3076; DARWIN-32-DYNAMIC-NEXT:    leal _ldst(,%eax,4), %eax
3077; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
3078; DARWIN-32-DYNAMIC-NEXT:    retl
3079;
3080; DARWIN-32-PIC-LABEL: ind07:
3081; DARWIN-32-PIC:       ## %bb.0: ## %entry
3082; DARWIN-32-PIC-NEXT:    calll L34$pb
3083; DARWIN-32-PIC-NEXT:  L34$pb:
3084; DARWIN-32-PIC-NEXT:    popl %eax
3085; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3086; DARWIN-32-PIC-NEXT:    leal _ldst-L34$pb(%eax,%ecx,4), %ecx
3087; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L34$pb(%eax)
3088; DARWIN-32-PIC-NEXT:    retl
3089;
3090; DARWIN-64-STATIC-LABEL: ind07:
3091; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3092; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
3093; DARWIN-64-STATIC-NEXT:    leaq (%rax,%rdi,4), %rax
3094; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
3095; DARWIN-64-STATIC-NEXT:    retq
3096;
3097; DARWIN-64-DYNAMIC-LABEL: ind07:
3098; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3099; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
3100; DARWIN-64-DYNAMIC-NEXT:    leaq (%rax,%rdi,4), %rax
3101; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
3102; DARWIN-64-DYNAMIC-NEXT:    retq
3103;
3104; DARWIN-64-PIC-LABEL: ind07:
3105; DARWIN-64-PIC:       ## %bb.0: ## %entry
3106; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
3107; DARWIN-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
3108; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
3109; DARWIN-64-PIC-NEXT:    retq
3110
3111entry:
3112	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
3113	store i32* %0, i32** @lptr, align 8
3114	ret void
3115}
3116
3117define void @ind08(i64 %i) nounwind {
3118; LINUX-64-STATIC-LABEL: ind08:
3119; LINUX-64-STATIC:       # %bb.0: # %entry
3120; LINUX-64-STATIC-NEXT:    movl lsrc(,%rdi,4), %eax
3121; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
3122; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3123; LINUX-64-STATIC-NEXT:    retq
3124;
3125; LINUX-32-STATIC-LABEL: ind08:
3126; LINUX-32-STATIC:       # %bb.0: # %entry
3127; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3128; LINUX-32-STATIC-NEXT:    movl lsrc(,%eax,4), %ecx
3129; LINUX-32-STATIC-NEXT:    movl lptr, %edx
3130; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
3131; LINUX-32-STATIC-NEXT:    retl
3132;
3133; LINUX-32-PIC-LABEL: ind08:
3134; LINUX-32-PIC:       # %bb.0: # %entry
3135; LINUX-32-PIC-NEXT:    calll .L35$pb
3136; LINUX-32-PIC-NEXT:  .L35$pb:
3137; LINUX-32-PIC-NEXT:    popl %eax
3138; LINUX-32-PIC-NEXT:  .Ltmp35:
3139; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp35-.L35$pb), %eax
3140; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3141; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax,%ecx,4), %edx
3142; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
3143; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
3144; LINUX-32-PIC-NEXT:    retl
3145;
3146; LINUX-64-PIC-LABEL: ind08:
3147; LINUX-64-PIC:       # %bb.0: # %entry
3148; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
3149; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
3150; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
3151; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3152; LINUX-64-PIC-NEXT:    retq
3153;
3154; DARWIN-32-STATIC-LABEL: ind08:
3155; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3156; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3157; DARWIN-32-STATIC-NEXT:    movl _lsrc(,%eax,4), %ecx
3158; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
3159; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
3160; DARWIN-32-STATIC-NEXT:    retl
3161;
3162; DARWIN-32-DYNAMIC-LABEL: ind08:
3163; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3164; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3165; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc(,%eax,4), %ecx
3166; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
3167; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
3168; DARWIN-32-DYNAMIC-NEXT:    retl
3169;
3170; DARWIN-32-PIC-LABEL: ind08:
3171; DARWIN-32-PIC:       ## %bb.0: ## %entry
3172; DARWIN-32-PIC-NEXT:    calll L35$pb
3173; DARWIN-32-PIC-NEXT:  L35$pb:
3174; DARWIN-32-PIC-NEXT:    popl %eax
3175; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3176; DARWIN-32-PIC-NEXT:    movl _lsrc-L35$pb(%eax,%ecx,4), %edx
3177; DARWIN-32-PIC-NEXT:    movl _lptr-L35$pb(%eax), %eax
3178; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
3179; DARWIN-32-PIC-NEXT:    retl
3180;
3181; DARWIN-64-STATIC-LABEL: ind08:
3182; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3183; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
3184; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
3185; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
3186; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3187; DARWIN-64-STATIC-NEXT:    retq
3188;
3189; DARWIN-64-DYNAMIC-LABEL: ind08:
3190; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3191; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
3192; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
3193; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
3194; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3195; DARWIN-64-DYNAMIC-NEXT:    retq
3196;
3197; DARWIN-64-PIC-LABEL: ind08:
3198; DARWIN-64-PIC:       ## %bb.0: ## %entry
3199; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
3200; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
3201; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
3202; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3203; DARWIN-64-PIC-NEXT:    retq
3204
3205entry:
3206	%0 = load i32*, i32** @lptr, align 8
3207	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
3208	%2 = load i32, i32* %1, align 4
3209	%3 = getelementptr i32, i32* %0, i64 %i
3210	store i32 %2, i32* %3, align 4
3211	ret void
3212}
3213
3214define void @off00(i64 %i) nounwind {
3215; LINUX-64-STATIC-LABEL: off00:
3216; LINUX-64-STATIC:       # %bb.0: # %entry
3217; LINUX-64-STATIC-NEXT:    movl src+64(,%rdi,4), %eax
3218; LINUX-64-STATIC-NEXT:    movl %eax, dst+64(,%rdi,4)
3219; LINUX-64-STATIC-NEXT:    retq
3220;
3221; LINUX-32-STATIC-LABEL: off00:
3222; LINUX-32-STATIC:       # %bb.0: # %entry
3223; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3224; LINUX-32-STATIC-NEXT:    movl src+64(,%eax,4), %ecx
3225; LINUX-32-STATIC-NEXT:    movl %ecx, dst+64(,%eax,4)
3226; LINUX-32-STATIC-NEXT:    retl
3227;
3228; LINUX-32-PIC-LABEL: off00:
3229; LINUX-32-PIC:       # %bb.0: # %entry
3230; LINUX-32-PIC-NEXT:    calll .L36$pb
3231; LINUX-32-PIC-NEXT:  .L36$pb:
3232; LINUX-32-PIC-NEXT:    popl %eax
3233; LINUX-32-PIC-NEXT:  .Ltmp36:
3234; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp36-.L36$pb), %eax
3235; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3236; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
3237; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3238; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
3239; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3240; LINUX-32-PIC-NEXT:    retl
3241;
3242; LINUX-64-PIC-LABEL: off00:
3243; LINUX-64-PIC:       # %bb.0: # %entry
3244; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
3245; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3246; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
3247; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3248; LINUX-64-PIC-NEXT:    retq
3249;
3250; DARWIN-32-STATIC-LABEL: off00:
3251; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3252; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3253; DARWIN-32-STATIC-NEXT:    movl _src+64(,%eax,4), %ecx
3254; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst+64(,%eax,4)
3255; DARWIN-32-STATIC-NEXT:    retl
3256;
3257; DARWIN-32-DYNAMIC-LABEL: off00:
3258; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3259; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3260; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
3261; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
3262; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
3263; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3264; DARWIN-32-DYNAMIC-NEXT:    retl
3265;
3266; DARWIN-32-PIC-LABEL: off00:
3267; DARWIN-32-PIC:       ## %bb.0: ## %entry
3268; DARWIN-32-PIC-NEXT:    calll L36$pb
3269; DARWIN-32-PIC-NEXT:  L36$pb:
3270; DARWIN-32-PIC-NEXT:    popl %eax
3271; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3272; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L36$pb(%eax), %edx
3273; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3274; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L36$pb(%eax), %eax
3275; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3276; DARWIN-32-PIC-NEXT:    retl
3277;
3278; DARWIN-64-STATIC-LABEL: off00:
3279; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3280; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3281; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3282; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
3283; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3284; DARWIN-64-STATIC-NEXT:    retq
3285;
3286; DARWIN-64-DYNAMIC-LABEL: off00:
3287; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3288; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3289; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3290; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
3291; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3292; DARWIN-64-DYNAMIC-NEXT:    retq
3293;
3294; DARWIN-64-PIC-LABEL: off00:
3295; DARWIN-64-PIC:       ## %bb.0: ## %entry
3296; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3297; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3298; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
3299; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3300; DARWIN-64-PIC-NEXT:    retq
3301
3302entry:
3303	%0 = add i64 %i, 16
3304	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
3305	%2 = load i32, i32* %1, align 4
3306	%3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
3307	store i32 %2, i32* %3, align 4
3308	ret void
3309}
3310
3311define void @oxf00(i64 %i) nounwind {
3312; LINUX-64-STATIC-LABEL: oxf00:
3313; LINUX-64-STATIC:       # %bb.0: # %entry
3314; LINUX-64-STATIC-NEXT:    movl xsrc+64(,%rdi,4), %eax
3315; LINUX-64-STATIC-NEXT:    movl %eax, xdst+64(,%rdi,4)
3316; LINUX-64-STATIC-NEXT:    retq
3317;
3318; LINUX-32-STATIC-LABEL: oxf00:
3319; LINUX-32-STATIC:       # %bb.0: # %entry
3320; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3321; LINUX-32-STATIC-NEXT:    movl xsrc+64(,%eax,4), %ecx
3322; LINUX-32-STATIC-NEXT:    movl %ecx, xdst+64(,%eax,4)
3323; LINUX-32-STATIC-NEXT:    retl
3324;
3325; LINUX-32-PIC-LABEL: oxf00:
3326; LINUX-32-PIC:       # %bb.0: # %entry
3327; LINUX-32-PIC-NEXT:    calll .L37$pb
3328; LINUX-32-PIC-NEXT:  .L37$pb:
3329; LINUX-32-PIC-NEXT:    popl %eax
3330; LINUX-32-PIC-NEXT:  .Ltmp37:
3331; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp37-.L37$pb), %eax
3332; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3333; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
3334; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3335; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
3336; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3337; LINUX-32-PIC-NEXT:    retl
3338;
3339; LINUX-64-PIC-LABEL: oxf00:
3340; LINUX-64-PIC:       # %bb.0: # %entry
3341; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
3342; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3343; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
3344; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3345; LINUX-64-PIC-NEXT:    retq
3346;
3347; DARWIN-32-STATIC-LABEL: oxf00:
3348; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3349; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3350; DARWIN-32-STATIC-NEXT:    movl _xsrc+64(,%eax,4), %ecx
3351; DARWIN-32-STATIC-NEXT:    movl %ecx, _xdst+64(,%eax,4)
3352; DARWIN-32-STATIC-NEXT:    retl
3353;
3354; DARWIN-32-DYNAMIC-LABEL: oxf00:
3355; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3356; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3357; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
3358; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
3359; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %edx
3360; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3361; DARWIN-32-DYNAMIC-NEXT:    retl
3362;
3363; DARWIN-32-PIC-LABEL: oxf00:
3364; DARWIN-32-PIC:       ## %bb.0: ## %entry
3365; DARWIN-32-PIC-NEXT:    calll L37$pb
3366; DARWIN-32-PIC-NEXT:  L37$pb:
3367; DARWIN-32-PIC-NEXT:    popl %eax
3368; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3369; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L37$pb(%eax), %edx
3370; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3371; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L37$pb(%eax), %eax
3372; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3373; DARWIN-32-PIC-NEXT:    retl
3374;
3375; DARWIN-64-STATIC-LABEL: oxf00:
3376; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3377; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3378; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3379; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
3380; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3381; DARWIN-64-STATIC-NEXT:    retq
3382;
3383; DARWIN-64-DYNAMIC-LABEL: oxf00:
3384; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3385; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3386; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3387; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
3388; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3389; DARWIN-64-DYNAMIC-NEXT:    retq
3390;
3391; DARWIN-64-PIC-LABEL: oxf00:
3392; DARWIN-64-PIC:       ## %bb.0: ## %entry
3393; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3394; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3395; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
3396; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3397; DARWIN-64-PIC-NEXT:    retq
3398
3399entry:
3400	%0 = add i64 %i, 16
3401	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
3402	%2 = load i32, i32* %1, align 4
3403	%3 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
3404	store i32 %2, i32* %3, align 4
3405	ret void
3406}
3407
3408define void @off01(i64 %i) nounwind {
3409; LINUX-64-STATIC-LABEL: off01:
3410; LINUX-64-STATIC:       # %bb.0: # %entry
3411; LINUX-64-STATIC-NEXT:    leaq dst+64(,%rdi,4), %rax
3412; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
3413; LINUX-64-STATIC-NEXT:    retq
3414;
3415; LINUX-32-STATIC-LABEL: off01:
3416; LINUX-32-STATIC:       # %bb.0: # %entry
3417; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3418; LINUX-32-STATIC-NEXT:    leal dst+64(,%eax,4), %eax
3419; LINUX-32-STATIC-NEXT:    movl %eax, ptr
3420; LINUX-32-STATIC-NEXT:    retl
3421;
3422; LINUX-32-PIC-LABEL: off01:
3423; LINUX-32-PIC:       # %bb.0: # %entry
3424; LINUX-32-PIC-NEXT:    calll .L38$pb
3425; LINUX-32-PIC-NEXT:  .L38$pb:
3426; LINUX-32-PIC-NEXT:    popl %eax
3427; LINUX-32-PIC-NEXT:  .Ltmp38:
3428; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp38-.L38$pb), %eax
3429; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3430; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %edx
3431; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3432; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
3433; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
3434; LINUX-32-PIC-NEXT:    retl
3435;
3436; LINUX-64-PIC-LABEL: off01:
3437; LINUX-64-PIC:       # %bb.0: # %entry
3438; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
3439; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3440; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3441; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
3442; LINUX-64-PIC-NEXT:    retq
3443;
3444; DARWIN-32-STATIC-LABEL: off01:
3445; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3446; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3447; DARWIN-32-STATIC-NEXT:    leal _dst+64(,%eax,4), %eax
3448; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
3449; DARWIN-32-STATIC-NEXT:    retl
3450;
3451; DARWIN-32-DYNAMIC-LABEL: off01:
3452; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3453; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3454; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
3455; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
3456; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
3457; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
3458; DARWIN-32-DYNAMIC-NEXT:    retl
3459;
3460; DARWIN-32-PIC-LABEL: off01:
3461; DARWIN-32-PIC:       ## %bb.0: ## %entry
3462; DARWIN-32-PIC-NEXT:    calll L38$pb
3463; DARWIN-32-PIC-NEXT:  L38$pb:
3464; DARWIN-32-PIC-NEXT:    popl %eax
3465; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3466; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L38$pb(%eax), %edx
3467; DARWIN-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3468; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L38$pb(%eax), %eax
3469; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
3470; DARWIN-32-PIC-NEXT:    retl
3471;
3472; DARWIN-64-STATIC-LABEL: off01:
3473; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3474; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
3475; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3476; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3477; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
3478; DARWIN-64-STATIC-NEXT:    retq
3479;
3480; DARWIN-64-DYNAMIC-LABEL: off01:
3481; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3482; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
3483; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3484; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3485; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
3486; DARWIN-64-DYNAMIC-NEXT:    retq
3487;
3488; DARWIN-64-PIC-LABEL: off01:
3489; DARWIN-64-PIC:       ## %bb.0: ## %entry
3490; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
3491; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3492; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3493; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
3494; DARWIN-64-PIC-NEXT:    retq
3495
3496entry:
3497	%.sum = add i64 %i, 16
3498	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
3499	store i32* %0, i32** @ptr, align 8
3500	ret void
3501}
3502
3503define void @oxf01(i64 %i) nounwind {
3504; LINUX-64-STATIC-LABEL: oxf01:
3505; LINUX-64-STATIC:       # %bb.0: # %entry
3506; LINUX-64-STATIC-NEXT:    leaq xdst+64(,%rdi,4), %rax
3507; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
3508; LINUX-64-STATIC-NEXT:    retq
3509;
3510; LINUX-32-STATIC-LABEL: oxf01:
3511; LINUX-32-STATIC:       # %bb.0: # %entry
3512; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3513; LINUX-32-STATIC-NEXT:    leal xdst+64(,%eax,4), %eax
3514; LINUX-32-STATIC-NEXT:    movl %eax, ptr
3515; LINUX-32-STATIC-NEXT:    retl
3516;
3517; LINUX-32-PIC-LABEL: oxf01:
3518; LINUX-32-PIC:       # %bb.0: # %entry
3519; LINUX-32-PIC-NEXT:    calll .L39$pb
3520; LINUX-32-PIC-NEXT:  .L39$pb:
3521; LINUX-32-PIC-NEXT:    popl %eax
3522; LINUX-32-PIC-NEXT:  .Ltmp39:
3523; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp39-.L39$pb), %eax
3524; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3525; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %edx
3526; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3527; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
3528; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
3529; LINUX-32-PIC-NEXT:    retl
3530;
3531; LINUX-64-PIC-LABEL: oxf01:
3532; LINUX-64-PIC:       # %bb.0: # %entry
3533; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
3534; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3535; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3536; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
3537; LINUX-64-PIC-NEXT:    retq
3538;
3539; DARWIN-32-STATIC-LABEL: oxf01:
3540; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3541; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3542; DARWIN-32-STATIC-NEXT:    leal _xdst+64(,%eax,4), %eax
3543; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
3544; DARWIN-32-STATIC-NEXT:    retl
3545;
3546; DARWIN-32-DYNAMIC-LABEL: oxf01:
3547; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3548; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3549; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
3550; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
3551; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
3552; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
3553; DARWIN-32-DYNAMIC-NEXT:    retl
3554;
3555; DARWIN-32-PIC-LABEL: oxf01:
3556; DARWIN-32-PIC:       ## %bb.0: ## %entry
3557; DARWIN-32-PIC-NEXT:    calll L39$pb
3558; DARWIN-32-PIC-NEXT:  L39$pb:
3559; DARWIN-32-PIC-NEXT:    popl %eax
3560; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3561; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L39$pb(%eax), %edx
3562; DARWIN-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3563; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L39$pb(%eax), %eax
3564; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
3565; DARWIN-32-PIC-NEXT:    retl
3566;
3567; DARWIN-64-STATIC-LABEL: oxf01:
3568; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3569; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
3570; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3571; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3572; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
3573; DARWIN-64-STATIC-NEXT:    retq
3574;
3575; DARWIN-64-DYNAMIC-LABEL: oxf01:
3576; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3577; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
3578; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3579; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3580; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
3581; DARWIN-64-DYNAMIC-NEXT:    retq
3582;
3583; DARWIN-64-PIC-LABEL: oxf01:
3584; DARWIN-64-PIC:       ## %bb.0: ## %entry
3585; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
3586; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3587; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3588; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
3589; DARWIN-64-PIC-NEXT:    retq
3590
3591entry:
3592	%.sum = add i64 %i, 16
3593	%0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %.sum
3594	store i32* %0, i32** @ptr, align 8
3595	ret void
3596}
3597
3598define void @off02(i64 %i) nounwind {
3599; LINUX-64-STATIC-LABEL: off02:
3600; LINUX-64-STATIC:       # %bb.0: # %entry
3601; LINUX-64-STATIC-NEXT:    movl src+64(,%rdi,4), %eax
3602; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
3603; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3604; LINUX-64-STATIC-NEXT:    retq
3605;
3606; LINUX-32-STATIC-LABEL: off02:
3607; LINUX-32-STATIC:       # %bb.0: # %entry
3608; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3609; LINUX-32-STATIC-NEXT:    movl src+64(,%eax,4), %ecx
3610; LINUX-32-STATIC-NEXT:    movl ptr, %edx
3611; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3612; LINUX-32-STATIC-NEXT:    retl
3613;
3614; LINUX-32-PIC-LABEL: off02:
3615; LINUX-32-PIC:       # %bb.0: # %entry
3616; LINUX-32-PIC-NEXT:    calll .L40$pb
3617; LINUX-32-PIC-NEXT:  .L40$pb:
3618; LINUX-32-PIC-NEXT:    popl %eax
3619; LINUX-32-PIC-NEXT:  .Ltmp40:
3620; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp40-.L40$pb), %eax
3621; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3622; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
3623; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3624; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
3625; LINUX-32-PIC-NEXT:    movl (%eax), %eax
3626; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3627; LINUX-32-PIC-NEXT:    retl
3628;
3629; LINUX-64-PIC-LABEL: off02:
3630; LINUX-64-PIC:       # %bb.0: # %entry
3631; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
3632; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3633; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3634; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
3635; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3636; LINUX-64-PIC-NEXT:    retq
3637;
3638; DARWIN-32-STATIC-LABEL: off02:
3639; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3640; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3641; DARWIN-32-STATIC-NEXT:    movl _src+64(,%eax,4), %ecx
3642; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
3643; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3644; DARWIN-32-STATIC-NEXT:    retl
3645;
3646; DARWIN-32-DYNAMIC-LABEL: off02:
3647; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3648; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3649; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
3650; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
3651; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
3652; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
3653; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3654; DARWIN-32-DYNAMIC-NEXT:    retl
3655;
3656; DARWIN-32-PIC-LABEL: off02:
3657; DARWIN-32-PIC:       ## %bb.0: ## %entry
3658; DARWIN-32-PIC-NEXT:    calll L40$pb
3659; DARWIN-32-PIC-NEXT:  L40$pb:
3660; DARWIN-32-PIC-NEXT:    popl %eax
3661; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3662; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L40$pb(%eax), %edx
3663; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3664; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L40$pb(%eax), %eax
3665; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
3666; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3667; DARWIN-32-PIC-NEXT:    retl
3668;
3669; DARWIN-64-STATIC-LABEL: off02:
3670; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3671; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3672; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3673; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3674; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
3675; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3676; DARWIN-64-STATIC-NEXT:    retq
3677;
3678; DARWIN-64-DYNAMIC-LABEL: off02:
3679; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3680; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3681; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3682; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3683; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
3684; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3685; DARWIN-64-DYNAMIC-NEXT:    retq
3686;
3687; DARWIN-64-PIC-LABEL: off02:
3688; DARWIN-64-PIC:       ## %bb.0: ## %entry
3689; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3690; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3691; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3692; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
3693; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3694; DARWIN-64-PIC-NEXT:    retq
3695
3696entry:
3697	%0 = load i32*, i32** @ptr, align 8
3698	%1 = add i64 %i, 16
3699	%2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
3700	%3 = load i32, i32* %2, align 4
3701	%4 = getelementptr i32, i32* %0, i64 %1
3702	store i32 %3, i32* %4, align 4
3703	ret void
3704}
3705
3706define void @oxf02(i64 %i) nounwind {
3707; LINUX-64-STATIC-LABEL: oxf02:
3708; LINUX-64-STATIC:       # %bb.0: # %entry
3709; LINUX-64-STATIC-NEXT:    movl xsrc+64(,%rdi,4), %eax
3710; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
3711; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3712; LINUX-64-STATIC-NEXT:    retq
3713;
3714; LINUX-32-STATIC-LABEL: oxf02:
3715; LINUX-32-STATIC:       # %bb.0: # %entry
3716; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3717; LINUX-32-STATIC-NEXT:    movl xsrc+64(,%eax,4), %ecx
3718; LINUX-32-STATIC-NEXT:    movl ptr, %edx
3719; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3720; LINUX-32-STATIC-NEXT:    retl
3721;
3722; LINUX-32-PIC-LABEL: oxf02:
3723; LINUX-32-PIC:       # %bb.0: # %entry
3724; LINUX-32-PIC-NEXT:    calll .L41$pb
3725; LINUX-32-PIC-NEXT:  .L41$pb:
3726; LINUX-32-PIC-NEXT:    popl %eax
3727; LINUX-32-PIC-NEXT:  .Ltmp41:
3728; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp41-.L41$pb), %eax
3729; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3730; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
3731; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3732; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
3733; LINUX-32-PIC-NEXT:    movl (%eax), %eax
3734; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3735; LINUX-32-PIC-NEXT:    retl
3736;
3737; LINUX-64-PIC-LABEL: oxf02:
3738; LINUX-64-PIC:       # %bb.0: # %entry
3739; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
3740; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3741; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3742; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
3743; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3744; LINUX-64-PIC-NEXT:    retq
3745;
3746; DARWIN-32-STATIC-LABEL: oxf02:
3747; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3748; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3749; DARWIN-32-STATIC-NEXT:    movl _xsrc+64(,%eax,4), %ecx
3750; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
3751; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3752; DARWIN-32-STATIC-NEXT:    retl
3753;
3754; DARWIN-32-DYNAMIC-LABEL: oxf02:
3755; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3756; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3757; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
3758; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
3759; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
3760; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
3761; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3762; DARWIN-32-DYNAMIC-NEXT:    retl
3763;
3764; DARWIN-32-PIC-LABEL: oxf02:
3765; DARWIN-32-PIC:       ## %bb.0: ## %entry
3766; DARWIN-32-PIC-NEXT:    calll L41$pb
3767; DARWIN-32-PIC-NEXT:  L41$pb:
3768; DARWIN-32-PIC-NEXT:    popl %eax
3769; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3770; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L41$pb(%eax), %edx
3771; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3772; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L41$pb(%eax), %eax
3773; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
3774; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3775; DARWIN-32-PIC-NEXT:    retl
3776;
3777; DARWIN-64-STATIC-LABEL: oxf02:
3778; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3779; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3780; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3781; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3782; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
3783; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3784; DARWIN-64-STATIC-NEXT:    retq
3785;
3786; DARWIN-64-DYNAMIC-LABEL: oxf02:
3787; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3788; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3789; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3790; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3791; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
3792; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3793; DARWIN-64-DYNAMIC-NEXT:    retq
3794;
3795; DARWIN-64-PIC-LABEL: oxf02:
3796; DARWIN-64-PIC:       ## %bb.0: ## %entry
3797; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3798; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3799; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3800; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
3801; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3802; DARWIN-64-PIC-NEXT:    retq
3803
3804entry:
3805	%0 = load i32*, i32** @ptr, align 8
3806	%1 = add i64 %i, 16
3807	%2 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %1
3808	%3 = load i32, i32* %2, align 4
3809	%4 = getelementptr i32, i32* %0, i64 %1
3810	store i32 %3, i32* %4, align 4
3811	ret void
3812}
3813
3814define void @off03(i64 %i) nounwind {
3815; LINUX-64-STATIC-LABEL: off03:
3816; LINUX-64-STATIC:       # %bb.0: # %entry
3817; LINUX-64-STATIC-NEXT:    movl dsrc+64(,%rdi,4), %eax
3818; LINUX-64-STATIC-NEXT:    movl %eax, ddst+64(,%rdi,4)
3819; LINUX-64-STATIC-NEXT:    retq
3820;
3821; LINUX-32-STATIC-LABEL: off03:
3822; LINUX-32-STATIC:       # %bb.0: # %entry
3823; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3824; LINUX-32-STATIC-NEXT:    movl dsrc+64(,%eax,4), %ecx
3825; LINUX-32-STATIC-NEXT:    movl %ecx, ddst+64(,%eax,4)
3826; LINUX-32-STATIC-NEXT:    retl
3827;
3828; LINUX-32-PIC-LABEL: off03:
3829; LINUX-32-PIC:       # %bb.0: # %entry
3830; LINUX-32-PIC-NEXT:    calll .L42$pb
3831; LINUX-32-PIC-NEXT:  .L42$pb:
3832; LINUX-32-PIC-NEXT:    popl %eax
3833; LINUX-32-PIC-NEXT:  .Ltmp42:
3834; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp42-.L42$pb), %eax
3835; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3836; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
3837; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3838; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
3839; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3840; LINUX-32-PIC-NEXT:    retl
3841;
3842; LINUX-64-PIC-LABEL: off03:
3843; LINUX-64-PIC:       # %bb.0: # %entry
3844; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
3845; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3846; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
3847; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3848; LINUX-64-PIC-NEXT:    retq
3849;
3850; DARWIN-32-STATIC-LABEL: off03:
3851; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3852; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3853; DARWIN-32-STATIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
3854; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst+64(,%eax,4)
3855; DARWIN-32-STATIC-NEXT:    retl
3856;
3857; DARWIN-32-DYNAMIC-LABEL: off03:
3858; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3859; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3860; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
3861; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst+64(,%eax,4)
3862; DARWIN-32-DYNAMIC-NEXT:    retl
3863;
3864; DARWIN-32-PIC-LABEL: off03:
3865; DARWIN-32-PIC:       ## %bb.0: ## %entry
3866; DARWIN-32-PIC-NEXT:    calll L42$pb
3867; DARWIN-32-PIC-NEXT:  L42$pb:
3868; DARWIN-32-PIC-NEXT:    popl %eax
3869; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3870; DARWIN-32-PIC-NEXT:    movl (_dsrc-L42$pb)+64(%eax,%ecx,4), %edx
3871; DARWIN-32-PIC-NEXT:    movl %edx, (_ddst-L42$pb)+64(%eax,%ecx,4)
3872; DARWIN-32-PIC-NEXT:    retl
3873;
3874; DARWIN-64-STATIC-LABEL: off03:
3875; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3876; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
3877; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3878; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
3879; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3880; DARWIN-64-STATIC-NEXT:    retq
3881;
3882; DARWIN-64-DYNAMIC-LABEL: off03:
3883; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3884; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
3885; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3886; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
3887; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3888; DARWIN-64-DYNAMIC-NEXT:    retq
3889;
3890; DARWIN-64-PIC-LABEL: off03:
3891; DARWIN-64-PIC:       ## %bb.0: ## %entry
3892; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
3893; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3894; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
3895; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3896; DARWIN-64-PIC-NEXT:    retq
3897
3898entry:
3899	%0 = add i64 %i, 16
3900	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
3901	%2 = load i32, i32* %1, align 4
3902	%3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
3903	store i32 %2, i32* %3, align 4
3904	ret void
3905}
3906
3907define void @off04(i64 %i) nounwind {
3908; LINUX-64-STATIC-LABEL: off04:
3909; LINUX-64-STATIC:       # %bb.0: # %entry
3910; LINUX-64-STATIC-NEXT:    leaq ddst+64(,%rdi,4), %rax
3911; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
3912; LINUX-64-STATIC-NEXT:    retq
3913;
3914; LINUX-32-STATIC-LABEL: off04:
3915; LINUX-32-STATIC:       # %bb.0: # %entry
3916; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3917; LINUX-32-STATIC-NEXT:    leal ddst+64(,%eax,4), %eax
3918; LINUX-32-STATIC-NEXT:    movl %eax, dptr
3919; LINUX-32-STATIC-NEXT:    retl
3920;
3921; LINUX-32-PIC-LABEL: off04:
3922; LINUX-32-PIC:       # %bb.0: # %entry
3923; LINUX-32-PIC-NEXT:    calll .L43$pb
3924; LINUX-32-PIC-NEXT:  .L43$pb:
3925; LINUX-32-PIC-NEXT:    popl %eax
3926; LINUX-32-PIC-NEXT:  .Ltmp43:
3927; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp43-.L43$pb), %eax
3928; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3929; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %edx
3930; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3931; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
3932; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
3933; LINUX-32-PIC-NEXT:    retl
3934;
3935; LINUX-64-PIC-LABEL: off04:
3936; LINUX-64-PIC:       # %bb.0: # %entry
3937; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
3938; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3939; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
3940; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
3941; LINUX-64-PIC-NEXT:    retq
3942;
3943; DARWIN-32-STATIC-LABEL: off04:
3944; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3945; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3946; DARWIN-32-STATIC-NEXT:    leal _ddst+64(,%eax,4), %eax
3947; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
3948; DARWIN-32-STATIC-NEXT:    retl
3949;
3950; DARWIN-32-DYNAMIC-LABEL: off04:
3951; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3952; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3953; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+64(,%eax,4), %eax
3954; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
3955; DARWIN-32-DYNAMIC-NEXT:    retl
3956;
3957; DARWIN-32-PIC-LABEL: off04:
3958; DARWIN-32-PIC:       ## %bb.0: ## %entry
3959; DARWIN-32-PIC-NEXT:    calll L43$pb
3960; DARWIN-32-PIC-NEXT:  L43$pb:
3961; DARWIN-32-PIC-NEXT:    popl %eax
3962; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3963; DARWIN-32-PIC-NEXT:    leal (_ddst-L43$pb)+64(%eax,%ecx,4), %ecx
3964; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L43$pb(%eax)
3965; DARWIN-32-PIC-NEXT:    retl
3966;
3967; DARWIN-64-STATIC-LABEL: off04:
3968; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3969; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
3970; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3971; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
3972; DARWIN-64-STATIC-NEXT:    retq
3973;
3974; DARWIN-64-DYNAMIC-LABEL: off04:
3975; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3976; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
3977; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3978; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
3979; DARWIN-64-DYNAMIC-NEXT:    retq
3980;
3981; DARWIN-64-PIC-LABEL: off04:
3982; DARWIN-64-PIC:       ## %bb.0: ## %entry
3983; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
3984; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3985; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
3986; DARWIN-64-PIC-NEXT:    retq
3987
3988entry:
3989	%.sum = add i64 %i, 16
3990	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
3991	store i32* %0, i32** @dptr, align 8
3992	ret void
3993}
3994
3995define void @off05(i64 %i) nounwind {
3996; LINUX-64-STATIC-LABEL: off05:
3997; LINUX-64-STATIC:       # %bb.0: # %entry
3998; LINUX-64-STATIC-NEXT:    movl dsrc+64(,%rdi,4), %eax
3999; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
4000; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4001; LINUX-64-STATIC-NEXT:    retq
4002;
4003; LINUX-32-STATIC-LABEL: off05:
4004; LINUX-32-STATIC:       # %bb.0: # %entry
4005; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4006; LINUX-32-STATIC-NEXT:    movl dsrc+64(,%eax,4), %ecx
4007; LINUX-32-STATIC-NEXT:    movl dptr, %edx
4008; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4009; LINUX-32-STATIC-NEXT:    retl
4010;
4011; LINUX-32-PIC-LABEL: off05:
4012; LINUX-32-PIC:       # %bb.0: # %entry
4013; LINUX-32-PIC-NEXT:    calll .L44$pb
4014; LINUX-32-PIC-NEXT:  .L44$pb:
4015; LINUX-32-PIC-NEXT:    popl %eax
4016; LINUX-32-PIC-NEXT:  .Ltmp44:
4017; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp44-.L44$pb), %eax
4018; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4019; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
4020; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
4021; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
4022; LINUX-32-PIC-NEXT:    movl (%eax), %eax
4023; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
4024; LINUX-32-PIC-NEXT:    retl
4025;
4026; LINUX-64-PIC-LABEL: off05:
4027; LINUX-64-PIC:       # %bb.0: # %entry
4028; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
4029; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4030; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
4031; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
4032; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4033; LINUX-64-PIC-NEXT:    retq
4034;
4035; DARWIN-32-STATIC-LABEL: off05:
4036; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4037; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4038; DARWIN-32-STATIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
4039; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
4040; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4041; DARWIN-32-STATIC-NEXT:    retl
4042;
4043; DARWIN-32-DYNAMIC-LABEL: off05:
4044; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4045; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4046; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
4047; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
4048; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4049; DARWIN-32-DYNAMIC-NEXT:    retl
4050;
4051; DARWIN-32-PIC-LABEL: off05:
4052; DARWIN-32-PIC:       ## %bb.0: ## %entry
4053; DARWIN-32-PIC-NEXT:    calll L44$pb
4054; DARWIN-32-PIC-NEXT:  L44$pb:
4055; DARWIN-32-PIC-NEXT:    popl %eax
4056; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4057; DARWIN-32-PIC-NEXT:    movl (_dsrc-L44$pb)+64(%eax,%ecx,4), %edx
4058; DARWIN-32-PIC-NEXT:    movl _dptr-L44$pb(%eax), %eax
4059; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
4060; DARWIN-32-PIC-NEXT:    retl
4061;
4062; DARWIN-64-STATIC-LABEL: off05:
4063; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4064; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
4065; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4066; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
4067; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4068; DARWIN-64-STATIC-NEXT:    retq
4069;
4070; DARWIN-64-DYNAMIC-LABEL: off05:
4071; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4072; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
4073; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4074; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
4075; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4076; DARWIN-64-DYNAMIC-NEXT:    retq
4077;
4078; DARWIN-64-PIC-LABEL: off05:
4079; DARWIN-64-PIC:       ## %bb.0: ## %entry
4080; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
4081; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4082; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
4083; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4084; DARWIN-64-PIC-NEXT:    retq
4085
4086entry:
4087	%0 = load i32*, i32** @dptr, align 8
4088	%1 = add i64 %i, 16
4089	%2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
4090	%3 = load i32, i32* %2, align 4
4091	%4 = getelementptr i32, i32* %0, i64 %1
4092	store i32 %3, i32* %4, align 4
4093	ret void
4094}
4095
4096define void @off06(i64 %i) nounwind {
4097; LINUX-64-STATIC-LABEL: off06:
4098; LINUX-64-STATIC:       # %bb.0: # %entry
4099; LINUX-64-STATIC-NEXT:    movl lsrc+64(,%rdi,4), %eax
4100; LINUX-64-STATIC-NEXT:    movl %eax, ldst+64(,%rdi,4)
4101; LINUX-64-STATIC-NEXT:    retq
4102;
4103; LINUX-32-STATIC-LABEL: off06:
4104; LINUX-32-STATIC:       # %bb.0: # %entry
4105; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4106; LINUX-32-STATIC-NEXT:    movl lsrc+64(,%eax,4), %ecx
4107; LINUX-32-STATIC-NEXT:    movl %ecx, ldst+64(,%eax,4)
4108; LINUX-32-STATIC-NEXT:    retl
4109;
4110; LINUX-32-PIC-LABEL: off06:
4111; LINUX-32-PIC:       # %bb.0: # %entry
4112; LINUX-32-PIC-NEXT:    calll .L45$pb
4113; LINUX-32-PIC-NEXT:  .L45$pb:
4114; LINUX-32-PIC-NEXT:    popl %eax
4115; LINUX-32-PIC-NEXT:  .Ltmp45:
4116; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp45-.L45$pb), %eax
4117; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4118; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax,%ecx,4), %edx
4119; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF+64(%eax,%ecx,4)
4120; LINUX-32-PIC-NEXT:    retl
4121;
4122; LINUX-64-PIC-LABEL: off06:
4123; LINUX-64-PIC:       # %bb.0: # %entry
4124; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
4125; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4126; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
4127; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4128; LINUX-64-PIC-NEXT:    retq
4129;
4130; DARWIN-32-STATIC-LABEL: off06:
4131; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4132; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4133; DARWIN-32-STATIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
4134; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst+64(,%eax,4)
4135; DARWIN-32-STATIC-NEXT:    retl
4136;
4137; DARWIN-32-DYNAMIC-LABEL: off06:
4138; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4139; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4140; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
4141; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst+64(,%eax,4)
4142; DARWIN-32-DYNAMIC-NEXT:    retl
4143;
4144; DARWIN-32-PIC-LABEL: off06:
4145; DARWIN-32-PIC:       ## %bb.0: ## %entry
4146; DARWIN-32-PIC-NEXT:    calll L45$pb
4147; DARWIN-32-PIC-NEXT:  L45$pb:
4148; DARWIN-32-PIC-NEXT:    popl %eax
4149; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4150; DARWIN-32-PIC-NEXT:    movl (_lsrc-L45$pb)+64(%eax,%ecx,4), %edx
4151; DARWIN-32-PIC-NEXT:    movl %edx, (_ldst-L45$pb)+64(%eax,%ecx,4)
4152; DARWIN-32-PIC-NEXT:    retl
4153;
4154; DARWIN-64-STATIC-LABEL: off06:
4155; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4156; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
4157; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4158; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
4159; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4160; DARWIN-64-STATIC-NEXT:    retq
4161;
4162; DARWIN-64-DYNAMIC-LABEL: off06:
4163; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4164; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
4165; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4166; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
4167; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4168; DARWIN-64-DYNAMIC-NEXT:    retq
4169;
4170; DARWIN-64-PIC-LABEL: off06:
4171; DARWIN-64-PIC:       ## %bb.0: ## %entry
4172; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
4173; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4174; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
4175; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4176; DARWIN-64-PIC-NEXT:    retq
4177
4178entry:
4179	%0 = add i64 %i, 16
4180	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
4181	%2 = load i32, i32* %1, align 4
4182	%3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
4183	store i32 %2, i32* %3, align 4
4184	ret void
4185}
4186
4187define void @off07(i64 %i) nounwind {
4188; LINUX-64-STATIC-LABEL: off07:
4189; LINUX-64-STATIC:       # %bb.0: # %entry
4190; LINUX-64-STATIC-NEXT:    leaq ldst+64(,%rdi,4), %rax
4191; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
4192; LINUX-64-STATIC-NEXT:    retq
4193;
4194; LINUX-32-STATIC-LABEL: off07:
4195; LINUX-32-STATIC:       # %bb.0: # %entry
4196; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4197; LINUX-32-STATIC-NEXT:    leal ldst+64(,%eax,4), %eax
4198; LINUX-32-STATIC-NEXT:    movl %eax, lptr
4199; LINUX-32-STATIC-NEXT:    retl
4200;
4201; LINUX-32-PIC-LABEL: off07:
4202; LINUX-32-PIC:       # %bb.0: # %entry
4203; LINUX-32-PIC-NEXT:    calll .L46$pb
4204; LINUX-32-PIC-NEXT:  .L46$pb:
4205; LINUX-32-PIC-NEXT:    popl %eax
4206; LINUX-32-PIC-NEXT:  .Ltmp46:
4207; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp46-.L46$pb), %eax
4208; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4209; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax,%ecx,4), %ecx
4210; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
4211; LINUX-32-PIC-NEXT:    retl
4212;
4213; LINUX-64-PIC-LABEL: off07:
4214; LINUX-64-PIC:       # %bb.0: # %entry
4215; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
4216; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4217; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
4218; LINUX-64-PIC-NEXT:    retq
4219;
4220; DARWIN-32-STATIC-LABEL: off07:
4221; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4222; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4223; DARWIN-32-STATIC-NEXT:    leal _ldst+64(,%eax,4), %eax
4224; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
4225; DARWIN-32-STATIC-NEXT:    retl
4226;
4227; DARWIN-32-DYNAMIC-LABEL: off07:
4228; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4229; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4230; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+64(,%eax,4), %eax
4231; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
4232; DARWIN-32-DYNAMIC-NEXT:    retl
4233;
4234; DARWIN-32-PIC-LABEL: off07:
4235; DARWIN-32-PIC:       ## %bb.0: ## %entry
4236; DARWIN-32-PIC-NEXT:    calll L46$pb
4237; DARWIN-32-PIC-NEXT:  L46$pb:
4238; DARWIN-32-PIC-NEXT:    popl %eax
4239; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4240; DARWIN-32-PIC-NEXT:    leal (_ldst-L46$pb)+64(%eax,%ecx,4), %ecx
4241; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L46$pb(%eax)
4242; DARWIN-32-PIC-NEXT:    retl
4243;
4244; DARWIN-64-STATIC-LABEL: off07:
4245; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4246; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
4247; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4248; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
4249; DARWIN-64-STATIC-NEXT:    retq
4250;
4251; DARWIN-64-DYNAMIC-LABEL: off07:
4252; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4253; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
4254; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4255; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
4256; DARWIN-64-DYNAMIC-NEXT:    retq
4257;
4258; DARWIN-64-PIC-LABEL: off07:
4259; DARWIN-64-PIC:       ## %bb.0: ## %entry
4260; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
4261; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4262; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
4263; DARWIN-64-PIC-NEXT:    retq
4264
4265entry:
4266	%.sum = add i64 %i, 16
4267	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
4268	store i32* %0, i32** @lptr, align 8
4269	ret void
4270}
4271
4272define void @off08(i64 %i) nounwind {
4273; LINUX-64-STATIC-LABEL: off08:
4274; LINUX-64-STATIC:       # %bb.0: # %entry
4275; LINUX-64-STATIC-NEXT:    movl lsrc+64(,%rdi,4), %eax
4276; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
4277; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4278; LINUX-64-STATIC-NEXT:    retq
4279;
4280; LINUX-32-STATIC-LABEL: off08:
4281; LINUX-32-STATIC:       # %bb.0: # %entry
4282; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4283; LINUX-32-STATIC-NEXT:    movl lsrc+64(,%eax,4), %ecx
4284; LINUX-32-STATIC-NEXT:    movl lptr, %edx
4285; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4286; LINUX-32-STATIC-NEXT:    retl
4287;
4288; LINUX-32-PIC-LABEL: off08:
4289; LINUX-32-PIC:       # %bb.0: # %entry
4290; LINUX-32-PIC-NEXT:    calll .L47$pb
4291; LINUX-32-PIC-NEXT:  .L47$pb:
4292; LINUX-32-PIC-NEXT:    popl %eax
4293; LINUX-32-PIC-NEXT:  .Ltmp47:
4294; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp47-.L47$pb), %eax
4295; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4296; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax,%ecx,4), %edx
4297; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
4298; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
4299; LINUX-32-PIC-NEXT:    retl
4300;
4301; LINUX-64-PIC-LABEL: off08:
4302; LINUX-64-PIC:       # %bb.0: # %entry
4303; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
4304; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4305; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
4306; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4307; LINUX-64-PIC-NEXT:    retq
4308;
4309; DARWIN-32-STATIC-LABEL: off08:
4310; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4311; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4312; DARWIN-32-STATIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
4313; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
4314; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4315; DARWIN-32-STATIC-NEXT:    retl
4316;
4317; DARWIN-32-DYNAMIC-LABEL: off08:
4318; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4319; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4320; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
4321; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
4322; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4323; DARWIN-32-DYNAMIC-NEXT:    retl
4324;
4325; DARWIN-32-PIC-LABEL: off08:
4326; DARWIN-32-PIC:       ## %bb.0: ## %entry
4327; DARWIN-32-PIC-NEXT:    calll L47$pb
4328; DARWIN-32-PIC-NEXT:  L47$pb:
4329; DARWIN-32-PIC-NEXT:    popl %eax
4330; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4331; DARWIN-32-PIC-NEXT:    movl (_lsrc-L47$pb)+64(%eax,%ecx,4), %edx
4332; DARWIN-32-PIC-NEXT:    movl _lptr-L47$pb(%eax), %eax
4333; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
4334; DARWIN-32-PIC-NEXT:    retl
4335;
4336; DARWIN-64-STATIC-LABEL: off08:
4337; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4338; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
4339; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4340; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
4341; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4342; DARWIN-64-STATIC-NEXT:    retq
4343;
4344; DARWIN-64-DYNAMIC-LABEL: off08:
4345; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4346; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
4347; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4348; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
4349; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4350; DARWIN-64-DYNAMIC-NEXT:    retq
4351;
4352; DARWIN-64-PIC-LABEL: off08:
4353; DARWIN-64-PIC:       ## %bb.0: ## %entry
4354; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
4355; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4356; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
4357; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4358; DARWIN-64-PIC-NEXT:    retq
4359
4360entry:
4361	%0 = load i32*, i32** @lptr, align 8
4362	%1 = add i64 %i, 16
4363	%2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
4364	%3 = load i32, i32* %2, align 4
4365	%4 = getelementptr i32, i32* %0, i64 %1
4366	store i32 %3, i32* %4, align 4
4367	ret void
4368}
4369
4370define void @moo00(i64 %i) nounwind {
4371; LINUX-64-STATIC-LABEL: moo00:
4372; LINUX-64-STATIC:       # %bb.0: # %entry
4373; LINUX-64-STATIC-NEXT:    movl src+262144(%rip), %eax
4374; LINUX-64-STATIC-NEXT:    movl %eax, dst+262144(%rip)
4375; LINUX-64-STATIC-NEXT:    retq
4376;
4377; LINUX-32-STATIC-LABEL: moo00:
4378; LINUX-32-STATIC:       # %bb.0: # %entry
4379; LINUX-32-STATIC-NEXT:    movl src+262144, %eax
4380; LINUX-32-STATIC-NEXT:    movl %eax, dst+262144
4381; LINUX-32-STATIC-NEXT:    retl
4382;
4383; LINUX-32-PIC-LABEL: moo00:
4384; LINUX-32-PIC:       # %bb.0: # %entry
4385; LINUX-32-PIC-NEXT:    calll .L48$pb
4386; LINUX-32-PIC-NEXT:  .L48$pb:
4387; LINUX-32-PIC-NEXT:    popl %eax
4388; LINUX-32-PIC-NEXT:  .Ltmp48:
4389; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp48-.L48$pb), %eax
4390; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
4391; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4392; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
4393; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4394; LINUX-32-PIC-NEXT:    retl
4395;
4396; LINUX-64-PIC-LABEL: moo00:
4397; LINUX-64-PIC:       # %bb.0: # %entry
4398; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
4399; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
4400; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
4401; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4402; LINUX-64-PIC-NEXT:    retq
4403;
4404; DARWIN-32-STATIC-LABEL: moo00:
4405; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4406; DARWIN-32-STATIC-NEXT:    movl _src+262144, %eax
4407; DARWIN-32-STATIC-NEXT:    movl %eax, _dst+262144
4408; DARWIN-32-STATIC-NEXT:    retl
4409;
4410; DARWIN-32-DYNAMIC-LABEL: moo00:
4411; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4412; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
4413; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%eax), %eax
4414; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
4415; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
4416; DARWIN-32-DYNAMIC-NEXT:    retl
4417;
4418; DARWIN-32-PIC-LABEL: moo00:
4419; DARWIN-32-PIC:       ## %bb.0: ## %entry
4420; DARWIN-32-PIC-NEXT:    calll L48$pb
4421; DARWIN-32-PIC-NEXT:  L48$pb:
4422; DARWIN-32-PIC-NEXT:    popl %eax
4423; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L48$pb(%eax), %ecx
4424; DARWIN-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4425; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L48$pb(%eax), %eax
4426; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4427; DARWIN-32-PIC-NEXT:    retl
4428;
4429; DARWIN-64-STATIC-LABEL: moo00:
4430; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4431; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4432; DARWIN-64-STATIC-NEXT:    movl 262144(%rax), %eax
4433; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
4434; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4435; DARWIN-64-STATIC-NEXT:    retq
4436;
4437; DARWIN-64-DYNAMIC-LABEL: moo00:
4438; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4439; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4440; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax), %eax
4441; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
4442; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
4443; DARWIN-64-DYNAMIC-NEXT:    retq
4444;
4445; DARWIN-64-PIC-LABEL: moo00:
4446; DARWIN-64-PIC:       ## %bb.0: ## %entry
4447; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4448; DARWIN-64-PIC-NEXT:    movl 262144(%rax), %eax
4449; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
4450; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4451; DARWIN-64-PIC-NEXT:    retq
4452
4453entry:
4454	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
4455	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), align 4
4456	ret void
4457}
4458
4459define void @moo01(i64 %i) nounwind {
4460; LINUX-64-STATIC-LABEL: moo01:
4461; LINUX-64-STATIC:       # %bb.0: # %entry
4462; LINUX-64-STATIC-NEXT:    movq $dst+262144, ptr(%rip)
4463; LINUX-64-STATIC-NEXT:    retq
4464;
4465; LINUX-32-STATIC-LABEL: moo01:
4466; LINUX-32-STATIC:       # %bb.0: # %entry
4467; LINUX-32-STATIC-NEXT:    movl $dst+262144, ptr
4468; LINUX-32-STATIC-NEXT:    retl
4469;
4470; LINUX-32-PIC-LABEL: moo01:
4471; LINUX-32-PIC:       # %bb.0: # %entry
4472; LINUX-32-PIC-NEXT:    calll .L49$pb
4473; LINUX-32-PIC-NEXT:  .L49$pb:
4474; LINUX-32-PIC-NEXT:    popl %eax
4475; LINUX-32-PIC-NEXT:  .Ltmp49:
4476; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp49-.L49$pb), %eax
4477; LINUX-32-PIC-NEXT:    movl $262144, %ecx # imm = 0x40000
4478; LINUX-32-PIC-NEXT:    addl dst@GOT(%eax), %ecx
4479; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
4480; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
4481; LINUX-32-PIC-NEXT:    retl
4482;
4483; LINUX-64-PIC-LABEL: moo01:
4484; LINUX-64-PIC:       # %bb.0: # %entry
4485; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
4486; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
4487; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
4488; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
4489; LINUX-64-PIC-NEXT:    retq
4490;
4491; DARWIN-32-STATIC-LABEL: moo01:
4492; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4493; DARWIN-32-STATIC-NEXT:    movl $_dst+262144, _ptr
4494; DARWIN-32-STATIC-NEXT:    retl
4495;
4496; DARWIN-32-DYNAMIC-LABEL: moo01:
4497; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4498; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
4499; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
4500; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
4501; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
4502; DARWIN-32-DYNAMIC-NEXT:    retl
4503;
4504; DARWIN-32-PIC-LABEL: moo01:
4505; DARWIN-32-PIC:       ## %bb.0: ## %entry
4506; DARWIN-32-PIC-NEXT:    calll L49$pb
4507; DARWIN-32-PIC-NEXT:  L49$pb:
4508; DARWIN-32-PIC-NEXT:    popl %eax
4509; DARWIN-32-PIC-NEXT:    movl $262144, %ecx ## imm = 0x40000
4510; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L49$pb(%eax), %ecx
4511; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L49$pb(%eax), %eax
4512; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
4513; DARWIN-32-PIC-NEXT:    retl
4514;
4515; DARWIN-64-STATIC-LABEL: moo01:
4516; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4517; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
4518; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
4519; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4520; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
4521; DARWIN-64-STATIC-NEXT:    retq
4522;
4523; DARWIN-64-DYNAMIC-LABEL: moo01:
4524; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4525; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
4526; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
4527; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4528; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
4529; DARWIN-64-DYNAMIC-NEXT:    retq
4530;
4531; DARWIN-64-PIC-LABEL: moo01:
4532; DARWIN-64-PIC:       ## %bb.0: ## %entry
4533; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
4534; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
4535; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4536; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
4537; DARWIN-64-PIC-NEXT:    retq
4538
4539entry:
4540	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
4541	ret void
4542}
4543
4544define void @moo02(i64 %i) nounwind {
4545; LINUX-64-STATIC-LABEL: moo02:
4546; LINUX-64-STATIC:       # %bb.0: # %entry
4547; LINUX-64-STATIC-NEXT:    movl src+262144(%rip), %eax
4548; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
4549; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4550; LINUX-64-STATIC-NEXT:    retq
4551;
4552; LINUX-32-STATIC-LABEL: moo02:
4553; LINUX-32-STATIC:       # %bb.0: # %entry
4554; LINUX-32-STATIC-NEXT:    movl src+262144, %eax
4555; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
4556; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
4557; LINUX-32-STATIC-NEXT:    retl
4558;
4559; LINUX-32-PIC-LABEL: moo02:
4560; LINUX-32-PIC:       # %bb.0: # %entry
4561; LINUX-32-PIC-NEXT:    calll .L50$pb
4562; LINUX-32-PIC-NEXT:  .L50$pb:
4563; LINUX-32-PIC-NEXT:    popl %eax
4564; LINUX-32-PIC-NEXT:  .Ltmp50:
4565; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp50-.L50$pb), %eax
4566; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
4567; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4568; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
4569; LINUX-32-PIC-NEXT:    movl (%eax), %eax
4570; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4571; LINUX-32-PIC-NEXT:    retl
4572;
4573; LINUX-64-PIC-LABEL: moo02:
4574; LINUX-64-PIC:       # %bb.0: # %entry
4575; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
4576; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
4577; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
4578; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
4579; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4580; LINUX-64-PIC-NEXT:    retq
4581;
4582; DARWIN-32-STATIC-LABEL: moo02:
4583; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4584; DARWIN-32-STATIC-NEXT:    movl _src+262144, %eax
4585; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
4586; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
4587; DARWIN-32-STATIC-NEXT:    retl
4588;
4589; DARWIN-32-DYNAMIC-LABEL: moo02:
4590; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4591; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
4592; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%eax), %eax
4593; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
4594; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
4595; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
4596; DARWIN-32-DYNAMIC-NEXT:    retl
4597;
4598; DARWIN-32-PIC-LABEL: moo02:
4599; DARWIN-32-PIC:       ## %bb.0: ## %entry
4600; DARWIN-32-PIC-NEXT:    calll L50$pb
4601; DARWIN-32-PIC-NEXT:  L50$pb:
4602; DARWIN-32-PIC-NEXT:    popl %eax
4603; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L50$pb(%eax), %ecx
4604; DARWIN-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4605; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L50$pb(%eax), %eax
4606; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
4607; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4608; DARWIN-32-PIC-NEXT:    retl
4609;
4610; DARWIN-64-STATIC-LABEL: moo02:
4611; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4612; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4613; DARWIN-64-STATIC-NEXT:    movl 262144(%rax), %eax
4614; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4615; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
4616; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4617; DARWIN-64-STATIC-NEXT:    retq
4618;
4619; DARWIN-64-DYNAMIC-LABEL: moo02:
4620; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4621; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4622; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax), %eax
4623; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4624; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
4625; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
4626; DARWIN-64-DYNAMIC-NEXT:    retq
4627;
4628; DARWIN-64-PIC-LABEL: moo02:
4629; DARWIN-64-PIC:       ## %bb.0: ## %entry
4630; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4631; DARWIN-64-PIC-NEXT:    movl 262144(%rax), %eax
4632; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4633; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
4634; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4635; DARWIN-64-PIC-NEXT:    retq
4636
4637entry:
4638	%0 = load i32*, i32** @ptr, align 8
4639	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
4640	%2 = getelementptr i32, i32* %0, i64 65536
4641	store i32 %1, i32* %2, align 4
4642	ret void
4643}
4644
4645define void @moo03(i64 %i) nounwind {
4646; LINUX-64-STATIC-LABEL: moo03:
4647; LINUX-64-STATIC:       # %bb.0: # %entry
4648; LINUX-64-STATIC-NEXT:    movl dsrc+262144(%rip), %eax
4649; LINUX-64-STATIC-NEXT:    movl %eax, ddst+262144(%rip)
4650; LINUX-64-STATIC-NEXT:    retq
4651;
4652; LINUX-32-STATIC-LABEL: moo03:
4653; LINUX-32-STATIC:       # %bb.0: # %entry
4654; LINUX-32-STATIC-NEXT:    movl dsrc+262144, %eax
4655; LINUX-32-STATIC-NEXT:    movl %eax, ddst+262144
4656; LINUX-32-STATIC-NEXT:    retl
4657;
4658; LINUX-32-PIC-LABEL: moo03:
4659; LINUX-32-PIC:       # %bb.0: # %entry
4660; LINUX-32-PIC-NEXT:    calll .L51$pb
4661; LINUX-32-PIC-NEXT:  .L51$pb:
4662; LINUX-32-PIC-NEXT:    popl %eax
4663; LINUX-32-PIC-NEXT:  .Ltmp51:
4664; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp51-.L51$pb), %eax
4665; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
4666; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4667; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
4668; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4669; LINUX-32-PIC-NEXT:    retl
4670;
4671; LINUX-64-PIC-LABEL: moo03:
4672; LINUX-64-PIC:       # %bb.0: # %entry
4673; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
4674; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
4675; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
4676; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4677; LINUX-64-PIC-NEXT:    retq
4678;
4679; DARWIN-32-STATIC-LABEL: moo03:
4680; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4681; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144, %eax
4682; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst+262144
4683; DARWIN-32-STATIC-NEXT:    retl
4684;
4685; DARWIN-32-DYNAMIC-LABEL: moo03:
4686; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4687; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144, %eax
4688; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst+262144
4689; DARWIN-32-DYNAMIC-NEXT:    retl
4690;
4691; DARWIN-32-PIC-LABEL: moo03:
4692; DARWIN-32-PIC:       ## %bb.0: ## %entry
4693; DARWIN-32-PIC-NEXT:    calll L51$pb
4694; DARWIN-32-PIC-NEXT:  L51$pb:
4695; DARWIN-32-PIC-NEXT:    popl %eax
4696; DARWIN-32-PIC-NEXT:    movl (_dsrc-L51$pb)+262144(%eax), %ecx
4697; DARWIN-32-PIC-NEXT:    movl %ecx, (_ddst-L51$pb)+262144(%eax)
4698; DARWIN-32-PIC-NEXT:    retl
4699;
4700; DARWIN-64-STATIC-LABEL: moo03:
4701; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4702; DARWIN-64-STATIC-NEXT:    movl _dsrc+262144(%rip), %eax
4703; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst+262144(%rip)
4704; DARWIN-64-STATIC-NEXT:    retq
4705;
4706; DARWIN-64-DYNAMIC-LABEL: moo03:
4707; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4708; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+262144(%rip), %eax
4709; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst+262144(%rip)
4710; DARWIN-64-DYNAMIC-NEXT:    retq
4711;
4712; DARWIN-64-PIC-LABEL: moo03:
4713; DARWIN-64-PIC:       ## %bb.0: ## %entry
4714; DARWIN-64-PIC-NEXT:    movl _dsrc+262144(%rip), %eax
4715; DARWIN-64-PIC-NEXT:    movl %eax, _ddst+262144(%rip)
4716; DARWIN-64-PIC-NEXT:    retq
4717
4718entry:
4719	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
4720	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), align 32
4721	ret void
4722}
4723
4724define void @moo04(i64 %i) nounwind {
4725; LINUX-64-STATIC-LABEL: moo04:
4726; LINUX-64-STATIC:       # %bb.0: # %entry
4727; LINUX-64-STATIC-NEXT:    movq $ddst+262144, dptr(%rip)
4728; LINUX-64-STATIC-NEXT:    retq
4729;
4730; LINUX-32-STATIC-LABEL: moo04:
4731; LINUX-32-STATIC:       # %bb.0: # %entry
4732; LINUX-32-STATIC-NEXT:    movl $ddst+262144, dptr
4733; LINUX-32-STATIC-NEXT:    retl
4734;
4735; LINUX-32-PIC-LABEL: moo04:
4736; LINUX-32-PIC:       # %bb.0: # %entry
4737; LINUX-32-PIC-NEXT:    calll .L52$pb
4738; LINUX-32-PIC-NEXT:  .L52$pb:
4739; LINUX-32-PIC-NEXT:    popl %eax
4740; LINUX-32-PIC-NEXT:  .Ltmp52:
4741; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp52-.L52$pb), %eax
4742; LINUX-32-PIC-NEXT:    movl $262144, %ecx # imm = 0x40000
4743; LINUX-32-PIC-NEXT:    addl ddst@GOT(%eax), %ecx
4744; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
4745; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
4746; LINUX-32-PIC-NEXT:    retl
4747;
4748; LINUX-64-PIC-LABEL: moo04:
4749; LINUX-64-PIC:       # %bb.0: # %entry
4750; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
4751; LINUX-64-PIC-NEXT:    addq ddst@GOTPCREL(%rip), %rax
4752; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
4753; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
4754; LINUX-64-PIC-NEXT:    retq
4755;
4756; DARWIN-32-STATIC-LABEL: moo04:
4757; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4758; DARWIN-32-STATIC-NEXT:    movl $_ddst+262144, _dptr
4759; DARWIN-32-STATIC-NEXT:    retl
4760;
4761; DARWIN-32-DYNAMIC-LABEL: moo04:
4762; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4763; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+262144, _dptr
4764; DARWIN-32-DYNAMIC-NEXT:    retl
4765;
4766; DARWIN-32-PIC-LABEL: moo04:
4767; DARWIN-32-PIC:       ## %bb.0: ## %entry
4768; DARWIN-32-PIC-NEXT:    calll L52$pb
4769; DARWIN-32-PIC-NEXT:  L52$pb:
4770; DARWIN-32-PIC-NEXT:    popl %eax
4771; DARWIN-32-PIC-NEXT:    leal (_ddst-L52$pb)+262144(%eax), %ecx
4772; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L52$pb(%eax)
4773; DARWIN-32-PIC-NEXT:    retl
4774;
4775; DARWIN-64-STATIC-LABEL: moo04:
4776; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4777; DARWIN-64-STATIC-NEXT:    leaq _ddst+262144(%rip), %rax
4778; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
4779; DARWIN-64-STATIC-NEXT:    retq
4780;
4781; DARWIN-64-DYNAMIC-LABEL: moo04:
4782; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4783; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+262144(%rip), %rax
4784; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
4785; DARWIN-64-DYNAMIC-NEXT:    retq
4786;
4787; DARWIN-64-PIC-LABEL: moo04:
4788; DARWIN-64-PIC:       ## %bb.0: ## %entry
4789; DARWIN-64-PIC-NEXT:    leaq _ddst+262144(%rip), %rax
4790; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
4791; DARWIN-64-PIC-NEXT:    retq
4792
4793entry:
4794	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
4795	ret void
4796}
4797
4798define void @moo05(i64 %i) nounwind {
4799; LINUX-64-STATIC-LABEL: moo05:
4800; LINUX-64-STATIC:       # %bb.0: # %entry
4801; LINUX-64-STATIC-NEXT:    movl dsrc+262144(%rip), %eax
4802; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
4803; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4804; LINUX-64-STATIC-NEXT:    retq
4805;
4806; LINUX-32-STATIC-LABEL: moo05:
4807; LINUX-32-STATIC:       # %bb.0: # %entry
4808; LINUX-32-STATIC-NEXT:    movl dsrc+262144, %eax
4809; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
4810; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
4811; LINUX-32-STATIC-NEXT:    retl
4812;
4813; LINUX-32-PIC-LABEL: moo05:
4814; LINUX-32-PIC:       # %bb.0: # %entry
4815; LINUX-32-PIC-NEXT:    calll .L53$pb
4816; LINUX-32-PIC-NEXT:  .L53$pb:
4817; LINUX-32-PIC-NEXT:    popl %eax
4818; LINUX-32-PIC-NEXT:  .Ltmp53:
4819; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp53-.L53$pb), %eax
4820; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
4821; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4822; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
4823; LINUX-32-PIC-NEXT:    movl (%eax), %eax
4824; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4825; LINUX-32-PIC-NEXT:    retl
4826;
4827; LINUX-64-PIC-LABEL: moo05:
4828; LINUX-64-PIC:       # %bb.0: # %entry
4829; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
4830; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
4831; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
4832; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
4833; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4834; LINUX-64-PIC-NEXT:    retq
4835;
4836; DARWIN-32-STATIC-LABEL: moo05:
4837; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4838; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144, %eax
4839; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
4840; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
4841; DARWIN-32-STATIC-NEXT:    retl
4842;
4843; DARWIN-32-DYNAMIC-LABEL: moo05:
4844; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4845; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144, %eax
4846; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
4847; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
4848; DARWIN-32-DYNAMIC-NEXT:    retl
4849;
4850; DARWIN-32-PIC-LABEL: moo05:
4851; DARWIN-32-PIC:       ## %bb.0: ## %entry
4852; DARWIN-32-PIC-NEXT:    calll L53$pb
4853; DARWIN-32-PIC-NEXT:  L53$pb:
4854; DARWIN-32-PIC-NEXT:    popl %eax
4855; DARWIN-32-PIC-NEXT:    movl (_dsrc-L53$pb)+262144(%eax), %ecx
4856; DARWIN-32-PIC-NEXT:    movl _dptr-L53$pb(%eax), %eax
4857; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4858; DARWIN-32-PIC-NEXT:    retl
4859;
4860; DARWIN-64-STATIC-LABEL: moo05:
4861; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4862; DARWIN-64-STATIC-NEXT:    movl _dsrc+262144(%rip), %eax
4863; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
4864; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4865; DARWIN-64-STATIC-NEXT:    retq
4866;
4867; DARWIN-64-DYNAMIC-LABEL: moo05:
4868; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4869; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+262144(%rip), %eax
4870; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
4871; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
4872; DARWIN-64-DYNAMIC-NEXT:    retq
4873;
4874; DARWIN-64-PIC-LABEL: moo05:
4875; DARWIN-64-PIC:       ## %bb.0: ## %entry
4876; DARWIN-64-PIC-NEXT:    movl _dsrc+262144(%rip), %eax
4877; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
4878; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4879; DARWIN-64-PIC-NEXT:    retq
4880
4881entry:
4882	%0 = load i32*, i32** @dptr, align 8
4883	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
4884	%2 = getelementptr i32, i32* %0, i64 65536
4885	store i32 %1, i32* %2, align 4
4886	ret void
4887}
4888
4889define void @moo06(i64 %i) nounwind {
4890; LINUX-64-STATIC-LABEL: moo06:
4891; LINUX-64-STATIC:       # %bb.0: # %entry
4892; LINUX-64-STATIC-NEXT:    movl lsrc+262144(%rip), %eax
4893; LINUX-64-STATIC-NEXT:    movl %eax, ldst+262144(%rip)
4894; LINUX-64-STATIC-NEXT:    retq
4895;
4896; LINUX-32-STATIC-LABEL: moo06:
4897; LINUX-32-STATIC:       # %bb.0: # %entry
4898; LINUX-32-STATIC-NEXT:    movl lsrc+262144, %eax
4899; LINUX-32-STATIC-NEXT:    movl %eax, ldst+262144
4900; LINUX-32-STATIC-NEXT:    retl
4901;
4902; LINUX-32-PIC-LABEL: moo06:
4903; LINUX-32-PIC:       # %bb.0: # %entry
4904; LINUX-32-PIC-NEXT:    calll .L54$pb
4905; LINUX-32-PIC-NEXT:  .L54$pb:
4906; LINUX-32-PIC-NEXT:    popl %eax
4907; LINUX-32-PIC-NEXT:  .Ltmp54:
4908; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp54-.L54$pb), %eax
4909; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax), %ecx
4910; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF+262144(%eax)
4911; LINUX-32-PIC-NEXT:    retl
4912;
4913; LINUX-64-PIC-LABEL: moo06:
4914; LINUX-64-PIC:       # %bb.0: # %entry
4915; LINUX-64-PIC-NEXT:    movl lsrc+262144(%rip), %eax
4916; LINUX-64-PIC-NEXT:    movl %eax, ldst+262144(%rip)
4917; LINUX-64-PIC-NEXT:    retq
4918;
4919; DARWIN-32-STATIC-LABEL: moo06:
4920; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4921; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144, %eax
4922; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst+262144
4923; DARWIN-32-STATIC-NEXT:    retl
4924;
4925; DARWIN-32-DYNAMIC-LABEL: moo06:
4926; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4927; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144, %eax
4928; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst+262144
4929; DARWIN-32-DYNAMIC-NEXT:    retl
4930;
4931; DARWIN-32-PIC-LABEL: moo06:
4932; DARWIN-32-PIC:       ## %bb.0: ## %entry
4933; DARWIN-32-PIC-NEXT:    calll L54$pb
4934; DARWIN-32-PIC-NEXT:  L54$pb:
4935; DARWIN-32-PIC-NEXT:    popl %eax
4936; DARWIN-32-PIC-NEXT:    movl (_lsrc-L54$pb)+262144(%eax), %ecx
4937; DARWIN-32-PIC-NEXT:    movl %ecx, (_ldst-L54$pb)+262144(%eax)
4938; DARWIN-32-PIC-NEXT:    retl
4939;
4940; DARWIN-64-STATIC-LABEL: moo06:
4941; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4942; DARWIN-64-STATIC-NEXT:    movl _lsrc+262144(%rip), %eax
4943; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst+262144(%rip)
4944; DARWIN-64-STATIC-NEXT:    retq
4945;
4946; DARWIN-64-DYNAMIC-LABEL: moo06:
4947; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4948; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+262144(%rip), %eax
4949; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst+262144(%rip)
4950; DARWIN-64-DYNAMIC-NEXT:    retq
4951;
4952; DARWIN-64-PIC-LABEL: moo06:
4953; DARWIN-64-PIC:       ## %bb.0: ## %entry
4954; DARWIN-64-PIC-NEXT:    movl _lsrc+262144(%rip), %eax
4955; DARWIN-64-PIC-NEXT:    movl %eax, _ldst+262144(%rip)
4956; DARWIN-64-PIC-NEXT:    retq
4957
4958entry:
4959	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4960	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), align 4
4961	ret void
4962}
4963
4964define void @moo07(i64 %i) nounwind {
4965; LINUX-64-STATIC-LABEL: moo07:
4966; LINUX-64-STATIC:       # %bb.0: # %entry
4967; LINUX-64-STATIC-NEXT:    movq $ldst+262144, lptr(%rip)
4968; LINUX-64-STATIC-NEXT:    retq
4969;
4970; LINUX-32-STATIC-LABEL: moo07:
4971; LINUX-32-STATIC:       # %bb.0: # %entry
4972; LINUX-32-STATIC-NEXT:    movl $ldst+262144, lptr
4973; LINUX-32-STATIC-NEXT:    retl
4974;
4975; LINUX-32-PIC-LABEL: moo07:
4976; LINUX-32-PIC:       # %bb.0: # %entry
4977; LINUX-32-PIC-NEXT:    calll .L55$pb
4978; LINUX-32-PIC-NEXT:  .L55$pb:
4979; LINUX-32-PIC-NEXT:    popl %eax
4980; LINUX-32-PIC-NEXT:  .Ltmp55:
4981; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp55-.L55$pb), %eax
4982; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax), %ecx
4983; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
4984; LINUX-32-PIC-NEXT:    retl
4985;
4986; LINUX-64-PIC-LABEL: moo07:
4987; LINUX-64-PIC:       # %bb.0: # %entry
4988; LINUX-64-PIC-NEXT:    leaq ldst+262144(%rip), %rax
4989; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
4990; LINUX-64-PIC-NEXT:    retq
4991;
4992; DARWIN-32-STATIC-LABEL: moo07:
4993; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4994; DARWIN-32-STATIC-NEXT:    movl $_ldst+262144, _lptr
4995; DARWIN-32-STATIC-NEXT:    retl
4996;
4997; DARWIN-32-DYNAMIC-LABEL: moo07:
4998; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4999; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+262144, _lptr
5000; DARWIN-32-DYNAMIC-NEXT:    retl
5001;
5002; DARWIN-32-PIC-LABEL: moo07:
5003; DARWIN-32-PIC:       ## %bb.0: ## %entry
5004; DARWIN-32-PIC-NEXT:    calll L55$pb
5005; DARWIN-32-PIC-NEXT:  L55$pb:
5006; DARWIN-32-PIC-NEXT:    popl %eax
5007; DARWIN-32-PIC-NEXT:    leal (_ldst-L55$pb)+262144(%eax), %ecx
5008; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L55$pb(%eax)
5009; DARWIN-32-PIC-NEXT:    retl
5010;
5011; DARWIN-64-STATIC-LABEL: moo07:
5012; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5013; DARWIN-64-STATIC-NEXT:    leaq _ldst+262144(%rip), %rax
5014; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
5015; DARWIN-64-STATIC-NEXT:    retq
5016;
5017; DARWIN-64-DYNAMIC-LABEL: moo07:
5018; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5019; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+262144(%rip), %rax
5020; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
5021; DARWIN-64-DYNAMIC-NEXT:    retq
5022;
5023; DARWIN-64-PIC-LABEL: moo07:
5024; DARWIN-64-PIC:       ## %bb.0: ## %entry
5025; DARWIN-64-PIC-NEXT:    leaq _ldst+262144(%rip), %rax
5026; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
5027; DARWIN-64-PIC-NEXT:    retq
5028
5029entry:
5030	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
5031	ret void
5032}
5033
5034define void @moo08(i64 %i) nounwind {
5035; LINUX-64-STATIC-LABEL: moo08:
5036; LINUX-64-STATIC:       # %bb.0: # %entry
5037; LINUX-64-STATIC-NEXT:    movl lsrc+262144(%rip), %eax
5038; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
5039; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
5040; LINUX-64-STATIC-NEXT:    retq
5041;
5042; LINUX-32-STATIC-LABEL: moo08:
5043; LINUX-32-STATIC:       # %bb.0: # %entry
5044; LINUX-32-STATIC-NEXT:    movl lsrc+262144, %eax
5045; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
5046; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
5047; LINUX-32-STATIC-NEXT:    retl
5048;
5049; LINUX-32-PIC-LABEL: moo08:
5050; LINUX-32-PIC:       # %bb.0: # %entry
5051; LINUX-32-PIC-NEXT:    calll .L56$pb
5052; LINUX-32-PIC-NEXT:  .L56$pb:
5053; LINUX-32-PIC-NEXT:    popl %eax
5054; LINUX-32-PIC-NEXT:  .Ltmp56:
5055; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp56-.L56$pb), %eax
5056; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax), %ecx
5057; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
5058; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
5059; LINUX-32-PIC-NEXT:    retl
5060;
5061; LINUX-64-PIC-LABEL: moo08:
5062; LINUX-64-PIC:       # %bb.0: # %entry
5063; LINUX-64-PIC-NEXT:    movl lsrc+262144(%rip), %eax
5064; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
5065; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
5066; LINUX-64-PIC-NEXT:    retq
5067;
5068; DARWIN-32-STATIC-LABEL: moo08:
5069; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5070; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144, %eax
5071; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
5072; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
5073; DARWIN-32-STATIC-NEXT:    retl
5074;
5075; DARWIN-32-DYNAMIC-LABEL: moo08:
5076; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5077; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144, %eax
5078; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
5079; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
5080; DARWIN-32-DYNAMIC-NEXT:    retl
5081;
5082; DARWIN-32-PIC-LABEL: moo08:
5083; DARWIN-32-PIC:       ## %bb.0: ## %entry
5084; DARWIN-32-PIC-NEXT:    calll L56$pb
5085; DARWIN-32-PIC-NEXT:  L56$pb:
5086; DARWIN-32-PIC-NEXT:    popl %eax
5087; DARWIN-32-PIC-NEXT:    movl (_lsrc-L56$pb)+262144(%eax), %ecx
5088; DARWIN-32-PIC-NEXT:    movl _lptr-L56$pb(%eax), %eax
5089; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
5090; DARWIN-32-PIC-NEXT:    retl
5091;
5092; DARWIN-64-STATIC-LABEL: moo08:
5093; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5094; DARWIN-64-STATIC-NEXT:    movl _lsrc+262144(%rip), %eax
5095; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
5096; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
5097; DARWIN-64-STATIC-NEXT:    retq
5098;
5099; DARWIN-64-DYNAMIC-LABEL: moo08:
5100; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5101; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+262144(%rip), %eax
5102; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
5103; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
5104; DARWIN-64-DYNAMIC-NEXT:    retq
5105;
5106; DARWIN-64-PIC-LABEL: moo08:
5107; DARWIN-64-PIC:       ## %bb.0: ## %entry
5108; DARWIN-64-PIC-NEXT:    movl _lsrc+262144(%rip), %eax
5109; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
5110; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
5111; DARWIN-64-PIC-NEXT:    retq
5112
5113entry:
5114	%0 = load i32*, i32** @lptr, align 8
5115	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
5116	%2 = getelementptr i32, i32* %0, i64 65536
5117	store i32 %1, i32* %2, align 4
5118	ret void
5119}
5120
5121define void @big00(i64 %i) nounwind {
5122; LINUX-64-STATIC-LABEL: big00:
5123; LINUX-64-STATIC:       # %bb.0: # %entry
5124; LINUX-64-STATIC-NEXT:    movl src+262144(,%rdi,4), %eax
5125; LINUX-64-STATIC-NEXT:    movl %eax, dst+262144(,%rdi,4)
5126; LINUX-64-STATIC-NEXT:    retq
5127;
5128; LINUX-32-STATIC-LABEL: big00:
5129; LINUX-32-STATIC:       # %bb.0: # %entry
5130; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5131; LINUX-32-STATIC-NEXT:    movl src+262144(,%eax,4), %ecx
5132; LINUX-32-STATIC-NEXT:    movl %ecx, dst+262144(,%eax,4)
5133; LINUX-32-STATIC-NEXT:    retl
5134;
5135; LINUX-32-PIC-LABEL: big00:
5136; LINUX-32-PIC:       # %bb.0: # %entry
5137; LINUX-32-PIC-NEXT:    calll .L57$pb
5138; LINUX-32-PIC-NEXT:  .L57$pb:
5139; LINUX-32-PIC-NEXT:    popl %eax
5140; LINUX-32-PIC-NEXT:  .Ltmp57:
5141; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp57-.L57$pb), %eax
5142; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5143; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
5144; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5145; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
5146; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5147; LINUX-32-PIC-NEXT:    retl
5148;
5149; LINUX-64-PIC-LABEL: big00:
5150; LINUX-64-PIC:       # %bb.0: # %entry
5151; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
5152; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5153; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
5154; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5155; LINUX-64-PIC-NEXT:    retq
5156;
5157; DARWIN-32-STATIC-LABEL: big00:
5158; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5159; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5160; DARWIN-32-STATIC-NEXT:    movl _src+262144(,%eax,4), %ecx
5161; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst+262144(,%eax,4)
5162; DARWIN-32-STATIC-NEXT:    retl
5163;
5164; DARWIN-32-DYNAMIC-LABEL: big00:
5165; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5166; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5167; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
5168; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%ecx,%eax,4), %ecx
5169; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
5170; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5171; DARWIN-32-DYNAMIC-NEXT:    retl
5172;
5173; DARWIN-32-PIC-LABEL: big00:
5174; DARWIN-32-PIC:       ## %bb.0: ## %entry
5175; DARWIN-32-PIC-NEXT:    calll L57$pb
5176; DARWIN-32-PIC-NEXT:  L57$pb:
5177; DARWIN-32-PIC-NEXT:    popl %eax
5178; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5179; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L57$pb(%eax), %edx
5180; DARWIN-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5181; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L57$pb(%eax), %eax
5182; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5183; DARWIN-32-PIC-NEXT:    retl
5184;
5185; DARWIN-64-STATIC-LABEL: big00:
5186; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5187; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5188; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5189; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
5190; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5191; DARWIN-64-STATIC-NEXT:    retq
5192;
5193; DARWIN-64-DYNAMIC-LABEL: big00:
5194; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5195; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5196; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5197; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
5198; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5199; DARWIN-64-DYNAMIC-NEXT:    retq
5200;
5201; DARWIN-64-PIC-LABEL: big00:
5202; DARWIN-64-PIC:       ## %bb.0: ## %entry
5203; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5204; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5205; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
5206; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5207; DARWIN-64-PIC-NEXT:    retq
5208
5209entry:
5210	%0 = add i64 %i, 65536
5211	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
5212	%2 = load i32, i32* %1, align 4
5213	%3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
5214	store i32 %2, i32* %3, align 4
5215	ret void
5216}
5217
5218define void @big01(i64 %i) nounwind {
5219; LINUX-64-STATIC-LABEL: big01:
5220; LINUX-64-STATIC:       # %bb.0: # %entry
5221; LINUX-64-STATIC-NEXT:    leaq dst+262144(,%rdi,4), %rax
5222; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
5223; LINUX-64-STATIC-NEXT:    retq
5224;
5225; LINUX-32-STATIC-LABEL: big01:
5226; LINUX-32-STATIC:       # %bb.0: # %entry
5227; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5228; LINUX-32-STATIC-NEXT:    leal dst+262144(,%eax,4), %eax
5229; LINUX-32-STATIC-NEXT:    movl %eax, ptr
5230; LINUX-32-STATIC-NEXT:    retl
5231;
5232; LINUX-32-PIC-LABEL: big01:
5233; LINUX-32-PIC:       # %bb.0: # %entry
5234; LINUX-32-PIC-NEXT:    calll .L58$pb
5235; LINUX-32-PIC-NEXT:  .L58$pb:
5236; LINUX-32-PIC-NEXT:    popl %eax
5237; LINUX-32-PIC-NEXT:  .Ltmp58:
5238; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp58-.L58$pb), %eax
5239; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5240; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %edx
5241; LINUX-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
5242; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
5243; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
5244; LINUX-32-PIC-NEXT:    retl
5245;
5246; LINUX-64-PIC-LABEL: big01:
5247; LINUX-64-PIC:       # %bb.0: # %entry
5248; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
5249; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5250; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
5251; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
5252; LINUX-64-PIC-NEXT:    retq
5253;
5254; DARWIN-32-STATIC-LABEL: big01:
5255; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5256; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5257; DARWIN-32-STATIC-NEXT:    leal _dst+262144(,%eax,4), %eax
5258; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
5259; DARWIN-32-STATIC-NEXT:    retl
5260;
5261; DARWIN-32-DYNAMIC-LABEL: big01:
5262; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5263; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5264; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
5265; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
5266; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
5267; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
5268; DARWIN-32-DYNAMIC-NEXT:    retl
5269;
5270; DARWIN-32-PIC-LABEL: big01:
5271; DARWIN-32-PIC:       ## %bb.0: ## %entry
5272; DARWIN-32-PIC-NEXT:    calll L58$pb
5273; DARWIN-32-PIC-NEXT:  L58$pb:
5274; DARWIN-32-PIC-NEXT:    popl %eax
5275; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5276; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L58$pb(%eax), %edx
5277; DARWIN-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
5278; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L58$pb(%eax), %eax
5279; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
5280; DARWIN-32-PIC-NEXT:    retl
5281;
5282; DARWIN-64-STATIC-LABEL: big01:
5283; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5284; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
5285; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5286; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5287; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
5288; DARWIN-64-STATIC-NEXT:    retq
5289;
5290; DARWIN-64-DYNAMIC-LABEL: big01:
5291; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5292; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
5293; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5294; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5295; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
5296; DARWIN-64-DYNAMIC-NEXT:    retq
5297;
5298; DARWIN-64-PIC-LABEL: big01:
5299; DARWIN-64-PIC:       ## %bb.0: ## %entry
5300; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
5301; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5302; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5303; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
5304; DARWIN-64-PIC-NEXT:    retq
5305
5306entry:
5307	%.sum = add i64 %i, 65536
5308	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
5309	store i32* %0, i32** @ptr, align 8
5310	ret void
5311}
5312
5313define void @big02(i64 %i) nounwind {
5314; LINUX-64-STATIC-LABEL: big02:
5315; LINUX-64-STATIC:       # %bb.0: # %entry
5316; LINUX-64-STATIC-NEXT:    movl src+262144(,%rdi,4), %eax
5317; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
5318; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5319; LINUX-64-STATIC-NEXT:    retq
5320;
5321; LINUX-32-STATIC-LABEL: big02:
5322; LINUX-32-STATIC:       # %bb.0: # %entry
5323; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5324; LINUX-32-STATIC-NEXT:    movl src+262144(,%eax,4), %ecx
5325; LINUX-32-STATIC-NEXT:    movl ptr, %edx
5326; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5327; LINUX-32-STATIC-NEXT:    retl
5328;
5329; LINUX-32-PIC-LABEL: big02:
5330; LINUX-32-PIC:       # %bb.0: # %entry
5331; LINUX-32-PIC-NEXT:    calll .L59$pb
5332; LINUX-32-PIC-NEXT:  .L59$pb:
5333; LINUX-32-PIC-NEXT:    popl %eax
5334; LINUX-32-PIC-NEXT:  .Ltmp59:
5335; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp59-.L59$pb), %eax
5336; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5337; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
5338; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5339; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
5340; LINUX-32-PIC-NEXT:    movl (%eax), %eax
5341; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5342; LINUX-32-PIC-NEXT:    retl
5343;
5344; LINUX-64-PIC-LABEL: big02:
5345; LINUX-64-PIC:       # %bb.0: # %entry
5346; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
5347; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5348; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
5349; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
5350; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5351; LINUX-64-PIC-NEXT:    retq
5352;
5353; DARWIN-32-STATIC-LABEL: big02:
5354; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5355; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5356; DARWIN-32-STATIC-NEXT:    movl _src+262144(,%eax,4), %ecx
5357; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
5358; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5359; DARWIN-32-STATIC-NEXT:    retl
5360;
5361; DARWIN-32-DYNAMIC-LABEL: big02:
5362; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5363; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5364; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
5365; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%ecx,%eax,4), %ecx
5366; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
5367; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
5368; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5369; DARWIN-32-DYNAMIC-NEXT:    retl
5370;
5371; DARWIN-32-PIC-LABEL: big02:
5372; DARWIN-32-PIC:       ## %bb.0: ## %entry
5373; DARWIN-32-PIC-NEXT:    calll L59$pb
5374; DARWIN-32-PIC-NEXT:  L59$pb:
5375; DARWIN-32-PIC-NEXT:    popl %eax
5376; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5377; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L59$pb(%eax), %edx
5378; DARWIN-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5379; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L59$pb(%eax), %eax
5380; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
5381; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5382; DARWIN-32-PIC-NEXT:    retl
5383;
5384; DARWIN-64-STATIC-LABEL: big02:
5385; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5386; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5387; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5388; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5389; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
5390; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5391; DARWIN-64-STATIC-NEXT:    retq
5392;
5393; DARWIN-64-DYNAMIC-LABEL: big02:
5394; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5395; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5396; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5397; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5398; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
5399; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5400; DARWIN-64-DYNAMIC-NEXT:    retq
5401;
5402; DARWIN-64-PIC-LABEL: big02:
5403; DARWIN-64-PIC:       ## %bb.0: ## %entry
5404; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5405; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5406; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5407; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
5408; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5409; DARWIN-64-PIC-NEXT:    retq
5410
5411entry:
5412	%0 = load i32*, i32** @ptr, align 8
5413	%1 = add i64 %i, 65536
5414	%2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
5415	%3 = load i32, i32* %2, align 4
5416	%4 = getelementptr i32, i32* %0, i64 %1
5417	store i32 %3, i32* %4, align 4
5418	ret void
5419}
5420
5421define void @big03(i64 %i) nounwind {
5422; LINUX-64-STATIC-LABEL: big03:
5423; LINUX-64-STATIC:       # %bb.0: # %entry
5424; LINUX-64-STATIC-NEXT:    movl dsrc+262144(,%rdi,4), %eax
5425; LINUX-64-STATIC-NEXT:    movl %eax, ddst+262144(,%rdi,4)
5426; LINUX-64-STATIC-NEXT:    retq
5427;
5428; LINUX-32-STATIC-LABEL: big03:
5429; LINUX-32-STATIC:       # %bb.0: # %entry
5430; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5431; LINUX-32-STATIC-NEXT:    movl dsrc+262144(,%eax,4), %ecx
5432; LINUX-32-STATIC-NEXT:    movl %ecx, ddst+262144(,%eax,4)
5433; LINUX-32-STATIC-NEXT:    retl
5434;
5435; LINUX-32-PIC-LABEL: big03:
5436; LINUX-32-PIC:       # %bb.0: # %entry
5437; LINUX-32-PIC-NEXT:    calll .L60$pb
5438; LINUX-32-PIC-NEXT:  .L60$pb:
5439; LINUX-32-PIC-NEXT:    popl %eax
5440; LINUX-32-PIC-NEXT:  .Ltmp60:
5441; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp60-.L60$pb), %eax
5442; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5443; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
5444; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5445; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
5446; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5447; LINUX-32-PIC-NEXT:    retl
5448;
5449; LINUX-64-PIC-LABEL: big03:
5450; LINUX-64-PIC:       # %bb.0: # %entry
5451; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
5452; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5453; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
5454; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5455; LINUX-64-PIC-NEXT:    retq
5456;
5457; DARWIN-32-STATIC-LABEL: big03:
5458; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5459; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5460; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
5461; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst+262144(,%eax,4)
5462; DARWIN-32-STATIC-NEXT:    retl
5463;
5464; DARWIN-32-DYNAMIC-LABEL: big03:
5465; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5466; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5467; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
5468; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst+262144(,%eax,4)
5469; DARWIN-32-DYNAMIC-NEXT:    retl
5470;
5471; DARWIN-32-PIC-LABEL: big03:
5472; DARWIN-32-PIC:       ## %bb.0: ## %entry
5473; DARWIN-32-PIC-NEXT:    calll L60$pb
5474; DARWIN-32-PIC-NEXT:  L60$pb:
5475; DARWIN-32-PIC-NEXT:    popl %eax
5476; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5477; DARWIN-32-PIC-NEXT:    movl (_dsrc-L60$pb)+262144(%eax,%ecx,4), %edx
5478; DARWIN-32-PIC-NEXT:    movl %edx, (_ddst-L60$pb)+262144(%eax,%ecx,4)
5479; DARWIN-32-PIC-NEXT:    retl
5480;
5481; DARWIN-64-STATIC-LABEL: big03:
5482; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5483; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
5484; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5485; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
5486; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5487; DARWIN-64-STATIC-NEXT:    retq
5488;
5489; DARWIN-64-DYNAMIC-LABEL: big03:
5490; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5491; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
5492; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5493; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
5494; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5495; DARWIN-64-DYNAMIC-NEXT:    retq
5496;
5497; DARWIN-64-PIC-LABEL: big03:
5498; DARWIN-64-PIC:       ## %bb.0: ## %entry
5499; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
5500; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5501; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
5502; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5503; DARWIN-64-PIC-NEXT:    retq
5504
5505entry:
5506	%0 = add i64 %i, 65536
5507	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
5508	%2 = load i32, i32* %1, align 4
5509	%3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
5510	store i32 %2, i32* %3, align 4
5511	ret void
5512}
5513
5514define void @big04(i64 %i) nounwind {
5515; LINUX-64-STATIC-LABEL: big04:
5516; LINUX-64-STATIC:       # %bb.0: # %entry
5517; LINUX-64-STATIC-NEXT:    leaq ddst+262144(,%rdi,4), %rax
5518; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
5519; LINUX-64-STATIC-NEXT:    retq
5520;
5521; LINUX-32-STATIC-LABEL: big04:
5522; LINUX-32-STATIC:       # %bb.0: # %entry
5523; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5524; LINUX-32-STATIC-NEXT:    leal ddst+262144(,%eax,4), %eax
5525; LINUX-32-STATIC-NEXT:    movl %eax, dptr
5526; LINUX-32-STATIC-NEXT:    retl
5527;
5528; LINUX-32-PIC-LABEL: big04:
5529; LINUX-32-PIC:       # %bb.0: # %entry
5530; LINUX-32-PIC-NEXT:    calll .L61$pb
5531; LINUX-32-PIC-NEXT:  .L61$pb:
5532; LINUX-32-PIC-NEXT:    popl %eax
5533; LINUX-32-PIC-NEXT:  .Ltmp61:
5534; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp61-.L61$pb), %eax
5535; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5536; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %edx
5537; LINUX-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
5538; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
5539; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
5540; LINUX-32-PIC-NEXT:    retl
5541;
5542; LINUX-64-PIC-LABEL: big04:
5543; LINUX-64-PIC:       # %bb.0: # %entry
5544; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
5545; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5546; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
5547; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
5548; LINUX-64-PIC-NEXT:    retq
5549;
5550; DARWIN-32-STATIC-LABEL: big04:
5551; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5552; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5553; DARWIN-32-STATIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
5554; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
5555; DARWIN-32-STATIC-NEXT:    retl
5556;
5557; DARWIN-32-DYNAMIC-LABEL: big04:
5558; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5559; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5560; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
5561; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
5562; DARWIN-32-DYNAMIC-NEXT:    retl
5563;
5564; DARWIN-32-PIC-LABEL: big04:
5565; DARWIN-32-PIC:       ## %bb.0: ## %entry
5566; DARWIN-32-PIC-NEXT:    calll L61$pb
5567; DARWIN-32-PIC-NEXT:  L61$pb:
5568; DARWIN-32-PIC-NEXT:    popl %eax
5569; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5570; DARWIN-32-PIC-NEXT:    leal (_ddst-L61$pb)+262144(%eax,%ecx,4), %ecx
5571; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L61$pb(%eax)
5572; DARWIN-32-PIC-NEXT:    retl
5573;
5574; DARWIN-64-STATIC-LABEL: big04:
5575; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5576; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
5577; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5578; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
5579; DARWIN-64-STATIC-NEXT:    retq
5580;
5581; DARWIN-64-DYNAMIC-LABEL: big04:
5582; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5583; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
5584; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5585; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
5586; DARWIN-64-DYNAMIC-NEXT:    retq
5587;
5588; DARWIN-64-PIC-LABEL: big04:
5589; DARWIN-64-PIC:       ## %bb.0: ## %entry
5590; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
5591; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5592; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
5593; DARWIN-64-PIC-NEXT:    retq
5594
5595entry:
5596	%.sum = add i64 %i, 65536
5597	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
5598	store i32* %0, i32** @dptr, align 8
5599	ret void
5600}
5601
5602define void @big05(i64 %i) nounwind {
5603; LINUX-64-STATIC-LABEL: big05:
5604; LINUX-64-STATIC:       # %bb.0: # %entry
5605; LINUX-64-STATIC-NEXT:    movl dsrc+262144(,%rdi,4), %eax
5606; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
5607; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5608; LINUX-64-STATIC-NEXT:    retq
5609;
5610; LINUX-32-STATIC-LABEL: big05:
5611; LINUX-32-STATIC:       # %bb.0: # %entry
5612; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5613; LINUX-32-STATIC-NEXT:    movl dsrc+262144(,%eax,4), %ecx
5614; LINUX-32-STATIC-NEXT:    movl dptr, %edx
5615; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5616; LINUX-32-STATIC-NEXT:    retl
5617;
5618; LINUX-32-PIC-LABEL: big05:
5619; LINUX-32-PIC:       # %bb.0: # %entry
5620; LINUX-32-PIC-NEXT:    calll .L62$pb
5621; LINUX-32-PIC-NEXT:  .L62$pb:
5622; LINUX-32-PIC-NEXT:    popl %eax
5623; LINUX-32-PIC-NEXT:  .Ltmp62:
5624; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp62-.L62$pb), %eax
5625; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5626; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
5627; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5628; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
5629; LINUX-32-PIC-NEXT:    movl (%eax), %eax
5630; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5631; LINUX-32-PIC-NEXT:    retl
5632;
5633; LINUX-64-PIC-LABEL: big05:
5634; LINUX-64-PIC:       # %bb.0: # %entry
5635; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
5636; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5637; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
5638; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
5639; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5640; LINUX-64-PIC-NEXT:    retq
5641;
5642; DARWIN-32-STATIC-LABEL: big05:
5643; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5644; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5645; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
5646; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
5647; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5648; DARWIN-32-STATIC-NEXT:    retl
5649;
5650; DARWIN-32-DYNAMIC-LABEL: big05:
5651; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5652; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5653; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
5654; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
5655; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5656; DARWIN-32-DYNAMIC-NEXT:    retl
5657;
5658; DARWIN-32-PIC-LABEL: big05:
5659; DARWIN-32-PIC:       ## %bb.0: ## %entry
5660; DARWIN-32-PIC-NEXT:    calll L62$pb
5661; DARWIN-32-PIC-NEXT:  L62$pb:
5662; DARWIN-32-PIC-NEXT:    popl %eax
5663; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5664; DARWIN-32-PIC-NEXT:    movl (_dsrc-L62$pb)+262144(%eax,%ecx,4), %edx
5665; DARWIN-32-PIC-NEXT:    movl _dptr-L62$pb(%eax), %eax
5666; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5667; DARWIN-32-PIC-NEXT:    retl
5668;
5669; DARWIN-64-STATIC-LABEL: big05:
5670; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5671; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
5672; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5673; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
5674; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5675; DARWIN-64-STATIC-NEXT:    retq
5676;
5677; DARWIN-64-DYNAMIC-LABEL: big05:
5678; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5679; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
5680; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5681; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
5682; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5683; DARWIN-64-DYNAMIC-NEXT:    retq
5684;
5685; DARWIN-64-PIC-LABEL: big05:
5686; DARWIN-64-PIC:       ## %bb.0: ## %entry
5687; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
5688; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5689; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
5690; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5691; DARWIN-64-PIC-NEXT:    retq
5692
5693entry:
5694	%0 = load i32*, i32** @dptr, align 8
5695	%1 = add i64 %i, 65536
5696	%2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
5697	%3 = load i32, i32* %2, align 4
5698	%4 = getelementptr i32, i32* %0, i64 %1
5699	store i32 %3, i32* %4, align 4
5700	ret void
5701}
5702
5703define void @big06(i64 %i) nounwind {
5704; LINUX-64-STATIC-LABEL: big06:
5705; LINUX-64-STATIC:       # %bb.0: # %entry
5706; LINUX-64-STATIC-NEXT:    movl lsrc+262144(,%rdi,4), %eax
5707; LINUX-64-STATIC-NEXT:    movl %eax, ldst+262144(,%rdi,4)
5708; LINUX-64-STATIC-NEXT:    retq
5709;
5710; LINUX-32-STATIC-LABEL: big06:
5711; LINUX-32-STATIC:       # %bb.0: # %entry
5712; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5713; LINUX-32-STATIC-NEXT:    movl lsrc+262144(,%eax,4), %ecx
5714; LINUX-32-STATIC-NEXT:    movl %ecx, ldst+262144(,%eax,4)
5715; LINUX-32-STATIC-NEXT:    retl
5716;
5717; LINUX-32-PIC-LABEL: big06:
5718; LINUX-32-PIC:       # %bb.0: # %entry
5719; LINUX-32-PIC-NEXT:    calll .L63$pb
5720; LINUX-32-PIC-NEXT:  .L63$pb:
5721; LINUX-32-PIC-NEXT:    popl %eax
5722; LINUX-32-PIC-NEXT:  .Ltmp63:
5723; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp63-.L63$pb), %eax
5724; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5725; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax,%ecx,4), %edx
5726; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF+262144(%eax,%ecx,4)
5727; LINUX-32-PIC-NEXT:    retl
5728;
5729; LINUX-64-PIC-LABEL: big06:
5730; LINUX-64-PIC:       # %bb.0: # %entry
5731; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
5732; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5733; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
5734; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5735; LINUX-64-PIC-NEXT:    retq
5736;
5737; DARWIN-32-STATIC-LABEL: big06:
5738; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5739; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5740; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
5741; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst+262144(,%eax,4)
5742; DARWIN-32-STATIC-NEXT:    retl
5743;
5744; DARWIN-32-DYNAMIC-LABEL: big06:
5745; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5746; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5747; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
5748; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst+262144(,%eax,4)
5749; DARWIN-32-DYNAMIC-NEXT:    retl
5750;
5751; DARWIN-32-PIC-LABEL: big06:
5752; DARWIN-32-PIC:       ## %bb.0: ## %entry
5753; DARWIN-32-PIC-NEXT:    calll L63$pb
5754; DARWIN-32-PIC-NEXT:  L63$pb:
5755; DARWIN-32-PIC-NEXT:    popl %eax
5756; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5757; DARWIN-32-PIC-NEXT:    movl (_lsrc-L63$pb)+262144(%eax,%ecx,4), %edx
5758; DARWIN-32-PIC-NEXT:    movl %edx, (_ldst-L63$pb)+262144(%eax,%ecx,4)
5759; DARWIN-32-PIC-NEXT:    retl
5760;
5761; DARWIN-64-STATIC-LABEL: big06:
5762; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5763; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
5764; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5765; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
5766; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5767; DARWIN-64-STATIC-NEXT:    retq
5768;
5769; DARWIN-64-DYNAMIC-LABEL: big06:
5770; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5771; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
5772; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5773; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
5774; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5775; DARWIN-64-DYNAMIC-NEXT:    retq
5776;
5777; DARWIN-64-PIC-LABEL: big06:
5778; DARWIN-64-PIC:       ## %bb.0: ## %entry
5779; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
5780; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5781; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
5782; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5783; DARWIN-64-PIC-NEXT:    retq
5784
5785entry:
5786	%0 = add i64 %i, 65536
5787	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
5788	%2 = load i32, i32* %1, align 4
5789	%3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
5790	store i32 %2, i32* %3, align 4
5791	ret void
5792}
5793
5794define void @big07(i64 %i) nounwind {
5795; LINUX-64-STATIC-LABEL: big07:
5796; LINUX-64-STATIC:       # %bb.0: # %entry
5797; LINUX-64-STATIC-NEXT:    leaq ldst+262144(,%rdi,4), %rax
5798; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
5799; LINUX-64-STATIC-NEXT:    retq
5800;
5801; LINUX-32-STATIC-LABEL: big07:
5802; LINUX-32-STATIC:       # %bb.0: # %entry
5803; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5804; LINUX-32-STATIC-NEXT:    leal ldst+262144(,%eax,4), %eax
5805; LINUX-32-STATIC-NEXT:    movl %eax, lptr
5806; LINUX-32-STATIC-NEXT:    retl
5807;
5808; LINUX-32-PIC-LABEL: big07:
5809; LINUX-32-PIC:       # %bb.0: # %entry
5810; LINUX-32-PIC-NEXT:    calll .L64$pb
5811; LINUX-32-PIC-NEXT:  .L64$pb:
5812; LINUX-32-PIC-NEXT:    popl %eax
5813; LINUX-32-PIC-NEXT:  .Ltmp64:
5814; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp64-.L64$pb), %eax
5815; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5816; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax,%ecx,4), %ecx
5817; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
5818; LINUX-32-PIC-NEXT:    retl
5819;
5820; LINUX-64-PIC-LABEL: big07:
5821; LINUX-64-PIC:       # %bb.0: # %entry
5822; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
5823; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5824; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
5825; LINUX-64-PIC-NEXT:    retq
5826;
5827; DARWIN-32-STATIC-LABEL: big07:
5828; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5829; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5830; DARWIN-32-STATIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
5831; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
5832; DARWIN-32-STATIC-NEXT:    retl
5833;
5834; DARWIN-32-DYNAMIC-LABEL: big07:
5835; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5836; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5837; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
5838; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
5839; DARWIN-32-DYNAMIC-NEXT:    retl
5840;
5841; DARWIN-32-PIC-LABEL: big07:
5842; DARWIN-32-PIC:       ## %bb.0: ## %entry
5843; DARWIN-32-PIC-NEXT:    calll L64$pb
5844; DARWIN-32-PIC-NEXT:  L64$pb:
5845; DARWIN-32-PIC-NEXT:    popl %eax
5846; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5847; DARWIN-32-PIC-NEXT:    leal (_ldst-L64$pb)+262144(%eax,%ecx,4), %ecx
5848; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L64$pb(%eax)
5849; DARWIN-32-PIC-NEXT:    retl
5850;
5851; DARWIN-64-STATIC-LABEL: big07:
5852; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5853; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
5854; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5855; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
5856; DARWIN-64-STATIC-NEXT:    retq
5857;
5858; DARWIN-64-DYNAMIC-LABEL: big07:
5859; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5860; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
5861; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5862; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
5863; DARWIN-64-DYNAMIC-NEXT:    retq
5864;
5865; DARWIN-64-PIC-LABEL: big07:
5866; DARWIN-64-PIC:       ## %bb.0: ## %entry
5867; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
5868; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5869; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
5870; DARWIN-64-PIC-NEXT:    retq
5871
5872entry:
5873	%.sum = add i64 %i, 65536
5874	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
5875	store i32* %0, i32** @lptr, align 8
5876	ret void
5877}
5878
5879define void @big08(i64 %i) nounwind {
5880; LINUX-64-STATIC-LABEL: big08:
5881; LINUX-64-STATIC:       # %bb.0: # %entry
5882; LINUX-64-STATIC-NEXT:    movl lsrc+262144(,%rdi,4), %eax
5883; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
5884; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5885; LINUX-64-STATIC-NEXT:    retq
5886;
5887; LINUX-32-STATIC-LABEL: big08:
5888; LINUX-32-STATIC:       # %bb.0: # %entry
5889; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5890; LINUX-32-STATIC-NEXT:    movl lsrc+262144(,%eax,4), %ecx
5891; LINUX-32-STATIC-NEXT:    movl lptr, %edx
5892; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5893; LINUX-32-STATIC-NEXT:    retl
5894;
5895; LINUX-32-PIC-LABEL: big08:
5896; LINUX-32-PIC:       # %bb.0: # %entry
5897; LINUX-32-PIC-NEXT:    calll .L65$pb
5898; LINUX-32-PIC-NEXT:  .L65$pb:
5899; LINUX-32-PIC-NEXT:    popl %eax
5900; LINUX-32-PIC-NEXT:  .Ltmp65:
5901; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp65-.L65$pb), %eax
5902; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5903; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax,%ecx,4), %edx
5904; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
5905; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5906; LINUX-32-PIC-NEXT:    retl
5907;
5908; LINUX-64-PIC-LABEL: big08:
5909; LINUX-64-PIC:       # %bb.0: # %entry
5910; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
5911; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5912; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
5913; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5914; LINUX-64-PIC-NEXT:    retq
5915;
5916; DARWIN-32-STATIC-LABEL: big08:
5917; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5918; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5919; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
5920; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
5921; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5922; DARWIN-32-STATIC-NEXT:    retl
5923;
5924; DARWIN-32-DYNAMIC-LABEL: big08:
5925; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5926; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5927; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
5928; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
5929; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5930; DARWIN-32-DYNAMIC-NEXT:    retl
5931;
5932; DARWIN-32-PIC-LABEL: big08:
5933; DARWIN-32-PIC:       ## %bb.0: ## %entry
5934; DARWIN-32-PIC-NEXT:    calll L65$pb
5935; DARWIN-32-PIC-NEXT:  L65$pb:
5936; DARWIN-32-PIC-NEXT:    popl %eax
5937; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5938; DARWIN-32-PIC-NEXT:    movl (_lsrc-L65$pb)+262144(%eax,%ecx,4), %edx
5939; DARWIN-32-PIC-NEXT:    movl _lptr-L65$pb(%eax), %eax
5940; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5941; DARWIN-32-PIC-NEXT:    retl
5942;
5943; DARWIN-64-STATIC-LABEL: big08:
5944; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5945; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
5946; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5947; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
5948; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5949; DARWIN-64-STATIC-NEXT:    retq
5950;
5951; DARWIN-64-DYNAMIC-LABEL: big08:
5952; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5953; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
5954; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5955; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
5956; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5957; DARWIN-64-DYNAMIC-NEXT:    retq
5958;
5959; DARWIN-64-PIC-LABEL: big08:
5960; DARWIN-64-PIC:       ## %bb.0: ## %entry
5961; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
5962; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5963; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
5964; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5965; DARWIN-64-PIC-NEXT:    retq
5966
5967entry:
5968	%0 = load i32*, i32** @lptr, align 8
5969	%1 = add i64 %i, 65536
5970	%2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
5971	%3 = load i32, i32* %2, align 4
5972	%4 = getelementptr i32, i32* %0, i64 %1
5973	store i32 %3, i32* %4, align 4
5974	ret void
5975}
5976
5977define i8* @bar00() nounwind {
5978; LINUX-64-STATIC-LABEL: bar00:
5979; LINUX-64-STATIC:       # %bb.0: # %entry
5980; LINUX-64-STATIC-NEXT:    movl $src, %eax
5981; LINUX-64-STATIC-NEXT:    retq
5982;
5983; LINUX-32-STATIC-LABEL: bar00:
5984; LINUX-32-STATIC:       # %bb.0: # %entry
5985; LINUX-32-STATIC-NEXT:    movl $src, %eax
5986; LINUX-32-STATIC-NEXT:    retl
5987;
5988; LINUX-32-PIC-LABEL: bar00:
5989; LINUX-32-PIC:       # %bb.0: # %entry
5990; LINUX-32-PIC-NEXT:    calll .L66$pb
5991; LINUX-32-PIC-NEXT:  .L66$pb:
5992; LINUX-32-PIC-NEXT:    popl %eax
5993; LINUX-32-PIC-NEXT:  .Ltmp66:
5994; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp66-.L66$pb), %eax
5995; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
5996; LINUX-32-PIC-NEXT:    retl
5997;
5998; LINUX-64-PIC-LABEL: bar00:
5999; LINUX-64-PIC:       # %bb.0: # %entry
6000; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
6001; LINUX-64-PIC-NEXT:    retq
6002;
6003; DARWIN-32-STATIC-LABEL: bar00:
6004; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6005; DARWIN-32-STATIC-NEXT:    movl $_src, %eax
6006; DARWIN-32-STATIC-NEXT:    retl
6007;
6008; DARWIN-32-DYNAMIC-LABEL: bar00:
6009; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6010; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
6011; DARWIN-32-DYNAMIC-NEXT:    retl
6012;
6013; DARWIN-32-PIC-LABEL: bar00:
6014; DARWIN-32-PIC:       ## %bb.0: ## %entry
6015; DARWIN-32-PIC-NEXT:    calll L66$pb
6016; DARWIN-32-PIC-NEXT:  L66$pb:
6017; DARWIN-32-PIC-NEXT:    popl %eax
6018; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L66$pb(%eax), %eax
6019; DARWIN-32-PIC-NEXT:    retl
6020;
6021; DARWIN-64-STATIC-LABEL: bar00:
6022; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6023; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6024; DARWIN-64-STATIC-NEXT:    retq
6025;
6026; DARWIN-64-DYNAMIC-LABEL: bar00:
6027; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6028; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6029; DARWIN-64-DYNAMIC-NEXT:    retq
6030;
6031; DARWIN-64-PIC-LABEL: bar00:
6032; DARWIN-64-PIC:       ## %bb.0: ## %entry
6033; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6034; DARWIN-64-PIC-NEXT:    retq
6035
6036entry:
6037	ret i8* bitcast ([131072 x i32]* @src to i8*)
6038}
6039
6040define i8* @bxr00() nounwind {
6041; LINUX-64-STATIC-LABEL: bxr00:
6042; LINUX-64-STATIC:       # %bb.0: # %entry
6043; LINUX-64-STATIC-NEXT:    movl $xsrc, %eax
6044; LINUX-64-STATIC-NEXT:    retq
6045;
6046; LINUX-32-STATIC-LABEL: bxr00:
6047; LINUX-32-STATIC:       # %bb.0: # %entry
6048; LINUX-32-STATIC-NEXT:    movl $xsrc, %eax
6049; LINUX-32-STATIC-NEXT:    retl
6050;
6051; LINUX-32-PIC-LABEL: bxr00:
6052; LINUX-32-PIC:       # %bb.0: # %entry
6053; LINUX-32-PIC-NEXT:    calll .L67$pb
6054; LINUX-32-PIC-NEXT:  .L67$pb:
6055; LINUX-32-PIC-NEXT:    popl %eax
6056; LINUX-32-PIC-NEXT:  .Ltmp67:
6057; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp67-.L67$pb), %eax
6058; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
6059; LINUX-32-PIC-NEXT:    retl
6060;
6061; LINUX-64-PIC-LABEL: bxr00:
6062; LINUX-64-PIC:       # %bb.0: # %entry
6063; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
6064; LINUX-64-PIC-NEXT:    retq
6065;
6066; DARWIN-32-STATIC-LABEL: bxr00:
6067; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6068; DARWIN-32-STATIC-NEXT:    movl $_xsrc, %eax
6069; DARWIN-32-STATIC-NEXT:    retl
6070;
6071; DARWIN-32-DYNAMIC-LABEL: bxr00:
6072; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6073; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
6074; DARWIN-32-DYNAMIC-NEXT:    retl
6075;
6076; DARWIN-32-PIC-LABEL: bxr00:
6077; DARWIN-32-PIC:       ## %bb.0: ## %entry
6078; DARWIN-32-PIC-NEXT:    calll L67$pb
6079; DARWIN-32-PIC-NEXT:  L67$pb:
6080; DARWIN-32-PIC-NEXT:    popl %eax
6081; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L67$pb(%eax), %eax
6082; DARWIN-32-PIC-NEXT:    retl
6083;
6084; DARWIN-64-STATIC-LABEL: bxr00:
6085; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6086; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6087; DARWIN-64-STATIC-NEXT:    retq
6088;
6089; DARWIN-64-DYNAMIC-LABEL: bxr00:
6090; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6091; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6092; DARWIN-64-DYNAMIC-NEXT:    retq
6093;
6094; DARWIN-64-PIC-LABEL: bxr00:
6095; DARWIN-64-PIC:       ## %bb.0: ## %entry
6096; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6097; DARWIN-64-PIC-NEXT:    retq
6098
6099entry:
6100	ret i8* bitcast ([32 x i32]* @xsrc to i8*)
6101}
6102
6103define i8* @bar01() nounwind {
6104; LINUX-64-STATIC-LABEL: bar01:
6105; LINUX-64-STATIC:       # %bb.0: # %entry
6106; LINUX-64-STATIC-NEXT:    movl $dst, %eax
6107; LINUX-64-STATIC-NEXT:    retq
6108;
6109; LINUX-32-STATIC-LABEL: bar01:
6110; LINUX-32-STATIC:       # %bb.0: # %entry
6111; LINUX-32-STATIC-NEXT:    movl $dst, %eax
6112; LINUX-32-STATIC-NEXT:    retl
6113;
6114; LINUX-32-PIC-LABEL: bar01:
6115; LINUX-32-PIC:       # %bb.0: # %entry
6116; LINUX-32-PIC-NEXT:    calll .L68$pb
6117; LINUX-32-PIC-NEXT:  .L68$pb:
6118; LINUX-32-PIC-NEXT:    popl %eax
6119; LINUX-32-PIC-NEXT:  .Ltmp68:
6120; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp68-.L68$pb), %eax
6121; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
6122; LINUX-32-PIC-NEXT:    retl
6123;
6124; LINUX-64-PIC-LABEL: bar01:
6125; LINUX-64-PIC:       # %bb.0: # %entry
6126; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
6127; LINUX-64-PIC-NEXT:    retq
6128;
6129; DARWIN-32-STATIC-LABEL: bar01:
6130; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6131; DARWIN-32-STATIC-NEXT:    movl $_dst, %eax
6132; DARWIN-32-STATIC-NEXT:    retl
6133;
6134; DARWIN-32-DYNAMIC-LABEL: bar01:
6135; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6136; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
6137; DARWIN-32-DYNAMIC-NEXT:    retl
6138;
6139; DARWIN-32-PIC-LABEL: bar01:
6140; DARWIN-32-PIC:       ## %bb.0: ## %entry
6141; DARWIN-32-PIC-NEXT:    calll L68$pb
6142; DARWIN-32-PIC-NEXT:  L68$pb:
6143; DARWIN-32-PIC-NEXT:    popl %eax
6144; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L68$pb(%eax), %eax
6145; DARWIN-32-PIC-NEXT:    retl
6146;
6147; DARWIN-64-STATIC-LABEL: bar01:
6148; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6149; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6150; DARWIN-64-STATIC-NEXT:    retq
6151;
6152; DARWIN-64-DYNAMIC-LABEL: bar01:
6153; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6154; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6155; DARWIN-64-DYNAMIC-NEXT:    retq
6156;
6157; DARWIN-64-PIC-LABEL: bar01:
6158; DARWIN-64-PIC:       ## %bb.0: ## %entry
6159; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6160; DARWIN-64-PIC-NEXT:    retq
6161
6162entry:
6163	ret i8* bitcast ([131072 x i32]* @dst to i8*)
6164}
6165
6166define i8* @bxr01() nounwind {
6167; LINUX-64-STATIC-LABEL: bxr01:
6168; LINUX-64-STATIC:       # %bb.0: # %entry
6169; LINUX-64-STATIC-NEXT:    movl $xdst, %eax
6170; LINUX-64-STATIC-NEXT:    retq
6171;
6172; LINUX-32-STATIC-LABEL: bxr01:
6173; LINUX-32-STATIC:       # %bb.0: # %entry
6174; LINUX-32-STATIC-NEXT:    movl $xdst, %eax
6175; LINUX-32-STATIC-NEXT:    retl
6176;
6177; LINUX-32-PIC-LABEL: bxr01:
6178; LINUX-32-PIC:       # %bb.0: # %entry
6179; LINUX-32-PIC-NEXT:    calll .L69$pb
6180; LINUX-32-PIC-NEXT:  .L69$pb:
6181; LINUX-32-PIC-NEXT:    popl %eax
6182; LINUX-32-PIC-NEXT:  .Ltmp69:
6183; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp69-.L69$pb), %eax
6184; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
6185; LINUX-32-PIC-NEXT:    retl
6186;
6187; LINUX-64-PIC-LABEL: bxr01:
6188; LINUX-64-PIC:       # %bb.0: # %entry
6189; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
6190; LINUX-64-PIC-NEXT:    retq
6191;
6192; DARWIN-32-STATIC-LABEL: bxr01:
6193; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6194; DARWIN-32-STATIC-NEXT:    movl $_xdst, %eax
6195; DARWIN-32-STATIC-NEXT:    retl
6196;
6197; DARWIN-32-DYNAMIC-LABEL: bxr01:
6198; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6199; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
6200; DARWIN-32-DYNAMIC-NEXT:    retl
6201;
6202; DARWIN-32-PIC-LABEL: bxr01:
6203; DARWIN-32-PIC:       ## %bb.0: ## %entry
6204; DARWIN-32-PIC-NEXT:    calll L69$pb
6205; DARWIN-32-PIC-NEXT:  L69$pb:
6206; DARWIN-32-PIC-NEXT:    popl %eax
6207; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L69$pb(%eax), %eax
6208; DARWIN-32-PIC-NEXT:    retl
6209;
6210; DARWIN-64-STATIC-LABEL: bxr01:
6211; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6212; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6213; DARWIN-64-STATIC-NEXT:    retq
6214;
6215; DARWIN-64-DYNAMIC-LABEL: bxr01:
6216; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6217; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6218; DARWIN-64-DYNAMIC-NEXT:    retq
6219;
6220; DARWIN-64-PIC-LABEL: bxr01:
6221; DARWIN-64-PIC:       ## %bb.0: ## %entry
6222; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6223; DARWIN-64-PIC-NEXT:    retq
6224
6225entry:
6226	ret i8* bitcast ([32 x i32]* @xdst to i8*)
6227}
6228
6229define i8* @bar02() nounwind {
6230; LINUX-64-STATIC-LABEL: bar02:
6231; LINUX-64-STATIC:       # %bb.0: # %entry
6232; LINUX-64-STATIC-NEXT:    movl $ptr, %eax
6233; LINUX-64-STATIC-NEXT:    retq
6234;
6235; LINUX-32-STATIC-LABEL: bar02:
6236; LINUX-32-STATIC:       # %bb.0: # %entry
6237; LINUX-32-STATIC-NEXT:    movl $ptr, %eax
6238; LINUX-32-STATIC-NEXT:    retl
6239;
6240; LINUX-32-PIC-LABEL: bar02:
6241; LINUX-32-PIC:       # %bb.0: # %entry
6242; LINUX-32-PIC-NEXT:    calll .L70$pb
6243; LINUX-32-PIC-NEXT:  .L70$pb:
6244; LINUX-32-PIC-NEXT:    popl %eax
6245; LINUX-32-PIC-NEXT:  .Ltmp70:
6246; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp70-.L70$pb), %eax
6247; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
6248; LINUX-32-PIC-NEXT:    retl
6249;
6250; LINUX-64-PIC-LABEL: bar02:
6251; LINUX-64-PIC:       # %bb.0: # %entry
6252; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
6253; LINUX-64-PIC-NEXT:    retq
6254;
6255; DARWIN-32-STATIC-LABEL: bar02:
6256; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6257; DARWIN-32-STATIC-NEXT:    movl $_ptr, %eax
6258; DARWIN-32-STATIC-NEXT:    retl
6259;
6260; DARWIN-32-DYNAMIC-LABEL: bar02:
6261; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6262; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
6263; DARWIN-32-DYNAMIC-NEXT:    retl
6264;
6265; DARWIN-32-PIC-LABEL: bar02:
6266; DARWIN-32-PIC:       ## %bb.0: ## %entry
6267; DARWIN-32-PIC-NEXT:    calll L70$pb
6268; DARWIN-32-PIC-NEXT:  L70$pb:
6269; DARWIN-32-PIC-NEXT:    popl %eax
6270; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L70$pb(%eax), %eax
6271; DARWIN-32-PIC-NEXT:    retl
6272;
6273; DARWIN-64-STATIC-LABEL: bar02:
6274; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6275; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6276; DARWIN-64-STATIC-NEXT:    retq
6277;
6278; DARWIN-64-DYNAMIC-LABEL: bar02:
6279; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6280; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6281; DARWIN-64-DYNAMIC-NEXT:    retq
6282;
6283; DARWIN-64-PIC-LABEL: bar02:
6284; DARWIN-64-PIC:       ## %bb.0: ## %entry
6285; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6286; DARWIN-64-PIC-NEXT:    retq
6287
6288entry:
6289	ret i8* bitcast (i32** @ptr to i8*)
6290}
6291
6292define i8* @bar03() nounwind {
6293; LINUX-64-STATIC-LABEL: bar03:
6294; LINUX-64-STATIC:       # %bb.0: # %entry
6295; LINUX-64-STATIC-NEXT:    movl $dsrc, %eax
6296; LINUX-64-STATIC-NEXT:    retq
6297;
6298; LINUX-32-STATIC-LABEL: bar03:
6299; LINUX-32-STATIC:       # %bb.0: # %entry
6300; LINUX-32-STATIC-NEXT:    movl $dsrc, %eax
6301; LINUX-32-STATIC-NEXT:    retl
6302;
6303; LINUX-32-PIC-LABEL: bar03:
6304; LINUX-32-PIC:       # %bb.0: # %entry
6305; LINUX-32-PIC-NEXT:    calll .L71$pb
6306; LINUX-32-PIC-NEXT:  .L71$pb:
6307; LINUX-32-PIC-NEXT:    popl %eax
6308; LINUX-32-PIC-NEXT:  .Ltmp71:
6309; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp71-.L71$pb), %eax
6310; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
6311; LINUX-32-PIC-NEXT:    retl
6312;
6313; LINUX-64-PIC-LABEL: bar03:
6314; LINUX-64-PIC:       # %bb.0: # %entry
6315; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
6316; LINUX-64-PIC-NEXT:    retq
6317;
6318; DARWIN-32-STATIC-LABEL: bar03:
6319; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6320; DARWIN-32-STATIC-NEXT:    movl $_dsrc, %eax
6321; DARWIN-32-STATIC-NEXT:    retl
6322;
6323; DARWIN-32-DYNAMIC-LABEL: bar03:
6324; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6325; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc, %eax
6326; DARWIN-32-DYNAMIC-NEXT:    retl
6327;
6328; DARWIN-32-PIC-LABEL: bar03:
6329; DARWIN-32-PIC:       ## %bb.0: ## %entry
6330; DARWIN-32-PIC-NEXT:    calll L71$pb
6331; DARWIN-32-PIC-NEXT:  L71$pb:
6332; DARWIN-32-PIC-NEXT:    popl %eax
6333; DARWIN-32-PIC-NEXT:    leal _dsrc-L71$pb(%eax), %eax
6334; DARWIN-32-PIC-NEXT:    retl
6335;
6336; DARWIN-64-STATIC-LABEL: bar03:
6337; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6338; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
6339; DARWIN-64-STATIC-NEXT:    retq
6340;
6341; DARWIN-64-DYNAMIC-LABEL: bar03:
6342; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6343; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
6344; DARWIN-64-DYNAMIC-NEXT:    retq
6345;
6346; DARWIN-64-PIC-LABEL: bar03:
6347; DARWIN-64-PIC:       ## %bb.0: ## %entry
6348; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
6349; DARWIN-64-PIC-NEXT:    retq
6350
6351entry:
6352	ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
6353}
6354
6355define i8* @bar04() nounwind {
6356; LINUX-64-STATIC-LABEL: bar04:
6357; LINUX-64-STATIC:       # %bb.0: # %entry
6358; LINUX-64-STATIC-NEXT:    movl $ddst, %eax
6359; LINUX-64-STATIC-NEXT:    retq
6360;
6361; LINUX-32-STATIC-LABEL: bar04:
6362; LINUX-32-STATIC:       # %bb.0: # %entry
6363; LINUX-32-STATIC-NEXT:    movl $ddst, %eax
6364; LINUX-32-STATIC-NEXT:    retl
6365;
6366; LINUX-32-PIC-LABEL: bar04:
6367; LINUX-32-PIC:       # %bb.0: # %entry
6368; LINUX-32-PIC-NEXT:    calll .L72$pb
6369; LINUX-32-PIC-NEXT:  .L72$pb:
6370; LINUX-32-PIC-NEXT:    popl %eax
6371; LINUX-32-PIC-NEXT:  .Ltmp72:
6372; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp72-.L72$pb), %eax
6373; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
6374; LINUX-32-PIC-NEXT:    retl
6375;
6376; LINUX-64-PIC-LABEL: bar04:
6377; LINUX-64-PIC:       # %bb.0: # %entry
6378; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
6379; LINUX-64-PIC-NEXT:    retq
6380;
6381; DARWIN-32-STATIC-LABEL: bar04:
6382; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6383; DARWIN-32-STATIC-NEXT:    movl $_ddst, %eax
6384; DARWIN-32-STATIC-NEXT:    retl
6385;
6386; DARWIN-32-DYNAMIC-LABEL: bar04:
6387; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6388; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, %eax
6389; DARWIN-32-DYNAMIC-NEXT:    retl
6390;
6391; DARWIN-32-PIC-LABEL: bar04:
6392; DARWIN-32-PIC:       ## %bb.0: ## %entry
6393; DARWIN-32-PIC-NEXT:    calll L72$pb
6394; DARWIN-32-PIC-NEXT:  L72$pb:
6395; DARWIN-32-PIC-NEXT:    popl %eax
6396; DARWIN-32-PIC-NEXT:    leal _ddst-L72$pb(%eax), %eax
6397; DARWIN-32-PIC-NEXT:    retl
6398;
6399; DARWIN-64-STATIC-LABEL: bar04:
6400; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6401; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
6402; DARWIN-64-STATIC-NEXT:    retq
6403;
6404; DARWIN-64-DYNAMIC-LABEL: bar04:
6405; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6406; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
6407; DARWIN-64-DYNAMIC-NEXT:    retq
6408;
6409; DARWIN-64-PIC-LABEL: bar04:
6410; DARWIN-64-PIC:       ## %bb.0: ## %entry
6411; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
6412; DARWIN-64-PIC-NEXT:    retq
6413
6414entry:
6415	ret i8* bitcast ([131072 x i32]* @ddst to i8*)
6416}
6417
6418define i8* @bar05() nounwind {
6419; LINUX-64-STATIC-LABEL: bar05:
6420; LINUX-64-STATIC:       # %bb.0: # %entry
6421; LINUX-64-STATIC-NEXT:    movl $dptr, %eax
6422; LINUX-64-STATIC-NEXT:    retq
6423;
6424; LINUX-32-STATIC-LABEL: bar05:
6425; LINUX-32-STATIC:       # %bb.0: # %entry
6426; LINUX-32-STATIC-NEXT:    movl $dptr, %eax
6427; LINUX-32-STATIC-NEXT:    retl
6428;
6429; LINUX-32-PIC-LABEL: bar05:
6430; LINUX-32-PIC:       # %bb.0: # %entry
6431; LINUX-32-PIC-NEXT:    calll .L73$pb
6432; LINUX-32-PIC-NEXT:  .L73$pb:
6433; LINUX-32-PIC-NEXT:    popl %eax
6434; LINUX-32-PIC-NEXT:  .Ltmp73:
6435; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp73-.L73$pb), %eax
6436; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
6437; LINUX-32-PIC-NEXT:    retl
6438;
6439; LINUX-64-PIC-LABEL: bar05:
6440; LINUX-64-PIC:       # %bb.0: # %entry
6441; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
6442; LINUX-64-PIC-NEXT:    retq
6443;
6444; DARWIN-32-STATIC-LABEL: bar05:
6445; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6446; DARWIN-32-STATIC-NEXT:    movl $_dptr, %eax
6447; DARWIN-32-STATIC-NEXT:    retl
6448;
6449; DARWIN-32-DYNAMIC-LABEL: bar05:
6450; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6451; DARWIN-32-DYNAMIC-NEXT:    movl $_dptr, %eax
6452; DARWIN-32-DYNAMIC-NEXT:    retl
6453;
6454; DARWIN-32-PIC-LABEL: bar05:
6455; DARWIN-32-PIC:       ## %bb.0: ## %entry
6456; DARWIN-32-PIC-NEXT:    calll L73$pb
6457; DARWIN-32-PIC-NEXT:  L73$pb:
6458; DARWIN-32-PIC-NEXT:    popl %eax
6459; DARWIN-32-PIC-NEXT:    leal _dptr-L73$pb(%eax), %eax
6460; DARWIN-32-PIC-NEXT:    retl
6461;
6462; DARWIN-64-STATIC-LABEL: bar05:
6463; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6464; DARWIN-64-STATIC-NEXT:    leaq _dptr(%rip), %rax
6465; DARWIN-64-STATIC-NEXT:    retq
6466;
6467; DARWIN-64-DYNAMIC-LABEL: bar05:
6468; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6469; DARWIN-64-DYNAMIC-NEXT:    leaq _dptr(%rip), %rax
6470; DARWIN-64-DYNAMIC-NEXT:    retq
6471;
6472; DARWIN-64-PIC-LABEL: bar05:
6473; DARWIN-64-PIC:       ## %bb.0: ## %entry
6474; DARWIN-64-PIC-NEXT:    leaq _dptr(%rip), %rax
6475; DARWIN-64-PIC-NEXT:    retq
6476
6477entry:
6478	ret i8* bitcast (i32** @dptr to i8*)
6479}
6480
6481define i8* @bar06() nounwind {
6482; LINUX-64-STATIC-LABEL: bar06:
6483; LINUX-64-STATIC:       # %bb.0: # %entry
6484; LINUX-64-STATIC-NEXT:    movl $lsrc, %eax
6485; LINUX-64-STATIC-NEXT:    retq
6486;
6487; LINUX-32-STATIC-LABEL: bar06:
6488; LINUX-32-STATIC:       # %bb.0: # %entry
6489; LINUX-32-STATIC-NEXT:    movl $lsrc, %eax
6490; LINUX-32-STATIC-NEXT:    retl
6491;
6492; LINUX-32-PIC-LABEL: bar06:
6493; LINUX-32-PIC:       # %bb.0: # %entry
6494; LINUX-32-PIC-NEXT:    calll .L74$pb
6495; LINUX-32-PIC-NEXT:  .L74$pb:
6496; LINUX-32-PIC-NEXT:    popl %eax
6497; LINUX-32-PIC-NEXT:  .Ltmp74:
6498; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp74-.L74$pb), %eax
6499; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF(%eax), %eax
6500; LINUX-32-PIC-NEXT:    retl
6501;
6502; LINUX-64-PIC-LABEL: bar06:
6503; LINUX-64-PIC:       # %bb.0: # %entry
6504; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
6505; LINUX-64-PIC-NEXT:    retq
6506;
6507; DARWIN-32-STATIC-LABEL: bar06:
6508; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6509; DARWIN-32-STATIC-NEXT:    movl $_lsrc, %eax
6510; DARWIN-32-STATIC-NEXT:    retl
6511;
6512; DARWIN-32-DYNAMIC-LABEL: bar06:
6513; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6514; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc, %eax
6515; DARWIN-32-DYNAMIC-NEXT:    retl
6516;
6517; DARWIN-32-PIC-LABEL: bar06:
6518; DARWIN-32-PIC:       ## %bb.0: ## %entry
6519; DARWIN-32-PIC-NEXT:    calll L74$pb
6520; DARWIN-32-PIC-NEXT:  L74$pb:
6521; DARWIN-32-PIC-NEXT:    popl %eax
6522; DARWIN-32-PIC-NEXT:    leal _lsrc-L74$pb(%eax), %eax
6523; DARWIN-32-PIC-NEXT:    retl
6524;
6525; DARWIN-64-STATIC-LABEL: bar06:
6526; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6527; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
6528; DARWIN-64-STATIC-NEXT:    retq
6529;
6530; DARWIN-64-DYNAMIC-LABEL: bar06:
6531; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6532; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
6533; DARWIN-64-DYNAMIC-NEXT:    retq
6534;
6535; DARWIN-64-PIC-LABEL: bar06:
6536; DARWIN-64-PIC:       ## %bb.0: ## %entry
6537; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
6538; DARWIN-64-PIC-NEXT:    retq
6539
6540entry:
6541	ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
6542}
6543
6544define i8* @bar07() nounwind {
6545; LINUX-64-STATIC-LABEL: bar07:
6546; LINUX-64-STATIC:       # %bb.0: # %entry
6547; LINUX-64-STATIC-NEXT:    movl $ldst, %eax
6548; LINUX-64-STATIC-NEXT:    retq
6549;
6550; LINUX-32-STATIC-LABEL: bar07:
6551; LINUX-32-STATIC:       # %bb.0: # %entry
6552; LINUX-32-STATIC-NEXT:    movl $ldst, %eax
6553; LINUX-32-STATIC-NEXT:    retl
6554;
6555; LINUX-32-PIC-LABEL: bar07:
6556; LINUX-32-PIC:       # %bb.0: # %entry
6557; LINUX-32-PIC-NEXT:    calll .L75$pb
6558; LINUX-32-PIC-NEXT:  .L75$pb:
6559; LINUX-32-PIC-NEXT:    popl %eax
6560; LINUX-32-PIC-NEXT:  .Ltmp75:
6561; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp75-.L75$pb), %eax
6562; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %eax
6563; LINUX-32-PIC-NEXT:    retl
6564;
6565; LINUX-64-PIC-LABEL: bar07:
6566; LINUX-64-PIC:       # %bb.0: # %entry
6567; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
6568; LINUX-64-PIC-NEXT:    retq
6569;
6570; DARWIN-32-STATIC-LABEL: bar07:
6571; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6572; DARWIN-32-STATIC-NEXT:    movl $_ldst, %eax
6573; DARWIN-32-STATIC-NEXT:    retl
6574;
6575; DARWIN-32-DYNAMIC-LABEL: bar07:
6576; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6577; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, %eax
6578; DARWIN-32-DYNAMIC-NEXT:    retl
6579;
6580; DARWIN-32-PIC-LABEL: bar07:
6581; DARWIN-32-PIC:       ## %bb.0: ## %entry
6582; DARWIN-32-PIC-NEXT:    calll L75$pb
6583; DARWIN-32-PIC-NEXT:  L75$pb:
6584; DARWIN-32-PIC-NEXT:    popl %eax
6585; DARWIN-32-PIC-NEXT:    leal _ldst-L75$pb(%eax), %eax
6586; DARWIN-32-PIC-NEXT:    retl
6587;
6588; DARWIN-64-STATIC-LABEL: bar07:
6589; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6590; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
6591; DARWIN-64-STATIC-NEXT:    retq
6592;
6593; DARWIN-64-DYNAMIC-LABEL: bar07:
6594; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6595; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
6596; DARWIN-64-DYNAMIC-NEXT:    retq
6597;
6598; DARWIN-64-PIC-LABEL: bar07:
6599; DARWIN-64-PIC:       ## %bb.0: ## %entry
6600; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
6601; DARWIN-64-PIC-NEXT:    retq
6602
6603entry:
6604	ret i8* bitcast ([131072 x i32]* @ldst to i8*)
6605}
6606
6607define i8* @bar08() nounwind {
6608; LINUX-64-STATIC-LABEL: bar08:
6609; LINUX-64-STATIC:       # %bb.0: # %entry
6610; LINUX-64-STATIC-NEXT:    movl $lptr, %eax
6611; LINUX-64-STATIC-NEXT:    retq
6612;
6613; LINUX-32-STATIC-LABEL: bar08:
6614; LINUX-32-STATIC:       # %bb.0: # %entry
6615; LINUX-32-STATIC-NEXT:    movl $lptr, %eax
6616; LINUX-32-STATIC-NEXT:    retl
6617;
6618; LINUX-32-PIC-LABEL: bar08:
6619; LINUX-32-PIC:       # %bb.0: # %entry
6620; LINUX-32-PIC-NEXT:    calll .L76$pb
6621; LINUX-32-PIC-NEXT:  .L76$pb:
6622; LINUX-32-PIC-NEXT:    popl %eax
6623; LINUX-32-PIC-NEXT:  .Ltmp76:
6624; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp76-.L76$pb), %eax
6625; LINUX-32-PIC-NEXT:    leal lptr@GOTOFF(%eax), %eax
6626; LINUX-32-PIC-NEXT:    retl
6627;
6628; LINUX-64-PIC-LABEL: bar08:
6629; LINUX-64-PIC:       # %bb.0: # %entry
6630; LINUX-64-PIC-NEXT:    leaq lptr(%rip), %rax
6631; LINUX-64-PIC-NEXT:    retq
6632;
6633; DARWIN-32-STATIC-LABEL: bar08:
6634; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6635; DARWIN-32-STATIC-NEXT:    movl $_lptr, %eax
6636; DARWIN-32-STATIC-NEXT:    retl
6637;
6638; DARWIN-32-DYNAMIC-LABEL: bar08:
6639; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6640; DARWIN-32-DYNAMIC-NEXT:    movl $_lptr, %eax
6641; DARWIN-32-DYNAMIC-NEXT:    retl
6642;
6643; DARWIN-32-PIC-LABEL: bar08:
6644; DARWIN-32-PIC:       ## %bb.0: ## %entry
6645; DARWIN-32-PIC-NEXT:    calll L76$pb
6646; DARWIN-32-PIC-NEXT:  L76$pb:
6647; DARWIN-32-PIC-NEXT:    popl %eax
6648; DARWIN-32-PIC-NEXT:    leal _lptr-L76$pb(%eax), %eax
6649; DARWIN-32-PIC-NEXT:    retl
6650;
6651; DARWIN-64-STATIC-LABEL: bar08:
6652; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6653; DARWIN-64-STATIC-NEXT:    leaq _lptr(%rip), %rax
6654; DARWIN-64-STATIC-NEXT:    retq
6655;
6656; DARWIN-64-DYNAMIC-LABEL: bar08:
6657; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6658; DARWIN-64-DYNAMIC-NEXT:    leaq _lptr(%rip), %rax
6659; DARWIN-64-DYNAMIC-NEXT:    retq
6660;
6661; DARWIN-64-PIC-LABEL: bar08:
6662; DARWIN-64-PIC:       ## %bb.0: ## %entry
6663; DARWIN-64-PIC-NEXT:    leaq _lptr(%rip), %rax
6664; DARWIN-64-PIC-NEXT:    retq
6665
6666entry:
6667	ret i8* bitcast (i32** @lptr to i8*)
6668}
6669
6670define i8* @har00() nounwind {
6671; LINUX-64-STATIC-LABEL: har00:
6672; LINUX-64-STATIC:       # %bb.0: # %entry
6673; LINUX-64-STATIC-NEXT:    movl $src, %eax
6674; LINUX-64-STATIC-NEXT:    retq
6675;
6676; LINUX-32-STATIC-LABEL: har00:
6677; LINUX-32-STATIC:       # %bb.0: # %entry
6678; LINUX-32-STATIC-NEXT:    movl $src, %eax
6679; LINUX-32-STATIC-NEXT:    retl
6680;
6681; LINUX-32-PIC-LABEL: har00:
6682; LINUX-32-PIC:       # %bb.0: # %entry
6683; LINUX-32-PIC-NEXT:    calll .L77$pb
6684; LINUX-32-PIC-NEXT:  .L77$pb:
6685; LINUX-32-PIC-NEXT:    popl %eax
6686; LINUX-32-PIC-NEXT:  .Ltmp77:
6687; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp77-.L77$pb), %eax
6688; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
6689; LINUX-32-PIC-NEXT:    retl
6690;
6691; LINUX-64-PIC-LABEL: har00:
6692; LINUX-64-PIC:       # %bb.0: # %entry
6693; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
6694; LINUX-64-PIC-NEXT:    retq
6695;
6696; DARWIN-32-STATIC-LABEL: har00:
6697; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6698; DARWIN-32-STATIC-NEXT:    movl $_src, %eax
6699; DARWIN-32-STATIC-NEXT:    retl
6700;
6701; DARWIN-32-DYNAMIC-LABEL: har00:
6702; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6703; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
6704; DARWIN-32-DYNAMIC-NEXT:    retl
6705;
6706; DARWIN-32-PIC-LABEL: har00:
6707; DARWIN-32-PIC:       ## %bb.0: ## %entry
6708; DARWIN-32-PIC-NEXT:    calll L77$pb
6709; DARWIN-32-PIC-NEXT:  L77$pb:
6710; DARWIN-32-PIC-NEXT:    popl %eax
6711; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L77$pb(%eax), %eax
6712; DARWIN-32-PIC-NEXT:    retl
6713;
6714; DARWIN-64-STATIC-LABEL: har00:
6715; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6716; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6717; DARWIN-64-STATIC-NEXT:    retq
6718;
6719; DARWIN-64-DYNAMIC-LABEL: har00:
6720; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6721; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6722; DARWIN-64-DYNAMIC-NEXT:    retq
6723;
6724; DARWIN-64-PIC-LABEL: har00:
6725; DARWIN-64-PIC:       ## %bb.0: ## %entry
6726; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6727; DARWIN-64-PIC-NEXT:    retq
6728
6729entry:
6730	ret i8* bitcast ([131072 x i32]* @src to i8*)
6731}
6732
6733define i8* @hxr00() nounwind {
6734; LINUX-64-STATIC-LABEL: hxr00:
6735; LINUX-64-STATIC:       # %bb.0: # %entry
6736; LINUX-64-STATIC-NEXT:    movl $xsrc, %eax
6737; LINUX-64-STATIC-NEXT:    retq
6738;
6739; LINUX-32-STATIC-LABEL: hxr00:
6740; LINUX-32-STATIC:       # %bb.0: # %entry
6741; LINUX-32-STATIC-NEXT:    movl $xsrc, %eax
6742; LINUX-32-STATIC-NEXT:    retl
6743;
6744; LINUX-32-PIC-LABEL: hxr00:
6745; LINUX-32-PIC:       # %bb.0: # %entry
6746; LINUX-32-PIC-NEXT:    calll .L78$pb
6747; LINUX-32-PIC-NEXT:  .L78$pb:
6748; LINUX-32-PIC-NEXT:    popl %eax
6749; LINUX-32-PIC-NEXT:  .Ltmp78:
6750; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp78-.L78$pb), %eax
6751; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
6752; LINUX-32-PIC-NEXT:    retl
6753;
6754; LINUX-64-PIC-LABEL: hxr00:
6755; LINUX-64-PIC:       # %bb.0: # %entry
6756; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
6757; LINUX-64-PIC-NEXT:    retq
6758;
6759; DARWIN-32-STATIC-LABEL: hxr00:
6760; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6761; DARWIN-32-STATIC-NEXT:    movl $_xsrc, %eax
6762; DARWIN-32-STATIC-NEXT:    retl
6763;
6764; DARWIN-32-DYNAMIC-LABEL: hxr00:
6765; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6766; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
6767; DARWIN-32-DYNAMIC-NEXT:    retl
6768;
6769; DARWIN-32-PIC-LABEL: hxr00:
6770; DARWIN-32-PIC:       ## %bb.0: ## %entry
6771; DARWIN-32-PIC-NEXT:    calll L78$pb
6772; DARWIN-32-PIC-NEXT:  L78$pb:
6773; DARWIN-32-PIC-NEXT:    popl %eax
6774; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L78$pb(%eax), %eax
6775; DARWIN-32-PIC-NEXT:    retl
6776;
6777; DARWIN-64-STATIC-LABEL: hxr00:
6778; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6779; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6780; DARWIN-64-STATIC-NEXT:    retq
6781;
6782; DARWIN-64-DYNAMIC-LABEL: hxr00:
6783; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6784; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6785; DARWIN-64-DYNAMIC-NEXT:    retq
6786;
6787; DARWIN-64-PIC-LABEL: hxr00:
6788; DARWIN-64-PIC:       ## %bb.0: ## %entry
6789; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6790; DARWIN-64-PIC-NEXT:    retq
6791
6792entry:
6793	ret i8* bitcast ([32 x i32]* @xsrc to i8*)
6794}
6795
6796define i8* @har01() nounwind {
6797; LINUX-64-STATIC-LABEL: har01:
6798; LINUX-64-STATIC:       # %bb.0: # %entry
6799; LINUX-64-STATIC-NEXT:    movl $dst, %eax
6800; LINUX-64-STATIC-NEXT:    retq
6801;
6802; LINUX-32-STATIC-LABEL: har01:
6803; LINUX-32-STATIC:       # %bb.0: # %entry
6804; LINUX-32-STATIC-NEXT:    movl $dst, %eax
6805; LINUX-32-STATIC-NEXT:    retl
6806;
6807; LINUX-32-PIC-LABEL: har01:
6808; LINUX-32-PIC:       # %bb.0: # %entry
6809; LINUX-32-PIC-NEXT:    calll .L79$pb
6810; LINUX-32-PIC-NEXT:  .L79$pb:
6811; LINUX-32-PIC-NEXT:    popl %eax
6812; LINUX-32-PIC-NEXT:  .Ltmp79:
6813; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp79-.L79$pb), %eax
6814; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
6815; LINUX-32-PIC-NEXT:    retl
6816;
6817; LINUX-64-PIC-LABEL: har01:
6818; LINUX-64-PIC:       # %bb.0: # %entry
6819; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
6820; LINUX-64-PIC-NEXT:    retq
6821;
6822; DARWIN-32-STATIC-LABEL: har01:
6823; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6824; DARWIN-32-STATIC-NEXT:    movl $_dst, %eax
6825; DARWIN-32-STATIC-NEXT:    retl
6826;
6827; DARWIN-32-DYNAMIC-LABEL: har01:
6828; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6829; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
6830; DARWIN-32-DYNAMIC-NEXT:    retl
6831;
6832; DARWIN-32-PIC-LABEL: har01:
6833; DARWIN-32-PIC:       ## %bb.0: ## %entry
6834; DARWIN-32-PIC-NEXT:    calll L79$pb
6835; DARWIN-32-PIC-NEXT:  L79$pb:
6836; DARWIN-32-PIC-NEXT:    popl %eax
6837; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L79$pb(%eax), %eax
6838; DARWIN-32-PIC-NEXT:    retl
6839;
6840; DARWIN-64-STATIC-LABEL: har01:
6841; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6842; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6843; DARWIN-64-STATIC-NEXT:    retq
6844;
6845; DARWIN-64-DYNAMIC-LABEL: har01:
6846; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6847; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6848; DARWIN-64-DYNAMIC-NEXT:    retq
6849;
6850; DARWIN-64-PIC-LABEL: har01:
6851; DARWIN-64-PIC:       ## %bb.0: ## %entry
6852; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6853; DARWIN-64-PIC-NEXT:    retq
6854
6855entry:
6856	ret i8* bitcast ([131072 x i32]* @dst to i8*)
6857}
6858
6859define i8* @hxr01() nounwind {
6860; LINUX-64-STATIC-LABEL: hxr01:
6861; LINUX-64-STATIC:       # %bb.0: # %entry
6862; LINUX-64-STATIC-NEXT:    movl $xdst, %eax
6863; LINUX-64-STATIC-NEXT:    retq
6864;
6865; LINUX-32-STATIC-LABEL: hxr01:
6866; LINUX-32-STATIC:       # %bb.0: # %entry
6867; LINUX-32-STATIC-NEXT:    movl $xdst, %eax
6868; LINUX-32-STATIC-NEXT:    retl
6869;
6870; LINUX-32-PIC-LABEL: hxr01:
6871; LINUX-32-PIC:       # %bb.0: # %entry
6872; LINUX-32-PIC-NEXT:    calll .L80$pb
6873; LINUX-32-PIC-NEXT:  .L80$pb:
6874; LINUX-32-PIC-NEXT:    popl %eax
6875; LINUX-32-PIC-NEXT:  .Ltmp80:
6876; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp80-.L80$pb), %eax
6877; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
6878; LINUX-32-PIC-NEXT:    retl
6879;
6880; LINUX-64-PIC-LABEL: hxr01:
6881; LINUX-64-PIC:       # %bb.0: # %entry
6882; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
6883; LINUX-64-PIC-NEXT:    retq
6884;
6885; DARWIN-32-STATIC-LABEL: hxr01:
6886; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6887; DARWIN-32-STATIC-NEXT:    movl $_xdst, %eax
6888; DARWIN-32-STATIC-NEXT:    retl
6889;
6890; DARWIN-32-DYNAMIC-LABEL: hxr01:
6891; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6892; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
6893; DARWIN-32-DYNAMIC-NEXT:    retl
6894;
6895; DARWIN-32-PIC-LABEL: hxr01:
6896; DARWIN-32-PIC:       ## %bb.0: ## %entry
6897; DARWIN-32-PIC-NEXT:    calll L80$pb
6898; DARWIN-32-PIC-NEXT:  L80$pb:
6899; DARWIN-32-PIC-NEXT:    popl %eax
6900; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L80$pb(%eax), %eax
6901; DARWIN-32-PIC-NEXT:    retl
6902;
6903; DARWIN-64-STATIC-LABEL: hxr01:
6904; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6905; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6906; DARWIN-64-STATIC-NEXT:    retq
6907;
6908; DARWIN-64-DYNAMIC-LABEL: hxr01:
6909; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6910; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6911; DARWIN-64-DYNAMIC-NEXT:    retq
6912;
6913; DARWIN-64-PIC-LABEL: hxr01:
6914; DARWIN-64-PIC:       ## %bb.0: ## %entry
6915; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6916; DARWIN-64-PIC-NEXT:    retq
6917
6918entry:
6919	ret i8* bitcast ([32 x i32]* @xdst to i8*)
6920}
6921
6922define i8* @har02() nounwind {
6923; LINUX-64-STATIC-LABEL: har02:
6924; LINUX-64-STATIC:       # %bb.0: # %entry
6925; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rax
6926; LINUX-64-STATIC-NEXT:    retq
6927;
6928; LINUX-32-STATIC-LABEL: har02:
6929; LINUX-32-STATIC:       # %bb.0: # %entry
6930; LINUX-32-STATIC-NEXT:    movl ptr, %eax
6931; LINUX-32-STATIC-NEXT:    retl
6932;
6933; LINUX-32-PIC-LABEL: har02:
6934; LINUX-32-PIC:       # %bb.0: # %entry
6935; LINUX-32-PIC-NEXT:    calll .L81$pb
6936; LINUX-32-PIC-NEXT:  .L81$pb:
6937; LINUX-32-PIC-NEXT:    popl %eax
6938; LINUX-32-PIC-NEXT:  .Ltmp81:
6939; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp81-.L81$pb), %eax
6940; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
6941; LINUX-32-PIC-NEXT:    movl (%eax), %eax
6942; LINUX-32-PIC-NEXT:    retl
6943;
6944; LINUX-64-PIC-LABEL: har02:
6945; LINUX-64-PIC:       # %bb.0: # %entry
6946; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
6947; LINUX-64-PIC-NEXT:    movq (%rax), %rax
6948; LINUX-64-PIC-NEXT:    retq
6949;
6950; DARWIN-32-STATIC-LABEL: har02:
6951; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6952; DARWIN-32-STATIC-NEXT:    movl _ptr, %eax
6953; DARWIN-32-STATIC-NEXT:    retl
6954;
6955; DARWIN-32-DYNAMIC-LABEL: har02:
6956; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6957; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
6958; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
6959; DARWIN-32-DYNAMIC-NEXT:    retl
6960;
6961; DARWIN-32-PIC-LABEL: har02:
6962; DARWIN-32-PIC:       ## %bb.0: ## %entry
6963; DARWIN-32-PIC-NEXT:    calll L81$pb
6964; DARWIN-32-PIC-NEXT:  L81$pb:
6965; DARWIN-32-PIC-NEXT:    popl %eax
6966; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L81$pb(%eax), %eax
6967; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
6968; DARWIN-32-PIC-NEXT:    retl
6969;
6970; DARWIN-64-STATIC-LABEL: har02:
6971; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6972; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6973; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
6974; DARWIN-64-STATIC-NEXT:    retq
6975;
6976; DARWIN-64-DYNAMIC-LABEL: har02:
6977; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6978; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6979; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
6980; DARWIN-64-DYNAMIC-NEXT:    retq
6981;
6982; DARWIN-64-PIC-LABEL: har02:
6983; DARWIN-64-PIC:       ## %bb.0: ## %entry
6984; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6985; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
6986; DARWIN-64-PIC-NEXT:    retq
6987
6988entry:
6989	%0 = load i32*, i32** @ptr, align 8
6990	%1 = bitcast i32* %0 to i8*
6991	ret i8* %1
6992}
6993
6994define i8* @har03() nounwind {
6995; LINUX-64-STATIC-LABEL: har03:
6996; LINUX-64-STATIC:       # %bb.0: # %entry
6997; LINUX-64-STATIC-NEXT:    movl $dsrc, %eax
6998; LINUX-64-STATIC-NEXT:    retq
6999;
7000; LINUX-32-STATIC-LABEL: har03:
7001; LINUX-32-STATIC:       # %bb.0: # %entry
7002; LINUX-32-STATIC-NEXT:    movl $dsrc, %eax
7003; LINUX-32-STATIC-NEXT:    retl
7004;
7005; LINUX-32-PIC-LABEL: har03:
7006; LINUX-32-PIC:       # %bb.0: # %entry
7007; LINUX-32-PIC-NEXT:    calll .L82$pb
7008; LINUX-32-PIC-NEXT:  .L82$pb:
7009; LINUX-32-PIC-NEXT:    popl %eax
7010; LINUX-32-PIC-NEXT:  .Ltmp82:
7011; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp82-.L82$pb), %eax
7012; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
7013; LINUX-32-PIC-NEXT:    retl
7014;
7015; LINUX-64-PIC-LABEL: har03:
7016; LINUX-64-PIC:       # %bb.0: # %entry
7017; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
7018; LINUX-64-PIC-NEXT:    retq
7019;
7020; DARWIN-32-STATIC-LABEL: har03:
7021; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7022; DARWIN-32-STATIC-NEXT:    movl $_dsrc, %eax
7023; DARWIN-32-STATIC-NEXT:    retl
7024;
7025; DARWIN-32-DYNAMIC-LABEL: har03:
7026; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7027; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc, %eax
7028; DARWIN-32-DYNAMIC-NEXT:    retl
7029;
7030; DARWIN-32-PIC-LABEL: har03:
7031; DARWIN-32-PIC:       ## %bb.0: ## %entry
7032; DARWIN-32-PIC-NEXT:    calll L82$pb
7033; DARWIN-32-PIC-NEXT:  L82$pb:
7034; DARWIN-32-PIC-NEXT:    popl %eax
7035; DARWIN-32-PIC-NEXT:    leal _dsrc-L82$pb(%eax), %eax
7036; DARWIN-32-PIC-NEXT:    retl
7037;
7038; DARWIN-64-STATIC-LABEL: har03:
7039; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7040; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
7041; DARWIN-64-STATIC-NEXT:    retq
7042;
7043; DARWIN-64-DYNAMIC-LABEL: har03:
7044; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7045; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
7046; DARWIN-64-DYNAMIC-NEXT:    retq
7047;
7048; DARWIN-64-PIC-LABEL: har03:
7049; DARWIN-64-PIC:       ## %bb.0: ## %entry
7050; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
7051; DARWIN-64-PIC-NEXT:    retq
7052
7053entry:
7054	ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
7055}
7056
7057define i8* @har04() nounwind {
7058; LINUX-64-STATIC-LABEL: har04:
7059; LINUX-64-STATIC:       # %bb.0: # %entry
7060; LINUX-64-STATIC-NEXT:    movl $ddst, %eax
7061; LINUX-64-STATIC-NEXT:    retq
7062;
7063; LINUX-32-STATIC-LABEL: har04:
7064; LINUX-32-STATIC:       # %bb.0: # %entry
7065; LINUX-32-STATIC-NEXT:    movl $ddst, %eax
7066; LINUX-32-STATIC-NEXT:    retl
7067;
7068; LINUX-32-PIC-LABEL: har04:
7069; LINUX-32-PIC:       # %bb.0: # %entry
7070; LINUX-32-PIC-NEXT:    calll .L83$pb
7071; LINUX-32-PIC-NEXT:  .L83$pb:
7072; LINUX-32-PIC-NEXT:    popl %eax
7073; LINUX-32-PIC-NEXT:  .Ltmp83:
7074; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp83-.L83$pb), %eax
7075; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
7076; LINUX-32-PIC-NEXT:    retl
7077;
7078; LINUX-64-PIC-LABEL: har04:
7079; LINUX-64-PIC:       # %bb.0: # %entry
7080; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
7081; LINUX-64-PIC-NEXT:    retq
7082;
7083; DARWIN-32-STATIC-LABEL: har04:
7084; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7085; DARWIN-32-STATIC-NEXT:    movl $_ddst, %eax
7086; DARWIN-32-STATIC-NEXT:    retl
7087;
7088; DARWIN-32-DYNAMIC-LABEL: har04:
7089; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7090; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, %eax
7091; DARWIN-32-DYNAMIC-NEXT:    retl
7092;
7093; DARWIN-32-PIC-LABEL: har04:
7094; DARWIN-32-PIC:       ## %bb.0: ## %entry
7095; DARWIN-32-PIC-NEXT:    calll L83$pb
7096; DARWIN-32-PIC-NEXT:  L83$pb:
7097; DARWIN-32-PIC-NEXT:    popl %eax
7098; DARWIN-32-PIC-NEXT:    leal _ddst-L83$pb(%eax), %eax
7099; DARWIN-32-PIC-NEXT:    retl
7100;
7101; DARWIN-64-STATIC-LABEL: har04:
7102; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7103; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
7104; DARWIN-64-STATIC-NEXT:    retq
7105;
7106; DARWIN-64-DYNAMIC-LABEL: har04:
7107; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7108; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
7109; DARWIN-64-DYNAMIC-NEXT:    retq
7110;
7111; DARWIN-64-PIC-LABEL: har04:
7112; DARWIN-64-PIC:       ## %bb.0: ## %entry
7113; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
7114; DARWIN-64-PIC-NEXT:    retq
7115
7116entry:
7117	ret i8* bitcast ([131072 x i32]* @ddst to i8*)
7118}
7119
7120define i8* @har05() nounwind {
7121; LINUX-64-STATIC-LABEL: har05:
7122; LINUX-64-STATIC:       # %bb.0: # %entry
7123; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
7124; LINUX-64-STATIC-NEXT:    retq
7125;
7126; LINUX-32-STATIC-LABEL: har05:
7127; LINUX-32-STATIC:       # %bb.0: # %entry
7128; LINUX-32-STATIC-NEXT:    movl dptr, %eax
7129; LINUX-32-STATIC-NEXT:    retl
7130;
7131; LINUX-32-PIC-LABEL: har05:
7132; LINUX-32-PIC:       # %bb.0: # %entry
7133; LINUX-32-PIC-NEXT:    calll .L84$pb
7134; LINUX-32-PIC-NEXT:  .L84$pb:
7135; LINUX-32-PIC-NEXT:    popl %eax
7136; LINUX-32-PIC-NEXT:  .Ltmp84:
7137; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp84-.L84$pb), %eax
7138; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
7139; LINUX-32-PIC-NEXT:    movl (%eax), %eax
7140; LINUX-32-PIC-NEXT:    retl
7141;
7142; LINUX-64-PIC-LABEL: har05:
7143; LINUX-64-PIC:       # %bb.0: # %entry
7144; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
7145; LINUX-64-PIC-NEXT:    movq (%rax), %rax
7146; LINUX-64-PIC-NEXT:    retq
7147;
7148; DARWIN-32-STATIC-LABEL: har05:
7149; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7150; DARWIN-32-STATIC-NEXT:    movl _dptr, %eax
7151; DARWIN-32-STATIC-NEXT:    retl
7152;
7153; DARWIN-32-DYNAMIC-LABEL: har05:
7154; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7155; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %eax
7156; DARWIN-32-DYNAMIC-NEXT:    retl
7157;
7158; DARWIN-32-PIC-LABEL: har05:
7159; DARWIN-32-PIC:       ## %bb.0: ## %entry
7160; DARWIN-32-PIC-NEXT:    calll L84$pb
7161; DARWIN-32-PIC-NEXT:  L84$pb:
7162; DARWIN-32-PIC-NEXT:    popl %eax
7163; DARWIN-32-PIC-NEXT:    movl _dptr-L84$pb(%eax), %eax
7164; DARWIN-32-PIC-NEXT:    retl
7165;
7166; DARWIN-64-STATIC-LABEL: har05:
7167; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7168; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
7169; DARWIN-64-STATIC-NEXT:    retq
7170;
7171; DARWIN-64-DYNAMIC-LABEL: har05:
7172; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7173; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
7174; DARWIN-64-DYNAMIC-NEXT:    retq
7175;
7176; DARWIN-64-PIC-LABEL: har05:
7177; DARWIN-64-PIC:       ## %bb.0: ## %entry
7178; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
7179; DARWIN-64-PIC-NEXT:    retq
7180
7181entry:
7182	%0 = load i32*, i32** @dptr, align 8
7183	%1 = bitcast i32* %0 to i8*
7184	ret i8* %1
7185}
7186
7187define i8* @har06() nounwind {
7188; LINUX-64-STATIC-LABEL: har06:
7189; LINUX-64-STATIC:       # %bb.0: # %entry
7190; LINUX-64-STATIC-NEXT:    movl $lsrc, %eax
7191; LINUX-64-STATIC-NEXT:    retq
7192;
7193; LINUX-32-STATIC-LABEL: har06:
7194; LINUX-32-STATIC:       # %bb.0: # %entry
7195; LINUX-32-STATIC-NEXT:    movl $lsrc, %eax
7196; LINUX-32-STATIC-NEXT:    retl
7197;
7198; LINUX-32-PIC-LABEL: har06:
7199; LINUX-32-PIC:       # %bb.0: # %entry
7200; LINUX-32-PIC-NEXT:    calll .L85$pb
7201; LINUX-32-PIC-NEXT:  .L85$pb:
7202; LINUX-32-PIC-NEXT:    popl %eax
7203; LINUX-32-PIC-NEXT:  .Ltmp85:
7204; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp85-.L85$pb), %eax
7205; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF(%eax), %eax
7206; LINUX-32-PIC-NEXT:    retl
7207;
7208; LINUX-64-PIC-LABEL: har06:
7209; LINUX-64-PIC:       # %bb.0: # %entry
7210; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
7211; LINUX-64-PIC-NEXT:    retq
7212;
7213; DARWIN-32-STATIC-LABEL: har06:
7214; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7215; DARWIN-32-STATIC-NEXT:    movl $_lsrc, %eax
7216; DARWIN-32-STATIC-NEXT:    retl
7217;
7218; DARWIN-32-DYNAMIC-LABEL: har06:
7219; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7220; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc, %eax
7221; DARWIN-32-DYNAMIC-NEXT:    retl
7222;
7223; DARWIN-32-PIC-LABEL: har06:
7224; DARWIN-32-PIC:       ## %bb.0: ## %entry
7225; DARWIN-32-PIC-NEXT:    calll L85$pb
7226; DARWIN-32-PIC-NEXT:  L85$pb:
7227; DARWIN-32-PIC-NEXT:    popl %eax
7228; DARWIN-32-PIC-NEXT:    leal _lsrc-L85$pb(%eax), %eax
7229; DARWIN-32-PIC-NEXT:    retl
7230;
7231; DARWIN-64-STATIC-LABEL: har06:
7232; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7233; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
7234; DARWIN-64-STATIC-NEXT:    retq
7235;
7236; DARWIN-64-DYNAMIC-LABEL: har06:
7237; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7238; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
7239; DARWIN-64-DYNAMIC-NEXT:    retq
7240;
7241; DARWIN-64-PIC-LABEL: har06:
7242; DARWIN-64-PIC:       ## %bb.0: ## %entry
7243; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
7244; DARWIN-64-PIC-NEXT:    retq
7245
7246entry:
7247	ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
7248}
7249
7250define i8* @har07() nounwind {
7251; LINUX-64-STATIC-LABEL: har07:
7252; LINUX-64-STATIC:       # %bb.0: # %entry
7253; LINUX-64-STATIC-NEXT:    movl $ldst, %eax
7254; LINUX-64-STATIC-NEXT:    retq
7255;
7256; LINUX-32-STATIC-LABEL: har07:
7257; LINUX-32-STATIC:       # %bb.0: # %entry
7258; LINUX-32-STATIC-NEXT:    movl $ldst, %eax
7259; LINUX-32-STATIC-NEXT:    retl
7260;
7261; LINUX-32-PIC-LABEL: har07:
7262; LINUX-32-PIC:       # %bb.0: # %entry
7263; LINUX-32-PIC-NEXT:    calll .L86$pb
7264; LINUX-32-PIC-NEXT:  .L86$pb:
7265; LINUX-32-PIC-NEXT:    popl %eax
7266; LINUX-32-PIC-NEXT:  .Ltmp86:
7267; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp86-.L86$pb), %eax
7268; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %eax
7269; LINUX-32-PIC-NEXT:    retl
7270;
7271; LINUX-64-PIC-LABEL: har07:
7272; LINUX-64-PIC:       # %bb.0: # %entry
7273; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
7274; LINUX-64-PIC-NEXT:    retq
7275;
7276; DARWIN-32-STATIC-LABEL: har07:
7277; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7278; DARWIN-32-STATIC-NEXT:    movl $_ldst, %eax
7279; DARWIN-32-STATIC-NEXT:    retl
7280;
7281; DARWIN-32-DYNAMIC-LABEL: har07:
7282; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7283; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, %eax
7284; DARWIN-32-DYNAMIC-NEXT:    retl
7285;
7286; DARWIN-32-PIC-LABEL: har07:
7287; DARWIN-32-PIC:       ## %bb.0: ## %entry
7288; DARWIN-32-PIC-NEXT:    calll L86$pb
7289; DARWIN-32-PIC-NEXT:  L86$pb:
7290; DARWIN-32-PIC-NEXT:    popl %eax
7291; DARWIN-32-PIC-NEXT:    leal _ldst-L86$pb(%eax), %eax
7292; DARWIN-32-PIC-NEXT:    retl
7293;
7294; DARWIN-64-STATIC-LABEL: har07:
7295; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7296; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
7297; DARWIN-64-STATIC-NEXT:    retq
7298;
7299; DARWIN-64-DYNAMIC-LABEL: har07:
7300; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7301; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
7302; DARWIN-64-DYNAMIC-NEXT:    retq
7303;
7304; DARWIN-64-PIC-LABEL: har07:
7305; DARWIN-64-PIC:       ## %bb.0: ## %entry
7306; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
7307; DARWIN-64-PIC-NEXT:    retq
7308
7309entry:
7310	ret i8* bitcast ([131072 x i32]* @ldst to i8*)
7311}
7312
7313define i8* @har08() nounwind {
7314; LINUX-64-STATIC-LABEL: har08:
7315; LINUX-64-STATIC:       # %bb.0: # %entry
7316; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
7317; LINUX-64-STATIC-NEXT:    retq
7318;
7319; LINUX-32-STATIC-LABEL: har08:
7320; LINUX-32-STATIC:       # %bb.0: # %entry
7321; LINUX-32-STATIC-NEXT:    movl lptr, %eax
7322; LINUX-32-STATIC-NEXT:    retl
7323;
7324; LINUX-32-PIC-LABEL: har08:
7325; LINUX-32-PIC:       # %bb.0: # %entry
7326; LINUX-32-PIC-NEXT:    calll .L87$pb
7327; LINUX-32-PIC-NEXT:  .L87$pb:
7328; LINUX-32-PIC-NEXT:    popl %eax
7329; LINUX-32-PIC-NEXT:  .Ltmp87:
7330; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp87-.L87$pb), %eax
7331; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
7332; LINUX-32-PIC-NEXT:    retl
7333;
7334; LINUX-64-PIC-LABEL: har08:
7335; LINUX-64-PIC:       # %bb.0: # %entry
7336; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
7337; LINUX-64-PIC-NEXT:    retq
7338;
7339; DARWIN-32-STATIC-LABEL: har08:
7340; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7341; DARWIN-32-STATIC-NEXT:    movl _lptr, %eax
7342; DARWIN-32-STATIC-NEXT:    retl
7343;
7344; DARWIN-32-DYNAMIC-LABEL: har08:
7345; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7346; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %eax
7347; DARWIN-32-DYNAMIC-NEXT:    retl
7348;
7349; DARWIN-32-PIC-LABEL: har08:
7350; DARWIN-32-PIC:       ## %bb.0: ## %entry
7351; DARWIN-32-PIC-NEXT:    calll L87$pb
7352; DARWIN-32-PIC-NEXT:  L87$pb:
7353; DARWIN-32-PIC-NEXT:    popl %eax
7354; DARWIN-32-PIC-NEXT:    movl _lptr-L87$pb(%eax), %eax
7355; DARWIN-32-PIC-NEXT:    retl
7356;
7357; DARWIN-64-STATIC-LABEL: har08:
7358; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7359; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
7360; DARWIN-64-STATIC-NEXT:    retq
7361;
7362; DARWIN-64-DYNAMIC-LABEL: har08:
7363; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7364; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
7365; DARWIN-64-DYNAMIC-NEXT:    retq
7366;
7367; DARWIN-64-PIC-LABEL: har08:
7368; DARWIN-64-PIC:       ## %bb.0: ## %entry
7369; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
7370; DARWIN-64-PIC-NEXT:    retq
7371
7372entry:
7373	%0 = load i32*, i32** @lptr, align 8
7374	%1 = bitcast i32* %0 to i8*
7375	ret i8* %1
7376}
7377
7378define i8* @bat00() nounwind {
7379; LINUX-64-STATIC-LABEL: bat00:
7380; LINUX-64-STATIC:       # %bb.0: # %entry
7381; LINUX-64-STATIC-NEXT:    movl $src+64, %eax
7382; LINUX-64-STATIC-NEXT:    retq
7383;
7384; LINUX-32-STATIC-LABEL: bat00:
7385; LINUX-32-STATIC:       # %bb.0: # %entry
7386; LINUX-32-STATIC-NEXT:    movl $src+64, %eax
7387; LINUX-32-STATIC-NEXT:    retl
7388;
7389; LINUX-32-PIC-LABEL: bat00:
7390; LINUX-32-PIC:       # %bb.0: # %entry
7391; LINUX-32-PIC-NEXT:    calll .L88$pb
7392; LINUX-32-PIC-NEXT:  .L88$pb:
7393; LINUX-32-PIC-NEXT:    popl %eax
7394; LINUX-32-PIC-NEXT:  .Ltmp88:
7395; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp88-.L88$pb), %eax
7396; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
7397; LINUX-32-PIC-NEXT:    addl $64, %eax
7398; LINUX-32-PIC-NEXT:    retl
7399;
7400; LINUX-64-PIC-LABEL: bat00:
7401; LINUX-64-PIC:       # %bb.0: # %entry
7402; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
7403; LINUX-64-PIC-NEXT:    addq $64, %rax
7404; LINUX-64-PIC-NEXT:    retq
7405;
7406; DARWIN-32-STATIC-LABEL: bat00:
7407; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7408; DARWIN-32-STATIC-NEXT:    movl $_src+64, %eax
7409; DARWIN-32-STATIC-NEXT:    retl
7410;
7411; DARWIN-32-DYNAMIC-LABEL: bat00:
7412; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7413; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
7414; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7415; DARWIN-32-DYNAMIC-NEXT:    retl
7416;
7417; DARWIN-32-PIC-LABEL: bat00:
7418; DARWIN-32-PIC:       ## %bb.0: ## %entry
7419; DARWIN-32-PIC-NEXT:    calll L88$pb
7420; DARWIN-32-PIC-NEXT:  L88$pb:
7421; DARWIN-32-PIC-NEXT:    popl %eax
7422; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L88$pb(%eax), %eax
7423; DARWIN-32-PIC-NEXT:    addl $64, %eax
7424; DARWIN-32-PIC-NEXT:    retl
7425;
7426; DARWIN-64-STATIC-LABEL: bat00:
7427; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7428; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7429; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7430; DARWIN-64-STATIC-NEXT:    retq
7431;
7432; DARWIN-64-DYNAMIC-LABEL: bat00:
7433; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7434; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7435; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7436; DARWIN-64-DYNAMIC-NEXT:    retq
7437;
7438; DARWIN-64-PIC-LABEL: bat00:
7439; DARWIN-64-PIC:       ## %bb.0: ## %entry
7440; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7441; DARWIN-64-PIC-NEXT:    addq $64, %rax
7442; DARWIN-64-PIC-NEXT:    retq
7443
7444entry:
7445	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16) to i8*)
7446}
7447
7448define i8* @bxt00() nounwind {
7449; LINUX-64-STATIC-LABEL: bxt00:
7450; LINUX-64-STATIC:       # %bb.0: # %entry
7451; LINUX-64-STATIC-NEXT:    movl $xsrc+64, %eax
7452; LINUX-64-STATIC-NEXT:    retq
7453;
7454; LINUX-32-STATIC-LABEL: bxt00:
7455; LINUX-32-STATIC:       # %bb.0: # %entry
7456; LINUX-32-STATIC-NEXT:    movl $xsrc+64, %eax
7457; LINUX-32-STATIC-NEXT:    retl
7458;
7459; LINUX-32-PIC-LABEL: bxt00:
7460; LINUX-32-PIC:       # %bb.0: # %entry
7461; LINUX-32-PIC-NEXT:    calll .L89$pb
7462; LINUX-32-PIC-NEXT:  .L89$pb:
7463; LINUX-32-PIC-NEXT:    popl %eax
7464; LINUX-32-PIC-NEXT:  .Ltmp89:
7465; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp89-.L89$pb), %eax
7466; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
7467; LINUX-32-PIC-NEXT:    addl $64, %eax
7468; LINUX-32-PIC-NEXT:    retl
7469;
7470; LINUX-64-PIC-LABEL: bxt00:
7471; LINUX-64-PIC:       # %bb.0: # %entry
7472; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
7473; LINUX-64-PIC-NEXT:    addq $64, %rax
7474; LINUX-64-PIC-NEXT:    retq
7475;
7476; DARWIN-32-STATIC-LABEL: bxt00:
7477; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7478; DARWIN-32-STATIC-NEXT:    movl $_xsrc+64, %eax
7479; DARWIN-32-STATIC-NEXT:    retl
7480;
7481; DARWIN-32-DYNAMIC-LABEL: bxt00:
7482; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7483; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
7484; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7485; DARWIN-32-DYNAMIC-NEXT:    retl
7486;
7487; DARWIN-32-PIC-LABEL: bxt00:
7488; DARWIN-32-PIC:       ## %bb.0: ## %entry
7489; DARWIN-32-PIC-NEXT:    calll L89$pb
7490; DARWIN-32-PIC-NEXT:  L89$pb:
7491; DARWIN-32-PIC-NEXT:    popl %eax
7492; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L89$pb(%eax), %eax
7493; DARWIN-32-PIC-NEXT:    addl $64, %eax
7494; DARWIN-32-PIC-NEXT:    retl
7495;
7496; DARWIN-64-STATIC-LABEL: bxt00:
7497; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7498; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7499; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7500; DARWIN-64-STATIC-NEXT:    retq
7501;
7502; DARWIN-64-DYNAMIC-LABEL: bxt00:
7503; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7504; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7505; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7506; DARWIN-64-DYNAMIC-NEXT:    retq
7507;
7508; DARWIN-64-PIC-LABEL: bxt00:
7509; DARWIN-64-PIC:       ## %bb.0: ## %entry
7510; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7511; DARWIN-64-PIC-NEXT:    addq $64, %rax
7512; DARWIN-64-PIC-NEXT:    retq
7513
7514entry:
7515	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16) to i8*)
7516}
7517
7518define i8* @bat01() nounwind {
7519; LINUX-64-STATIC-LABEL: bat01:
7520; LINUX-64-STATIC:       # %bb.0: # %entry
7521; LINUX-64-STATIC-NEXT:    movl $dst+64, %eax
7522; LINUX-64-STATIC-NEXT:    retq
7523;
7524; LINUX-32-STATIC-LABEL: bat01:
7525; LINUX-32-STATIC:       # %bb.0: # %entry
7526; LINUX-32-STATIC-NEXT:    movl $dst+64, %eax
7527; LINUX-32-STATIC-NEXT:    retl
7528;
7529; LINUX-32-PIC-LABEL: bat01:
7530; LINUX-32-PIC:       # %bb.0: # %entry
7531; LINUX-32-PIC-NEXT:    calll .L90$pb
7532; LINUX-32-PIC-NEXT:  .L90$pb:
7533; LINUX-32-PIC-NEXT:    popl %eax
7534; LINUX-32-PIC-NEXT:  .Ltmp90:
7535; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp90-.L90$pb), %eax
7536; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
7537; LINUX-32-PIC-NEXT:    addl $64, %eax
7538; LINUX-32-PIC-NEXT:    retl
7539;
7540; LINUX-64-PIC-LABEL: bat01:
7541; LINUX-64-PIC:       # %bb.0: # %entry
7542; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
7543; LINUX-64-PIC-NEXT:    addq $64, %rax
7544; LINUX-64-PIC-NEXT:    retq
7545;
7546; DARWIN-32-STATIC-LABEL: bat01:
7547; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7548; DARWIN-32-STATIC-NEXT:    movl $_dst+64, %eax
7549; DARWIN-32-STATIC-NEXT:    retl
7550;
7551; DARWIN-32-DYNAMIC-LABEL: bat01:
7552; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7553; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
7554; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7555; DARWIN-32-DYNAMIC-NEXT:    retl
7556;
7557; DARWIN-32-PIC-LABEL: bat01:
7558; DARWIN-32-PIC:       ## %bb.0: ## %entry
7559; DARWIN-32-PIC-NEXT:    calll L90$pb
7560; DARWIN-32-PIC-NEXT:  L90$pb:
7561; DARWIN-32-PIC-NEXT:    popl %eax
7562; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L90$pb(%eax), %eax
7563; DARWIN-32-PIC-NEXT:    addl $64, %eax
7564; DARWIN-32-PIC-NEXT:    retl
7565;
7566; DARWIN-64-STATIC-LABEL: bat01:
7567; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7568; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7569; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7570; DARWIN-64-STATIC-NEXT:    retq
7571;
7572; DARWIN-64-DYNAMIC-LABEL: bat01:
7573; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7574; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7575; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7576; DARWIN-64-DYNAMIC-NEXT:    retq
7577;
7578; DARWIN-64-PIC-LABEL: bat01:
7579; DARWIN-64-PIC:       ## %bb.0: ## %entry
7580; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7581; DARWIN-64-PIC-NEXT:    addq $64, %rax
7582; DARWIN-64-PIC-NEXT:    retq
7583
7584entry:
7585	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16) to i8*)
7586}
7587
7588define i8* @bxt01() nounwind {
7589; LINUX-64-STATIC-LABEL: bxt01:
7590; LINUX-64-STATIC:       # %bb.0: # %entry
7591; LINUX-64-STATIC-NEXT:    movl $xdst+64, %eax
7592; LINUX-64-STATIC-NEXT:    retq
7593;
7594; LINUX-32-STATIC-LABEL: bxt01:
7595; LINUX-32-STATIC:       # %bb.0: # %entry
7596; LINUX-32-STATIC-NEXT:    movl $xdst+64, %eax
7597; LINUX-32-STATIC-NEXT:    retl
7598;
7599; LINUX-32-PIC-LABEL: bxt01:
7600; LINUX-32-PIC:       # %bb.0: # %entry
7601; LINUX-32-PIC-NEXT:    calll .L91$pb
7602; LINUX-32-PIC-NEXT:  .L91$pb:
7603; LINUX-32-PIC-NEXT:    popl %eax
7604; LINUX-32-PIC-NEXT:  .Ltmp91:
7605; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp91-.L91$pb), %eax
7606; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
7607; LINUX-32-PIC-NEXT:    addl $64, %eax
7608; LINUX-32-PIC-NEXT:    retl
7609;
7610; LINUX-64-PIC-LABEL: bxt01:
7611; LINUX-64-PIC:       # %bb.0: # %entry
7612; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
7613; LINUX-64-PIC-NEXT:    addq $64, %rax
7614; LINUX-64-PIC-NEXT:    retq
7615;
7616; DARWIN-32-STATIC-LABEL: bxt01:
7617; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7618; DARWIN-32-STATIC-NEXT:    movl $_xdst+64, %eax
7619; DARWIN-32-STATIC-NEXT:    retl
7620;
7621; DARWIN-32-DYNAMIC-LABEL: bxt01:
7622; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7623; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
7624; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7625; DARWIN-32-DYNAMIC-NEXT:    retl
7626;
7627; DARWIN-32-PIC-LABEL: bxt01:
7628; DARWIN-32-PIC:       ## %bb.0: ## %entry
7629; DARWIN-32-PIC-NEXT:    calll L91$pb
7630; DARWIN-32-PIC-NEXT:  L91$pb:
7631; DARWIN-32-PIC-NEXT:    popl %eax
7632; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L91$pb(%eax), %eax
7633; DARWIN-32-PIC-NEXT:    addl $64, %eax
7634; DARWIN-32-PIC-NEXT:    retl
7635;
7636; DARWIN-64-STATIC-LABEL: bxt01:
7637; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7638; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7639; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7640; DARWIN-64-STATIC-NEXT:    retq
7641;
7642; DARWIN-64-DYNAMIC-LABEL: bxt01:
7643; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7644; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7645; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7646; DARWIN-64-DYNAMIC-NEXT:    retq
7647;
7648; DARWIN-64-PIC-LABEL: bxt01:
7649; DARWIN-64-PIC:       ## %bb.0: ## %entry
7650; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7651; DARWIN-64-PIC-NEXT:    addq $64, %rax
7652; DARWIN-64-PIC-NEXT:    retq
7653
7654entry:
7655	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16) to i8*)
7656}
7657
7658define i8* @bat02() nounwind {
7659; LINUX-64-STATIC-LABEL: bat02:
7660; LINUX-64-STATIC:       # %bb.0: # %entry
7661; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rax
7662; LINUX-64-STATIC-NEXT:    addq $64, %rax
7663; LINUX-64-STATIC-NEXT:    retq
7664;
7665; LINUX-32-STATIC-LABEL: bat02:
7666; LINUX-32-STATIC:       # %bb.0: # %entry
7667; LINUX-32-STATIC-NEXT:    movl ptr, %eax
7668; LINUX-32-STATIC-NEXT:    addl $64, %eax
7669; LINUX-32-STATIC-NEXT:    retl
7670;
7671; LINUX-32-PIC-LABEL: bat02:
7672; LINUX-32-PIC:       # %bb.0: # %entry
7673; LINUX-32-PIC-NEXT:    calll .L92$pb
7674; LINUX-32-PIC-NEXT:  .L92$pb:
7675; LINUX-32-PIC-NEXT:    popl %eax
7676; LINUX-32-PIC-NEXT:  .Ltmp92:
7677; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp92-.L92$pb), %eax
7678; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
7679; LINUX-32-PIC-NEXT:    movl (%eax), %eax
7680; LINUX-32-PIC-NEXT:    addl $64, %eax
7681; LINUX-32-PIC-NEXT:    retl
7682;
7683; LINUX-64-PIC-LABEL: bat02:
7684; LINUX-64-PIC:       # %bb.0: # %entry
7685; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
7686; LINUX-64-PIC-NEXT:    movq (%rax), %rax
7687; LINUX-64-PIC-NEXT:    addq $64, %rax
7688; LINUX-64-PIC-NEXT:    retq
7689;
7690; DARWIN-32-STATIC-LABEL: bat02:
7691; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7692; DARWIN-32-STATIC-NEXT:    movl _ptr, %eax
7693; DARWIN-32-STATIC-NEXT:    addl $64, %eax
7694; DARWIN-32-STATIC-NEXT:    retl
7695;
7696; DARWIN-32-DYNAMIC-LABEL: bat02:
7697; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7698; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
7699; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
7700; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7701; DARWIN-32-DYNAMIC-NEXT:    retl
7702;
7703; DARWIN-32-PIC-LABEL: bat02:
7704; DARWIN-32-PIC:       ## %bb.0: ## %entry
7705; DARWIN-32-PIC-NEXT:    calll L92$pb
7706; DARWIN-32-PIC-NEXT:  L92$pb:
7707; DARWIN-32-PIC-NEXT:    popl %eax
7708; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L92$pb(%eax), %eax
7709; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
7710; DARWIN-32-PIC-NEXT:    addl $64, %eax
7711; DARWIN-32-PIC-NEXT:    retl
7712;
7713; DARWIN-64-STATIC-LABEL: bat02:
7714; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7715; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7716; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
7717; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7718; DARWIN-64-STATIC-NEXT:    retq
7719;
7720; DARWIN-64-DYNAMIC-LABEL: bat02:
7721; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7722; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7723; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
7724; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7725; DARWIN-64-DYNAMIC-NEXT:    retq
7726;
7727; DARWIN-64-PIC-LABEL: bat02:
7728; DARWIN-64-PIC:       ## %bb.0: ## %entry
7729; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7730; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
7731; DARWIN-64-PIC-NEXT:    addq $64, %rax
7732; DARWIN-64-PIC-NEXT:    retq
7733
7734entry:
7735	%0 = load i32*, i32** @ptr, align 8
7736	%1 = getelementptr i32, i32* %0, i64 16
7737	%2 = bitcast i32* %1 to i8*
7738	ret i8* %2
7739}
7740
7741define i8* @bat03() nounwind {
7742; LINUX-64-STATIC-LABEL: bat03:
7743; LINUX-64-STATIC:       # %bb.0: # %entry
7744; LINUX-64-STATIC-NEXT:    movl $dsrc+64, %eax
7745; LINUX-64-STATIC-NEXT:    retq
7746;
7747; LINUX-32-STATIC-LABEL: bat03:
7748; LINUX-32-STATIC:       # %bb.0: # %entry
7749; LINUX-32-STATIC-NEXT:    movl $dsrc+64, %eax
7750; LINUX-32-STATIC-NEXT:    retl
7751;
7752; LINUX-32-PIC-LABEL: bat03:
7753; LINUX-32-PIC:       # %bb.0: # %entry
7754; LINUX-32-PIC-NEXT:    calll .L93$pb
7755; LINUX-32-PIC-NEXT:  .L93$pb:
7756; LINUX-32-PIC-NEXT:    popl %eax
7757; LINUX-32-PIC-NEXT:  .Ltmp93:
7758; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp93-.L93$pb), %eax
7759; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
7760; LINUX-32-PIC-NEXT:    addl $64, %eax
7761; LINUX-32-PIC-NEXT:    retl
7762;
7763; LINUX-64-PIC-LABEL: bat03:
7764; LINUX-64-PIC:       # %bb.0: # %entry
7765; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
7766; LINUX-64-PIC-NEXT:    addq $64, %rax
7767; LINUX-64-PIC-NEXT:    retq
7768;
7769; DARWIN-32-STATIC-LABEL: bat03:
7770; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7771; DARWIN-32-STATIC-NEXT:    movl $_dsrc+64, %eax
7772; DARWIN-32-STATIC-NEXT:    retl
7773;
7774; DARWIN-32-DYNAMIC-LABEL: bat03:
7775; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7776; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc+64, %eax
7777; DARWIN-32-DYNAMIC-NEXT:    retl
7778;
7779; DARWIN-32-PIC-LABEL: bat03:
7780; DARWIN-32-PIC:       ## %bb.0: ## %entry
7781; DARWIN-32-PIC-NEXT:    calll L93$pb
7782; DARWIN-32-PIC-NEXT:  L93$pb:
7783; DARWIN-32-PIC-NEXT:    popl %eax
7784; DARWIN-32-PIC-NEXT:    leal (_dsrc-L93$pb)+64(%eax), %eax
7785; DARWIN-32-PIC-NEXT:    retl
7786;
7787; DARWIN-64-STATIC-LABEL: bat03:
7788; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7789; DARWIN-64-STATIC-NEXT:    leaq _dsrc+64(%rip), %rax
7790; DARWIN-64-STATIC-NEXT:    retq
7791;
7792; DARWIN-64-DYNAMIC-LABEL: bat03:
7793; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7794; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc+64(%rip), %rax
7795; DARWIN-64-DYNAMIC-NEXT:    retq
7796;
7797; DARWIN-64-PIC-LABEL: bat03:
7798; DARWIN-64-PIC:       ## %bb.0: ## %entry
7799; DARWIN-64-PIC-NEXT:    leaq _dsrc+64(%rip), %rax
7800; DARWIN-64-PIC-NEXT:    retq
7801
7802entry:
7803	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
7804}
7805
7806define i8* @bat04() nounwind {
7807; LINUX-64-STATIC-LABEL: bat04:
7808; LINUX-64-STATIC:       # %bb.0: # %entry
7809; LINUX-64-STATIC-NEXT:    movl $ddst+64, %eax
7810; LINUX-64-STATIC-NEXT:    retq
7811;
7812; LINUX-32-STATIC-LABEL: bat04:
7813; LINUX-32-STATIC:       # %bb.0: # %entry
7814; LINUX-32-STATIC-NEXT:    movl $ddst+64, %eax
7815; LINUX-32-STATIC-NEXT:    retl
7816;
7817; LINUX-32-PIC-LABEL: bat04:
7818; LINUX-32-PIC:       # %bb.0: # %entry
7819; LINUX-32-PIC-NEXT:    calll .L94$pb
7820; LINUX-32-PIC-NEXT:  .L94$pb:
7821; LINUX-32-PIC-NEXT:    popl %eax
7822; LINUX-32-PIC-NEXT:  .Ltmp94:
7823; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp94-.L94$pb), %eax
7824; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
7825; LINUX-32-PIC-NEXT:    addl $64, %eax
7826; LINUX-32-PIC-NEXT:    retl
7827;
7828; LINUX-64-PIC-LABEL: bat04:
7829; LINUX-64-PIC:       # %bb.0: # %entry
7830; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
7831; LINUX-64-PIC-NEXT:    addq $64, %rax
7832; LINUX-64-PIC-NEXT:    retq
7833;
7834; DARWIN-32-STATIC-LABEL: bat04:
7835; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7836; DARWIN-32-STATIC-NEXT:    movl $_ddst+64, %eax
7837; DARWIN-32-STATIC-NEXT:    retl
7838;
7839; DARWIN-32-DYNAMIC-LABEL: bat04:
7840; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7841; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+64, %eax
7842; DARWIN-32-DYNAMIC-NEXT:    retl
7843;
7844; DARWIN-32-PIC-LABEL: bat04:
7845; DARWIN-32-PIC:       ## %bb.0: ## %entry
7846; DARWIN-32-PIC-NEXT:    calll L94$pb
7847; DARWIN-32-PIC-NEXT:  L94$pb:
7848; DARWIN-32-PIC-NEXT:    popl %eax
7849; DARWIN-32-PIC-NEXT:    leal (_ddst-L94$pb)+64(%eax), %eax
7850; DARWIN-32-PIC-NEXT:    retl
7851;
7852; DARWIN-64-STATIC-LABEL: bat04:
7853; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7854; DARWIN-64-STATIC-NEXT:    leaq _ddst+64(%rip), %rax
7855; DARWIN-64-STATIC-NEXT:    retq
7856;
7857; DARWIN-64-DYNAMIC-LABEL: bat04:
7858; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7859; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+64(%rip), %rax
7860; DARWIN-64-DYNAMIC-NEXT:    retq
7861;
7862; DARWIN-64-PIC-LABEL: bat04:
7863; DARWIN-64-PIC:       ## %bb.0: ## %entry
7864; DARWIN-64-PIC-NEXT:    leaq _ddst+64(%rip), %rax
7865; DARWIN-64-PIC-NEXT:    retq
7866
7867entry:
7868	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16) to i8*)
7869}
7870
7871define i8* @bat05() nounwind {
7872; LINUX-64-STATIC-LABEL: bat05:
7873; LINUX-64-STATIC:       # %bb.0: # %entry
7874; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
7875; LINUX-64-STATIC-NEXT:    addq $64, %rax
7876; LINUX-64-STATIC-NEXT:    retq
7877;
7878; LINUX-32-STATIC-LABEL: bat05:
7879; LINUX-32-STATIC:       # %bb.0: # %entry
7880; LINUX-32-STATIC-NEXT:    movl dptr, %eax
7881; LINUX-32-STATIC-NEXT:    addl $64, %eax
7882; LINUX-32-STATIC-NEXT:    retl
7883;
7884; LINUX-32-PIC-LABEL: bat05:
7885; LINUX-32-PIC:       # %bb.0: # %entry
7886; LINUX-32-PIC-NEXT:    calll .L95$pb
7887; LINUX-32-PIC-NEXT:  .L95$pb:
7888; LINUX-32-PIC-NEXT:    popl %eax
7889; LINUX-32-PIC-NEXT:  .Ltmp95:
7890; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp95-.L95$pb), %eax
7891; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
7892; LINUX-32-PIC-NEXT:    movl (%eax), %eax
7893; LINUX-32-PIC-NEXT:    addl $64, %eax
7894; LINUX-32-PIC-NEXT:    retl
7895;
7896; LINUX-64-PIC-LABEL: bat05:
7897; LINUX-64-PIC:       # %bb.0: # %entry
7898; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
7899; LINUX-64-PIC-NEXT:    movq (%rax), %rax
7900; LINUX-64-PIC-NEXT:    addq $64, %rax
7901; LINUX-64-PIC-NEXT:    retq
7902;
7903; DARWIN-32-STATIC-LABEL: bat05:
7904; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7905; DARWIN-32-STATIC-NEXT:    movl _dptr, %eax
7906; DARWIN-32-STATIC-NEXT:    addl $64, %eax
7907; DARWIN-32-STATIC-NEXT:    retl
7908;
7909; DARWIN-32-DYNAMIC-LABEL: bat05:
7910; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7911; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %eax
7912; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7913; DARWIN-32-DYNAMIC-NEXT:    retl
7914;
7915; DARWIN-32-PIC-LABEL: bat05:
7916; DARWIN-32-PIC:       ## %bb.0: ## %entry
7917; DARWIN-32-PIC-NEXT:    calll L95$pb
7918; DARWIN-32-PIC-NEXT:  L95$pb:
7919; DARWIN-32-PIC-NEXT:    popl %eax
7920; DARWIN-32-PIC-NEXT:    movl _dptr-L95$pb(%eax), %eax
7921; DARWIN-32-PIC-NEXT:    addl $64, %eax
7922; DARWIN-32-PIC-NEXT:    retl
7923;
7924; DARWIN-64-STATIC-LABEL: bat05:
7925; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7926; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
7927; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7928; DARWIN-64-STATIC-NEXT:    retq
7929;
7930; DARWIN-64-DYNAMIC-LABEL: bat05:
7931; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7932; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
7933; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7934; DARWIN-64-DYNAMIC-NEXT:    retq
7935;
7936; DARWIN-64-PIC-LABEL: bat05:
7937; DARWIN-64-PIC:       ## %bb.0: ## %entry
7938; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
7939; DARWIN-64-PIC-NEXT:    addq $64, %rax
7940; DARWIN-64-PIC-NEXT:    retq
7941
7942entry:
7943	%0 = load i32*, i32** @dptr, align 8
7944	%1 = getelementptr i32, i32* %0, i64 16
7945	%2 = bitcast i32* %1 to i8*
7946	ret i8* %2
7947}
7948
7949define i8* @bat06() nounwind {
7950; LINUX-64-STATIC-LABEL: bat06:
7951; LINUX-64-STATIC:       # %bb.0: # %entry
7952; LINUX-64-STATIC-NEXT:    movl $lsrc+64, %eax
7953; LINUX-64-STATIC-NEXT:    retq
7954;
7955; LINUX-32-STATIC-LABEL: bat06:
7956; LINUX-32-STATIC:       # %bb.0: # %entry
7957; LINUX-32-STATIC-NEXT:    movl $lsrc+64, %eax
7958; LINUX-32-STATIC-NEXT:    retl
7959;
7960; LINUX-32-PIC-LABEL: bat06:
7961; LINUX-32-PIC:       # %bb.0: # %entry
7962; LINUX-32-PIC-NEXT:    calll .L96$pb
7963; LINUX-32-PIC-NEXT:  .L96$pb:
7964; LINUX-32-PIC-NEXT:    popl %eax
7965; LINUX-32-PIC-NEXT:  .Ltmp96:
7966; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp96-.L96$pb), %eax
7967; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+64(%eax), %eax
7968; LINUX-32-PIC-NEXT:    retl
7969;
7970; LINUX-64-PIC-LABEL: bat06:
7971; LINUX-64-PIC:       # %bb.0: # %entry
7972; LINUX-64-PIC-NEXT:    leaq lsrc+64(%rip), %rax
7973; LINUX-64-PIC-NEXT:    retq
7974;
7975; DARWIN-32-STATIC-LABEL: bat06:
7976; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7977; DARWIN-32-STATIC-NEXT:    movl $_lsrc+64, %eax
7978; DARWIN-32-STATIC-NEXT:    retl
7979;
7980; DARWIN-32-DYNAMIC-LABEL: bat06:
7981; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7982; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc+64, %eax
7983; DARWIN-32-DYNAMIC-NEXT:    retl
7984;
7985; DARWIN-32-PIC-LABEL: bat06:
7986; DARWIN-32-PIC:       ## %bb.0: ## %entry
7987; DARWIN-32-PIC-NEXT:    calll L96$pb
7988; DARWIN-32-PIC-NEXT:  L96$pb:
7989; DARWIN-32-PIC-NEXT:    popl %eax
7990; DARWIN-32-PIC-NEXT:    leal (_lsrc-L96$pb)+64(%eax), %eax
7991; DARWIN-32-PIC-NEXT:    retl
7992;
7993; DARWIN-64-STATIC-LABEL: bat06:
7994; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7995; DARWIN-64-STATIC-NEXT:    leaq _lsrc+64(%rip), %rax
7996; DARWIN-64-STATIC-NEXT:    retq
7997;
7998; DARWIN-64-DYNAMIC-LABEL: bat06:
7999; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8000; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc+64(%rip), %rax
8001; DARWIN-64-DYNAMIC-NEXT:    retq
8002;
8003; DARWIN-64-PIC-LABEL: bat06:
8004; DARWIN-64-PIC:       ## %bb.0: ## %entry
8005; DARWIN-64-PIC-NEXT:    leaq _lsrc+64(%rip), %rax
8006; DARWIN-64-PIC-NEXT:    retq
8007
8008entry:
8009	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
8010}
8011
8012define i8* @bat07() nounwind {
8013; LINUX-64-STATIC-LABEL: bat07:
8014; LINUX-64-STATIC:       # %bb.0: # %entry
8015; LINUX-64-STATIC-NEXT:    movl $ldst+64, %eax
8016; LINUX-64-STATIC-NEXT:    retq
8017;
8018; LINUX-32-STATIC-LABEL: bat07:
8019; LINUX-32-STATIC:       # %bb.0: # %entry
8020; LINUX-32-STATIC-NEXT:    movl $ldst+64, %eax
8021; LINUX-32-STATIC-NEXT:    retl
8022;
8023; LINUX-32-PIC-LABEL: bat07:
8024; LINUX-32-PIC:       # %bb.0: # %entry
8025; LINUX-32-PIC-NEXT:    calll .L97$pb
8026; LINUX-32-PIC-NEXT:  .L97$pb:
8027; LINUX-32-PIC-NEXT:    popl %eax
8028; LINUX-32-PIC-NEXT:  .Ltmp97:
8029; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp97-.L97$pb), %eax
8030; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax), %eax
8031; LINUX-32-PIC-NEXT:    retl
8032;
8033; LINUX-64-PIC-LABEL: bat07:
8034; LINUX-64-PIC:       # %bb.0: # %entry
8035; LINUX-64-PIC-NEXT:    leaq ldst+64(%rip), %rax
8036; LINUX-64-PIC-NEXT:    retq
8037;
8038; DARWIN-32-STATIC-LABEL: bat07:
8039; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8040; DARWIN-32-STATIC-NEXT:    movl $_ldst+64, %eax
8041; DARWIN-32-STATIC-NEXT:    retl
8042;
8043; DARWIN-32-DYNAMIC-LABEL: bat07:
8044; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8045; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+64, %eax
8046; DARWIN-32-DYNAMIC-NEXT:    retl
8047;
8048; DARWIN-32-PIC-LABEL: bat07:
8049; DARWIN-32-PIC:       ## %bb.0: ## %entry
8050; DARWIN-32-PIC-NEXT:    calll L97$pb
8051; DARWIN-32-PIC-NEXT:  L97$pb:
8052; DARWIN-32-PIC-NEXT:    popl %eax
8053; DARWIN-32-PIC-NEXT:    leal (_ldst-L97$pb)+64(%eax), %eax
8054; DARWIN-32-PIC-NEXT:    retl
8055;
8056; DARWIN-64-STATIC-LABEL: bat07:
8057; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8058; DARWIN-64-STATIC-NEXT:    leaq _ldst+64(%rip), %rax
8059; DARWIN-64-STATIC-NEXT:    retq
8060;
8061; DARWIN-64-DYNAMIC-LABEL: bat07:
8062; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8063; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+64(%rip), %rax
8064; DARWIN-64-DYNAMIC-NEXT:    retq
8065;
8066; DARWIN-64-PIC-LABEL: bat07:
8067; DARWIN-64-PIC:       ## %bb.0: ## %entry
8068; DARWIN-64-PIC-NEXT:    leaq _ldst+64(%rip), %rax
8069; DARWIN-64-PIC-NEXT:    retq
8070
8071entry:
8072	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16) to i8*)
8073}
8074
8075define i8* @bat08() nounwind {
8076; LINUX-64-STATIC-LABEL: bat08:
8077; LINUX-64-STATIC:       # %bb.0: # %entry
8078; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
8079; LINUX-64-STATIC-NEXT:    addq $64, %rax
8080; LINUX-64-STATIC-NEXT:    retq
8081;
8082; LINUX-32-STATIC-LABEL: bat08:
8083; LINUX-32-STATIC:       # %bb.0: # %entry
8084; LINUX-32-STATIC-NEXT:    movl lptr, %eax
8085; LINUX-32-STATIC-NEXT:    addl $64, %eax
8086; LINUX-32-STATIC-NEXT:    retl
8087;
8088; LINUX-32-PIC-LABEL: bat08:
8089; LINUX-32-PIC:       # %bb.0: # %entry
8090; LINUX-32-PIC-NEXT:    calll .L98$pb
8091; LINUX-32-PIC-NEXT:  .L98$pb:
8092; LINUX-32-PIC-NEXT:    popl %eax
8093; LINUX-32-PIC-NEXT:  .Ltmp98:
8094; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp98-.L98$pb), %eax
8095; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
8096; LINUX-32-PIC-NEXT:    addl $64, %eax
8097; LINUX-32-PIC-NEXT:    retl
8098;
8099; LINUX-64-PIC-LABEL: bat08:
8100; LINUX-64-PIC:       # %bb.0: # %entry
8101; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
8102; LINUX-64-PIC-NEXT:    addq $64, %rax
8103; LINUX-64-PIC-NEXT:    retq
8104;
8105; DARWIN-32-STATIC-LABEL: bat08:
8106; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8107; DARWIN-32-STATIC-NEXT:    movl _lptr, %eax
8108; DARWIN-32-STATIC-NEXT:    addl $64, %eax
8109; DARWIN-32-STATIC-NEXT:    retl
8110;
8111; DARWIN-32-DYNAMIC-LABEL: bat08:
8112; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8113; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %eax
8114; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
8115; DARWIN-32-DYNAMIC-NEXT:    retl
8116;
8117; DARWIN-32-PIC-LABEL: bat08:
8118; DARWIN-32-PIC:       ## %bb.0: ## %entry
8119; DARWIN-32-PIC-NEXT:    calll L98$pb
8120; DARWIN-32-PIC-NEXT:  L98$pb:
8121; DARWIN-32-PIC-NEXT:    popl %eax
8122; DARWIN-32-PIC-NEXT:    movl _lptr-L98$pb(%eax), %eax
8123; DARWIN-32-PIC-NEXT:    addl $64, %eax
8124; DARWIN-32-PIC-NEXT:    retl
8125;
8126; DARWIN-64-STATIC-LABEL: bat08:
8127; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8128; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
8129; DARWIN-64-STATIC-NEXT:    addq $64, %rax
8130; DARWIN-64-STATIC-NEXT:    retq
8131;
8132; DARWIN-64-DYNAMIC-LABEL: bat08:
8133; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8134; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
8135; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
8136; DARWIN-64-DYNAMIC-NEXT:    retq
8137;
8138; DARWIN-64-PIC-LABEL: bat08:
8139; DARWIN-64-PIC:       ## %bb.0: ## %entry
8140; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
8141; DARWIN-64-PIC-NEXT:    addq $64, %rax
8142; DARWIN-64-PIC-NEXT:    retq
8143
8144entry:
8145	%0 = load i32*, i32** @lptr, align 8
8146	%1 = getelementptr i32, i32* %0, i64 16
8147	%2 = bitcast i32* %1 to i8*
8148	ret i8* %2
8149}
8150
8151define i8* @bam00() nounwind {
8152; LINUX-64-STATIC-LABEL: bam00:
8153; LINUX-64-STATIC:       # %bb.0: # %entry
8154; LINUX-64-STATIC-NEXT:    movl $src+262144, %eax
8155; LINUX-64-STATIC-NEXT:    retq
8156;
8157; LINUX-32-STATIC-LABEL: bam00:
8158; LINUX-32-STATIC:       # %bb.0: # %entry
8159; LINUX-32-STATIC-NEXT:    movl $src+262144, %eax
8160; LINUX-32-STATIC-NEXT:    retl
8161;
8162; LINUX-32-PIC-LABEL: bam00:
8163; LINUX-32-PIC:       # %bb.0: # %entry
8164; LINUX-32-PIC-NEXT:    calll .L99$pb
8165; LINUX-32-PIC-NEXT:  .L99$pb:
8166; LINUX-32-PIC-NEXT:    popl %ecx
8167; LINUX-32-PIC-NEXT:  .Ltmp99:
8168; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp99-.L99$pb), %ecx
8169; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8170; LINUX-32-PIC-NEXT:    addl src@GOT(%ecx), %eax
8171; LINUX-32-PIC-NEXT:    retl
8172;
8173; LINUX-64-PIC-LABEL: bam00:
8174; LINUX-64-PIC:       # %bb.0: # %entry
8175; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8176; LINUX-64-PIC-NEXT:    addq src@GOTPCREL(%rip), %rax
8177; LINUX-64-PIC-NEXT:    retq
8178;
8179; DARWIN-32-STATIC-LABEL: bam00:
8180; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8181; DARWIN-32-STATIC-NEXT:    movl $_src+262144, %eax
8182; DARWIN-32-STATIC-NEXT:    retl
8183;
8184; DARWIN-32-DYNAMIC-LABEL: bam00:
8185; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8186; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8187; DARWIN-32-DYNAMIC-NEXT:    addl L_src$non_lazy_ptr, %eax
8188; DARWIN-32-DYNAMIC-NEXT:    retl
8189;
8190; DARWIN-32-PIC-LABEL: bam00:
8191; DARWIN-32-PIC:       ## %bb.0: ## %entry
8192; DARWIN-32-PIC-NEXT:    calll L99$pb
8193; DARWIN-32-PIC-NEXT:  L99$pb:
8194; DARWIN-32-PIC-NEXT:    popl %ecx
8195; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8196; DARWIN-32-PIC-NEXT:    addl L_src$non_lazy_ptr-L99$pb(%ecx), %eax
8197; DARWIN-32-PIC-NEXT:    retl
8198;
8199; DARWIN-64-STATIC-LABEL: bam00:
8200; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8201; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8202; DARWIN-64-STATIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8203; DARWIN-64-STATIC-NEXT:    retq
8204;
8205; DARWIN-64-DYNAMIC-LABEL: bam00:
8206; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8207; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8208; DARWIN-64-DYNAMIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8209; DARWIN-64-DYNAMIC-NEXT:    retq
8210;
8211; DARWIN-64-PIC-LABEL: bam00:
8212; DARWIN-64-PIC:       ## %bb.0: ## %entry
8213; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8214; DARWIN-64-PIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8215; DARWIN-64-PIC-NEXT:    retq
8216
8217entry:
8218	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536) to i8*)
8219}
8220
8221define i8* @bam01() nounwind {
8222; LINUX-64-STATIC-LABEL: bam01:
8223; LINUX-64-STATIC:       # %bb.0: # %entry
8224; LINUX-64-STATIC-NEXT:    movl $dst+262144, %eax
8225; LINUX-64-STATIC-NEXT:    retq
8226;
8227; LINUX-32-STATIC-LABEL: bam01:
8228; LINUX-32-STATIC:       # %bb.0: # %entry
8229; LINUX-32-STATIC-NEXT:    movl $dst+262144, %eax
8230; LINUX-32-STATIC-NEXT:    retl
8231;
8232; LINUX-32-PIC-LABEL: bam01:
8233; LINUX-32-PIC:       # %bb.0: # %entry
8234; LINUX-32-PIC-NEXT:    calll .L100$pb
8235; LINUX-32-PIC-NEXT:  .L100$pb:
8236; LINUX-32-PIC-NEXT:    popl %ecx
8237; LINUX-32-PIC-NEXT:  .Ltmp100:
8238; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp100-.L100$pb), %ecx
8239; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8240; LINUX-32-PIC-NEXT:    addl dst@GOT(%ecx), %eax
8241; LINUX-32-PIC-NEXT:    retl
8242;
8243; LINUX-64-PIC-LABEL: bam01:
8244; LINUX-64-PIC:       # %bb.0: # %entry
8245; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8246; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
8247; LINUX-64-PIC-NEXT:    retq
8248;
8249; DARWIN-32-STATIC-LABEL: bam01:
8250; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8251; DARWIN-32-STATIC-NEXT:    movl $_dst+262144, %eax
8252; DARWIN-32-STATIC-NEXT:    retl
8253;
8254; DARWIN-32-DYNAMIC-LABEL: bam01:
8255; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8256; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8257; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
8258; DARWIN-32-DYNAMIC-NEXT:    retl
8259;
8260; DARWIN-32-PIC-LABEL: bam01:
8261; DARWIN-32-PIC:       ## %bb.0: ## %entry
8262; DARWIN-32-PIC-NEXT:    calll L100$pb
8263; DARWIN-32-PIC-NEXT:  L100$pb:
8264; DARWIN-32-PIC-NEXT:    popl %ecx
8265; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8266; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L100$pb(%ecx), %eax
8267; DARWIN-32-PIC-NEXT:    retl
8268;
8269; DARWIN-64-STATIC-LABEL: bam01:
8270; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8271; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8272; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8273; DARWIN-64-STATIC-NEXT:    retq
8274;
8275; DARWIN-64-DYNAMIC-LABEL: bam01:
8276; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8277; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8278; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8279; DARWIN-64-DYNAMIC-NEXT:    retq
8280;
8281; DARWIN-64-PIC-LABEL: bam01:
8282; DARWIN-64-PIC:       ## %bb.0: ## %entry
8283; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8284; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8285; DARWIN-64-PIC-NEXT:    retq
8286
8287entry:
8288	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536) to i8*)
8289}
8290
8291define i8* @bxm01() nounwind {
8292; LINUX-64-STATIC-LABEL: bxm01:
8293; LINUX-64-STATIC:       # %bb.0: # %entry
8294; LINUX-64-STATIC-NEXT:    movl $xdst+262144, %eax
8295; LINUX-64-STATIC-NEXT:    retq
8296;
8297; LINUX-32-STATIC-LABEL: bxm01:
8298; LINUX-32-STATIC:       # %bb.0: # %entry
8299; LINUX-32-STATIC-NEXT:    movl $xdst+262144, %eax
8300; LINUX-32-STATIC-NEXT:    retl
8301;
8302; LINUX-32-PIC-LABEL: bxm01:
8303; LINUX-32-PIC:       # %bb.0: # %entry
8304; LINUX-32-PIC-NEXT:    calll .L101$pb
8305; LINUX-32-PIC-NEXT:  .L101$pb:
8306; LINUX-32-PIC-NEXT:    popl %ecx
8307; LINUX-32-PIC-NEXT:  .Ltmp101:
8308; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp101-.L101$pb), %ecx
8309; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8310; LINUX-32-PIC-NEXT:    addl xdst@GOT(%ecx), %eax
8311; LINUX-32-PIC-NEXT:    retl
8312;
8313; LINUX-64-PIC-LABEL: bxm01:
8314; LINUX-64-PIC:       # %bb.0: # %entry
8315; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8316; LINUX-64-PIC-NEXT:    addq xdst@GOTPCREL(%rip), %rax
8317; LINUX-64-PIC-NEXT:    retq
8318;
8319; DARWIN-32-STATIC-LABEL: bxm01:
8320; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8321; DARWIN-32-STATIC-NEXT:    movl $_xdst+262144, %eax
8322; DARWIN-32-STATIC-NEXT:    retl
8323;
8324; DARWIN-32-DYNAMIC-LABEL: bxm01:
8325; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8326; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8327; DARWIN-32-DYNAMIC-NEXT:    addl L_xdst$non_lazy_ptr, %eax
8328; DARWIN-32-DYNAMIC-NEXT:    retl
8329;
8330; DARWIN-32-PIC-LABEL: bxm01:
8331; DARWIN-32-PIC:       ## %bb.0: ## %entry
8332; DARWIN-32-PIC-NEXT:    calll L101$pb
8333; DARWIN-32-PIC-NEXT:  L101$pb:
8334; DARWIN-32-PIC-NEXT:    popl %ecx
8335; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8336; DARWIN-32-PIC-NEXT:    addl L_xdst$non_lazy_ptr-L101$pb(%ecx), %eax
8337; DARWIN-32-PIC-NEXT:    retl
8338;
8339; DARWIN-64-STATIC-LABEL: bxm01:
8340; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8341; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8342; DARWIN-64-STATIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8343; DARWIN-64-STATIC-NEXT:    retq
8344;
8345; DARWIN-64-DYNAMIC-LABEL: bxm01:
8346; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8347; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8348; DARWIN-64-DYNAMIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8349; DARWIN-64-DYNAMIC-NEXT:    retq
8350;
8351; DARWIN-64-PIC-LABEL: bxm01:
8352; DARWIN-64-PIC:       ## %bb.0: ## %entry
8353; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8354; DARWIN-64-PIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8355; DARWIN-64-PIC-NEXT:    retq
8356
8357entry:
8358	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 65536) to i8*)
8359}
8360
8361define i8* @bam02() nounwind {
8362; LINUX-64-STATIC-LABEL: bam02:
8363; LINUX-64-STATIC:       # %bb.0: # %entry
8364; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8365; LINUX-64-STATIC-NEXT:    addq ptr(%rip), %rax
8366; LINUX-64-STATIC-NEXT:    retq
8367;
8368; LINUX-32-STATIC-LABEL: bam02:
8369; LINUX-32-STATIC:       # %bb.0: # %entry
8370; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8371; LINUX-32-STATIC-NEXT:    addl ptr, %eax
8372; LINUX-32-STATIC-NEXT:    retl
8373;
8374; LINUX-32-PIC-LABEL: bam02:
8375; LINUX-32-PIC:       # %bb.0: # %entry
8376; LINUX-32-PIC-NEXT:    calll .L102$pb
8377; LINUX-32-PIC-NEXT:  .L102$pb:
8378; LINUX-32-PIC-NEXT:    popl %eax
8379; LINUX-32-PIC-NEXT:  .Ltmp102:
8380; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp102-.L102$pb), %eax
8381; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %ecx
8382; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8383; LINUX-32-PIC-NEXT:    addl (%ecx), %eax
8384; LINUX-32-PIC-NEXT:    retl
8385;
8386; LINUX-64-PIC-LABEL: bam02:
8387; LINUX-64-PIC:       # %bb.0: # %entry
8388; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
8389; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8390; LINUX-64-PIC-NEXT:    addq (%rcx), %rax
8391; LINUX-64-PIC-NEXT:    retq
8392;
8393; DARWIN-32-STATIC-LABEL: bam02:
8394; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8395; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8396; DARWIN-32-STATIC-NEXT:    addl _ptr, %eax
8397; DARWIN-32-STATIC-NEXT:    retl
8398;
8399; DARWIN-32-DYNAMIC-LABEL: bam02:
8400; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8401; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
8402; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8403; DARWIN-32-DYNAMIC-NEXT:    addl (%ecx), %eax
8404; DARWIN-32-DYNAMIC-NEXT:    retl
8405;
8406; DARWIN-32-PIC-LABEL: bam02:
8407; DARWIN-32-PIC:       ## %bb.0: ## %entry
8408; DARWIN-32-PIC-NEXT:    calll L102$pb
8409; DARWIN-32-PIC-NEXT:  L102$pb:
8410; DARWIN-32-PIC-NEXT:    popl %eax
8411; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L102$pb(%eax), %ecx
8412; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8413; DARWIN-32-PIC-NEXT:    addl (%ecx), %eax
8414; DARWIN-32-PIC-NEXT:    retl
8415;
8416; DARWIN-64-STATIC-LABEL: bam02:
8417; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8418; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8419; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8420; DARWIN-64-STATIC-NEXT:    addq (%rcx), %rax
8421; DARWIN-64-STATIC-NEXT:    retq
8422;
8423; DARWIN-64-DYNAMIC-LABEL: bam02:
8424; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8425; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8426; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8427; DARWIN-64-DYNAMIC-NEXT:    addq (%rcx), %rax
8428; DARWIN-64-DYNAMIC-NEXT:    retq
8429;
8430; DARWIN-64-PIC-LABEL: bam02:
8431; DARWIN-64-PIC:       ## %bb.0: ## %entry
8432; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8433; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8434; DARWIN-64-PIC-NEXT:    addq (%rcx), %rax
8435; DARWIN-64-PIC-NEXT:    retq
8436
8437entry:
8438	%0 = load i32*, i32** @ptr, align 8
8439	%1 = getelementptr i32, i32* %0, i64 65536
8440	%2 = bitcast i32* %1 to i8*
8441	ret i8* %2
8442}
8443
8444define i8* @bam03() nounwind {
8445; LINUX-64-STATIC-LABEL: bam03:
8446; LINUX-64-STATIC:       # %bb.0: # %entry
8447; LINUX-64-STATIC-NEXT:    movl $dsrc+262144, %eax
8448; LINUX-64-STATIC-NEXT:    retq
8449;
8450; LINUX-32-STATIC-LABEL: bam03:
8451; LINUX-32-STATIC:       # %bb.0: # %entry
8452; LINUX-32-STATIC-NEXT:    movl $dsrc+262144, %eax
8453; LINUX-32-STATIC-NEXT:    retl
8454;
8455; LINUX-32-PIC-LABEL: bam03:
8456; LINUX-32-PIC:       # %bb.0: # %entry
8457; LINUX-32-PIC-NEXT:    calll .L103$pb
8458; LINUX-32-PIC-NEXT:  .L103$pb:
8459; LINUX-32-PIC-NEXT:    popl %ecx
8460; LINUX-32-PIC-NEXT:  .Ltmp103:
8461; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp103-.L103$pb), %ecx
8462; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8463; LINUX-32-PIC-NEXT:    addl dsrc@GOT(%ecx), %eax
8464; LINUX-32-PIC-NEXT:    retl
8465;
8466; LINUX-64-PIC-LABEL: bam03:
8467; LINUX-64-PIC:       # %bb.0: # %entry
8468; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8469; LINUX-64-PIC-NEXT:    addq dsrc@GOTPCREL(%rip), %rax
8470; LINUX-64-PIC-NEXT:    retq
8471;
8472; DARWIN-32-STATIC-LABEL: bam03:
8473; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8474; DARWIN-32-STATIC-NEXT:    movl $_dsrc+262144, %eax
8475; DARWIN-32-STATIC-NEXT:    retl
8476;
8477; DARWIN-32-DYNAMIC-LABEL: bam03:
8478; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8479; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc+262144, %eax
8480; DARWIN-32-DYNAMIC-NEXT:    retl
8481;
8482; DARWIN-32-PIC-LABEL: bam03:
8483; DARWIN-32-PIC:       ## %bb.0: ## %entry
8484; DARWIN-32-PIC-NEXT:    calll L103$pb
8485; DARWIN-32-PIC-NEXT:  L103$pb:
8486; DARWIN-32-PIC-NEXT:    popl %eax
8487; DARWIN-32-PIC-NEXT:    leal (_dsrc-L103$pb)+262144(%eax), %eax
8488; DARWIN-32-PIC-NEXT:    retl
8489;
8490; DARWIN-64-STATIC-LABEL: bam03:
8491; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8492; DARWIN-64-STATIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8493; DARWIN-64-STATIC-NEXT:    retq
8494;
8495; DARWIN-64-DYNAMIC-LABEL: bam03:
8496; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8497; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8498; DARWIN-64-DYNAMIC-NEXT:    retq
8499;
8500; DARWIN-64-PIC-LABEL: bam03:
8501; DARWIN-64-PIC:       ## %bb.0: ## %entry
8502; DARWIN-64-PIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8503; DARWIN-64-PIC-NEXT:    retq
8504
8505entry:
8506	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
8507}
8508
8509define i8* @bam04() nounwind {
8510; LINUX-64-STATIC-LABEL: bam04:
8511; LINUX-64-STATIC:       # %bb.0: # %entry
8512; LINUX-64-STATIC-NEXT:    movl $ddst+262144, %eax
8513; LINUX-64-STATIC-NEXT:    retq
8514;
8515; LINUX-32-STATIC-LABEL: bam04:
8516; LINUX-32-STATIC:       # %bb.0: # %entry
8517; LINUX-32-STATIC-NEXT:    movl $ddst+262144, %eax
8518; LINUX-32-STATIC-NEXT:    retl
8519;
8520; LINUX-32-PIC-LABEL: bam04:
8521; LINUX-32-PIC:       # %bb.0: # %entry
8522; LINUX-32-PIC-NEXT:    calll .L104$pb
8523; LINUX-32-PIC-NEXT:  .L104$pb:
8524; LINUX-32-PIC-NEXT:    popl %ecx
8525; LINUX-32-PIC-NEXT:  .Ltmp104:
8526; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp104-.L104$pb), %ecx
8527; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8528; LINUX-32-PIC-NEXT:    addl ddst@GOT(%ecx), %eax
8529; LINUX-32-PIC-NEXT:    retl
8530;
8531; LINUX-64-PIC-LABEL: bam04:
8532; LINUX-64-PIC:       # %bb.0: # %entry
8533; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8534; LINUX-64-PIC-NEXT:    addq ddst@GOTPCREL(%rip), %rax
8535; LINUX-64-PIC-NEXT:    retq
8536;
8537; DARWIN-32-STATIC-LABEL: bam04:
8538; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8539; DARWIN-32-STATIC-NEXT:    movl $_ddst+262144, %eax
8540; DARWIN-32-STATIC-NEXT:    retl
8541;
8542; DARWIN-32-DYNAMIC-LABEL: bam04:
8543; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8544; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+262144, %eax
8545; DARWIN-32-DYNAMIC-NEXT:    retl
8546;
8547; DARWIN-32-PIC-LABEL: bam04:
8548; DARWIN-32-PIC:       ## %bb.0: ## %entry
8549; DARWIN-32-PIC-NEXT:    calll L104$pb
8550; DARWIN-32-PIC-NEXT:  L104$pb:
8551; DARWIN-32-PIC-NEXT:    popl %eax
8552; DARWIN-32-PIC-NEXT:    leal (_ddst-L104$pb)+262144(%eax), %eax
8553; DARWIN-32-PIC-NEXT:    retl
8554;
8555; DARWIN-64-STATIC-LABEL: bam04:
8556; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8557; DARWIN-64-STATIC-NEXT:    leaq _ddst+262144(%rip), %rax
8558; DARWIN-64-STATIC-NEXT:    retq
8559;
8560; DARWIN-64-DYNAMIC-LABEL: bam04:
8561; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8562; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+262144(%rip), %rax
8563; DARWIN-64-DYNAMIC-NEXT:    retq
8564;
8565; DARWIN-64-PIC-LABEL: bam04:
8566; DARWIN-64-PIC:       ## %bb.0: ## %entry
8567; DARWIN-64-PIC-NEXT:    leaq _ddst+262144(%rip), %rax
8568; DARWIN-64-PIC-NEXT:    retq
8569
8570entry:
8571	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
8572}
8573
8574define i8* @bam05() nounwind {
8575; LINUX-64-STATIC-LABEL: bam05:
8576; LINUX-64-STATIC:       # %bb.0: # %entry
8577; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8578; LINUX-64-STATIC-NEXT:    addq dptr(%rip), %rax
8579; LINUX-64-STATIC-NEXT:    retq
8580;
8581; LINUX-32-STATIC-LABEL: bam05:
8582; LINUX-32-STATIC:       # %bb.0: # %entry
8583; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8584; LINUX-32-STATIC-NEXT:    addl dptr, %eax
8585; LINUX-32-STATIC-NEXT:    retl
8586;
8587; LINUX-32-PIC-LABEL: bam05:
8588; LINUX-32-PIC:       # %bb.0: # %entry
8589; LINUX-32-PIC-NEXT:    calll .L105$pb
8590; LINUX-32-PIC-NEXT:  .L105$pb:
8591; LINUX-32-PIC-NEXT:    popl %eax
8592; LINUX-32-PIC-NEXT:  .Ltmp105:
8593; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp105-.L105$pb), %eax
8594; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %ecx
8595; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8596; LINUX-32-PIC-NEXT:    addl (%ecx), %eax
8597; LINUX-32-PIC-NEXT:    retl
8598;
8599; LINUX-64-PIC-LABEL: bam05:
8600; LINUX-64-PIC:       # %bb.0: # %entry
8601; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
8602; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8603; LINUX-64-PIC-NEXT:    addq (%rcx), %rax
8604; LINUX-64-PIC-NEXT:    retq
8605;
8606; DARWIN-32-STATIC-LABEL: bam05:
8607; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8608; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8609; DARWIN-32-STATIC-NEXT:    addl _dptr, %eax
8610; DARWIN-32-STATIC-NEXT:    retl
8611;
8612; DARWIN-32-DYNAMIC-LABEL: bam05:
8613; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8614; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8615; DARWIN-32-DYNAMIC-NEXT:    addl _dptr, %eax
8616; DARWIN-32-DYNAMIC-NEXT:    retl
8617;
8618; DARWIN-32-PIC-LABEL: bam05:
8619; DARWIN-32-PIC:       ## %bb.0: ## %entry
8620; DARWIN-32-PIC-NEXT:    calll L105$pb
8621; DARWIN-32-PIC-NEXT:  L105$pb:
8622; DARWIN-32-PIC-NEXT:    popl %ecx
8623; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8624; DARWIN-32-PIC-NEXT:    addl _dptr-L105$pb(%ecx), %eax
8625; DARWIN-32-PIC-NEXT:    retl
8626;
8627; DARWIN-64-STATIC-LABEL: bam05:
8628; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8629; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8630; DARWIN-64-STATIC-NEXT:    addq _dptr(%rip), %rax
8631; DARWIN-64-STATIC-NEXT:    retq
8632;
8633; DARWIN-64-DYNAMIC-LABEL: bam05:
8634; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8635; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8636; DARWIN-64-DYNAMIC-NEXT:    addq _dptr(%rip), %rax
8637; DARWIN-64-DYNAMIC-NEXT:    retq
8638;
8639; DARWIN-64-PIC-LABEL: bam05:
8640; DARWIN-64-PIC:       ## %bb.0: ## %entry
8641; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8642; DARWIN-64-PIC-NEXT:    addq _dptr(%rip), %rax
8643; DARWIN-64-PIC-NEXT:    retq
8644
8645entry:
8646	%0 = load i32*, i32** @dptr, align 8
8647	%1 = getelementptr i32, i32* %0, i64 65536
8648	%2 = bitcast i32* %1 to i8*
8649	ret i8* %2
8650}
8651
8652define i8* @bam06() nounwind {
8653; LINUX-64-STATIC-LABEL: bam06:
8654; LINUX-64-STATIC:       # %bb.0: # %entry
8655; LINUX-64-STATIC-NEXT:    movl $lsrc+262144, %eax
8656; LINUX-64-STATIC-NEXT:    retq
8657;
8658; LINUX-32-STATIC-LABEL: bam06:
8659; LINUX-32-STATIC:       # %bb.0: # %entry
8660; LINUX-32-STATIC-NEXT:    movl $lsrc+262144, %eax
8661; LINUX-32-STATIC-NEXT:    retl
8662;
8663; LINUX-32-PIC-LABEL: bam06:
8664; LINUX-32-PIC:       # %bb.0: # %entry
8665; LINUX-32-PIC-NEXT:    calll .L106$pb
8666; LINUX-32-PIC-NEXT:  .L106$pb:
8667; LINUX-32-PIC-NEXT:    popl %eax
8668; LINUX-32-PIC-NEXT:  .Ltmp106:
8669; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp106-.L106$pb), %eax
8670; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+262144(%eax), %eax
8671; LINUX-32-PIC-NEXT:    retl
8672;
8673; LINUX-64-PIC-LABEL: bam06:
8674; LINUX-64-PIC:       # %bb.0: # %entry
8675; LINUX-64-PIC-NEXT:    leaq lsrc+262144(%rip), %rax
8676; LINUX-64-PIC-NEXT:    retq
8677;
8678; DARWIN-32-STATIC-LABEL: bam06:
8679; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8680; DARWIN-32-STATIC-NEXT:    movl $_lsrc+262144, %eax
8681; DARWIN-32-STATIC-NEXT:    retl
8682;
8683; DARWIN-32-DYNAMIC-LABEL: bam06:
8684; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8685; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc+262144, %eax
8686; DARWIN-32-DYNAMIC-NEXT:    retl
8687;
8688; DARWIN-32-PIC-LABEL: bam06:
8689; DARWIN-32-PIC:       ## %bb.0: ## %entry
8690; DARWIN-32-PIC-NEXT:    calll L106$pb
8691; DARWIN-32-PIC-NEXT:  L106$pb:
8692; DARWIN-32-PIC-NEXT:    popl %eax
8693; DARWIN-32-PIC-NEXT:    leal (_lsrc-L106$pb)+262144(%eax), %eax
8694; DARWIN-32-PIC-NEXT:    retl
8695;
8696; DARWIN-64-STATIC-LABEL: bam06:
8697; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8698; DARWIN-64-STATIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8699; DARWIN-64-STATIC-NEXT:    retq
8700;
8701; DARWIN-64-DYNAMIC-LABEL: bam06:
8702; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8703; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8704; DARWIN-64-DYNAMIC-NEXT:    retq
8705;
8706; DARWIN-64-PIC-LABEL: bam06:
8707; DARWIN-64-PIC:       ## %bb.0: ## %entry
8708; DARWIN-64-PIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8709; DARWIN-64-PIC-NEXT:    retq
8710
8711entry:
8712	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
8713}
8714
8715define i8* @bam07() nounwind {
8716; LINUX-64-STATIC-LABEL: bam07:
8717; LINUX-64-STATIC:       # %bb.0: # %entry
8718; LINUX-64-STATIC-NEXT:    movl $ldst+262144, %eax
8719; LINUX-64-STATIC-NEXT:    retq
8720;
8721; LINUX-32-STATIC-LABEL: bam07:
8722; LINUX-32-STATIC:       # %bb.0: # %entry
8723; LINUX-32-STATIC-NEXT:    movl $ldst+262144, %eax
8724; LINUX-32-STATIC-NEXT:    retl
8725;
8726; LINUX-32-PIC-LABEL: bam07:
8727; LINUX-32-PIC:       # %bb.0: # %entry
8728; LINUX-32-PIC-NEXT:    calll .L107$pb
8729; LINUX-32-PIC-NEXT:  .L107$pb:
8730; LINUX-32-PIC-NEXT:    popl %eax
8731; LINUX-32-PIC-NEXT:  .Ltmp107:
8732; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp107-.L107$pb), %eax
8733; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax), %eax
8734; LINUX-32-PIC-NEXT:    retl
8735;
8736; LINUX-64-PIC-LABEL: bam07:
8737; LINUX-64-PIC:       # %bb.0: # %entry
8738; LINUX-64-PIC-NEXT:    leaq ldst+262144(%rip), %rax
8739; LINUX-64-PIC-NEXT:    retq
8740;
8741; DARWIN-32-STATIC-LABEL: bam07:
8742; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8743; DARWIN-32-STATIC-NEXT:    movl $_ldst+262144, %eax
8744; DARWIN-32-STATIC-NEXT:    retl
8745;
8746; DARWIN-32-DYNAMIC-LABEL: bam07:
8747; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8748; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+262144, %eax
8749; DARWIN-32-DYNAMIC-NEXT:    retl
8750;
8751; DARWIN-32-PIC-LABEL: bam07:
8752; DARWIN-32-PIC:       ## %bb.0: ## %entry
8753; DARWIN-32-PIC-NEXT:    calll L107$pb
8754; DARWIN-32-PIC-NEXT:  L107$pb:
8755; DARWIN-32-PIC-NEXT:    popl %eax
8756; DARWIN-32-PIC-NEXT:    leal (_ldst-L107$pb)+262144(%eax), %eax
8757; DARWIN-32-PIC-NEXT:    retl
8758;
8759; DARWIN-64-STATIC-LABEL: bam07:
8760; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8761; DARWIN-64-STATIC-NEXT:    leaq _ldst+262144(%rip), %rax
8762; DARWIN-64-STATIC-NEXT:    retq
8763;
8764; DARWIN-64-DYNAMIC-LABEL: bam07:
8765; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8766; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+262144(%rip), %rax
8767; DARWIN-64-DYNAMIC-NEXT:    retq
8768;
8769; DARWIN-64-PIC-LABEL: bam07:
8770; DARWIN-64-PIC:       ## %bb.0: ## %entry
8771; DARWIN-64-PIC-NEXT:    leaq _ldst+262144(%rip), %rax
8772; DARWIN-64-PIC-NEXT:    retq
8773
8774entry:
8775	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
8776}
8777
8778define i8* @bam08() nounwind {
8779; LINUX-64-STATIC-LABEL: bam08:
8780; LINUX-64-STATIC:       # %bb.0: # %entry
8781; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8782; LINUX-64-STATIC-NEXT:    addq lptr(%rip), %rax
8783; LINUX-64-STATIC-NEXT:    retq
8784;
8785; LINUX-32-STATIC-LABEL: bam08:
8786; LINUX-32-STATIC:       # %bb.0: # %entry
8787; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8788; LINUX-32-STATIC-NEXT:    addl lptr, %eax
8789; LINUX-32-STATIC-NEXT:    retl
8790;
8791; LINUX-32-PIC-LABEL: bam08:
8792; LINUX-32-PIC:       # %bb.0: # %entry
8793; LINUX-32-PIC-NEXT:    calll .L108$pb
8794; LINUX-32-PIC-NEXT:  .L108$pb:
8795; LINUX-32-PIC-NEXT:    popl %ecx
8796; LINUX-32-PIC-NEXT:  .Ltmp108:
8797; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp108-.L108$pb), %ecx
8798; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8799; LINUX-32-PIC-NEXT:    addl lptr@GOTOFF(%ecx), %eax
8800; LINUX-32-PIC-NEXT:    retl
8801;
8802; LINUX-64-PIC-LABEL: bam08:
8803; LINUX-64-PIC:       # %bb.0: # %entry
8804; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8805; LINUX-64-PIC-NEXT:    addq lptr(%rip), %rax
8806; LINUX-64-PIC-NEXT:    retq
8807;
8808; DARWIN-32-STATIC-LABEL: bam08:
8809; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8810; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8811; DARWIN-32-STATIC-NEXT:    addl _lptr, %eax
8812; DARWIN-32-STATIC-NEXT:    retl
8813;
8814; DARWIN-32-DYNAMIC-LABEL: bam08:
8815; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8816; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8817; DARWIN-32-DYNAMIC-NEXT:    addl _lptr, %eax
8818; DARWIN-32-DYNAMIC-NEXT:    retl
8819;
8820; DARWIN-32-PIC-LABEL: bam08:
8821; DARWIN-32-PIC:       ## %bb.0: ## %entry
8822; DARWIN-32-PIC-NEXT:    calll L108$pb
8823; DARWIN-32-PIC-NEXT:  L108$pb:
8824; DARWIN-32-PIC-NEXT:    popl %ecx
8825; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8826; DARWIN-32-PIC-NEXT:    addl _lptr-L108$pb(%ecx), %eax
8827; DARWIN-32-PIC-NEXT:    retl
8828;
8829; DARWIN-64-STATIC-LABEL: bam08:
8830; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8831; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8832; DARWIN-64-STATIC-NEXT:    addq _lptr(%rip), %rax
8833; DARWIN-64-STATIC-NEXT:    retq
8834;
8835; DARWIN-64-DYNAMIC-LABEL: bam08:
8836; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8837; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8838; DARWIN-64-DYNAMIC-NEXT:    addq _lptr(%rip), %rax
8839; DARWIN-64-DYNAMIC-NEXT:    retq
8840;
8841; DARWIN-64-PIC-LABEL: bam08:
8842; DARWIN-64-PIC:       ## %bb.0: ## %entry
8843; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8844; DARWIN-64-PIC-NEXT:    addq _lptr(%rip), %rax
8845; DARWIN-64-PIC-NEXT:    retq
8846
8847entry:
8848	%0 = load i32*, i32** @lptr, align 8
8849	%1 = getelementptr i32, i32* %0, i64 65536
8850	%2 = bitcast i32* %1 to i8*
8851	ret i8* %2
8852}
8853
8854define i8* @cat00(i64 %i) nounwind {
8855; LINUX-64-STATIC-LABEL: cat00:
8856; LINUX-64-STATIC:       # %bb.0: # %entry
8857; LINUX-64-STATIC-NEXT:    leaq src+64(,%rdi,4), %rax
8858; LINUX-64-STATIC-NEXT:    retq
8859;
8860; LINUX-32-STATIC-LABEL: cat00:
8861; LINUX-32-STATIC:       # %bb.0: # %entry
8862; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8863; LINUX-32-STATIC-NEXT:    leal src+64(,%eax,4), %eax
8864; LINUX-32-STATIC-NEXT:    retl
8865;
8866; LINUX-32-PIC-LABEL: cat00:
8867; LINUX-32-PIC:       # %bb.0: # %entry
8868; LINUX-32-PIC-NEXT:    calll .L109$pb
8869; LINUX-32-PIC-NEXT:  .L109$pb:
8870; LINUX-32-PIC-NEXT:    popl %eax
8871; LINUX-32-PIC-NEXT:  .Ltmp109:
8872; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp109-.L109$pb), %eax
8873; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8874; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
8875; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8876; LINUX-32-PIC-NEXT:    retl
8877;
8878; LINUX-64-PIC-LABEL: cat00:
8879; LINUX-64-PIC:       # %bb.0: # %entry
8880; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
8881; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8882; LINUX-64-PIC-NEXT:    retq
8883;
8884; DARWIN-32-STATIC-LABEL: cat00:
8885; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8886; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8887; DARWIN-32-STATIC-NEXT:    leal _src+64(,%eax,4), %eax
8888; DARWIN-32-STATIC-NEXT:    retl
8889;
8890; DARWIN-32-DYNAMIC-LABEL: cat00:
8891; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8892; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8893; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
8894; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
8895; DARWIN-32-DYNAMIC-NEXT:    retl
8896;
8897; DARWIN-32-PIC-LABEL: cat00:
8898; DARWIN-32-PIC:       ## %bb.0: ## %entry
8899; DARWIN-32-PIC-NEXT:    calll L109$pb
8900; DARWIN-32-PIC-NEXT:  L109$pb:
8901; DARWIN-32-PIC-NEXT:    popl %eax
8902; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8903; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L109$pb(%eax), %eax
8904; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8905; DARWIN-32-PIC-NEXT:    retl
8906;
8907; DARWIN-64-STATIC-LABEL: cat00:
8908; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8909; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8910; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8911; DARWIN-64-STATIC-NEXT:    retq
8912;
8913; DARWIN-64-DYNAMIC-LABEL: cat00:
8914; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8915; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8916; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8917; DARWIN-64-DYNAMIC-NEXT:    retq
8918;
8919; DARWIN-64-PIC-LABEL: cat00:
8920; DARWIN-64-PIC:       ## %bb.0: ## %entry
8921; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8922; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8923; DARWIN-64-PIC-NEXT:    retq
8924
8925entry:
8926	%0 = add i64 %i, 16
8927	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
8928	%2 = bitcast i32* %1 to i8*
8929	ret i8* %2
8930}
8931
8932define i8* @cxt00(i64 %i) nounwind {
8933; LINUX-64-STATIC-LABEL: cxt00:
8934; LINUX-64-STATIC:       # %bb.0: # %entry
8935; LINUX-64-STATIC-NEXT:    leaq xsrc+64(,%rdi,4), %rax
8936; LINUX-64-STATIC-NEXT:    retq
8937;
8938; LINUX-32-STATIC-LABEL: cxt00:
8939; LINUX-32-STATIC:       # %bb.0: # %entry
8940; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8941; LINUX-32-STATIC-NEXT:    leal xsrc+64(,%eax,4), %eax
8942; LINUX-32-STATIC-NEXT:    retl
8943;
8944; LINUX-32-PIC-LABEL: cxt00:
8945; LINUX-32-PIC:       # %bb.0: # %entry
8946; LINUX-32-PIC-NEXT:    calll .L110$pb
8947; LINUX-32-PIC-NEXT:  .L110$pb:
8948; LINUX-32-PIC-NEXT:    popl %eax
8949; LINUX-32-PIC-NEXT:  .Ltmp110:
8950; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp110-.L110$pb), %eax
8951; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8952; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
8953; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8954; LINUX-32-PIC-NEXT:    retl
8955;
8956; LINUX-64-PIC-LABEL: cxt00:
8957; LINUX-64-PIC:       # %bb.0: # %entry
8958; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
8959; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8960; LINUX-64-PIC-NEXT:    retq
8961;
8962; DARWIN-32-STATIC-LABEL: cxt00:
8963; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8964; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8965; DARWIN-32-STATIC-NEXT:    leal _xsrc+64(,%eax,4), %eax
8966; DARWIN-32-STATIC-NEXT:    retl
8967;
8968; DARWIN-32-DYNAMIC-LABEL: cxt00:
8969; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8970; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8971; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
8972; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
8973; DARWIN-32-DYNAMIC-NEXT:    retl
8974;
8975; DARWIN-32-PIC-LABEL: cxt00:
8976; DARWIN-32-PIC:       ## %bb.0: ## %entry
8977; DARWIN-32-PIC-NEXT:    calll L110$pb
8978; DARWIN-32-PIC-NEXT:  L110$pb:
8979; DARWIN-32-PIC-NEXT:    popl %eax
8980; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8981; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L110$pb(%eax), %eax
8982; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8983; DARWIN-32-PIC-NEXT:    retl
8984;
8985; DARWIN-64-STATIC-LABEL: cxt00:
8986; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8987; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
8988; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8989; DARWIN-64-STATIC-NEXT:    retq
8990;
8991; DARWIN-64-DYNAMIC-LABEL: cxt00:
8992; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8993; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
8994; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8995; DARWIN-64-DYNAMIC-NEXT:    retq
8996;
8997; DARWIN-64-PIC-LABEL: cxt00:
8998; DARWIN-64-PIC:       ## %bb.0: ## %entry
8999; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9000; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9001; DARWIN-64-PIC-NEXT:    retq
9002
9003entry:
9004	%0 = add i64 %i, 16
9005	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
9006	%2 = bitcast i32* %1 to i8*
9007	ret i8* %2
9008}
9009
9010define i8* @cat01(i64 %i) nounwind {
9011; LINUX-64-STATIC-LABEL: cat01:
9012; LINUX-64-STATIC:       # %bb.0: # %entry
9013; LINUX-64-STATIC-NEXT:    leaq dst+64(,%rdi,4), %rax
9014; LINUX-64-STATIC-NEXT:    retq
9015;
9016; LINUX-32-STATIC-LABEL: cat01:
9017; LINUX-32-STATIC:       # %bb.0: # %entry
9018; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9019; LINUX-32-STATIC-NEXT:    leal dst+64(,%eax,4), %eax
9020; LINUX-32-STATIC-NEXT:    retl
9021;
9022; LINUX-32-PIC-LABEL: cat01:
9023; LINUX-32-PIC:       # %bb.0: # %entry
9024; LINUX-32-PIC-NEXT:    calll .L111$pb
9025; LINUX-32-PIC-NEXT:  .L111$pb:
9026; LINUX-32-PIC-NEXT:    popl %eax
9027; LINUX-32-PIC-NEXT:  .Ltmp111:
9028; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp111-.L111$pb), %eax
9029; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9030; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
9031; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9032; LINUX-32-PIC-NEXT:    retl
9033;
9034; LINUX-64-PIC-LABEL: cat01:
9035; LINUX-64-PIC:       # %bb.0: # %entry
9036; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9037; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9038; LINUX-64-PIC-NEXT:    retq
9039;
9040; DARWIN-32-STATIC-LABEL: cat01:
9041; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9042; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9043; DARWIN-32-STATIC-NEXT:    leal _dst+64(,%eax,4), %eax
9044; DARWIN-32-STATIC-NEXT:    retl
9045;
9046; DARWIN-32-DYNAMIC-LABEL: cat01:
9047; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9048; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9049; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
9050; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9051; DARWIN-32-DYNAMIC-NEXT:    retl
9052;
9053; DARWIN-32-PIC-LABEL: cat01:
9054; DARWIN-32-PIC:       ## %bb.0: ## %entry
9055; DARWIN-32-PIC-NEXT:    calll L111$pb
9056; DARWIN-32-PIC-NEXT:  L111$pb:
9057; DARWIN-32-PIC-NEXT:    popl %eax
9058; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9059; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L111$pb(%eax), %eax
9060; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9061; DARWIN-32-PIC-NEXT:    retl
9062;
9063; DARWIN-64-STATIC-LABEL: cat01:
9064; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9065; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9066; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9067; DARWIN-64-STATIC-NEXT:    retq
9068;
9069; DARWIN-64-DYNAMIC-LABEL: cat01:
9070; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9071; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9072; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9073; DARWIN-64-DYNAMIC-NEXT:    retq
9074;
9075; DARWIN-64-PIC-LABEL: cat01:
9076; DARWIN-64-PIC:       ## %bb.0: ## %entry
9077; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9078; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9079; DARWIN-64-PIC-NEXT:    retq
9080
9081entry:
9082	%0 = add i64 %i, 16
9083	%1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
9084	%2 = bitcast i32* %1 to i8*
9085	ret i8* %2
9086}
9087
9088define i8* @cxt01(i64 %i) nounwind {
9089; LINUX-64-STATIC-LABEL: cxt01:
9090; LINUX-64-STATIC:       # %bb.0: # %entry
9091; LINUX-64-STATIC-NEXT:    leaq xdst+64(,%rdi,4), %rax
9092; LINUX-64-STATIC-NEXT:    retq
9093;
9094; LINUX-32-STATIC-LABEL: cxt01:
9095; LINUX-32-STATIC:       # %bb.0: # %entry
9096; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9097; LINUX-32-STATIC-NEXT:    leal xdst+64(,%eax,4), %eax
9098; LINUX-32-STATIC-NEXT:    retl
9099;
9100; LINUX-32-PIC-LABEL: cxt01:
9101; LINUX-32-PIC:       # %bb.0: # %entry
9102; LINUX-32-PIC-NEXT:    calll .L112$pb
9103; LINUX-32-PIC-NEXT:  .L112$pb:
9104; LINUX-32-PIC-NEXT:    popl %eax
9105; LINUX-32-PIC-NEXT:  .Ltmp112:
9106; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp112-.L112$pb), %eax
9107; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9108; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
9109; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9110; LINUX-32-PIC-NEXT:    retl
9111;
9112; LINUX-64-PIC-LABEL: cxt01:
9113; LINUX-64-PIC:       # %bb.0: # %entry
9114; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9115; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9116; LINUX-64-PIC-NEXT:    retq
9117;
9118; DARWIN-32-STATIC-LABEL: cxt01:
9119; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9120; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9121; DARWIN-32-STATIC-NEXT:    leal _xdst+64(,%eax,4), %eax
9122; DARWIN-32-STATIC-NEXT:    retl
9123;
9124; DARWIN-32-DYNAMIC-LABEL: cxt01:
9125; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9126; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9127; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
9128; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9129; DARWIN-32-DYNAMIC-NEXT:    retl
9130;
9131; DARWIN-32-PIC-LABEL: cxt01:
9132; DARWIN-32-PIC:       ## %bb.0: ## %entry
9133; DARWIN-32-PIC-NEXT:    calll L112$pb
9134; DARWIN-32-PIC-NEXT:  L112$pb:
9135; DARWIN-32-PIC-NEXT:    popl %eax
9136; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9137; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L112$pb(%eax), %eax
9138; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9139; DARWIN-32-PIC-NEXT:    retl
9140;
9141; DARWIN-64-STATIC-LABEL: cxt01:
9142; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9143; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9144; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9145; DARWIN-64-STATIC-NEXT:    retq
9146;
9147; DARWIN-64-DYNAMIC-LABEL: cxt01:
9148; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9149; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9150; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9151; DARWIN-64-DYNAMIC-NEXT:    retq
9152;
9153; DARWIN-64-PIC-LABEL: cxt01:
9154; DARWIN-64-PIC:       ## %bb.0: ## %entry
9155; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9156; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9157; DARWIN-64-PIC-NEXT:    retq
9158
9159entry:
9160	%0 = add i64 %i, 16
9161	%1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
9162	%2 = bitcast i32* %1 to i8*
9163	ret i8* %2
9164}
9165
9166define i8* @cat02(i64 %i) nounwind {
9167; LINUX-64-STATIC-LABEL: cat02:
9168; LINUX-64-STATIC:       # %bb.0: # %entry
9169; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rax
9170; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9171; LINUX-64-STATIC-NEXT:    retq
9172;
9173; LINUX-32-STATIC-LABEL: cat02:
9174; LINUX-32-STATIC:       # %bb.0: # %entry
9175; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9176; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
9177; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9178; LINUX-32-STATIC-NEXT:    retl
9179;
9180; LINUX-32-PIC-LABEL: cat02:
9181; LINUX-32-PIC:       # %bb.0: # %entry
9182; LINUX-32-PIC-NEXT:    calll .L113$pb
9183; LINUX-32-PIC-NEXT:  .L113$pb:
9184; LINUX-32-PIC-NEXT:    popl %eax
9185; LINUX-32-PIC-NEXT:  .Ltmp113:
9186; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp113-.L113$pb), %eax
9187; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
9188; LINUX-32-PIC-NEXT:    movl (%eax), %eax
9189; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9190; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9191; LINUX-32-PIC-NEXT:    retl
9192;
9193; LINUX-64-PIC-LABEL: cat02:
9194; LINUX-64-PIC:       # %bb.0: # %entry
9195; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
9196; LINUX-64-PIC-NEXT:    movq (%rax), %rax
9197; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9198; LINUX-64-PIC-NEXT:    retq
9199;
9200; DARWIN-32-STATIC-LABEL: cat02:
9201; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9202; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9203; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
9204; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9205; DARWIN-32-STATIC-NEXT:    retl
9206;
9207; DARWIN-32-DYNAMIC-LABEL: cat02:
9208; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9209; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
9210; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
9211; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9212; DARWIN-32-DYNAMIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9213; DARWIN-32-DYNAMIC-NEXT:    retl
9214;
9215; DARWIN-32-PIC-LABEL: cat02:
9216; DARWIN-32-PIC:       ## %bb.0: ## %entry
9217; DARWIN-32-PIC-NEXT:    calll L113$pb
9218; DARWIN-32-PIC-NEXT:  L113$pb:
9219; DARWIN-32-PIC-NEXT:    popl %eax
9220; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L113$pb(%eax), %eax
9221; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
9222; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9223; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9224; DARWIN-32-PIC-NEXT:    retl
9225;
9226; DARWIN-64-STATIC-LABEL: cat02:
9227; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9228; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9229; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
9230; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9231; DARWIN-64-STATIC-NEXT:    retq
9232;
9233; DARWIN-64-DYNAMIC-LABEL: cat02:
9234; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9235; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9236; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
9237; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9238; DARWIN-64-DYNAMIC-NEXT:    retq
9239;
9240; DARWIN-64-PIC-LABEL: cat02:
9241; DARWIN-64-PIC:       ## %bb.0: ## %entry
9242; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9243; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
9244; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9245; DARWIN-64-PIC-NEXT:    retq
9246
9247entry:
9248	%0 = load i32*, i32** @ptr, align 8
9249	%1 = add i64 %i, 16
9250	%2 = getelementptr i32, i32* %0, i64 %1
9251	%3 = bitcast i32* %2 to i8*
9252	ret i8* %3
9253}
9254
9255define i8* @cat03(i64 %i) nounwind {
9256; LINUX-64-STATIC-LABEL: cat03:
9257; LINUX-64-STATIC:       # %bb.0: # %entry
9258; LINUX-64-STATIC-NEXT:    leaq dsrc+64(,%rdi,4), %rax
9259; LINUX-64-STATIC-NEXT:    retq
9260;
9261; LINUX-32-STATIC-LABEL: cat03:
9262; LINUX-32-STATIC:       # %bb.0: # %entry
9263; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9264; LINUX-32-STATIC-NEXT:    leal dsrc+64(,%eax,4), %eax
9265; LINUX-32-STATIC-NEXT:    retl
9266;
9267; LINUX-32-PIC-LABEL: cat03:
9268; LINUX-32-PIC:       # %bb.0: # %entry
9269; LINUX-32-PIC-NEXT:    calll .L114$pb
9270; LINUX-32-PIC-NEXT:  .L114$pb:
9271; LINUX-32-PIC-NEXT:    popl %eax
9272; LINUX-32-PIC-NEXT:  .Ltmp114:
9273; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp114-.L114$pb), %eax
9274; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9275; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
9276; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9277; LINUX-32-PIC-NEXT:    retl
9278;
9279; LINUX-64-PIC-LABEL: cat03:
9280; LINUX-64-PIC:       # %bb.0: # %entry
9281; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
9282; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9283; LINUX-64-PIC-NEXT:    retq
9284;
9285; DARWIN-32-STATIC-LABEL: cat03:
9286; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9287; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9288; DARWIN-32-STATIC-NEXT:    leal _dsrc+64(,%eax,4), %eax
9289; DARWIN-32-STATIC-NEXT:    retl
9290;
9291; DARWIN-32-DYNAMIC-LABEL: cat03:
9292; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9293; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9294; DARWIN-32-DYNAMIC-NEXT:    leal _dsrc+64(,%eax,4), %eax
9295; DARWIN-32-DYNAMIC-NEXT:    retl
9296;
9297; DARWIN-32-PIC-LABEL: cat03:
9298; DARWIN-32-PIC:       ## %bb.0: ## %entry
9299; DARWIN-32-PIC-NEXT:    calll L114$pb
9300; DARWIN-32-PIC-NEXT:  L114$pb:
9301; DARWIN-32-PIC-NEXT:    popl %eax
9302; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9303; DARWIN-32-PIC-NEXT:    leal (_dsrc-L114$pb)+64(%eax,%ecx,4), %eax
9304; DARWIN-32-PIC-NEXT:    retl
9305;
9306; DARWIN-64-STATIC-LABEL: cat03:
9307; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9308; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
9309; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9310; DARWIN-64-STATIC-NEXT:    retq
9311;
9312; DARWIN-64-DYNAMIC-LABEL: cat03:
9313; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9314; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
9315; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9316; DARWIN-64-DYNAMIC-NEXT:    retq
9317;
9318; DARWIN-64-PIC-LABEL: cat03:
9319; DARWIN-64-PIC:       ## %bb.0: ## %entry
9320; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
9321; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9322; DARWIN-64-PIC-NEXT:    retq
9323
9324entry:
9325	%0 = add i64 %i, 16
9326	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
9327	%2 = bitcast i32* %1 to i8*
9328	ret i8* %2
9329}
9330
9331define i8* @cat04(i64 %i) nounwind {
9332; LINUX-64-STATIC-LABEL: cat04:
9333; LINUX-64-STATIC:       # %bb.0: # %entry
9334; LINUX-64-STATIC-NEXT:    leaq ddst+64(,%rdi,4), %rax
9335; LINUX-64-STATIC-NEXT:    retq
9336;
9337; LINUX-32-STATIC-LABEL: cat04:
9338; LINUX-32-STATIC:       # %bb.0: # %entry
9339; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9340; LINUX-32-STATIC-NEXT:    leal ddst+64(,%eax,4), %eax
9341; LINUX-32-STATIC-NEXT:    retl
9342;
9343; LINUX-32-PIC-LABEL: cat04:
9344; LINUX-32-PIC:       # %bb.0: # %entry
9345; LINUX-32-PIC-NEXT:    calll .L115$pb
9346; LINUX-32-PIC-NEXT:  .L115$pb:
9347; LINUX-32-PIC-NEXT:    popl %eax
9348; LINUX-32-PIC-NEXT:  .Ltmp115:
9349; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp115-.L115$pb), %eax
9350; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9351; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
9352; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9353; LINUX-32-PIC-NEXT:    retl
9354;
9355; LINUX-64-PIC-LABEL: cat04:
9356; LINUX-64-PIC:       # %bb.0: # %entry
9357; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
9358; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9359; LINUX-64-PIC-NEXT:    retq
9360;
9361; DARWIN-32-STATIC-LABEL: cat04:
9362; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9363; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9364; DARWIN-32-STATIC-NEXT:    leal _ddst+64(,%eax,4), %eax
9365; DARWIN-32-STATIC-NEXT:    retl
9366;
9367; DARWIN-32-DYNAMIC-LABEL: cat04:
9368; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9369; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9370; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+64(,%eax,4), %eax
9371; DARWIN-32-DYNAMIC-NEXT:    retl
9372;
9373; DARWIN-32-PIC-LABEL: cat04:
9374; DARWIN-32-PIC:       ## %bb.0: ## %entry
9375; DARWIN-32-PIC-NEXT:    calll L115$pb
9376; DARWIN-32-PIC-NEXT:  L115$pb:
9377; DARWIN-32-PIC-NEXT:    popl %eax
9378; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9379; DARWIN-32-PIC-NEXT:    leal (_ddst-L115$pb)+64(%eax,%ecx,4), %eax
9380; DARWIN-32-PIC-NEXT:    retl
9381;
9382; DARWIN-64-STATIC-LABEL: cat04:
9383; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9384; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
9385; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9386; DARWIN-64-STATIC-NEXT:    retq
9387;
9388; DARWIN-64-DYNAMIC-LABEL: cat04:
9389; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9390; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
9391; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9392; DARWIN-64-DYNAMIC-NEXT:    retq
9393;
9394; DARWIN-64-PIC-LABEL: cat04:
9395; DARWIN-64-PIC:       ## %bb.0: ## %entry
9396; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
9397; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9398; DARWIN-64-PIC-NEXT:    retq
9399
9400entry:
9401	%0 = add i64 %i, 16
9402	%1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
9403	%2 = bitcast i32* %1 to i8*
9404	ret i8* %2
9405}
9406
9407define i8* @cat05(i64 %i) nounwind {
9408; LINUX-64-STATIC-LABEL: cat05:
9409; LINUX-64-STATIC:       # %bb.0: # %entry
9410; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
9411; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9412; LINUX-64-STATIC-NEXT:    retq
9413;
9414; LINUX-32-STATIC-LABEL: cat05:
9415; LINUX-32-STATIC:       # %bb.0: # %entry
9416; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9417; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
9418; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9419; LINUX-32-STATIC-NEXT:    retl
9420;
9421; LINUX-32-PIC-LABEL: cat05:
9422; LINUX-32-PIC:       # %bb.0: # %entry
9423; LINUX-32-PIC-NEXT:    calll .L116$pb
9424; LINUX-32-PIC-NEXT:  .L116$pb:
9425; LINUX-32-PIC-NEXT:    popl %eax
9426; LINUX-32-PIC-NEXT:  .Ltmp116:
9427; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp116-.L116$pb), %eax
9428; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
9429; LINUX-32-PIC-NEXT:    movl (%eax), %eax
9430; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9431; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9432; LINUX-32-PIC-NEXT:    retl
9433;
9434; LINUX-64-PIC-LABEL: cat05:
9435; LINUX-64-PIC:       # %bb.0: # %entry
9436; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
9437; LINUX-64-PIC-NEXT:    movq (%rax), %rax
9438; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9439; LINUX-64-PIC-NEXT:    retq
9440;
9441; DARWIN-32-STATIC-LABEL: cat05:
9442; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9443; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9444; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
9445; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9446; DARWIN-32-STATIC-NEXT:    retl
9447;
9448; DARWIN-32-DYNAMIC-LABEL: cat05:
9449; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9450; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9451; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
9452; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9453; DARWIN-32-DYNAMIC-NEXT:    retl
9454;
9455; DARWIN-32-PIC-LABEL: cat05:
9456; DARWIN-32-PIC:       ## %bb.0: ## %entry
9457; DARWIN-32-PIC-NEXT:    calll L116$pb
9458; DARWIN-32-PIC-NEXT:  L116$pb:
9459; DARWIN-32-PIC-NEXT:    popl %eax
9460; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9461; DARWIN-32-PIC-NEXT:    movl _dptr-L116$pb(%eax), %eax
9462; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9463; DARWIN-32-PIC-NEXT:    retl
9464;
9465; DARWIN-64-STATIC-LABEL: cat05:
9466; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9467; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
9468; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9469; DARWIN-64-STATIC-NEXT:    retq
9470;
9471; DARWIN-64-DYNAMIC-LABEL: cat05:
9472; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9473; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
9474; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9475; DARWIN-64-DYNAMIC-NEXT:    retq
9476;
9477; DARWIN-64-PIC-LABEL: cat05:
9478; DARWIN-64-PIC:       ## %bb.0: ## %entry
9479; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
9480; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9481; DARWIN-64-PIC-NEXT:    retq
9482
9483entry:
9484	%0 = load i32*, i32** @dptr, align 8
9485	%1 = add i64 %i, 16
9486	%2 = getelementptr i32, i32* %0, i64 %1
9487	%3 = bitcast i32* %2 to i8*
9488	ret i8* %3
9489}
9490
9491define i8* @cat06(i64 %i) nounwind {
9492; LINUX-64-STATIC-LABEL: cat06:
9493; LINUX-64-STATIC:       # %bb.0: # %entry
9494; LINUX-64-STATIC-NEXT:    leaq lsrc+64(,%rdi,4), %rax
9495; LINUX-64-STATIC-NEXT:    retq
9496;
9497; LINUX-32-STATIC-LABEL: cat06:
9498; LINUX-32-STATIC:       # %bb.0: # %entry
9499; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9500; LINUX-32-STATIC-NEXT:    leal lsrc+64(,%eax,4), %eax
9501; LINUX-32-STATIC-NEXT:    retl
9502;
9503; LINUX-32-PIC-LABEL: cat06:
9504; LINUX-32-PIC:       # %bb.0: # %entry
9505; LINUX-32-PIC-NEXT:    calll .L117$pb
9506; LINUX-32-PIC-NEXT:  .L117$pb:
9507; LINUX-32-PIC-NEXT:    popl %eax
9508; LINUX-32-PIC-NEXT:  .Ltmp117:
9509; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp117-.L117$pb), %eax
9510; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9511; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+64(%eax,%ecx,4), %eax
9512; LINUX-32-PIC-NEXT:    retl
9513;
9514; LINUX-64-PIC-LABEL: cat06:
9515; LINUX-64-PIC:       # %bb.0: # %entry
9516; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
9517; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9518; LINUX-64-PIC-NEXT:    retq
9519;
9520; DARWIN-32-STATIC-LABEL: cat06:
9521; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9522; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9523; DARWIN-32-STATIC-NEXT:    leal _lsrc+64(,%eax,4), %eax
9524; DARWIN-32-STATIC-NEXT:    retl
9525;
9526; DARWIN-32-DYNAMIC-LABEL: cat06:
9527; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9528; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9529; DARWIN-32-DYNAMIC-NEXT:    leal _lsrc+64(,%eax,4), %eax
9530; DARWIN-32-DYNAMIC-NEXT:    retl
9531;
9532; DARWIN-32-PIC-LABEL: cat06:
9533; DARWIN-32-PIC:       ## %bb.0: ## %entry
9534; DARWIN-32-PIC-NEXT:    calll L117$pb
9535; DARWIN-32-PIC-NEXT:  L117$pb:
9536; DARWIN-32-PIC-NEXT:    popl %eax
9537; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9538; DARWIN-32-PIC-NEXT:    leal (_lsrc-L117$pb)+64(%eax,%ecx,4), %eax
9539; DARWIN-32-PIC-NEXT:    retl
9540;
9541; DARWIN-64-STATIC-LABEL: cat06:
9542; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9543; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
9544; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9545; DARWIN-64-STATIC-NEXT:    retq
9546;
9547; DARWIN-64-DYNAMIC-LABEL: cat06:
9548; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9549; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
9550; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9551; DARWIN-64-DYNAMIC-NEXT:    retq
9552;
9553; DARWIN-64-PIC-LABEL: cat06:
9554; DARWIN-64-PIC:       ## %bb.0: ## %entry
9555; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
9556; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9557; DARWIN-64-PIC-NEXT:    retq
9558
9559entry:
9560	%0 = add i64 %i, 16
9561	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
9562	%2 = bitcast i32* %1 to i8*
9563	ret i8* %2
9564}
9565
9566define i8* @cat07(i64 %i) nounwind {
9567; LINUX-64-STATIC-LABEL: cat07:
9568; LINUX-64-STATIC:       # %bb.0: # %entry
9569; LINUX-64-STATIC-NEXT:    leaq ldst+64(,%rdi,4), %rax
9570; LINUX-64-STATIC-NEXT:    retq
9571;
9572; LINUX-32-STATIC-LABEL: cat07:
9573; LINUX-32-STATIC:       # %bb.0: # %entry
9574; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9575; LINUX-32-STATIC-NEXT:    leal ldst+64(,%eax,4), %eax
9576; LINUX-32-STATIC-NEXT:    retl
9577;
9578; LINUX-32-PIC-LABEL: cat07:
9579; LINUX-32-PIC:       # %bb.0: # %entry
9580; LINUX-32-PIC-NEXT:    calll .L118$pb
9581; LINUX-32-PIC-NEXT:  .L118$pb:
9582; LINUX-32-PIC-NEXT:    popl %eax
9583; LINUX-32-PIC-NEXT:  .Ltmp118:
9584; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp118-.L118$pb), %eax
9585; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9586; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax,%ecx,4), %eax
9587; LINUX-32-PIC-NEXT:    retl
9588;
9589; LINUX-64-PIC-LABEL: cat07:
9590; LINUX-64-PIC:       # %bb.0: # %entry
9591; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
9592; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9593; LINUX-64-PIC-NEXT:    retq
9594;
9595; DARWIN-32-STATIC-LABEL: cat07:
9596; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9597; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9598; DARWIN-32-STATIC-NEXT:    leal _ldst+64(,%eax,4), %eax
9599; DARWIN-32-STATIC-NEXT:    retl
9600;
9601; DARWIN-32-DYNAMIC-LABEL: cat07:
9602; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9603; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9604; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+64(,%eax,4), %eax
9605; DARWIN-32-DYNAMIC-NEXT:    retl
9606;
9607; DARWIN-32-PIC-LABEL: cat07:
9608; DARWIN-32-PIC:       ## %bb.0: ## %entry
9609; DARWIN-32-PIC-NEXT:    calll L118$pb
9610; DARWIN-32-PIC-NEXT:  L118$pb:
9611; DARWIN-32-PIC-NEXT:    popl %eax
9612; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9613; DARWIN-32-PIC-NEXT:    leal (_ldst-L118$pb)+64(%eax,%ecx,4), %eax
9614; DARWIN-32-PIC-NEXT:    retl
9615;
9616; DARWIN-64-STATIC-LABEL: cat07:
9617; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9618; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
9619; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9620; DARWIN-64-STATIC-NEXT:    retq
9621;
9622; DARWIN-64-DYNAMIC-LABEL: cat07:
9623; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9624; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
9625; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9626; DARWIN-64-DYNAMIC-NEXT:    retq
9627;
9628; DARWIN-64-PIC-LABEL: cat07:
9629; DARWIN-64-PIC:       ## %bb.0: ## %entry
9630; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
9631; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9632; DARWIN-64-PIC-NEXT:    retq
9633
9634entry:
9635	%0 = add i64 %i, 16
9636	%1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
9637	%2 = bitcast i32* %1 to i8*
9638	ret i8* %2
9639}
9640
9641define i8* @cat08(i64 %i) nounwind {
9642; LINUX-64-STATIC-LABEL: cat08:
9643; LINUX-64-STATIC:       # %bb.0: # %entry
9644; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
9645; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9646; LINUX-64-STATIC-NEXT:    retq
9647;
9648; LINUX-32-STATIC-LABEL: cat08:
9649; LINUX-32-STATIC:       # %bb.0: # %entry
9650; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9651; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
9652; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9653; LINUX-32-STATIC-NEXT:    retl
9654;
9655; LINUX-32-PIC-LABEL: cat08:
9656; LINUX-32-PIC:       # %bb.0: # %entry
9657; LINUX-32-PIC-NEXT:    calll .L119$pb
9658; LINUX-32-PIC-NEXT:  .L119$pb:
9659; LINUX-32-PIC-NEXT:    popl %eax
9660; LINUX-32-PIC-NEXT:  .Ltmp119:
9661; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp119-.L119$pb), %eax
9662; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9663; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
9664; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9665; LINUX-32-PIC-NEXT:    retl
9666;
9667; LINUX-64-PIC-LABEL: cat08:
9668; LINUX-64-PIC:       # %bb.0: # %entry
9669; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
9670; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9671; LINUX-64-PIC-NEXT:    retq
9672;
9673; DARWIN-32-STATIC-LABEL: cat08:
9674; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9675; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9676; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
9677; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9678; DARWIN-32-STATIC-NEXT:    retl
9679;
9680; DARWIN-32-DYNAMIC-LABEL: cat08:
9681; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9682; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9683; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
9684; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9685; DARWIN-32-DYNAMIC-NEXT:    retl
9686;
9687; DARWIN-32-PIC-LABEL: cat08:
9688; DARWIN-32-PIC:       ## %bb.0: ## %entry
9689; DARWIN-32-PIC-NEXT:    calll L119$pb
9690; DARWIN-32-PIC-NEXT:  L119$pb:
9691; DARWIN-32-PIC-NEXT:    popl %eax
9692; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9693; DARWIN-32-PIC-NEXT:    movl _lptr-L119$pb(%eax), %eax
9694; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9695; DARWIN-32-PIC-NEXT:    retl
9696;
9697; DARWIN-64-STATIC-LABEL: cat08:
9698; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9699; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
9700; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9701; DARWIN-64-STATIC-NEXT:    retq
9702;
9703; DARWIN-64-DYNAMIC-LABEL: cat08:
9704; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9705; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
9706; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9707; DARWIN-64-DYNAMIC-NEXT:    retq
9708;
9709; DARWIN-64-PIC-LABEL: cat08:
9710; DARWIN-64-PIC:       ## %bb.0: ## %entry
9711; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
9712; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9713; DARWIN-64-PIC-NEXT:    retq
9714
9715entry:
9716	%0 = load i32*, i32** @lptr, align 8
9717	%1 = add i64 %i, 16
9718	%2 = getelementptr i32, i32* %0, i64 %1
9719	%3 = bitcast i32* %2 to i8*
9720	ret i8* %3
9721}
9722
9723define i8* @cam00(i64 %i) nounwind {
9724; LINUX-64-STATIC-LABEL: cam00:
9725; LINUX-64-STATIC:       # %bb.0: # %entry
9726; LINUX-64-STATIC-NEXT:    leaq src+262144(,%rdi,4), %rax
9727; LINUX-64-STATIC-NEXT:    retq
9728;
9729; LINUX-32-STATIC-LABEL: cam00:
9730; LINUX-32-STATIC:       # %bb.0: # %entry
9731; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9732; LINUX-32-STATIC-NEXT:    leal src+262144(,%eax,4), %eax
9733; LINUX-32-STATIC-NEXT:    retl
9734;
9735; LINUX-32-PIC-LABEL: cam00:
9736; LINUX-32-PIC:       # %bb.0: # %entry
9737; LINUX-32-PIC-NEXT:    calll .L120$pb
9738; LINUX-32-PIC-NEXT:  .L120$pb:
9739; LINUX-32-PIC-NEXT:    popl %eax
9740; LINUX-32-PIC-NEXT:  .Ltmp120:
9741; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp120-.L120$pb), %eax
9742; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9743; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
9744; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9745; LINUX-32-PIC-NEXT:    retl
9746;
9747; LINUX-64-PIC-LABEL: cam00:
9748; LINUX-64-PIC:       # %bb.0: # %entry
9749; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
9750; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9751; LINUX-64-PIC-NEXT:    retq
9752;
9753; DARWIN-32-STATIC-LABEL: cam00:
9754; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9755; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9756; DARWIN-32-STATIC-NEXT:    leal _src+262144(,%eax,4), %eax
9757; DARWIN-32-STATIC-NEXT:    retl
9758;
9759; DARWIN-32-DYNAMIC-LABEL: cam00:
9760; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9761; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9762; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
9763; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9764; DARWIN-32-DYNAMIC-NEXT:    retl
9765;
9766; DARWIN-32-PIC-LABEL: cam00:
9767; DARWIN-32-PIC:       ## %bb.0: ## %entry
9768; DARWIN-32-PIC-NEXT:    calll L120$pb
9769; DARWIN-32-PIC-NEXT:  L120$pb:
9770; DARWIN-32-PIC-NEXT:    popl %eax
9771; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9772; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L120$pb(%eax), %eax
9773; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9774; DARWIN-32-PIC-NEXT:    retl
9775;
9776; DARWIN-64-STATIC-LABEL: cam00:
9777; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9778; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9779; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9780; DARWIN-64-STATIC-NEXT:    retq
9781;
9782; DARWIN-64-DYNAMIC-LABEL: cam00:
9783; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9784; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9785; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9786; DARWIN-64-DYNAMIC-NEXT:    retq
9787;
9788; DARWIN-64-PIC-LABEL: cam00:
9789; DARWIN-64-PIC:       ## %bb.0: ## %entry
9790; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9791; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9792; DARWIN-64-PIC-NEXT:    retq
9793
9794entry:
9795	%0 = add i64 %i, 65536
9796	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
9797	%2 = bitcast i32* %1 to i8*
9798	ret i8* %2
9799}
9800
9801define i8* @cxm00(i64 %i) nounwind {
9802; LINUX-64-STATIC-LABEL: cxm00:
9803; LINUX-64-STATIC:       # %bb.0: # %entry
9804; LINUX-64-STATIC-NEXT:    leaq xsrc+262144(,%rdi,4), %rax
9805; LINUX-64-STATIC-NEXT:    retq
9806;
9807; LINUX-32-STATIC-LABEL: cxm00:
9808; LINUX-32-STATIC:       # %bb.0: # %entry
9809; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9810; LINUX-32-STATIC-NEXT:    leal xsrc+262144(,%eax,4), %eax
9811; LINUX-32-STATIC-NEXT:    retl
9812;
9813; LINUX-32-PIC-LABEL: cxm00:
9814; LINUX-32-PIC:       # %bb.0: # %entry
9815; LINUX-32-PIC-NEXT:    calll .L121$pb
9816; LINUX-32-PIC-NEXT:  .L121$pb:
9817; LINUX-32-PIC-NEXT:    popl %eax
9818; LINUX-32-PIC-NEXT:  .Ltmp121:
9819; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp121-.L121$pb), %eax
9820; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9821; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
9822; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9823; LINUX-32-PIC-NEXT:    retl
9824;
9825; LINUX-64-PIC-LABEL: cxm00:
9826; LINUX-64-PIC:       # %bb.0: # %entry
9827; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
9828; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9829; LINUX-64-PIC-NEXT:    retq
9830;
9831; DARWIN-32-STATIC-LABEL: cxm00:
9832; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9833; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9834; DARWIN-32-STATIC-NEXT:    leal _xsrc+262144(,%eax,4), %eax
9835; DARWIN-32-STATIC-NEXT:    retl
9836;
9837; DARWIN-32-DYNAMIC-LABEL: cxm00:
9838; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9839; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9840; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
9841; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9842; DARWIN-32-DYNAMIC-NEXT:    retl
9843;
9844; DARWIN-32-PIC-LABEL: cxm00:
9845; DARWIN-32-PIC:       ## %bb.0: ## %entry
9846; DARWIN-32-PIC-NEXT:    calll L121$pb
9847; DARWIN-32-PIC-NEXT:  L121$pb:
9848; DARWIN-32-PIC-NEXT:    popl %eax
9849; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9850; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L121$pb(%eax), %eax
9851; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9852; DARWIN-32-PIC-NEXT:    retl
9853;
9854; DARWIN-64-STATIC-LABEL: cxm00:
9855; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9856; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9857; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9858; DARWIN-64-STATIC-NEXT:    retq
9859;
9860; DARWIN-64-DYNAMIC-LABEL: cxm00:
9861; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9862; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9863; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9864; DARWIN-64-DYNAMIC-NEXT:    retq
9865;
9866; DARWIN-64-PIC-LABEL: cxm00:
9867; DARWIN-64-PIC:       ## %bb.0: ## %entry
9868; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9869; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9870; DARWIN-64-PIC-NEXT:    retq
9871
9872entry:
9873	%0 = add i64 %i, 65536
9874	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
9875	%2 = bitcast i32* %1 to i8*
9876	ret i8* %2
9877}
9878
9879define i8* @cam01(i64 %i) nounwind {
9880; LINUX-64-STATIC-LABEL: cam01:
9881; LINUX-64-STATIC:       # %bb.0: # %entry
9882; LINUX-64-STATIC-NEXT:    leaq dst+262144(,%rdi,4), %rax
9883; LINUX-64-STATIC-NEXT:    retq
9884;
9885; LINUX-32-STATIC-LABEL: cam01:
9886; LINUX-32-STATIC:       # %bb.0: # %entry
9887; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9888; LINUX-32-STATIC-NEXT:    leal dst+262144(,%eax,4), %eax
9889; LINUX-32-STATIC-NEXT:    retl
9890;
9891; LINUX-32-PIC-LABEL: cam01:
9892; LINUX-32-PIC:       # %bb.0: # %entry
9893; LINUX-32-PIC-NEXT:    calll .L122$pb
9894; LINUX-32-PIC-NEXT:  .L122$pb:
9895; LINUX-32-PIC-NEXT:    popl %eax
9896; LINUX-32-PIC-NEXT:  .Ltmp122:
9897; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp122-.L122$pb), %eax
9898; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9899; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
9900; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9901; LINUX-32-PIC-NEXT:    retl
9902;
9903; LINUX-64-PIC-LABEL: cam01:
9904; LINUX-64-PIC:       # %bb.0: # %entry
9905; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9906; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9907; LINUX-64-PIC-NEXT:    retq
9908;
9909; DARWIN-32-STATIC-LABEL: cam01:
9910; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9911; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9912; DARWIN-32-STATIC-NEXT:    leal _dst+262144(,%eax,4), %eax
9913; DARWIN-32-STATIC-NEXT:    retl
9914;
9915; DARWIN-32-DYNAMIC-LABEL: cam01:
9916; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9917; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9918; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
9919; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9920; DARWIN-32-DYNAMIC-NEXT:    retl
9921;
9922; DARWIN-32-PIC-LABEL: cam01:
9923; DARWIN-32-PIC:       ## %bb.0: ## %entry
9924; DARWIN-32-PIC-NEXT:    calll L122$pb
9925; DARWIN-32-PIC-NEXT:  L122$pb:
9926; DARWIN-32-PIC-NEXT:    popl %eax
9927; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9928; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L122$pb(%eax), %eax
9929; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9930; DARWIN-32-PIC-NEXT:    retl
9931;
9932; DARWIN-64-STATIC-LABEL: cam01:
9933; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9934; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9935; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9936; DARWIN-64-STATIC-NEXT:    retq
9937;
9938; DARWIN-64-DYNAMIC-LABEL: cam01:
9939; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9940; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9941; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9942; DARWIN-64-DYNAMIC-NEXT:    retq
9943;
9944; DARWIN-64-PIC-LABEL: cam01:
9945; DARWIN-64-PIC:       ## %bb.0: ## %entry
9946; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9947; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9948; DARWIN-64-PIC-NEXT:    retq
9949
9950entry:
9951	%0 = add i64 %i, 65536
9952	%1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
9953	%2 = bitcast i32* %1 to i8*
9954	ret i8* %2
9955}
9956
9957define i8* @cxm01(i64 %i) nounwind {
9958; LINUX-64-STATIC-LABEL: cxm01:
9959; LINUX-64-STATIC:       # %bb.0: # %entry
9960; LINUX-64-STATIC-NEXT:    leaq xdst+262144(,%rdi,4), %rax
9961; LINUX-64-STATIC-NEXT:    retq
9962;
9963; LINUX-32-STATIC-LABEL: cxm01:
9964; LINUX-32-STATIC:       # %bb.0: # %entry
9965; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9966; LINUX-32-STATIC-NEXT:    leal xdst+262144(,%eax,4), %eax
9967; LINUX-32-STATIC-NEXT:    retl
9968;
9969; LINUX-32-PIC-LABEL: cxm01:
9970; LINUX-32-PIC:       # %bb.0: # %entry
9971; LINUX-32-PIC-NEXT:    calll .L123$pb
9972; LINUX-32-PIC-NEXT:  .L123$pb:
9973; LINUX-32-PIC-NEXT:    popl %eax
9974; LINUX-32-PIC-NEXT:  .Ltmp123:
9975; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp123-.L123$pb), %eax
9976; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9977; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
9978; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9979; LINUX-32-PIC-NEXT:    retl
9980;
9981; LINUX-64-PIC-LABEL: cxm01:
9982; LINUX-64-PIC:       # %bb.0: # %entry
9983; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9984; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9985; LINUX-64-PIC-NEXT:    retq
9986;
9987; DARWIN-32-STATIC-LABEL: cxm01:
9988; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9989; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9990; DARWIN-32-STATIC-NEXT:    leal _xdst+262144(,%eax,4), %eax
9991; DARWIN-32-STATIC-NEXT:    retl
9992;
9993; DARWIN-32-DYNAMIC-LABEL: cxm01:
9994; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9995; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9996; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
9997; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9998; DARWIN-32-DYNAMIC-NEXT:    retl
9999;
10000; DARWIN-32-PIC-LABEL: cxm01:
10001; DARWIN-32-PIC:       ## %bb.0: ## %entry
10002; DARWIN-32-PIC-NEXT:    calll L123$pb
10003; DARWIN-32-PIC-NEXT:  L123$pb:
10004; DARWIN-32-PIC-NEXT:    popl %eax
10005; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10006; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L123$pb(%eax), %eax
10007; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10008; DARWIN-32-PIC-NEXT:    retl
10009;
10010; DARWIN-64-STATIC-LABEL: cxm01:
10011; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10012; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
10013; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10014; DARWIN-64-STATIC-NEXT:    retq
10015;
10016; DARWIN-64-DYNAMIC-LABEL: cxm01:
10017; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10018; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
10019; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10020; DARWIN-64-DYNAMIC-NEXT:    retq
10021;
10022; DARWIN-64-PIC-LABEL: cxm01:
10023; DARWIN-64-PIC:       ## %bb.0: ## %entry
10024; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
10025; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10026; DARWIN-64-PIC-NEXT:    retq
10027
10028entry:
10029	%0 = add i64 %i, 65536
10030	%1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
10031	%2 = bitcast i32* %1 to i8*
10032	ret i8* %2
10033}
10034
10035define i8* @cam02(i64 %i) nounwind {
10036; LINUX-64-STATIC-LABEL: cam02:
10037; LINUX-64-STATIC:       # %bb.0: # %entry
10038; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rax
10039; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10040; LINUX-64-STATIC-NEXT:    retq
10041;
10042; LINUX-32-STATIC-LABEL: cam02:
10043; LINUX-32-STATIC:       # %bb.0: # %entry
10044; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10045; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
10046; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10047; LINUX-32-STATIC-NEXT:    retl
10048;
10049; LINUX-32-PIC-LABEL: cam02:
10050; LINUX-32-PIC:       # %bb.0: # %entry
10051; LINUX-32-PIC-NEXT:    calll .L124$pb
10052; LINUX-32-PIC-NEXT:  .L124$pb:
10053; LINUX-32-PIC-NEXT:    popl %eax
10054; LINUX-32-PIC-NEXT:  .Ltmp124:
10055; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp124-.L124$pb), %eax
10056; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
10057; LINUX-32-PIC-NEXT:    movl (%eax), %eax
10058; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10059; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10060; LINUX-32-PIC-NEXT:    retl
10061;
10062; LINUX-64-PIC-LABEL: cam02:
10063; LINUX-64-PIC:       # %bb.0: # %entry
10064; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
10065; LINUX-64-PIC-NEXT:    movq (%rax), %rax
10066; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10067; LINUX-64-PIC-NEXT:    retq
10068;
10069; DARWIN-32-STATIC-LABEL: cam02:
10070; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10071; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10072; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
10073; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10074; DARWIN-32-STATIC-NEXT:    retl
10075;
10076; DARWIN-32-DYNAMIC-LABEL: cam02:
10077; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10078; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
10079; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
10080; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10081; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10082; DARWIN-32-DYNAMIC-NEXT:    retl
10083;
10084; DARWIN-32-PIC-LABEL: cam02:
10085; DARWIN-32-PIC:       ## %bb.0: ## %entry
10086; DARWIN-32-PIC-NEXT:    calll L124$pb
10087; DARWIN-32-PIC-NEXT:  L124$pb:
10088; DARWIN-32-PIC-NEXT:    popl %eax
10089; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L124$pb(%eax), %eax
10090; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
10091; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10092; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10093; DARWIN-32-PIC-NEXT:    retl
10094;
10095; DARWIN-64-STATIC-LABEL: cam02:
10096; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10097; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10098; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
10099; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10100; DARWIN-64-STATIC-NEXT:    retq
10101;
10102; DARWIN-64-DYNAMIC-LABEL: cam02:
10103; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10104; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10105; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
10106; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10107; DARWIN-64-DYNAMIC-NEXT:    retq
10108;
10109; DARWIN-64-PIC-LABEL: cam02:
10110; DARWIN-64-PIC:       ## %bb.0: ## %entry
10111; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10112; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
10113; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10114; DARWIN-64-PIC-NEXT:    retq
10115
10116entry:
10117	%0 = load i32*, i32** @ptr, align 8
10118	%1 = add i64 %i, 65536
10119	%2 = getelementptr i32, i32* %0, i64 %1
10120	%3 = bitcast i32* %2 to i8*
10121	ret i8* %3
10122}
10123
10124define i8* @cam03(i64 %i) nounwind {
10125; LINUX-64-STATIC-LABEL: cam03:
10126; LINUX-64-STATIC:       # %bb.0: # %entry
10127; LINUX-64-STATIC-NEXT:    leaq dsrc+262144(,%rdi,4), %rax
10128; LINUX-64-STATIC-NEXT:    retq
10129;
10130; LINUX-32-STATIC-LABEL: cam03:
10131; LINUX-32-STATIC:       # %bb.0: # %entry
10132; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10133; LINUX-32-STATIC-NEXT:    leal dsrc+262144(,%eax,4), %eax
10134; LINUX-32-STATIC-NEXT:    retl
10135;
10136; LINUX-32-PIC-LABEL: cam03:
10137; LINUX-32-PIC:       # %bb.0: # %entry
10138; LINUX-32-PIC-NEXT:    calll .L125$pb
10139; LINUX-32-PIC-NEXT:  .L125$pb:
10140; LINUX-32-PIC-NEXT:    popl %eax
10141; LINUX-32-PIC-NEXT:  .Ltmp125:
10142; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp125-.L125$pb), %eax
10143; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10144; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
10145; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10146; LINUX-32-PIC-NEXT:    retl
10147;
10148; LINUX-64-PIC-LABEL: cam03:
10149; LINUX-64-PIC:       # %bb.0: # %entry
10150; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
10151; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10152; LINUX-64-PIC-NEXT:    retq
10153;
10154; DARWIN-32-STATIC-LABEL: cam03:
10155; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10156; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10157; DARWIN-32-STATIC-NEXT:    leal _dsrc+262144(,%eax,4), %eax
10158; DARWIN-32-STATIC-NEXT:    retl
10159;
10160; DARWIN-32-DYNAMIC-LABEL: cam03:
10161; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10162; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10163; DARWIN-32-DYNAMIC-NEXT:    leal _dsrc+262144(,%eax,4), %eax
10164; DARWIN-32-DYNAMIC-NEXT:    retl
10165;
10166; DARWIN-32-PIC-LABEL: cam03:
10167; DARWIN-32-PIC:       ## %bb.0: ## %entry
10168; DARWIN-32-PIC-NEXT:    calll L125$pb
10169; DARWIN-32-PIC-NEXT:  L125$pb:
10170; DARWIN-32-PIC-NEXT:    popl %eax
10171; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10172; DARWIN-32-PIC-NEXT:    leal (_dsrc-L125$pb)+262144(%eax,%ecx,4), %eax
10173; DARWIN-32-PIC-NEXT:    retl
10174;
10175; DARWIN-64-STATIC-LABEL: cam03:
10176; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10177; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
10178; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10179; DARWIN-64-STATIC-NEXT:    retq
10180;
10181; DARWIN-64-DYNAMIC-LABEL: cam03:
10182; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10183; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
10184; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10185; DARWIN-64-DYNAMIC-NEXT:    retq
10186;
10187; DARWIN-64-PIC-LABEL: cam03:
10188; DARWIN-64-PIC:       ## %bb.0: ## %entry
10189; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
10190; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10191; DARWIN-64-PIC-NEXT:    retq
10192
10193entry:
10194	%0 = add i64 %i, 65536
10195	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
10196	%2 = bitcast i32* %1 to i8*
10197	ret i8* %2
10198}
10199
10200define i8* @cam04(i64 %i) nounwind {
10201; LINUX-64-STATIC-LABEL: cam04:
10202; LINUX-64-STATIC:       # %bb.0: # %entry
10203; LINUX-64-STATIC-NEXT:    leaq ddst+262144(,%rdi,4), %rax
10204; LINUX-64-STATIC-NEXT:    retq
10205;
10206; LINUX-32-STATIC-LABEL: cam04:
10207; LINUX-32-STATIC:       # %bb.0: # %entry
10208; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10209; LINUX-32-STATIC-NEXT:    leal ddst+262144(,%eax,4), %eax
10210; LINUX-32-STATIC-NEXT:    retl
10211;
10212; LINUX-32-PIC-LABEL: cam04:
10213; LINUX-32-PIC:       # %bb.0: # %entry
10214; LINUX-32-PIC-NEXT:    calll .L126$pb
10215; LINUX-32-PIC-NEXT:  .L126$pb:
10216; LINUX-32-PIC-NEXT:    popl %eax
10217; LINUX-32-PIC-NEXT:  .Ltmp126:
10218; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp126-.L126$pb), %eax
10219; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10220; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
10221; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10222; LINUX-32-PIC-NEXT:    retl
10223;
10224; LINUX-64-PIC-LABEL: cam04:
10225; LINUX-64-PIC:       # %bb.0: # %entry
10226; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
10227; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10228; LINUX-64-PIC-NEXT:    retq
10229;
10230; DARWIN-32-STATIC-LABEL: cam04:
10231; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10232; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10233; DARWIN-32-STATIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
10234; DARWIN-32-STATIC-NEXT:    retl
10235;
10236; DARWIN-32-DYNAMIC-LABEL: cam04:
10237; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10238; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10239; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
10240; DARWIN-32-DYNAMIC-NEXT:    retl
10241;
10242; DARWIN-32-PIC-LABEL: cam04:
10243; DARWIN-32-PIC:       ## %bb.0: ## %entry
10244; DARWIN-32-PIC-NEXT:    calll L126$pb
10245; DARWIN-32-PIC-NEXT:  L126$pb:
10246; DARWIN-32-PIC-NEXT:    popl %eax
10247; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10248; DARWIN-32-PIC-NEXT:    leal (_ddst-L126$pb)+262144(%eax,%ecx,4), %eax
10249; DARWIN-32-PIC-NEXT:    retl
10250;
10251; DARWIN-64-STATIC-LABEL: cam04:
10252; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10253; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
10254; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10255; DARWIN-64-STATIC-NEXT:    retq
10256;
10257; DARWIN-64-DYNAMIC-LABEL: cam04:
10258; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10259; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
10260; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10261; DARWIN-64-DYNAMIC-NEXT:    retq
10262;
10263; DARWIN-64-PIC-LABEL: cam04:
10264; DARWIN-64-PIC:       ## %bb.0: ## %entry
10265; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
10266; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10267; DARWIN-64-PIC-NEXT:    retq
10268
10269entry:
10270	%0 = add i64 %i, 65536
10271	%1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
10272	%2 = bitcast i32* %1 to i8*
10273	ret i8* %2
10274}
10275
10276define i8* @cam05(i64 %i) nounwind {
10277; LINUX-64-STATIC-LABEL: cam05:
10278; LINUX-64-STATIC:       # %bb.0: # %entry
10279; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
10280; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10281; LINUX-64-STATIC-NEXT:    retq
10282;
10283; LINUX-32-STATIC-LABEL: cam05:
10284; LINUX-32-STATIC:       # %bb.0: # %entry
10285; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10286; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
10287; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10288; LINUX-32-STATIC-NEXT:    retl
10289;
10290; LINUX-32-PIC-LABEL: cam05:
10291; LINUX-32-PIC:       # %bb.0: # %entry
10292; LINUX-32-PIC-NEXT:    calll .L127$pb
10293; LINUX-32-PIC-NEXT:  .L127$pb:
10294; LINUX-32-PIC-NEXT:    popl %eax
10295; LINUX-32-PIC-NEXT:  .Ltmp127:
10296; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp127-.L127$pb), %eax
10297; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
10298; LINUX-32-PIC-NEXT:    movl (%eax), %eax
10299; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10300; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10301; LINUX-32-PIC-NEXT:    retl
10302;
10303; LINUX-64-PIC-LABEL: cam05:
10304; LINUX-64-PIC:       # %bb.0: # %entry
10305; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
10306; LINUX-64-PIC-NEXT:    movq (%rax), %rax
10307; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10308; LINUX-64-PIC-NEXT:    retq
10309;
10310; DARWIN-32-STATIC-LABEL: cam05:
10311; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10312; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10313; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
10314; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10315; DARWIN-32-STATIC-NEXT:    retl
10316;
10317; DARWIN-32-DYNAMIC-LABEL: cam05:
10318; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10319; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10320; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
10321; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10322; DARWIN-32-DYNAMIC-NEXT:    retl
10323;
10324; DARWIN-32-PIC-LABEL: cam05:
10325; DARWIN-32-PIC:       ## %bb.0: ## %entry
10326; DARWIN-32-PIC-NEXT:    calll L127$pb
10327; DARWIN-32-PIC-NEXT:  L127$pb:
10328; DARWIN-32-PIC-NEXT:    popl %eax
10329; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10330; DARWIN-32-PIC-NEXT:    movl _dptr-L127$pb(%eax), %eax
10331; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10332; DARWIN-32-PIC-NEXT:    retl
10333;
10334; DARWIN-64-STATIC-LABEL: cam05:
10335; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10336; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
10337; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10338; DARWIN-64-STATIC-NEXT:    retq
10339;
10340; DARWIN-64-DYNAMIC-LABEL: cam05:
10341; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10342; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
10343; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10344; DARWIN-64-DYNAMIC-NEXT:    retq
10345;
10346; DARWIN-64-PIC-LABEL: cam05:
10347; DARWIN-64-PIC:       ## %bb.0: ## %entry
10348; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
10349; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10350; DARWIN-64-PIC-NEXT:    retq
10351
10352entry:
10353	%0 = load i32*, i32** @dptr, align 8
10354	%1 = add i64 %i, 65536
10355	%2 = getelementptr i32, i32* %0, i64 %1
10356	%3 = bitcast i32* %2 to i8*
10357	ret i8* %3
10358}
10359
10360define i8* @cam06(i64 %i) nounwind {
10361; LINUX-64-STATIC-LABEL: cam06:
10362; LINUX-64-STATIC:       # %bb.0: # %entry
10363; LINUX-64-STATIC-NEXT:    leaq lsrc+262144(,%rdi,4), %rax
10364; LINUX-64-STATIC-NEXT:    retq
10365;
10366; LINUX-32-STATIC-LABEL: cam06:
10367; LINUX-32-STATIC:       # %bb.0: # %entry
10368; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10369; LINUX-32-STATIC-NEXT:    leal lsrc+262144(,%eax,4), %eax
10370; LINUX-32-STATIC-NEXT:    retl
10371;
10372; LINUX-32-PIC-LABEL: cam06:
10373; LINUX-32-PIC:       # %bb.0: # %entry
10374; LINUX-32-PIC-NEXT:    calll .L128$pb
10375; LINUX-32-PIC-NEXT:  .L128$pb:
10376; LINUX-32-PIC-NEXT:    popl %eax
10377; LINUX-32-PIC-NEXT:  .Ltmp128:
10378; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp128-.L128$pb), %eax
10379; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10380; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+262144(%eax,%ecx,4), %eax
10381; LINUX-32-PIC-NEXT:    retl
10382;
10383; LINUX-64-PIC-LABEL: cam06:
10384; LINUX-64-PIC:       # %bb.0: # %entry
10385; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
10386; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10387; LINUX-64-PIC-NEXT:    retq
10388;
10389; DARWIN-32-STATIC-LABEL: cam06:
10390; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10391; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10392; DARWIN-32-STATIC-NEXT:    leal _lsrc+262144(,%eax,4), %eax
10393; DARWIN-32-STATIC-NEXT:    retl
10394;
10395; DARWIN-32-DYNAMIC-LABEL: cam06:
10396; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10397; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10398; DARWIN-32-DYNAMIC-NEXT:    leal _lsrc+262144(,%eax,4), %eax
10399; DARWIN-32-DYNAMIC-NEXT:    retl
10400;
10401; DARWIN-32-PIC-LABEL: cam06:
10402; DARWIN-32-PIC:       ## %bb.0: ## %entry
10403; DARWIN-32-PIC-NEXT:    calll L128$pb
10404; DARWIN-32-PIC-NEXT:  L128$pb:
10405; DARWIN-32-PIC-NEXT:    popl %eax
10406; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10407; DARWIN-32-PIC-NEXT:    leal (_lsrc-L128$pb)+262144(%eax,%ecx,4), %eax
10408; DARWIN-32-PIC-NEXT:    retl
10409;
10410; DARWIN-64-STATIC-LABEL: cam06:
10411; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10412; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
10413; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10414; DARWIN-64-STATIC-NEXT:    retq
10415;
10416; DARWIN-64-DYNAMIC-LABEL: cam06:
10417; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10418; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
10419; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10420; DARWIN-64-DYNAMIC-NEXT:    retq
10421;
10422; DARWIN-64-PIC-LABEL: cam06:
10423; DARWIN-64-PIC:       ## %bb.0: ## %entry
10424; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
10425; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10426; DARWIN-64-PIC-NEXT:    retq
10427
10428entry:
10429	%0 = add i64 %i, 65536
10430	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
10431	%2 = bitcast i32* %1 to i8*
10432	ret i8* %2
10433}
10434
10435define i8* @cam07(i64 %i) nounwind {
10436; LINUX-64-STATIC-LABEL: cam07:
10437; LINUX-64-STATIC:       # %bb.0: # %entry
10438; LINUX-64-STATIC-NEXT:    leaq ldst+262144(,%rdi,4), %rax
10439; LINUX-64-STATIC-NEXT:    retq
10440;
10441; LINUX-32-STATIC-LABEL: cam07:
10442; LINUX-32-STATIC:       # %bb.0: # %entry
10443; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10444; LINUX-32-STATIC-NEXT:    leal ldst+262144(,%eax,4), %eax
10445; LINUX-32-STATIC-NEXT:    retl
10446;
10447; LINUX-32-PIC-LABEL: cam07:
10448; LINUX-32-PIC:       # %bb.0: # %entry
10449; LINUX-32-PIC-NEXT:    calll .L129$pb
10450; LINUX-32-PIC-NEXT:  .L129$pb:
10451; LINUX-32-PIC-NEXT:    popl %eax
10452; LINUX-32-PIC-NEXT:  .Ltmp129:
10453; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp129-.L129$pb), %eax
10454; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10455; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax,%ecx,4), %eax
10456; LINUX-32-PIC-NEXT:    retl
10457;
10458; LINUX-64-PIC-LABEL: cam07:
10459; LINUX-64-PIC:       # %bb.0: # %entry
10460; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
10461; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10462; LINUX-64-PIC-NEXT:    retq
10463;
10464; DARWIN-32-STATIC-LABEL: cam07:
10465; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10466; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10467; DARWIN-32-STATIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
10468; DARWIN-32-STATIC-NEXT:    retl
10469;
10470; DARWIN-32-DYNAMIC-LABEL: cam07:
10471; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10472; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10473; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
10474; DARWIN-32-DYNAMIC-NEXT:    retl
10475;
10476; DARWIN-32-PIC-LABEL: cam07:
10477; DARWIN-32-PIC:       ## %bb.0: ## %entry
10478; DARWIN-32-PIC-NEXT:    calll L129$pb
10479; DARWIN-32-PIC-NEXT:  L129$pb:
10480; DARWIN-32-PIC-NEXT:    popl %eax
10481; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10482; DARWIN-32-PIC-NEXT:    leal (_ldst-L129$pb)+262144(%eax,%ecx,4), %eax
10483; DARWIN-32-PIC-NEXT:    retl
10484;
10485; DARWIN-64-STATIC-LABEL: cam07:
10486; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10487; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
10488; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10489; DARWIN-64-STATIC-NEXT:    retq
10490;
10491; DARWIN-64-DYNAMIC-LABEL: cam07:
10492; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10493; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
10494; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10495; DARWIN-64-DYNAMIC-NEXT:    retq
10496;
10497; DARWIN-64-PIC-LABEL: cam07:
10498; DARWIN-64-PIC:       ## %bb.0: ## %entry
10499; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
10500; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10501; DARWIN-64-PIC-NEXT:    retq
10502
10503entry:
10504	%0 = add i64 %i, 65536
10505	%1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
10506	%2 = bitcast i32* %1 to i8*
10507	ret i8* %2
10508}
10509
10510define i8* @cam08(i64 %i) nounwind {
10511; LINUX-64-STATIC-LABEL: cam08:
10512; LINUX-64-STATIC:       # %bb.0: # %entry
10513; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
10514; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10515; LINUX-64-STATIC-NEXT:    retq
10516;
10517; LINUX-32-STATIC-LABEL: cam08:
10518; LINUX-32-STATIC:       # %bb.0: # %entry
10519; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10520; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
10521; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10522; LINUX-32-STATIC-NEXT:    retl
10523;
10524; LINUX-32-PIC-LABEL: cam08:
10525; LINUX-32-PIC:       # %bb.0: # %entry
10526; LINUX-32-PIC-NEXT:    calll .L130$pb
10527; LINUX-32-PIC-NEXT:  .L130$pb:
10528; LINUX-32-PIC-NEXT:    popl %eax
10529; LINUX-32-PIC-NEXT:  .Ltmp130:
10530; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp130-.L130$pb), %eax
10531; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10532; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
10533; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10534; LINUX-32-PIC-NEXT:    retl
10535;
10536; LINUX-64-PIC-LABEL: cam08:
10537; LINUX-64-PIC:       # %bb.0: # %entry
10538; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
10539; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10540; LINUX-64-PIC-NEXT:    retq
10541;
10542; DARWIN-32-STATIC-LABEL: cam08:
10543; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10544; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10545; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
10546; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10547; DARWIN-32-STATIC-NEXT:    retl
10548;
10549; DARWIN-32-DYNAMIC-LABEL: cam08:
10550; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10551; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10552; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
10553; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10554; DARWIN-32-DYNAMIC-NEXT:    retl
10555;
10556; DARWIN-32-PIC-LABEL: cam08:
10557; DARWIN-32-PIC:       ## %bb.0: ## %entry
10558; DARWIN-32-PIC-NEXT:    calll L130$pb
10559; DARWIN-32-PIC-NEXT:  L130$pb:
10560; DARWIN-32-PIC-NEXT:    popl %eax
10561; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10562; DARWIN-32-PIC-NEXT:    movl _lptr-L130$pb(%eax), %eax
10563; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10564; DARWIN-32-PIC-NEXT:    retl
10565;
10566; DARWIN-64-STATIC-LABEL: cam08:
10567; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10568; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
10569; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10570; DARWIN-64-STATIC-NEXT:    retq
10571;
10572; DARWIN-64-DYNAMIC-LABEL: cam08:
10573; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10574; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
10575; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10576; DARWIN-64-DYNAMIC-NEXT:    retq
10577;
10578; DARWIN-64-PIC-LABEL: cam08:
10579; DARWIN-64-PIC:       ## %bb.0: ## %entry
10580; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
10581; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10582; DARWIN-64-PIC-NEXT:    retq
10583
10584entry:
10585	%0 = load i32*, i32** @lptr, align 8
10586	%1 = add i64 %i, 65536
10587	%2 = getelementptr i32, i32* %0, i64 %1
10588	%3 = bitcast i32* %2 to i8*
10589	ret i8* %3
10590}
10591
10592define void @lcallee() nounwind {
10593; LINUX-64-STATIC-LABEL: lcallee:
10594; LINUX-64-STATIC:       # %bb.0: # %entry
10595; LINUX-64-STATIC-NEXT:    pushq %rax
10596; LINUX-64-STATIC-NEXT:    callq x
10597; LINUX-64-STATIC-NEXT:    callq x
10598; LINUX-64-STATIC-NEXT:    callq x
10599; LINUX-64-STATIC-NEXT:    callq x
10600; LINUX-64-STATIC-NEXT:    callq x
10601; LINUX-64-STATIC-NEXT:    callq x
10602; LINUX-64-STATIC-NEXT:    callq x
10603; LINUX-64-STATIC-NEXT:    popq %rax
10604; LINUX-64-STATIC-NEXT:    retq
10605;
10606; LINUX-32-STATIC-LABEL: lcallee:
10607; LINUX-32-STATIC:       # %bb.0: # %entry
10608; LINUX-32-STATIC-NEXT:    subl $12, %esp
10609; LINUX-32-STATIC-NEXT:    calll x
10610; LINUX-32-STATIC-NEXT:    calll x
10611; LINUX-32-STATIC-NEXT:    calll x
10612; LINUX-32-STATIC-NEXT:    calll x
10613; LINUX-32-STATIC-NEXT:    calll x
10614; LINUX-32-STATIC-NEXT:    calll x
10615; LINUX-32-STATIC-NEXT:    calll x
10616; LINUX-32-STATIC-NEXT:    addl $12, %esp
10617; LINUX-32-STATIC-NEXT:    retl
10618;
10619; LINUX-32-PIC-LABEL: lcallee:
10620; LINUX-32-PIC:       # %bb.0: # %entry
10621; LINUX-32-PIC-NEXT:    pushl %ebx
10622; LINUX-32-PIC-NEXT:    subl $8, %esp
10623; LINUX-32-PIC-NEXT:    calll .L131$pb
10624; LINUX-32-PIC-NEXT:  .L131$pb:
10625; LINUX-32-PIC-NEXT:    popl %ebx
10626; LINUX-32-PIC-NEXT:  .Ltmp131:
10627; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp131-.L131$pb), %ebx
10628; LINUX-32-PIC-NEXT:    calll x@PLT
10629; LINUX-32-PIC-NEXT:    calll x@PLT
10630; LINUX-32-PIC-NEXT:    calll x@PLT
10631; LINUX-32-PIC-NEXT:    calll x@PLT
10632; LINUX-32-PIC-NEXT:    calll x@PLT
10633; LINUX-32-PIC-NEXT:    calll x@PLT
10634; LINUX-32-PIC-NEXT:    calll x@PLT
10635; LINUX-32-PIC-NEXT:    addl $8, %esp
10636; LINUX-32-PIC-NEXT:    popl %ebx
10637; LINUX-32-PIC-NEXT:    retl
10638;
10639; LINUX-64-PIC-LABEL: lcallee:
10640; LINUX-64-PIC:       # %bb.0: # %entry
10641; LINUX-64-PIC-NEXT:    pushq %rax
10642; LINUX-64-PIC-NEXT:    callq x@PLT
10643; LINUX-64-PIC-NEXT:    callq x@PLT
10644; LINUX-64-PIC-NEXT:    callq x@PLT
10645; LINUX-64-PIC-NEXT:    callq x@PLT
10646; LINUX-64-PIC-NEXT:    callq x@PLT
10647; LINUX-64-PIC-NEXT:    callq x@PLT
10648; LINUX-64-PIC-NEXT:    callq x@PLT
10649; LINUX-64-PIC-NEXT:    popq %rax
10650; LINUX-64-PIC-NEXT:    retq
10651;
10652; DARWIN-32-STATIC-LABEL: lcallee:
10653; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10654; DARWIN-32-STATIC-NEXT:    subl $12, %esp
10655; DARWIN-32-STATIC-NEXT:    calll _x
10656; DARWIN-32-STATIC-NEXT:    calll _x
10657; DARWIN-32-STATIC-NEXT:    calll _x
10658; DARWIN-32-STATIC-NEXT:    calll _x
10659; DARWIN-32-STATIC-NEXT:    calll _x
10660; DARWIN-32-STATIC-NEXT:    calll _x
10661; DARWIN-32-STATIC-NEXT:    calll _x
10662; DARWIN-32-STATIC-NEXT:    addl $12, %esp
10663; DARWIN-32-STATIC-NEXT:    retl
10664;
10665; DARWIN-32-DYNAMIC-LABEL: lcallee:
10666; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10667; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
10668; DARWIN-32-DYNAMIC-NEXT:    calll _x
10669; DARWIN-32-DYNAMIC-NEXT:    calll _x
10670; DARWIN-32-DYNAMIC-NEXT:    calll _x
10671; DARWIN-32-DYNAMIC-NEXT:    calll _x
10672; DARWIN-32-DYNAMIC-NEXT:    calll _x
10673; DARWIN-32-DYNAMIC-NEXT:    calll _x
10674; DARWIN-32-DYNAMIC-NEXT:    calll _x
10675; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
10676; DARWIN-32-DYNAMIC-NEXT:    retl
10677;
10678; DARWIN-32-PIC-LABEL: lcallee:
10679; DARWIN-32-PIC:       ## %bb.0: ## %entry
10680; DARWIN-32-PIC-NEXT:    subl $12, %esp
10681; DARWIN-32-PIC-NEXT:    calll _x
10682; DARWIN-32-PIC-NEXT:    calll _x
10683; DARWIN-32-PIC-NEXT:    calll _x
10684; DARWIN-32-PIC-NEXT:    calll _x
10685; DARWIN-32-PIC-NEXT:    calll _x
10686; DARWIN-32-PIC-NEXT:    calll _x
10687; DARWIN-32-PIC-NEXT:    calll _x
10688; DARWIN-32-PIC-NEXT:    addl $12, %esp
10689; DARWIN-32-PIC-NEXT:    retl
10690;
10691; DARWIN-64-STATIC-LABEL: lcallee:
10692; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10693; DARWIN-64-STATIC-NEXT:    pushq %rax
10694; DARWIN-64-STATIC-NEXT:    callq _x
10695; DARWIN-64-STATIC-NEXT:    callq _x
10696; DARWIN-64-STATIC-NEXT:    callq _x
10697; DARWIN-64-STATIC-NEXT:    callq _x
10698; DARWIN-64-STATIC-NEXT:    callq _x
10699; DARWIN-64-STATIC-NEXT:    callq _x
10700; DARWIN-64-STATIC-NEXT:    callq _x
10701; DARWIN-64-STATIC-NEXT:    popq %rax
10702; DARWIN-64-STATIC-NEXT:    retq
10703;
10704; DARWIN-64-DYNAMIC-LABEL: lcallee:
10705; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10706; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
10707; DARWIN-64-DYNAMIC-NEXT:    callq _x
10708; DARWIN-64-DYNAMIC-NEXT:    callq _x
10709; DARWIN-64-DYNAMIC-NEXT:    callq _x
10710; DARWIN-64-DYNAMIC-NEXT:    callq _x
10711; DARWIN-64-DYNAMIC-NEXT:    callq _x
10712; DARWIN-64-DYNAMIC-NEXT:    callq _x
10713; DARWIN-64-DYNAMIC-NEXT:    callq _x
10714; DARWIN-64-DYNAMIC-NEXT:    popq %rax
10715; DARWIN-64-DYNAMIC-NEXT:    retq
10716;
10717; DARWIN-64-PIC-LABEL: lcallee:
10718; DARWIN-64-PIC:       ## %bb.0: ## %entry
10719; DARWIN-64-PIC-NEXT:    pushq %rax
10720; DARWIN-64-PIC-NEXT:    callq _x
10721; DARWIN-64-PIC-NEXT:    callq _x
10722; DARWIN-64-PIC-NEXT:    callq _x
10723; DARWIN-64-PIC-NEXT:    callq _x
10724; DARWIN-64-PIC-NEXT:    callq _x
10725; DARWIN-64-PIC-NEXT:    callq _x
10726; DARWIN-64-PIC-NEXT:    callq _x
10727; DARWIN-64-PIC-NEXT:    popq %rax
10728; DARWIN-64-PIC-NEXT:    retq
10729
10730entry:
10731	call void @x() nounwind
10732	call void @x() nounwind
10733	call void @x() nounwind
10734	call void @x() nounwind
10735	call void @x() nounwind
10736	call void @x() nounwind
10737	call void @x() nounwind
10738	ret void
10739}
10740
10741declare void @x()
10742
10743define internal void @dcallee() nounwind {
10744; LINUX-64-STATIC-LABEL: dcallee:
10745; LINUX-64-STATIC:       # %bb.0: # %entry
10746; LINUX-64-STATIC-NEXT:    pushq %rax
10747; LINUX-64-STATIC-NEXT:    callq y
10748; LINUX-64-STATIC-NEXT:    callq y
10749; LINUX-64-STATIC-NEXT:    callq y
10750; LINUX-64-STATIC-NEXT:    callq y
10751; LINUX-64-STATIC-NEXT:    callq y
10752; LINUX-64-STATIC-NEXT:    callq y
10753; LINUX-64-STATIC-NEXT:    callq y
10754; LINUX-64-STATIC-NEXT:    popq %rax
10755; LINUX-64-STATIC-NEXT:    retq
10756;
10757; LINUX-32-STATIC-LABEL: dcallee:
10758; LINUX-32-STATIC:       # %bb.0: # %entry
10759; LINUX-32-STATIC-NEXT:    subl $12, %esp
10760; LINUX-32-STATIC-NEXT:    calll y
10761; LINUX-32-STATIC-NEXT:    calll y
10762; LINUX-32-STATIC-NEXT:    calll y
10763; LINUX-32-STATIC-NEXT:    calll y
10764; LINUX-32-STATIC-NEXT:    calll y
10765; LINUX-32-STATIC-NEXT:    calll y
10766; LINUX-32-STATIC-NEXT:    calll y
10767; LINUX-32-STATIC-NEXT:    addl $12, %esp
10768; LINUX-32-STATIC-NEXT:    retl
10769;
10770; LINUX-32-PIC-LABEL: dcallee:
10771; LINUX-32-PIC:       # %bb.0: # %entry
10772; LINUX-32-PIC-NEXT:    pushl %ebx
10773; LINUX-32-PIC-NEXT:    subl $8, %esp
10774; LINUX-32-PIC-NEXT:    calll .L132$pb
10775; LINUX-32-PIC-NEXT:  .L132$pb:
10776; LINUX-32-PIC-NEXT:    popl %ebx
10777; LINUX-32-PIC-NEXT:  .Ltmp132:
10778; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp132-.L132$pb), %ebx
10779; LINUX-32-PIC-NEXT:    calll y@PLT
10780; LINUX-32-PIC-NEXT:    calll y@PLT
10781; LINUX-32-PIC-NEXT:    calll y@PLT
10782; LINUX-32-PIC-NEXT:    calll y@PLT
10783; LINUX-32-PIC-NEXT:    calll y@PLT
10784; LINUX-32-PIC-NEXT:    calll y@PLT
10785; LINUX-32-PIC-NEXT:    calll y@PLT
10786; LINUX-32-PIC-NEXT:    addl $8, %esp
10787; LINUX-32-PIC-NEXT:    popl %ebx
10788; LINUX-32-PIC-NEXT:    retl
10789;
10790; LINUX-64-PIC-LABEL: dcallee:
10791; LINUX-64-PIC:       # %bb.0: # %entry
10792; LINUX-64-PIC-NEXT:    pushq %rax
10793; LINUX-64-PIC-NEXT:    callq y@PLT
10794; LINUX-64-PIC-NEXT:    callq y@PLT
10795; LINUX-64-PIC-NEXT:    callq y@PLT
10796; LINUX-64-PIC-NEXT:    callq y@PLT
10797; LINUX-64-PIC-NEXT:    callq y@PLT
10798; LINUX-64-PIC-NEXT:    callq y@PLT
10799; LINUX-64-PIC-NEXT:    callq y@PLT
10800; LINUX-64-PIC-NEXT:    popq %rax
10801; LINUX-64-PIC-NEXT:    retq
10802;
10803; DARWIN-32-STATIC-LABEL: dcallee:
10804; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10805; DARWIN-32-STATIC-NEXT:    subl $12, %esp
10806; DARWIN-32-STATIC-NEXT:    calll _y
10807; DARWIN-32-STATIC-NEXT:    calll _y
10808; DARWIN-32-STATIC-NEXT:    calll _y
10809; DARWIN-32-STATIC-NEXT:    calll _y
10810; DARWIN-32-STATIC-NEXT:    calll _y
10811; DARWIN-32-STATIC-NEXT:    calll _y
10812; DARWIN-32-STATIC-NEXT:    calll _y
10813; DARWIN-32-STATIC-NEXT:    addl $12, %esp
10814; DARWIN-32-STATIC-NEXT:    retl
10815;
10816; DARWIN-32-DYNAMIC-LABEL: dcallee:
10817; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10818; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
10819; DARWIN-32-DYNAMIC-NEXT:    calll _y
10820; DARWIN-32-DYNAMIC-NEXT:    calll _y
10821; DARWIN-32-DYNAMIC-NEXT:    calll _y
10822; DARWIN-32-DYNAMIC-NEXT:    calll _y
10823; DARWIN-32-DYNAMIC-NEXT:    calll _y
10824; DARWIN-32-DYNAMIC-NEXT:    calll _y
10825; DARWIN-32-DYNAMIC-NEXT:    calll _y
10826; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
10827; DARWIN-32-DYNAMIC-NEXT:    retl
10828;
10829; DARWIN-32-PIC-LABEL: dcallee:
10830; DARWIN-32-PIC:       ## %bb.0: ## %entry
10831; DARWIN-32-PIC-NEXT:    subl $12, %esp
10832; DARWIN-32-PIC-NEXT:    calll _y
10833; DARWIN-32-PIC-NEXT:    calll _y
10834; DARWIN-32-PIC-NEXT:    calll _y
10835; DARWIN-32-PIC-NEXT:    calll _y
10836; DARWIN-32-PIC-NEXT:    calll _y
10837; DARWIN-32-PIC-NEXT:    calll _y
10838; DARWIN-32-PIC-NEXT:    calll _y
10839; DARWIN-32-PIC-NEXT:    addl $12, %esp
10840; DARWIN-32-PIC-NEXT:    retl
10841;
10842; DARWIN-64-STATIC-LABEL: dcallee:
10843; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10844; DARWIN-64-STATIC-NEXT:    pushq %rax
10845; DARWIN-64-STATIC-NEXT:    callq _y
10846; DARWIN-64-STATIC-NEXT:    callq _y
10847; DARWIN-64-STATIC-NEXT:    callq _y
10848; DARWIN-64-STATIC-NEXT:    callq _y
10849; DARWIN-64-STATIC-NEXT:    callq _y
10850; DARWIN-64-STATIC-NEXT:    callq _y
10851; DARWIN-64-STATIC-NEXT:    callq _y
10852; DARWIN-64-STATIC-NEXT:    popq %rax
10853; DARWIN-64-STATIC-NEXT:    retq
10854;
10855; DARWIN-64-DYNAMIC-LABEL: dcallee:
10856; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10857; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
10858; DARWIN-64-DYNAMIC-NEXT:    callq _y
10859; DARWIN-64-DYNAMIC-NEXT:    callq _y
10860; DARWIN-64-DYNAMIC-NEXT:    callq _y
10861; DARWIN-64-DYNAMIC-NEXT:    callq _y
10862; DARWIN-64-DYNAMIC-NEXT:    callq _y
10863; DARWIN-64-DYNAMIC-NEXT:    callq _y
10864; DARWIN-64-DYNAMIC-NEXT:    callq _y
10865; DARWIN-64-DYNAMIC-NEXT:    popq %rax
10866; DARWIN-64-DYNAMIC-NEXT:    retq
10867;
10868; DARWIN-64-PIC-LABEL: dcallee:
10869; DARWIN-64-PIC:       ## %bb.0: ## %entry
10870; DARWIN-64-PIC-NEXT:    pushq %rax
10871; DARWIN-64-PIC-NEXT:    callq _y
10872; DARWIN-64-PIC-NEXT:    callq _y
10873; DARWIN-64-PIC-NEXT:    callq _y
10874; DARWIN-64-PIC-NEXT:    callq _y
10875; DARWIN-64-PIC-NEXT:    callq _y
10876; DARWIN-64-PIC-NEXT:    callq _y
10877; DARWIN-64-PIC-NEXT:    callq _y
10878; DARWIN-64-PIC-NEXT:    popq %rax
10879; DARWIN-64-PIC-NEXT:    retq
10880
10881entry:
10882	call void @y() nounwind
10883	call void @y() nounwind
10884	call void @y() nounwind
10885	call void @y() nounwind
10886	call void @y() nounwind
10887	call void @y() nounwind
10888	call void @y() nounwind
10889	ret void
10890}
10891
10892declare void @y()
10893
10894define void ()* @address() nounwind {
10895; LINUX-64-STATIC-LABEL: address:
10896; LINUX-64-STATIC:       # %bb.0: # %entry
10897; LINUX-64-STATIC-NEXT:    movl $callee, %eax
10898; LINUX-64-STATIC-NEXT:    retq
10899;
10900; LINUX-32-STATIC-LABEL: address:
10901; LINUX-32-STATIC:       # %bb.0: # %entry
10902; LINUX-32-STATIC-NEXT:    movl $callee, %eax
10903; LINUX-32-STATIC-NEXT:    retl
10904;
10905; LINUX-32-PIC-LABEL: address:
10906; LINUX-32-PIC:       # %bb.0: # %entry
10907; LINUX-32-PIC-NEXT:    calll .L133$pb
10908; LINUX-32-PIC-NEXT:  .L133$pb:
10909; LINUX-32-PIC-NEXT:    popl %eax
10910; LINUX-32-PIC-NEXT:  .Ltmp133:
10911; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp133-.L133$pb), %eax
10912; LINUX-32-PIC-NEXT:    movl callee@GOT(%eax), %eax
10913; LINUX-32-PIC-NEXT:    retl
10914;
10915; LINUX-64-PIC-LABEL: address:
10916; LINUX-64-PIC:       # %bb.0: # %entry
10917; LINUX-64-PIC-NEXT:    movq callee@GOTPCREL(%rip), %rax
10918; LINUX-64-PIC-NEXT:    retq
10919;
10920; DARWIN-32-STATIC-LABEL: address:
10921; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10922; DARWIN-32-STATIC-NEXT:    movl $_callee, %eax
10923; DARWIN-32-STATIC-NEXT:    retl
10924;
10925; DARWIN-32-DYNAMIC-LABEL: address:
10926; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10927; DARWIN-32-DYNAMIC-NEXT:    movl L_callee$non_lazy_ptr, %eax
10928; DARWIN-32-DYNAMIC-NEXT:    retl
10929;
10930; DARWIN-32-PIC-LABEL: address:
10931; DARWIN-32-PIC:       ## %bb.0: ## %entry
10932; DARWIN-32-PIC-NEXT:    calll L133$pb
10933; DARWIN-32-PIC-NEXT:  L133$pb:
10934; DARWIN-32-PIC-NEXT:    popl %eax
10935; DARWIN-32-PIC-NEXT:    movl L_callee$non_lazy_ptr-L133$pb(%eax), %eax
10936; DARWIN-32-PIC-NEXT:    retl
10937;
10938; DARWIN-64-STATIC-LABEL: address:
10939; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10940; DARWIN-64-STATIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10941; DARWIN-64-STATIC-NEXT:    retq
10942;
10943; DARWIN-64-DYNAMIC-LABEL: address:
10944; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10945; DARWIN-64-DYNAMIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10946; DARWIN-64-DYNAMIC-NEXT:    retq
10947;
10948; DARWIN-64-PIC-LABEL: address:
10949; DARWIN-64-PIC:       ## %bb.0: ## %entry
10950; DARWIN-64-PIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10951; DARWIN-64-PIC-NEXT:    retq
10952
10953entry:
10954	ret void ()* @callee
10955}
10956
10957declare void @callee()
10958
10959define void ()* @laddress() nounwind {
10960; LINUX-64-STATIC-LABEL: laddress:
10961; LINUX-64-STATIC:       # %bb.0: # %entry
10962; LINUX-64-STATIC-NEXT:    movl $lcallee, %eax
10963; LINUX-64-STATIC-NEXT:    retq
10964;
10965; LINUX-32-STATIC-LABEL: laddress:
10966; LINUX-32-STATIC:       # %bb.0: # %entry
10967; LINUX-32-STATIC-NEXT:    movl $lcallee, %eax
10968; LINUX-32-STATIC-NEXT:    retl
10969;
10970; LINUX-32-PIC-LABEL: laddress:
10971; LINUX-32-PIC:       # %bb.0: # %entry
10972; LINUX-32-PIC-NEXT:    calll .L134$pb
10973; LINUX-32-PIC-NEXT:  .L134$pb:
10974; LINUX-32-PIC-NEXT:    popl %eax
10975; LINUX-32-PIC-NEXT:  .Ltmp134:
10976; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp134-.L134$pb), %eax
10977; LINUX-32-PIC-NEXT:    movl lcallee@GOT(%eax), %eax
10978; LINUX-32-PIC-NEXT:    retl
10979;
10980; LINUX-64-PIC-LABEL: laddress:
10981; LINUX-64-PIC:       # %bb.0: # %entry
10982; LINUX-64-PIC-NEXT:    movq lcallee@GOTPCREL(%rip), %rax
10983; LINUX-64-PIC-NEXT:    retq
10984;
10985; DARWIN-32-STATIC-LABEL: laddress:
10986; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10987; DARWIN-32-STATIC-NEXT:    movl $_lcallee, %eax
10988; DARWIN-32-STATIC-NEXT:    retl
10989;
10990; DARWIN-32-DYNAMIC-LABEL: laddress:
10991; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10992; DARWIN-32-DYNAMIC-NEXT:    movl $_lcallee, %eax
10993; DARWIN-32-DYNAMIC-NEXT:    retl
10994;
10995; DARWIN-32-PIC-LABEL: laddress:
10996; DARWIN-32-PIC:       ## %bb.0: ## %entry
10997; DARWIN-32-PIC-NEXT:    calll L134$pb
10998; DARWIN-32-PIC-NEXT:  L134$pb:
10999; DARWIN-32-PIC-NEXT:    popl %eax
11000; DARWIN-32-PIC-NEXT:    leal _lcallee-L134$pb(%eax), %eax
11001; DARWIN-32-PIC-NEXT:    retl
11002;
11003; DARWIN-64-STATIC-LABEL: laddress:
11004; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11005; DARWIN-64-STATIC-NEXT:    leaq _lcallee(%rip), %rax
11006; DARWIN-64-STATIC-NEXT:    retq
11007;
11008; DARWIN-64-DYNAMIC-LABEL: laddress:
11009; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11010; DARWIN-64-DYNAMIC-NEXT:    leaq _lcallee(%rip), %rax
11011; DARWIN-64-DYNAMIC-NEXT:    retq
11012;
11013; DARWIN-64-PIC-LABEL: laddress:
11014; DARWIN-64-PIC:       ## %bb.0: ## %entry
11015; DARWIN-64-PIC-NEXT:    leaq _lcallee(%rip), %rax
11016; DARWIN-64-PIC-NEXT:    retq
11017
11018entry:
11019	ret void ()* @lcallee
11020}
11021
11022define void ()* @daddress() nounwind {
11023; LINUX-64-STATIC-LABEL: daddress:
11024; LINUX-64-STATIC:       # %bb.0: # %entry
11025; LINUX-64-STATIC-NEXT:    movl $dcallee, %eax
11026; LINUX-64-STATIC-NEXT:    retq
11027;
11028; LINUX-32-STATIC-LABEL: daddress:
11029; LINUX-32-STATIC:       # %bb.0: # %entry
11030; LINUX-32-STATIC-NEXT:    movl $dcallee, %eax
11031; LINUX-32-STATIC-NEXT:    retl
11032;
11033; LINUX-32-PIC-LABEL: daddress:
11034; LINUX-32-PIC:       # %bb.0: # %entry
11035; LINUX-32-PIC-NEXT:    calll .L135$pb
11036; LINUX-32-PIC-NEXT:  .L135$pb:
11037; LINUX-32-PIC-NEXT:    popl %eax
11038; LINUX-32-PIC-NEXT:  .Ltmp135:
11039; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp135-.L135$pb), %eax
11040; LINUX-32-PIC-NEXT:    leal dcallee@GOTOFF(%eax), %eax
11041; LINUX-32-PIC-NEXT:    retl
11042;
11043; LINUX-64-PIC-LABEL: daddress:
11044; LINUX-64-PIC:       # %bb.0: # %entry
11045; LINUX-64-PIC-NEXT:    leaq dcallee(%rip), %rax
11046; LINUX-64-PIC-NEXT:    retq
11047;
11048; DARWIN-32-STATIC-LABEL: daddress:
11049; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11050; DARWIN-32-STATIC-NEXT:    movl $_dcallee, %eax
11051; DARWIN-32-STATIC-NEXT:    retl
11052;
11053; DARWIN-32-DYNAMIC-LABEL: daddress:
11054; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11055; DARWIN-32-DYNAMIC-NEXT:    movl $_dcallee, %eax
11056; DARWIN-32-DYNAMIC-NEXT:    retl
11057;
11058; DARWIN-32-PIC-LABEL: daddress:
11059; DARWIN-32-PIC:       ## %bb.0: ## %entry
11060; DARWIN-32-PIC-NEXT:    calll L135$pb
11061; DARWIN-32-PIC-NEXT:  L135$pb:
11062; DARWIN-32-PIC-NEXT:    popl %eax
11063; DARWIN-32-PIC-NEXT:    leal _dcallee-L135$pb(%eax), %eax
11064; DARWIN-32-PIC-NEXT:    retl
11065;
11066; DARWIN-64-STATIC-LABEL: daddress:
11067; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11068; DARWIN-64-STATIC-NEXT:    leaq _dcallee(%rip), %rax
11069; DARWIN-64-STATIC-NEXT:    retq
11070;
11071; DARWIN-64-DYNAMIC-LABEL: daddress:
11072; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11073; DARWIN-64-DYNAMIC-NEXT:    leaq _dcallee(%rip), %rax
11074; DARWIN-64-DYNAMIC-NEXT:    retq
11075;
11076; DARWIN-64-PIC-LABEL: daddress:
11077; DARWIN-64-PIC:       ## %bb.0: ## %entry
11078; DARWIN-64-PIC-NEXT:    leaq _dcallee(%rip), %rax
11079; DARWIN-64-PIC-NEXT:    retq
11080
11081entry:
11082	ret void ()* @dcallee
11083}
11084
11085define void @caller() nounwind {
11086; LINUX-64-STATIC-LABEL: caller:
11087; LINUX-64-STATIC:       # %bb.0: # %entry
11088; LINUX-64-STATIC-NEXT:    pushq %rax
11089; LINUX-64-STATIC-NEXT:    callq callee
11090; LINUX-64-STATIC-NEXT:    callq callee
11091; LINUX-64-STATIC-NEXT:    popq %rax
11092; LINUX-64-STATIC-NEXT:    retq
11093;
11094; LINUX-32-STATIC-LABEL: caller:
11095; LINUX-32-STATIC:       # %bb.0: # %entry
11096; LINUX-32-STATIC-NEXT:    subl $12, %esp
11097; LINUX-32-STATIC-NEXT:    calll callee
11098; LINUX-32-STATIC-NEXT:    calll callee
11099; LINUX-32-STATIC-NEXT:    addl $12, %esp
11100; LINUX-32-STATIC-NEXT:    retl
11101;
11102; LINUX-32-PIC-LABEL: caller:
11103; LINUX-32-PIC:       # %bb.0: # %entry
11104; LINUX-32-PIC-NEXT:    pushl %ebx
11105; LINUX-32-PIC-NEXT:    subl $8, %esp
11106; LINUX-32-PIC-NEXT:    calll .L136$pb
11107; LINUX-32-PIC-NEXT:  .L136$pb:
11108; LINUX-32-PIC-NEXT:    popl %ebx
11109; LINUX-32-PIC-NEXT:  .Ltmp136:
11110; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp136-.L136$pb), %ebx
11111; LINUX-32-PIC-NEXT:    calll callee@PLT
11112; LINUX-32-PIC-NEXT:    calll callee@PLT
11113; LINUX-32-PIC-NEXT:    addl $8, %esp
11114; LINUX-32-PIC-NEXT:    popl %ebx
11115; LINUX-32-PIC-NEXT:    retl
11116;
11117; LINUX-64-PIC-LABEL: caller:
11118; LINUX-64-PIC:       # %bb.0: # %entry
11119; LINUX-64-PIC-NEXT:    pushq %rax
11120; LINUX-64-PIC-NEXT:    callq callee@PLT
11121; LINUX-64-PIC-NEXT:    callq callee@PLT
11122; LINUX-64-PIC-NEXT:    popq %rax
11123; LINUX-64-PIC-NEXT:    retq
11124;
11125; DARWIN-32-STATIC-LABEL: caller:
11126; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11127; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11128; DARWIN-32-STATIC-NEXT:    calll _callee
11129; DARWIN-32-STATIC-NEXT:    calll _callee
11130; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11131; DARWIN-32-STATIC-NEXT:    retl
11132;
11133; DARWIN-32-DYNAMIC-LABEL: caller:
11134; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11135; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11136; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11137; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11138; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11139; DARWIN-32-DYNAMIC-NEXT:    retl
11140;
11141; DARWIN-32-PIC-LABEL: caller:
11142; DARWIN-32-PIC:       ## %bb.0: ## %entry
11143; DARWIN-32-PIC-NEXT:    subl $12, %esp
11144; DARWIN-32-PIC-NEXT:    calll _callee
11145; DARWIN-32-PIC-NEXT:    calll _callee
11146; DARWIN-32-PIC-NEXT:    addl $12, %esp
11147; DARWIN-32-PIC-NEXT:    retl
11148;
11149; DARWIN-64-STATIC-LABEL: caller:
11150; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11151; DARWIN-64-STATIC-NEXT:    pushq %rax
11152; DARWIN-64-STATIC-NEXT:    callq _callee
11153; DARWIN-64-STATIC-NEXT:    callq _callee
11154; DARWIN-64-STATIC-NEXT:    popq %rax
11155; DARWIN-64-STATIC-NEXT:    retq
11156;
11157; DARWIN-64-DYNAMIC-LABEL: caller:
11158; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11159; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11160; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11161; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11162; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11163; DARWIN-64-DYNAMIC-NEXT:    retq
11164;
11165; DARWIN-64-PIC-LABEL: caller:
11166; DARWIN-64-PIC:       ## %bb.0: ## %entry
11167; DARWIN-64-PIC-NEXT:    pushq %rax
11168; DARWIN-64-PIC-NEXT:    callq _callee
11169; DARWIN-64-PIC-NEXT:    callq _callee
11170; DARWIN-64-PIC-NEXT:    popq %rax
11171; DARWIN-64-PIC-NEXT:    retq
11172
11173entry:
11174	call void @callee() nounwind
11175	call void @callee() nounwind
11176	ret void
11177}
11178
11179define void @dcaller() nounwind {
11180; LINUX-64-STATIC-LABEL: dcaller:
11181; LINUX-64-STATIC:       # %bb.0: # %entry
11182; LINUX-64-STATIC-NEXT:    pushq %rax
11183; LINUX-64-STATIC-NEXT:    callq dcallee
11184; LINUX-64-STATIC-NEXT:    callq dcallee
11185; LINUX-64-STATIC-NEXT:    popq %rax
11186; LINUX-64-STATIC-NEXT:    retq
11187;
11188; LINUX-32-STATIC-LABEL: dcaller:
11189; LINUX-32-STATIC:       # %bb.0: # %entry
11190; LINUX-32-STATIC-NEXT:    subl $12, %esp
11191; LINUX-32-STATIC-NEXT:    calll dcallee
11192; LINUX-32-STATIC-NEXT:    calll dcallee
11193; LINUX-32-STATIC-NEXT:    addl $12, %esp
11194; LINUX-32-STATIC-NEXT:    retl
11195;
11196; LINUX-32-PIC-LABEL: dcaller:
11197; LINUX-32-PIC:       # %bb.0: # %entry
11198; LINUX-32-PIC-NEXT:    pushl %ebx
11199; LINUX-32-PIC-NEXT:    subl $8, %esp
11200; LINUX-32-PIC-NEXT:    calll .L137$pb
11201; LINUX-32-PIC-NEXT:  .L137$pb:
11202; LINUX-32-PIC-NEXT:    popl %ebx
11203; LINUX-32-PIC-NEXT:  .Ltmp137:
11204; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp137-.L137$pb), %ebx
11205; LINUX-32-PIC-NEXT:    calll dcallee
11206; LINUX-32-PIC-NEXT:    calll dcallee
11207; LINUX-32-PIC-NEXT:    addl $8, %esp
11208; LINUX-32-PIC-NEXT:    popl %ebx
11209; LINUX-32-PIC-NEXT:    retl
11210;
11211; LINUX-64-PIC-LABEL: dcaller:
11212; LINUX-64-PIC:       # %bb.0: # %entry
11213; LINUX-64-PIC-NEXT:    pushq %rax
11214; LINUX-64-PIC-NEXT:    callq dcallee
11215; LINUX-64-PIC-NEXT:    callq dcallee
11216; LINUX-64-PIC-NEXT:    popq %rax
11217; LINUX-64-PIC-NEXT:    retq
11218;
11219; DARWIN-32-STATIC-LABEL: dcaller:
11220; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11221; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11222; DARWIN-32-STATIC-NEXT:    calll _dcallee
11223; DARWIN-32-STATIC-NEXT:    calll _dcallee
11224; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11225; DARWIN-32-STATIC-NEXT:    retl
11226;
11227; DARWIN-32-DYNAMIC-LABEL: dcaller:
11228; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11229; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11230; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11231; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11232; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11233; DARWIN-32-DYNAMIC-NEXT:    retl
11234;
11235; DARWIN-32-PIC-LABEL: dcaller:
11236; DARWIN-32-PIC:       ## %bb.0: ## %entry
11237; DARWIN-32-PIC-NEXT:    subl $12, %esp
11238; DARWIN-32-PIC-NEXT:    calll _dcallee
11239; DARWIN-32-PIC-NEXT:    calll _dcallee
11240; DARWIN-32-PIC-NEXT:    addl $12, %esp
11241; DARWIN-32-PIC-NEXT:    retl
11242;
11243; DARWIN-64-STATIC-LABEL: dcaller:
11244; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11245; DARWIN-64-STATIC-NEXT:    pushq %rax
11246; DARWIN-64-STATIC-NEXT:    callq _dcallee
11247; DARWIN-64-STATIC-NEXT:    callq _dcallee
11248; DARWIN-64-STATIC-NEXT:    popq %rax
11249; DARWIN-64-STATIC-NEXT:    retq
11250;
11251; DARWIN-64-DYNAMIC-LABEL: dcaller:
11252; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11253; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11254; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11255; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11256; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11257; DARWIN-64-DYNAMIC-NEXT:    retq
11258;
11259; DARWIN-64-PIC-LABEL: dcaller:
11260; DARWIN-64-PIC:       ## %bb.0: ## %entry
11261; DARWIN-64-PIC-NEXT:    pushq %rax
11262; DARWIN-64-PIC-NEXT:    callq _dcallee
11263; DARWIN-64-PIC-NEXT:    callq _dcallee
11264; DARWIN-64-PIC-NEXT:    popq %rax
11265; DARWIN-64-PIC-NEXT:    retq
11266
11267entry:
11268	call void @dcallee() nounwind
11269	call void @dcallee() nounwind
11270	ret void
11271}
11272
11273define void @lcaller() nounwind {
11274; LINUX-64-STATIC-LABEL: lcaller:
11275; LINUX-64-STATIC:       # %bb.0: # %entry
11276; LINUX-64-STATIC-NEXT:    pushq %rax
11277; LINUX-64-STATIC-NEXT:    callq lcallee
11278; LINUX-64-STATIC-NEXT:    callq lcallee
11279; LINUX-64-STATIC-NEXT:    popq %rax
11280; LINUX-64-STATIC-NEXT:    retq
11281;
11282; LINUX-32-STATIC-LABEL: lcaller:
11283; LINUX-32-STATIC:       # %bb.0: # %entry
11284; LINUX-32-STATIC-NEXT:    subl $12, %esp
11285; LINUX-32-STATIC-NEXT:    calll lcallee
11286; LINUX-32-STATIC-NEXT:    calll lcallee
11287; LINUX-32-STATIC-NEXT:    addl $12, %esp
11288; LINUX-32-STATIC-NEXT:    retl
11289;
11290; LINUX-32-PIC-LABEL: lcaller:
11291; LINUX-32-PIC:       # %bb.0: # %entry
11292; LINUX-32-PIC-NEXT:    pushl %ebx
11293; LINUX-32-PIC-NEXT:    subl $8, %esp
11294; LINUX-32-PIC-NEXT:    calll .L138$pb
11295; LINUX-32-PIC-NEXT:  .L138$pb:
11296; LINUX-32-PIC-NEXT:    popl %ebx
11297; LINUX-32-PIC-NEXT:  .Ltmp138:
11298; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp138-.L138$pb), %ebx
11299; LINUX-32-PIC-NEXT:    calll lcallee@PLT
11300; LINUX-32-PIC-NEXT:    calll lcallee@PLT
11301; LINUX-32-PIC-NEXT:    addl $8, %esp
11302; LINUX-32-PIC-NEXT:    popl %ebx
11303; LINUX-32-PIC-NEXT:    retl
11304;
11305; LINUX-64-PIC-LABEL: lcaller:
11306; LINUX-64-PIC:       # %bb.0: # %entry
11307; LINUX-64-PIC-NEXT:    pushq %rax
11308; LINUX-64-PIC-NEXT:    callq lcallee@PLT
11309; LINUX-64-PIC-NEXT:    callq lcallee@PLT
11310; LINUX-64-PIC-NEXT:    popq %rax
11311; LINUX-64-PIC-NEXT:    retq
11312;
11313; DARWIN-32-STATIC-LABEL: lcaller:
11314; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11315; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11316; DARWIN-32-STATIC-NEXT:    calll _lcallee
11317; DARWIN-32-STATIC-NEXT:    calll _lcallee
11318; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11319; DARWIN-32-STATIC-NEXT:    retl
11320;
11321; DARWIN-32-DYNAMIC-LABEL: lcaller:
11322; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11323; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11324; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11325; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11326; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11327; DARWIN-32-DYNAMIC-NEXT:    retl
11328;
11329; DARWIN-32-PIC-LABEL: lcaller:
11330; DARWIN-32-PIC:       ## %bb.0: ## %entry
11331; DARWIN-32-PIC-NEXT:    subl $12, %esp
11332; DARWIN-32-PIC-NEXT:    calll _lcallee
11333; DARWIN-32-PIC-NEXT:    calll _lcallee
11334; DARWIN-32-PIC-NEXT:    addl $12, %esp
11335; DARWIN-32-PIC-NEXT:    retl
11336;
11337; DARWIN-64-STATIC-LABEL: lcaller:
11338; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11339; DARWIN-64-STATIC-NEXT:    pushq %rax
11340; DARWIN-64-STATIC-NEXT:    callq _lcallee
11341; DARWIN-64-STATIC-NEXT:    callq _lcallee
11342; DARWIN-64-STATIC-NEXT:    popq %rax
11343; DARWIN-64-STATIC-NEXT:    retq
11344;
11345; DARWIN-64-DYNAMIC-LABEL: lcaller:
11346; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11347; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11348; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11349; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11350; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11351; DARWIN-64-DYNAMIC-NEXT:    retq
11352;
11353; DARWIN-64-PIC-LABEL: lcaller:
11354; DARWIN-64-PIC:       ## %bb.0: ## %entry
11355; DARWIN-64-PIC-NEXT:    pushq %rax
11356; DARWIN-64-PIC-NEXT:    callq _lcallee
11357; DARWIN-64-PIC-NEXT:    callq _lcallee
11358; DARWIN-64-PIC-NEXT:    popq %rax
11359; DARWIN-64-PIC-NEXT:    retq
11360
11361entry:
11362	call void @lcallee() nounwind
11363	call void @lcallee() nounwind
11364	ret void
11365}
11366
11367define void @tailcaller() nounwind {
11368; LINUX-64-STATIC-LABEL: tailcaller:
11369; LINUX-64-STATIC:       # %bb.0: # %entry
11370; LINUX-64-STATIC-NEXT:    pushq %rax
11371; LINUX-64-STATIC-NEXT:    callq callee
11372; LINUX-64-STATIC-NEXT:    popq %rax
11373; LINUX-64-STATIC-NEXT:    retq
11374;
11375; LINUX-32-STATIC-LABEL: tailcaller:
11376; LINUX-32-STATIC:       # %bb.0: # %entry
11377; LINUX-32-STATIC-NEXT:    subl $12, %esp
11378; LINUX-32-STATIC-NEXT:    calll callee
11379; LINUX-32-STATIC-NEXT:    addl $12, %esp
11380; LINUX-32-STATIC-NEXT:    retl
11381;
11382; LINUX-32-PIC-LABEL: tailcaller:
11383; LINUX-32-PIC:       # %bb.0: # %entry
11384; LINUX-32-PIC-NEXT:    pushl %ebx
11385; LINUX-32-PIC-NEXT:    subl $8, %esp
11386; LINUX-32-PIC-NEXT:    calll .L139$pb
11387; LINUX-32-PIC-NEXT:  .L139$pb:
11388; LINUX-32-PIC-NEXT:    popl %ebx
11389; LINUX-32-PIC-NEXT:  .Ltmp139:
11390; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp139-.L139$pb), %ebx
11391; LINUX-32-PIC-NEXT:    calll callee@PLT
11392; LINUX-32-PIC-NEXT:    addl $8, %esp
11393; LINUX-32-PIC-NEXT:    popl %ebx
11394; LINUX-32-PIC-NEXT:    retl
11395;
11396; LINUX-64-PIC-LABEL: tailcaller:
11397; LINUX-64-PIC:       # %bb.0: # %entry
11398; LINUX-64-PIC-NEXT:    pushq %rax
11399; LINUX-64-PIC-NEXT:    callq callee@PLT
11400; LINUX-64-PIC-NEXT:    popq %rax
11401; LINUX-64-PIC-NEXT:    retq
11402;
11403; DARWIN-32-STATIC-LABEL: tailcaller:
11404; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11405; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11406; DARWIN-32-STATIC-NEXT:    calll _callee
11407; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11408; DARWIN-32-STATIC-NEXT:    retl
11409;
11410; DARWIN-32-DYNAMIC-LABEL: tailcaller:
11411; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11412; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11413; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11414; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11415; DARWIN-32-DYNAMIC-NEXT:    retl
11416;
11417; DARWIN-32-PIC-LABEL: tailcaller:
11418; DARWIN-32-PIC:       ## %bb.0: ## %entry
11419; DARWIN-32-PIC-NEXT:    subl $12, %esp
11420; DARWIN-32-PIC-NEXT:    calll _callee
11421; DARWIN-32-PIC-NEXT:    addl $12, %esp
11422; DARWIN-32-PIC-NEXT:    retl
11423;
11424; DARWIN-64-STATIC-LABEL: tailcaller:
11425; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11426; DARWIN-64-STATIC-NEXT:    pushq %rax
11427; DARWIN-64-STATIC-NEXT:    callq _callee
11428; DARWIN-64-STATIC-NEXT:    popq %rax
11429; DARWIN-64-STATIC-NEXT:    retq
11430;
11431; DARWIN-64-DYNAMIC-LABEL: tailcaller:
11432; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11433; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11434; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11435; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11436; DARWIN-64-DYNAMIC-NEXT:    retq
11437;
11438; DARWIN-64-PIC-LABEL: tailcaller:
11439; DARWIN-64-PIC:       ## %bb.0: ## %entry
11440; DARWIN-64-PIC-NEXT:    pushq %rax
11441; DARWIN-64-PIC-NEXT:    callq _callee
11442; DARWIN-64-PIC-NEXT:    popq %rax
11443; DARWIN-64-PIC-NEXT:    retq
11444
11445entry:
11446	call void @callee() nounwind
11447	ret void
11448}
11449
11450define void @dtailcaller() nounwind {
11451; LINUX-64-STATIC-LABEL: dtailcaller:
11452; LINUX-64-STATIC:       # %bb.0: # %entry
11453; LINUX-64-STATIC-NEXT:    pushq %rax
11454; LINUX-64-STATIC-NEXT:    callq dcallee
11455; LINUX-64-STATIC-NEXT:    popq %rax
11456; LINUX-64-STATIC-NEXT:    retq
11457;
11458; LINUX-32-STATIC-LABEL: dtailcaller:
11459; LINUX-32-STATIC:       # %bb.0: # %entry
11460; LINUX-32-STATIC-NEXT:    subl $12, %esp
11461; LINUX-32-STATIC-NEXT:    calll dcallee
11462; LINUX-32-STATIC-NEXT:    addl $12, %esp
11463; LINUX-32-STATIC-NEXT:    retl
11464;
11465; LINUX-32-PIC-LABEL: dtailcaller:
11466; LINUX-32-PIC:       # %bb.0: # %entry
11467; LINUX-32-PIC-NEXT:    pushl %ebx
11468; LINUX-32-PIC-NEXT:    subl $8, %esp
11469; LINUX-32-PIC-NEXT:    calll .L140$pb
11470; LINUX-32-PIC-NEXT:  .L140$pb:
11471; LINUX-32-PIC-NEXT:    popl %ebx
11472; LINUX-32-PIC-NEXT:  .Ltmp140:
11473; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp140-.L140$pb), %ebx
11474; LINUX-32-PIC-NEXT:    calll dcallee
11475; LINUX-32-PIC-NEXT:    addl $8, %esp
11476; LINUX-32-PIC-NEXT:    popl %ebx
11477; LINUX-32-PIC-NEXT:    retl
11478;
11479; LINUX-64-PIC-LABEL: dtailcaller:
11480; LINUX-64-PIC:       # %bb.0: # %entry
11481; LINUX-64-PIC-NEXT:    pushq %rax
11482; LINUX-64-PIC-NEXT:    callq dcallee
11483; LINUX-64-PIC-NEXT:    popq %rax
11484; LINUX-64-PIC-NEXT:    retq
11485;
11486; DARWIN-32-STATIC-LABEL: dtailcaller:
11487; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11488; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11489; DARWIN-32-STATIC-NEXT:    calll _dcallee
11490; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11491; DARWIN-32-STATIC-NEXT:    retl
11492;
11493; DARWIN-32-DYNAMIC-LABEL: dtailcaller:
11494; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11495; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11496; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11497; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11498; DARWIN-32-DYNAMIC-NEXT:    retl
11499;
11500; DARWIN-32-PIC-LABEL: dtailcaller:
11501; DARWIN-32-PIC:       ## %bb.0: ## %entry
11502; DARWIN-32-PIC-NEXT:    subl $12, %esp
11503; DARWIN-32-PIC-NEXT:    calll _dcallee
11504; DARWIN-32-PIC-NEXT:    addl $12, %esp
11505; DARWIN-32-PIC-NEXT:    retl
11506;
11507; DARWIN-64-STATIC-LABEL: dtailcaller:
11508; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11509; DARWIN-64-STATIC-NEXT:    pushq %rax
11510; DARWIN-64-STATIC-NEXT:    callq _dcallee
11511; DARWIN-64-STATIC-NEXT:    popq %rax
11512; DARWIN-64-STATIC-NEXT:    retq
11513;
11514; DARWIN-64-DYNAMIC-LABEL: dtailcaller:
11515; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11516; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11517; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11518; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11519; DARWIN-64-DYNAMIC-NEXT:    retq
11520;
11521; DARWIN-64-PIC-LABEL: dtailcaller:
11522; DARWIN-64-PIC:       ## %bb.0: ## %entry
11523; DARWIN-64-PIC-NEXT:    pushq %rax
11524; DARWIN-64-PIC-NEXT:    callq _dcallee
11525; DARWIN-64-PIC-NEXT:    popq %rax
11526; DARWIN-64-PIC-NEXT:    retq
11527
11528entry:
11529	call void @dcallee() nounwind
11530	ret void
11531}
11532
11533define void @ltailcaller() nounwind {
11534; LINUX-64-STATIC-LABEL: ltailcaller:
11535; LINUX-64-STATIC:       # %bb.0: # %entry
11536; LINUX-64-STATIC-NEXT:    pushq %rax
11537; LINUX-64-STATIC-NEXT:    callq lcallee
11538; LINUX-64-STATIC-NEXT:    popq %rax
11539; LINUX-64-STATIC-NEXT:    retq
11540;
11541; LINUX-32-STATIC-LABEL: ltailcaller:
11542; LINUX-32-STATIC:       # %bb.0: # %entry
11543; LINUX-32-STATIC-NEXT:    subl $12, %esp
11544; LINUX-32-STATIC-NEXT:    calll lcallee
11545; LINUX-32-STATIC-NEXT:    addl $12, %esp
11546; LINUX-32-STATIC-NEXT:    retl
11547;
11548; LINUX-32-PIC-LABEL: ltailcaller:
11549; LINUX-32-PIC:       # %bb.0: # %entry
11550; LINUX-32-PIC-NEXT:    pushl %ebx
11551; LINUX-32-PIC-NEXT:    subl $8, %esp
11552; LINUX-32-PIC-NEXT:    calll .L141$pb
11553; LINUX-32-PIC-NEXT:  .L141$pb:
11554; LINUX-32-PIC-NEXT:    popl %ebx
11555; LINUX-32-PIC-NEXT:  .Ltmp141:
11556; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp141-.L141$pb), %ebx
11557; LINUX-32-PIC-NEXT:    calll lcallee@PLT
11558; LINUX-32-PIC-NEXT:    addl $8, %esp
11559; LINUX-32-PIC-NEXT:    popl %ebx
11560; LINUX-32-PIC-NEXT:    retl
11561;
11562; LINUX-64-PIC-LABEL: ltailcaller:
11563; LINUX-64-PIC:       # %bb.0: # %entry
11564; LINUX-64-PIC-NEXT:    pushq %rax
11565; LINUX-64-PIC-NEXT:    callq lcallee@PLT
11566; LINUX-64-PIC-NEXT:    popq %rax
11567; LINUX-64-PIC-NEXT:    retq
11568;
11569; DARWIN-32-STATIC-LABEL: ltailcaller:
11570; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11571; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11572; DARWIN-32-STATIC-NEXT:    calll _lcallee
11573; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11574; DARWIN-32-STATIC-NEXT:    retl
11575;
11576; DARWIN-32-DYNAMIC-LABEL: ltailcaller:
11577; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11578; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11579; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11580; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11581; DARWIN-32-DYNAMIC-NEXT:    retl
11582;
11583; DARWIN-32-PIC-LABEL: ltailcaller:
11584; DARWIN-32-PIC:       ## %bb.0: ## %entry
11585; DARWIN-32-PIC-NEXT:    subl $12, %esp
11586; DARWIN-32-PIC-NEXT:    calll _lcallee
11587; DARWIN-32-PIC-NEXT:    addl $12, %esp
11588; DARWIN-32-PIC-NEXT:    retl
11589;
11590; DARWIN-64-STATIC-LABEL: ltailcaller:
11591; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11592; DARWIN-64-STATIC-NEXT:    pushq %rax
11593; DARWIN-64-STATIC-NEXT:    callq _lcallee
11594; DARWIN-64-STATIC-NEXT:    popq %rax
11595; DARWIN-64-STATIC-NEXT:    retq
11596;
11597; DARWIN-64-DYNAMIC-LABEL: ltailcaller:
11598; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11599; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11600; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11601; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11602; DARWIN-64-DYNAMIC-NEXT:    retq
11603;
11604; DARWIN-64-PIC-LABEL: ltailcaller:
11605; DARWIN-64-PIC:       ## %bb.0: ## %entry
11606; DARWIN-64-PIC-NEXT:    pushq %rax
11607; DARWIN-64-PIC-NEXT:    callq _lcallee
11608; DARWIN-64-PIC-NEXT:    popq %rax
11609; DARWIN-64-PIC-NEXT:    retq
11610
11611entry:
11612	call void @lcallee() nounwind
11613	ret void
11614}
11615
11616define void @icaller() nounwind {
11617; LINUX-64-STATIC-LABEL: icaller:
11618; LINUX-64-STATIC:       # %bb.0: # %entry
11619; LINUX-64-STATIC-NEXT:    pushq %rax
11620; LINUX-64-STATIC-NEXT:    callq *ifunc(%rip)
11621; LINUX-64-STATIC-NEXT:    callq *ifunc(%rip)
11622; LINUX-64-STATIC-NEXT:    popq %rax
11623; LINUX-64-STATIC-NEXT:    retq
11624;
11625; LINUX-32-STATIC-LABEL: icaller:
11626; LINUX-32-STATIC:       # %bb.0: # %entry
11627; LINUX-32-STATIC-NEXT:    subl $12, %esp
11628; LINUX-32-STATIC-NEXT:    calll *ifunc
11629; LINUX-32-STATIC-NEXT:    calll *ifunc
11630; LINUX-32-STATIC-NEXT:    addl $12, %esp
11631; LINUX-32-STATIC-NEXT:    retl
11632;
11633; LINUX-32-PIC-LABEL: icaller:
11634; LINUX-32-PIC:       # %bb.0: # %entry
11635; LINUX-32-PIC-NEXT:    pushl %ebx
11636; LINUX-32-PIC-NEXT:    pushl %esi
11637; LINUX-32-PIC-NEXT:    pushl %eax
11638; LINUX-32-PIC-NEXT:    calll .L142$pb
11639; LINUX-32-PIC-NEXT:  .L142$pb:
11640; LINUX-32-PIC-NEXT:    popl %ebx
11641; LINUX-32-PIC-NEXT:  .Ltmp142:
11642; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp142-.L142$pb), %ebx
11643; LINUX-32-PIC-NEXT:    movl ifunc@GOT(%ebx), %esi
11644; LINUX-32-PIC-NEXT:    calll *(%esi)
11645; LINUX-32-PIC-NEXT:    calll *(%esi)
11646; LINUX-32-PIC-NEXT:    addl $4, %esp
11647; LINUX-32-PIC-NEXT:    popl %esi
11648; LINUX-32-PIC-NEXT:    popl %ebx
11649; LINUX-32-PIC-NEXT:    retl
11650;
11651; LINUX-64-PIC-LABEL: icaller:
11652; LINUX-64-PIC:       # %bb.0: # %entry
11653; LINUX-64-PIC-NEXT:    pushq %rbx
11654; LINUX-64-PIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11655; LINUX-64-PIC-NEXT:    callq *(%rbx)
11656; LINUX-64-PIC-NEXT:    callq *(%rbx)
11657; LINUX-64-PIC-NEXT:    popq %rbx
11658; LINUX-64-PIC-NEXT:    retq
11659;
11660; DARWIN-32-STATIC-LABEL: icaller:
11661; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11662; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11663; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11664; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11665; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11666; DARWIN-32-STATIC-NEXT:    retl
11667;
11668; DARWIN-32-DYNAMIC-LABEL: icaller:
11669; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11670; DARWIN-32-DYNAMIC-NEXT:    pushl %esi
11671; DARWIN-32-DYNAMIC-NEXT:    subl $8, %esp
11672; DARWIN-32-DYNAMIC-NEXT:    movl L_ifunc$non_lazy_ptr, %esi
11673; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11674; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11675; DARWIN-32-DYNAMIC-NEXT:    addl $8, %esp
11676; DARWIN-32-DYNAMIC-NEXT:    popl %esi
11677; DARWIN-32-DYNAMIC-NEXT:    retl
11678;
11679; DARWIN-32-PIC-LABEL: icaller:
11680; DARWIN-32-PIC:       ## %bb.0: ## %entry
11681; DARWIN-32-PIC-NEXT:    pushl %esi
11682; DARWIN-32-PIC-NEXT:    subl $8, %esp
11683; DARWIN-32-PIC-NEXT:    calll L142$pb
11684; DARWIN-32-PIC-NEXT:  L142$pb:
11685; DARWIN-32-PIC-NEXT:    popl %eax
11686; DARWIN-32-PIC-NEXT:    movl L_ifunc$non_lazy_ptr-L142$pb(%eax), %esi
11687; DARWIN-32-PIC-NEXT:    calll *(%esi)
11688; DARWIN-32-PIC-NEXT:    calll *(%esi)
11689; DARWIN-32-PIC-NEXT:    addl $8, %esp
11690; DARWIN-32-PIC-NEXT:    popl %esi
11691; DARWIN-32-PIC-NEXT:    retl
11692;
11693; DARWIN-64-STATIC-LABEL: icaller:
11694; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11695; DARWIN-64-STATIC-NEXT:    pushq %rbx
11696; DARWIN-64-STATIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11697; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
11698; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
11699; DARWIN-64-STATIC-NEXT:    popq %rbx
11700; DARWIN-64-STATIC-NEXT:    retq
11701;
11702; DARWIN-64-DYNAMIC-LABEL: icaller:
11703; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11704; DARWIN-64-DYNAMIC-NEXT:    pushq %rbx
11705; DARWIN-64-DYNAMIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11706; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
11707; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
11708; DARWIN-64-DYNAMIC-NEXT:    popq %rbx
11709; DARWIN-64-DYNAMIC-NEXT:    retq
11710;
11711; DARWIN-64-PIC-LABEL: icaller:
11712; DARWIN-64-PIC:       ## %bb.0: ## %entry
11713; DARWIN-64-PIC-NEXT:    pushq %rbx
11714; DARWIN-64-PIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11715; DARWIN-64-PIC-NEXT:    callq *(%rbx)
11716; DARWIN-64-PIC-NEXT:    callq *(%rbx)
11717; DARWIN-64-PIC-NEXT:    popq %rbx
11718; DARWIN-64-PIC-NEXT:    retq
11719
11720entry:
11721	%0 = load void ()*, void ()** @ifunc, align 8
11722	call void %0() nounwind
11723	%1 = load void ()*, void ()** @ifunc, align 8
11724	call void %1() nounwind
11725	ret void
11726}
11727
11728define void @dicaller() nounwind {
11729; LINUX-64-STATIC-LABEL: dicaller:
11730; LINUX-64-STATIC:       # %bb.0: # %entry
11731; LINUX-64-STATIC-NEXT:    pushq %rax
11732; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
11733; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
11734; LINUX-64-STATIC-NEXT:    popq %rax
11735; LINUX-64-STATIC-NEXT:    retq
11736;
11737; LINUX-32-STATIC-LABEL: dicaller:
11738; LINUX-32-STATIC:       # %bb.0: # %entry
11739; LINUX-32-STATIC-NEXT:    subl $12, %esp
11740; LINUX-32-STATIC-NEXT:    calll *difunc
11741; LINUX-32-STATIC-NEXT:    calll *difunc
11742; LINUX-32-STATIC-NEXT:    addl $12, %esp
11743; LINUX-32-STATIC-NEXT:    retl
11744;
11745; LINUX-32-PIC-LABEL: dicaller:
11746; LINUX-32-PIC:       # %bb.0: # %entry
11747; LINUX-32-PIC-NEXT:    pushl %ebx
11748; LINUX-32-PIC-NEXT:    pushl %esi
11749; LINUX-32-PIC-NEXT:    pushl %eax
11750; LINUX-32-PIC-NEXT:    calll .L143$pb
11751; LINUX-32-PIC-NEXT:  .L143$pb:
11752; LINUX-32-PIC-NEXT:    popl %ebx
11753; LINUX-32-PIC-NEXT:  .Ltmp143:
11754; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp143-.L143$pb), %ebx
11755; LINUX-32-PIC-NEXT:    movl difunc@GOT(%ebx), %esi
11756; LINUX-32-PIC-NEXT:    calll *(%esi)
11757; LINUX-32-PIC-NEXT:    calll *(%esi)
11758; LINUX-32-PIC-NEXT:    addl $4, %esp
11759; LINUX-32-PIC-NEXT:    popl %esi
11760; LINUX-32-PIC-NEXT:    popl %ebx
11761; LINUX-32-PIC-NEXT:    retl
11762;
11763; LINUX-64-PIC-LABEL: dicaller:
11764; LINUX-64-PIC:       # %bb.0: # %entry
11765; LINUX-64-PIC-NEXT:    pushq %rbx
11766; LINUX-64-PIC-NEXT:    movq difunc@GOTPCREL(%rip), %rbx
11767; LINUX-64-PIC-NEXT:    callq *(%rbx)
11768; LINUX-64-PIC-NEXT:    callq *(%rbx)
11769; LINUX-64-PIC-NEXT:    popq %rbx
11770; LINUX-64-PIC-NEXT:    retq
11771;
11772; DARWIN-32-STATIC-LABEL: dicaller:
11773; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11774; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11775; DARWIN-32-STATIC-NEXT:    calll *_difunc
11776; DARWIN-32-STATIC-NEXT:    calll *_difunc
11777; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11778; DARWIN-32-STATIC-NEXT:    retl
11779;
11780; DARWIN-32-DYNAMIC-LABEL: dicaller:
11781; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11782; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11783; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
11784; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
11785; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11786; DARWIN-32-DYNAMIC-NEXT:    retl
11787;
11788; DARWIN-32-PIC-LABEL: dicaller:
11789; DARWIN-32-PIC:       ## %bb.0: ## %entry
11790; DARWIN-32-PIC-NEXT:    pushl %esi
11791; DARWIN-32-PIC-NEXT:    subl $8, %esp
11792; DARWIN-32-PIC-NEXT:    calll L143$pb
11793; DARWIN-32-PIC-NEXT:  L143$pb:
11794; DARWIN-32-PIC-NEXT:    popl %esi
11795; DARWIN-32-PIC-NEXT:    calll *_difunc-L143$pb(%esi)
11796; DARWIN-32-PIC-NEXT:    calll *_difunc-L143$pb(%esi)
11797; DARWIN-32-PIC-NEXT:    addl $8, %esp
11798; DARWIN-32-PIC-NEXT:    popl %esi
11799; DARWIN-32-PIC-NEXT:    retl
11800;
11801; DARWIN-64-STATIC-LABEL: dicaller:
11802; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11803; DARWIN-64-STATIC-NEXT:    pushq %rax
11804; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
11805; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
11806; DARWIN-64-STATIC-NEXT:    popq %rax
11807; DARWIN-64-STATIC-NEXT:    retq
11808;
11809; DARWIN-64-DYNAMIC-LABEL: dicaller:
11810; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11811; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11812; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
11813; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
11814; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11815; DARWIN-64-DYNAMIC-NEXT:    retq
11816;
11817; DARWIN-64-PIC-LABEL: dicaller:
11818; DARWIN-64-PIC:       ## %bb.0: ## %entry
11819; DARWIN-64-PIC-NEXT:    pushq %rax
11820; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
11821; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
11822; DARWIN-64-PIC-NEXT:    popq %rax
11823; DARWIN-64-PIC-NEXT:    retq
11824
11825entry:
11826	%0 = load void ()*, void ()** @difunc, align 8
11827	call void %0() nounwind
11828	%1 = load void ()*, void ()** @difunc, align 8
11829	call void %1() nounwind
11830	ret void
11831}
11832
11833define void @licaller() nounwind {
11834; LINUX-64-STATIC-LABEL: licaller:
11835; LINUX-64-STATIC:       # %bb.0: # %entry
11836; LINUX-64-STATIC-NEXT:    pushq %rax
11837; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
11838; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
11839; LINUX-64-STATIC-NEXT:    popq %rax
11840; LINUX-64-STATIC-NEXT:    retq
11841;
11842; LINUX-32-STATIC-LABEL: licaller:
11843; LINUX-32-STATIC:       # %bb.0: # %entry
11844; LINUX-32-STATIC-NEXT:    subl $12, %esp
11845; LINUX-32-STATIC-NEXT:    calll *lifunc
11846; LINUX-32-STATIC-NEXT:    calll *lifunc
11847; LINUX-32-STATIC-NEXT:    addl $12, %esp
11848; LINUX-32-STATIC-NEXT:    retl
11849;
11850; LINUX-32-PIC-LABEL: licaller:
11851; LINUX-32-PIC:       # %bb.0: # %entry
11852; LINUX-32-PIC-NEXT:    pushl %ebx
11853; LINUX-32-PIC-NEXT:    subl $8, %esp
11854; LINUX-32-PIC-NEXT:    calll .L144$pb
11855; LINUX-32-PIC-NEXT:  .L144$pb:
11856; LINUX-32-PIC-NEXT:    popl %ebx
11857; LINUX-32-PIC-NEXT:  .Ltmp144:
11858; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp144-.L144$pb), %ebx
11859; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
11860; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
11861; LINUX-32-PIC-NEXT:    addl $8, %esp
11862; LINUX-32-PIC-NEXT:    popl %ebx
11863; LINUX-32-PIC-NEXT:    retl
11864;
11865; LINUX-64-PIC-LABEL: licaller:
11866; LINUX-64-PIC:       # %bb.0: # %entry
11867; LINUX-64-PIC-NEXT:    pushq %rax
11868; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
11869; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
11870; LINUX-64-PIC-NEXT:    popq %rax
11871; LINUX-64-PIC-NEXT:    retq
11872;
11873; DARWIN-32-STATIC-LABEL: licaller:
11874; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11875; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11876; DARWIN-32-STATIC-NEXT:    calll *_lifunc
11877; DARWIN-32-STATIC-NEXT:    calll *_lifunc
11878; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11879; DARWIN-32-STATIC-NEXT:    retl
11880;
11881; DARWIN-32-DYNAMIC-LABEL: licaller:
11882; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11883; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11884; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
11885; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
11886; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11887; DARWIN-32-DYNAMIC-NEXT:    retl
11888;
11889; DARWIN-32-PIC-LABEL: licaller:
11890; DARWIN-32-PIC:       ## %bb.0: ## %entry
11891; DARWIN-32-PIC-NEXT:    pushl %esi
11892; DARWIN-32-PIC-NEXT:    subl $8, %esp
11893; DARWIN-32-PIC-NEXT:    calll L144$pb
11894; DARWIN-32-PIC-NEXT:  L144$pb:
11895; DARWIN-32-PIC-NEXT:    popl %esi
11896; DARWIN-32-PIC-NEXT:    calll *_lifunc-L144$pb(%esi)
11897; DARWIN-32-PIC-NEXT:    calll *_lifunc-L144$pb(%esi)
11898; DARWIN-32-PIC-NEXT:    addl $8, %esp
11899; DARWIN-32-PIC-NEXT:    popl %esi
11900; DARWIN-32-PIC-NEXT:    retl
11901;
11902; DARWIN-64-STATIC-LABEL: licaller:
11903; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11904; DARWIN-64-STATIC-NEXT:    pushq %rax
11905; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
11906; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
11907; DARWIN-64-STATIC-NEXT:    popq %rax
11908; DARWIN-64-STATIC-NEXT:    retq
11909;
11910; DARWIN-64-DYNAMIC-LABEL: licaller:
11911; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11912; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11913; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
11914; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
11915; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11916; DARWIN-64-DYNAMIC-NEXT:    retq
11917;
11918; DARWIN-64-PIC-LABEL: licaller:
11919; DARWIN-64-PIC:       ## %bb.0: ## %entry
11920; DARWIN-64-PIC-NEXT:    pushq %rax
11921; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
11922; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
11923; DARWIN-64-PIC-NEXT:    popq %rax
11924; DARWIN-64-PIC-NEXT:    retq
11925
11926entry:
11927	%0 = load void ()*, void ()** @lifunc, align 8
11928	call void %0() nounwind
11929	%1 = load void ()*, void ()** @lifunc, align 8
11930	call void %1() nounwind
11931	ret void
11932}
11933
11934define void @itailcaller() nounwind {
11935; LINUX-64-STATIC-LABEL: itailcaller:
11936; LINUX-64-STATIC:       # %bb.0: # %entry
11937; LINUX-64-STATIC-NEXT:    pushq %rax
11938; LINUX-64-STATIC-NEXT:    callq *ifunc(%rip)
11939; LINUX-64-STATIC-NEXT:    callq *ifunc(%rip)
11940; LINUX-64-STATIC-NEXT:    popq %rax
11941; LINUX-64-STATIC-NEXT:    retq
11942;
11943; LINUX-32-STATIC-LABEL: itailcaller:
11944; LINUX-32-STATIC:       # %bb.0: # %entry
11945; LINUX-32-STATIC-NEXT:    subl $12, %esp
11946; LINUX-32-STATIC-NEXT:    calll *ifunc
11947; LINUX-32-STATIC-NEXT:    calll *ifunc
11948; LINUX-32-STATIC-NEXT:    addl $12, %esp
11949; LINUX-32-STATIC-NEXT:    retl
11950;
11951; LINUX-32-PIC-LABEL: itailcaller:
11952; LINUX-32-PIC:       # %bb.0: # %entry
11953; LINUX-32-PIC-NEXT:    pushl %ebx
11954; LINUX-32-PIC-NEXT:    pushl %esi
11955; LINUX-32-PIC-NEXT:    pushl %eax
11956; LINUX-32-PIC-NEXT:    calll .L145$pb
11957; LINUX-32-PIC-NEXT:  .L145$pb:
11958; LINUX-32-PIC-NEXT:    popl %ebx
11959; LINUX-32-PIC-NEXT:  .Ltmp145:
11960; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp145-.L145$pb), %ebx
11961; LINUX-32-PIC-NEXT:    movl ifunc@GOT(%ebx), %esi
11962; LINUX-32-PIC-NEXT:    calll *(%esi)
11963; LINUX-32-PIC-NEXT:    calll *(%esi)
11964; LINUX-32-PIC-NEXT:    addl $4, %esp
11965; LINUX-32-PIC-NEXT:    popl %esi
11966; LINUX-32-PIC-NEXT:    popl %ebx
11967; LINUX-32-PIC-NEXT:    retl
11968;
11969; LINUX-64-PIC-LABEL: itailcaller:
11970; LINUX-64-PIC:       # %bb.0: # %entry
11971; LINUX-64-PIC-NEXT:    pushq %rbx
11972; LINUX-64-PIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11973; LINUX-64-PIC-NEXT:    callq *(%rbx)
11974; LINUX-64-PIC-NEXT:    callq *(%rbx)
11975; LINUX-64-PIC-NEXT:    popq %rbx
11976; LINUX-64-PIC-NEXT:    retq
11977;
11978; DARWIN-32-STATIC-LABEL: itailcaller:
11979; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11980; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11981; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11982; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11983; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11984; DARWIN-32-STATIC-NEXT:    retl
11985;
11986; DARWIN-32-DYNAMIC-LABEL: itailcaller:
11987; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11988; DARWIN-32-DYNAMIC-NEXT:    pushl %esi
11989; DARWIN-32-DYNAMIC-NEXT:    subl $8, %esp
11990; DARWIN-32-DYNAMIC-NEXT:    movl L_ifunc$non_lazy_ptr, %esi
11991; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11992; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11993; DARWIN-32-DYNAMIC-NEXT:    addl $8, %esp
11994; DARWIN-32-DYNAMIC-NEXT:    popl %esi
11995; DARWIN-32-DYNAMIC-NEXT:    retl
11996;
11997; DARWIN-32-PIC-LABEL: itailcaller:
11998; DARWIN-32-PIC:       ## %bb.0: ## %entry
11999; DARWIN-32-PIC-NEXT:    pushl %esi
12000; DARWIN-32-PIC-NEXT:    subl $8, %esp
12001; DARWIN-32-PIC-NEXT:    calll L145$pb
12002; DARWIN-32-PIC-NEXT:  L145$pb:
12003; DARWIN-32-PIC-NEXT:    popl %eax
12004; DARWIN-32-PIC-NEXT:    movl L_ifunc$non_lazy_ptr-L145$pb(%eax), %esi
12005; DARWIN-32-PIC-NEXT:    calll *(%esi)
12006; DARWIN-32-PIC-NEXT:    calll *(%esi)
12007; DARWIN-32-PIC-NEXT:    addl $8, %esp
12008; DARWIN-32-PIC-NEXT:    popl %esi
12009; DARWIN-32-PIC-NEXT:    retl
12010;
12011; DARWIN-64-STATIC-LABEL: itailcaller:
12012; DARWIN-64-STATIC:       ## %bb.0: ## %entry
12013; DARWIN-64-STATIC-NEXT:    pushq %rbx
12014; DARWIN-64-STATIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
12015; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
12016; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
12017; DARWIN-64-STATIC-NEXT:    popq %rbx
12018; DARWIN-64-STATIC-NEXT:    retq
12019;
12020; DARWIN-64-DYNAMIC-LABEL: itailcaller:
12021; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
12022; DARWIN-64-DYNAMIC-NEXT:    pushq %rbx
12023; DARWIN-64-DYNAMIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
12024; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
12025; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
12026; DARWIN-64-DYNAMIC-NEXT:    popq %rbx
12027; DARWIN-64-DYNAMIC-NEXT:    retq
12028;
12029; DARWIN-64-PIC-LABEL: itailcaller:
12030; DARWIN-64-PIC:       ## %bb.0: ## %entry
12031; DARWIN-64-PIC-NEXT:    pushq %rbx
12032; DARWIN-64-PIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
12033; DARWIN-64-PIC-NEXT:    callq *(%rbx)
12034; DARWIN-64-PIC-NEXT:    callq *(%rbx)
12035; DARWIN-64-PIC-NEXT:    popq %rbx
12036; DARWIN-64-PIC-NEXT:    retq
12037
12038entry:
12039	%0 = load void ()*, void ()** @ifunc, align 8
12040	call void %0() nounwind
12041	%1 = load void ()*, void ()** @ifunc, align 8
12042	call void %1() nounwind
12043	ret void
12044}
12045
12046define void @ditailcaller() nounwind {
12047; LINUX-64-STATIC-LABEL: ditailcaller:
12048; LINUX-64-STATIC:       # %bb.0: # %entry
12049; LINUX-64-STATIC-NEXT:    pushq %rax
12050; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
12051; LINUX-64-STATIC-NEXT:    popq %rax
12052; LINUX-64-STATIC-NEXT:    retq
12053;
12054; LINUX-32-STATIC-LABEL: ditailcaller:
12055; LINUX-32-STATIC:       # %bb.0: # %entry
12056; LINUX-32-STATIC-NEXT:    subl $12, %esp
12057; LINUX-32-STATIC-NEXT:    calll *difunc
12058; LINUX-32-STATIC-NEXT:    addl $12, %esp
12059; LINUX-32-STATIC-NEXT:    retl
12060;
12061; LINUX-32-PIC-LABEL: ditailcaller:
12062; LINUX-32-PIC:       # %bb.0: # %entry
12063; LINUX-32-PIC-NEXT:    pushl %ebx
12064; LINUX-32-PIC-NEXT:    subl $8, %esp
12065; LINUX-32-PIC-NEXT:    calll .L146$pb
12066; LINUX-32-PIC-NEXT:  .L146$pb:
12067; LINUX-32-PIC-NEXT:    popl %ebx
12068; LINUX-32-PIC-NEXT:  .Ltmp146:
12069; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp146-.L146$pb), %ebx
12070; LINUX-32-PIC-NEXT:    movl difunc@GOT(%ebx), %eax
12071; LINUX-32-PIC-NEXT:    calll *(%eax)
12072; LINUX-32-PIC-NEXT:    addl $8, %esp
12073; LINUX-32-PIC-NEXT:    popl %ebx
12074; LINUX-32-PIC-NEXT:    retl
12075;
12076; LINUX-64-PIC-LABEL: ditailcaller:
12077; LINUX-64-PIC:       # %bb.0: # %entry
12078; LINUX-64-PIC-NEXT:    pushq %rax
12079; LINUX-64-PIC-NEXT:    movq difunc@GOTPCREL(%rip), %rax
12080; LINUX-64-PIC-NEXT:    callq *(%rax)
12081; LINUX-64-PIC-NEXT:    popq %rax
12082; LINUX-64-PIC-NEXT:    retq
12083;
12084; DARWIN-32-STATIC-LABEL: ditailcaller:
12085; DARWIN-32-STATIC:       ## %bb.0: ## %entry
12086; DARWIN-32-STATIC-NEXT:    subl $12, %esp
12087; DARWIN-32-STATIC-NEXT:    calll *_difunc
12088; DARWIN-32-STATIC-NEXT:    addl $12, %esp
12089; DARWIN-32-STATIC-NEXT:    retl
12090;
12091; DARWIN-32-DYNAMIC-LABEL: ditailcaller:
12092; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
12093; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
12094; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
12095; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
12096; DARWIN-32-DYNAMIC-NEXT:    retl
12097;
12098; DARWIN-32-PIC-LABEL: ditailcaller:
12099; DARWIN-32-PIC:       ## %bb.0: ## %entry
12100; DARWIN-32-PIC-NEXT:    subl $12, %esp
12101; DARWIN-32-PIC-NEXT:    calll L146$pb
12102; DARWIN-32-PIC-NEXT:  L146$pb:
12103; DARWIN-32-PIC-NEXT:    popl %eax
12104; DARWIN-32-PIC-NEXT:    calll *_difunc-L146$pb(%eax)
12105; DARWIN-32-PIC-NEXT:    addl $12, %esp
12106; DARWIN-32-PIC-NEXT:    retl
12107;
12108; DARWIN-64-STATIC-LABEL: ditailcaller:
12109; DARWIN-64-STATIC:       ## %bb.0: ## %entry
12110; DARWIN-64-STATIC-NEXT:    pushq %rax
12111; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
12112; DARWIN-64-STATIC-NEXT:    popq %rax
12113; DARWIN-64-STATIC-NEXT:    retq
12114;
12115; DARWIN-64-DYNAMIC-LABEL: ditailcaller:
12116; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
12117; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
12118; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
12119; DARWIN-64-DYNAMIC-NEXT:    popq %rax
12120; DARWIN-64-DYNAMIC-NEXT:    retq
12121;
12122; DARWIN-64-PIC-LABEL: ditailcaller:
12123; DARWIN-64-PIC:       ## %bb.0: ## %entry
12124; DARWIN-64-PIC-NEXT:    pushq %rax
12125; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
12126; DARWIN-64-PIC-NEXT:    popq %rax
12127; DARWIN-64-PIC-NEXT:    retq
12128
12129entry:
12130	%0 = load void ()*, void ()** @difunc, align 8
12131	call void %0() nounwind
12132	ret void
12133}
12134
12135define void @litailcaller() nounwind {
12136; LINUX-64-STATIC-LABEL: litailcaller:
12137; LINUX-64-STATIC:       # %bb.0: # %entry
12138; LINUX-64-STATIC-NEXT:    pushq %rax
12139; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
12140; LINUX-64-STATIC-NEXT:    popq %rax
12141; LINUX-64-STATIC-NEXT:    retq
12142;
12143; LINUX-32-STATIC-LABEL: litailcaller:
12144; LINUX-32-STATIC:       # %bb.0: # %entry
12145; LINUX-32-STATIC-NEXT:    subl $12, %esp
12146; LINUX-32-STATIC-NEXT:    calll *lifunc
12147; LINUX-32-STATIC-NEXT:    addl $12, %esp
12148; LINUX-32-STATIC-NEXT:    retl
12149;
12150; LINUX-32-PIC-LABEL: litailcaller:
12151; LINUX-32-PIC:       # %bb.0: # %entry
12152; LINUX-32-PIC-NEXT:    pushl %ebx
12153; LINUX-32-PIC-NEXT:    subl $8, %esp
12154; LINUX-32-PIC-NEXT:    calll .L147$pb
12155; LINUX-32-PIC-NEXT:  .L147$pb:
12156; LINUX-32-PIC-NEXT:    popl %ebx
12157; LINUX-32-PIC-NEXT:  .Ltmp147:
12158; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp147-.L147$pb), %ebx
12159; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
12160; LINUX-32-PIC-NEXT:    addl $8, %esp
12161; LINUX-32-PIC-NEXT:    popl %ebx
12162; LINUX-32-PIC-NEXT:    retl
12163;
12164; LINUX-64-PIC-LABEL: litailcaller:
12165; LINUX-64-PIC:       # %bb.0: # %entry
12166; LINUX-64-PIC-NEXT:    pushq %rax
12167; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
12168; LINUX-64-PIC-NEXT:    popq %rax
12169; LINUX-64-PIC-NEXT:    retq
12170;
12171; DARWIN-32-STATIC-LABEL: litailcaller:
12172; DARWIN-32-STATIC:       ## %bb.0: ## %entry
12173; DARWIN-32-STATIC-NEXT:    subl $12, %esp
12174; DARWIN-32-STATIC-NEXT:    calll *_lifunc
12175; DARWIN-32-STATIC-NEXT:    addl $12, %esp
12176; DARWIN-32-STATIC-NEXT:    retl
12177;
12178; DARWIN-32-DYNAMIC-LABEL: litailcaller:
12179; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
12180; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
12181; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
12182; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
12183; DARWIN-32-DYNAMIC-NEXT:    retl
12184;
12185; DARWIN-32-PIC-LABEL: litailcaller:
12186; DARWIN-32-PIC:       ## %bb.0: ## %entry
12187; DARWIN-32-PIC-NEXT:    subl $12, %esp
12188; DARWIN-32-PIC-NEXT:    calll L147$pb
12189; DARWIN-32-PIC-NEXT:  L147$pb:
12190; DARWIN-32-PIC-NEXT:    popl %eax
12191; DARWIN-32-PIC-NEXT:    calll *_lifunc-L147$pb(%eax)
12192; DARWIN-32-PIC-NEXT:    addl $12, %esp
12193; DARWIN-32-PIC-NEXT:    retl
12194;
12195; DARWIN-64-STATIC-LABEL: litailcaller:
12196; DARWIN-64-STATIC:       ## %bb.0: ## %entry
12197; DARWIN-64-STATIC-NEXT:    pushq %rax
12198; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
12199; DARWIN-64-STATIC-NEXT:    popq %rax
12200; DARWIN-64-STATIC-NEXT:    retq
12201;
12202; DARWIN-64-DYNAMIC-LABEL: litailcaller:
12203; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
12204; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
12205; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
12206; DARWIN-64-DYNAMIC-NEXT:    popq %rax
12207; DARWIN-64-DYNAMIC-NEXT:    retq
12208;
12209; DARWIN-64-PIC-LABEL: litailcaller:
12210; DARWIN-64-PIC:       ## %bb.0: ## %entry
12211; DARWIN-64-PIC-NEXT:    pushq %rax
12212; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
12213; DARWIN-64-PIC-NEXT:    popq %rax
12214; DARWIN-64-PIC-NEXT:    retq
12215
12216entry:
12217	%0 = load void ()*, void ()** @lifunc, align 8
12218	call void %0() nounwind
12219	ret void
12220}
12221