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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 = dso_local global [131072 x i32] zeroinitializer, align 32
23@ddst = dso_local global [131072 x i32] zeroinitializer, align 32
24@dptr = dso_local 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 = dso_local 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 = dso_local global [32 x i32] zeroinitializer, align 32
34@dxdst = dso_local global [32 x i32] zeroinitializer, align 32
35
36define dso_local void @foo00() nounwind {
37; LINUX-64-STATIC-LABEL: foo00:
38; LINUX-64-STATIC:       # %bb.0: # %entry
39; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
40; LINUX-64-STATIC-NEXT:    movl (%rax), %eax
41; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
42; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
43; LINUX-64-STATIC-NEXT:    retq
44;
45; LINUX-32-STATIC-LABEL: foo00:
46; LINUX-32-STATIC:       # %bb.0: # %entry
47; LINUX-32-STATIC-NEXT:    movl src, %eax
48; LINUX-32-STATIC-NEXT:    movl %eax, dst
49; LINUX-32-STATIC-NEXT:    retl
50;
51; LINUX-32-PIC-LABEL: foo00:
52; LINUX-32-PIC:       # %bb.0: # %entry
53; LINUX-32-PIC-NEXT:    calll .L0$pb
54; LINUX-32-PIC-NEXT:  .L0$pb:
55; LINUX-32-PIC-NEXT:    popl %eax
56; LINUX-32-PIC-NEXT:  .Ltmp0:
57; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp0-.L0$pb), %eax
58; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
59; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
60; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
61; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
62; LINUX-32-PIC-NEXT:    retl
63;
64; LINUX-64-PIC-LABEL: foo00:
65; LINUX-64-PIC:       # %bb.0: # %entry
66; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
67; LINUX-64-PIC-NEXT:    movl (%rax), %eax
68; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
69; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
70; LINUX-64-PIC-NEXT:    retq
71;
72; DARWIN-32-STATIC-LABEL: foo00:
73; DARWIN-32-STATIC:       ## %bb.0: ## %entry
74; DARWIN-32-STATIC-NEXT:    movl _src, %eax
75; DARWIN-32-STATIC-NEXT:    movl %eax, _dst
76; DARWIN-32-STATIC-NEXT:    retl
77;
78; DARWIN-32-DYNAMIC-LABEL: foo00:
79; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
80; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
81; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
82; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
83; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
84; DARWIN-32-DYNAMIC-NEXT:    retl
85;
86; DARWIN-32-PIC-LABEL: foo00:
87; DARWIN-32-PIC:       ## %bb.0: ## %entry
88; DARWIN-32-PIC-NEXT:    calll L0$pb
89; DARWIN-32-PIC-NEXT:  L0$pb:
90; DARWIN-32-PIC-NEXT:    popl %eax
91; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L0$pb(%eax), %ecx
92; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
93; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L0$pb(%eax), %eax
94; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
95; DARWIN-32-PIC-NEXT:    retl
96;
97; DARWIN-64-STATIC-LABEL: foo00:
98; DARWIN-64-STATIC:       ## %bb.0: ## %entry
99; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
100; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
101; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
102; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
103; DARWIN-64-STATIC-NEXT:    retq
104;
105; DARWIN-64-DYNAMIC-LABEL: foo00:
106; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
107; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
108; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
109; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
110; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
111; DARWIN-64-DYNAMIC-NEXT:    retq
112;
113; DARWIN-64-PIC-LABEL: foo00:
114; DARWIN-64-PIC:       ## %bb.0: ## %entry
115; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
116; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
117; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
118; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
119; DARWIN-64-PIC-NEXT:    retq
120
121entry:
122	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
123	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 0), align 4
124	ret void
125
126}
127
128define dso_local void @fxo00() nounwind {
129; LINUX-64-STATIC-LABEL: fxo00:
130; LINUX-64-STATIC:       # %bb.0: # %entry
131; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
132; LINUX-64-STATIC-NEXT:    movl (%rax), %eax
133; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
134; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
135; LINUX-64-STATIC-NEXT:    retq
136;
137; LINUX-32-STATIC-LABEL: fxo00:
138; LINUX-32-STATIC:       # %bb.0: # %entry
139; LINUX-32-STATIC-NEXT:    movl xsrc, %eax
140; LINUX-32-STATIC-NEXT:    movl %eax, xdst
141; LINUX-32-STATIC-NEXT:    retl
142;
143; LINUX-32-PIC-LABEL: fxo00:
144; LINUX-32-PIC:       # %bb.0: # %entry
145; LINUX-32-PIC-NEXT:    calll .L1$pb
146; LINUX-32-PIC-NEXT:  .L1$pb:
147; LINUX-32-PIC-NEXT:    popl %eax
148; LINUX-32-PIC-NEXT:  .Ltmp1:
149; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp1-.L1$pb), %eax
150; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
151; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
152; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
153; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
154; LINUX-32-PIC-NEXT:    retl
155;
156; LINUX-64-PIC-LABEL: fxo00:
157; LINUX-64-PIC:       # %bb.0: # %entry
158; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
159; LINUX-64-PIC-NEXT:    movl (%rax), %eax
160; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
161; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
162; LINUX-64-PIC-NEXT:    retq
163;
164; DARWIN-32-STATIC-LABEL: fxo00:
165; DARWIN-32-STATIC:       ## %bb.0: ## %entry
166; DARWIN-32-STATIC-NEXT:    movl _xsrc, %eax
167; DARWIN-32-STATIC-NEXT:    movl %eax, _xdst
168; DARWIN-32-STATIC-NEXT:    retl
169;
170; DARWIN-32-DYNAMIC-LABEL: fxo00:
171; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
172; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
173; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
174; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
175; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
176; DARWIN-32-DYNAMIC-NEXT:    retl
177;
178; DARWIN-32-PIC-LABEL: fxo00:
179; DARWIN-32-PIC:       ## %bb.0: ## %entry
180; DARWIN-32-PIC-NEXT:    calll L1$pb
181; DARWIN-32-PIC-NEXT:  L1$pb:
182; DARWIN-32-PIC-NEXT:    popl %eax
183; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L1$pb(%eax), %ecx
184; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
185; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L1$pb(%eax), %eax
186; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
187; DARWIN-32-PIC-NEXT:    retl
188;
189; DARWIN-64-STATIC-LABEL: fxo00:
190; DARWIN-64-STATIC:       ## %bb.0: ## %entry
191; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
192; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
193; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
194; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
195; DARWIN-64-STATIC-NEXT:    retq
196;
197; DARWIN-64-DYNAMIC-LABEL: fxo00:
198; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
199; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
200; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
201; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
202; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
203; DARWIN-64-DYNAMIC-NEXT:    retq
204;
205; DARWIN-64-PIC-LABEL: fxo00:
206; DARWIN-64-PIC:       ## %bb.0: ## %entry
207; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
208; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
209; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
210; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
211; DARWIN-64-PIC-NEXT:    retq
212
213entry:
214	%0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
215	store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 0), align 4
216	ret void
217
218}
219
220define dso_local void @foo01() nounwind {
221; LINUX-64-STATIC-LABEL: foo01:
222; LINUX-64-STATIC:       # %bb.0: # %entry
223; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
224; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
225; LINUX-64-STATIC-NEXT:    movq %rax, (%rcx)
226; LINUX-64-STATIC-NEXT:    retq
227;
228; LINUX-32-STATIC-LABEL: foo01:
229; LINUX-32-STATIC:       # %bb.0: # %entry
230; LINUX-32-STATIC-NEXT:    movl $dst, ptr
231; LINUX-32-STATIC-NEXT:    retl
232;
233; LINUX-32-PIC-LABEL: foo01:
234; LINUX-32-PIC:       # %bb.0: # %entry
235; LINUX-32-PIC-NEXT:    calll .L2$pb
236; LINUX-32-PIC-NEXT:  .L2$pb:
237; LINUX-32-PIC-NEXT:    popl %eax
238; LINUX-32-PIC-NEXT:  .Ltmp2:
239; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp2-.L2$pb), %eax
240; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %ecx
241; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
242; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
243; LINUX-32-PIC-NEXT:    retl
244;
245; LINUX-64-PIC-LABEL: foo01:
246; LINUX-64-PIC:       # %bb.0: # %entry
247; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
248; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
249; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
250; LINUX-64-PIC-NEXT:    retq
251;
252; DARWIN-32-STATIC-LABEL: foo01:
253; DARWIN-32-STATIC:       ## %bb.0: ## %entry
254; DARWIN-32-STATIC-NEXT:    movl $_dst, _ptr
255; DARWIN-32-STATIC-NEXT:    retl
256;
257; DARWIN-32-DYNAMIC-LABEL: foo01:
258; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
259; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
260; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
261; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
262; DARWIN-32-DYNAMIC-NEXT:    retl
263;
264; DARWIN-32-PIC-LABEL: foo01:
265; DARWIN-32-PIC:       ## %bb.0: ## %entry
266; DARWIN-32-PIC-NEXT:    calll L2$pb
267; DARWIN-32-PIC-NEXT:  L2$pb:
268; DARWIN-32-PIC-NEXT:    popl %eax
269; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L2$pb(%eax), %ecx
270; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L2$pb(%eax), %eax
271; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
272; DARWIN-32-PIC-NEXT:    retl
273;
274; DARWIN-64-STATIC-LABEL: foo01:
275; DARWIN-64-STATIC:       ## %bb.0: ## %entry
276; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
277; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
278; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
279; DARWIN-64-STATIC-NEXT:    retq
280;
281; DARWIN-64-DYNAMIC-LABEL: foo01:
282; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
283; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
284; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
285; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
286; DARWIN-64-DYNAMIC-NEXT:    retq
287;
288; DARWIN-64-PIC-LABEL: foo01:
289; DARWIN-64-PIC:       ## %bb.0: ## %entry
290; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
291; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
292; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
293; DARWIN-64-PIC-NEXT:    retq
294
295entry:
296	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
297	ret void
298}
299
300define dso_local void @fxo01() nounwind {
301; LINUX-64-STATIC-LABEL: fxo01:
302; LINUX-64-STATIC:       # %bb.0: # %entry
303; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
304; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
305; LINUX-64-STATIC-NEXT:    movq %rax, (%rcx)
306; LINUX-64-STATIC-NEXT:    retq
307;
308; LINUX-32-STATIC-LABEL: fxo01:
309; LINUX-32-STATIC:       # %bb.0: # %entry
310; LINUX-32-STATIC-NEXT:    movl $xdst, ptr
311; LINUX-32-STATIC-NEXT:    retl
312;
313; LINUX-32-PIC-LABEL: fxo01:
314; LINUX-32-PIC:       # %bb.0: # %entry
315; LINUX-32-PIC-NEXT:    calll .L3$pb
316; LINUX-32-PIC-NEXT:  .L3$pb:
317; LINUX-32-PIC-NEXT:    popl %eax
318; LINUX-32-PIC-NEXT:  .Ltmp3:
319; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp3-.L3$pb), %eax
320; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %ecx
321; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
322; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
323; LINUX-32-PIC-NEXT:    retl
324;
325; LINUX-64-PIC-LABEL: fxo01:
326; LINUX-64-PIC:       # %bb.0: # %entry
327; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
328; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
329; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
330; LINUX-64-PIC-NEXT:    retq
331;
332; DARWIN-32-STATIC-LABEL: fxo01:
333; DARWIN-32-STATIC:       ## %bb.0: ## %entry
334; DARWIN-32-STATIC-NEXT:    movl $_xdst, _ptr
335; DARWIN-32-STATIC-NEXT:    retl
336;
337; DARWIN-32-DYNAMIC-LABEL: fxo01:
338; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
339; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
340; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
341; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
342; DARWIN-32-DYNAMIC-NEXT:    retl
343;
344; DARWIN-32-PIC-LABEL: fxo01:
345; DARWIN-32-PIC:       ## %bb.0: ## %entry
346; DARWIN-32-PIC-NEXT:    calll L3$pb
347; DARWIN-32-PIC-NEXT:  L3$pb:
348; DARWIN-32-PIC-NEXT:    popl %eax
349; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L3$pb(%eax), %ecx
350; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L3$pb(%eax), %eax
351; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
352; DARWIN-32-PIC-NEXT:    retl
353;
354; DARWIN-64-STATIC-LABEL: fxo01:
355; DARWIN-64-STATIC:       ## %bb.0: ## %entry
356; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
357; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
358; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
359; DARWIN-64-STATIC-NEXT:    retq
360;
361; DARWIN-64-DYNAMIC-LABEL: fxo01:
362; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
363; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
364; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
365; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
366; DARWIN-64-DYNAMIC-NEXT:    retq
367;
368; DARWIN-64-PIC-LABEL: fxo01:
369; DARWIN-64-PIC:       ## %bb.0: ## %entry
370; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
371; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
372; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
373; DARWIN-64-PIC-NEXT:    retq
374
375entry:
376	store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
377	ret void
378}
379
380define dso_local void @foo02() nounwind {
381; LINUX-64-STATIC-LABEL: foo02:
382; LINUX-64-STATIC:       # %bb.0: # %entry
383; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
384; LINUX-64-STATIC-NEXT:    movl (%rax), %eax
385; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
386; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
387; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
388; LINUX-64-STATIC-NEXT:    retq
389;
390; LINUX-32-STATIC-LABEL: foo02:
391; LINUX-32-STATIC:       # %bb.0: # %entry
392; LINUX-32-STATIC-NEXT:    movl src, %eax
393; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
394; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
395; LINUX-32-STATIC-NEXT:    retl
396;
397; LINUX-32-PIC-LABEL: foo02:
398; LINUX-32-PIC:       # %bb.0: # %entry
399; LINUX-32-PIC-NEXT:    calll .L4$pb
400; LINUX-32-PIC-NEXT:  .L4$pb:
401; LINUX-32-PIC-NEXT:    popl %eax
402; LINUX-32-PIC-NEXT:  .Ltmp4:
403; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp4-.L4$pb), %eax
404; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
405; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
406; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
407; LINUX-32-PIC-NEXT:    movl (%eax), %eax
408; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
409; LINUX-32-PIC-NEXT:    retl
410;
411; LINUX-64-PIC-LABEL: foo02:
412; LINUX-64-PIC:       # %bb.0: # %entry
413; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
414; LINUX-64-PIC-NEXT:    movl (%rax), %eax
415; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
416; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
417; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
418; LINUX-64-PIC-NEXT:    retq
419;
420; DARWIN-32-STATIC-LABEL: foo02:
421; DARWIN-32-STATIC:       ## %bb.0: ## %entry
422; DARWIN-32-STATIC-NEXT:    movl _src, %eax
423; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
424; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
425; DARWIN-32-STATIC-NEXT:    retl
426;
427; DARWIN-32-DYNAMIC-LABEL: foo02:
428; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
429; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
430; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
431; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
432; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
433; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
434; DARWIN-32-DYNAMIC-NEXT:    retl
435;
436; DARWIN-32-PIC-LABEL: foo02:
437; DARWIN-32-PIC:       ## %bb.0: ## %entry
438; DARWIN-32-PIC-NEXT:    calll L4$pb
439; DARWIN-32-PIC-NEXT:  L4$pb:
440; DARWIN-32-PIC-NEXT:    popl %eax
441; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L4$pb(%eax), %ecx
442; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
443; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L4$pb(%eax), %eax
444; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
445; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
446; DARWIN-32-PIC-NEXT:    retl
447;
448; DARWIN-64-STATIC-LABEL: foo02:
449; DARWIN-64-STATIC:       ## %bb.0: ## %entry
450; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
451; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
452; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
453; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
454; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
455; DARWIN-64-STATIC-NEXT:    retq
456;
457; DARWIN-64-DYNAMIC-LABEL: foo02:
458; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
459; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
460; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
461; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
462; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
463; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
464; DARWIN-64-DYNAMIC-NEXT:    retq
465;
466; DARWIN-64-PIC-LABEL: foo02:
467; DARWIN-64-PIC:       ## %bb.0: ## %entry
468; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
469; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
470; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
471; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
472; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
473; DARWIN-64-PIC-NEXT:    retq
474
475entry:
476	%0 = load i32*, i32** @ptr, align 8
477	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
478	store i32 %1, i32* %0, align 4
479	ret void
480}
481
482define dso_local void @fxo02() nounwind {
483; LINUX-64-STATIC-LABEL: fxo02:
484; LINUX-64-STATIC:       # %bb.0: # %entry
485; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
486; LINUX-64-STATIC-NEXT:    movl (%rax), %eax
487; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
488; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
489; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
490; LINUX-64-STATIC-NEXT:    retq
491;
492; LINUX-32-STATIC-LABEL: fxo02:
493; LINUX-32-STATIC:       # %bb.0: # %entry
494; LINUX-32-STATIC-NEXT:    movl xsrc, %eax
495; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
496; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
497; LINUX-32-STATIC-NEXT:    retl
498;
499; LINUX-32-PIC-LABEL: fxo02:
500; LINUX-32-PIC:       # %bb.0: # %entry
501; LINUX-32-PIC-NEXT:    calll .L5$pb
502; LINUX-32-PIC-NEXT:  .L5$pb:
503; LINUX-32-PIC-NEXT:    popl %eax
504; LINUX-32-PIC-NEXT:  .Ltmp5:
505; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp5-.L5$pb), %eax
506; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
507; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
508; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
509; LINUX-32-PIC-NEXT:    movl (%eax), %eax
510; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
511; LINUX-32-PIC-NEXT:    retl
512;
513; LINUX-64-PIC-LABEL: fxo02:
514; LINUX-64-PIC:       # %bb.0: # %entry
515; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
516; LINUX-64-PIC-NEXT:    movl (%rax), %eax
517; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
518; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
519; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
520; LINUX-64-PIC-NEXT:    retq
521;
522; DARWIN-32-STATIC-LABEL: fxo02:
523; DARWIN-32-STATIC:       ## %bb.0: ## %entry
524; DARWIN-32-STATIC-NEXT:    movl _xsrc, %eax
525; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
526; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
527; DARWIN-32-STATIC-NEXT:    retl
528;
529; DARWIN-32-DYNAMIC-LABEL: fxo02:
530; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
531; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
532; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
533; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
534; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
535; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
536; DARWIN-32-DYNAMIC-NEXT:    retl
537;
538; DARWIN-32-PIC-LABEL: fxo02:
539; DARWIN-32-PIC:       ## %bb.0: ## %entry
540; DARWIN-32-PIC-NEXT:    calll L5$pb
541; DARWIN-32-PIC-NEXT:  L5$pb:
542; DARWIN-32-PIC-NEXT:    popl %eax
543; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L5$pb(%eax), %ecx
544; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
545; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L5$pb(%eax), %eax
546; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
547; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
548; DARWIN-32-PIC-NEXT:    retl
549;
550; DARWIN-64-STATIC-LABEL: fxo02:
551; DARWIN-64-STATIC:       ## %bb.0: ## %entry
552; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
553; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
554; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
555; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
556; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
557; DARWIN-64-STATIC-NEXT:    retq
558;
559; DARWIN-64-DYNAMIC-LABEL: fxo02:
560; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
561; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
562; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
563; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
564; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
565; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
566; DARWIN-64-DYNAMIC-NEXT:    retq
567;
568; DARWIN-64-PIC-LABEL: fxo02:
569; DARWIN-64-PIC:       ## %bb.0: ## %entry
570; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
571; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
572; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
573; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
574; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
575; DARWIN-64-PIC-NEXT:    retq
576
577entry:
578	%0 = load i32*, i32** @ptr, align 8
579	%1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
580	store i32 %1, i32* %0, align 4
581	ret void
582}
583
584define dso_local void @foo03() nounwind {
585; LINUX-64-STATIC-LABEL: foo03:
586; LINUX-64-STATIC:       # %bb.0: # %entry
587; LINUX-64-STATIC-NEXT:    movl dsrc(%rip), %eax
588; LINUX-64-STATIC-NEXT:    movl %eax, ddst(%rip)
589; LINUX-64-STATIC-NEXT:    retq
590;
591; LINUX-32-STATIC-LABEL: foo03:
592; LINUX-32-STATIC:       # %bb.0: # %entry
593; LINUX-32-STATIC-NEXT:    movl dsrc, %eax
594; LINUX-32-STATIC-NEXT:    movl %eax, ddst
595; LINUX-32-STATIC-NEXT:    retl
596;
597; LINUX-32-PIC-LABEL: foo03:
598; LINUX-32-PIC:       # %bb.0: # %entry
599; LINUX-32-PIC-NEXT:    calll .L6$pb
600; LINUX-32-PIC-NEXT:  .L6$pb:
601; LINUX-32-PIC-NEXT:    popl %eax
602; LINUX-32-PIC-NEXT:  .Ltmp6:
603; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp6-.L6$pb), %eax
604; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF(%eax), %ecx
605; LINUX-32-PIC-NEXT:    movl %ecx, .Lddst$local@GOTOFF(%eax)
606; LINUX-32-PIC-NEXT:    retl
607;
608; LINUX-64-PIC-LABEL: foo03:
609; LINUX-64-PIC:       # %bb.0: # %entry
610; LINUX-64-PIC-NEXT:    movl .Ldsrc$local(%rip), %eax
611; LINUX-64-PIC-NEXT:    movl %eax, .Lddst$local(%rip)
612; LINUX-64-PIC-NEXT:    retq
613;
614; DARWIN-32-STATIC-LABEL: foo03:
615; DARWIN-32-STATIC:       ## %bb.0: ## %entry
616; DARWIN-32-STATIC-NEXT:    movl _dsrc, %eax
617; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst
618; DARWIN-32-STATIC-NEXT:    retl
619;
620; DARWIN-32-DYNAMIC-LABEL: foo03:
621; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
622; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc, %eax
623; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst
624; DARWIN-32-DYNAMIC-NEXT:    retl
625;
626; DARWIN-32-PIC-LABEL: foo03:
627; DARWIN-32-PIC:       ## %bb.0: ## %entry
628; DARWIN-32-PIC-NEXT:    calll L6$pb
629; DARWIN-32-PIC-NEXT:  L6$pb:
630; DARWIN-32-PIC-NEXT:    popl %eax
631; DARWIN-32-PIC-NEXT:    movl _dsrc-L6$pb(%eax), %ecx
632; DARWIN-32-PIC-NEXT:    movl %ecx, _ddst-L6$pb(%eax)
633; DARWIN-32-PIC-NEXT:    retl
634;
635; DARWIN-64-STATIC-LABEL: foo03:
636; DARWIN-64-STATIC:       ## %bb.0: ## %entry
637; DARWIN-64-STATIC-NEXT:    movl _dsrc(%rip), %eax
638; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst(%rip)
639; DARWIN-64-STATIC-NEXT:    retq
640;
641; DARWIN-64-DYNAMIC-LABEL: foo03:
642; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
643; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc(%rip), %eax
644; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst(%rip)
645; DARWIN-64-DYNAMIC-NEXT:    retq
646;
647; DARWIN-64-PIC-LABEL: foo03:
648; DARWIN-64-PIC:       ## %bb.0: ## %entry
649; DARWIN-64-PIC-NEXT:    movl _dsrc(%rip), %eax
650; DARWIN-64-PIC-NEXT:    movl %eax, _ddst(%rip)
651; DARWIN-64-PIC-NEXT:    retq
652
653entry:
654	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
655	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 0), align 32
656	ret void
657}
658
659define dso_local void @foo04() nounwind {
660; LINUX-64-STATIC-LABEL: foo04:
661; LINUX-64-STATIC:       # %bb.0: # %entry
662; LINUX-64-STATIC-NEXT:    movq $ddst, dptr(%rip)
663; LINUX-64-STATIC-NEXT:    retq
664;
665; LINUX-32-STATIC-LABEL: foo04:
666; LINUX-32-STATIC:       # %bb.0: # %entry
667; LINUX-32-STATIC-NEXT:    movl $ddst, dptr
668; LINUX-32-STATIC-NEXT:    retl
669;
670; LINUX-32-PIC-LABEL: foo04:
671; LINUX-32-PIC:       # %bb.0: # %entry
672; LINUX-32-PIC-NEXT:    calll .L7$pb
673; LINUX-32-PIC-NEXT:  .L7$pb:
674; LINUX-32-PIC-NEXT:    popl %eax
675; LINUX-32-PIC-NEXT:  .Ltmp7:
676; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp7-.L7$pb), %eax
677; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF(%eax), %ecx
678; LINUX-32-PIC-NEXT:    movl %ecx, .Ldptr$local@GOTOFF(%eax)
679; LINUX-32-PIC-NEXT:    retl
680;
681; LINUX-64-PIC-LABEL: foo04:
682; LINUX-64-PIC:       # %bb.0: # %entry
683; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
684; LINUX-64-PIC-NEXT:    movq %rax, .Ldptr$local(%rip)
685; LINUX-64-PIC-NEXT:    retq
686;
687; DARWIN-32-STATIC-LABEL: foo04:
688; DARWIN-32-STATIC:       ## %bb.0: ## %entry
689; DARWIN-32-STATIC-NEXT:    movl $_ddst, _dptr
690; DARWIN-32-STATIC-NEXT:    retl
691;
692; DARWIN-32-DYNAMIC-LABEL: foo04:
693; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
694; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, _dptr
695; DARWIN-32-DYNAMIC-NEXT:    retl
696;
697; DARWIN-32-PIC-LABEL: foo04:
698; DARWIN-32-PIC:       ## %bb.0: ## %entry
699; DARWIN-32-PIC-NEXT:    calll L7$pb
700; DARWIN-32-PIC-NEXT:  L7$pb:
701; DARWIN-32-PIC-NEXT:    popl %eax
702; DARWIN-32-PIC-NEXT:    leal _ddst-L7$pb(%eax), %ecx
703; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L7$pb(%eax)
704; DARWIN-32-PIC-NEXT:    retl
705;
706; DARWIN-64-STATIC-LABEL: foo04:
707; DARWIN-64-STATIC:       ## %bb.0: ## %entry
708; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
709; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
710; DARWIN-64-STATIC-NEXT:    retq
711;
712; DARWIN-64-DYNAMIC-LABEL: foo04:
713; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
714; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
715; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
716; DARWIN-64-DYNAMIC-NEXT:    retq
717;
718; DARWIN-64-PIC-LABEL: foo04:
719; DARWIN-64-PIC:       ## %bb.0: ## %entry
720; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
721; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
722; DARWIN-64-PIC-NEXT:    retq
723
724entry:
725	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
726	ret void
727}
728
729define dso_local void @foo05() nounwind {
730; LINUX-64-STATIC-LABEL: foo05:
731; LINUX-64-STATIC:       # %bb.0: # %entry
732; LINUX-64-STATIC-NEXT:    movl dsrc(%rip), %eax
733; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
734; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
735; LINUX-64-STATIC-NEXT:    retq
736;
737; LINUX-32-STATIC-LABEL: foo05:
738; LINUX-32-STATIC:       # %bb.0: # %entry
739; LINUX-32-STATIC-NEXT:    movl dsrc, %eax
740; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
741; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
742; LINUX-32-STATIC-NEXT:    retl
743;
744; LINUX-32-PIC-LABEL: foo05:
745; LINUX-32-PIC:       # %bb.0: # %entry
746; LINUX-32-PIC-NEXT:    calll .L8$pb
747; LINUX-32-PIC-NEXT:  .L8$pb:
748; LINUX-32-PIC-NEXT:    popl %eax
749; LINUX-32-PIC-NEXT:  .Ltmp8:
750; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp8-.L8$pb), %eax
751; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF(%eax), %ecx
752; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
753; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
754; LINUX-32-PIC-NEXT:    retl
755;
756; LINUX-64-PIC-LABEL: foo05:
757; LINUX-64-PIC:       # %bb.0: # %entry
758; LINUX-64-PIC-NEXT:    movl .Ldsrc$local(%rip), %eax
759; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rcx
760; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
761; LINUX-64-PIC-NEXT:    retq
762;
763; DARWIN-32-STATIC-LABEL: foo05:
764; DARWIN-32-STATIC:       ## %bb.0: ## %entry
765; DARWIN-32-STATIC-NEXT:    movl _dsrc, %eax
766; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
767; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
768; DARWIN-32-STATIC-NEXT:    retl
769;
770; DARWIN-32-DYNAMIC-LABEL: foo05:
771; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
772; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc, %eax
773; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
774; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
775; DARWIN-32-DYNAMIC-NEXT:    retl
776;
777; DARWIN-32-PIC-LABEL: foo05:
778; DARWIN-32-PIC:       ## %bb.0: ## %entry
779; DARWIN-32-PIC-NEXT:    calll L8$pb
780; DARWIN-32-PIC-NEXT:  L8$pb:
781; DARWIN-32-PIC-NEXT:    popl %eax
782; DARWIN-32-PIC-NEXT:    movl _dsrc-L8$pb(%eax), %ecx
783; DARWIN-32-PIC-NEXT:    movl _dptr-L8$pb(%eax), %eax
784; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
785; DARWIN-32-PIC-NEXT:    retl
786;
787; DARWIN-64-STATIC-LABEL: foo05:
788; DARWIN-64-STATIC:       ## %bb.0: ## %entry
789; DARWIN-64-STATIC-NEXT:    movl _dsrc(%rip), %eax
790; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
791; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
792; DARWIN-64-STATIC-NEXT:    retq
793;
794; DARWIN-64-DYNAMIC-LABEL: foo05:
795; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
796; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc(%rip), %eax
797; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
798; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
799; DARWIN-64-DYNAMIC-NEXT:    retq
800;
801; DARWIN-64-PIC-LABEL: foo05:
802; DARWIN-64-PIC:       ## %bb.0: ## %entry
803; DARWIN-64-PIC-NEXT:    movl _dsrc(%rip), %eax
804; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
805; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
806; DARWIN-64-PIC-NEXT:    retq
807
808entry:
809	%0 = load i32*, i32** @dptr, align 8
810	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
811	store i32 %1, i32* %0, align 4
812	ret void
813}
814
815define dso_local void @foo06() nounwind {
816; LINUX-64-STATIC-LABEL: foo06:
817; LINUX-64-STATIC:       # %bb.0: # %entry
818; LINUX-64-STATIC-NEXT:    movl lsrc(%rip), %eax
819; LINUX-64-STATIC-NEXT:    movl %eax, ldst(%rip)
820; LINUX-64-STATIC-NEXT:    retq
821;
822; LINUX-32-STATIC-LABEL: foo06:
823; LINUX-32-STATIC:       # %bb.0: # %entry
824; LINUX-32-STATIC-NEXT:    movl lsrc, %eax
825; LINUX-32-STATIC-NEXT:    movl %eax, ldst
826; LINUX-32-STATIC-NEXT:    retl
827;
828; LINUX-32-PIC-LABEL: foo06:
829; LINUX-32-PIC:       # %bb.0: # %entry
830; LINUX-32-PIC-NEXT:    calll .L9$pb
831; LINUX-32-PIC-NEXT:  .L9$pb:
832; LINUX-32-PIC-NEXT:    popl %eax
833; LINUX-32-PIC-NEXT:  .Ltmp9:
834; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp9-.L9$pb), %eax
835; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax), %ecx
836; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF(%eax)
837; LINUX-32-PIC-NEXT:    retl
838;
839; LINUX-64-PIC-LABEL: foo06:
840; LINUX-64-PIC:       # %bb.0: # %entry
841; LINUX-64-PIC-NEXT:    movl lsrc(%rip), %eax
842; LINUX-64-PIC-NEXT:    movl %eax, ldst(%rip)
843; LINUX-64-PIC-NEXT:    retq
844;
845; DARWIN-32-STATIC-LABEL: foo06:
846; DARWIN-32-STATIC:       ## %bb.0: ## %entry
847; DARWIN-32-STATIC-NEXT:    movl _lsrc, %eax
848; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst
849; DARWIN-32-STATIC-NEXT:    retl
850;
851; DARWIN-32-DYNAMIC-LABEL: foo06:
852; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
853; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc, %eax
854; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst
855; DARWIN-32-DYNAMIC-NEXT:    retl
856;
857; DARWIN-32-PIC-LABEL: foo06:
858; DARWIN-32-PIC:       ## %bb.0: ## %entry
859; DARWIN-32-PIC-NEXT:    calll L9$pb
860; DARWIN-32-PIC-NEXT:  L9$pb:
861; DARWIN-32-PIC-NEXT:    popl %eax
862; DARWIN-32-PIC-NEXT:    movl _lsrc-L9$pb(%eax), %ecx
863; DARWIN-32-PIC-NEXT:    movl %ecx, _ldst-L9$pb(%eax)
864; DARWIN-32-PIC-NEXT:    retl
865;
866; DARWIN-64-STATIC-LABEL: foo06:
867; DARWIN-64-STATIC:       ## %bb.0: ## %entry
868; DARWIN-64-STATIC-NEXT:    movl _lsrc(%rip), %eax
869; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst(%rip)
870; DARWIN-64-STATIC-NEXT:    retq
871;
872; DARWIN-64-DYNAMIC-LABEL: foo06:
873; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
874; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc(%rip), %eax
875; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst(%rip)
876; DARWIN-64-DYNAMIC-NEXT:    retq
877;
878; DARWIN-64-PIC-LABEL: foo06:
879; DARWIN-64-PIC:       ## %bb.0: ## %entry
880; DARWIN-64-PIC-NEXT:    movl _lsrc(%rip), %eax
881; DARWIN-64-PIC-NEXT:    movl %eax, _ldst(%rip)
882; DARWIN-64-PIC-NEXT:    retq
883
884entry:
885	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
886	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 0), align 4
887	ret void
888}
889
890define dso_local void @foo07() nounwind {
891; LINUX-64-STATIC-LABEL: foo07:
892; LINUX-64-STATIC:       # %bb.0: # %entry
893; LINUX-64-STATIC-NEXT:    movq $ldst, lptr(%rip)
894; LINUX-64-STATIC-NEXT:    retq
895;
896; LINUX-32-STATIC-LABEL: foo07:
897; LINUX-32-STATIC:       # %bb.0: # %entry
898; LINUX-32-STATIC-NEXT:    movl $ldst, lptr
899; LINUX-32-STATIC-NEXT:    retl
900;
901; LINUX-32-PIC-LABEL: foo07:
902; LINUX-32-PIC:       # %bb.0: # %entry
903; LINUX-32-PIC-NEXT:    calll .L10$pb
904; LINUX-32-PIC-NEXT:  .L10$pb:
905; LINUX-32-PIC-NEXT:    popl %eax
906; LINUX-32-PIC-NEXT:  .Ltmp10:
907; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp10-.L10$pb), %eax
908; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %ecx
909; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
910; LINUX-32-PIC-NEXT:    retl
911;
912; LINUX-64-PIC-LABEL: foo07:
913; LINUX-64-PIC:       # %bb.0: # %entry
914; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
915; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
916; LINUX-64-PIC-NEXT:    retq
917;
918; DARWIN-32-STATIC-LABEL: foo07:
919; DARWIN-32-STATIC:       ## %bb.0: ## %entry
920; DARWIN-32-STATIC-NEXT:    movl $_ldst, _lptr
921; DARWIN-32-STATIC-NEXT:    retl
922;
923; DARWIN-32-DYNAMIC-LABEL: foo07:
924; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
925; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, _lptr
926; DARWIN-32-DYNAMIC-NEXT:    retl
927;
928; DARWIN-32-PIC-LABEL: foo07:
929; DARWIN-32-PIC:       ## %bb.0: ## %entry
930; DARWIN-32-PIC-NEXT:    calll L10$pb
931; DARWIN-32-PIC-NEXT:  L10$pb:
932; DARWIN-32-PIC-NEXT:    popl %eax
933; DARWIN-32-PIC-NEXT:    leal _ldst-L10$pb(%eax), %ecx
934; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L10$pb(%eax)
935; DARWIN-32-PIC-NEXT:    retl
936;
937; DARWIN-64-STATIC-LABEL: foo07:
938; DARWIN-64-STATIC:       ## %bb.0: ## %entry
939; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
940; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
941; DARWIN-64-STATIC-NEXT:    retq
942;
943; DARWIN-64-DYNAMIC-LABEL: foo07:
944; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
945; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
946; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
947; DARWIN-64-DYNAMIC-NEXT:    retq
948;
949; DARWIN-64-PIC-LABEL: foo07:
950; DARWIN-64-PIC:       ## %bb.0: ## %entry
951; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
952; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
953; DARWIN-64-PIC-NEXT:    retq
954
955entry:
956	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
957	ret void
958}
959
960define dso_local void @foo08() nounwind {
961; LINUX-64-STATIC-LABEL: foo08:
962; LINUX-64-STATIC:       # %bb.0: # %entry
963; LINUX-64-STATIC-NEXT:    movl lsrc(%rip), %eax
964; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
965; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
966; LINUX-64-STATIC-NEXT:    retq
967;
968; LINUX-32-STATIC-LABEL: foo08:
969; LINUX-32-STATIC:       # %bb.0: # %entry
970; LINUX-32-STATIC-NEXT:    movl lsrc, %eax
971; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
972; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
973; LINUX-32-STATIC-NEXT:    retl
974;
975; LINUX-32-PIC-LABEL: foo08:
976; LINUX-32-PIC:       # %bb.0: # %entry
977; LINUX-32-PIC-NEXT:    calll .L11$pb
978; LINUX-32-PIC-NEXT:  .L11$pb:
979; LINUX-32-PIC-NEXT:    popl %eax
980; LINUX-32-PIC-NEXT:  .Ltmp11:
981; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp11-.L11$pb), %eax
982; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax), %ecx
983; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
984; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
985; LINUX-32-PIC-NEXT:    retl
986;
987; LINUX-64-PIC-LABEL: foo08:
988; LINUX-64-PIC:       # %bb.0: # %entry
989; LINUX-64-PIC-NEXT:    movl lsrc(%rip), %eax
990; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
991; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
992; LINUX-64-PIC-NEXT:    retq
993;
994; DARWIN-32-STATIC-LABEL: foo08:
995; DARWIN-32-STATIC:       ## %bb.0: ## %entry
996; DARWIN-32-STATIC-NEXT:    movl _lsrc, %eax
997; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
998; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
999; DARWIN-32-STATIC-NEXT:    retl
1000;
1001; DARWIN-32-DYNAMIC-LABEL: foo08:
1002; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1003; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc, %eax
1004; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
1005; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
1006; DARWIN-32-DYNAMIC-NEXT:    retl
1007;
1008; DARWIN-32-PIC-LABEL: foo08:
1009; DARWIN-32-PIC:       ## %bb.0: ## %entry
1010; DARWIN-32-PIC-NEXT:    calll L11$pb
1011; DARWIN-32-PIC-NEXT:  L11$pb:
1012; DARWIN-32-PIC-NEXT:    popl %eax
1013; DARWIN-32-PIC-NEXT:    movl _lsrc-L11$pb(%eax), %ecx
1014; DARWIN-32-PIC-NEXT:    movl _lptr-L11$pb(%eax), %eax
1015; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
1016; DARWIN-32-PIC-NEXT:    retl
1017;
1018; DARWIN-64-STATIC-LABEL: foo08:
1019; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1020; DARWIN-64-STATIC-NEXT:    movl _lsrc(%rip), %eax
1021; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
1022; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
1023; DARWIN-64-STATIC-NEXT:    retq
1024;
1025; DARWIN-64-DYNAMIC-LABEL: foo08:
1026; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1027; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc(%rip), %eax
1028; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
1029; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
1030; DARWIN-64-DYNAMIC-NEXT:    retq
1031;
1032; DARWIN-64-PIC-LABEL: foo08:
1033; DARWIN-64-PIC:       ## %bb.0: ## %entry
1034; DARWIN-64-PIC-NEXT:    movl _lsrc(%rip), %eax
1035; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
1036; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
1037; DARWIN-64-PIC-NEXT:    retq
1038
1039entry:
1040	%0 = load i32*, i32** @lptr, align 8
1041	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
1042	store i32 %1, i32* %0, align 4
1043	ret void
1044}
1045
1046define dso_local void @qux00() nounwind {
1047; LINUX-64-STATIC-LABEL: qux00:
1048; LINUX-64-STATIC:       # %bb.0: # %entry
1049; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
1050; LINUX-64-STATIC-NEXT:    movl 64(%rax), %eax
1051; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
1052; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1053; LINUX-64-STATIC-NEXT:    retq
1054;
1055; LINUX-32-STATIC-LABEL: qux00:
1056; LINUX-32-STATIC:       # %bb.0: # %entry
1057; LINUX-32-STATIC-NEXT:    movl src+64, %eax
1058; LINUX-32-STATIC-NEXT:    movl %eax, dst+64
1059; LINUX-32-STATIC-NEXT:    retl
1060;
1061; LINUX-32-PIC-LABEL: qux00:
1062; LINUX-32-PIC:       # %bb.0: # %entry
1063; LINUX-32-PIC-NEXT:    calll .L12$pb
1064; LINUX-32-PIC-NEXT:  .L12$pb:
1065; LINUX-32-PIC-NEXT:    popl %eax
1066; LINUX-32-PIC-NEXT:  .Ltmp12:
1067; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp12-.L12$pb), %eax
1068; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
1069; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1070; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
1071; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1072; LINUX-32-PIC-NEXT:    retl
1073;
1074; LINUX-64-PIC-LABEL: qux00:
1075; LINUX-64-PIC:       # %bb.0: # %entry
1076; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
1077; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1078; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
1079; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1080; LINUX-64-PIC-NEXT:    retq
1081;
1082; DARWIN-32-STATIC-LABEL: qux00:
1083; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1084; DARWIN-32-STATIC-NEXT:    movl _src+64, %eax
1085; DARWIN-32-STATIC-NEXT:    movl %eax, _dst+64
1086; DARWIN-32-STATIC-NEXT:    retl
1087;
1088; DARWIN-32-DYNAMIC-LABEL: qux00:
1089; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1090; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
1091; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
1092; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
1093; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1094; DARWIN-32-DYNAMIC-NEXT:    retl
1095;
1096; DARWIN-32-PIC-LABEL: qux00:
1097; DARWIN-32-PIC:       ## %bb.0: ## %entry
1098; DARWIN-32-PIC-NEXT:    calll L12$pb
1099; DARWIN-32-PIC-NEXT:  L12$pb:
1100; DARWIN-32-PIC-NEXT:    popl %eax
1101; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L12$pb(%eax), %ecx
1102; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
1103; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L12$pb(%eax), %eax
1104; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1105; DARWIN-32-PIC-NEXT:    retl
1106;
1107; DARWIN-64-STATIC-LABEL: qux00:
1108; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1109; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1110; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
1111; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
1112; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1113; DARWIN-64-STATIC-NEXT:    retq
1114;
1115; DARWIN-64-DYNAMIC-LABEL: qux00:
1116; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1117; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1118; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
1119; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
1120; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1121; DARWIN-64-DYNAMIC-NEXT:    retq
1122;
1123; DARWIN-64-PIC-LABEL: qux00:
1124; DARWIN-64-PIC:       ## %bb.0: ## %entry
1125; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1126; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
1127; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
1128; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1129; DARWIN-64-PIC-NEXT:    retq
1130
1131entry:
1132	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
1133	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), align 4
1134	ret void
1135}
1136
1137define dso_local void @qxx00() nounwind {
1138; LINUX-64-STATIC-LABEL: qxx00:
1139; LINUX-64-STATIC:       # %bb.0: # %entry
1140; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
1141; LINUX-64-STATIC-NEXT:    movl 64(%rax), %eax
1142; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
1143; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1144; LINUX-64-STATIC-NEXT:    retq
1145;
1146; LINUX-32-STATIC-LABEL: qxx00:
1147; LINUX-32-STATIC:       # %bb.0: # %entry
1148; LINUX-32-STATIC-NEXT:    movl xsrc+64, %eax
1149; LINUX-32-STATIC-NEXT:    movl %eax, xdst+64
1150; LINUX-32-STATIC-NEXT:    retl
1151;
1152; LINUX-32-PIC-LABEL: qxx00:
1153; LINUX-32-PIC:       # %bb.0: # %entry
1154; LINUX-32-PIC-NEXT:    calll .L13$pb
1155; LINUX-32-PIC-NEXT:  .L13$pb:
1156; LINUX-32-PIC-NEXT:    popl %eax
1157; LINUX-32-PIC-NEXT:  .Ltmp13:
1158; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp13-.L13$pb), %eax
1159; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
1160; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1161; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
1162; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1163; LINUX-32-PIC-NEXT:    retl
1164;
1165; LINUX-64-PIC-LABEL: qxx00:
1166; LINUX-64-PIC:       # %bb.0: # %entry
1167; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
1168; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1169; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
1170; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1171; LINUX-64-PIC-NEXT:    retq
1172;
1173; DARWIN-32-STATIC-LABEL: qxx00:
1174; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1175; DARWIN-32-STATIC-NEXT:    movl _xsrc+64, %eax
1176; DARWIN-32-STATIC-NEXT:    movl %eax, _xdst+64
1177; DARWIN-32-STATIC-NEXT:    retl
1178;
1179; DARWIN-32-DYNAMIC-LABEL: qxx00:
1180; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1181; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
1182; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
1183; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
1184; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1185; DARWIN-32-DYNAMIC-NEXT:    retl
1186;
1187; DARWIN-32-PIC-LABEL: qxx00:
1188; DARWIN-32-PIC:       ## %bb.0: ## %entry
1189; DARWIN-32-PIC-NEXT:    calll L13$pb
1190; DARWIN-32-PIC-NEXT:  L13$pb:
1191; DARWIN-32-PIC-NEXT:    popl %eax
1192; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L13$pb(%eax), %ecx
1193; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
1194; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L13$pb(%eax), %eax
1195; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1196; DARWIN-32-PIC-NEXT:    retl
1197;
1198; DARWIN-64-STATIC-LABEL: qxx00:
1199; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1200; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1201; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
1202; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
1203; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1204; DARWIN-64-STATIC-NEXT:    retq
1205;
1206; DARWIN-64-DYNAMIC-LABEL: qxx00:
1207; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1208; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1209; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
1210; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
1211; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1212; DARWIN-64-DYNAMIC-NEXT:    retq
1213;
1214; DARWIN-64-PIC-LABEL: qxx00:
1215; DARWIN-64-PIC:       ## %bb.0: ## %entry
1216; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1217; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
1218; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
1219; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1220; DARWIN-64-PIC-NEXT:    retq
1221
1222entry:
1223	%0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
1224	store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), align 4
1225	ret void
1226}
1227
1228define dso_local void @qux01() nounwind {
1229; LINUX-64-STATIC-LABEL: qux01:
1230; LINUX-64-STATIC:       # %bb.0: # %entry
1231; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
1232; LINUX-64-STATIC-NEXT:    addq $64, %rax
1233; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1234; LINUX-64-STATIC-NEXT:    movq %rax, (%rcx)
1235; LINUX-64-STATIC-NEXT:    retq
1236;
1237; LINUX-32-STATIC-LABEL: qux01:
1238; LINUX-32-STATIC:       # %bb.0: # %entry
1239; LINUX-32-STATIC-NEXT:    leal dst+64, %eax
1240; LINUX-32-STATIC-NEXT:    movl %eax, ptr
1241; LINUX-32-STATIC-NEXT:    retl
1242;
1243; LINUX-32-PIC-LABEL: qux01:
1244; LINUX-32-PIC:       # %bb.0: # %entry
1245; LINUX-32-PIC-NEXT:    calll .L14$pb
1246; LINUX-32-PIC-NEXT:  .L14$pb:
1247; LINUX-32-PIC-NEXT:    popl %eax
1248; LINUX-32-PIC-NEXT:  .Ltmp14:
1249; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp14-.L14$pb), %eax
1250; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %ecx
1251; LINUX-32-PIC-NEXT:    addl $64, %ecx
1252; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
1253; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
1254; LINUX-32-PIC-NEXT:    retl
1255;
1256; LINUX-64-PIC-LABEL: qux01:
1257; LINUX-64-PIC:       # %bb.0: # %entry
1258; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
1259; LINUX-64-PIC-NEXT:    addq $64, %rax
1260; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1261; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
1262; LINUX-64-PIC-NEXT:    retq
1263;
1264; DARWIN-32-STATIC-LABEL: qux01:
1265; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1266; DARWIN-32-STATIC-NEXT:    movl $_dst+64, _ptr
1267; DARWIN-32-STATIC-NEXT:    retl
1268;
1269; DARWIN-32-DYNAMIC-LABEL: qux01:
1270; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1271; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
1272; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
1273; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
1274; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
1275; DARWIN-32-DYNAMIC-NEXT:    retl
1276;
1277; DARWIN-32-PIC-LABEL: qux01:
1278; DARWIN-32-PIC:       ## %bb.0: ## %entry
1279; DARWIN-32-PIC-NEXT:    calll L14$pb
1280; DARWIN-32-PIC-NEXT:  L14$pb:
1281; DARWIN-32-PIC-NEXT:    popl %eax
1282; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L14$pb(%eax), %ecx
1283; DARWIN-32-PIC-NEXT:    addl $64, %ecx
1284; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L14$pb(%eax), %eax
1285; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
1286; DARWIN-32-PIC-NEXT:    retl
1287;
1288; DARWIN-64-STATIC-LABEL: qux01:
1289; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1290; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
1291; DARWIN-64-STATIC-NEXT:    addq $64, %rax
1292; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1293; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
1294; DARWIN-64-STATIC-NEXT:    retq
1295;
1296; DARWIN-64-DYNAMIC-LABEL: qux01:
1297; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1298; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
1299; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
1300; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1301; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
1302; DARWIN-64-DYNAMIC-NEXT:    retq
1303;
1304; DARWIN-64-PIC-LABEL: qux01:
1305; DARWIN-64-PIC:       ## %bb.0: ## %entry
1306; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
1307; DARWIN-64-PIC-NEXT:    addq $64, %rax
1308; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1309; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
1310; DARWIN-64-PIC-NEXT:    retq
1311
1312entry:
1313	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
1314	ret void
1315}
1316
1317define dso_local void @qxx01() nounwind {
1318; LINUX-64-STATIC-LABEL: qxx01:
1319; LINUX-64-STATIC:       # %bb.0: # %entry
1320; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
1321; LINUX-64-STATIC-NEXT:    addq $64, %rax
1322; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1323; LINUX-64-STATIC-NEXT:    movq %rax, (%rcx)
1324; LINUX-64-STATIC-NEXT:    retq
1325;
1326; LINUX-32-STATIC-LABEL: qxx01:
1327; LINUX-32-STATIC:       # %bb.0: # %entry
1328; LINUX-32-STATIC-NEXT:    leal xdst+64, %eax
1329; LINUX-32-STATIC-NEXT:    movl %eax, ptr
1330; LINUX-32-STATIC-NEXT:    retl
1331;
1332; LINUX-32-PIC-LABEL: qxx01:
1333; LINUX-32-PIC:       # %bb.0: # %entry
1334; LINUX-32-PIC-NEXT:    calll .L15$pb
1335; LINUX-32-PIC-NEXT:  .L15$pb:
1336; LINUX-32-PIC-NEXT:    popl %eax
1337; LINUX-32-PIC-NEXT:  .Ltmp15:
1338; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp15-.L15$pb), %eax
1339; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %ecx
1340; LINUX-32-PIC-NEXT:    addl $64, %ecx
1341; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
1342; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
1343; LINUX-32-PIC-NEXT:    retl
1344;
1345; LINUX-64-PIC-LABEL: qxx01:
1346; LINUX-64-PIC:       # %bb.0: # %entry
1347; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
1348; LINUX-64-PIC-NEXT:    addq $64, %rax
1349; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1350; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
1351; LINUX-64-PIC-NEXT:    retq
1352;
1353; DARWIN-32-STATIC-LABEL: qxx01:
1354; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1355; DARWIN-32-STATIC-NEXT:    movl $_xdst+64, _ptr
1356; DARWIN-32-STATIC-NEXT:    retl
1357;
1358; DARWIN-32-DYNAMIC-LABEL: qxx01:
1359; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1360; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
1361; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
1362; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
1363; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
1364; DARWIN-32-DYNAMIC-NEXT:    retl
1365;
1366; DARWIN-32-PIC-LABEL: qxx01:
1367; DARWIN-32-PIC:       ## %bb.0: ## %entry
1368; DARWIN-32-PIC-NEXT:    calll L15$pb
1369; DARWIN-32-PIC-NEXT:  L15$pb:
1370; DARWIN-32-PIC-NEXT:    popl %eax
1371; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L15$pb(%eax), %ecx
1372; DARWIN-32-PIC-NEXT:    addl $64, %ecx
1373; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L15$pb(%eax), %eax
1374; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
1375; DARWIN-32-PIC-NEXT:    retl
1376;
1377; DARWIN-64-STATIC-LABEL: qxx01:
1378; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1379; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
1380; DARWIN-64-STATIC-NEXT:    addq $64, %rax
1381; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1382; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
1383; DARWIN-64-STATIC-NEXT:    retq
1384;
1385; DARWIN-64-DYNAMIC-LABEL: qxx01:
1386; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1387; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
1388; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
1389; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1390; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
1391; DARWIN-64-DYNAMIC-NEXT:    retq
1392;
1393; DARWIN-64-PIC-LABEL: qxx01:
1394; DARWIN-64-PIC:       ## %bb.0: ## %entry
1395; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
1396; DARWIN-64-PIC-NEXT:    addq $64, %rax
1397; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1398; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
1399; DARWIN-64-PIC-NEXT:    retq
1400
1401entry:
1402	store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1403	ret void
1404}
1405
1406define dso_local void @qux02() nounwind {
1407; LINUX-64-STATIC-LABEL: qux02:
1408; LINUX-64-STATIC:       # %bb.0: # %entry
1409; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
1410; LINUX-64-STATIC-NEXT:    movl 64(%rax), %eax
1411; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1412; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
1413; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1414; LINUX-64-STATIC-NEXT:    retq
1415;
1416; LINUX-32-STATIC-LABEL: qux02:
1417; LINUX-32-STATIC:       # %bb.0: # %entry
1418; LINUX-32-STATIC-NEXT:    movl src+64, %eax
1419; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
1420; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1421; LINUX-32-STATIC-NEXT:    retl
1422;
1423; LINUX-32-PIC-LABEL: qux02:
1424; LINUX-32-PIC:       # %bb.0: # %entry
1425; LINUX-32-PIC-NEXT:    calll .L16$pb
1426; LINUX-32-PIC-NEXT:  .L16$pb:
1427; LINUX-32-PIC-NEXT:    popl %eax
1428; LINUX-32-PIC-NEXT:  .Ltmp16:
1429; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp16-.L16$pb), %eax
1430; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
1431; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1432; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
1433; LINUX-32-PIC-NEXT:    movl (%eax), %eax
1434; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1435; LINUX-32-PIC-NEXT:    retl
1436;
1437; LINUX-64-PIC-LABEL: qux02:
1438; LINUX-64-PIC:       # %bb.0: # %entry
1439; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
1440; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1441; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1442; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
1443; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1444; LINUX-64-PIC-NEXT:    retq
1445;
1446; DARWIN-32-STATIC-LABEL: qux02:
1447; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1448; DARWIN-32-STATIC-NEXT:    movl _src+64, %eax
1449; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
1450; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1451; DARWIN-32-STATIC-NEXT:    retl
1452;
1453; DARWIN-32-DYNAMIC-LABEL: qux02:
1454; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1455; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
1456; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
1457; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
1458; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
1459; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1460; DARWIN-32-DYNAMIC-NEXT:    retl
1461;
1462; DARWIN-32-PIC-LABEL: qux02:
1463; DARWIN-32-PIC:       ## %bb.0: ## %entry
1464; DARWIN-32-PIC-NEXT:    calll L16$pb
1465; DARWIN-32-PIC-NEXT:  L16$pb:
1466; DARWIN-32-PIC-NEXT:    popl %eax
1467; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L16$pb(%eax), %ecx
1468; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
1469; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L16$pb(%eax), %eax
1470; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
1471; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1472; DARWIN-32-PIC-NEXT:    retl
1473;
1474; DARWIN-64-STATIC-LABEL: qux02:
1475; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1476; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1477; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
1478; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1479; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
1480; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1481; DARWIN-64-STATIC-NEXT:    retq
1482;
1483; DARWIN-64-DYNAMIC-LABEL: qux02:
1484; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1485; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1486; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
1487; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1488; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
1489; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1490; DARWIN-64-DYNAMIC-NEXT:    retq
1491;
1492; DARWIN-64-PIC-LABEL: qux02:
1493; DARWIN-64-PIC:       ## %bb.0: ## %entry
1494; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
1495; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
1496; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1497; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
1498; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1499; DARWIN-64-PIC-NEXT:    retq
1500
1501entry:
1502	%0 = load i32*, i32** @ptr, align 8
1503	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
1504	%2 = getelementptr i32, i32* %0, i64 16
1505	store i32 %1, i32* %2, align 4
1506	ret void
1507}
1508
1509define dso_local void @qxx02() nounwind {
1510; LINUX-64-STATIC-LABEL: qxx02:
1511; LINUX-64-STATIC:       # %bb.0: # %entry
1512; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
1513; LINUX-64-STATIC-NEXT:    movl 64(%rax), %eax
1514; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1515; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
1516; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1517; LINUX-64-STATIC-NEXT:    retq
1518;
1519; LINUX-32-STATIC-LABEL: qxx02:
1520; LINUX-32-STATIC:       # %bb.0: # %entry
1521; LINUX-32-STATIC-NEXT:    movl xsrc+64, %eax
1522; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
1523; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1524; LINUX-32-STATIC-NEXT:    retl
1525;
1526; LINUX-32-PIC-LABEL: qxx02:
1527; LINUX-32-PIC:       # %bb.0: # %entry
1528; LINUX-32-PIC-NEXT:    calll .L17$pb
1529; LINUX-32-PIC-NEXT:  .L17$pb:
1530; LINUX-32-PIC-NEXT:    popl %eax
1531; LINUX-32-PIC-NEXT:  .Ltmp17:
1532; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp17-.L17$pb), %eax
1533; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
1534; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
1535; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
1536; LINUX-32-PIC-NEXT:    movl (%eax), %eax
1537; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1538; LINUX-32-PIC-NEXT:    retl
1539;
1540; LINUX-64-PIC-LABEL: qxx02:
1541; LINUX-64-PIC:       # %bb.0: # %entry
1542; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
1543; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
1544; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
1545; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
1546; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1547; LINUX-64-PIC-NEXT:    retq
1548;
1549; DARWIN-32-STATIC-LABEL: qxx02:
1550; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1551; DARWIN-32-STATIC-NEXT:    movl _xsrc+64, %eax
1552; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
1553; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1554; DARWIN-32-STATIC-NEXT:    retl
1555;
1556; DARWIN-32-DYNAMIC-LABEL: qxx02:
1557; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1558; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
1559; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
1560; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
1561; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
1562; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1563; DARWIN-32-DYNAMIC-NEXT:    retl
1564;
1565; DARWIN-32-PIC-LABEL: qxx02:
1566; DARWIN-32-PIC:       ## %bb.0: ## %entry
1567; DARWIN-32-PIC-NEXT:    calll L17$pb
1568; DARWIN-32-PIC-NEXT:  L17$pb:
1569; DARWIN-32-PIC-NEXT:    popl %eax
1570; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L17$pb(%eax), %ecx
1571; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
1572; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L17$pb(%eax), %eax
1573; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
1574; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1575; DARWIN-32-PIC-NEXT:    retl
1576;
1577; DARWIN-64-STATIC-LABEL: qxx02:
1578; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1579; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1580; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
1581; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1582; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
1583; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1584; DARWIN-64-STATIC-NEXT:    retq
1585;
1586; DARWIN-64-DYNAMIC-LABEL: qxx02:
1587; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1588; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1589; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
1590; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1591; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
1592; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1593; DARWIN-64-DYNAMIC-NEXT:    retq
1594;
1595; DARWIN-64-PIC-LABEL: qxx02:
1596; DARWIN-64-PIC:       ## %bb.0: ## %entry
1597; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
1598; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
1599; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
1600; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
1601; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1602; DARWIN-64-PIC-NEXT:    retq
1603
1604entry:
1605	%0 = load i32*, i32** @ptr, align 8
1606	%1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
1607	%2 = getelementptr i32, i32* %0, i64 16
1608	store i32 %1, i32* %2, align 4
1609	ret void
1610}
1611
1612define dso_local void @qux03() nounwind {
1613; LINUX-64-STATIC-LABEL: qux03:
1614; LINUX-64-STATIC:       # %bb.0: # %entry
1615; LINUX-64-STATIC-NEXT:    movl dsrc+64(%rip), %eax
1616; LINUX-64-STATIC-NEXT:    movl %eax, ddst+64(%rip)
1617; LINUX-64-STATIC-NEXT:    retq
1618;
1619; LINUX-32-STATIC-LABEL: qux03:
1620; LINUX-32-STATIC:       # %bb.0: # %entry
1621; LINUX-32-STATIC-NEXT:    movl dsrc+64, %eax
1622; LINUX-32-STATIC-NEXT:    movl %eax, ddst+64
1623; LINUX-32-STATIC-NEXT:    retl
1624;
1625; LINUX-32-PIC-LABEL: qux03:
1626; LINUX-32-PIC:       # %bb.0: # %entry
1627; LINUX-32-PIC-NEXT:    calll .L18$pb
1628; LINUX-32-PIC-NEXT:  .L18$pb:
1629; LINUX-32-PIC-NEXT:    popl %eax
1630; LINUX-32-PIC-NEXT:  .Ltmp18:
1631; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp18-.L18$pb), %eax
1632; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF+64(%eax), %ecx
1633; LINUX-32-PIC-NEXT:    movl %ecx, .Lddst$local@GOTOFF+64(%eax)
1634; LINUX-32-PIC-NEXT:    retl
1635;
1636; LINUX-64-PIC-LABEL: qux03:
1637; LINUX-64-PIC:       # %bb.0: # %entry
1638; LINUX-64-PIC-NEXT:    movl .Ldsrc$local+64(%rip), %eax
1639; LINUX-64-PIC-NEXT:    movl %eax, .Lddst$local+64(%rip)
1640; LINUX-64-PIC-NEXT:    retq
1641;
1642; DARWIN-32-STATIC-LABEL: qux03:
1643; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1644; DARWIN-32-STATIC-NEXT:    movl _dsrc+64, %eax
1645; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst+64
1646; DARWIN-32-STATIC-NEXT:    retl
1647;
1648; DARWIN-32-DYNAMIC-LABEL: qux03:
1649; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1650; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64, %eax
1651; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst+64
1652; DARWIN-32-DYNAMIC-NEXT:    retl
1653;
1654; DARWIN-32-PIC-LABEL: qux03:
1655; DARWIN-32-PIC:       ## %bb.0: ## %entry
1656; DARWIN-32-PIC-NEXT:    calll L18$pb
1657; DARWIN-32-PIC-NEXT:  L18$pb:
1658; DARWIN-32-PIC-NEXT:    popl %eax
1659; DARWIN-32-PIC-NEXT:    movl (_dsrc-L18$pb)+64(%eax), %ecx
1660; DARWIN-32-PIC-NEXT:    movl %ecx, (_ddst-L18$pb)+64(%eax)
1661; DARWIN-32-PIC-NEXT:    retl
1662;
1663; DARWIN-64-STATIC-LABEL: qux03:
1664; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1665; DARWIN-64-STATIC-NEXT:    movl _dsrc+64(%rip), %eax
1666; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst+64(%rip)
1667; DARWIN-64-STATIC-NEXT:    retq
1668;
1669; DARWIN-64-DYNAMIC-LABEL: qux03:
1670; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1671; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+64(%rip), %eax
1672; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst+64(%rip)
1673; DARWIN-64-DYNAMIC-NEXT:    retq
1674;
1675; DARWIN-64-PIC-LABEL: qux03:
1676; DARWIN-64-PIC:       ## %bb.0: ## %entry
1677; DARWIN-64-PIC-NEXT:    movl _dsrc+64(%rip), %eax
1678; DARWIN-64-PIC-NEXT:    movl %eax, _ddst+64(%rip)
1679; DARWIN-64-PIC-NEXT:    retq
1680
1681entry:
1682	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
1683	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), align 32
1684	ret void
1685}
1686
1687define dso_local void @qux04() nounwind {
1688; LINUX-64-STATIC-LABEL: qux04:
1689; LINUX-64-STATIC:       # %bb.0: # %entry
1690; LINUX-64-STATIC-NEXT:    movq $ddst+64, dptr(%rip)
1691; LINUX-64-STATIC-NEXT:    retq
1692;
1693; LINUX-32-STATIC-LABEL: qux04:
1694; LINUX-32-STATIC:       # %bb.0: # %entry
1695; LINUX-32-STATIC-NEXT:    movl $ddst+64, dptr
1696; LINUX-32-STATIC-NEXT:    retl
1697;
1698; LINUX-32-PIC-LABEL: qux04:
1699; LINUX-32-PIC:       # %bb.0: # %entry
1700; LINUX-32-PIC-NEXT:    calll .L19$pb
1701; LINUX-32-PIC-NEXT:  .L19$pb:
1702; LINUX-32-PIC-NEXT:    popl %eax
1703; LINUX-32-PIC-NEXT:  .Ltmp19:
1704; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp19-.L19$pb), %eax
1705; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+64(%eax), %ecx
1706; LINUX-32-PIC-NEXT:    movl %ecx, .Ldptr$local@GOTOFF(%eax)
1707; LINUX-32-PIC-NEXT:    retl
1708;
1709; LINUX-64-PIC-LABEL: qux04:
1710; LINUX-64-PIC:       # %bb.0: # %entry
1711; LINUX-64-PIC-NEXT:    leaq .Lddst$local+64(%rip), %rax
1712; LINUX-64-PIC-NEXT:    movq %rax, .Ldptr$local(%rip)
1713; LINUX-64-PIC-NEXT:    retq
1714;
1715; DARWIN-32-STATIC-LABEL: qux04:
1716; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1717; DARWIN-32-STATIC-NEXT:    movl $_ddst+64, _dptr
1718; DARWIN-32-STATIC-NEXT:    retl
1719;
1720; DARWIN-32-DYNAMIC-LABEL: qux04:
1721; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1722; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+64, _dptr
1723; DARWIN-32-DYNAMIC-NEXT:    retl
1724;
1725; DARWIN-32-PIC-LABEL: qux04:
1726; DARWIN-32-PIC:       ## %bb.0: ## %entry
1727; DARWIN-32-PIC-NEXT:    calll L19$pb
1728; DARWIN-32-PIC-NEXT:  L19$pb:
1729; DARWIN-32-PIC-NEXT:    popl %eax
1730; DARWIN-32-PIC-NEXT:    leal (_ddst-L19$pb)+64(%eax), %ecx
1731; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L19$pb(%eax)
1732; DARWIN-32-PIC-NEXT:    retl
1733;
1734; DARWIN-64-STATIC-LABEL: qux04:
1735; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1736; DARWIN-64-STATIC-NEXT:    leaq _ddst+64(%rip), %rax
1737; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
1738; DARWIN-64-STATIC-NEXT:    retq
1739;
1740; DARWIN-64-DYNAMIC-LABEL: qux04:
1741; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1742; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+64(%rip), %rax
1743; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
1744; DARWIN-64-DYNAMIC-NEXT:    retq
1745;
1746; DARWIN-64-PIC-LABEL: qux04:
1747; DARWIN-64-PIC:       ## %bb.0: ## %entry
1748; DARWIN-64-PIC-NEXT:    leaq _ddst+64(%rip), %rax
1749; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
1750; DARWIN-64-PIC-NEXT:    retq
1751
1752entry:
1753	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1754	ret void
1755}
1756
1757define dso_local void @qux05() nounwind {
1758; LINUX-64-STATIC-LABEL: qux05:
1759; LINUX-64-STATIC:       # %bb.0: # %entry
1760; LINUX-64-STATIC-NEXT:    movl dsrc+64(%rip), %eax
1761; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
1762; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1763; LINUX-64-STATIC-NEXT:    retq
1764;
1765; LINUX-32-STATIC-LABEL: qux05:
1766; LINUX-32-STATIC:       # %bb.0: # %entry
1767; LINUX-32-STATIC-NEXT:    movl dsrc+64, %eax
1768; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
1769; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1770; LINUX-32-STATIC-NEXT:    retl
1771;
1772; LINUX-32-PIC-LABEL: qux05:
1773; LINUX-32-PIC:       # %bb.0: # %entry
1774; LINUX-32-PIC-NEXT:    calll .L20$pb
1775; LINUX-32-PIC-NEXT:  .L20$pb:
1776; LINUX-32-PIC-NEXT:    popl %eax
1777; LINUX-32-PIC-NEXT:  .Ltmp20:
1778; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp20-.L20$pb), %eax
1779; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF+64(%eax), %ecx
1780; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
1781; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
1782; LINUX-32-PIC-NEXT:    retl
1783;
1784; LINUX-64-PIC-LABEL: qux05:
1785; LINUX-64-PIC:       # %bb.0: # %entry
1786; LINUX-64-PIC-NEXT:    movl .Ldsrc$local+64(%rip), %eax
1787; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rcx
1788; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
1789; LINUX-64-PIC-NEXT:    retq
1790;
1791; DARWIN-32-STATIC-LABEL: qux05:
1792; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1793; DARWIN-32-STATIC-NEXT:    movl _dsrc+64, %eax
1794; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
1795; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
1796; DARWIN-32-STATIC-NEXT:    retl
1797;
1798; DARWIN-32-DYNAMIC-LABEL: qux05:
1799; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1800; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64, %eax
1801; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
1802; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
1803; DARWIN-32-DYNAMIC-NEXT:    retl
1804;
1805; DARWIN-32-PIC-LABEL: qux05:
1806; DARWIN-32-PIC:       ## %bb.0: ## %entry
1807; DARWIN-32-PIC-NEXT:    calll L20$pb
1808; DARWIN-32-PIC-NEXT:  L20$pb:
1809; DARWIN-32-PIC-NEXT:    popl %eax
1810; DARWIN-32-PIC-NEXT:    movl (_dsrc-L20$pb)+64(%eax), %ecx
1811; DARWIN-32-PIC-NEXT:    movl _dptr-L20$pb(%eax), %eax
1812; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
1813; DARWIN-32-PIC-NEXT:    retl
1814;
1815; DARWIN-64-STATIC-LABEL: qux05:
1816; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1817; DARWIN-64-STATIC-NEXT:    movl _dsrc+64(%rip), %eax
1818; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
1819; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1820; DARWIN-64-STATIC-NEXT:    retq
1821;
1822; DARWIN-64-DYNAMIC-LABEL: qux05:
1823; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1824; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+64(%rip), %eax
1825; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
1826; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
1827; DARWIN-64-DYNAMIC-NEXT:    retq
1828;
1829; DARWIN-64-PIC-LABEL: qux05:
1830; DARWIN-64-PIC:       ## %bb.0: ## %entry
1831; DARWIN-64-PIC-NEXT:    movl _dsrc+64(%rip), %eax
1832; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
1833; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
1834; DARWIN-64-PIC-NEXT:    retq
1835
1836entry:
1837	%0 = load i32*, i32** @dptr, align 8
1838	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
1839	%2 = getelementptr i32, i32* %0, i64 16
1840	store i32 %1, i32* %2, align 4
1841	ret void
1842}
1843
1844define dso_local void @qux06() nounwind {
1845; LINUX-64-STATIC-LABEL: qux06:
1846; LINUX-64-STATIC:       # %bb.0: # %entry
1847; LINUX-64-STATIC-NEXT:    movl lsrc+64(%rip), %eax
1848; LINUX-64-STATIC-NEXT:    movl %eax, ldst+64(%rip)
1849; LINUX-64-STATIC-NEXT:    retq
1850;
1851; LINUX-32-STATIC-LABEL: qux06:
1852; LINUX-32-STATIC:       # %bb.0: # %entry
1853; LINUX-32-STATIC-NEXT:    movl lsrc+64, %eax
1854; LINUX-32-STATIC-NEXT:    movl %eax, ldst+64
1855; LINUX-32-STATIC-NEXT:    retl
1856;
1857; LINUX-32-PIC-LABEL: qux06:
1858; LINUX-32-PIC:       # %bb.0: # %entry
1859; LINUX-32-PIC-NEXT:    calll .L21$pb
1860; LINUX-32-PIC-NEXT:  .L21$pb:
1861; LINUX-32-PIC-NEXT:    popl %eax
1862; LINUX-32-PIC-NEXT:  .Ltmp21:
1863; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp21-.L21$pb), %eax
1864; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax), %ecx
1865; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF+64(%eax)
1866; LINUX-32-PIC-NEXT:    retl
1867;
1868; LINUX-64-PIC-LABEL: qux06:
1869; LINUX-64-PIC:       # %bb.0: # %entry
1870; LINUX-64-PIC-NEXT:    movl lsrc+64(%rip), %eax
1871; LINUX-64-PIC-NEXT:    movl %eax, ldst+64(%rip)
1872; LINUX-64-PIC-NEXT:    retq
1873;
1874; DARWIN-32-STATIC-LABEL: qux06:
1875; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1876; DARWIN-32-STATIC-NEXT:    movl _lsrc+64, %eax
1877; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst+64
1878; DARWIN-32-STATIC-NEXT:    retl
1879;
1880; DARWIN-32-DYNAMIC-LABEL: qux06:
1881; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1882; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64, %eax
1883; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst+64
1884; DARWIN-32-DYNAMIC-NEXT:    retl
1885;
1886; DARWIN-32-PIC-LABEL: qux06:
1887; DARWIN-32-PIC:       ## %bb.0: ## %entry
1888; DARWIN-32-PIC-NEXT:    calll L21$pb
1889; DARWIN-32-PIC-NEXT:  L21$pb:
1890; DARWIN-32-PIC-NEXT:    popl %eax
1891; DARWIN-32-PIC-NEXT:    movl (_lsrc-L21$pb)+64(%eax), %ecx
1892; DARWIN-32-PIC-NEXT:    movl %ecx, (_ldst-L21$pb)+64(%eax)
1893; DARWIN-32-PIC-NEXT:    retl
1894;
1895; DARWIN-64-STATIC-LABEL: qux06:
1896; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1897; DARWIN-64-STATIC-NEXT:    movl _lsrc+64(%rip), %eax
1898; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst+64(%rip)
1899; DARWIN-64-STATIC-NEXT:    retq
1900;
1901; DARWIN-64-DYNAMIC-LABEL: qux06:
1902; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1903; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+64(%rip), %eax
1904; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst+64(%rip)
1905; DARWIN-64-DYNAMIC-NEXT:    retq
1906;
1907; DARWIN-64-PIC-LABEL: qux06:
1908; DARWIN-64-PIC:       ## %bb.0: ## %entry
1909; DARWIN-64-PIC-NEXT:    movl _lsrc+64(%rip), %eax
1910; DARWIN-64-PIC-NEXT:    movl %eax, _ldst+64(%rip)
1911; DARWIN-64-PIC-NEXT:    retq
1912
1913entry:
1914	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
1915	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), align 4
1916	ret void
1917}
1918
1919define dso_local void @qux07() nounwind {
1920; LINUX-64-STATIC-LABEL: qux07:
1921; LINUX-64-STATIC:       # %bb.0: # %entry
1922; LINUX-64-STATIC-NEXT:    movq $ldst+64, lptr(%rip)
1923; LINUX-64-STATIC-NEXT:    retq
1924;
1925; LINUX-32-STATIC-LABEL: qux07:
1926; LINUX-32-STATIC:       # %bb.0: # %entry
1927; LINUX-32-STATIC-NEXT:    movl $ldst+64, lptr
1928; LINUX-32-STATIC-NEXT:    retl
1929;
1930; LINUX-32-PIC-LABEL: qux07:
1931; LINUX-32-PIC:       # %bb.0: # %entry
1932; LINUX-32-PIC-NEXT:    calll .L22$pb
1933; LINUX-32-PIC-NEXT:  .L22$pb:
1934; LINUX-32-PIC-NEXT:    popl %eax
1935; LINUX-32-PIC-NEXT:  .Ltmp22:
1936; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp22-.L22$pb), %eax
1937; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax), %ecx
1938; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
1939; LINUX-32-PIC-NEXT:    retl
1940;
1941; LINUX-64-PIC-LABEL: qux07:
1942; LINUX-64-PIC:       # %bb.0: # %entry
1943; LINUX-64-PIC-NEXT:    leaq ldst+64(%rip), %rax
1944; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
1945; LINUX-64-PIC-NEXT:    retq
1946;
1947; DARWIN-32-STATIC-LABEL: qux07:
1948; DARWIN-32-STATIC:       ## %bb.0: ## %entry
1949; DARWIN-32-STATIC-NEXT:    movl $_ldst+64, _lptr
1950; DARWIN-32-STATIC-NEXT:    retl
1951;
1952; DARWIN-32-DYNAMIC-LABEL: qux07:
1953; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
1954; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+64, _lptr
1955; DARWIN-32-DYNAMIC-NEXT:    retl
1956;
1957; DARWIN-32-PIC-LABEL: qux07:
1958; DARWIN-32-PIC:       ## %bb.0: ## %entry
1959; DARWIN-32-PIC-NEXT:    calll L22$pb
1960; DARWIN-32-PIC-NEXT:  L22$pb:
1961; DARWIN-32-PIC-NEXT:    popl %eax
1962; DARWIN-32-PIC-NEXT:    leal (_ldst-L22$pb)+64(%eax), %ecx
1963; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L22$pb(%eax)
1964; DARWIN-32-PIC-NEXT:    retl
1965;
1966; DARWIN-64-STATIC-LABEL: qux07:
1967; DARWIN-64-STATIC:       ## %bb.0: ## %entry
1968; DARWIN-64-STATIC-NEXT:    leaq _ldst+64(%rip), %rax
1969; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
1970; DARWIN-64-STATIC-NEXT:    retq
1971;
1972; DARWIN-64-DYNAMIC-LABEL: qux07:
1973; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
1974; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+64(%rip), %rax
1975; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
1976; DARWIN-64-DYNAMIC-NEXT:    retq
1977;
1978; DARWIN-64-PIC-LABEL: qux07:
1979; DARWIN-64-PIC:       ## %bb.0: ## %entry
1980; DARWIN-64-PIC-NEXT:    leaq _ldst+64(%rip), %rax
1981; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
1982; DARWIN-64-PIC-NEXT:    retq
1983
1984entry:
1985	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1986	ret void
1987}
1988
1989define dso_local void @qux08() nounwind {
1990; LINUX-64-STATIC-LABEL: qux08:
1991; LINUX-64-STATIC:       # %bb.0: # %entry
1992; LINUX-64-STATIC-NEXT:    movl lsrc+64(%rip), %eax
1993; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
1994; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
1995; LINUX-64-STATIC-NEXT:    retq
1996;
1997; LINUX-32-STATIC-LABEL: qux08:
1998; LINUX-32-STATIC:       # %bb.0: # %entry
1999; LINUX-32-STATIC-NEXT:    movl lsrc+64, %eax
2000; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
2001; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
2002; LINUX-32-STATIC-NEXT:    retl
2003;
2004; LINUX-32-PIC-LABEL: qux08:
2005; LINUX-32-PIC:       # %bb.0: # %entry
2006; LINUX-32-PIC-NEXT:    calll .L23$pb
2007; LINUX-32-PIC-NEXT:  .L23$pb:
2008; LINUX-32-PIC-NEXT:    popl %eax
2009; LINUX-32-PIC-NEXT:  .Ltmp23:
2010; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp23-.L23$pb), %eax
2011; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax), %ecx
2012; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
2013; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
2014; LINUX-32-PIC-NEXT:    retl
2015;
2016; LINUX-64-PIC-LABEL: qux08:
2017; LINUX-64-PIC:       # %bb.0: # %entry
2018; LINUX-64-PIC-NEXT:    movl lsrc+64(%rip), %eax
2019; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
2020; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
2021; LINUX-64-PIC-NEXT:    retq
2022;
2023; DARWIN-32-STATIC-LABEL: qux08:
2024; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2025; DARWIN-32-STATIC-NEXT:    movl _lsrc+64, %eax
2026; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
2027; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
2028; DARWIN-32-STATIC-NEXT:    retl
2029;
2030; DARWIN-32-DYNAMIC-LABEL: qux08:
2031; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2032; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64, %eax
2033; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
2034; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
2035; DARWIN-32-DYNAMIC-NEXT:    retl
2036;
2037; DARWIN-32-PIC-LABEL: qux08:
2038; DARWIN-32-PIC:       ## %bb.0: ## %entry
2039; DARWIN-32-PIC-NEXT:    calll L23$pb
2040; DARWIN-32-PIC-NEXT:  L23$pb:
2041; DARWIN-32-PIC-NEXT:    popl %eax
2042; DARWIN-32-PIC-NEXT:    movl (_lsrc-L23$pb)+64(%eax), %ecx
2043; DARWIN-32-PIC-NEXT:    movl _lptr-L23$pb(%eax), %eax
2044; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
2045; DARWIN-32-PIC-NEXT:    retl
2046;
2047; DARWIN-64-STATIC-LABEL: qux08:
2048; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2049; DARWIN-64-STATIC-NEXT:    movl _lsrc+64(%rip), %eax
2050; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
2051; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
2052; DARWIN-64-STATIC-NEXT:    retq
2053;
2054; DARWIN-64-DYNAMIC-LABEL: qux08:
2055; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2056; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+64(%rip), %eax
2057; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
2058; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
2059; DARWIN-64-DYNAMIC-NEXT:    retq
2060;
2061; DARWIN-64-PIC-LABEL: qux08:
2062; DARWIN-64-PIC:       ## %bb.0: ## %entry
2063; DARWIN-64-PIC-NEXT:    movl _lsrc+64(%rip), %eax
2064; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
2065; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
2066; DARWIN-64-PIC-NEXT:    retq
2067
2068entry:
2069	%0 = load i32*, i32** @lptr, align 8
2070	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
2071	%2 = getelementptr i32, i32* %0, i64 16
2072	store i32 %1, i32* %2, align 4
2073	ret void
2074}
2075
2076define dso_local void @ind00(i64 %i) nounwind {
2077; LINUX-64-STATIC-LABEL: ind00:
2078; LINUX-64-STATIC:       # %bb.0: # %entry
2079; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
2080; LINUX-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2081; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
2082; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2083; LINUX-64-STATIC-NEXT:    retq
2084;
2085; LINUX-32-STATIC-LABEL: ind00:
2086; LINUX-32-STATIC:       # %bb.0: # %entry
2087; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2088; LINUX-32-STATIC-NEXT:    movl src(,%eax,4), %ecx
2089; LINUX-32-STATIC-NEXT:    movl %ecx, dst(,%eax,4)
2090; LINUX-32-STATIC-NEXT:    retl
2091;
2092; LINUX-32-PIC-LABEL: ind00:
2093; LINUX-32-PIC:       # %bb.0: # %entry
2094; LINUX-32-PIC-NEXT:    calll .L24$pb
2095; LINUX-32-PIC-NEXT:  .L24$pb:
2096; LINUX-32-PIC-NEXT:    popl %eax
2097; LINUX-32-PIC-NEXT:  .Ltmp24:
2098; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp24-.L24$pb), %eax
2099; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2100; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
2101; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2102; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
2103; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2104; LINUX-32-PIC-NEXT:    retl
2105;
2106; LINUX-64-PIC-LABEL: ind00:
2107; LINUX-64-PIC:       # %bb.0: # %entry
2108; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
2109; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2110; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
2111; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2112; LINUX-64-PIC-NEXT:    retq
2113;
2114; DARWIN-32-STATIC-LABEL: ind00:
2115; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2116; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2117; DARWIN-32-STATIC-NEXT:    movl _src(,%eax,4), %ecx
2118; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst(,%eax,4)
2119; DARWIN-32-STATIC-NEXT:    retl
2120;
2121; DARWIN-32-DYNAMIC-LABEL: ind00:
2122; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2123; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2124; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
2125; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
2126; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
2127; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2128; DARWIN-32-DYNAMIC-NEXT:    retl
2129;
2130; DARWIN-32-PIC-LABEL: ind00:
2131; DARWIN-32-PIC:       ## %bb.0: ## %entry
2132; DARWIN-32-PIC-NEXT:    calll L24$pb
2133; DARWIN-32-PIC-NEXT:  L24$pb:
2134; DARWIN-32-PIC-NEXT:    popl %eax
2135; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2136; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L24$pb(%eax), %edx
2137; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2138; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L24$pb(%eax), %eax
2139; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2140; DARWIN-32-PIC-NEXT:    retl
2141;
2142; DARWIN-64-STATIC-LABEL: ind00:
2143; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2144; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2145; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2146; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
2147; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2148; DARWIN-64-STATIC-NEXT:    retq
2149;
2150; DARWIN-64-DYNAMIC-LABEL: ind00:
2151; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2152; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2153; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2154; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
2155; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2156; DARWIN-64-DYNAMIC-NEXT:    retq
2157;
2158; DARWIN-64-PIC-LABEL: ind00:
2159; DARWIN-64-PIC:       ## %bb.0: ## %entry
2160; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2161; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2162; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
2163; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2164; DARWIN-64-PIC-NEXT:    retq
2165
2166entry:
2167	%0 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
2168	%1 = load i32, i32* %0, align 4
2169	%2 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
2170	store i32 %1, i32* %2, align 4
2171	ret void
2172}
2173
2174define dso_local void @ixd00(i64 %i) nounwind {
2175; LINUX-64-STATIC-LABEL: ixd00:
2176; LINUX-64-STATIC:       # %bb.0: # %entry
2177; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
2178; LINUX-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2179; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
2180; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2181; LINUX-64-STATIC-NEXT:    retq
2182;
2183; LINUX-32-STATIC-LABEL: ixd00:
2184; LINUX-32-STATIC:       # %bb.0: # %entry
2185; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2186; LINUX-32-STATIC-NEXT:    movl xsrc(,%eax,4), %ecx
2187; LINUX-32-STATIC-NEXT:    movl %ecx, xdst(,%eax,4)
2188; LINUX-32-STATIC-NEXT:    retl
2189;
2190; LINUX-32-PIC-LABEL: ixd00:
2191; LINUX-32-PIC:       # %bb.0: # %entry
2192; LINUX-32-PIC-NEXT:    calll .L25$pb
2193; LINUX-32-PIC-NEXT:  .L25$pb:
2194; LINUX-32-PIC-NEXT:    popl %eax
2195; LINUX-32-PIC-NEXT:  .Ltmp25:
2196; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp25-.L25$pb), %eax
2197; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2198; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
2199; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2200; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
2201; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2202; LINUX-32-PIC-NEXT:    retl
2203;
2204; LINUX-64-PIC-LABEL: ixd00:
2205; LINUX-64-PIC:       # %bb.0: # %entry
2206; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
2207; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2208; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
2209; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2210; LINUX-64-PIC-NEXT:    retq
2211;
2212; DARWIN-32-STATIC-LABEL: ixd00:
2213; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2214; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2215; DARWIN-32-STATIC-NEXT:    movl _xsrc(,%eax,4), %ecx
2216; DARWIN-32-STATIC-NEXT:    movl %ecx, _xdst(,%eax,4)
2217; DARWIN-32-STATIC-NEXT:    retl
2218;
2219; DARWIN-32-DYNAMIC-LABEL: ixd00:
2220; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2221; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2222; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
2223; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
2224; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %edx
2225; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2226; DARWIN-32-DYNAMIC-NEXT:    retl
2227;
2228; DARWIN-32-PIC-LABEL: ixd00:
2229; DARWIN-32-PIC:       ## %bb.0: ## %entry
2230; DARWIN-32-PIC-NEXT:    calll L25$pb
2231; DARWIN-32-PIC-NEXT:  L25$pb:
2232; DARWIN-32-PIC-NEXT:    popl %eax
2233; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2234; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L25$pb(%eax), %edx
2235; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2236; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L25$pb(%eax), %eax
2237; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2238; DARWIN-32-PIC-NEXT:    retl
2239;
2240; DARWIN-64-STATIC-LABEL: ixd00:
2241; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2242; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2243; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2244; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
2245; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2246; DARWIN-64-STATIC-NEXT:    retq
2247;
2248; DARWIN-64-DYNAMIC-LABEL: ixd00:
2249; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2250; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2251; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2252; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
2253; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2254; DARWIN-64-DYNAMIC-NEXT:    retq
2255;
2256; DARWIN-64-PIC-LABEL: ixd00:
2257; DARWIN-64-PIC:       ## %bb.0: ## %entry
2258; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2259; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2260; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
2261; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2262; DARWIN-64-PIC-NEXT:    retq
2263
2264entry:
2265	%0 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
2266	%1 = load i32, i32* %0, align 4
2267	%2 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
2268	store i32 %1, i32* %2, align 4
2269	ret void
2270}
2271
2272define dso_local void @ind01(i64 %i) nounwind {
2273; LINUX-64-STATIC-LABEL: ind01:
2274; LINUX-64-STATIC:       # %bb.0: # %entry
2275; LINUX-64-STATIC-NEXT:    shlq $2, %rdi
2276; LINUX-64-STATIC-NEXT:    addq dst@GOTPCREL(%rip), %rdi
2277; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
2278; LINUX-64-STATIC-NEXT:    movq %rdi, (%rax)
2279; LINUX-64-STATIC-NEXT:    retq
2280;
2281; LINUX-32-STATIC-LABEL: ind01:
2282; LINUX-32-STATIC:       # %bb.0: # %entry
2283; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2284; LINUX-32-STATIC-NEXT:    leal dst(,%eax,4), %eax
2285; LINUX-32-STATIC-NEXT:    movl %eax, ptr
2286; LINUX-32-STATIC-NEXT:    retl
2287;
2288; LINUX-32-PIC-LABEL: ind01:
2289; LINUX-32-PIC:       # %bb.0: # %entry
2290; LINUX-32-PIC-NEXT:    calll .L26$pb
2291; LINUX-32-PIC-NEXT:  .L26$pb:
2292; LINUX-32-PIC-NEXT:    popl %eax
2293; LINUX-32-PIC-NEXT:  .Ltmp26:
2294; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp26-.L26$pb), %eax
2295; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2296; LINUX-32-PIC-NEXT:    shll $2, %ecx
2297; LINUX-32-PIC-NEXT:    addl dst@GOT(%eax), %ecx
2298; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
2299; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
2300; LINUX-32-PIC-NEXT:    retl
2301;
2302; LINUX-64-PIC-LABEL: ind01:
2303; LINUX-64-PIC:       # %bb.0: # %entry
2304; LINUX-64-PIC-NEXT:    shlq $2, %rdi
2305; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rdi
2306; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
2307; LINUX-64-PIC-NEXT:    movq %rdi, (%rax)
2308; LINUX-64-PIC-NEXT:    retq
2309;
2310; DARWIN-32-STATIC-LABEL: ind01:
2311; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2312; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2313; DARWIN-32-STATIC-NEXT:    leal _dst(,%eax,4), %eax
2314; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
2315; DARWIN-32-STATIC-NEXT:    retl
2316;
2317; DARWIN-32-DYNAMIC-LABEL: ind01:
2318; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2319; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2320; DARWIN-32-DYNAMIC-NEXT:    shll $2, %eax
2321; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
2322; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
2323; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
2324; DARWIN-32-DYNAMIC-NEXT:    retl
2325;
2326; DARWIN-32-PIC-LABEL: ind01:
2327; DARWIN-32-PIC:       ## %bb.0: ## %entry
2328; DARWIN-32-PIC-NEXT:    calll L26$pb
2329; DARWIN-32-PIC-NEXT:  L26$pb:
2330; DARWIN-32-PIC-NEXT:    popl %eax
2331; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2332; DARWIN-32-PIC-NEXT:    shll $2, %ecx
2333; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L26$pb(%eax), %ecx
2334; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L26$pb(%eax), %eax
2335; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
2336; DARWIN-32-PIC-NEXT:    retl
2337;
2338; DARWIN-64-STATIC-LABEL: ind01:
2339; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2340; DARWIN-64-STATIC-NEXT:    shlq $2, %rdi
2341; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
2342; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2343; DARWIN-64-STATIC-NEXT:    movq %rdi, (%rax)
2344; DARWIN-64-STATIC-NEXT:    retq
2345;
2346; DARWIN-64-DYNAMIC-LABEL: ind01:
2347; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2348; DARWIN-64-DYNAMIC-NEXT:    shlq $2, %rdi
2349; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
2350; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2351; DARWIN-64-DYNAMIC-NEXT:    movq %rdi, (%rax)
2352; DARWIN-64-DYNAMIC-NEXT:    retq
2353;
2354; DARWIN-64-PIC-LABEL: ind01:
2355; DARWIN-64-PIC:       ## %bb.0: ## %entry
2356; DARWIN-64-PIC-NEXT:    shlq $2, %rdi
2357; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
2358; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2359; DARWIN-64-PIC-NEXT:    movq %rdi, (%rax)
2360; DARWIN-64-PIC-NEXT:    retq
2361
2362entry:
2363	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
2364	store i32* %0, i32** @ptr, align 8
2365	ret void
2366}
2367
2368define dso_local void @ixd01(i64 %i) nounwind {
2369; LINUX-64-STATIC-LABEL: ixd01:
2370; LINUX-64-STATIC:       # %bb.0: # %entry
2371; LINUX-64-STATIC-NEXT:    shlq $2, %rdi
2372; LINUX-64-STATIC-NEXT:    addq xdst@GOTPCREL(%rip), %rdi
2373; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
2374; LINUX-64-STATIC-NEXT:    movq %rdi, (%rax)
2375; LINUX-64-STATIC-NEXT:    retq
2376;
2377; LINUX-32-STATIC-LABEL: ixd01:
2378; LINUX-32-STATIC:       # %bb.0: # %entry
2379; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2380; LINUX-32-STATIC-NEXT:    leal xdst(,%eax,4), %eax
2381; LINUX-32-STATIC-NEXT:    movl %eax, ptr
2382; LINUX-32-STATIC-NEXT:    retl
2383;
2384; LINUX-32-PIC-LABEL: ixd01:
2385; LINUX-32-PIC:       # %bb.0: # %entry
2386; LINUX-32-PIC-NEXT:    calll .L27$pb
2387; LINUX-32-PIC-NEXT:  .L27$pb:
2388; LINUX-32-PIC-NEXT:    popl %eax
2389; LINUX-32-PIC-NEXT:  .Ltmp27:
2390; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp27-.L27$pb), %eax
2391; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2392; LINUX-32-PIC-NEXT:    shll $2, %ecx
2393; LINUX-32-PIC-NEXT:    addl xdst@GOT(%eax), %ecx
2394; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
2395; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
2396; LINUX-32-PIC-NEXT:    retl
2397;
2398; LINUX-64-PIC-LABEL: ixd01:
2399; LINUX-64-PIC:       # %bb.0: # %entry
2400; LINUX-64-PIC-NEXT:    shlq $2, %rdi
2401; LINUX-64-PIC-NEXT:    addq xdst@GOTPCREL(%rip), %rdi
2402; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
2403; LINUX-64-PIC-NEXT:    movq %rdi, (%rax)
2404; LINUX-64-PIC-NEXT:    retq
2405;
2406; DARWIN-32-STATIC-LABEL: ixd01:
2407; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2408; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2409; DARWIN-32-STATIC-NEXT:    leal _xdst(,%eax,4), %eax
2410; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
2411; DARWIN-32-STATIC-NEXT:    retl
2412;
2413; DARWIN-32-DYNAMIC-LABEL: ixd01:
2414; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2415; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2416; DARWIN-32-DYNAMIC-NEXT:    shll $2, %eax
2417; DARWIN-32-DYNAMIC-NEXT:    addl L_xdst$non_lazy_ptr, %eax
2418; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
2419; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
2420; DARWIN-32-DYNAMIC-NEXT:    retl
2421;
2422; DARWIN-32-PIC-LABEL: ixd01:
2423; DARWIN-32-PIC:       ## %bb.0: ## %entry
2424; DARWIN-32-PIC-NEXT:    calll L27$pb
2425; DARWIN-32-PIC-NEXT:  L27$pb:
2426; DARWIN-32-PIC-NEXT:    popl %eax
2427; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2428; DARWIN-32-PIC-NEXT:    shll $2, %ecx
2429; DARWIN-32-PIC-NEXT:    addl L_xdst$non_lazy_ptr-L27$pb(%eax), %ecx
2430; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L27$pb(%eax), %eax
2431; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
2432; DARWIN-32-PIC-NEXT:    retl
2433;
2434; DARWIN-64-STATIC-LABEL: ixd01:
2435; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2436; DARWIN-64-STATIC-NEXT:    shlq $2, %rdi
2437; DARWIN-64-STATIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
2438; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2439; DARWIN-64-STATIC-NEXT:    movq %rdi, (%rax)
2440; DARWIN-64-STATIC-NEXT:    retq
2441;
2442; DARWIN-64-DYNAMIC-LABEL: ixd01:
2443; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2444; DARWIN-64-DYNAMIC-NEXT:    shlq $2, %rdi
2445; DARWIN-64-DYNAMIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
2446; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2447; DARWIN-64-DYNAMIC-NEXT:    movq %rdi, (%rax)
2448; DARWIN-64-DYNAMIC-NEXT:    retq
2449;
2450; DARWIN-64-PIC-LABEL: ixd01:
2451; DARWIN-64-PIC:       ## %bb.0: ## %entry
2452; DARWIN-64-PIC-NEXT:    shlq $2, %rdi
2453; DARWIN-64-PIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
2454; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
2455; DARWIN-64-PIC-NEXT:    movq %rdi, (%rax)
2456; DARWIN-64-PIC-NEXT:    retq
2457
2458entry:
2459	%0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
2460	store i32* %0, i32** @ptr, align 8
2461	ret void
2462}
2463
2464define dso_local void @ind02(i64 %i) nounwind {
2465; LINUX-64-STATIC-LABEL: ind02:
2466; LINUX-64-STATIC:       # %bb.0: # %entry
2467; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
2468; LINUX-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2469; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
2470; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
2471; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2472; LINUX-64-STATIC-NEXT:    retq
2473;
2474; LINUX-32-STATIC-LABEL: ind02:
2475; LINUX-32-STATIC:       # %bb.0: # %entry
2476; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2477; LINUX-32-STATIC-NEXT:    movl src(,%eax,4), %ecx
2478; LINUX-32-STATIC-NEXT:    movl ptr, %edx
2479; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2480; LINUX-32-STATIC-NEXT:    retl
2481;
2482; LINUX-32-PIC-LABEL: ind02:
2483; LINUX-32-PIC:       # %bb.0: # %entry
2484; LINUX-32-PIC-NEXT:    calll .L28$pb
2485; LINUX-32-PIC-NEXT:  .L28$pb:
2486; LINUX-32-PIC-NEXT:    popl %eax
2487; LINUX-32-PIC-NEXT:  .Ltmp28:
2488; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp28-.L28$pb), %eax
2489; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2490; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
2491; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2492; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
2493; LINUX-32-PIC-NEXT:    movl (%eax), %eax
2494; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2495; LINUX-32-PIC-NEXT:    retl
2496;
2497; LINUX-64-PIC-LABEL: ind02:
2498; LINUX-64-PIC:       # %bb.0: # %entry
2499; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
2500; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2501; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
2502; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
2503; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2504; LINUX-64-PIC-NEXT:    retq
2505;
2506; DARWIN-32-STATIC-LABEL: ind02:
2507; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2508; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2509; DARWIN-32-STATIC-NEXT:    movl _src(,%eax,4), %ecx
2510; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
2511; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2512; DARWIN-32-STATIC-NEXT:    retl
2513;
2514; DARWIN-32-DYNAMIC-LABEL: ind02:
2515; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2516; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2517; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
2518; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
2519; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
2520; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
2521; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2522; DARWIN-32-DYNAMIC-NEXT:    retl
2523;
2524; DARWIN-32-PIC-LABEL: ind02:
2525; DARWIN-32-PIC:       ## %bb.0: ## %entry
2526; DARWIN-32-PIC-NEXT:    calll L28$pb
2527; DARWIN-32-PIC-NEXT:  L28$pb:
2528; DARWIN-32-PIC-NEXT:    popl %eax
2529; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2530; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L28$pb(%eax), %edx
2531; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2532; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L28$pb(%eax), %eax
2533; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
2534; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2535; DARWIN-32-PIC-NEXT:    retl
2536;
2537; DARWIN-64-STATIC-LABEL: ind02:
2538; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2539; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2540; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2541; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2542; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
2543; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2544; DARWIN-64-STATIC-NEXT:    retq
2545;
2546; DARWIN-64-DYNAMIC-LABEL: ind02:
2547; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2548; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2549; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2550; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2551; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
2552; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2553; DARWIN-64-DYNAMIC-NEXT:    retq
2554;
2555; DARWIN-64-PIC-LABEL: ind02:
2556; DARWIN-64-PIC:       ## %bb.0: ## %entry
2557; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
2558; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2559; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2560; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
2561; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2562; DARWIN-64-PIC-NEXT:    retq
2563
2564entry:
2565	%0 = load i32*, i32** @ptr, align 8
2566	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
2567	%2 = load i32, i32* %1, align 4
2568	%3 = getelementptr i32, i32* %0, i64 %i
2569	store i32 %2, i32* %3, align 4
2570	ret void
2571}
2572
2573define dso_local void @ixd02(i64 %i) nounwind {
2574; LINUX-64-STATIC-LABEL: ixd02:
2575; LINUX-64-STATIC:       # %bb.0: # %entry
2576; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
2577; LINUX-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2578; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
2579; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
2580; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2581; LINUX-64-STATIC-NEXT:    retq
2582;
2583; LINUX-32-STATIC-LABEL: ixd02:
2584; LINUX-32-STATIC:       # %bb.0: # %entry
2585; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2586; LINUX-32-STATIC-NEXT:    movl xsrc(,%eax,4), %ecx
2587; LINUX-32-STATIC-NEXT:    movl ptr, %edx
2588; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2589; LINUX-32-STATIC-NEXT:    retl
2590;
2591; LINUX-32-PIC-LABEL: ixd02:
2592; LINUX-32-PIC:       # %bb.0: # %entry
2593; LINUX-32-PIC-NEXT:    calll .L29$pb
2594; LINUX-32-PIC-NEXT:  .L29$pb:
2595; LINUX-32-PIC-NEXT:    popl %eax
2596; LINUX-32-PIC-NEXT:  .Ltmp29:
2597; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp29-.L29$pb), %eax
2598; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2599; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
2600; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2601; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
2602; LINUX-32-PIC-NEXT:    movl (%eax), %eax
2603; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2604; LINUX-32-PIC-NEXT:    retl
2605;
2606; LINUX-64-PIC-LABEL: ixd02:
2607; LINUX-64-PIC:       # %bb.0: # %entry
2608; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
2609; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2610; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
2611; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
2612; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2613; LINUX-64-PIC-NEXT:    retq
2614;
2615; DARWIN-32-STATIC-LABEL: ixd02:
2616; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2617; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2618; DARWIN-32-STATIC-NEXT:    movl _xsrc(,%eax,4), %ecx
2619; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
2620; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2621; DARWIN-32-STATIC-NEXT:    retl
2622;
2623; DARWIN-32-DYNAMIC-LABEL: ixd02:
2624; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2625; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2626; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
2627; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
2628; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
2629; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
2630; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2631; DARWIN-32-DYNAMIC-NEXT:    retl
2632;
2633; DARWIN-32-PIC-LABEL: ixd02:
2634; DARWIN-32-PIC:       ## %bb.0: ## %entry
2635; DARWIN-32-PIC-NEXT:    calll L29$pb
2636; DARWIN-32-PIC-NEXT:  L29$pb:
2637; DARWIN-32-PIC-NEXT:    popl %eax
2638; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2639; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L29$pb(%eax), %edx
2640; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
2641; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L29$pb(%eax), %eax
2642; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
2643; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2644; DARWIN-32-PIC-NEXT:    retl
2645;
2646; DARWIN-64-STATIC-LABEL: ixd02:
2647; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2648; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2649; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2650; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2651; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
2652; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2653; DARWIN-64-STATIC-NEXT:    retq
2654;
2655; DARWIN-64-DYNAMIC-LABEL: ixd02:
2656; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2657; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2658; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2659; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2660; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
2661; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2662; DARWIN-64-DYNAMIC-NEXT:    retq
2663;
2664; DARWIN-64-PIC-LABEL: ixd02:
2665; DARWIN-64-PIC:       ## %bb.0: ## %entry
2666; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
2667; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2668; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
2669; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
2670; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2671; DARWIN-64-PIC-NEXT:    retq
2672
2673entry:
2674	%0 = load i32*, i32** @ptr, align 8
2675	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
2676	%2 = load i32, i32* %1, align 4
2677	%3 = getelementptr i32, i32* %0, i64 %i
2678	store i32 %2, i32* %3, align 4
2679	ret void
2680}
2681
2682define dso_local void @ind03(i64 %i) nounwind {
2683; LINUX-64-STATIC-LABEL: ind03:
2684; LINUX-64-STATIC:       # %bb.0: # %entry
2685; LINUX-64-STATIC-NEXT:    movl dsrc(,%rdi,4), %eax
2686; LINUX-64-STATIC-NEXT:    movl %eax, ddst(,%rdi,4)
2687; LINUX-64-STATIC-NEXT:    retq
2688;
2689; LINUX-32-STATIC-LABEL: ind03:
2690; LINUX-32-STATIC:       # %bb.0: # %entry
2691; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2692; LINUX-32-STATIC-NEXT:    movl dsrc(,%eax,4), %ecx
2693; LINUX-32-STATIC-NEXT:    movl %ecx, ddst(,%eax,4)
2694; LINUX-32-STATIC-NEXT:    retl
2695;
2696; LINUX-32-PIC-LABEL: ind03:
2697; LINUX-32-PIC:       # %bb.0: # %entry
2698; LINUX-32-PIC-NEXT:    calll .L30$pb
2699; LINUX-32-PIC-NEXT:  .L30$pb:
2700; LINUX-32-PIC-NEXT:    popl %eax
2701; LINUX-32-PIC-NEXT:  .Ltmp30:
2702; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp30-.L30$pb), %eax
2703; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2704; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF(%eax,%ecx,4), %edx
2705; LINUX-32-PIC-NEXT:    movl %edx, .Lddst$local@GOTOFF(%eax,%ecx,4)
2706; LINUX-32-PIC-NEXT:    retl
2707;
2708; LINUX-64-PIC-LABEL: ind03:
2709; LINUX-64-PIC:       # %bb.0: # %entry
2710; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
2711; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2712; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rcx
2713; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2714; LINUX-64-PIC-NEXT:    retq
2715;
2716; DARWIN-32-STATIC-LABEL: ind03:
2717; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2718; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2719; DARWIN-32-STATIC-NEXT:    movl _dsrc(,%eax,4), %ecx
2720; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst(,%eax,4)
2721; DARWIN-32-STATIC-NEXT:    retl
2722;
2723; DARWIN-32-DYNAMIC-LABEL: ind03:
2724; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2725; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2726; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc(,%eax,4), %ecx
2727; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst(,%eax,4)
2728; DARWIN-32-DYNAMIC-NEXT:    retl
2729;
2730; DARWIN-32-PIC-LABEL: ind03:
2731; DARWIN-32-PIC:       ## %bb.0: ## %entry
2732; DARWIN-32-PIC-NEXT:    calll L30$pb
2733; DARWIN-32-PIC-NEXT:  L30$pb:
2734; DARWIN-32-PIC-NEXT:    popl %eax
2735; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2736; DARWIN-32-PIC-NEXT:    movl _dsrc-L30$pb(%eax,%ecx,4), %edx
2737; DARWIN-32-PIC-NEXT:    movl %edx, _ddst-L30$pb(%eax,%ecx,4)
2738; DARWIN-32-PIC-NEXT:    retl
2739;
2740; DARWIN-64-STATIC-LABEL: ind03:
2741; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2742; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
2743; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2744; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
2745; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2746; DARWIN-64-STATIC-NEXT:    retq
2747;
2748; DARWIN-64-DYNAMIC-LABEL: ind03:
2749; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2750; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
2751; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2752; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
2753; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2754; DARWIN-64-DYNAMIC-NEXT:    retq
2755;
2756; DARWIN-64-PIC-LABEL: ind03:
2757; DARWIN-64-PIC:       ## %bb.0: ## %entry
2758; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
2759; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2760; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
2761; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2762; DARWIN-64-PIC-NEXT:    retq
2763
2764entry:
2765	%0 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
2766	%1 = load i32, i32* %0, align 4
2767	%2 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
2768	store i32 %1, i32* %2, align 4
2769	ret void
2770}
2771
2772define dso_local void @ind04(i64 %i) nounwind {
2773; LINUX-64-STATIC-LABEL: ind04:
2774; LINUX-64-STATIC:       # %bb.0: # %entry
2775; LINUX-64-STATIC-NEXT:    leaq ddst(,%rdi,4), %rax
2776; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
2777; LINUX-64-STATIC-NEXT:    retq
2778;
2779; LINUX-32-STATIC-LABEL: ind04:
2780; LINUX-32-STATIC:       # %bb.0: # %entry
2781; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2782; LINUX-32-STATIC-NEXT:    leal ddst(,%eax,4), %eax
2783; LINUX-32-STATIC-NEXT:    movl %eax, dptr
2784; LINUX-32-STATIC-NEXT:    retl
2785;
2786; LINUX-32-PIC-LABEL: ind04:
2787; LINUX-32-PIC:       # %bb.0: # %entry
2788; LINUX-32-PIC-NEXT:    calll .L31$pb
2789; LINUX-32-PIC-NEXT:  .L31$pb:
2790; LINUX-32-PIC-NEXT:    popl %eax
2791; LINUX-32-PIC-NEXT:  .Ltmp31:
2792; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp31-.L31$pb), %eax
2793; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2794; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF(%eax,%ecx,4), %ecx
2795; LINUX-32-PIC-NEXT:    movl %ecx, .Ldptr$local@GOTOFF(%eax)
2796; LINUX-32-PIC-NEXT:    retl
2797;
2798; LINUX-64-PIC-LABEL: ind04:
2799; LINUX-64-PIC:       # %bb.0: # %entry
2800; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
2801; LINUX-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
2802; LINUX-64-PIC-NEXT:    movq %rax, .Ldptr$local(%rip)
2803; LINUX-64-PIC-NEXT:    retq
2804;
2805; DARWIN-32-STATIC-LABEL: ind04:
2806; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2807; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2808; DARWIN-32-STATIC-NEXT:    leal _ddst(,%eax,4), %eax
2809; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
2810; DARWIN-32-STATIC-NEXT:    retl
2811;
2812; DARWIN-32-DYNAMIC-LABEL: ind04:
2813; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2814; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2815; DARWIN-32-DYNAMIC-NEXT:    leal _ddst(,%eax,4), %eax
2816; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
2817; DARWIN-32-DYNAMIC-NEXT:    retl
2818;
2819; DARWIN-32-PIC-LABEL: ind04:
2820; DARWIN-32-PIC:       ## %bb.0: ## %entry
2821; DARWIN-32-PIC-NEXT:    calll L31$pb
2822; DARWIN-32-PIC-NEXT:  L31$pb:
2823; DARWIN-32-PIC-NEXT:    popl %eax
2824; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2825; DARWIN-32-PIC-NEXT:    leal _ddst-L31$pb(%eax,%ecx,4), %ecx
2826; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L31$pb(%eax)
2827; DARWIN-32-PIC-NEXT:    retl
2828;
2829; DARWIN-64-STATIC-LABEL: ind04:
2830; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2831; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
2832; DARWIN-64-STATIC-NEXT:    leaq (%rax,%rdi,4), %rax
2833; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
2834; DARWIN-64-STATIC-NEXT:    retq
2835;
2836; DARWIN-64-DYNAMIC-LABEL: ind04:
2837; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2838; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
2839; DARWIN-64-DYNAMIC-NEXT:    leaq (%rax,%rdi,4), %rax
2840; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
2841; DARWIN-64-DYNAMIC-NEXT:    retq
2842;
2843; DARWIN-64-PIC-LABEL: ind04:
2844; DARWIN-64-PIC:       ## %bb.0: ## %entry
2845; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
2846; DARWIN-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
2847; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
2848; DARWIN-64-PIC-NEXT:    retq
2849
2850entry:
2851	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
2852	store i32* %0, i32** @dptr, align 8
2853	ret void
2854}
2855
2856define dso_local void @ind05(i64 %i) nounwind {
2857; LINUX-64-STATIC-LABEL: ind05:
2858; LINUX-64-STATIC:       # %bb.0: # %entry
2859; LINUX-64-STATIC-NEXT:    movl dsrc(,%rdi,4), %eax
2860; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
2861; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2862; LINUX-64-STATIC-NEXT:    retq
2863;
2864; LINUX-32-STATIC-LABEL: ind05:
2865; LINUX-32-STATIC:       # %bb.0: # %entry
2866; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2867; LINUX-32-STATIC-NEXT:    movl dsrc(,%eax,4), %ecx
2868; LINUX-32-STATIC-NEXT:    movl dptr, %edx
2869; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2870; LINUX-32-STATIC-NEXT:    retl
2871;
2872; LINUX-32-PIC-LABEL: ind05:
2873; LINUX-32-PIC:       # %bb.0: # %entry
2874; LINUX-32-PIC-NEXT:    calll .L32$pb
2875; LINUX-32-PIC-NEXT:  .L32$pb:
2876; LINUX-32-PIC-NEXT:    popl %eax
2877; LINUX-32-PIC-NEXT:  .Ltmp32:
2878; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp32-.L32$pb), %eax
2879; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2880; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF(%eax,%ecx,4), %edx
2881; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
2882; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2883; LINUX-32-PIC-NEXT:    retl
2884;
2885; LINUX-64-PIC-LABEL: ind05:
2886; LINUX-64-PIC:       # %bb.0: # %entry
2887; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
2888; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2889; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rcx
2890; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2891; LINUX-64-PIC-NEXT:    retq
2892;
2893; DARWIN-32-STATIC-LABEL: ind05:
2894; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2895; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2896; DARWIN-32-STATIC-NEXT:    movl _dsrc(,%eax,4), %ecx
2897; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
2898; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
2899; DARWIN-32-STATIC-NEXT:    retl
2900;
2901; DARWIN-32-DYNAMIC-LABEL: ind05:
2902; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2903; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2904; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc(,%eax,4), %ecx
2905; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
2906; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
2907; DARWIN-32-DYNAMIC-NEXT:    retl
2908;
2909; DARWIN-32-PIC-LABEL: ind05:
2910; DARWIN-32-PIC:       ## %bb.0: ## %entry
2911; DARWIN-32-PIC-NEXT:    calll L32$pb
2912; DARWIN-32-PIC-NEXT:  L32$pb:
2913; DARWIN-32-PIC-NEXT:    popl %eax
2914; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2915; DARWIN-32-PIC-NEXT:    movl _dsrc-L32$pb(%eax,%ecx,4), %edx
2916; DARWIN-32-PIC-NEXT:    movl _dptr-L32$pb(%eax), %eax
2917; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
2918; DARWIN-32-PIC-NEXT:    retl
2919;
2920; DARWIN-64-STATIC-LABEL: ind05:
2921; DARWIN-64-STATIC:       ## %bb.0: ## %entry
2922; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
2923; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
2924; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
2925; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2926; DARWIN-64-STATIC-NEXT:    retq
2927;
2928; DARWIN-64-DYNAMIC-LABEL: ind05:
2929; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
2930; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
2931; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
2932; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
2933; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2934; DARWIN-64-DYNAMIC-NEXT:    retq
2935;
2936; DARWIN-64-PIC-LABEL: ind05:
2937; DARWIN-64-PIC:       ## %bb.0: ## %entry
2938; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
2939; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2940; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
2941; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2942; DARWIN-64-PIC-NEXT:    retq
2943
2944entry:
2945	%0 = load i32*, i32** @dptr, align 8
2946	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
2947	%2 = load i32, i32* %1, align 4
2948	%3 = getelementptr i32, i32* %0, i64 %i
2949	store i32 %2, i32* %3, align 4
2950	ret void
2951}
2952
2953define dso_local void @ind06(i64 %i) nounwind {
2954; LINUX-64-STATIC-LABEL: ind06:
2955; LINUX-64-STATIC:       # %bb.0: # %entry
2956; LINUX-64-STATIC-NEXT:    movl lsrc(,%rdi,4), %eax
2957; LINUX-64-STATIC-NEXT:    movl %eax, ldst(,%rdi,4)
2958; LINUX-64-STATIC-NEXT:    retq
2959;
2960; LINUX-32-STATIC-LABEL: ind06:
2961; LINUX-32-STATIC:       # %bb.0: # %entry
2962; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2963; LINUX-32-STATIC-NEXT:    movl lsrc(,%eax,4), %ecx
2964; LINUX-32-STATIC-NEXT:    movl %ecx, ldst(,%eax,4)
2965; LINUX-32-STATIC-NEXT:    retl
2966;
2967; LINUX-32-PIC-LABEL: ind06:
2968; LINUX-32-PIC:       # %bb.0: # %entry
2969; LINUX-32-PIC-NEXT:    calll .L33$pb
2970; LINUX-32-PIC-NEXT:  .L33$pb:
2971; LINUX-32-PIC-NEXT:    popl %eax
2972; LINUX-32-PIC-NEXT:  .Ltmp33:
2973; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp33-.L33$pb), %eax
2974; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2975; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax,%ecx,4), %edx
2976; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF(%eax,%ecx,4)
2977; LINUX-32-PIC-NEXT:    retl
2978;
2979; LINUX-64-PIC-LABEL: ind06:
2980; LINUX-64-PIC:       # %bb.0: # %entry
2981; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
2982; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
2983; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
2984; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
2985; LINUX-64-PIC-NEXT:    retq
2986;
2987; DARWIN-32-STATIC-LABEL: ind06:
2988; DARWIN-32-STATIC:       ## %bb.0: ## %entry
2989; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2990; DARWIN-32-STATIC-NEXT:    movl _lsrc(,%eax,4), %ecx
2991; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst(,%eax,4)
2992; DARWIN-32-STATIC-NEXT:    retl
2993;
2994; DARWIN-32-DYNAMIC-LABEL: ind06:
2995; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
2996; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2997; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc(,%eax,4), %ecx
2998; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst(,%eax,4)
2999; DARWIN-32-DYNAMIC-NEXT:    retl
3000;
3001; DARWIN-32-PIC-LABEL: ind06:
3002; DARWIN-32-PIC:       ## %bb.0: ## %entry
3003; DARWIN-32-PIC-NEXT:    calll L33$pb
3004; DARWIN-32-PIC-NEXT:  L33$pb:
3005; DARWIN-32-PIC-NEXT:    popl %eax
3006; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3007; DARWIN-32-PIC-NEXT:    movl _lsrc-L33$pb(%eax,%ecx,4), %edx
3008; DARWIN-32-PIC-NEXT:    movl %edx, _ldst-L33$pb(%eax,%ecx,4)
3009; DARWIN-32-PIC-NEXT:    retl
3010;
3011; DARWIN-64-STATIC-LABEL: ind06:
3012; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3013; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
3014; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
3015; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
3016; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3017; DARWIN-64-STATIC-NEXT:    retq
3018;
3019; DARWIN-64-DYNAMIC-LABEL: ind06:
3020; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3021; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
3022; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
3023; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
3024; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3025; DARWIN-64-DYNAMIC-NEXT:    retq
3026;
3027; DARWIN-64-PIC-LABEL: ind06:
3028; DARWIN-64-PIC:       ## %bb.0: ## %entry
3029; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
3030; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
3031; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
3032; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3033; DARWIN-64-PIC-NEXT:    retq
3034
3035entry:
3036	%0 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
3037	%1 = load i32, i32* %0, align 4
3038	%2 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
3039	store i32 %1, i32* %2, align 4
3040	ret void
3041}
3042
3043define dso_local void @ind07(i64 %i) nounwind {
3044; LINUX-64-STATIC-LABEL: ind07:
3045; LINUX-64-STATIC:       # %bb.0: # %entry
3046; LINUX-64-STATIC-NEXT:    leaq ldst(,%rdi,4), %rax
3047; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
3048; LINUX-64-STATIC-NEXT:    retq
3049;
3050; LINUX-32-STATIC-LABEL: ind07:
3051; LINUX-32-STATIC:       # %bb.0: # %entry
3052; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3053; LINUX-32-STATIC-NEXT:    leal ldst(,%eax,4), %eax
3054; LINUX-32-STATIC-NEXT:    movl %eax, lptr
3055; LINUX-32-STATIC-NEXT:    retl
3056;
3057; LINUX-32-PIC-LABEL: ind07:
3058; LINUX-32-PIC:       # %bb.0: # %entry
3059; LINUX-32-PIC-NEXT:    calll .L34$pb
3060; LINUX-32-PIC-NEXT:  .L34$pb:
3061; LINUX-32-PIC-NEXT:    popl %eax
3062; LINUX-32-PIC-NEXT:  .Ltmp34:
3063; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp34-.L34$pb), %eax
3064; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3065; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax,%ecx,4), %ecx
3066; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
3067; LINUX-32-PIC-NEXT:    retl
3068;
3069; LINUX-64-PIC-LABEL: ind07:
3070; LINUX-64-PIC:       # %bb.0: # %entry
3071; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
3072; LINUX-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
3073; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
3074; LINUX-64-PIC-NEXT:    retq
3075;
3076; DARWIN-32-STATIC-LABEL: ind07:
3077; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3078; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3079; DARWIN-32-STATIC-NEXT:    leal _ldst(,%eax,4), %eax
3080; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
3081; DARWIN-32-STATIC-NEXT:    retl
3082;
3083; DARWIN-32-DYNAMIC-LABEL: ind07:
3084; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3085; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3086; DARWIN-32-DYNAMIC-NEXT:    leal _ldst(,%eax,4), %eax
3087; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
3088; DARWIN-32-DYNAMIC-NEXT:    retl
3089;
3090; DARWIN-32-PIC-LABEL: ind07:
3091; DARWIN-32-PIC:       ## %bb.0: ## %entry
3092; DARWIN-32-PIC-NEXT:    calll L34$pb
3093; DARWIN-32-PIC-NEXT:  L34$pb:
3094; DARWIN-32-PIC-NEXT:    popl %eax
3095; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3096; DARWIN-32-PIC-NEXT:    leal _ldst-L34$pb(%eax,%ecx,4), %ecx
3097; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L34$pb(%eax)
3098; DARWIN-32-PIC-NEXT:    retl
3099;
3100; DARWIN-64-STATIC-LABEL: ind07:
3101; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3102; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
3103; DARWIN-64-STATIC-NEXT:    leaq (%rax,%rdi,4), %rax
3104; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
3105; DARWIN-64-STATIC-NEXT:    retq
3106;
3107; DARWIN-64-DYNAMIC-LABEL: ind07:
3108; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3109; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
3110; DARWIN-64-DYNAMIC-NEXT:    leaq (%rax,%rdi,4), %rax
3111; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
3112; DARWIN-64-DYNAMIC-NEXT:    retq
3113;
3114; DARWIN-64-PIC-LABEL: ind07:
3115; DARWIN-64-PIC:       ## %bb.0: ## %entry
3116; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
3117; DARWIN-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
3118; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
3119; DARWIN-64-PIC-NEXT:    retq
3120
3121entry:
3122	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
3123	store i32* %0, i32** @lptr, align 8
3124	ret void
3125}
3126
3127define dso_local void @ind08(i64 %i) nounwind {
3128; LINUX-64-STATIC-LABEL: ind08:
3129; LINUX-64-STATIC:       # %bb.0: # %entry
3130; LINUX-64-STATIC-NEXT:    movl lsrc(,%rdi,4), %eax
3131; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
3132; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3133; LINUX-64-STATIC-NEXT:    retq
3134;
3135; LINUX-32-STATIC-LABEL: ind08:
3136; LINUX-32-STATIC:       # %bb.0: # %entry
3137; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3138; LINUX-32-STATIC-NEXT:    movl lsrc(,%eax,4), %ecx
3139; LINUX-32-STATIC-NEXT:    movl lptr, %edx
3140; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
3141; LINUX-32-STATIC-NEXT:    retl
3142;
3143; LINUX-32-PIC-LABEL: ind08:
3144; LINUX-32-PIC:       # %bb.0: # %entry
3145; LINUX-32-PIC-NEXT:    calll .L35$pb
3146; LINUX-32-PIC-NEXT:  .L35$pb:
3147; LINUX-32-PIC-NEXT:    popl %eax
3148; LINUX-32-PIC-NEXT:  .Ltmp35:
3149; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp35-.L35$pb), %eax
3150; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3151; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax,%ecx,4), %edx
3152; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
3153; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
3154; LINUX-32-PIC-NEXT:    retl
3155;
3156; LINUX-64-PIC-LABEL: ind08:
3157; LINUX-64-PIC:       # %bb.0: # %entry
3158; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
3159; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
3160; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
3161; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3162; LINUX-64-PIC-NEXT:    retq
3163;
3164; DARWIN-32-STATIC-LABEL: ind08:
3165; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3166; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3167; DARWIN-32-STATIC-NEXT:    movl _lsrc(,%eax,4), %ecx
3168; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
3169; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
3170; DARWIN-32-STATIC-NEXT:    retl
3171;
3172; DARWIN-32-DYNAMIC-LABEL: ind08:
3173; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3174; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3175; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc(,%eax,4), %ecx
3176; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
3177; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
3178; DARWIN-32-DYNAMIC-NEXT:    retl
3179;
3180; DARWIN-32-PIC-LABEL: ind08:
3181; DARWIN-32-PIC:       ## %bb.0: ## %entry
3182; DARWIN-32-PIC-NEXT:    calll L35$pb
3183; DARWIN-32-PIC-NEXT:  L35$pb:
3184; DARWIN-32-PIC-NEXT:    popl %eax
3185; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3186; DARWIN-32-PIC-NEXT:    movl _lsrc-L35$pb(%eax,%ecx,4), %edx
3187; DARWIN-32-PIC-NEXT:    movl _lptr-L35$pb(%eax), %eax
3188; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
3189; DARWIN-32-PIC-NEXT:    retl
3190;
3191; DARWIN-64-STATIC-LABEL: ind08:
3192; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3193; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
3194; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
3195; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
3196; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3197; DARWIN-64-STATIC-NEXT:    retq
3198;
3199; DARWIN-64-DYNAMIC-LABEL: ind08:
3200; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3201; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
3202; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
3203; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
3204; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3205; DARWIN-64-DYNAMIC-NEXT:    retq
3206;
3207; DARWIN-64-PIC-LABEL: ind08:
3208; DARWIN-64-PIC:       ## %bb.0: ## %entry
3209; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
3210; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
3211; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
3212; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
3213; DARWIN-64-PIC-NEXT:    retq
3214
3215entry:
3216	%0 = load i32*, i32** @lptr, align 8
3217	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
3218	%2 = load i32, i32* %1, align 4
3219	%3 = getelementptr i32, i32* %0, i64 %i
3220	store i32 %2, i32* %3, align 4
3221	ret void
3222}
3223
3224define dso_local void @off00(i64 %i) nounwind {
3225; LINUX-64-STATIC-LABEL: off00:
3226; LINUX-64-STATIC:       # %bb.0: # %entry
3227; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
3228; LINUX-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3229; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
3230; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3231; LINUX-64-STATIC-NEXT:    retq
3232;
3233; LINUX-32-STATIC-LABEL: off00:
3234; LINUX-32-STATIC:       # %bb.0: # %entry
3235; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3236; LINUX-32-STATIC-NEXT:    movl src+64(,%eax,4), %ecx
3237; LINUX-32-STATIC-NEXT:    movl %ecx, dst+64(,%eax,4)
3238; LINUX-32-STATIC-NEXT:    retl
3239;
3240; LINUX-32-PIC-LABEL: off00:
3241; LINUX-32-PIC:       # %bb.0: # %entry
3242; LINUX-32-PIC-NEXT:    calll .L36$pb
3243; LINUX-32-PIC-NEXT:  .L36$pb:
3244; LINUX-32-PIC-NEXT:    popl %eax
3245; LINUX-32-PIC-NEXT:  .Ltmp36:
3246; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp36-.L36$pb), %eax
3247; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3248; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
3249; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3250; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
3251; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3252; LINUX-32-PIC-NEXT:    retl
3253;
3254; LINUX-64-PIC-LABEL: off00:
3255; LINUX-64-PIC:       # %bb.0: # %entry
3256; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
3257; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3258; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
3259; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3260; LINUX-64-PIC-NEXT:    retq
3261;
3262; DARWIN-32-STATIC-LABEL: off00:
3263; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3264; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3265; DARWIN-32-STATIC-NEXT:    movl _src+64(,%eax,4), %ecx
3266; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst+64(,%eax,4)
3267; DARWIN-32-STATIC-NEXT:    retl
3268;
3269; DARWIN-32-DYNAMIC-LABEL: off00:
3270; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3271; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3272; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
3273; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
3274; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
3275; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3276; DARWIN-32-DYNAMIC-NEXT:    retl
3277;
3278; DARWIN-32-PIC-LABEL: off00:
3279; DARWIN-32-PIC:       ## %bb.0: ## %entry
3280; DARWIN-32-PIC-NEXT:    calll L36$pb
3281; DARWIN-32-PIC-NEXT:  L36$pb:
3282; DARWIN-32-PIC-NEXT:    popl %eax
3283; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3284; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L36$pb(%eax), %edx
3285; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3286; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L36$pb(%eax), %eax
3287; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3288; DARWIN-32-PIC-NEXT:    retl
3289;
3290; DARWIN-64-STATIC-LABEL: off00:
3291; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3292; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3293; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3294; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
3295; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3296; DARWIN-64-STATIC-NEXT:    retq
3297;
3298; DARWIN-64-DYNAMIC-LABEL: off00:
3299; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3300; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3301; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3302; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
3303; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3304; DARWIN-64-DYNAMIC-NEXT:    retq
3305;
3306; DARWIN-64-PIC-LABEL: off00:
3307; DARWIN-64-PIC:       ## %bb.0: ## %entry
3308; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3309; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3310; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
3311; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3312; DARWIN-64-PIC-NEXT:    retq
3313
3314entry:
3315	%0 = add i64 %i, 16
3316	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
3317	%2 = load i32, i32* %1, align 4
3318	%3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
3319	store i32 %2, i32* %3, align 4
3320	ret void
3321}
3322
3323define dso_local void @oxf00(i64 %i) nounwind {
3324; LINUX-64-STATIC-LABEL: oxf00:
3325; LINUX-64-STATIC:       # %bb.0: # %entry
3326; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
3327; LINUX-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3328; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
3329; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3330; LINUX-64-STATIC-NEXT:    retq
3331;
3332; LINUX-32-STATIC-LABEL: oxf00:
3333; LINUX-32-STATIC:       # %bb.0: # %entry
3334; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3335; LINUX-32-STATIC-NEXT:    movl xsrc+64(,%eax,4), %ecx
3336; LINUX-32-STATIC-NEXT:    movl %ecx, xdst+64(,%eax,4)
3337; LINUX-32-STATIC-NEXT:    retl
3338;
3339; LINUX-32-PIC-LABEL: oxf00:
3340; LINUX-32-PIC:       # %bb.0: # %entry
3341; LINUX-32-PIC-NEXT:    calll .L37$pb
3342; LINUX-32-PIC-NEXT:  .L37$pb:
3343; LINUX-32-PIC-NEXT:    popl %eax
3344; LINUX-32-PIC-NEXT:  .Ltmp37:
3345; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp37-.L37$pb), %eax
3346; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3347; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
3348; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3349; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
3350; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3351; LINUX-32-PIC-NEXT:    retl
3352;
3353; LINUX-64-PIC-LABEL: oxf00:
3354; LINUX-64-PIC:       # %bb.0: # %entry
3355; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
3356; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3357; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
3358; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3359; LINUX-64-PIC-NEXT:    retq
3360;
3361; DARWIN-32-STATIC-LABEL: oxf00:
3362; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3363; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3364; DARWIN-32-STATIC-NEXT:    movl _xsrc+64(,%eax,4), %ecx
3365; DARWIN-32-STATIC-NEXT:    movl %ecx, _xdst+64(,%eax,4)
3366; DARWIN-32-STATIC-NEXT:    retl
3367;
3368; DARWIN-32-DYNAMIC-LABEL: oxf00:
3369; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3370; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3371; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
3372; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
3373; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %edx
3374; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3375; DARWIN-32-DYNAMIC-NEXT:    retl
3376;
3377; DARWIN-32-PIC-LABEL: oxf00:
3378; DARWIN-32-PIC:       ## %bb.0: ## %entry
3379; DARWIN-32-PIC-NEXT:    calll L37$pb
3380; DARWIN-32-PIC-NEXT:  L37$pb:
3381; DARWIN-32-PIC-NEXT:    popl %eax
3382; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3383; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L37$pb(%eax), %edx
3384; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3385; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L37$pb(%eax), %eax
3386; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3387; DARWIN-32-PIC-NEXT:    retl
3388;
3389; DARWIN-64-STATIC-LABEL: oxf00:
3390; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3391; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3392; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3393; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
3394; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3395; DARWIN-64-STATIC-NEXT:    retq
3396;
3397; DARWIN-64-DYNAMIC-LABEL: oxf00:
3398; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3399; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3400; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3401; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
3402; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3403; DARWIN-64-DYNAMIC-NEXT:    retq
3404;
3405; DARWIN-64-PIC-LABEL: oxf00:
3406; DARWIN-64-PIC:       ## %bb.0: ## %entry
3407; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3408; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3409; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
3410; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3411; DARWIN-64-PIC-NEXT:    retq
3412
3413entry:
3414	%0 = add i64 %i, 16
3415	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
3416	%2 = load i32, i32* %1, align 4
3417	%3 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
3418	store i32 %2, i32* %3, align 4
3419	ret void
3420}
3421
3422define dso_local void @off01(i64 %i) nounwind {
3423; LINUX-64-STATIC-LABEL: off01:
3424; LINUX-64-STATIC:       # %bb.0: # %entry
3425; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
3426; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3427; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3428; LINUX-64-STATIC-NEXT:    movq %rax, (%rcx)
3429; LINUX-64-STATIC-NEXT:    retq
3430;
3431; LINUX-32-STATIC-LABEL: off01:
3432; LINUX-32-STATIC:       # %bb.0: # %entry
3433; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3434; LINUX-32-STATIC-NEXT:    leal dst+64(,%eax,4), %eax
3435; LINUX-32-STATIC-NEXT:    movl %eax, ptr
3436; LINUX-32-STATIC-NEXT:    retl
3437;
3438; LINUX-32-PIC-LABEL: off01:
3439; LINUX-32-PIC:       # %bb.0: # %entry
3440; LINUX-32-PIC-NEXT:    calll .L38$pb
3441; LINUX-32-PIC-NEXT:  .L38$pb:
3442; LINUX-32-PIC-NEXT:    popl %eax
3443; LINUX-32-PIC-NEXT:  .Ltmp38:
3444; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp38-.L38$pb), %eax
3445; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3446; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %edx
3447; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3448; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
3449; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
3450; LINUX-32-PIC-NEXT:    retl
3451;
3452; LINUX-64-PIC-LABEL: off01:
3453; LINUX-64-PIC:       # %bb.0: # %entry
3454; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
3455; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3456; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3457; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
3458; LINUX-64-PIC-NEXT:    retq
3459;
3460; DARWIN-32-STATIC-LABEL: off01:
3461; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3462; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3463; DARWIN-32-STATIC-NEXT:    leal _dst+64(,%eax,4), %eax
3464; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
3465; DARWIN-32-STATIC-NEXT:    retl
3466;
3467; DARWIN-32-DYNAMIC-LABEL: off01:
3468; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3469; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3470; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
3471; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
3472; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
3473; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
3474; DARWIN-32-DYNAMIC-NEXT:    retl
3475;
3476; DARWIN-32-PIC-LABEL: off01:
3477; DARWIN-32-PIC:       ## %bb.0: ## %entry
3478; DARWIN-32-PIC-NEXT:    calll L38$pb
3479; DARWIN-32-PIC-NEXT:  L38$pb:
3480; DARWIN-32-PIC-NEXT:    popl %eax
3481; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3482; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L38$pb(%eax), %edx
3483; DARWIN-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3484; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L38$pb(%eax), %eax
3485; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
3486; DARWIN-32-PIC-NEXT:    retl
3487;
3488; DARWIN-64-STATIC-LABEL: off01:
3489; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3490; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
3491; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3492; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3493; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
3494; DARWIN-64-STATIC-NEXT:    retq
3495;
3496; DARWIN-64-DYNAMIC-LABEL: off01:
3497; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3498; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
3499; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3500; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3501; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
3502; DARWIN-64-DYNAMIC-NEXT:    retq
3503;
3504; DARWIN-64-PIC-LABEL: off01:
3505; DARWIN-64-PIC:       ## %bb.0: ## %entry
3506; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
3507; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3508; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3509; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
3510; DARWIN-64-PIC-NEXT:    retq
3511
3512entry:
3513	%.sum = add i64 %i, 16
3514	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
3515	store i32* %0, i32** @ptr, align 8
3516	ret void
3517}
3518
3519define dso_local void @oxf01(i64 %i) nounwind {
3520; LINUX-64-STATIC-LABEL: oxf01:
3521; LINUX-64-STATIC:       # %bb.0: # %entry
3522; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
3523; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3524; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3525; LINUX-64-STATIC-NEXT:    movq %rax, (%rcx)
3526; LINUX-64-STATIC-NEXT:    retq
3527;
3528; LINUX-32-STATIC-LABEL: oxf01:
3529; LINUX-32-STATIC:       # %bb.0: # %entry
3530; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3531; LINUX-32-STATIC-NEXT:    leal xdst+64(,%eax,4), %eax
3532; LINUX-32-STATIC-NEXT:    movl %eax, ptr
3533; LINUX-32-STATIC-NEXT:    retl
3534;
3535; LINUX-32-PIC-LABEL: oxf01:
3536; LINUX-32-PIC:       # %bb.0: # %entry
3537; LINUX-32-PIC-NEXT:    calll .L39$pb
3538; LINUX-32-PIC-NEXT:  .L39$pb:
3539; LINUX-32-PIC-NEXT:    popl %eax
3540; LINUX-32-PIC-NEXT:  .Ltmp39:
3541; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp39-.L39$pb), %eax
3542; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3543; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %edx
3544; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3545; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
3546; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
3547; LINUX-32-PIC-NEXT:    retl
3548;
3549; LINUX-64-PIC-LABEL: oxf01:
3550; LINUX-64-PIC:       # %bb.0: # %entry
3551; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
3552; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3553; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3554; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
3555; LINUX-64-PIC-NEXT:    retq
3556;
3557; DARWIN-32-STATIC-LABEL: oxf01:
3558; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3559; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3560; DARWIN-32-STATIC-NEXT:    leal _xdst+64(,%eax,4), %eax
3561; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
3562; DARWIN-32-STATIC-NEXT:    retl
3563;
3564; DARWIN-32-DYNAMIC-LABEL: oxf01:
3565; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3566; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3567; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
3568; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
3569; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
3570; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
3571; DARWIN-32-DYNAMIC-NEXT:    retl
3572;
3573; DARWIN-32-PIC-LABEL: oxf01:
3574; DARWIN-32-PIC:       ## %bb.0: ## %entry
3575; DARWIN-32-PIC-NEXT:    calll L39$pb
3576; DARWIN-32-PIC-NEXT:  L39$pb:
3577; DARWIN-32-PIC-NEXT:    popl %eax
3578; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3579; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L39$pb(%eax), %edx
3580; DARWIN-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
3581; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L39$pb(%eax), %eax
3582; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
3583; DARWIN-32-PIC-NEXT:    retl
3584;
3585; DARWIN-64-STATIC-LABEL: oxf01:
3586; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3587; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
3588; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3589; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3590; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
3591; DARWIN-64-STATIC-NEXT:    retq
3592;
3593; DARWIN-64-DYNAMIC-LABEL: oxf01:
3594; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3595; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
3596; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3597; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3598; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
3599; DARWIN-64-DYNAMIC-NEXT:    retq
3600;
3601; DARWIN-64-PIC-LABEL: oxf01:
3602; DARWIN-64-PIC:       ## %bb.0: ## %entry
3603; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
3604; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3605; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3606; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
3607; DARWIN-64-PIC-NEXT:    retq
3608
3609entry:
3610	%.sum = add i64 %i, 16
3611	%0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %.sum
3612	store i32* %0, i32** @ptr, align 8
3613	ret void
3614}
3615
3616define dso_local void @off02(i64 %i) nounwind {
3617; LINUX-64-STATIC-LABEL: off02:
3618; LINUX-64-STATIC:       # %bb.0: # %entry
3619; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
3620; LINUX-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3621; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3622; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
3623; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3624; LINUX-64-STATIC-NEXT:    retq
3625;
3626; LINUX-32-STATIC-LABEL: off02:
3627; LINUX-32-STATIC:       # %bb.0: # %entry
3628; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3629; LINUX-32-STATIC-NEXT:    movl src+64(,%eax,4), %ecx
3630; LINUX-32-STATIC-NEXT:    movl ptr, %edx
3631; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3632; LINUX-32-STATIC-NEXT:    retl
3633;
3634; LINUX-32-PIC-LABEL: off02:
3635; LINUX-32-PIC:       # %bb.0: # %entry
3636; LINUX-32-PIC-NEXT:    calll .L40$pb
3637; LINUX-32-PIC-NEXT:  .L40$pb:
3638; LINUX-32-PIC-NEXT:    popl %eax
3639; LINUX-32-PIC-NEXT:  .Ltmp40:
3640; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp40-.L40$pb), %eax
3641; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3642; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
3643; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3644; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
3645; LINUX-32-PIC-NEXT:    movl (%eax), %eax
3646; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3647; LINUX-32-PIC-NEXT:    retl
3648;
3649; LINUX-64-PIC-LABEL: off02:
3650; LINUX-64-PIC:       # %bb.0: # %entry
3651; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
3652; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3653; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3654; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
3655; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3656; LINUX-64-PIC-NEXT:    retq
3657;
3658; DARWIN-32-STATIC-LABEL: off02:
3659; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3660; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3661; DARWIN-32-STATIC-NEXT:    movl _src+64(,%eax,4), %ecx
3662; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
3663; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3664; DARWIN-32-STATIC-NEXT:    retl
3665;
3666; DARWIN-32-DYNAMIC-LABEL: off02:
3667; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3668; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3669; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
3670; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
3671; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
3672; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
3673; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3674; DARWIN-32-DYNAMIC-NEXT:    retl
3675;
3676; DARWIN-32-PIC-LABEL: off02:
3677; DARWIN-32-PIC:       ## %bb.0: ## %entry
3678; DARWIN-32-PIC-NEXT:    calll L40$pb
3679; DARWIN-32-PIC-NEXT:  L40$pb:
3680; DARWIN-32-PIC-NEXT:    popl %eax
3681; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3682; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L40$pb(%eax), %edx
3683; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3684; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L40$pb(%eax), %eax
3685; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
3686; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3687; DARWIN-32-PIC-NEXT:    retl
3688;
3689; DARWIN-64-STATIC-LABEL: off02:
3690; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3691; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3692; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3693; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3694; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
3695; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3696; DARWIN-64-STATIC-NEXT:    retq
3697;
3698; DARWIN-64-DYNAMIC-LABEL: off02:
3699; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3700; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3701; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3702; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3703; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
3704; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3705; DARWIN-64-DYNAMIC-NEXT:    retq
3706;
3707; DARWIN-64-PIC-LABEL: off02:
3708; DARWIN-64-PIC:       ## %bb.0: ## %entry
3709; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
3710; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3711; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3712; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
3713; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3714; DARWIN-64-PIC-NEXT:    retq
3715
3716entry:
3717	%0 = load i32*, i32** @ptr, align 8
3718	%1 = add i64 %i, 16
3719	%2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
3720	%3 = load i32, i32* %2, align 4
3721	%4 = getelementptr i32, i32* %0, i64 %1
3722	store i32 %3, i32* %4, align 4
3723	ret void
3724}
3725
3726define dso_local void @oxf02(i64 %i) nounwind {
3727; LINUX-64-STATIC-LABEL: oxf02:
3728; LINUX-64-STATIC:       # %bb.0: # %entry
3729; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
3730; LINUX-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3731; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3732; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
3733; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3734; LINUX-64-STATIC-NEXT:    retq
3735;
3736; LINUX-32-STATIC-LABEL: oxf02:
3737; LINUX-32-STATIC:       # %bb.0: # %entry
3738; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3739; LINUX-32-STATIC-NEXT:    movl xsrc+64(,%eax,4), %ecx
3740; LINUX-32-STATIC-NEXT:    movl ptr, %edx
3741; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3742; LINUX-32-STATIC-NEXT:    retl
3743;
3744; LINUX-32-PIC-LABEL: oxf02:
3745; LINUX-32-PIC:       # %bb.0: # %entry
3746; LINUX-32-PIC-NEXT:    calll .L41$pb
3747; LINUX-32-PIC-NEXT:  .L41$pb:
3748; LINUX-32-PIC-NEXT:    popl %eax
3749; LINUX-32-PIC-NEXT:  .Ltmp41:
3750; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp41-.L41$pb), %eax
3751; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3752; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
3753; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3754; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
3755; LINUX-32-PIC-NEXT:    movl (%eax), %eax
3756; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3757; LINUX-32-PIC-NEXT:    retl
3758;
3759; LINUX-64-PIC-LABEL: oxf02:
3760; LINUX-64-PIC:       # %bb.0: # %entry
3761; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
3762; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3763; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
3764; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
3765; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3766; LINUX-64-PIC-NEXT:    retq
3767;
3768; DARWIN-32-STATIC-LABEL: oxf02:
3769; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3770; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3771; DARWIN-32-STATIC-NEXT:    movl _xsrc+64(,%eax,4), %ecx
3772; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
3773; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3774; DARWIN-32-STATIC-NEXT:    retl
3775;
3776; DARWIN-32-DYNAMIC-LABEL: oxf02:
3777; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3778; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3779; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
3780; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
3781; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
3782; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
3783; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
3784; DARWIN-32-DYNAMIC-NEXT:    retl
3785;
3786; DARWIN-32-PIC-LABEL: oxf02:
3787; DARWIN-32-PIC:       ## %bb.0: ## %entry
3788; DARWIN-32-PIC-NEXT:    calll L41$pb
3789; DARWIN-32-PIC-NEXT:  L41$pb:
3790; DARWIN-32-PIC-NEXT:    popl %eax
3791; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3792; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L41$pb(%eax), %edx
3793; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
3794; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L41$pb(%eax), %eax
3795; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
3796; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
3797; DARWIN-32-PIC-NEXT:    retl
3798;
3799; DARWIN-64-STATIC-LABEL: oxf02:
3800; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3801; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3802; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3803; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3804; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
3805; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3806; DARWIN-64-STATIC-NEXT:    retq
3807;
3808; DARWIN-64-DYNAMIC-LABEL: oxf02:
3809; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3810; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3811; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3812; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3813; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
3814; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3815; DARWIN-64-DYNAMIC-NEXT:    retq
3816;
3817; DARWIN-64-PIC-LABEL: oxf02:
3818; DARWIN-64-PIC:       ## %bb.0: ## %entry
3819; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
3820; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3821; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
3822; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
3823; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3824; DARWIN-64-PIC-NEXT:    retq
3825
3826entry:
3827	%0 = load i32*, i32** @ptr, align 8
3828	%1 = add i64 %i, 16
3829	%2 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %1
3830	%3 = load i32, i32* %2, align 4
3831	%4 = getelementptr i32, i32* %0, i64 %1
3832	store i32 %3, i32* %4, align 4
3833	ret void
3834}
3835
3836define dso_local void @off03(i64 %i) nounwind {
3837; LINUX-64-STATIC-LABEL: off03:
3838; LINUX-64-STATIC:       # %bb.0: # %entry
3839; LINUX-64-STATIC-NEXT:    movl dsrc+64(,%rdi,4), %eax
3840; LINUX-64-STATIC-NEXT:    movl %eax, ddst+64(,%rdi,4)
3841; LINUX-64-STATIC-NEXT:    retq
3842;
3843; LINUX-32-STATIC-LABEL: off03:
3844; LINUX-32-STATIC:       # %bb.0: # %entry
3845; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3846; LINUX-32-STATIC-NEXT:    movl dsrc+64(,%eax,4), %ecx
3847; LINUX-32-STATIC-NEXT:    movl %ecx, ddst+64(,%eax,4)
3848; LINUX-32-STATIC-NEXT:    retl
3849;
3850; LINUX-32-PIC-LABEL: off03:
3851; LINUX-32-PIC:       # %bb.0: # %entry
3852; LINUX-32-PIC-NEXT:    calll .L42$pb
3853; LINUX-32-PIC-NEXT:  .L42$pb:
3854; LINUX-32-PIC-NEXT:    popl %eax
3855; LINUX-32-PIC-NEXT:  .Ltmp42:
3856; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp42-.L42$pb), %eax
3857; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3858; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF+64(%eax,%ecx,4), %edx
3859; LINUX-32-PIC-NEXT:    movl %edx, .Lddst$local@GOTOFF+64(%eax,%ecx,4)
3860; LINUX-32-PIC-NEXT:    retl
3861;
3862; LINUX-64-PIC-LABEL: off03:
3863; LINUX-64-PIC:       # %bb.0: # %entry
3864; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
3865; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3866; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rcx
3867; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3868; LINUX-64-PIC-NEXT:    retq
3869;
3870; DARWIN-32-STATIC-LABEL: off03:
3871; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3872; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3873; DARWIN-32-STATIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
3874; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst+64(,%eax,4)
3875; DARWIN-32-STATIC-NEXT:    retl
3876;
3877; DARWIN-32-DYNAMIC-LABEL: off03:
3878; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3879; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3880; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
3881; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst+64(,%eax,4)
3882; DARWIN-32-DYNAMIC-NEXT:    retl
3883;
3884; DARWIN-32-PIC-LABEL: off03:
3885; DARWIN-32-PIC:       ## %bb.0: ## %entry
3886; DARWIN-32-PIC-NEXT:    calll L42$pb
3887; DARWIN-32-PIC-NEXT:  L42$pb:
3888; DARWIN-32-PIC-NEXT:    popl %eax
3889; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3890; DARWIN-32-PIC-NEXT:    movl (_dsrc-L42$pb)+64(%eax,%ecx,4), %edx
3891; DARWIN-32-PIC-NEXT:    movl %edx, (_ddst-L42$pb)+64(%eax,%ecx,4)
3892; DARWIN-32-PIC-NEXT:    retl
3893;
3894; DARWIN-64-STATIC-LABEL: off03:
3895; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3896; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
3897; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3898; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
3899; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3900; DARWIN-64-STATIC-NEXT:    retq
3901;
3902; DARWIN-64-DYNAMIC-LABEL: off03:
3903; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3904; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
3905; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3906; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
3907; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3908; DARWIN-64-DYNAMIC-NEXT:    retq
3909;
3910; DARWIN-64-PIC-LABEL: off03:
3911; DARWIN-64-PIC:       ## %bb.0: ## %entry
3912; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
3913; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
3914; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
3915; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
3916; DARWIN-64-PIC-NEXT:    retq
3917
3918entry:
3919	%0 = add i64 %i, 16
3920	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
3921	%2 = load i32, i32* %1, align 4
3922	%3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
3923	store i32 %2, i32* %3, align 4
3924	ret void
3925}
3926
3927define dso_local void @off04(i64 %i) nounwind {
3928; LINUX-64-STATIC-LABEL: off04:
3929; LINUX-64-STATIC:       # %bb.0: # %entry
3930; LINUX-64-STATIC-NEXT:    leaq ddst+64(,%rdi,4), %rax
3931; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
3932; LINUX-64-STATIC-NEXT:    retq
3933;
3934; LINUX-32-STATIC-LABEL: off04:
3935; LINUX-32-STATIC:       # %bb.0: # %entry
3936; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3937; LINUX-32-STATIC-NEXT:    leal ddst+64(,%eax,4), %eax
3938; LINUX-32-STATIC-NEXT:    movl %eax, dptr
3939; LINUX-32-STATIC-NEXT:    retl
3940;
3941; LINUX-32-PIC-LABEL: off04:
3942; LINUX-32-PIC:       # %bb.0: # %entry
3943; LINUX-32-PIC-NEXT:    calll .L43$pb
3944; LINUX-32-PIC-NEXT:  .L43$pb:
3945; LINUX-32-PIC-NEXT:    popl %eax
3946; LINUX-32-PIC-NEXT:  .Ltmp43:
3947; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp43-.L43$pb), %eax
3948; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3949; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+64(%eax,%ecx,4), %ecx
3950; LINUX-32-PIC-NEXT:    movl %ecx, .Ldptr$local@GOTOFF(%eax)
3951; LINUX-32-PIC-NEXT:    retl
3952;
3953; LINUX-64-PIC-LABEL: off04:
3954; LINUX-64-PIC:       # %bb.0: # %entry
3955; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
3956; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3957; LINUX-64-PIC-NEXT:    movq %rax, .Ldptr$local(%rip)
3958; LINUX-64-PIC-NEXT:    retq
3959;
3960; DARWIN-32-STATIC-LABEL: off04:
3961; DARWIN-32-STATIC:       ## %bb.0: ## %entry
3962; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3963; DARWIN-32-STATIC-NEXT:    leal _ddst+64(,%eax,4), %eax
3964; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
3965; DARWIN-32-STATIC-NEXT:    retl
3966;
3967; DARWIN-32-DYNAMIC-LABEL: off04:
3968; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
3969; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3970; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+64(,%eax,4), %eax
3971; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
3972; DARWIN-32-DYNAMIC-NEXT:    retl
3973;
3974; DARWIN-32-PIC-LABEL: off04:
3975; DARWIN-32-PIC:       ## %bb.0: ## %entry
3976; DARWIN-32-PIC-NEXT:    calll L43$pb
3977; DARWIN-32-PIC-NEXT:  L43$pb:
3978; DARWIN-32-PIC-NEXT:    popl %eax
3979; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3980; DARWIN-32-PIC-NEXT:    leal (_ddst-L43$pb)+64(%eax,%ecx,4), %ecx
3981; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L43$pb(%eax)
3982; DARWIN-32-PIC-NEXT:    retl
3983;
3984; DARWIN-64-STATIC-LABEL: off04:
3985; DARWIN-64-STATIC:       ## %bb.0: ## %entry
3986; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
3987; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3988; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
3989; DARWIN-64-STATIC-NEXT:    retq
3990;
3991; DARWIN-64-DYNAMIC-LABEL: off04:
3992; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
3993; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
3994; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
3995; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
3996; DARWIN-64-DYNAMIC-NEXT:    retq
3997;
3998; DARWIN-64-PIC-LABEL: off04:
3999; DARWIN-64-PIC:       ## %bb.0: ## %entry
4000; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
4001; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4002; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
4003; DARWIN-64-PIC-NEXT:    retq
4004
4005entry:
4006	%.sum = add i64 %i, 16
4007	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
4008	store i32* %0, i32** @dptr, align 8
4009	ret void
4010}
4011
4012define dso_local void @off05(i64 %i) nounwind {
4013; LINUX-64-STATIC-LABEL: off05:
4014; LINUX-64-STATIC:       # %bb.0: # %entry
4015; LINUX-64-STATIC-NEXT:    movl dsrc+64(,%rdi,4), %eax
4016; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
4017; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4018; LINUX-64-STATIC-NEXT:    retq
4019;
4020; LINUX-32-STATIC-LABEL: off05:
4021; LINUX-32-STATIC:       # %bb.0: # %entry
4022; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4023; LINUX-32-STATIC-NEXT:    movl dsrc+64(,%eax,4), %ecx
4024; LINUX-32-STATIC-NEXT:    movl dptr, %edx
4025; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4026; LINUX-32-STATIC-NEXT:    retl
4027;
4028; LINUX-32-PIC-LABEL: off05:
4029; LINUX-32-PIC:       # %bb.0: # %entry
4030; LINUX-32-PIC-NEXT:    calll .L44$pb
4031; LINUX-32-PIC-NEXT:  .L44$pb:
4032; LINUX-32-PIC-NEXT:    popl %eax
4033; LINUX-32-PIC-NEXT:  .Ltmp44:
4034; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp44-.L44$pb), %eax
4035; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4036; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF+64(%eax,%ecx,4), %edx
4037; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
4038; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
4039; LINUX-32-PIC-NEXT:    retl
4040;
4041; LINUX-64-PIC-LABEL: off05:
4042; LINUX-64-PIC:       # %bb.0: # %entry
4043; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
4044; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4045; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rcx
4046; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4047; LINUX-64-PIC-NEXT:    retq
4048;
4049; DARWIN-32-STATIC-LABEL: off05:
4050; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4051; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4052; DARWIN-32-STATIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
4053; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
4054; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4055; DARWIN-32-STATIC-NEXT:    retl
4056;
4057; DARWIN-32-DYNAMIC-LABEL: off05:
4058; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4059; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4060; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
4061; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
4062; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4063; DARWIN-32-DYNAMIC-NEXT:    retl
4064;
4065; DARWIN-32-PIC-LABEL: off05:
4066; DARWIN-32-PIC:       ## %bb.0: ## %entry
4067; DARWIN-32-PIC-NEXT:    calll L44$pb
4068; DARWIN-32-PIC-NEXT:  L44$pb:
4069; DARWIN-32-PIC-NEXT:    popl %eax
4070; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4071; DARWIN-32-PIC-NEXT:    movl (_dsrc-L44$pb)+64(%eax,%ecx,4), %edx
4072; DARWIN-32-PIC-NEXT:    movl _dptr-L44$pb(%eax), %eax
4073; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
4074; DARWIN-32-PIC-NEXT:    retl
4075;
4076; DARWIN-64-STATIC-LABEL: off05:
4077; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4078; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
4079; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4080; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
4081; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4082; DARWIN-64-STATIC-NEXT:    retq
4083;
4084; DARWIN-64-DYNAMIC-LABEL: off05:
4085; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4086; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
4087; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4088; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
4089; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4090; DARWIN-64-DYNAMIC-NEXT:    retq
4091;
4092; DARWIN-64-PIC-LABEL: off05:
4093; DARWIN-64-PIC:       ## %bb.0: ## %entry
4094; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
4095; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4096; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
4097; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4098; DARWIN-64-PIC-NEXT:    retq
4099
4100entry:
4101	%0 = load i32*, i32** @dptr, align 8
4102	%1 = add i64 %i, 16
4103	%2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
4104	%3 = load i32, i32* %2, align 4
4105	%4 = getelementptr i32, i32* %0, i64 %1
4106	store i32 %3, i32* %4, align 4
4107	ret void
4108}
4109
4110define dso_local void @off06(i64 %i) nounwind {
4111; LINUX-64-STATIC-LABEL: off06:
4112; LINUX-64-STATIC:       # %bb.0: # %entry
4113; LINUX-64-STATIC-NEXT:    movl lsrc+64(,%rdi,4), %eax
4114; LINUX-64-STATIC-NEXT:    movl %eax, ldst+64(,%rdi,4)
4115; LINUX-64-STATIC-NEXT:    retq
4116;
4117; LINUX-32-STATIC-LABEL: off06:
4118; LINUX-32-STATIC:       # %bb.0: # %entry
4119; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4120; LINUX-32-STATIC-NEXT:    movl lsrc+64(,%eax,4), %ecx
4121; LINUX-32-STATIC-NEXT:    movl %ecx, ldst+64(,%eax,4)
4122; LINUX-32-STATIC-NEXT:    retl
4123;
4124; LINUX-32-PIC-LABEL: off06:
4125; LINUX-32-PIC:       # %bb.0: # %entry
4126; LINUX-32-PIC-NEXT:    calll .L45$pb
4127; LINUX-32-PIC-NEXT:  .L45$pb:
4128; LINUX-32-PIC-NEXT:    popl %eax
4129; LINUX-32-PIC-NEXT:  .Ltmp45:
4130; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp45-.L45$pb), %eax
4131; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4132; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax,%ecx,4), %edx
4133; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF+64(%eax,%ecx,4)
4134; LINUX-32-PIC-NEXT:    retl
4135;
4136; LINUX-64-PIC-LABEL: off06:
4137; LINUX-64-PIC:       # %bb.0: # %entry
4138; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
4139; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4140; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
4141; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4142; LINUX-64-PIC-NEXT:    retq
4143;
4144; DARWIN-32-STATIC-LABEL: off06:
4145; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4146; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4147; DARWIN-32-STATIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
4148; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst+64(,%eax,4)
4149; DARWIN-32-STATIC-NEXT:    retl
4150;
4151; DARWIN-32-DYNAMIC-LABEL: off06:
4152; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4153; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4154; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
4155; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst+64(,%eax,4)
4156; DARWIN-32-DYNAMIC-NEXT:    retl
4157;
4158; DARWIN-32-PIC-LABEL: off06:
4159; DARWIN-32-PIC:       ## %bb.0: ## %entry
4160; DARWIN-32-PIC-NEXT:    calll L45$pb
4161; DARWIN-32-PIC-NEXT:  L45$pb:
4162; DARWIN-32-PIC-NEXT:    popl %eax
4163; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4164; DARWIN-32-PIC-NEXT:    movl (_lsrc-L45$pb)+64(%eax,%ecx,4), %edx
4165; DARWIN-32-PIC-NEXT:    movl %edx, (_ldst-L45$pb)+64(%eax,%ecx,4)
4166; DARWIN-32-PIC-NEXT:    retl
4167;
4168; DARWIN-64-STATIC-LABEL: off06:
4169; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4170; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
4171; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4172; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
4173; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4174; DARWIN-64-STATIC-NEXT:    retq
4175;
4176; DARWIN-64-DYNAMIC-LABEL: off06:
4177; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4178; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
4179; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4180; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
4181; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4182; DARWIN-64-DYNAMIC-NEXT:    retq
4183;
4184; DARWIN-64-PIC-LABEL: off06:
4185; DARWIN-64-PIC:       ## %bb.0: ## %entry
4186; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
4187; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4188; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
4189; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4190; DARWIN-64-PIC-NEXT:    retq
4191
4192entry:
4193	%0 = add i64 %i, 16
4194	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
4195	%2 = load i32, i32* %1, align 4
4196	%3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
4197	store i32 %2, i32* %3, align 4
4198	ret void
4199}
4200
4201define dso_local void @off07(i64 %i) nounwind {
4202; LINUX-64-STATIC-LABEL: off07:
4203; LINUX-64-STATIC:       # %bb.0: # %entry
4204; LINUX-64-STATIC-NEXT:    leaq ldst+64(,%rdi,4), %rax
4205; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
4206; LINUX-64-STATIC-NEXT:    retq
4207;
4208; LINUX-32-STATIC-LABEL: off07:
4209; LINUX-32-STATIC:       # %bb.0: # %entry
4210; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4211; LINUX-32-STATIC-NEXT:    leal ldst+64(,%eax,4), %eax
4212; LINUX-32-STATIC-NEXT:    movl %eax, lptr
4213; LINUX-32-STATIC-NEXT:    retl
4214;
4215; LINUX-32-PIC-LABEL: off07:
4216; LINUX-32-PIC:       # %bb.0: # %entry
4217; LINUX-32-PIC-NEXT:    calll .L46$pb
4218; LINUX-32-PIC-NEXT:  .L46$pb:
4219; LINUX-32-PIC-NEXT:    popl %eax
4220; LINUX-32-PIC-NEXT:  .Ltmp46:
4221; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp46-.L46$pb), %eax
4222; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4223; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax,%ecx,4), %ecx
4224; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
4225; LINUX-32-PIC-NEXT:    retl
4226;
4227; LINUX-64-PIC-LABEL: off07:
4228; LINUX-64-PIC:       # %bb.0: # %entry
4229; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
4230; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4231; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
4232; LINUX-64-PIC-NEXT:    retq
4233;
4234; DARWIN-32-STATIC-LABEL: off07:
4235; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4236; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4237; DARWIN-32-STATIC-NEXT:    leal _ldst+64(,%eax,4), %eax
4238; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
4239; DARWIN-32-STATIC-NEXT:    retl
4240;
4241; DARWIN-32-DYNAMIC-LABEL: off07:
4242; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4243; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4244; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+64(,%eax,4), %eax
4245; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
4246; DARWIN-32-DYNAMIC-NEXT:    retl
4247;
4248; DARWIN-32-PIC-LABEL: off07:
4249; DARWIN-32-PIC:       ## %bb.0: ## %entry
4250; DARWIN-32-PIC-NEXT:    calll L46$pb
4251; DARWIN-32-PIC-NEXT:  L46$pb:
4252; DARWIN-32-PIC-NEXT:    popl %eax
4253; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4254; DARWIN-32-PIC-NEXT:    leal (_ldst-L46$pb)+64(%eax,%ecx,4), %ecx
4255; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L46$pb(%eax)
4256; DARWIN-32-PIC-NEXT:    retl
4257;
4258; DARWIN-64-STATIC-LABEL: off07:
4259; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4260; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
4261; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4262; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
4263; DARWIN-64-STATIC-NEXT:    retq
4264;
4265; DARWIN-64-DYNAMIC-LABEL: off07:
4266; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4267; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
4268; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4269; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
4270; DARWIN-64-DYNAMIC-NEXT:    retq
4271;
4272; DARWIN-64-PIC-LABEL: off07:
4273; DARWIN-64-PIC:       ## %bb.0: ## %entry
4274; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
4275; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
4276; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
4277; DARWIN-64-PIC-NEXT:    retq
4278
4279entry:
4280	%.sum = add i64 %i, 16
4281	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
4282	store i32* %0, i32** @lptr, align 8
4283	ret void
4284}
4285
4286define dso_local void @off08(i64 %i) nounwind {
4287; LINUX-64-STATIC-LABEL: off08:
4288; LINUX-64-STATIC:       # %bb.0: # %entry
4289; LINUX-64-STATIC-NEXT:    movl lsrc+64(,%rdi,4), %eax
4290; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
4291; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4292; LINUX-64-STATIC-NEXT:    retq
4293;
4294; LINUX-32-STATIC-LABEL: off08:
4295; LINUX-32-STATIC:       # %bb.0: # %entry
4296; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4297; LINUX-32-STATIC-NEXT:    movl lsrc+64(,%eax,4), %ecx
4298; LINUX-32-STATIC-NEXT:    movl lptr, %edx
4299; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4300; LINUX-32-STATIC-NEXT:    retl
4301;
4302; LINUX-32-PIC-LABEL: off08:
4303; LINUX-32-PIC:       # %bb.0: # %entry
4304; LINUX-32-PIC-NEXT:    calll .L47$pb
4305; LINUX-32-PIC-NEXT:  .L47$pb:
4306; LINUX-32-PIC-NEXT:    popl %eax
4307; LINUX-32-PIC-NEXT:  .Ltmp47:
4308; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp47-.L47$pb), %eax
4309; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4310; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax,%ecx,4), %edx
4311; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
4312; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
4313; LINUX-32-PIC-NEXT:    retl
4314;
4315; LINUX-64-PIC-LABEL: off08:
4316; LINUX-64-PIC:       # %bb.0: # %entry
4317; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
4318; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4319; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
4320; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4321; LINUX-64-PIC-NEXT:    retq
4322;
4323; DARWIN-32-STATIC-LABEL: off08:
4324; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4325; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4326; DARWIN-32-STATIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
4327; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
4328; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4329; DARWIN-32-STATIC-NEXT:    retl
4330;
4331; DARWIN-32-DYNAMIC-LABEL: off08:
4332; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4333; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4334; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
4335; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
4336; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
4337; DARWIN-32-DYNAMIC-NEXT:    retl
4338;
4339; DARWIN-32-PIC-LABEL: off08:
4340; DARWIN-32-PIC:       ## %bb.0: ## %entry
4341; DARWIN-32-PIC-NEXT:    calll L47$pb
4342; DARWIN-32-PIC-NEXT:  L47$pb:
4343; DARWIN-32-PIC-NEXT:    popl %eax
4344; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4345; DARWIN-32-PIC-NEXT:    movl (_lsrc-L47$pb)+64(%eax,%ecx,4), %edx
4346; DARWIN-32-PIC-NEXT:    movl _lptr-L47$pb(%eax), %eax
4347; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
4348; DARWIN-32-PIC-NEXT:    retl
4349;
4350; DARWIN-64-STATIC-LABEL: off08:
4351; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4352; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
4353; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4354; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
4355; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4356; DARWIN-64-STATIC-NEXT:    retq
4357;
4358; DARWIN-64-DYNAMIC-LABEL: off08:
4359; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4360; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
4361; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4362; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
4363; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4364; DARWIN-64-DYNAMIC-NEXT:    retq
4365;
4366; DARWIN-64-PIC-LABEL: off08:
4367; DARWIN-64-PIC:       ## %bb.0: ## %entry
4368; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
4369; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
4370; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
4371; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
4372; DARWIN-64-PIC-NEXT:    retq
4373
4374entry:
4375	%0 = load i32*, i32** @lptr, align 8
4376	%1 = add i64 %i, 16
4377	%2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
4378	%3 = load i32, i32* %2, align 4
4379	%4 = getelementptr i32, i32* %0, i64 %1
4380	store i32 %3, i32* %4, align 4
4381	ret void
4382}
4383
4384define dso_local void @moo00(i64 %i) nounwind {
4385; LINUX-64-STATIC-LABEL: moo00:
4386; LINUX-64-STATIC:       # %bb.0: # %entry
4387; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
4388; LINUX-64-STATIC-NEXT:    movl 262144(%rax), %eax
4389; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
4390; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4391; LINUX-64-STATIC-NEXT:    retq
4392;
4393; LINUX-32-STATIC-LABEL: moo00:
4394; LINUX-32-STATIC:       # %bb.0: # %entry
4395; LINUX-32-STATIC-NEXT:    movl src+262144, %eax
4396; LINUX-32-STATIC-NEXT:    movl %eax, dst+262144
4397; LINUX-32-STATIC-NEXT:    retl
4398;
4399; LINUX-32-PIC-LABEL: moo00:
4400; LINUX-32-PIC:       # %bb.0: # %entry
4401; LINUX-32-PIC-NEXT:    calll .L48$pb
4402; LINUX-32-PIC-NEXT:  .L48$pb:
4403; LINUX-32-PIC-NEXT:    popl %eax
4404; LINUX-32-PIC-NEXT:  .Ltmp48:
4405; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp48-.L48$pb), %eax
4406; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
4407; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4408; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
4409; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4410; LINUX-32-PIC-NEXT:    retl
4411;
4412; LINUX-64-PIC-LABEL: moo00:
4413; LINUX-64-PIC:       # %bb.0: # %entry
4414; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
4415; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
4416; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
4417; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4418; LINUX-64-PIC-NEXT:    retq
4419;
4420; DARWIN-32-STATIC-LABEL: moo00:
4421; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4422; DARWIN-32-STATIC-NEXT:    movl _src+262144, %eax
4423; DARWIN-32-STATIC-NEXT:    movl %eax, _dst+262144
4424; DARWIN-32-STATIC-NEXT:    retl
4425;
4426; DARWIN-32-DYNAMIC-LABEL: moo00:
4427; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4428; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
4429; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%eax), %eax
4430; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
4431; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
4432; DARWIN-32-DYNAMIC-NEXT:    retl
4433;
4434; DARWIN-32-PIC-LABEL: moo00:
4435; DARWIN-32-PIC:       ## %bb.0: ## %entry
4436; DARWIN-32-PIC-NEXT:    calll L48$pb
4437; DARWIN-32-PIC-NEXT:  L48$pb:
4438; DARWIN-32-PIC-NEXT:    popl %eax
4439; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L48$pb(%eax), %ecx
4440; DARWIN-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4441; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L48$pb(%eax), %eax
4442; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4443; DARWIN-32-PIC-NEXT:    retl
4444;
4445; DARWIN-64-STATIC-LABEL: moo00:
4446; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4447; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4448; DARWIN-64-STATIC-NEXT:    movl 262144(%rax), %eax
4449; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
4450; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4451; DARWIN-64-STATIC-NEXT:    retq
4452;
4453; DARWIN-64-DYNAMIC-LABEL: moo00:
4454; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4455; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4456; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax), %eax
4457; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
4458; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
4459; DARWIN-64-DYNAMIC-NEXT:    retq
4460;
4461; DARWIN-64-PIC-LABEL: moo00:
4462; DARWIN-64-PIC:       ## %bb.0: ## %entry
4463; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4464; DARWIN-64-PIC-NEXT:    movl 262144(%rax), %eax
4465; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
4466; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4467; DARWIN-64-PIC-NEXT:    retq
4468
4469entry:
4470	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
4471	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), align 4
4472	ret void
4473}
4474
4475define dso_local void @moo01(i64 %i) nounwind {
4476; LINUX-64-STATIC-LABEL: moo01:
4477; LINUX-64-STATIC:       # %bb.0: # %entry
4478; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
4479; LINUX-64-STATIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
4480; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
4481; LINUX-64-STATIC-NEXT:    movq %rax, (%rcx)
4482; LINUX-64-STATIC-NEXT:    retq
4483;
4484; LINUX-32-STATIC-LABEL: moo01:
4485; LINUX-32-STATIC:       # %bb.0: # %entry
4486; LINUX-32-STATIC-NEXT:    leal dst+262144, %eax
4487; LINUX-32-STATIC-NEXT:    movl %eax, ptr
4488; LINUX-32-STATIC-NEXT:    retl
4489;
4490; LINUX-32-PIC-LABEL: moo01:
4491; LINUX-32-PIC:       # %bb.0: # %entry
4492; LINUX-32-PIC-NEXT:    calll .L49$pb
4493; LINUX-32-PIC-NEXT:  .L49$pb:
4494; LINUX-32-PIC-NEXT:    popl %eax
4495; LINUX-32-PIC-NEXT:  .Ltmp49:
4496; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp49-.L49$pb), %eax
4497; LINUX-32-PIC-NEXT:    movl $262144, %ecx # imm = 0x40000
4498; LINUX-32-PIC-NEXT:    addl dst@GOT(%eax), %ecx
4499; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
4500; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
4501; LINUX-32-PIC-NEXT:    retl
4502;
4503; LINUX-64-PIC-LABEL: moo01:
4504; LINUX-64-PIC:       # %bb.0: # %entry
4505; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
4506; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
4507; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
4508; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
4509; LINUX-64-PIC-NEXT:    retq
4510;
4511; DARWIN-32-STATIC-LABEL: moo01:
4512; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4513; DARWIN-32-STATIC-NEXT:    movl $_dst+262144, _ptr
4514; DARWIN-32-STATIC-NEXT:    retl
4515;
4516; DARWIN-32-DYNAMIC-LABEL: moo01:
4517; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4518; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
4519; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
4520; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
4521; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
4522; DARWIN-32-DYNAMIC-NEXT:    retl
4523;
4524; DARWIN-32-PIC-LABEL: moo01:
4525; DARWIN-32-PIC:       ## %bb.0: ## %entry
4526; DARWIN-32-PIC-NEXT:    calll L49$pb
4527; DARWIN-32-PIC-NEXT:  L49$pb:
4528; DARWIN-32-PIC-NEXT:    popl %eax
4529; DARWIN-32-PIC-NEXT:    movl $262144, %ecx ## imm = 0x40000
4530; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L49$pb(%eax), %ecx
4531; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L49$pb(%eax), %eax
4532; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
4533; DARWIN-32-PIC-NEXT:    retl
4534;
4535; DARWIN-64-STATIC-LABEL: moo01:
4536; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4537; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
4538; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
4539; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4540; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
4541; DARWIN-64-STATIC-NEXT:    retq
4542;
4543; DARWIN-64-DYNAMIC-LABEL: moo01:
4544; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4545; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
4546; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
4547; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4548; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
4549; DARWIN-64-DYNAMIC-NEXT:    retq
4550;
4551; DARWIN-64-PIC-LABEL: moo01:
4552; DARWIN-64-PIC:       ## %bb.0: ## %entry
4553; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
4554; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
4555; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4556; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
4557; DARWIN-64-PIC-NEXT:    retq
4558
4559entry:
4560	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
4561	ret void
4562}
4563
4564define dso_local void @moo02(i64 %i) nounwind {
4565; LINUX-64-STATIC-LABEL: moo02:
4566; LINUX-64-STATIC:       # %bb.0: # %entry
4567; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
4568; LINUX-64-STATIC-NEXT:    movl 262144(%rax), %eax
4569; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
4570; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
4571; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4572; LINUX-64-STATIC-NEXT:    retq
4573;
4574; LINUX-32-STATIC-LABEL: moo02:
4575; LINUX-32-STATIC:       # %bb.0: # %entry
4576; LINUX-32-STATIC-NEXT:    movl src+262144, %eax
4577; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
4578; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
4579; LINUX-32-STATIC-NEXT:    retl
4580;
4581; LINUX-32-PIC-LABEL: moo02:
4582; LINUX-32-PIC:       # %bb.0: # %entry
4583; LINUX-32-PIC-NEXT:    calll .L50$pb
4584; LINUX-32-PIC-NEXT:  .L50$pb:
4585; LINUX-32-PIC-NEXT:    popl %eax
4586; LINUX-32-PIC-NEXT:  .Ltmp50:
4587; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp50-.L50$pb), %eax
4588; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
4589; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4590; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
4591; LINUX-32-PIC-NEXT:    movl (%eax), %eax
4592; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4593; LINUX-32-PIC-NEXT:    retl
4594;
4595; LINUX-64-PIC-LABEL: moo02:
4596; LINUX-64-PIC:       # %bb.0: # %entry
4597; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
4598; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
4599; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
4600; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
4601; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4602; LINUX-64-PIC-NEXT:    retq
4603;
4604; DARWIN-32-STATIC-LABEL: moo02:
4605; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4606; DARWIN-32-STATIC-NEXT:    movl _src+262144, %eax
4607; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
4608; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
4609; DARWIN-32-STATIC-NEXT:    retl
4610;
4611; DARWIN-32-DYNAMIC-LABEL: moo02:
4612; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4613; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
4614; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%eax), %eax
4615; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
4616; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
4617; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
4618; DARWIN-32-DYNAMIC-NEXT:    retl
4619;
4620; DARWIN-32-PIC-LABEL: moo02:
4621; DARWIN-32-PIC:       ## %bb.0: ## %entry
4622; DARWIN-32-PIC-NEXT:    calll L50$pb
4623; DARWIN-32-PIC-NEXT:  L50$pb:
4624; DARWIN-32-PIC-NEXT:    popl %eax
4625; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L50$pb(%eax), %ecx
4626; DARWIN-32-PIC-NEXT:    movl 262144(%ecx), %ecx
4627; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L50$pb(%eax), %eax
4628; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
4629; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4630; DARWIN-32-PIC-NEXT:    retl
4631;
4632; DARWIN-64-STATIC-LABEL: moo02:
4633; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4634; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4635; DARWIN-64-STATIC-NEXT:    movl 262144(%rax), %eax
4636; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4637; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
4638; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4639; DARWIN-64-STATIC-NEXT:    retq
4640;
4641; DARWIN-64-DYNAMIC-LABEL: moo02:
4642; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4643; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4644; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax), %eax
4645; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4646; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
4647; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
4648; DARWIN-64-DYNAMIC-NEXT:    retq
4649;
4650; DARWIN-64-PIC-LABEL: moo02:
4651; DARWIN-64-PIC:       ## %bb.0: ## %entry
4652; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
4653; DARWIN-64-PIC-NEXT:    movl 262144(%rax), %eax
4654; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
4655; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
4656; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4657; DARWIN-64-PIC-NEXT:    retq
4658
4659entry:
4660	%0 = load i32*, i32** @ptr, align 8
4661	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
4662	%2 = getelementptr i32, i32* %0, i64 65536
4663	store i32 %1, i32* %2, align 4
4664	ret void
4665}
4666
4667define dso_local void @moo03(i64 %i) nounwind {
4668; LINUX-64-STATIC-LABEL: moo03:
4669; LINUX-64-STATIC:       # %bb.0: # %entry
4670; LINUX-64-STATIC-NEXT:    movl dsrc+262144(%rip), %eax
4671; LINUX-64-STATIC-NEXT:    movl %eax, ddst+262144(%rip)
4672; LINUX-64-STATIC-NEXT:    retq
4673;
4674; LINUX-32-STATIC-LABEL: moo03:
4675; LINUX-32-STATIC:       # %bb.0: # %entry
4676; LINUX-32-STATIC-NEXT:    movl dsrc+262144, %eax
4677; LINUX-32-STATIC-NEXT:    movl %eax, ddst+262144
4678; LINUX-32-STATIC-NEXT:    retl
4679;
4680; LINUX-32-PIC-LABEL: moo03:
4681; LINUX-32-PIC:       # %bb.0: # %entry
4682; LINUX-32-PIC-NEXT:    calll .L51$pb
4683; LINUX-32-PIC-NEXT:  .L51$pb:
4684; LINUX-32-PIC-NEXT:    popl %eax
4685; LINUX-32-PIC-NEXT:  .Ltmp51:
4686; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp51-.L51$pb), %eax
4687; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF+262144(%eax), %ecx
4688; LINUX-32-PIC-NEXT:    movl %ecx, .Lddst$local@GOTOFF+262144(%eax)
4689; LINUX-32-PIC-NEXT:    retl
4690;
4691; LINUX-64-PIC-LABEL: moo03:
4692; LINUX-64-PIC:       # %bb.0: # %entry
4693; LINUX-64-PIC-NEXT:    movl .Ldsrc$local+262144(%rip), %eax
4694; LINUX-64-PIC-NEXT:    movl %eax, .Lddst$local+262144(%rip)
4695; LINUX-64-PIC-NEXT:    retq
4696;
4697; DARWIN-32-STATIC-LABEL: moo03:
4698; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4699; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144, %eax
4700; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst+262144
4701; DARWIN-32-STATIC-NEXT:    retl
4702;
4703; DARWIN-32-DYNAMIC-LABEL: moo03:
4704; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4705; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144, %eax
4706; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst+262144
4707; DARWIN-32-DYNAMIC-NEXT:    retl
4708;
4709; DARWIN-32-PIC-LABEL: moo03:
4710; DARWIN-32-PIC:       ## %bb.0: ## %entry
4711; DARWIN-32-PIC-NEXT:    calll L51$pb
4712; DARWIN-32-PIC-NEXT:  L51$pb:
4713; DARWIN-32-PIC-NEXT:    popl %eax
4714; DARWIN-32-PIC-NEXT:    movl (_dsrc-L51$pb)+262144(%eax), %ecx
4715; DARWIN-32-PIC-NEXT:    movl %ecx, (_ddst-L51$pb)+262144(%eax)
4716; DARWIN-32-PIC-NEXT:    retl
4717;
4718; DARWIN-64-STATIC-LABEL: moo03:
4719; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4720; DARWIN-64-STATIC-NEXT:    movl _dsrc+262144(%rip), %eax
4721; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst+262144(%rip)
4722; DARWIN-64-STATIC-NEXT:    retq
4723;
4724; DARWIN-64-DYNAMIC-LABEL: moo03:
4725; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4726; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+262144(%rip), %eax
4727; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst+262144(%rip)
4728; DARWIN-64-DYNAMIC-NEXT:    retq
4729;
4730; DARWIN-64-PIC-LABEL: moo03:
4731; DARWIN-64-PIC:       ## %bb.0: ## %entry
4732; DARWIN-64-PIC-NEXT:    movl _dsrc+262144(%rip), %eax
4733; DARWIN-64-PIC-NEXT:    movl %eax, _ddst+262144(%rip)
4734; DARWIN-64-PIC-NEXT:    retq
4735
4736entry:
4737	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
4738	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), align 32
4739	ret void
4740}
4741
4742define dso_local void @moo04(i64 %i) nounwind {
4743; LINUX-64-STATIC-LABEL: moo04:
4744; LINUX-64-STATIC:       # %bb.0: # %entry
4745; LINUX-64-STATIC-NEXT:    movq $ddst+262144, dptr(%rip)
4746; LINUX-64-STATIC-NEXT:    retq
4747;
4748; LINUX-32-STATIC-LABEL: moo04:
4749; LINUX-32-STATIC:       # %bb.0: # %entry
4750; LINUX-32-STATIC-NEXT:    movl $ddst+262144, dptr
4751; LINUX-32-STATIC-NEXT:    retl
4752;
4753; LINUX-32-PIC-LABEL: moo04:
4754; LINUX-32-PIC:       # %bb.0: # %entry
4755; LINUX-32-PIC-NEXT:    calll .L52$pb
4756; LINUX-32-PIC-NEXT:  .L52$pb:
4757; LINUX-32-PIC-NEXT:    popl %eax
4758; LINUX-32-PIC-NEXT:  .Ltmp52:
4759; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp52-.L52$pb), %eax
4760; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+262144(%eax), %ecx
4761; LINUX-32-PIC-NEXT:    movl %ecx, .Ldptr$local@GOTOFF(%eax)
4762; LINUX-32-PIC-NEXT:    retl
4763;
4764; LINUX-64-PIC-LABEL: moo04:
4765; LINUX-64-PIC:       # %bb.0: # %entry
4766; LINUX-64-PIC-NEXT:    leaq .Lddst$local+262144(%rip), %rax
4767; LINUX-64-PIC-NEXT:    movq %rax, .Ldptr$local(%rip)
4768; LINUX-64-PIC-NEXT:    retq
4769;
4770; DARWIN-32-STATIC-LABEL: moo04:
4771; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4772; DARWIN-32-STATIC-NEXT:    movl $_ddst+262144, _dptr
4773; DARWIN-32-STATIC-NEXT:    retl
4774;
4775; DARWIN-32-DYNAMIC-LABEL: moo04:
4776; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4777; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+262144, _dptr
4778; DARWIN-32-DYNAMIC-NEXT:    retl
4779;
4780; DARWIN-32-PIC-LABEL: moo04:
4781; DARWIN-32-PIC:       ## %bb.0: ## %entry
4782; DARWIN-32-PIC-NEXT:    calll L52$pb
4783; DARWIN-32-PIC-NEXT:  L52$pb:
4784; DARWIN-32-PIC-NEXT:    popl %eax
4785; DARWIN-32-PIC-NEXT:    leal (_ddst-L52$pb)+262144(%eax), %ecx
4786; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L52$pb(%eax)
4787; DARWIN-32-PIC-NEXT:    retl
4788;
4789; DARWIN-64-STATIC-LABEL: moo04:
4790; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4791; DARWIN-64-STATIC-NEXT:    leaq _ddst+262144(%rip), %rax
4792; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
4793; DARWIN-64-STATIC-NEXT:    retq
4794;
4795; DARWIN-64-DYNAMIC-LABEL: moo04:
4796; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4797; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+262144(%rip), %rax
4798; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
4799; DARWIN-64-DYNAMIC-NEXT:    retq
4800;
4801; DARWIN-64-PIC-LABEL: moo04:
4802; DARWIN-64-PIC:       ## %bb.0: ## %entry
4803; DARWIN-64-PIC-NEXT:    leaq _ddst+262144(%rip), %rax
4804; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
4805; DARWIN-64-PIC-NEXT:    retq
4806
4807entry:
4808	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
4809	ret void
4810}
4811
4812define dso_local void @moo05(i64 %i) nounwind {
4813; LINUX-64-STATIC-LABEL: moo05:
4814; LINUX-64-STATIC:       # %bb.0: # %entry
4815; LINUX-64-STATIC-NEXT:    movl dsrc+262144(%rip), %eax
4816; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
4817; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4818; LINUX-64-STATIC-NEXT:    retq
4819;
4820; LINUX-32-STATIC-LABEL: moo05:
4821; LINUX-32-STATIC:       # %bb.0: # %entry
4822; LINUX-32-STATIC-NEXT:    movl dsrc+262144, %eax
4823; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
4824; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
4825; LINUX-32-STATIC-NEXT:    retl
4826;
4827; LINUX-32-PIC-LABEL: moo05:
4828; LINUX-32-PIC:       # %bb.0: # %entry
4829; LINUX-32-PIC-NEXT:    calll .L53$pb
4830; LINUX-32-PIC-NEXT:  .L53$pb:
4831; LINUX-32-PIC-NEXT:    popl %eax
4832; LINUX-32-PIC-NEXT:  .Ltmp53:
4833; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp53-.L53$pb), %eax
4834; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF+262144(%eax), %ecx
4835; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
4836; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4837; LINUX-32-PIC-NEXT:    retl
4838;
4839; LINUX-64-PIC-LABEL: moo05:
4840; LINUX-64-PIC:       # %bb.0: # %entry
4841; LINUX-64-PIC-NEXT:    movl .Ldsrc$local+262144(%rip), %eax
4842; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rcx
4843; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4844; LINUX-64-PIC-NEXT:    retq
4845;
4846; DARWIN-32-STATIC-LABEL: moo05:
4847; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4848; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144, %eax
4849; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
4850; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
4851; DARWIN-32-STATIC-NEXT:    retl
4852;
4853; DARWIN-32-DYNAMIC-LABEL: moo05:
4854; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4855; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144, %eax
4856; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
4857; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
4858; DARWIN-32-DYNAMIC-NEXT:    retl
4859;
4860; DARWIN-32-PIC-LABEL: moo05:
4861; DARWIN-32-PIC:       ## %bb.0: ## %entry
4862; DARWIN-32-PIC-NEXT:    calll L53$pb
4863; DARWIN-32-PIC-NEXT:  L53$pb:
4864; DARWIN-32-PIC-NEXT:    popl %eax
4865; DARWIN-32-PIC-NEXT:    movl (_dsrc-L53$pb)+262144(%eax), %ecx
4866; DARWIN-32-PIC-NEXT:    movl _dptr-L53$pb(%eax), %eax
4867; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
4868; DARWIN-32-PIC-NEXT:    retl
4869;
4870; DARWIN-64-STATIC-LABEL: moo05:
4871; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4872; DARWIN-64-STATIC-NEXT:    movl _dsrc+262144(%rip), %eax
4873; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
4874; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
4875; DARWIN-64-STATIC-NEXT:    retq
4876;
4877; DARWIN-64-DYNAMIC-LABEL: moo05:
4878; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4879; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+262144(%rip), %eax
4880; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
4881; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
4882; DARWIN-64-DYNAMIC-NEXT:    retq
4883;
4884; DARWIN-64-PIC-LABEL: moo05:
4885; DARWIN-64-PIC:       ## %bb.0: ## %entry
4886; DARWIN-64-PIC-NEXT:    movl _dsrc+262144(%rip), %eax
4887; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
4888; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
4889; DARWIN-64-PIC-NEXT:    retq
4890
4891entry:
4892	%0 = load i32*, i32** @dptr, align 8
4893	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
4894	%2 = getelementptr i32, i32* %0, i64 65536
4895	store i32 %1, i32* %2, align 4
4896	ret void
4897}
4898
4899define dso_local void @moo06(i64 %i) nounwind {
4900; LINUX-64-STATIC-LABEL: moo06:
4901; LINUX-64-STATIC:       # %bb.0: # %entry
4902; LINUX-64-STATIC-NEXT:    movl lsrc+262144(%rip), %eax
4903; LINUX-64-STATIC-NEXT:    movl %eax, ldst+262144(%rip)
4904; LINUX-64-STATIC-NEXT:    retq
4905;
4906; LINUX-32-STATIC-LABEL: moo06:
4907; LINUX-32-STATIC:       # %bb.0: # %entry
4908; LINUX-32-STATIC-NEXT:    movl lsrc+262144, %eax
4909; LINUX-32-STATIC-NEXT:    movl %eax, ldst+262144
4910; LINUX-32-STATIC-NEXT:    retl
4911;
4912; LINUX-32-PIC-LABEL: moo06:
4913; LINUX-32-PIC:       # %bb.0: # %entry
4914; LINUX-32-PIC-NEXT:    calll .L54$pb
4915; LINUX-32-PIC-NEXT:  .L54$pb:
4916; LINUX-32-PIC-NEXT:    popl %eax
4917; LINUX-32-PIC-NEXT:  .Ltmp54:
4918; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp54-.L54$pb), %eax
4919; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax), %ecx
4920; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF+262144(%eax)
4921; LINUX-32-PIC-NEXT:    retl
4922;
4923; LINUX-64-PIC-LABEL: moo06:
4924; LINUX-64-PIC:       # %bb.0: # %entry
4925; LINUX-64-PIC-NEXT:    movl lsrc+262144(%rip), %eax
4926; LINUX-64-PIC-NEXT:    movl %eax, ldst+262144(%rip)
4927; LINUX-64-PIC-NEXT:    retq
4928;
4929; DARWIN-32-STATIC-LABEL: moo06:
4930; DARWIN-32-STATIC:       ## %bb.0: ## %entry
4931; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144, %eax
4932; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst+262144
4933; DARWIN-32-STATIC-NEXT:    retl
4934;
4935; DARWIN-32-DYNAMIC-LABEL: moo06:
4936; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
4937; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144, %eax
4938; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst+262144
4939; DARWIN-32-DYNAMIC-NEXT:    retl
4940;
4941; DARWIN-32-PIC-LABEL: moo06:
4942; DARWIN-32-PIC:       ## %bb.0: ## %entry
4943; DARWIN-32-PIC-NEXT:    calll L54$pb
4944; DARWIN-32-PIC-NEXT:  L54$pb:
4945; DARWIN-32-PIC-NEXT:    popl %eax
4946; DARWIN-32-PIC-NEXT:    movl (_lsrc-L54$pb)+262144(%eax), %ecx
4947; DARWIN-32-PIC-NEXT:    movl %ecx, (_ldst-L54$pb)+262144(%eax)
4948; DARWIN-32-PIC-NEXT:    retl
4949;
4950; DARWIN-64-STATIC-LABEL: moo06:
4951; DARWIN-64-STATIC:       ## %bb.0: ## %entry
4952; DARWIN-64-STATIC-NEXT:    movl _lsrc+262144(%rip), %eax
4953; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst+262144(%rip)
4954; DARWIN-64-STATIC-NEXT:    retq
4955;
4956; DARWIN-64-DYNAMIC-LABEL: moo06:
4957; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
4958; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+262144(%rip), %eax
4959; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst+262144(%rip)
4960; DARWIN-64-DYNAMIC-NEXT:    retq
4961;
4962; DARWIN-64-PIC-LABEL: moo06:
4963; DARWIN-64-PIC:       ## %bb.0: ## %entry
4964; DARWIN-64-PIC-NEXT:    movl _lsrc+262144(%rip), %eax
4965; DARWIN-64-PIC-NEXT:    movl %eax, _ldst+262144(%rip)
4966; DARWIN-64-PIC-NEXT:    retq
4967
4968entry:
4969	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4970	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), align 4
4971	ret void
4972}
4973
4974define dso_local void @moo07(i64 %i) nounwind {
4975; LINUX-64-STATIC-LABEL: moo07:
4976; LINUX-64-STATIC:       # %bb.0: # %entry
4977; LINUX-64-STATIC-NEXT:    movq $ldst+262144, lptr(%rip)
4978; LINUX-64-STATIC-NEXT:    retq
4979;
4980; LINUX-32-STATIC-LABEL: moo07:
4981; LINUX-32-STATIC:       # %bb.0: # %entry
4982; LINUX-32-STATIC-NEXT:    movl $ldst+262144, lptr
4983; LINUX-32-STATIC-NEXT:    retl
4984;
4985; LINUX-32-PIC-LABEL: moo07:
4986; LINUX-32-PIC:       # %bb.0: # %entry
4987; LINUX-32-PIC-NEXT:    calll .L55$pb
4988; LINUX-32-PIC-NEXT:  .L55$pb:
4989; LINUX-32-PIC-NEXT:    popl %eax
4990; LINUX-32-PIC-NEXT:  .Ltmp55:
4991; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp55-.L55$pb), %eax
4992; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax), %ecx
4993; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
4994; LINUX-32-PIC-NEXT:    retl
4995;
4996; LINUX-64-PIC-LABEL: moo07:
4997; LINUX-64-PIC:       # %bb.0: # %entry
4998; LINUX-64-PIC-NEXT:    leaq ldst+262144(%rip), %rax
4999; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
5000; LINUX-64-PIC-NEXT:    retq
5001;
5002; DARWIN-32-STATIC-LABEL: moo07:
5003; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5004; DARWIN-32-STATIC-NEXT:    movl $_ldst+262144, _lptr
5005; DARWIN-32-STATIC-NEXT:    retl
5006;
5007; DARWIN-32-DYNAMIC-LABEL: moo07:
5008; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5009; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+262144, _lptr
5010; DARWIN-32-DYNAMIC-NEXT:    retl
5011;
5012; DARWIN-32-PIC-LABEL: moo07:
5013; DARWIN-32-PIC:       ## %bb.0: ## %entry
5014; DARWIN-32-PIC-NEXT:    calll L55$pb
5015; DARWIN-32-PIC-NEXT:  L55$pb:
5016; DARWIN-32-PIC-NEXT:    popl %eax
5017; DARWIN-32-PIC-NEXT:    leal (_ldst-L55$pb)+262144(%eax), %ecx
5018; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L55$pb(%eax)
5019; DARWIN-32-PIC-NEXT:    retl
5020;
5021; DARWIN-64-STATIC-LABEL: moo07:
5022; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5023; DARWIN-64-STATIC-NEXT:    leaq _ldst+262144(%rip), %rax
5024; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
5025; DARWIN-64-STATIC-NEXT:    retq
5026;
5027; DARWIN-64-DYNAMIC-LABEL: moo07:
5028; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5029; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+262144(%rip), %rax
5030; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
5031; DARWIN-64-DYNAMIC-NEXT:    retq
5032;
5033; DARWIN-64-PIC-LABEL: moo07:
5034; DARWIN-64-PIC:       ## %bb.0: ## %entry
5035; DARWIN-64-PIC-NEXT:    leaq _ldst+262144(%rip), %rax
5036; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
5037; DARWIN-64-PIC-NEXT:    retq
5038
5039entry:
5040	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
5041	ret void
5042}
5043
5044define dso_local void @moo08(i64 %i) nounwind {
5045; LINUX-64-STATIC-LABEL: moo08:
5046; LINUX-64-STATIC:       # %bb.0: # %entry
5047; LINUX-64-STATIC-NEXT:    movl lsrc+262144(%rip), %eax
5048; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
5049; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
5050; LINUX-64-STATIC-NEXT:    retq
5051;
5052; LINUX-32-STATIC-LABEL: moo08:
5053; LINUX-32-STATIC:       # %bb.0: # %entry
5054; LINUX-32-STATIC-NEXT:    movl lsrc+262144, %eax
5055; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
5056; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
5057; LINUX-32-STATIC-NEXT:    retl
5058;
5059; LINUX-32-PIC-LABEL: moo08:
5060; LINUX-32-PIC:       # %bb.0: # %entry
5061; LINUX-32-PIC-NEXT:    calll .L56$pb
5062; LINUX-32-PIC-NEXT:  .L56$pb:
5063; LINUX-32-PIC-NEXT:    popl %eax
5064; LINUX-32-PIC-NEXT:  .Ltmp56:
5065; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp56-.L56$pb), %eax
5066; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax), %ecx
5067; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
5068; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
5069; LINUX-32-PIC-NEXT:    retl
5070;
5071; LINUX-64-PIC-LABEL: moo08:
5072; LINUX-64-PIC:       # %bb.0: # %entry
5073; LINUX-64-PIC-NEXT:    movl lsrc+262144(%rip), %eax
5074; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
5075; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
5076; LINUX-64-PIC-NEXT:    retq
5077;
5078; DARWIN-32-STATIC-LABEL: moo08:
5079; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5080; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144, %eax
5081; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
5082; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
5083; DARWIN-32-STATIC-NEXT:    retl
5084;
5085; DARWIN-32-DYNAMIC-LABEL: moo08:
5086; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5087; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144, %eax
5088; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
5089; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
5090; DARWIN-32-DYNAMIC-NEXT:    retl
5091;
5092; DARWIN-32-PIC-LABEL: moo08:
5093; DARWIN-32-PIC:       ## %bb.0: ## %entry
5094; DARWIN-32-PIC-NEXT:    calll L56$pb
5095; DARWIN-32-PIC-NEXT:  L56$pb:
5096; DARWIN-32-PIC-NEXT:    popl %eax
5097; DARWIN-32-PIC-NEXT:    movl (_lsrc-L56$pb)+262144(%eax), %ecx
5098; DARWIN-32-PIC-NEXT:    movl _lptr-L56$pb(%eax), %eax
5099; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
5100; DARWIN-32-PIC-NEXT:    retl
5101;
5102; DARWIN-64-STATIC-LABEL: moo08:
5103; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5104; DARWIN-64-STATIC-NEXT:    movl _lsrc+262144(%rip), %eax
5105; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
5106; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
5107; DARWIN-64-STATIC-NEXT:    retq
5108;
5109; DARWIN-64-DYNAMIC-LABEL: moo08:
5110; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5111; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+262144(%rip), %eax
5112; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
5113; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
5114; DARWIN-64-DYNAMIC-NEXT:    retq
5115;
5116; DARWIN-64-PIC-LABEL: moo08:
5117; DARWIN-64-PIC:       ## %bb.0: ## %entry
5118; DARWIN-64-PIC-NEXT:    movl _lsrc+262144(%rip), %eax
5119; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
5120; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
5121; DARWIN-64-PIC-NEXT:    retq
5122
5123entry:
5124	%0 = load i32*, i32** @lptr, align 8
5125	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
5126	%2 = getelementptr i32, i32* %0, i64 65536
5127	store i32 %1, i32* %2, align 4
5128	ret void
5129}
5130
5131define dso_local void @big00(i64 %i) nounwind {
5132; LINUX-64-STATIC-LABEL: big00:
5133; LINUX-64-STATIC:       # %bb.0: # %entry
5134; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
5135; LINUX-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5136; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
5137; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5138; LINUX-64-STATIC-NEXT:    retq
5139;
5140; LINUX-32-STATIC-LABEL: big00:
5141; LINUX-32-STATIC:       # %bb.0: # %entry
5142; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5143; LINUX-32-STATIC-NEXT:    movl src+262144(,%eax,4), %ecx
5144; LINUX-32-STATIC-NEXT:    movl %ecx, dst+262144(,%eax,4)
5145; LINUX-32-STATIC-NEXT:    retl
5146;
5147; LINUX-32-PIC-LABEL: big00:
5148; LINUX-32-PIC:       # %bb.0: # %entry
5149; LINUX-32-PIC-NEXT:    calll .L57$pb
5150; LINUX-32-PIC-NEXT:  .L57$pb:
5151; LINUX-32-PIC-NEXT:    popl %eax
5152; LINUX-32-PIC-NEXT:  .Ltmp57:
5153; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp57-.L57$pb), %eax
5154; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5155; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
5156; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5157; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
5158; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5159; LINUX-32-PIC-NEXT:    retl
5160;
5161; LINUX-64-PIC-LABEL: big00:
5162; LINUX-64-PIC:       # %bb.0: # %entry
5163; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
5164; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5165; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
5166; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5167; LINUX-64-PIC-NEXT:    retq
5168;
5169; DARWIN-32-STATIC-LABEL: big00:
5170; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5171; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5172; DARWIN-32-STATIC-NEXT:    movl _src+262144(,%eax,4), %ecx
5173; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst+262144(,%eax,4)
5174; DARWIN-32-STATIC-NEXT:    retl
5175;
5176; DARWIN-32-DYNAMIC-LABEL: big00:
5177; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5178; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5179; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
5180; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%ecx,%eax,4), %ecx
5181; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
5182; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5183; DARWIN-32-DYNAMIC-NEXT:    retl
5184;
5185; DARWIN-32-PIC-LABEL: big00:
5186; DARWIN-32-PIC:       ## %bb.0: ## %entry
5187; DARWIN-32-PIC-NEXT:    calll L57$pb
5188; DARWIN-32-PIC-NEXT:  L57$pb:
5189; DARWIN-32-PIC-NEXT:    popl %eax
5190; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5191; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L57$pb(%eax), %edx
5192; DARWIN-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5193; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L57$pb(%eax), %eax
5194; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5195; DARWIN-32-PIC-NEXT:    retl
5196;
5197; DARWIN-64-STATIC-LABEL: big00:
5198; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5199; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5200; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5201; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
5202; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5203; DARWIN-64-STATIC-NEXT:    retq
5204;
5205; DARWIN-64-DYNAMIC-LABEL: big00:
5206; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5207; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5208; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5209; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
5210; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5211; DARWIN-64-DYNAMIC-NEXT:    retq
5212;
5213; DARWIN-64-PIC-LABEL: big00:
5214; DARWIN-64-PIC:       ## %bb.0: ## %entry
5215; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5216; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5217; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
5218; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5219; DARWIN-64-PIC-NEXT:    retq
5220
5221entry:
5222	%0 = add i64 %i, 65536
5223	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
5224	%2 = load i32, i32* %1, align 4
5225	%3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
5226	store i32 %2, i32* %3, align 4
5227	ret void
5228}
5229
5230define dso_local void @big01(i64 %i) nounwind {
5231; LINUX-64-STATIC-LABEL: big01:
5232; LINUX-64-STATIC:       # %bb.0: # %entry
5233; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
5234; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5235; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
5236; LINUX-64-STATIC-NEXT:    movq %rax, (%rcx)
5237; LINUX-64-STATIC-NEXT:    retq
5238;
5239; LINUX-32-STATIC-LABEL: big01:
5240; LINUX-32-STATIC:       # %bb.0: # %entry
5241; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5242; LINUX-32-STATIC-NEXT:    leal dst+262144(,%eax,4), %eax
5243; LINUX-32-STATIC-NEXT:    movl %eax, ptr
5244; LINUX-32-STATIC-NEXT:    retl
5245;
5246; LINUX-32-PIC-LABEL: big01:
5247; LINUX-32-PIC:       # %bb.0: # %entry
5248; LINUX-32-PIC-NEXT:    calll .L58$pb
5249; LINUX-32-PIC-NEXT:  .L58$pb:
5250; LINUX-32-PIC-NEXT:    popl %eax
5251; LINUX-32-PIC-NEXT:  .Ltmp58:
5252; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp58-.L58$pb), %eax
5253; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5254; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %edx
5255; LINUX-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
5256; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
5257; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
5258; LINUX-32-PIC-NEXT:    retl
5259;
5260; LINUX-64-PIC-LABEL: big01:
5261; LINUX-64-PIC:       # %bb.0: # %entry
5262; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
5263; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5264; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
5265; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
5266; LINUX-64-PIC-NEXT:    retq
5267;
5268; DARWIN-32-STATIC-LABEL: big01:
5269; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5270; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5271; DARWIN-32-STATIC-NEXT:    leal _dst+262144(,%eax,4), %eax
5272; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
5273; DARWIN-32-STATIC-NEXT:    retl
5274;
5275; DARWIN-32-DYNAMIC-LABEL: big01:
5276; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5277; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5278; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
5279; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
5280; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
5281; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
5282; DARWIN-32-DYNAMIC-NEXT:    retl
5283;
5284; DARWIN-32-PIC-LABEL: big01:
5285; DARWIN-32-PIC:       ## %bb.0: ## %entry
5286; DARWIN-32-PIC-NEXT:    calll L58$pb
5287; DARWIN-32-PIC-NEXT:  L58$pb:
5288; DARWIN-32-PIC-NEXT:    popl %eax
5289; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5290; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L58$pb(%eax), %edx
5291; DARWIN-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
5292; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L58$pb(%eax), %eax
5293; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
5294; DARWIN-32-PIC-NEXT:    retl
5295;
5296; DARWIN-64-STATIC-LABEL: big01:
5297; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5298; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
5299; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5300; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5301; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
5302; DARWIN-64-STATIC-NEXT:    retq
5303;
5304; DARWIN-64-DYNAMIC-LABEL: big01:
5305; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5306; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
5307; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5308; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5309; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
5310; DARWIN-64-DYNAMIC-NEXT:    retq
5311;
5312; DARWIN-64-PIC-LABEL: big01:
5313; DARWIN-64-PIC:       ## %bb.0: ## %entry
5314; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
5315; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5316; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5317; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
5318; DARWIN-64-PIC-NEXT:    retq
5319
5320entry:
5321	%.sum = add i64 %i, 65536
5322	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
5323	store i32* %0, i32** @ptr, align 8
5324	ret void
5325}
5326
5327define dso_local void @big02(i64 %i) nounwind {
5328; LINUX-64-STATIC-LABEL: big02:
5329; LINUX-64-STATIC:       # %bb.0: # %entry
5330; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
5331; LINUX-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5332; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
5333; LINUX-64-STATIC-NEXT:    movq (%rcx), %rcx
5334; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5335; LINUX-64-STATIC-NEXT:    retq
5336;
5337; LINUX-32-STATIC-LABEL: big02:
5338; LINUX-32-STATIC:       # %bb.0: # %entry
5339; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5340; LINUX-32-STATIC-NEXT:    movl src+262144(,%eax,4), %ecx
5341; LINUX-32-STATIC-NEXT:    movl ptr, %edx
5342; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5343; LINUX-32-STATIC-NEXT:    retl
5344;
5345; LINUX-32-PIC-LABEL: big02:
5346; LINUX-32-PIC:       # %bb.0: # %entry
5347; LINUX-32-PIC-NEXT:    calll .L59$pb
5348; LINUX-32-PIC-NEXT:  .L59$pb:
5349; LINUX-32-PIC-NEXT:    popl %eax
5350; LINUX-32-PIC-NEXT:  .Ltmp59:
5351; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp59-.L59$pb), %eax
5352; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5353; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
5354; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5355; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
5356; LINUX-32-PIC-NEXT:    movl (%eax), %eax
5357; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5358; LINUX-32-PIC-NEXT:    retl
5359;
5360; LINUX-64-PIC-LABEL: big02:
5361; LINUX-64-PIC:       # %bb.0: # %entry
5362; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
5363; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5364; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
5365; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
5366; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5367; LINUX-64-PIC-NEXT:    retq
5368;
5369; DARWIN-32-STATIC-LABEL: big02:
5370; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5371; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5372; DARWIN-32-STATIC-NEXT:    movl _src+262144(,%eax,4), %ecx
5373; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
5374; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5375; DARWIN-32-STATIC-NEXT:    retl
5376;
5377; DARWIN-32-DYNAMIC-LABEL: big02:
5378; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5379; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5380; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
5381; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%ecx,%eax,4), %ecx
5382; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
5383; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
5384; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5385; DARWIN-32-DYNAMIC-NEXT:    retl
5386;
5387; DARWIN-32-PIC-LABEL: big02:
5388; DARWIN-32-PIC:       ## %bb.0: ## %entry
5389; DARWIN-32-PIC-NEXT:    calll L59$pb
5390; DARWIN-32-PIC-NEXT:  L59$pb:
5391; DARWIN-32-PIC-NEXT:    popl %eax
5392; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5393; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L59$pb(%eax), %edx
5394; DARWIN-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
5395; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L59$pb(%eax), %eax
5396; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
5397; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5398; DARWIN-32-PIC-NEXT:    retl
5399;
5400; DARWIN-64-STATIC-LABEL: big02:
5401; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5402; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5403; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5404; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5405; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
5406; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5407; DARWIN-64-STATIC-NEXT:    retq
5408;
5409; DARWIN-64-DYNAMIC-LABEL: big02:
5410; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5411; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5412; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5413; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5414; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
5415; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5416; DARWIN-64-DYNAMIC-NEXT:    retq
5417;
5418; DARWIN-64-PIC-LABEL: big02:
5419; DARWIN-64-PIC:       ## %bb.0: ## %entry
5420; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
5421; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5422; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
5423; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
5424; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5425; DARWIN-64-PIC-NEXT:    retq
5426
5427entry:
5428	%0 = load i32*, i32** @ptr, align 8
5429	%1 = add i64 %i, 65536
5430	%2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
5431	%3 = load i32, i32* %2, align 4
5432	%4 = getelementptr i32, i32* %0, i64 %1
5433	store i32 %3, i32* %4, align 4
5434	ret void
5435}
5436
5437define dso_local void @big03(i64 %i) nounwind {
5438; LINUX-64-STATIC-LABEL: big03:
5439; LINUX-64-STATIC:       # %bb.0: # %entry
5440; LINUX-64-STATIC-NEXT:    movl dsrc+262144(,%rdi,4), %eax
5441; LINUX-64-STATIC-NEXT:    movl %eax, ddst+262144(,%rdi,4)
5442; LINUX-64-STATIC-NEXT:    retq
5443;
5444; LINUX-32-STATIC-LABEL: big03:
5445; LINUX-32-STATIC:       # %bb.0: # %entry
5446; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5447; LINUX-32-STATIC-NEXT:    movl dsrc+262144(,%eax,4), %ecx
5448; LINUX-32-STATIC-NEXT:    movl %ecx, ddst+262144(,%eax,4)
5449; LINUX-32-STATIC-NEXT:    retl
5450;
5451; LINUX-32-PIC-LABEL: big03:
5452; LINUX-32-PIC:       # %bb.0: # %entry
5453; LINUX-32-PIC-NEXT:    calll .L60$pb
5454; LINUX-32-PIC-NEXT:  .L60$pb:
5455; LINUX-32-PIC-NEXT:    popl %eax
5456; LINUX-32-PIC-NEXT:  .Ltmp60:
5457; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp60-.L60$pb), %eax
5458; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5459; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF+262144(%eax,%ecx,4), %edx
5460; LINUX-32-PIC-NEXT:    movl %edx, .Lddst$local@GOTOFF+262144(%eax,%ecx,4)
5461; LINUX-32-PIC-NEXT:    retl
5462;
5463; LINUX-64-PIC-LABEL: big03:
5464; LINUX-64-PIC:       # %bb.0: # %entry
5465; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
5466; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5467; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rcx
5468; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5469; LINUX-64-PIC-NEXT:    retq
5470;
5471; DARWIN-32-STATIC-LABEL: big03:
5472; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5473; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5474; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
5475; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst+262144(,%eax,4)
5476; DARWIN-32-STATIC-NEXT:    retl
5477;
5478; DARWIN-32-DYNAMIC-LABEL: big03:
5479; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5480; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5481; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
5482; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst+262144(,%eax,4)
5483; DARWIN-32-DYNAMIC-NEXT:    retl
5484;
5485; DARWIN-32-PIC-LABEL: big03:
5486; DARWIN-32-PIC:       ## %bb.0: ## %entry
5487; DARWIN-32-PIC-NEXT:    calll L60$pb
5488; DARWIN-32-PIC-NEXT:  L60$pb:
5489; DARWIN-32-PIC-NEXT:    popl %eax
5490; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5491; DARWIN-32-PIC-NEXT:    movl (_dsrc-L60$pb)+262144(%eax,%ecx,4), %edx
5492; DARWIN-32-PIC-NEXT:    movl %edx, (_ddst-L60$pb)+262144(%eax,%ecx,4)
5493; DARWIN-32-PIC-NEXT:    retl
5494;
5495; DARWIN-64-STATIC-LABEL: big03:
5496; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5497; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
5498; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5499; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
5500; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5501; DARWIN-64-STATIC-NEXT:    retq
5502;
5503; DARWIN-64-DYNAMIC-LABEL: big03:
5504; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5505; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
5506; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5507; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
5508; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5509; DARWIN-64-DYNAMIC-NEXT:    retq
5510;
5511; DARWIN-64-PIC-LABEL: big03:
5512; DARWIN-64-PIC:       ## %bb.0: ## %entry
5513; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
5514; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5515; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
5516; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5517; DARWIN-64-PIC-NEXT:    retq
5518
5519entry:
5520	%0 = add i64 %i, 65536
5521	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
5522	%2 = load i32, i32* %1, align 4
5523	%3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
5524	store i32 %2, i32* %3, align 4
5525	ret void
5526}
5527
5528define dso_local void @big04(i64 %i) nounwind {
5529; LINUX-64-STATIC-LABEL: big04:
5530; LINUX-64-STATIC:       # %bb.0: # %entry
5531; LINUX-64-STATIC-NEXT:    leaq ddst+262144(,%rdi,4), %rax
5532; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
5533; LINUX-64-STATIC-NEXT:    retq
5534;
5535; LINUX-32-STATIC-LABEL: big04:
5536; LINUX-32-STATIC:       # %bb.0: # %entry
5537; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5538; LINUX-32-STATIC-NEXT:    leal ddst+262144(,%eax,4), %eax
5539; LINUX-32-STATIC-NEXT:    movl %eax, dptr
5540; LINUX-32-STATIC-NEXT:    retl
5541;
5542; LINUX-32-PIC-LABEL: big04:
5543; LINUX-32-PIC:       # %bb.0: # %entry
5544; LINUX-32-PIC-NEXT:    calll .L61$pb
5545; LINUX-32-PIC-NEXT:  .L61$pb:
5546; LINUX-32-PIC-NEXT:    popl %eax
5547; LINUX-32-PIC-NEXT:  .Ltmp61:
5548; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp61-.L61$pb), %eax
5549; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5550; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+262144(%eax,%ecx,4), %ecx
5551; LINUX-32-PIC-NEXT:    movl %ecx, .Ldptr$local@GOTOFF(%eax)
5552; LINUX-32-PIC-NEXT:    retl
5553;
5554; LINUX-64-PIC-LABEL: big04:
5555; LINUX-64-PIC:       # %bb.0: # %entry
5556; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
5557; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5558; LINUX-64-PIC-NEXT:    movq %rax, .Ldptr$local(%rip)
5559; LINUX-64-PIC-NEXT:    retq
5560;
5561; DARWIN-32-STATIC-LABEL: big04:
5562; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5563; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5564; DARWIN-32-STATIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
5565; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
5566; DARWIN-32-STATIC-NEXT:    retl
5567;
5568; DARWIN-32-DYNAMIC-LABEL: big04:
5569; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5570; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5571; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
5572; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
5573; DARWIN-32-DYNAMIC-NEXT:    retl
5574;
5575; DARWIN-32-PIC-LABEL: big04:
5576; DARWIN-32-PIC:       ## %bb.0: ## %entry
5577; DARWIN-32-PIC-NEXT:    calll L61$pb
5578; DARWIN-32-PIC-NEXT:  L61$pb:
5579; DARWIN-32-PIC-NEXT:    popl %eax
5580; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5581; DARWIN-32-PIC-NEXT:    leal (_ddst-L61$pb)+262144(%eax,%ecx,4), %ecx
5582; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L61$pb(%eax)
5583; DARWIN-32-PIC-NEXT:    retl
5584;
5585; DARWIN-64-STATIC-LABEL: big04:
5586; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5587; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
5588; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5589; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
5590; DARWIN-64-STATIC-NEXT:    retq
5591;
5592; DARWIN-64-DYNAMIC-LABEL: big04:
5593; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5594; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
5595; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5596; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
5597; DARWIN-64-DYNAMIC-NEXT:    retq
5598;
5599; DARWIN-64-PIC-LABEL: big04:
5600; DARWIN-64-PIC:       ## %bb.0: ## %entry
5601; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
5602; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5603; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
5604; DARWIN-64-PIC-NEXT:    retq
5605
5606entry:
5607	%.sum = add i64 %i, 65536
5608	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
5609	store i32* %0, i32** @dptr, align 8
5610	ret void
5611}
5612
5613define dso_local void @big05(i64 %i) nounwind {
5614; LINUX-64-STATIC-LABEL: big05:
5615; LINUX-64-STATIC:       # %bb.0: # %entry
5616; LINUX-64-STATIC-NEXT:    movl dsrc+262144(,%rdi,4), %eax
5617; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
5618; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5619; LINUX-64-STATIC-NEXT:    retq
5620;
5621; LINUX-32-STATIC-LABEL: big05:
5622; LINUX-32-STATIC:       # %bb.0: # %entry
5623; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5624; LINUX-32-STATIC-NEXT:    movl dsrc+262144(,%eax,4), %ecx
5625; LINUX-32-STATIC-NEXT:    movl dptr, %edx
5626; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5627; LINUX-32-STATIC-NEXT:    retl
5628;
5629; LINUX-32-PIC-LABEL: big05:
5630; LINUX-32-PIC:       # %bb.0: # %entry
5631; LINUX-32-PIC-NEXT:    calll .L62$pb
5632; LINUX-32-PIC-NEXT:  .L62$pb:
5633; LINUX-32-PIC-NEXT:    popl %eax
5634; LINUX-32-PIC-NEXT:  .Ltmp62:
5635; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp62-.L62$pb), %eax
5636; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5637; LINUX-32-PIC-NEXT:    movl .Ldsrc$local@GOTOFF+262144(%eax,%ecx,4), %edx
5638; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
5639; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5640; LINUX-32-PIC-NEXT:    retl
5641;
5642; LINUX-64-PIC-LABEL: big05:
5643; LINUX-64-PIC:       # %bb.0: # %entry
5644; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
5645; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5646; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rcx
5647; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5648; LINUX-64-PIC-NEXT:    retq
5649;
5650; DARWIN-32-STATIC-LABEL: big05:
5651; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5652; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5653; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
5654; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
5655; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5656; DARWIN-32-STATIC-NEXT:    retl
5657;
5658; DARWIN-32-DYNAMIC-LABEL: big05:
5659; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5660; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5661; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
5662; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
5663; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5664; DARWIN-32-DYNAMIC-NEXT:    retl
5665;
5666; DARWIN-32-PIC-LABEL: big05:
5667; DARWIN-32-PIC:       ## %bb.0: ## %entry
5668; DARWIN-32-PIC-NEXT:    calll L62$pb
5669; DARWIN-32-PIC-NEXT:  L62$pb:
5670; DARWIN-32-PIC-NEXT:    popl %eax
5671; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5672; DARWIN-32-PIC-NEXT:    movl (_dsrc-L62$pb)+262144(%eax,%ecx,4), %edx
5673; DARWIN-32-PIC-NEXT:    movl _dptr-L62$pb(%eax), %eax
5674; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5675; DARWIN-32-PIC-NEXT:    retl
5676;
5677; DARWIN-64-STATIC-LABEL: big05:
5678; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5679; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
5680; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5681; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
5682; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5683; DARWIN-64-STATIC-NEXT:    retq
5684;
5685; DARWIN-64-DYNAMIC-LABEL: big05:
5686; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5687; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
5688; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5689; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
5690; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5691; DARWIN-64-DYNAMIC-NEXT:    retq
5692;
5693; DARWIN-64-PIC-LABEL: big05:
5694; DARWIN-64-PIC:       ## %bb.0: ## %entry
5695; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
5696; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5697; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
5698; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5699; DARWIN-64-PIC-NEXT:    retq
5700
5701entry:
5702	%0 = load i32*, i32** @dptr, align 8
5703	%1 = add i64 %i, 65536
5704	%2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
5705	%3 = load i32, i32* %2, align 4
5706	%4 = getelementptr i32, i32* %0, i64 %1
5707	store i32 %3, i32* %4, align 4
5708	ret void
5709}
5710
5711define dso_local void @big06(i64 %i) nounwind {
5712; LINUX-64-STATIC-LABEL: big06:
5713; LINUX-64-STATIC:       # %bb.0: # %entry
5714; LINUX-64-STATIC-NEXT:    movl lsrc+262144(,%rdi,4), %eax
5715; LINUX-64-STATIC-NEXT:    movl %eax, ldst+262144(,%rdi,4)
5716; LINUX-64-STATIC-NEXT:    retq
5717;
5718; LINUX-32-STATIC-LABEL: big06:
5719; LINUX-32-STATIC:       # %bb.0: # %entry
5720; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5721; LINUX-32-STATIC-NEXT:    movl lsrc+262144(,%eax,4), %ecx
5722; LINUX-32-STATIC-NEXT:    movl %ecx, ldst+262144(,%eax,4)
5723; LINUX-32-STATIC-NEXT:    retl
5724;
5725; LINUX-32-PIC-LABEL: big06:
5726; LINUX-32-PIC:       # %bb.0: # %entry
5727; LINUX-32-PIC-NEXT:    calll .L63$pb
5728; LINUX-32-PIC-NEXT:  .L63$pb:
5729; LINUX-32-PIC-NEXT:    popl %eax
5730; LINUX-32-PIC-NEXT:  .Ltmp63:
5731; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp63-.L63$pb), %eax
5732; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5733; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax,%ecx,4), %edx
5734; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF+262144(%eax,%ecx,4)
5735; LINUX-32-PIC-NEXT:    retl
5736;
5737; LINUX-64-PIC-LABEL: big06:
5738; LINUX-64-PIC:       # %bb.0: # %entry
5739; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
5740; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5741; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
5742; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5743; LINUX-64-PIC-NEXT:    retq
5744;
5745; DARWIN-32-STATIC-LABEL: big06:
5746; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5747; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5748; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
5749; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst+262144(,%eax,4)
5750; DARWIN-32-STATIC-NEXT:    retl
5751;
5752; DARWIN-32-DYNAMIC-LABEL: big06:
5753; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5754; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5755; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
5756; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst+262144(,%eax,4)
5757; DARWIN-32-DYNAMIC-NEXT:    retl
5758;
5759; DARWIN-32-PIC-LABEL: big06:
5760; DARWIN-32-PIC:       ## %bb.0: ## %entry
5761; DARWIN-32-PIC-NEXT:    calll L63$pb
5762; DARWIN-32-PIC-NEXT:  L63$pb:
5763; DARWIN-32-PIC-NEXT:    popl %eax
5764; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5765; DARWIN-32-PIC-NEXT:    movl (_lsrc-L63$pb)+262144(%eax,%ecx,4), %edx
5766; DARWIN-32-PIC-NEXT:    movl %edx, (_ldst-L63$pb)+262144(%eax,%ecx,4)
5767; DARWIN-32-PIC-NEXT:    retl
5768;
5769; DARWIN-64-STATIC-LABEL: big06:
5770; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5771; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
5772; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5773; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
5774; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5775; DARWIN-64-STATIC-NEXT:    retq
5776;
5777; DARWIN-64-DYNAMIC-LABEL: big06:
5778; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5779; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
5780; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5781; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
5782; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5783; DARWIN-64-DYNAMIC-NEXT:    retq
5784;
5785; DARWIN-64-PIC-LABEL: big06:
5786; DARWIN-64-PIC:       ## %bb.0: ## %entry
5787; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
5788; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5789; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
5790; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5791; DARWIN-64-PIC-NEXT:    retq
5792
5793entry:
5794	%0 = add i64 %i, 65536
5795	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
5796	%2 = load i32, i32* %1, align 4
5797	%3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
5798	store i32 %2, i32* %3, align 4
5799	ret void
5800}
5801
5802define dso_local void @big07(i64 %i) nounwind {
5803; LINUX-64-STATIC-LABEL: big07:
5804; LINUX-64-STATIC:       # %bb.0: # %entry
5805; LINUX-64-STATIC-NEXT:    leaq ldst+262144(,%rdi,4), %rax
5806; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
5807; LINUX-64-STATIC-NEXT:    retq
5808;
5809; LINUX-32-STATIC-LABEL: big07:
5810; LINUX-32-STATIC:       # %bb.0: # %entry
5811; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5812; LINUX-32-STATIC-NEXT:    leal ldst+262144(,%eax,4), %eax
5813; LINUX-32-STATIC-NEXT:    movl %eax, lptr
5814; LINUX-32-STATIC-NEXT:    retl
5815;
5816; LINUX-32-PIC-LABEL: big07:
5817; LINUX-32-PIC:       # %bb.0: # %entry
5818; LINUX-32-PIC-NEXT:    calll .L64$pb
5819; LINUX-32-PIC-NEXT:  .L64$pb:
5820; LINUX-32-PIC-NEXT:    popl %eax
5821; LINUX-32-PIC-NEXT:  .Ltmp64:
5822; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp64-.L64$pb), %eax
5823; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5824; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax,%ecx,4), %ecx
5825; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
5826; LINUX-32-PIC-NEXT:    retl
5827;
5828; LINUX-64-PIC-LABEL: big07:
5829; LINUX-64-PIC:       # %bb.0: # %entry
5830; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
5831; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5832; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
5833; LINUX-64-PIC-NEXT:    retq
5834;
5835; DARWIN-32-STATIC-LABEL: big07:
5836; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5837; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5838; DARWIN-32-STATIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
5839; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
5840; DARWIN-32-STATIC-NEXT:    retl
5841;
5842; DARWIN-32-DYNAMIC-LABEL: big07:
5843; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5844; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5845; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
5846; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
5847; DARWIN-32-DYNAMIC-NEXT:    retl
5848;
5849; DARWIN-32-PIC-LABEL: big07:
5850; DARWIN-32-PIC:       ## %bb.0: ## %entry
5851; DARWIN-32-PIC-NEXT:    calll L64$pb
5852; DARWIN-32-PIC-NEXT:  L64$pb:
5853; DARWIN-32-PIC-NEXT:    popl %eax
5854; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5855; DARWIN-32-PIC-NEXT:    leal (_ldst-L64$pb)+262144(%eax,%ecx,4), %ecx
5856; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L64$pb(%eax)
5857; DARWIN-32-PIC-NEXT:    retl
5858;
5859; DARWIN-64-STATIC-LABEL: big07:
5860; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5861; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
5862; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5863; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
5864; DARWIN-64-STATIC-NEXT:    retq
5865;
5866; DARWIN-64-DYNAMIC-LABEL: big07:
5867; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5868; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
5869; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5870; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
5871; DARWIN-64-DYNAMIC-NEXT:    retq
5872;
5873; DARWIN-64-PIC-LABEL: big07:
5874; DARWIN-64-PIC:       ## %bb.0: ## %entry
5875; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
5876; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
5877; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
5878; DARWIN-64-PIC-NEXT:    retq
5879
5880entry:
5881	%.sum = add i64 %i, 65536
5882	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
5883	store i32* %0, i32** @lptr, align 8
5884	ret void
5885}
5886
5887define dso_local void @big08(i64 %i) nounwind {
5888; LINUX-64-STATIC-LABEL: big08:
5889; LINUX-64-STATIC:       # %bb.0: # %entry
5890; LINUX-64-STATIC-NEXT:    movl lsrc+262144(,%rdi,4), %eax
5891; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
5892; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5893; LINUX-64-STATIC-NEXT:    retq
5894;
5895; LINUX-32-STATIC-LABEL: big08:
5896; LINUX-32-STATIC:       # %bb.0: # %entry
5897; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5898; LINUX-32-STATIC-NEXT:    movl lsrc+262144(,%eax,4), %ecx
5899; LINUX-32-STATIC-NEXT:    movl lptr, %edx
5900; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5901; LINUX-32-STATIC-NEXT:    retl
5902;
5903; LINUX-32-PIC-LABEL: big08:
5904; LINUX-32-PIC:       # %bb.0: # %entry
5905; LINUX-32-PIC-NEXT:    calll .L65$pb
5906; LINUX-32-PIC-NEXT:  .L65$pb:
5907; LINUX-32-PIC-NEXT:    popl %eax
5908; LINUX-32-PIC-NEXT:  .Ltmp65:
5909; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp65-.L65$pb), %eax
5910; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5911; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax,%ecx,4), %edx
5912; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
5913; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5914; LINUX-32-PIC-NEXT:    retl
5915;
5916; LINUX-64-PIC-LABEL: big08:
5917; LINUX-64-PIC:       # %bb.0: # %entry
5918; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
5919; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5920; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
5921; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5922; LINUX-64-PIC-NEXT:    retq
5923;
5924; DARWIN-32-STATIC-LABEL: big08:
5925; DARWIN-32-STATIC:       ## %bb.0: ## %entry
5926; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5927; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
5928; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
5929; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5930; DARWIN-32-STATIC-NEXT:    retl
5931;
5932; DARWIN-32-DYNAMIC-LABEL: big08:
5933; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
5934; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5935; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
5936; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
5937; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
5938; DARWIN-32-DYNAMIC-NEXT:    retl
5939;
5940; DARWIN-32-PIC-LABEL: big08:
5941; DARWIN-32-PIC:       ## %bb.0: ## %entry
5942; DARWIN-32-PIC-NEXT:    calll L65$pb
5943; DARWIN-32-PIC-NEXT:  L65$pb:
5944; DARWIN-32-PIC-NEXT:    popl %eax
5945; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5946; DARWIN-32-PIC-NEXT:    movl (_lsrc-L65$pb)+262144(%eax,%ecx,4), %edx
5947; DARWIN-32-PIC-NEXT:    movl _lptr-L65$pb(%eax), %eax
5948; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
5949; DARWIN-32-PIC-NEXT:    retl
5950;
5951; DARWIN-64-STATIC-LABEL: big08:
5952; DARWIN-64-STATIC:       ## %bb.0: ## %entry
5953; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
5954; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5955; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
5956; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5957; DARWIN-64-STATIC-NEXT:    retq
5958;
5959; DARWIN-64-DYNAMIC-LABEL: big08:
5960; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
5961; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
5962; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5963; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
5964; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5965; DARWIN-64-DYNAMIC-NEXT:    retq
5966;
5967; DARWIN-64-PIC-LABEL: big08:
5968; DARWIN-64-PIC:       ## %bb.0: ## %entry
5969; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
5970; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
5971; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
5972; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
5973; DARWIN-64-PIC-NEXT:    retq
5974
5975entry:
5976	%0 = load i32*, i32** @lptr, align 8
5977	%1 = add i64 %i, 65536
5978	%2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
5979	%3 = load i32, i32* %2, align 4
5980	%4 = getelementptr i32, i32* %0, i64 %1
5981	store i32 %3, i32* %4, align 4
5982	ret void
5983}
5984
5985define dso_local i8* @bar00() nounwind {
5986; LINUX-64-STATIC-LABEL: bar00:
5987; LINUX-64-STATIC:       # %bb.0: # %entry
5988; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
5989; LINUX-64-STATIC-NEXT:    retq
5990;
5991; LINUX-32-STATIC-LABEL: bar00:
5992; LINUX-32-STATIC:       # %bb.0: # %entry
5993; LINUX-32-STATIC-NEXT:    movl $src, %eax
5994; LINUX-32-STATIC-NEXT:    retl
5995;
5996; LINUX-32-PIC-LABEL: bar00:
5997; LINUX-32-PIC:       # %bb.0: # %entry
5998; LINUX-32-PIC-NEXT:    calll .L66$pb
5999; LINUX-32-PIC-NEXT:  .L66$pb:
6000; LINUX-32-PIC-NEXT:    popl %eax
6001; LINUX-32-PIC-NEXT:  .Ltmp66:
6002; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp66-.L66$pb), %eax
6003; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
6004; LINUX-32-PIC-NEXT:    retl
6005;
6006; LINUX-64-PIC-LABEL: bar00:
6007; LINUX-64-PIC:       # %bb.0: # %entry
6008; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
6009; LINUX-64-PIC-NEXT:    retq
6010;
6011; DARWIN-32-STATIC-LABEL: bar00:
6012; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6013; DARWIN-32-STATIC-NEXT:    movl $_src, %eax
6014; DARWIN-32-STATIC-NEXT:    retl
6015;
6016; DARWIN-32-DYNAMIC-LABEL: bar00:
6017; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6018; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
6019; DARWIN-32-DYNAMIC-NEXT:    retl
6020;
6021; DARWIN-32-PIC-LABEL: bar00:
6022; DARWIN-32-PIC:       ## %bb.0: ## %entry
6023; DARWIN-32-PIC-NEXT:    calll L66$pb
6024; DARWIN-32-PIC-NEXT:  L66$pb:
6025; DARWIN-32-PIC-NEXT:    popl %eax
6026; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L66$pb(%eax), %eax
6027; DARWIN-32-PIC-NEXT:    retl
6028;
6029; DARWIN-64-STATIC-LABEL: bar00:
6030; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6031; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6032; DARWIN-64-STATIC-NEXT:    retq
6033;
6034; DARWIN-64-DYNAMIC-LABEL: bar00:
6035; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6036; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6037; DARWIN-64-DYNAMIC-NEXT:    retq
6038;
6039; DARWIN-64-PIC-LABEL: bar00:
6040; DARWIN-64-PIC:       ## %bb.0: ## %entry
6041; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6042; DARWIN-64-PIC-NEXT:    retq
6043
6044entry:
6045	ret i8* bitcast ([131072 x i32]* @src to i8*)
6046}
6047
6048define dso_local i8* @bxr00() nounwind {
6049; LINUX-64-STATIC-LABEL: bxr00:
6050; LINUX-64-STATIC:       # %bb.0: # %entry
6051; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
6052; LINUX-64-STATIC-NEXT:    retq
6053;
6054; LINUX-32-STATIC-LABEL: bxr00:
6055; LINUX-32-STATIC:       # %bb.0: # %entry
6056; LINUX-32-STATIC-NEXT:    movl $xsrc, %eax
6057; LINUX-32-STATIC-NEXT:    retl
6058;
6059; LINUX-32-PIC-LABEL: bxr00:
6060; LINUX-32-PIC:       # %bb.0: # %entry
6061; LINUX-32-PIC-NEXT:    calll .L67$pb
6062; LINUX-32-PIC-NEXT:  .L67$pb:
6063; LINUX-32-PIC-NEXT:    popl %eax
6064; LINUX-32-PIC-NEXT:  .Ltmp67:
6065; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp67-.L67$pb), %eax
6066; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
6067; LINUX-32-PIC-NEXT:    retl
6068;
6069; LINUX-64-PIC-LABEL: bxr00:
6070; LINUX-64-PIC:       # %bb.0: # %entry
6071; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
6072; LINUX-64-PIC-NEXT:    retq
6073;
6074; DARWIN-32-STATIC-LABEL: bxr00:
6075; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6076; DARWIN-32-STATIC-NEXT:    movl $_xsrc, %eax
6077; DARWIN-32-STATIC-NEXT:    retl
6078;
6079; DARWIN-32-DYNAMIC-LABEL: bxr00:
6080; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6081; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
6082; DARWIN-32-DYNAMIC-NEXT:    retl
6083;
6084; DARWIN-32-PIC-LABEL: bxr00:
6085; DARWIN-32-PIC:       ## %bb.0: ## %entry
6086; DARWIN-32-PIC-NEXT:    calll L67$pb
6087; DARWIN-32-PIC-NEXT:  L67$pb:
6088; DARWIN-32-PIC-NEXT:    popl %eax
6089; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L67$pb(%eax), %eax
6090; DARWIN-32-PIC-NEXT:    retl
6091;
6092; DARWIN-64-STATIC-LABEL: bxr00:
6093; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6094; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6095; DARWIN-64-STATIC-NEXT:    retq
6096;
6097; DARWIN-64-DYNAMIC-LABEL: bxr00:
6098; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6099; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6100; DARWIN-64-DYNAMIC-NEXT:    retq
6101;
6102; DARWIN-64-PIC-LABEL: bxr00:
6103; DARWIN-64-PIC:       ## %bb.0: ## %entry
6104; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6105; DARWIN-64-PIC-NEXT:    retq
6106
6107entry:
6108	ret i8* bitcast ([32 x i32]* @xsrc to i8*)
6109}
6110
6111define dso_local i8* @bar01() nounwind {
6112; LINUX-64-STATIC-LABEL: bar01:
6113; LINUX-64-STATIC:       # %bb.0: # %entry
6114; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
6115; LINUX-64-STATIC-NEXT:    retq
6116;
6117; LINUX-32-STATIC-LABEL: bar01:
6118; LINUX-32-STATIC:       # %bb.0: # %entry
6119; LINUX-32-STATIC-NEXT:    movl $dst, %eax
6120; LINUX-32-STATIC-NEXT:    retl
6121;
6122; LINUX-32-PIC-LABEL: bar01:
6123; LINUX-32-PIC:       # %bb.0: # %entry
6124; LINUX-32-PIC-NEXT:    calll .L68$pb
6125; LINUX-32-PIC-NEXT:  .L68$pb:
6126; LINUX-32-PIC-NEXT:    popl %eax
6127; LINUX-32-PIC-NEXT:  .Ltmp68:
6128; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp68-.L68$pb), %eax
6129; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
6130; LINUX-32-PIC-NEXT:    retl
6131;
6132; LINUX-64-PIC-LABEL: bar01:
6133; LINUX-64-PIC:       # %bb.0: # %entry
6134; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
6135; LINUX-64-PIC-NEXT:    retq
6136;
6137; DARWIN-32-STATIC-LABEL: bar01:
6138; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6139; DARWIN-32-STATIC-NEXT:    movl $_dst, %eax
6140; DARWIN-32-STATIC-NEXT:    retl
6141;
6142; DARWIN-32-DYNAMIC-LABEL: bar01:
6143; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6144; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
6145; DARWIN-32-DYNAMIC-NEXT:    retl
6146;
6147; DARWIN-32-PIC-LABEL: bar01:
6148; DARWIN-32-PIC:       ## %bb.0: ## %entry
6149; DARWIN-32-PIC-NEXT:    calll L68$pb
6150; DARWIN-32-PIC-NEXT:  L68$pb:
6151; DARWIN-32-PIC-NEXT:    popl %eax
6152; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L68$pb(%eax), %eax
6153; DARWIN-32-PIC-NEXT:    retl
6154;
6155; DARWIN-64-STATIC-LABEL: bar01:
6156; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6157; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6158; DARWIN-64-STATIC-NEXT:    retq
6159;
6160; DARWIN-64-DYNAMIC-LABEL: bar01:
6161; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6162; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6163; DARWIN-64-DYNAMIC-NEXT:    retq
6164;
6165; DARWIN-64-PIC-LABEL: bar01:
6166; DARWIN-64-PIC:       ## %bb.0: ## %entry
6167; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6168; DARWIN-64-PIC-NEXT:    retq
6169
6170entry:
6171	ret i8* bitcast ([131072 x i32]* @dst to i8*)
6172}
6173
6174define dso_local i8* @bxr01() nounwind {
6175; LINUX-64-STATIC-LABEL: bxr01:
6176; LINUX-64-STATIC:       # %bb.0: # %entry
6177; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
6178; LINUX-64-STATIC-NEXT:    retq
6179;
6180; LINUX-32-STATIC-LABEL: bxr01:
6181; LINUX-32-STATIC:       # %bb.0: # %entry
6182; LINUX-32-STATIC-NEXT:    movl $xdst, %eax
6183; LINUX-32-STATIC-NEXT:    retl
6184;
6185; LINUX-32-PIC-LABEL: bxr01:
6186; LINUX-32-PIC:       # %bb.0: # %entry
6187; LINUX-32-PIC-NEXT:    calll .L69$pb
6188; LINUX-32-PIC-NEXT:  .L69$pb:
6189; LINUX-32-PIC-NEXT:    popl %eax
6190; LINUX-32-PIC-NEXT:  .Ltmp69:
6191; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp69-.L69$pb), %eax
6192; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
6193; LINUX-32-PIC-NEXT:    retl
6194;
6195; LINUX-64-PIC-LABEL: bxr01:
6196; LINUX-64-PIC:       # %bb.0: # %entry
6197; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
6198; LINUX-64-PIC-NEXT:    retq
6199;
6200; DARWIN-32-STATIC-LABEL: bxr01:
6201; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6202; DARWIN-32-STATIC-NEXT:    movl $_xdst, %eax
6203; DARWIN-32-STATIC-NEXT:    retl
6204;
6205; DARWIN-32-DYNAMIC-LABEL: bxr01:
6206; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6207; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
6208; DARWIN-32-DYNAMIC-NEXT:    retl
6209;
6210; DARWIN-32-PIC-LABEL: bxr01:
6211; DARWIN-32-PIC:       ## %bb.0: ## %entry
6212; DARWIN-32-PIC-NEXT:    calll L69$pb
6213; DARWIN-32-PIC-NEXT:  L69$pb:
6214; DARWIN-32-PIC-NEXT:    popl %eax
6215; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L69$pb(%eax), %eax
6216; DARWIN-32-PIC-NEXT:    retl
6217;
6218; DARWIN-64-STATIC-LABEL: bxr01:
6219; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6220; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6221; DARWIN-64-STATIC-NEXT:    retq
6222;
6223; DARWIN-64-DYNAMIC-LABEL: bxr01:
6224; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6225; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6226; DARWIN-64-DYNAMIC-NEXT:    retq
6227;
6228; DARWIN-64-PIC-LABEL: bxr01:
6229; DARWIN-64-PIC:       ## %bb.0: ## %entry
6230; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6231; DARWIN-64-PIC-NEXT:    retq
6232
6233entry:
6234	ret i8* bitcast ([32 x i32]* @xdst to i8*)
6235}
6236
6237define dso_local i8* @bar02() nounwind {
6238; LINUX-64-STATIC-LABEL: bar02:
6239; LINUX-64-STATIC:       # %bb.0: # %entry
6240; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
6241; LINUX-64-STATIC-NEXT:    retq
6242;
6243; LINUX-32-STATIC-LABEL: bar02:
6244; LINUX-32-STATIC:       # %bb.0: # %entry
6245; LINUX-32-STATIC-NEXT:    movl $ptr, %eax
6246; LINUX-32-STATIC-NEXT:    retl
6247;
6248; LINUX-32-PIC-LABEL: bar02:
6249; LINUX-32-PIC:       # %bb.0: # %entry
6250; LINUX-32-PIC-NEXT:    calll .L70$pb
6251; LINUX-32-PIC-NEXT:  .L70$pb:
6252; LINUX-32-PIC-NEXT:    popl %eax
6253; LINUX-32-PIC-NEXT:  .Ltmp70:
6254; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp70-.L70$pb), %eax
6255; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
6256; LINUX-32-PIC-NEXT:    retl
6257;
6258; LINUX-64-PIC-LABEL: bar02:
6259; LINUX-64-PIC:       # %bb.0: # %entry
6260; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
6261; LINUX-64-PIC-NEXT:    retq
6262;
6263; DARWIN-32-STATIC-LABEL: bar02:
6264; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6265; DARWIN-32-STATIC-NEXT:    movl $_ptr, %eax
6266; DARWIN-32-STATIC-NEXT:    retl
6267;
6268; DARWIN-32-DYNAMIC-LABEL: bar02:
6269; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6270; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
6271; DARWIN-32-DYNAMIC-NEXT:    retl
6272;
6273; DARWIN-32-PIC-LABEL: bar02:
6274; DARWIN-32-PIC:       ## %bb.0: ## %entry
6275; DARWIN-32-PIC-NEXT:    calll L70$pb
6276; DARWIN-32-PIC-NEXT:  L70$pb:
6277; DARWIN-32-PIC-NEXT:    popl %eax
6278; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L70$pb(%eax), %eax
6279; DARWIN-32-PIC-NEXT:    retl
6280;
6281; DARWIN-64-STATIC-LABEL: bar02:
6282; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6283; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6284; DARWIN-64-STATIC-NEXT:    retq
6285;
6286; DARWIN-64-DYNAMIC-LABEL: bar02:
6287; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6288; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6289; DARWIN-64-DYNAMIC-NEXT:    retq
6290;
6291; DARWIN-64-PIC-LABEL: bar02:
6292; DARWIN-64-PIC:       ## %bb.0: ## %entry
6293; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6294; DARWIN-64-PIC-NEXT:    retq
6295
6296entry:
6297	ret i8* bitcast (i32** @ptr to i8*)
6298}
6299
6300define dso_local i8* @bar03() nounwind {
6301; LINUX-64-STATIC-LABEL: bar03:
6302; LINUX-64-STATIC:       # %bb.0: # %entry
6303; LINUX-64-STATIC-NEXT:    movl $dsrc, %eax
6304; LINUX-64-STATIC-NEXT:    retq
6305;
6306; LINUX-32-STATIC-LABEL: bar03:
6307; LINUX-32-STATIC:       # %bb.0: # %entry
6308; LINUX-32-STATIC-NEXT:    movl $dsrc, %eax
6309; LINUX-32-STATIC-NEXT:    retl
6310;
6311; LINUX-32-PIC-LABEL: bar03:
6312; LINUX-32-PIC:       # %bb.0: # %entry
6313; LINUX-32-PIC-NEXT:    calll .L71$pb
6314; LINUX-32-PIC-NEXT:  .L71$pb:
6315; LINUX-32-PIC-NEXT:    popl %eax
6316; LINUX-32-PIC-NEXT:  .Ltmp71:
6317; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp71-.L71$pb), %eax
6318; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF(%eax), %eax
6319; LINUX-32-PIC-NEXT:    retl
6320;
6321; LINUX-64-PIC-LABEL: bar03:
6322; LINUX-64-PIC:       # %bb.0: # %entry
6323; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
6324; LINUX-64-PIC-NEXT:    retq
6325;
6326; DARWIN-32-STATIC-LABEL: bar03:
6327; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6328; DARWIN-32-STATIC-NEXT:    movl $_dsrc, %eax
6329; DARWIN-32-STATIC-NEXT:    retl
6330;
6331; DARWIN-32-DYNAMIC-LABEL: bar03:
6332; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6333; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc, %eax
6334; DARWIN-32-DYNAMIC-NEXT:    retl
6335;
6336; DARWIN-32-PIC-LABEL: bar03:
6337; DARWIN-32-PIC:       ## %bb.0: ## %entry
6338; DARWIN-32-PIC-NEXT:    calll L71$pb
6339; DARWIN-32-PIC-NEXT:  L71$pb:
6340; DARWIN-32-PIC-NEXT:    popl %eax
6341; DARWIN-32-PIC-NEXT:    leal _dsrc-L71$pb(%eax), %eax
6342; DARWIN-32-PIC-NEXT:    retl
6343;
6344; DARWIN-64-STATIC-LABEL: bar03:
6345; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6346; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
6347; DARWIN-64-STATIC-NEXT:    retq
6348;
6349; DARWIN-64-DYNAMIC-LABEL: bar03:
6350; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6351; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
6352; DARWIN-64-DYNAMIC-NEXT:    retq
6353;
6354; DARWIN-64-PIC-LABEL: bar03:
6355; DARWIN-64-PIC:       ## %bb.0: ## %entry
6356; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
6357; DARWIN-64-PIC-NEXT:    retq
6358
6359entry:
6360	ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
6361}
6362
6363define dso_local i8* @bar04() nounwind {
6364; LINUX-64-STATIC-LABEL: bar04:
6365; LINUX-64-STATIC:       # %bb.0: # %entry
6366; LINUX-64-STATIC-NEXT:    movl $ddst, %eax
6367; LINUX-64-STATIC-NEXT:    retq
6368;
6369; LINUX-32-STATIC-LABEL: bar04:
6370; LINUX-32-STATIC:       # %bb.0: # %entry
6371; LINUX-32-STATIC-NEXT:    movl $ddst, %eax
6372; LINUX-32-STATIC-NEXT:    retl
6373;
6374; LINUX-32-PIC-LABEL: bar04:
6375; LINUX-32-PIC:       # %bb.0: # %entry
6376; LINUX-32-PIC-NEXT:    calll .L72$pb
6377; LINUX-32-PIC-NEXT:  .L72$pb:
6378; LINUX-32-PIC-NEXT:    popl %eax
6379; LINUX-32-PIC-NEXT:  .Ltmp72:
6380; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp72-.L72$pb), %eax
6381; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF(%eax), %eax
6382; LINUX-32-PIC-NEXT:    retl
6383;
6384; LINUX-64-PIC-LABEL: bar04:
6385; LINUX-64-PIC:       # %bb.0: # %entry
6386; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
6387; LINUX-64-PIC-NEXT:    retq
6388;
6389; DARWIN-32-STATIC-LABEL: bar04:
6390; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6391; DARWIN-32-STATIC-NEXT:    movl $_ddst, %eax
6392; DARWIN-32-STATIC-NEXT:    retl
6393;
6394; DARWIN-32-DYNAMIC-LABEL: bar04:
6395; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6396; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, %eax
6397; DARWIN-32-DYNAMIC-NEXT:    retl
6398;
6399; DARWIN-32-PIC-LABEL: bar04:
6400; DARWIN-32-PIC:       ## %bb.0: ## %entry
6401; DARWIN-32-PIC-NEXT:    calll L72$pb
6402; DARWIN-32-PIC-NEXT:  L72$pb:
6403; DARWIN-32-PIC-NEXT:    popl %eax
6404; DARWIN-32-PIC-NEXT:    leal _ddst-L72$pb(%eax), %eax
6405; DARWIN-32-PIC-NEXT:    retl
6406;
6407; DARWIN-64-STATIC-LABEL: bar04:
6408; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6409; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
6410; DARWIN-64-STATIC-NEXT:    retq
6411;
6412; DARWIN-64-DYNAMIC-LABEL: bar04:
6413; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6414; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
6415; DARWIN-64-DYNAMIC-NEXT:    retq
6416;
6417; DARWIN-64-PIC-LABEL: bar04:
6418; DARWIN-64-PIC:       ## %bb.0: ## %entry
6419; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
6420; DARWIN-64-PIC-NEXT:    retq
6421
6422entry:
6423	ret i8* bitcast ([131072 x i32]* @ddst to i8*)
6424}
6425
6426define dso_local i8* @bar05() nounwind {
6427; LINUX-64-STATIC-LABEL: bar05:
6428; LINUX-64-STATIC:       # %bb.0: # %entry
6429; LINUX-64-STATIC-NEXT:    movl $dptr, %eax
6430; LINUX-64-STATIC-NEXT:    retq
6431;
6432; LINUX-32-STATIC-LABEL: bar05:
6433; LINUX-32-STATIC:       # %bb.0: # %entry
6434; LINUX-32-STATIC-NEXT:    movl $dptr, %eax
6435; LINUX-32-STATIC-NEXT:    retl
6436;
6437; LINUX-32-PIC-LABEL: bar05:
6438; LINUX-32-PIC:       # %bb.0: # %entry
6439; LINUX-32-PIC-NEXT:    calll .L73$pb
6440; LINUX-32-PIC-NEXT:  .L73$pb:
6441; LINUX-32-PIC-NEXT:    popl %eax
6442; LINUX-32-PIC-NEXT:  .Ltmp73:
6443; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp73-.L73$pb), %eax
6444; LINUX-32-PIC-NEXT:    leal .Ldptr$local@GOTOFF(%eax), %eax
6445; LINUX-32-PIC-NEXT:    retl
6446;
6447; LINUX-64-PIC-LABEL: bar05:
6448; LINUX-64-PIC:       # %bb.0: # %entry
6449; LINUX-64-PIC-NEXT:    leaq .Ldptr$local(%rip), %rax
6450; LINUX-64-PIC-NEXT:    retq
6451;
6452; DARWIN-32-STATIC-LABEL: bar05:
6453; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6454; DARWIN-32-STATIC-NEXT:    movl $_dptr, %eax
6455; DARWIN-32-STATIC-NEXT:    retl
6456;
6457; DARWIN-32-DYNAMIC-LABEL: bar05:
6458; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6459; DARWIN-32-DYNAMIC-NEXT:    movl $_dptr, %eax
6460; DARWIN-32-DYNAMIC-NEXT:    retl
6461;
6462; DARWIN-32-PIC-LABEL: bar05:
6463; DARWIN-32-PIC:       ## %bb.0: ## %entry
6464; DARWIN-32-PIC-NEXT:    calll L73$pb
6465; DARWIN-32-PIC-NEXT:  L73$pb:
6466; DARWIN-32-PIC-NEXT:    popl %eax
6467; DARWIN-32-PIC-NEXT:    leal _dptr-L73$pb(%eax), %eax
6468; DARWIN-32-PIC-NEXT:    retl
6469;
6470; DARWIN-64-STATIC-LABEL: bar05:
6471; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6472; DARWIN-64-STATIC-NEXT:    leaq _dptr(%rip), %rax
6473; DARWIN-64-STATIC-NEXT:    retq
6474;
6475; DARWIN-64-DYNAMIC-LABEL: bar05:
6476; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6477; DARWIN-64-DYNAMIC-NEXT:    leaq _dptr(%rip), %rax
6478; DARWIN-64-DYNAMIC-NEXT:    retq
6479;
6480; DARWIN-64-PIC-LABEL: bar05:
6481; DARWIN-64-PIC:       ## %bb.0: ## %entry
6482; DARWIN-64-PIC-NEXT:    leaq _dptr(%rip), %rax
6483; DARWIN-64-PIC-NEXT:    retq
6484
6485entry:
6486	ret i8* bitcast (i32** @dptr to i8*)
6487}
6488
6489define dso_local i8* @bar06() nounwind {
6490; LINUX-64-STATIC-LABEL: bar06:
6491; LINUX-64-STATIC:       # %bb.0: # %entry
6492; LINUX-64-STATIC-NEXT:    movl $lsrc, %eax
6493; LINUX-64-STATIC-NEXT:    retq
6494;
6495; LINUX-32-STATIC-LABEL: bar06:
6496; LINUX-32-STATIC:       # %bb.0: # %entry
6497; LINUX-32-STATIC-NEXT:    movl $lsrc, %eax
6498; LINUX-32-STATIC-NEXT:    retl
6499;
6500; LINUX-32-PIC-LABEL: bar06:
6501; LINUX-32-PIC:       # %bb.0: # %entry
6502; LINUX-32-PIC-NEXT:    calll .L74$pb
6503; LINUX-32-PIC-NEXT:  .L74$pb:
6504; LINUX-32-PIC-NEXT:    popl %eax
6505; LINUX-32-PIC-NEXT:  .Ltmp74:
6506; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp74-.L74$pb), %eax
6507; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF(%eax), %eax
6508; LINUX-32-PIC-NEXT:    retl
6509;
6510; LINUX-64-PIC-LABEL: bar06:
6511; LINUX-64-PIC:       # %bb.0: # %entry
6512; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
6513; LINUX-64-PIC-NEXT:    retq
6514;
6515; DARWIN-32-STATIC-LABEL: bar06:
6516; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6517; DARWIN-32-STATIC-NEXT:    movl $_lsrc, %eax
6518; DARWIN-32-STATIC-NEXT:    retl
6519;
6520; DARWIN-32-DYNAMIC-LABEL: bar06:
6521; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6522; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc, %eax
6523; DARWIN-32-DYNAMIC-NEXT:    retl
6524;
6525; DARWIN-32-PIC-LABEL: bar06:
6526; DARWIN-32-PIC:       ## %bb.0: ## %entry
6527; DARWIN-32-PIC-NEXT:    calll L74$pb
6528; DARWIN-32-PIC-NEXT:  L74$pb:
6529; DARWIN-32-PIC-NEXT:    popl %eax
6530; DARWIN-32-PIC-NEXT:    leal _lsrc-L74$pb(%eax), %eax
6531; DARWIN-32-PIC-NEXT:    retl
6532;
6533; DARWIN-64-STATIC-LABEL: bar06:
6534; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6535; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
6536; DARWIN-64-STATIC-NEXT:    retq
6537;
6538; DARWIN-64-DYNAMIC-LABEL: bar06:
6539; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6540; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
6541; DARWIN-64-DYNAMIC-NEXT:    retq
6542;
6543; DARWIN-64-PIC-LABEL: bar06:
6544; DARWIN-64-PIC:       ## %bb.0: ## %entry
6545; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
6546; DARWIN-64-PIC-NEXT:    retq
6547
6548entry:
6549	ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
6550}
6551
6552define dso_local i8* @bar07() nounwind {
6553; LINUX-64-STATIC-LABEL: bar07:
6554; LINUX-64-STATIC:       # %bb.0: # %entry
6555; LINUX-64-STATIC-NEXT:    movl $ldst, %eax
6556; LINUX-64-STATIC-NEXT:    retq
6557;
6558; LINUX-32-STATIC-LABEL: bar07:
6559; LINUX-32-STATIC:       # %bb.0: # %entry
6560; LINUX-32-STATIC-NEXT:    movl $ldst, %eax
6561; LINUX-32-STATIC-NEXT:    retl
6562;
6563; LINUX-32-PIC-LABEL: bar07:
6564; LINUX-32-PIC:       # %bb.0: # %entry
6565; LINUX-32-PIC-NEXT:    calll .L75$pb
6566; LINUX-32-PIC-NEXT:  .L75$pb:
6567; LINUX-32-PIC-NEXT:    popl %eax
6568; LINUX-32-PIC-NEXT:  .Ltmp75:
6569; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp75-.L75$pb), %eax
6570; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %eax
6571; LINUX-32-PIC-NEXT:    retl
6572;
6573; LINUX-64-PIC-LABEL: bar07:
6574; LINUX-64-PIC:       # %bb.0: # %entry
6575; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
6576; LINUX-64-PIC-NEXT:    retq
6577;
6578; DARWIN-32-STATIC-LABEL: bar07:
6579; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6580; DARWIN-32-STATIC-NEXT:    movl $_ldst, %eax
6581; DARWIN-32-STATIC-NEXT:    retl
6582;
6583; DARWIN-32-DYNAMIC-LABEL: bar07:
6584; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6585; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, %eax
6586; DARWIN-32-DYNAMIC-NEXT:    retl
6587;
6588; DARWIN-32-PIC-LABEL: bar07:
6589; DARWIN-32-PIC:       ## %bb.0: ## %entry
6590; DARWIN-32-PIC-NEXT:    calll L75$pb
6591; DARWIN-32-PIC-NEXT:  L75$pb:
6592; DARWIN-32-PIC-NEXT:    popl %eax
6593; DARWIN-32-PIC-NEXT:    leal _ldst-L75$pb(%eax), %eax
6594; DARWIN-32-PIC-NEXT:    retl
6595;
6596; DARWIN-64-STATIC-LABEL: bar07:
6597; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6598; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
6599; DARWIN-64-STATIC-NEXT:    retq
6600;
6601; DARWIN-64-DYNAMIC-LABEL: bar07:
6602; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6603; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
6604; DARWIN-64-DYNAMIC-NEXT:    retq
6605;
6606; DARWIN-64-PIC-LABEL: bar07:
6607; DARWIN-64-PIC:       ## %bb.0: ## %entry
6608; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
6609; DARWIN-64-PIC-NEXT:    retq
6610
6611entry:
6612	ret i8* bitcast ([131072 x i32]* @ldst to i8*)
6613}
6614
6615define dso_local i8* @bar08() nounwind {
6616; LINUX-64-STATIC-LABEL: bar08:
6617; LINUX-64-STATIC:       # %bb.0: # %entry
6618; LINUX-64-STATIC-NEXT:    movl $lptr, %eax
6619; LINUX-64-STATIC-NEXT:    retq
6620;
6621; LINUX-32-STATIC-LABEL: bar08:
6622; LINUX-32-STATIC:       # %bb.0: # %entry
6623; LINUX-32-STATIC-NEXT:    movl $lptr, %eax
6624; LINUX-32-STATIC-NEXT:    retl
6625;
6626; LINUX-32-PIC-LABEL: bar08:
6627; LINUX-32-PIC:       # %bb.0: # %entry
6628; LINUX-32-PIC-NEXT:    calll .L76$pb
6629; LINUX-32-PIC-NEXT:  .L76$pb:
6630; LINUX-32-PIC-NEXT:    popl %eax
6631; LINUX-32-PIC-NEXT:  .Ltmp76:
6632; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp76-.L76$pb), %eax
6633; LINUX-32-PIC-NEXT:    leal lptr@GOTOFF(%eax), %eax
6634; LINUX-32-PIC-NEXT:    retl
6635;
6636; LINUX-64-PIC-LABEL: bar08:
6637; LINUX-64-PIC:       # %bb.0: # %entry
6638; LINUX-64-PIC-NEXT:    leaq lptr(%rip), %rax
6639; LINUX-64-PIC-NEXT:    retq
6640;
6641; DARWIN-32-STATIC-LABEL: bar08:
6642; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6643; DARWIN-32-STATIC-NEXT:    movl $_lptr, %eax
6644; DARWIN-32-STATIC-NEXT:    retl
6645;
6646; DARWIN-32-DYNAMIC-LABEL: bar08:
6647; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6648; DARWIN-32-DYNAMIC-NEXT:    movl $_lptr, %eax
6649; DARWIN-32-DYNAMIC-NEXT:    retl
6650;
6651; DARWIN-32-PIC-LABEL: bar08:
6652; DARWIN-32-PIC:       ## %bb.0: ## %entry
6653; DARWIN-32-PIC-NEXT:    calll L76$pb
6654; DARWIN-32-PIC-NEXT:  L76$pb:
6655; DARWIN-32-PIC-NEXT:    popl %eax
6656; DARWIN-32-PIC-NEXT:    leal _lptr-L76$pb(%eax), %eax
6657; DARWIN-32-PIC-NEXT:    retl
6658;
6659; DARWIN-64-STATIC-LABEL: bar08:
6660; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6661; DARWIN-64-STATIC-NEXT:    leaq _lptr(%rip), %rax
6662; DARWIN-64-STATIC-NEXT:    retq
6663;
6664; DARWIN-64-DYNAMIC-LABEL: bar08:
6665; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6666; DARWIN-64-DYNAMIC-NEXT:    leaq _lptr(%rip), %rax
6667; DARWIN-64-DYNAMIC-NEXT:    retq
6668;
6669; DARWIN-64-PIC-LABEL: bar08:
6670; DARWIN-64-PIC:       ## %bb.0: ## %entry
6671; DARWIN-64-PIC-NEXT:    leaq _lptr(%rip), %rax
6672; DARWIN-64-PIC-NEXT:    retq
6673
6674entry:
6675	ret i8* bitcast (i32** @lptr to i8*)
6676}
6677
6678define dso_local i8* @har00() nounwind {
6679; LINUX-64-STATIC-LABEL: har00:
6680; LINUX-64-STATIC:       # %bb.0: # %entry
6681; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
6682; LINUX-64-STATIC-NEXT:    retq
6683;
6684; LINUX-32-STATIC-LABEL: har00:
6685; LINUX-32-STATIC:       # %bb.0: # %entry
6686; LINUX-32-STATIC-NEXT:    movl $src, %eax
6687; LINUX-32-STATIC-NEXT:    retl
6688;
6689; LINUX-32-PIC-LABEL: har00:
6690; LINUX-32-PIC:       # %bb.0: # %entry
6691; LINUX-32-PIC-NEXT:    calll .L77$pb
6692; LINUX-32-PIC-NEXT:  .L77$pb:
6693; LINUX-32-PIC-NEXT:    popl %eax
6694; LINUX-32-PIC-NEXT:  .Ltmp77:
6695; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp77-.L77$pb), %eax
6696; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
6697; LINUX-32-PIC-NEXT:    retl
6698;
6699; LINUX-64-PIC-LABEL: har00:
6700; LINUX-64-PIC:       # %bb.0: # %entry
6701; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
6702; LINUX-64-PIC-NEXT:    retq
6703;
6704; DARWIN-32-STATIC-LABEL: har00:
6705; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6706; DARWIN-32-STATIC-NEXT:    movl $_src, %eax
6707; DARWIN-32-STATIC-NEXT:    retl
6708;
6709; DARWIN-32-DYNAMIC-LABEL: har00:
6710; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6711; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
6712; DARWIN-32-DYNAMIC-NEXT:    retl
6713;
6714; DARWIN-32-PIC-LABEL: har00:
6715; DARWIN-32-PIC:       ## %bb.0: ## %entry
6716; DARWIN-32-PIC-NEXT:    calll L77$pb
6717; DARWIN-32-PIC-NEXT:  L77$pb:
6718; DARWIN-32-PIC-NEXT:    popl %eax
6719; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L77$pb(%eax), %eax
6720; DARWIN-32-PIC-NEXT:    retl
6721;
6722; DARWIN-64-STATIC-LABEL: har00:
6723; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6724; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6725; DARWIN-64-STATIC-NEXT:    retq
6726;
6727; DARWIN-64-DYNAMIC-LABEL: har00:
6728; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6729; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6730; DARWIN-64-DYNAMIC-NEXT:    retq
6731;
6732; DARWIN-64-PIC-LABEL: har00:
6733; DARWIN-64-PIC:       ## %bb.0: ## %entry
6734; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
6735; DARWIN-64-PIC-NEXT:    retq
6736
6737entry:
6738	ret i8* bitcast ([131072 x i32]* @src to i8*)
6739}
6740
6741define dso_local i8* @hxr00() nounwind {
6742; LINUX-64-STATIC-LABEL: hxr00:
6743; LINUX-64-STATIC:       # %bb.0: # %entry
6744; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
6745; LINUX-64-STATIC-NEXT:    retq
6746;
6747; LINUX-32-STATIC-LABEL: hxr00:
6748; LINUX-32-STATIC:       # %bb.0: # %entry
6749; LINUX-32-STATIC-NEXT:    movl $xsrc, %eax
6750; LINUX-32-STATIC-NEXT:    retl
6751;
6752; LINUX-32-PIC-LABEL: hxr00:
6753; LINUX-32-PIC:       # %bb.0: # %entry
6754; LINUX-32-PIC-NEXT:    calll .L78$pb
6755; LINUX-32-PIC-NEXT:  .L78$pb:
6756; LINUX-32-PIC-NEXT:    popl %eax
6757; LINUX-32-PIC-NEXT:  .Ltmp78:
6758; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp78-.L78$pb), %eax
6759; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
6760; LINUX-32-PIC-NEXT:    retl
6761;
6762; LINUX-64-PIC-LABEL: hxr00:
6763; LINUX-64-PIC:       # %bb.0: # %entry
6764; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
6765; LINUX-64-PIC-NEXT:    retq
6766;
6767; DARWIN-32-STATIC-LABEL: hxr00:
6768; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6769; DARWIN-32-STATIC-NEXT:    movl $_xsrc, %eax
6770; DARWIN-32-STATIC-NEXT:    retl
6771;
6772; DARWIN-32-DYNAMIC-LABEL: hxr00:
6773; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6774; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
6775; DARWIN-32-DYNAMIC-NEXT:    retl
6776;
6777; DARWIN-32-PIC-LABEL: hxr00:
6778; DARWIN-32-PIC:       ## %bb.0: ## %entry
6779; DARWIN-32-PIC-NEXT:    calll L78$pb
6780; DARWIN-32-PIC-NEXT:  L78$pb:
6781; DARWIN-32-PIC-NEXT:    popl %eax
6782; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L78$pb(%eax), %eax
6783; DARWIN-32-PIC-NEXT:    retl
6784;
6785; DARWIN-64-STATIC-LABEL: hxr00:
6786; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6787; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6788; DARWIN-64-STATIC-NEXT:    retq
6789;
6790; DARWIN-64-DYNAMIC-LABEL: hxr00:
6791; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6792; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6793; DARWIN-64-DYNAMIC-NEXT:    retq
6794;
6795; DARWIN-64-PIC-LABEL: hxr00:
6796; DARWIN-64-PIC:       ## %bb.0: ## %entry
6797; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
6798; DARWIN-64-PIC-NEXT:    retq
6799
6800entry:
6801	ret i8* bitcast ([32 x i32]* @xsrc to i8*)
6802}
6803
6804define dso_local i8* @har01() nounwind {
6805; LINUX-64-STATIC-LABEL: har01:
6806; LINUX-64-STATIC:       # %bb.0: # %entry
6807; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
6808; LINUX-64-STATIC-NEXT:    retq
6809;
6810; LINUX-32-STATIC-LABEL: har01:
6811; LINUX-32-STATIC:       # %bb.0: # %entry
6812; LINUX-32-STATIC-NEXT:    movl $dst, %eax
6813; LINUX-32-STATIC-NEXT:    retl
6814;
6815; LINUX-32-PIC-LABEL: har01:
6816; LINUX-32-PIC:       # %bb.0: # %entry
6817; LINUX-32-PIC-NEXT:    calll .L79$pb
6818; LINUX-32-PIC-NEXT:  .L79$pb:
6819; LINUX-32-PIC-NEXT:    popl %eax
6820; LINUX-32-PIC-NEXT:  .Ltmp79:
6821; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp79-.L79$pb), %eax
6822; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
6823; LINUX-32-PIC-NEXT:    retl
6824;
6825; LINUX-64-PIC-LABEL: har01:
6826; LINUX-64-PIC:       # %bb.0: # %entry
6827; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
6828; LINUX-64-PIC-NEXT:    retq
6829;
6830; DARWIN-32-STATIC-LABEL: har01:
6831; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6832; DARWIN-32-STATIC-NEXT:    movl $_dst, %eax
6833; DARWIN-32-STATIC-NEXT:    retl
6834;
6835; DARWIN-32-DYNAMIC-LABEL: har01:
6836; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6837; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
6838; DARWIN-32-DYNAMIC-NEXT:    retl
6839;
6840; DARWIN-32-PIC-LABEL: har01:
6841; DARWIN-32-PIC:       ## %bb.0: ## %entry
6842; DARWIN-32-PIC-NEXT:    calll L79$pb
6843; DARWIN-32-PIC-NEXT:  L79$pb:
6844; DARWIN-32-PIC-NEXT:    popl %eax
6845; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L79$pb(%eax), %eax
6846; DARWIN-32-PIC-NEXT:    retl
6847;
6848; DARWIN-64-STATIC-LABEL: har01:
6849; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6850; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6851; DARWIN-64-STATIC-NEXT:    retq
6852;
6853; DARWIN-64-DYNAMIC-LABEL: har01:
6854; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6855; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6856; DARWIN-64-DYNAMIC-NEXT:    retq
6857;
6858; DARWIN-64-PIC-LABEL: har01:
6859; DARWIN-64-PIC:       ## %bb.0: ## %entry
6860; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
6861; DARWIN-64-PIC-NEXT:    retq
6862
6863entry:
6864	ret i8* bitcast ([131072 x i32]* @dst to i8*)
6865}
6866
6867define dso_local i8* @hxr01() nounwind {
6868; LINUX-64-STATIC-LABEL: hxr01:
6869; LINUX-64-STATIC:       # %bb.0: # %entry
6870; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
6871; LINUX-64-STATIC-NEXT:    retq
6872;
6873; LINUX-32-STATIC-LABEL: hxr01:
6874; LINUX-32-STATIC:       # %bb.0: # %entry
6875; LINUX-32-STATIC-NEXT:    movl $xdst, %eax
6876; LINUX-32-STATIC-NEXT:    retl
6877;
6878; LINUX-32-PIC-LABEL: hxr01:
6879; LINUX-32-PIC:       # %bb.0: # %entry
6880; LINUX-32-PIC-NEXT:    calll .L80$pb
6881; LINUX-32-PIC-NEXT:  .L80$pb:
6882; LINUX-32-PIC-NEXT:    popl %eax
6883; LINUX-32-PIC-NEXT:  .Ltmp80:
6884; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp80-.L80$pb), %eax
6885; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
6886; LINUX-32-PIC-NEXT:    retl
6887;
6888; LINUX-64-PIC-LABEL: hxr01:
6889; LINUX-64-PIC:       # %bb.0: # %entry
6890; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
6891; LINUX-64-PIC-NEXT:    retq
6892;
6893; DARWIN-32-STATIC-LABEL: hxr01:
6894; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6895; DARWIN-32-STATIC-NEXT:    movl $_xdst, %eax
6896; DARWIN-32-STATIC-NEXT:    retl
6897;
6898; DARWIN-32-DYNAMIC-LABEL: hxr01:
6899; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6900; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
6901; DARWIN-32-DYNAMIC-NEXT:    retl
6902;
6903; DARWIN-32-PIC-LABEL: hxr01:
6904; DARWIN-32-PIC:       ## %bb.0: ## %entry
6905; DARWIN-32-PIC-NEXT:    calll L80$pb
6906; DARWIN-32-PIC-NEXT:  L80$pb:
6907; DARWIN-32-PIC-NEXT:    popl %eax
6908; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L80$pb(%eax), %eax
6909; DARWIN-32-PIC-NEXT:    retl
6910;
6911; DARWIN-64-STATIC-LABEL: hxr01:
6912; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6913; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6914; DARWIN-64-STATIC-NEXT:    retq
6915;
6916; DARWIN-64-DYNAMIC-LABEL: hxr01:
6917; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6918; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6919; DARWIN-64-DYNAMIC-NEXT:    retq
6920;
6921; DARWIN-64-PIC-LABEL: hxr01:
6922; DARWIN-64-PIC:       ## %bb.0: ## %entry
6923; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
6924; DARWIN-64-PIC-NEXT:    retq
6925
6926entry:
6927	ret i8* bitcast ([32 x i32]* @xdst to i8*)
6928}
6929
6930define dso_local i8* @har02() nounwind {
6931; LINUX-64-STATIC-LABEL: har02:
6932; LINUX-64-STATIC:       # %bb.0: # %entry
6933; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
6934; LINUX-64-STATIC-NEXT:    movq (%rax), %rax
6935; LINUX-64-STATIC-NEXT:    retq
6936;
6937; LINUX-32-STATIC-LABEL: har02:
6938; LINUX-32-STATIC:       # %bb.0: # %entry
6939; LINUX-32-STATIC-NEXT:    movl ptr, %eax
6940; LINUX-32-STATIC-NEXT:    retl
6941;
6942; LINUX-32-PIC-LABEL: har02:
6943; LINUX-32-PIC:       # %bb.0: # %entry
6944; LINUX-32-PIC-NEXT:    calll .L81$pb
6945; LINUX-32-PIC-NEXT:  .L81$pb:
6946; LINUX-32-PIC-NEXT:    popl %eax
6947; LINUX-32-PIC-NEXT:  .Ltmp81:
6948; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp81-.L81$pb), %eax
6949; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
6950; LINUX-32-PIC-NEXT:    movl (%eax), %eax
6951; LINUX-32-PIC-NEXT:    retl
6952;
6953; LINUX-64-PIC-LABEL: har02:
6954; LINUX-64-PIC:       # %bb.0: # %entry
6955; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
6956; LINUX-64-PIC-NEXT:    movq (%rax), %rax
6957; LINUX-64-PIC-NEXT:    retq
6958;
6959; DARWIN-32-STATIC-LABEL: har02:
6960; DARWIN-32-STATIC:       ## %bb.0: ## %entry
6961; DARWIN-32-STATIC-NEXT:    movl _ptr, %eax
6962; DARWIN-32-STATIC-NEXT:    retl
6963;
6964; DARWIN-32-DYNAMIC-LABEL: har02:
6965; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
6966; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
6967; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
6968; DARWIN-32-DYNAMIC-NEXT:    retl
6969;
6970; DARWIN-32-PIC-LABEL: har02:
6971; DARWIN-32-PIC:       ## %bb.0: ## %entry
6972; DARWIN-32-PIC-NEXT:    calll L81$pb
6973; DARWIN-32-PIC-NEXT:  L81$pb:
6974; DARWIN-32-PIC-NEXT:    popl %eax
6975; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L81$pb(%eax), %eax
6976; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
6977; DARWIN-32-PIC-NEXT:    retl
6978;
6979; DARWIN-64-STATIC-LABEL: har02:
6980; DARWIN-64-STATIC:       ## %bb.0: ## %entry
6981; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6982; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
6983; DARWIN-64-STATIC-NEXT:    retq
6984;
6985; DARWIN-64-DYNAMIC-LABEL: har02:
6986; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
6987; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6988; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
6989; DARWIN-64-DYNAMIC-NEXT:    retq
6990;
6991; DARWIN-64-PIC-LABEL: har02:
6992; DARWIN-64-PIC:       ## %bb.0: ## %entry
6993; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
6994; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
6995; DARWIN-64-PIC-NEXT:    retq
6996
6997entry:
6998	%0 = load i32*, i32** @ptr, align 8
6999	%1 = bitcast i32* %0 to i8*
7000	ret i8* %1
7001}
7002
7003define dso_local i8* @har03() nounwind {
7004; LINUX-64-STATIC-LABEL: har03:
7005; LINUX-64-STATIC:       # %bb.0: # %entry
7006; LINUX-64-STATIC-NEXT:    movl $dsrc, %eax
7007; LINUX-64-STATIC-NEXT:    retq
7008;
7009; LINUX-32-STATIC-LABEL: har03:
7010; LINUX-32-STATIC:       # %bb.0: # %entry
7011; LINUX-32-STATIC-NEXT:    movl $dsrc, %eax
7012; LINUX-32-STATIC-NEXT:    retl
7013;
7014; LINUX-32-PIC-LABEL: har03:
7015; LINUX-32-PIC:       # %bb.0: # %entry
7016; LINUX-32-PIC-NEXT:    calll .L82$pb
7017; LINUX-32-PIC-NEXT:  .L82$pb:
7018; LINUX-32-PIC-NEXT:    popl %eax
7019; LINUX-32-PIC-NEXT:  .Ltmp82:
7020; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp82-.L82$pb), %eax
7021; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF(%eax), %eax
7022; LINUX-32-PIC-NEXT:    retl
7023;
7024; LINUX-64-PIC-LABEL: har03:
7025; LINUX-64-PIC:       # %bb.0: # %entry
7026; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
7027; LINUX-64-PIC-NEXT:    retq
7028;
7029; DARWIN-32-STATIC-LABEL: har03:
7030; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7031; DARWIN-32-STATIC-NEXT:    movl $_dsrc, %eax
7032; DARWIN-32-STATIC-NEXT:    retl
7033;
7034; DARWIN-32-DYNAMIC-LABEL: har03:
7035; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7036; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc, %eax
7037; DARWIN-32-DYNAMIC-NEXT:    retl
7038;
7039; DARWIN-32-PIC-LABEL: har03:
7040; DARWIN-32-PIC:       ## %bb.0: ## %entry
7041; DARWIN-32-PIC-NEXT:    calll L82$pb
7042; DARWIN-32-PIC-NEXT:  L82$pb:
7043; DARWIN-32-PIC-NEXT:    popl %eax
7044; DARWIN-32-PIC-NEXT:    leal _dsrc-L82$pb(%eax), %eax
7045; DARWIN-32-PIC-NEXT:    retl
7046;
7047; DARWIN-64-STATIC-LABEL: har03:
7048; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7049; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
7050; DARWIN-64-STATIC-NEXT:    retq
7051;
7052; DARWIN-64-DYNAMIC-LABEL: har03:
7053; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7054; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
7055; DARWIN-64-DYNAMIC-NEXT:    retq
7056;
7057; DARWIN-64-PIC-LABEL: har03:
7058; DARWIN-64-PIC:       ## %bb.0: ## %entry
7059; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
7060; DARWIN-64-PIC-NEXT:    retq
7061
7062entry:
7063	ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
7064}
7065
7066define dso_local i8* @har04() nounwind {
7067; LINUX-64-STATIC-LABEL: har04:
7068; LINUX-64-STATIC:       # %bb.0: # %entry
7069; LINUX-64-STATIC-NEXT:    movl $ddst, %eax
7070; LINUX-64-STATIC-NEXT:    retq
7071;
7072; LINUX-32-STATIC-LABEL: har04:
7073; LINUX-32-STATIC:       # %bb.0: # %entry
7074; LINUX-32-STATIC-NEXT:    movl $ddst, %eax
7075; LINUX-32-STATIC-NEXT:    retl
7076;
7077; LINUX-32-PIC-LABEL: har04:
7078; LINUX-32-PIC:       # %bb.0: # %entry
7079; LINUX-32-PIC-NEXT:    calll .L83$pb
7080; LINUX-32-PIC-NEXT:  .L83$pb:
7081; LINUX-32-PIC-NEXT:    popl %eax
7082; LINUX-32-PIC-NEXT:  .Ltmp83:
7083; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp83-.L83$pb), %eax
7084; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF(%eax), %eax
7085; LINUX-32-PIC-NEXT:    retl
7086;
7087; LINUX-64-PIC-LABEL: har04:
7088; LINUX-64-PIC:       # %bb.0: # %entry
7089; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
7090; LINUX-64-PIC-NEXT:    retq
7091;
7092; DARWIN-32-STATIC-LABEL: har04:
7093; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7094; DARWIN-32-STATIC-NEXT:    movl $_ddst, %eax
7095; DARWIN-32-STATIC-NEXT:    retl
7096;
7097; DARWIN-32-DYNAMIC-LABEL: har04:
7098; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7099; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, %eax
7100; DARWIN-32-DYNAMIC-NEXT:    retl
7101;
7102; DARWIN-32-PIC-LABEL: har04:
7103; DARWIN-32-PIC:       ## %bb.0: ## %entry
7104; DARWIN-32-PIC-NEXT:    calll L83$pb
7105; DARWIN-32-PIC-NEXT:  L83$pb:
7106; DARWIN-32-PIC-NEXT:    popl %eax
7107; DARWIN-32-PIC-NEXT:    leal _ddst-L83$pb(%eax), %eax
7108; DARWIN-32-PIC-NEXT:    retl
7109;
7110; DARWIN-64-STATIC-LABEL: har04:
7111; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7112; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
7113; DARWIN-64-STATIC-NEXT:    retq
7114;
7115; DARWIN-64-DYNAMIC-LABEL: har04:
7116; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7117; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
7118; DARWIN-64-DYNAMIC-NEXT:    retq
7119;
7120; DARWIN-64-PIC-LABEL: har04:
7121; DARWIN-64-PIC:       ## %bb.0: ## %entry
7122; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
7123; DARWIN-64-PIC-NEXT:    retq
7124
7125entry:
7126	ret i8* bitcast ([131072 x i32]* @ddst to i8*)
7127}
7128
7129define dso_local i8* @har05() nounwind {
7130; LINUX-64-STATIC-LABEL: har05:
7131; LINUX-64-STATIC:       # %bb.0: # %entry
7132; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
7133; LINUX-64-STATIC-NEXT:    retq
7134;
7135; LINUX-32-STATIC-LABEL: har05:
7136; LINUX-32-STATIC:       # %bb.0: # %entry
7137; LINUX-32-STATIC-NEXT:    movl dptr, %eax
7138; LINUX-32-STATIC-NEXT:    retl
7139;
7140; LINUX-32-PIC-LABEL: har05:
7141; LINUX-32-PIC:       # %bb.0: # %entry
7142; LINUX-32-PIC-NEXT:    calll .L84$pb
7143; LINUX-32-PIC-NEXT:  .L84$pb:
7144; LINUX-32-PIC-NEXT:    popl %eax
7145; LINUX-32-PIC-NEXT:  .Ltmp84:
7146; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp84-.L84$pb), %eax
7147; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
7148; LINUX-32-PIC-NEXT:    retl
7149;
7150; LINUX-64-PIC-LABEL: har05:
7151; LINUX-64-PIC:       # %bb.0: # %entry
7152; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rax
7153; LINUX-64-PIC-NEXT:    retq
7154;
7155; DARWIN-32-STATIC-LABEL: har05:
7156; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7157; DARWIN-32-STATIC-NEXT:    movl _dptr, %eax
7158; DARWIN-32-STATIC-NEXT:    retl
7159;
7160; DARWIN-32-DYNAMIC-LABEL: har05:
7161; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7162; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %eax
7163; DARWIN-32-DYNAMIC-NEXT:    retl
7164;
7165; DARWIN-32-PIC-LABEL: har05:
7166; DARWIN-32-PIC:       ## %bb.0: ## %entry
7167; DARWIN-32-PIC-NEXT:    calll L84$pb
7168; DARWIN-32-PIC-NEXT:  L84$pb:
7169; DARWIN-32-PIC-NEXT:    popl %eax
7170; DARWIN-32-PIC-NEXT:    movl _dptr-L84$pb(%eax), %eax
7171; DARWIN-32-PIC-NEXT:    retl
7172;
7173; DARWIN-64-STATIC-LABEL: har05:
7174; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7175; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
7176; DARWIN-64-STATIC-NEXT:    retq
7177;
7178; DARWIN-64-DYNAMIC-LABEL: har05:
7179; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7180; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
7181; DARWIN-64-DYNAMIC-NEXT:    retq
7182;
7183; DARWIN-64-PIC-LABEL: har05:
7184; DARWIN-64-PIC:       ## %bb.0: ## %entry
7185; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
7186; DARWIN-64-PIC-NEXT:    retq
7187
7188entry:
7189	%0 = load i32*, i32** @dptr, align 8
7190	%1 = bitcast i32* %0 to i8*
7191	ret i8* %1
7192}
7193
7194define dso_local i8* @har06() nounwind {
7195; LINUX-64-STATIC-LABEL: har06:
7196; LINUX-64-STATIC:       # %bb.0: # %entry
7197; LINUX-64-STATIC-NEXT:    movl $lsrc, %eax
7198; LINUX-64-STATIC-NEXT:    retq
7199;
7200; LINUX-32-STATIC-LABEL: har06:
7201; LINUX-32-STATIC:       # %bb.0: # %entry
7202; LINUX-32-STATIC-NEXT:    movl $lsrc, %eax
7203; LINUX-32-STATIC-NEXT:    retl
7204;
7205; LINUX-32-PIC-LABEL: har06:
7206; LINUX-32-PIC:       # %bb.0: # %entry
7207; LINUX-32-PIC-NEXT:    calll .L85$pb
7208; LINUX-32-PIC-NEXT:  .L85$pb:
7209; LINUX-32-PIC-NEXT:    popl %eax
7210; LINUX-32-PIC-NEXT:  .Ltmp85:
7211; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp85-.L85$pb), %eax
7212; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF(%eax), %eax
7213; LINUX-32-PIC-NEXT:    retl
7214;
7215; LINUX-64-PIC-LABEL: har06:
7216; LINUX-64-PIC:       # %bb.0: # %entry
7217; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
7218; LINUX-64-PIC-NEXT:    retq
7219;
7220; DARWIN-32-STATIC-LABEL: har06:
7221; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7222; DARWIN-32-STATIC-NEXT:    movl $_lsrc, %eax
7223; DARWIN-32-STATIC-NEXT:    retl
7224;
7225; DARWIN-32-DYNAMIC-LABEL: har06:
7226; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7227; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc, %eax
7228; DARWIN-32-DYNAMIC-NEXT:    retl
7229;
7230; DARWIN-32-PIC-LABEL: har06:
7231; DARWIN-32-PIC:       ## %bb.0: ## %entry
7232; DARWIN-32-PIC-NEXT:    calll L85$pb
7233; DARWIN-32-PIC-NEXT:  L85$pb:
7234; DARWIN-32-PIC-NEXT:    popl %eax
7235; DARWIN-32-PIC-NEXT:    leal _lsrc-L85$pb(%eax), %eax
7236; DARWIN-32-PIC-NEXT:    retl
7237;
7238; DARWIN-64-STATIC-LABEL: har06:
7239; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7240; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
7241; DARWIN-64-STATIC-NEXT:    retq
7242;
7243; DARWIN-64-DYNAMIC-LABEL: har06:
7244; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7245; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
7246; DARWIN-64-DYNAMIC-NEXT:    retq
7247;
7248; DARWIN-64-PIC-LABEL: har06:
7249; DARWIN-64-PIC:       ## %bb.0: ## %entry
7250; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
7251; DARWIN-64-PIC-NEXT:    retq
7252
7253entry:
7254	ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
7255}
7256
7257define dso_local i8* @har07() nounwind {
7258; LINUX-64-STATIC-LABEL: har07:
7259; LINUX-64-STATIC:       # %bb.0: # %entry
7260; LINUX-64-STATIC-NEXT:    movl $ldst, %eax
7261; LINUX-64-STATIC-NEXT:    retq
7262;
7263; LINUX-32-STATIC-LABEL: har07:
7264; LINUX-32-STATIC:       # %bb.0: # %entry
7265; LINUX-32-STATIC-NEXT:    movl $ldst, %eax
7266; LINUX-32-STATIC-NEXT:    retl
7267;
7268; LINUX-32-PIC-LABEL: har07:
7269; LINUX-32-PIC:       # %bb.0: # %entry
7270; LINUX-32-PIC-NEXT:    calll .L86$pb
7271; LINUX-32-PIC-NEXT:  .L86$pb:
7272; LINUX-32-PIC-NEXT:    popl %eax
7273; LINUX-32-PIC-NEXT:  .Ltmp86:
7274; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp86-.L86$pb), %eax
7275; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %eax
7276; LINUX-32-PIC-NEXT:    retl
7277;
7278; LINUX-64-PIC-LABEL: har07:
7279; LINUX-64-PIC:       # %bb.0: # %entry
7280; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
7281; LINUX-64-PIC-NEXT:    retq
7282;
7283; DARWIN-32-STATIC-LABEL: har07:
7284; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7285; DARWIN-32-STATIC-NEXT:    movl $_ldst, %eax
7286; DARWIN-32-STATIC-NEXT:    retl
7287;
7288; DARWIN-32-DYNAMIC-LABEL: har07:
7289; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7290; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, %eax
7291; DARWIN-32-DYNAMIC-NEXT:    retl
7292;
7293; DARWIN-32-PIC-LABEL: har07:
7294; DARWIN-32-PIC:       ## %bb.0: ## %entry
7295; DARWIN-32-PIC-NEXT:    calll L86$pb
7296; DARWIN-32-PIC-NEXT:  L86$pb:
7297; DARWIN-32-PIC-NEXT:    popl %eax
7298; DARWIN-32-PIC-NEXT:    leal _ldst-L86$pb(%eax), %eax
7299; DARWIN-32-PIC-NEXT:    retl
7300;
7301; DARWIN-64-STATIC-LABEL: har07:
7302; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7303; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
7304; DARWIN-64-STATIC-NEXT:    retq
7305;
7306; DARWIN-64-DYNAMIC-LABEL: har07:
7307; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7308; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
7309; DARWIN-64-DYNAMIC-NEXT:    retq
7310;
7311; DARWIN-64-PIC-LABEL: har07:
7312; DARWIN-64-PIC:       ## %bb.0: ## %entry
7313; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
7314; DARWIN-64-PIC-NEXT:    retq
7315
7316entry:
7317	ret i8* bitcast ([131072 x i32]* @ldst to i8*)
7318}
7319
7320define dso_local i8* @har08() nounwind {
7321; LINUX-64-STATIC-LABEL: har08:
7322; LINUX-64-STATIC:       # %bb.0: # %entry
7323; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
7324; LINUX-64-STATIC-NEXT:    retq
7325;
7326; LINUX-32-STATIC-LABEL: har08:
7327; LINUX-32-STATIC:       # %bb.0: # %entry
7328; LINUX-32-STATIC-NEXT:    movl lptr, %eax
7329; LINUX-32-STATIC-NEXT:    retl
7330;
7331; LINUX-32-PIC-LABEL: har08:
7332; LINUX-32-PIC:       # %bb.0: # %entry
7333; LINUX-32-PIC-NEXT:    calll .L87$pb
7334; LINUX-32-PIC-NEXT:  .L87$pb:
7335; LINUX-32-PIC-NEXT:    popl %eax
7336; LINUX-32-PIC-NEXT:  .Ltmp87:
7337; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp87-.L87$pb), %eax
7338; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
7339; LINUX-32-PIC-NEXT:    retl
7340;
7341; LINUX-64-PIC-LABEL: har08:
7342; LINUX-64-PIC:       # %bb.0: # %entry
7343; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
7344; LINUX-64-PIC-NEXT:    retq
7345;
7346; DARWIN-32-STATIC-LABEL: har08:
7347; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7348; DARWIN-32-STATIC-NEXT:    movl _lptr, %eax
7349; DARWIN-32-STATIC-NEXT:    retl
7350;
7351; DARWIN-32-DYNAMIC-LABEL: har08:
7352; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7353; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %eax
7354; DARWIN-32-DYNAMIC-NEXT:    retl
7355;
7356; DARWIN-32-PIC-LABEL: har08:
7357; DARWIN-32-PIC:       ## %bb.0: ## %entry
7358; DARWIN-32-PIC-NEXT:    calll L87$pb
7359; DARWIN-32-PIC-NEXT:  L87$pb:
7360; DARWIN-32-PIC-NEXT:    popl %eax
7361; DARWIN-32-PIC-NEXT:    movl _lptr-L87$pb(%eax), %eax
7362; DARWIN-32-PIC-NEXT:    retl
7363;
7364; DARWIN-64-STATIC-LABEL: har08:
7365; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7366; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
7367; DARWIN-64-STATIC-NEXT:    retq
7368;
7369; DARWIN-64-DYNAMIC-LABEL: har08:
7370; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7371; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
7372; DARWIN-64-DYNAMIC-NEXT:    retq
7373;
7374; DARWIN-64-PIC-LABEL: har08:
7375; DARWIN-64-PIC:       ## %bb.0: ## %entry
7376; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
7377; DARWIN-64-PIC-NEXT:    retq
7378
7379entry:
7380	%0 = load i32*, i32** @lptr, align 8
7381	%1 = bitcast i32* %0 to i8*
7382	ret i8* %1
7383}
7384
7385define dso_local i8* @bat00() nounwind {
7386; LINUX-64-STATIC-LABEL: bat00:
7387; LINUX-64-STATIC:       # %bb.0: # %entry
7388; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
7389; LINUX-64-STATIC-NEXT:    addq $64, %rax
7390; LINUX-64-STATIC-NEXT:    retq
7391;
7392; LINUX-32-STATIC-LABEL: bat00:
7393; LINUX-32-STATIC:       # %bb.0: # %entry
7394; LINUX-32-STATIC-NEXT:    leal src+64, %eax
7395; LINUX-32-STATIC-NEXT:    retl
7396;
7397; LINUX-32-PIC-LABEL: bat00:
7398; LINUX-32-PIC:       # %bb.0: # %entry
7399; LINUX-32-PIC-NEXT:    calll .L88$pb
7400; LINUX-32-PIC-NEXT:  .L88$pb:
7401; LINUX-32-PIC-NEXT:    popl %eax
7402; LINUX-32-PIC-NEXT:  .Ltmp88:
7403; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp88-.L88$pb), %eax
7404; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
7405; LINUX-32-PIC-NEXT:    addl $64, %eax
7406; LINUX-32-PIC-NEXT:    retl
7407;
7408; LINUX-64-PIC-LABEL: bat00:
7409; LINUX-64-PIC:       # %bb.0: # %entry
7410; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
7411; LINUX-64-PIC-NEXT:    addq $64, %rax
7412; LINUX-64-PIC-NEXT:    retq
7413;
7414; DARWIN-32-STATIC-LABEL: bat00:
7415; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7416; DARWIN-32-STATIC-NEXT:    movl $_src+64, %eax
7417; DARWIN-32-STATIC-NEXT:    retl
7418;
7419; DARWIN-32-DYNAMIC-LABEL: bat00:
7420; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7421; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
7422; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7423; DARWIN-32-DYNAMIC-NEXT:    retl
7424;
7425; DARWIN-32-PIC-LABEL: bat00:
7426; DARWIN-32-PIC:       ## %bb.0: ## %entry
7427; DARWIN-32-PIC-NEXT:    calll L88$pb
7428; DARWIN-32-PIC-NEXT:  L88$pb:
7429; DARWIN-32-PIC-NEXT:    popl %eax
7430; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L88$pb(%eax), %eax
7431; DARWIN-32-PIC-NEXT:    addl $64, %eax
7432; DARWIN-32-PIC-NEXT:    retl
7433;
7434; DARWIN-64-STATIC-LABEL: bat00:
7435; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7436; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7437; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7438; DARWIN-64-STATIC-NEXT:    retq
7439;
7440; DARWIN-64-DYNAMIC-LABEL: bat00:
7441; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7442; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7443; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7444; DARWIN-64-DYNAMIC-NEXT:    retq
7445;
7446; DARWIN-64-PIC-LABEL: bat00:
7447; DARWIN-64-PIC:       ## %bb.0: ## %entry
7448; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7449; DARWIN-64-PIC-NEXT:    addq $64, %rax
7450; DARWIN-64-PIC-NEXT:    retq
7451
7452entry:
7453	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16) to i8*)
7454}
7455
7456define dso_local i8* @bxt00() nounwind {
7457; LINUX-64-STATIC-LABEL: bxt00:
7458; LINUX-64-STATIC:       # %bb.0: # %entry
7459; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
7460; LINUX-64-STATIC-NEXT:    addq $64, %rax
7461; LINUX-64-STATIC-NEXT:    retq
7462;
7463; LINUX-32-STATIC-LABEL: bxt00:
7464; LINUX-32-STATIC:       # %bb.0: # %entry
7465; LINUX-32-STATIC-NEXT:    leal xsrc+64, %eax
7466; LINUX-32-STATIC-NEXT:    retl
7467;
7468; LINUX-32-PIC-LABEL: bxt00:
7469; LINUX-32-PIC:       # %bb.0: # %entry
7470; LINUX-32-PIC-NEXT:    calll .L89$pb
7471; LINUX-32-PIC-NEXT:  .L89$pb:
7472; LINUX-32-PIC-NEXT:    popl %eax
7473; LINUX-32-PIC-NEXT:  .Ltmp89:
7474; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp89-.L89$pb), %eax
7475; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
7476; LINUX-32-PIC-NEXT:    addl $64, %eax
7477; LINUX-32-PIC-NEXT:    retl
7478;
7479; LINUX-64-PIC-LABEL: bxt00:
7480; LINUX-64-PIC:       # %bb.0: # %entry
7481; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
7482; LINUX-64-PIC-NEXT:    addq $64, %rax
7483; LINUX-64-PIC-NEXT:    retq
7484;
7485; DARWIN-32-STATIC-LABEL: bxt00:
7486; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7487; DARWIN-32-STATIC-NEXT:    movl $_xsrc+64, %eax
7488; DARWIN-32-STATIC-NEXT:    retl
7489;
7490; DARWIN-32-DYNAMIC-LABEL: bxt00:
7491; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7492; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
7493; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7494; DARWIN-32-DYNAMIC-NEXT:    retl
7495;
7496; DARWIN-32-PIC-LABEL: bxt00:
7497; DARWIN-32-PIC:       ## %bb.0: ## %entry
7498; DARWIN-32-PIC-NEXT:    calll L89$pb
7499; DARWIN-32-PIC-NEXT:  L89$pb:
7500; DARWIN-32-PIC-NEXT:    popl %eax
7501; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L89$pb(%eax), %eax
7502; DARWIN-32-PIC-NEXT:    addl $64, %eax
7503; DARWIN-32-PIC-NEXT:    retl
7504;
7505; DARWIN-64-STATIC-LABEL: bxt00:
7506; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7507; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7508; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7509; DARWIN-64-STATIC-NEXT:    retq
7510;
7511; DARWIN-64-DYNAMIC-LABEL: bxt00:
7512; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7513; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7514; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7515; DARWIN-64-DYNAMIC-NEXT:    retq
7516;
7517; DARWIN-64-PIC-LABEL: bxt00:
7518; DARWIN-64-PIC:       ## %bb.0: ## %entry
7519; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7520; DARWIN-64-PIC-NEXT:    addq $64, %rax
7521; DARWIN-64-PIC-NEXT:    retq
7522
7523entry:
7524	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16) to i8*)
7525}
7526
7527define dso_local i8* @bat01() nounwind {
7528; LINUX-64-STATIC-LABEL: bat01:
7529; LINUX-64-STATIC:       # %bb.0: # %entry
7530; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
7531; LINUX-64-STATIC-NEXT:    addq $64, %rax
7532; LINUX-64-STATIC-NEXT:    retq
7533;
7534; LINUX-32-STATIC-LABEL: bat01:
7535; LINUX-32-STATIC:       # %bb.0: # %entry
7536; LINUX-32-STATIC-NEXT:    leal dst+64, %eax
7537; LINUX-32-STATIC-NEXT:    retl
7538;
7539; LINUX-32-PIC-LABEL: bat01:
7540; LINUX-32-PIC:       # %bb.0: # %entry
7541; LINUX-32-PIC-NEXT:    calll .L90$pb
7542; LINUX-32-PIC-NEXT:  .L90$pb:
7543; LINUX-32-PIC-NEXT:    popl %eax
7544; LINUX-32-PIC-NEXT:  .Ltmp90:
7545; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp90-.L90$pb), %eax
7546; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
7547; LINUX-32-PIC-NEXT:    addl $64, %eax
7548; LINUX-32-PIC-NEXT:    retl
7549;
7550; LINUX-64-PIC-LABEL: bat01:
7551; LINUX-64-PIC:       # %bb.0: # %entry
7552; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
7553; LINUX-64-PIC-NEXT:    addq $64, %rax
7554; LINUX-64-PIC-NEXT:    retq
7555;
7556; DARWIN-32-STATIC-LABEL: bat01:
7557; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7558; DARWIN-32-STATIC-NEXT:    movl $_dst+64, %eax
7559; DARWIN-32-STATIC-NEXT:    retl
7560;
7561; DARWIN-32-DYNAMIC-LABEL: bat01:
7562; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7563; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
7564; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7565; DARWIN-32-DYNAMIC-NEXT:    retl
7566;
7567; DARWIN-32-PIC-LABEL: bat01:
7568; DARWIN-32-PIC:       ## %bb.0: ## %entry
7569; DARWIN-32-PIC-NEXT:    calll L90$pb
7570; DARWIN-32-PIC-NEXT:  L90$pb:
7571; DARWIN-32-PIC-NEXT:    popl %eax
7572; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L90$pb(%eax), %eax
7573; DARWIN-32-PIC-NEXT:    addl $64, %eax
7574; DARWIN-32-PIC-NEXT:    retl
7575;
7576; DARWIN-64-STATIC-LABEL: bat01:
7577; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7578; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7579; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7580; DARWIN-64-STATIC-NEXT:    retq
7581;
7582; DARWIN-64-DYNAMIC-LABEL: bat01:
7583; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7584; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7585; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7586; DARWIN-64-DYNAMIC-NEXT:    retq
7587;
7588; DARWIN-64-PIC-LABEL: bat01:
7589; DARWIN-64-PIC:       ## %bb.0: ## %entry
7590; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7591; DARWIN-64-PIC-NEXT:    addq $64, %rax
7592; DARWIN-64-PIC-NEXT:    retq
7593
7594entry:
7595	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16) to i8*)
7596}
7597
7598define dso_local i8* @bxt01() nounwind {
7599; LINUX-64-STATIC-LABEL: bxt01:
7600; LINUX-64-STATIC:       # %bb.0: # %entry
7601; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
7602; LINUX-64-STATIC-NEXT:    addq $64, %rax
7603; LINUX-64-STATIC-NEXT:    retq
7604;
7605; LINUX-32-STATIC-LABEL: bxt01:
7606; LINUX-32-STATIC:       # %bb.0: # %entry
7607; LINUX-32-STATIC-NEXT:    leal xdst+64, %eax
7608; LINUX-32-STATIC-NEXT:    retl
7609;
7610; LINUX-32-PIC-LABEL: bxt01:
7611; LINUX-32-PIC:       # %bb.0: # %entry
7612; LINUX-32-PIC-NEXT:    calll .L91$pb
7613; LINUX-32-PIC-NEXT:  .L91$pb:
7614; LINUX-32-PIC-NEXT:    popl %eax
7615; LINUX-32-PIC-NEXT:  .Ltmp91:
7616; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp91-.L91$pb), %eax
7617; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
7618; LINUX-32-PIC-NEXT:    addl $64, %eax
7619; LINUX-32-PIC-NEXT:    retl
7620;
7621; LINUX-64-PIC-LABEL: bxt01:
7622; LINUX-64-PIC:       # %bb.0: # %entry
7623; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
7624; LINUX-64-PIC-NEXT:    addq $64, %rax
7625; LINUX-64-PIC-NEXT:    retq
7626;
7627; DARWIN-32-STATIC-LABEL: bxt01:
7628; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7629; DARWIN-32-STATIC-NEXT:    movl $_xdst+64, %eax
7630; DARWIN-32-STATIC-NEXT:    retl
7631;
7632; DARWIN-32-DYNAMIC-LABEL: bxt01:
7633; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7634; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
7635; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7636; DARWIN-32-DYNAMIC-NEXT:    retl
7637;
7638; DARWIN-32-PIC-LABEL: bxt01:
7639; DARWIN-32-PIC:       ## %bb.0: ## %entry
7640; DARWIN-32-PIC-NEXT:    calll L91$pb
7641; DARWIN-32-PIC-NEXT:  L91$pb:
7642; DARWIN-32-PIC-NEXT:    popl %eax
7643; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L91$pb(%eax), %eax
7644; DARWIN-32-PIC-NEXT:    addl $64, %eax
7645; DARWIN-32-PIC-NEXT:    retl
7646;
7647; DARWIN-64-STATIC-LABEL: bxt01:
7648; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7649; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7650; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7651; DARWIN-64-STATIC-NEXT:    retq
7652;
7653; DARWIN-64-DYNAMIC-LABEL: bxt01:
7654; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7655; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7656; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7657; DARWIN-64-DYNAMIC-NEXT:    retq
7658;
7659; DARWIN-64-PIC-LABEL: bxt01:
7660; DARWIN-64-PIC:       ## %bb.0: ## %entry
7661; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7662; DARWIN-64-PIC-NEXT:    addq $64, %rax
7663; DARWIN-64-PIC-NEXT:    retq
7664
7665entry:
7666	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16) to i8*)
7667}
7668
7669define dso_local i8* @bat02() nounwind {
7670; LINUX-64-STATIC-LABEL: bat02:
7671; LINUX-64-STATIC:       # %bb.0: # %entry
7672; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
7673; LINUX-64-STATIC-NEXT:    movq (%rax), %rax
7674; LINUX-64-STATIC-NEXT:    addq $64, %rax
7675; LINUX-64-STATIC-NEXT:    retq
7676;
7677; LINUX-32-STATIC-LABEL: bat02:
7678; LINUX-32-STATIC:       # %bb.0: # %entry
7679; LINUX-32-STATIC-NEXT:    movl ptr, %eax
7680; LINUX-32-STATIC-NEXT:    addl $64, %eax
7681; LINUX-32-STATIC-NEXT:    retl
7682;
7683; LINUX-32-PIC-LABEL: bat02:
7684; LINUX-32-PIC:       # %bb.0: # %entry
7685; LINUX-32-PIC-NEXT:    calll .L92$pb
7686; LINUX-32-PIC-NEXT:  .L92$pb:
7687; LINUX-32-PIC-NEXT:    popl %eax
7688; LINUX-32-PIC-NEXT:  .Ltmp92:
7689; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp92-.L92$pb), %eax
7690; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
7691; LINUX-32-PIC-NEXT:    movl (%eax), %eax
7692; LINUX-32-PIC-NEXT:    addl $64, %eax
7693; LINUX-32-PIC-NEXT:    retl
7694;
7695; LINUX-64-PIC-LABEL: bat02:
7696; LINUX-64-PIC:       # %bb.0: # %entry
7697; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
7698; LINUX-64-PIC-NEXT:    movq (%rax), %rax
7699; LINUX-64-PIC-NEXT:    addq $64, %rax
7700; LINUX-64-PIC-NEXT:    retq
7701;
7702; DARWIN-32-STATIC-LABEL: bat02:
7703; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7704; DARWIN-32-STATIC-NEXT:    movl _ptr, %eax
7705; DARWIN-32-STATIC-NEXT:    addl $64, %eax
7706; DARWIN-32-STATIC-NEXT:    retl
7707;
7708; DARWIN-32-DYNAMIC-LABEL: bat02:
7709; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7710; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
7711; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
7712; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7713; DARWIN-32-DYNAMIC-NEXT:    retl
7714;
7715; DARWIN-32-PIC-LABEL: bat02:
7716; DARWIN-32-PIC:       ## %bb.0: ## %entry
7717; DARWIN-32-PIC-NEXT:    calll L92$pb
7718; DARWIN-32-PIC-NEXT:  L92$pb:
7719; DARWIN-32-PIC-NEXT:    popl %eax
7720; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L92$pb(%eax), %eax
7721; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
7722; DARWIN-32-PIC-NEXT:    addl $64, %eax
7723; DARWIN-32-PIC-NEXT:    retl
7724;
7725; DARWIN-64-STATIC-LABEL: bat02:
7726; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7727; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7728; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
7729; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7730; DARWIN-64-STATIC-NEXT:    retq
7731;
7732; DARWIN-64-DYNAMIC-LABEL: bat02:
7733; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7734; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7735; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
7736; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7737; DARWIN-64-DYNAMIC-NEXT:    retq
7738;
7739; DARWIN-64-PIC-LABEL: bat02:
7740; DARWIN-64-PIC:       ## %bb.0: ## %entry
7741; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7742; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
7743; DARWIN-64-PIC-NEXT:    addq $64, %rax
7744; DARWIN-64-PIC-NEXT:    retq
7745
7746entry:
7747	%0 = load i32*, i32** @ptr, align 8
7748	%1 = getelementptr i32, i32* %0, i64 16
7749	%2 = bitcast i32* %1 to i8*
7750	ret i8* %2
7751}
7752
7753define dso_local i8* @bat03() nounwind {
7754; LINUX-64-STATIC-LABEL: bat03:
7755; LINUX-64-STATIC:       # %bb.0: # %entry
7756; LINUX-64-STATIC-NEXT:    movl $dsrc+64, %eax
7757; LINUX-64-STATIC-NEXT:    retq
7758;
7759; LINUX-32-STATIC-LABEL: bat03:
7760; LINUX-32-STATIC:       # %bb.0: # %entry
7761; LINUX-32-STATIC-NEXT:    movl $dsrc+64, %eax
7762; LINUX-32-STATIC-NEXT:    retl
7763;
7764; LINUX-32-PIC-LABEL: bat03:
7765; LINUX-32-PIC:       # %bb.0: # %entry
7766; LINUX-32-PIC-NEXT:    calll .L93$pb
7767; LINUX-32-PIC-NEXT:  .L93$pb:
7768; LINUX-32-PIC-NEXT:    popl %eax
7769; LINUX-32-PIC-NEXT:  .Ltmp93:
7770; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp93-.L93$pb), %eax
7771; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF+64(%eax), %eax
7772; LINUX-32-PIC-NEXT:    retl
7773;
7774; LINUX-64-PIC-LABEL: bat03:
7775; LINUX-64-PIC:       # %bb.0: # %entry
7776; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local+64(%rip), %rax
7777; LINUX-64-PIC-NEXT:    retq
7778;
7779; DARWIN-32-STATIC-LABEL: bat03:
7780; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7781; DARWIN-32-STATIC-NEXT:    movl $_dsrc+64, %eax
7782; DARWIN-32-STATIC-NEXT:    retl
7783;
7784; DARWIN-32-DYNAMIC-LABEL: bat03:
7785; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7786; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc+64, %eax
7787; DARWIN-32-DYNAMIC-NEXT:    retl
7788;
7789; DARWIN-32-PIC-LABEL: bat03:
7790; DARWIN-32-PIC:       ## %bb.0: ## %entry
7791; DARWIN-32-PIC-NEXT:    calll L93$pb
7792; DARWIN-32-PIC-NEXT:  L93$pb:
7793; DARWIN-32-PIC-NEXT:    popl %eax
7794; DARWIN-32-PIC-NEXT:    leal (_dsrc-L93$pb)+64(%eax), %eax
7795; DARWIN-32-PIC-NEXT:    retl
7796;
7797; DARWIN-64-STATIC-LABEL: bat03:
7798; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7799; DARWIN-64-STATIC-NEXT:    leaq _dsrc+64(%rip), %rax
7800; DARWIN-64-STATIC-NEXT:    retq
7801;
7802; DARWIN-64-DYNAMIC-LABEL: bat03:
7803; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7804; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc+64(%rip), %rax
7805; DARWIN-64-DYNAMIC-NEXT:    retq
7806;
7807; DARWIN-64-PIC-LABEL: bat03:
7808; DARWIN-64-PIC:       ## %bb.0: ## %entry
7809; DARWIN-64-PIC-NEXT:    leaq _dsrc+64(%rip), %rax
7810; DARWIN-64-PIC-NEXT:    retq
7811
7812entry:
7813	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
7814}
7815
7816define dso_local i8* @bat04() nounwind {
7817; LINUX-64-STATIC-LABEL: bat04:
7818; LINUX-64-STATIC:       # %bb.0: # %entry
7819; LINUX-64-STATIC-NEXT:    movl $ddst+64, %eax
7820; LINUX-64-STATIC-NEXT:    retq
7821;
7822; LINUX-32-STATIC-LABEL: bat04:
7823; LINUX-32-STATIC:       # %bb.0: # %entry
7824; LINUX-32-STATIC-NEXT:    movl $ddst+64, %eax
7825; LINUX-32-STATIC-NEXT:    retl
7826;
7827; LINUX-32-PIC-LABEL: bat04:
7828; LINUX-32-PIC:       # %bb.0: # %entry
7829; LINUX-32-PIC-NEXT:    calll .L94$pb
7830; LINUX-32-PIC-NEXT:  .L94$pb:
7831; LINUX-32-PIC-NEXT:    popl %eax
7832; LINUX-32-PIC-NEXT:  .Ltmp94:
7833; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp94-.L94$pb), %eax
7834; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+64(%eax), %eax
7835; LINUX-32-PIC-NEXT:    retl
7836;
7837; LINUX-64-PIC-LABEL: bat04:
7838; LINUX-64-PIC:       # %bb.0: # %entry
7839; LINUX-64-PIC-NEXT:    leaq .Lddst$local+64(%rip), %rax
7840; LINUX-64-PIC-NEXT:    retq
7841;
7842; DARWIN-32-STATIC-LABEL: bat04:
7843; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7844; DARWIN-32-STATIC-NEXT:    movl $_ddst+64, %eax
7845; DARWIN-32-STATIC-NEXT:    retl
7846;
7847; DARWIN-32-DYNAMIC-LABEL: bat04:
7848; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7849; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+64, %eax
7850; DARWIN-32-DYNAMIC-NEXT:    retl
7851;
7852; DARWIN-32-PIC-LABEL: bat04:
7853; DARWIN-32-PIC:       ## %bb.0: ## %entry
7854; DARWIN-32-PIC-NEXT:    calll L94$pb
7855; DARWIN-32-PIC-NEXT:  L94$pb:
7856; DARWIN-32-PIC-NEXT:    popl %eax
7857; DARWIN-32-PIC-NEXT:    leal (_ddst-L94$pb)+64(%eax), %eax
7858; DARWIN-32-PIC-NEXT:    retl
7859;
7860; DARWIN-64-STATIC-LABEL: bat04:
7861; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7862; DARWIN-64-STATIC-NEXT:    leaq _ddst+64(%rip), %rax
7863; DARWIN-64-STATIC-NEXT:    retq
7864;
7865; DARWIN-64-DYNAMIC-LABEL: bat04:
7866; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7867; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+64(%rip), %rax
7868; DARWIN-64-DYNAMIC-NEXT:    retq
7869;
7870; DARWIN-64-PIC-LABEL: bat04:
7871; DARWIN-64-PIC:       ## %bb.0: ## %entry
7872; DARWIN-64-PIC-NEXT:    leaq _ddst+64(%rip), %rax
7873; DARWIN-64-PIC-NEXT:    retq
7874
7875entry:
7876	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16) to i8*)
7877}
7878
7879define dso_local i8* @bat05() nounwind {
7880; LINUX-64-STATIC-LABEL: bat05:
7881; LINUX-64-STATIC:       # %bb.0: # %entry
7882; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
7883; LINUX-64-STATIC-NEXT:    addq $64, %rax
7884; LINUX-64-STATIC-NEXT:    retq
7885;
7886; LINUX-32-STATIC-LABEL: bat05:
7887; LINUX-32-STATIC:       # %bb.0: # %entry
7888; LINUX-32-STATIC-NEXT:    movl dptr, %eax
7889; LINUX-32-STATIC-NEXT:    addl $64, %eax
7890; LINUX-32-STATIC-NEXT:    retl
7891;
7892; LINUX-32-PIC-LABEL: bat05:
7893; LINUX-32-PIC:       # %bb.0: # %entry
7894; LINUX-32-PIC-NEXT:    calll .L95$pb
7895; LINUX-32-PIC-NEXT:  .L95$pb:
7896; LINUX-32-PIC-NEXT:    popl %eax
7897; LINUX-32-PIC-NEXT:  .Ltmp95:
7898; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp95-.L95$pb), %eax
7899; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
7900; LINUX-32-PIC-NEXT:    addl $64, %eax
7901; LINUX-32-PIC-NEXT:    retl
7902;
7903; LINUX-64-PIC-LABEL: bat05:
7904; LINUX-64-PIC:       # %bb.0: # %entry
7905; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rax
7906; LINUX-64-PIC-NEXT:    addq $64, %rax
7907; LINUX-64-PIC-NEXT:    retq
7908;
7909; DARWIN-32-STATIC-LABEL: bat05:
7910; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7911; DARWIN-32-STATIC-NEXT:    movl _dptr, %eax
7912; DARWIN-32-STATIC-NEXT:    addl $64, %eax
7913; DARWIN-32-STATIC-NEXT:    retl
7914;
7915; DARWIN-32-DYNAMIC-LABEL: bat05:
7916; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7917; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %eax
7918; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7919; DARWIN-32-DYNAMIC-NEXT:    retl
7920;
7921; DARWIN-32-PIC-LABEL: bat05:
7922; DARWIN-32-PIC:       ## %bb.0: ## %entry
7923; DARWIN-32-PIC-NEXT:    calll L95$pb
7924; DARWIN-32-PIC-NEXT:  L95$pb:
7925; DARWIN-32-PIC-NEXT:    popl %eax
7926; DARWIN-32-PIC-NEXT:    movl _dptr-L95$pb(%eax), %eax
7927; DARWIN-32-PIC-NEXT:    addl $64, %eax
7928; DARWIN-32-PIC-NEXT:    retl
7929;
7930; DARWIN-64-STATIC-LABEL: bat05:
7931; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7932; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
7933; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7934; DARWIN-64-STATIC-NEXT:    retq
7935;
7936; DARWIN-64-DYNAMIC-LABEL: bat05:
7937; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7938; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
7939; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7940; DARWIN-64-DYNAMIC-NEXT:    retq
7941;
7942; DARWIN-64-PIC-LABEL: bat05:
7943; DARWIN-64-PIC:       ## %bb.0: ## %entry
7944; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
7945; DARWIN-64-PIC-NEXT:    addq $64, %rax
7946; DARWIN-64-PIC-NEXT:    retq
7947
7948entry:
7949	%0 = load i32*, i32** @dptr, align 8
7950	%1 = getelementptr i32, i32* %0, i64 16
7951	%2 = bitcast i32* %1 to i8*
7952	ret i8* %2
7953}
7954
7955define dso_local i8* @bat06() nounwind {
7956; LINUX-64-STATIC-LABEL: bat06:
7957; LINUX-64-STATIC:       # %bb.0: # %entry
7958; LINUX-64-STATIC-NEXT:    movl $lsrc+64, %eax
7959; LINUX-64-STATIC-NEXT:    retq
7960;
7961; LINUX-32-STATIC-LABEL: bat06:
7962; LINUX-32-STATIC:       # %bb.0: # %entry
7963; LINUX-32-STATIC-NEXT:    movl $lsrc+64, %eax
7964; LINUX-32-STATIC-NEXT:    retl
7965;
7966; LINUX-32-PIC-LABEL: bat06:
7967; LINUX-32-PIC:       # %bb.0: # %entry
7968; LINUX-32-PIC-NEXT:    calll .L96$pb
7969; LINUX-32-PIC-NEXT:  .L96$pb:
7970; LINUX-32-PIC-NEXT:    popl %eax
7971; LINUX-32-PIC-NEXT:  .Ltmp96:
7972; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp96-.L96$pb), %eax
7973; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+64(%eax), %eax
7974; LINUX-32-PIC-NEXT:    retl
7975;
7976; LINUX-64-PIC-LABEL: bat06:
7977; LINUX-64-PIC:       # %bb.0: # %entry
7978; LINUX-64-PIC-NEXT:    leaq lsrc+64(%rip), %rax
7979; LINUX-64-PIC-NEXT:    retq
7980;
7981; DARWIN-32-STATIC-LABEL: bat06:
7982; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7983; DARWIN-32-STATIC-NEXT:    movl $_lsrc+64, %eax
7984; DARWIN-32-STATIC-NEXT:    retl
7985;
7986; DARWIN-32-DYNAMIC-LABEL: bat06:
7987; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7988; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc+64, %eax
7989; DARWIN-32-DYNAMIC-NEXT:    retl
7990;
7991; DARWIN-32-PIC-LABEL: bat06:
7992; DARWIN-32-PIC:       ## %bb.0: ## %entry
7993; DARWIN-32-PIC-NEXT:    calll L96$pb
7994; DARWIN-32-PIC-NEXT:  L96$pb:
7995; DARWIN-32-PIC-NEXT:    popl %eax
7996; DARWIN-32-PIC-NEXT:    leal (_lsrc-L96$pb)+64(%eax), %eax
7997; DARWIN-32-PIC-NEXT:    retl
7998;
7999; DARWIN-64-STATIC-LABEL: bat06:
8000; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8001; DARWIN-64-STATIC-NEXT:    leaq _lsrc+64(%rip), %rax
8002; DARWIN-64-STATIC-NEXT:    retq
8003;
8004; DARWIN-64-DYNAMIC-LABEL: bat06:
8005; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8006; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc+64(%rip), %rax
8007; DARWIN-64-DYNAMIC-NEXT:    retq
8008;
8009; DARWIN-64-PIC-LABEL: bat06:
8010; DARWIN-64-PIC:       ## %bb.0: ## %entry
8011; DARWIN-64-PIC-NEXT:    leaq _lsrc+64(%rip), %rax
8012; DARWIN-64-PIC-NEXT:    retq
8013
8014entry:
8015	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
8016}
8017
8018define dso_local i8* @bat07() nounwind {
8019; LINUX-64-STATIC-LABEL: bat07:
8020; LINUX-64-STATIC:       # %bb.0: # %entry
8021; LINUX-64-STATIC-NEXT:    movl $ldst+64, %eax
8022; LINUX-64-STATIC-NEXT:    retq
8023;
8024; LINUX-32-STATIC-LABEL: bat07:
8025; LINUX-32-STATIC:       # %bb.0: # %entry
8026; LINUX-32-STATIC-NEXT:    movl $ldst+64, %eax
8027; LINUX-32-STATIC-NEXT:    retl
8028;
8029; LINUX-32-PIC-LABEL: bat07:
8030; LINUX-32-PIC:       # %bb.0: # %entry
8031; LINUX-32-PIC-NEXT:    calll .L97$pb
8032; LINUX-32-PIC-NEXT:  .L97$pb:
8033; LINUX-32-PIC-NEXT:    popl %eax
8034; LINUX-32-PIC-NEXT:  .Ltmp97:
8035; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp97-.L97$pb), %eax
8036; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax), %eax
8037; LINUX-32-PIC-NEXT:    retl
8038;
8039; LINUX-64-PIC-LABEL: bat07:
8040; LINUX-64-PIC:       # %bb.0: # %entry
8041; LINUX-64-PIC-NEXT:    leaq ldst+64(%rip), %rax
8042; LINUX-64-PIC-NEXT:    retq
8043;
8044; DARWIN-32-STATIC-LABEL: bat07:
8045; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8046; DARWIN-32-STATIC-NEXT:    movl $_ldst+64, %eax
8047; DARWIN-32-STATIC-NEXT:    retl
8048;
8049; DARWIN-32-DYNAMIC-LABEL: bat07:
8050; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8051; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+64, %eax
8052; DARWIN-32-DYNAMIC-NEXT:    retl
8053;
8054; DARWIN-32-PIC-LABEL: bat07:
8055; DARWIN-32-PIC:       ## %bb.0: ## %entry
8056; DARWIN-32-PIC-NEXT:    calll L97$pb
8057; DARWIN-32-PIC-NEXT:  L97$pb:
8058; DARWIN-32-PIC-NEXT:    popl %eax
8059; DARWIN-32-PIC-NEXT:    leal (_ldst-L97$pb)+64(%eax), %eax
8060; DARWIN-32-PIC-NEXT:    retl
8061;
8062; DARWIN-64-STATIC-LABEL: bat07:
8063; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8064; DARWIN-64-STATIC-NEXT:    leaq _ldst+64(%rip), %rax
8065; DARWIN-64-STATIC-NEXT:    retq
8066;
8067; DARWIN-64-DYNAMIC-LABEL: bat07:
8068; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8069; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+64(%rip), %rax
8070; DARWIN-64-DYNAMIC-NEXT:    retq
8071;
8072; DARWIN-64-PIC-LABEL: bat07:
8073; DARWIN-64-PIC:       ## %bb.0: ## %entry
8074; DARWIN-64-PIC-NEXT:    leaq _ldst+64(%rip), %rax
8075; DARWIN-64-PIC-NEXT:    retq
8076
8077entry:
8078	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16) to i8*)
8079}
8080
8081define dso_local i8* @bat08() nounwind {
8082; LINUX-64-STATIC-LABEL: bat08:
8083; LINUX-64-STATIC:       # %bb.0: # %entry
8084; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
8085; LINUX-64-STATIC-NEXT:    addq $64, %rax
8086; LINUX-64-STATIC-NEXT:    retq
8087;
8088; LINUX-32-STATIC-LABEL: bat08:
8089; LINUX-32-STATIC:       # %bb.0: # %entry
8090; LINUX-32-STATIC-NEXT:    movl lptr, %eax
8091; LINUX-32-STATIC-NEXT:    addl $64, %eax
8092; LINUX-32-STATIC-NEXT:    retl
8093;
8094; LINUX-32-PIC-LABEL: bat08:
8095; LINUX-32-PIC:       # %bb.0: # %entry
8096; LINUX-32-PIC-NEXT:    calll .L98$pb
8097; LINUX-32-PIC-NEXT:  .L98$pb:
8098; LINUX-32-PIC-NEXT:    popl %eax
8099; LINUX-32-PIC-NEXT:  .Ltmp98:
8100; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp98-.L98$pb), %eax
8101; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
8102; LINUX-32-PIC-NEXT:    addl $64, %eax
8103; LINUX-32-PIC-NEXT:    retl
8104;
8105; LINUX-64-PIC-LABEL: bat08:
8106; LINUX-64-PIC:       # %bb.0: # %entry
8107; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
8108; LINUX-64-PIC-NEXT:    addq $64, %rax
8109; LINUX-64-PIC-NEXT:    retq
8110;
8111; DARWIN-32-STATIC-LABEL: bat08:
8112; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8113; DARWIN-32-STATIC-NEXT:    movl _lptr, %eax
8114; DARWIN-32-STATIC-NEXT:    addl $64, %eax
8115; DARWIN-32-STATIC-NEXT:    retl
8116;
8117; DARWIN-32-DYNAMIC-LABEL: bat08:
8118; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8119; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %eax
8120; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
8121; DARWIN-32-DYNAMIC-NEXT:    retl
8122;
8123; DARWIN-32-PIC-LABEL: bat08:
8124; DARWIN-32-PIC:       ## %bb.0: ## %entry
8125; DARWIN-32-PIC-NEXT:    calll L98$pb
8126; DARWIN-32-PIC-NEXT:  L98$pb:
8127; DARWIN-32-PIC-NEXT:    popl %eax
8128; DARWIN-32-PIC-NEXT:    movl _lptr-L98$pb(%eax), %eax
8129; DARWIN-32-PIC-NEXT:    addl $64, %eax
8130; DARWIN-32-PIC-NEXT:    retl
8131;
8132; DARWIN-64-STATIC-LABEL: bat08:
8133; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8134; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
8135; DARWIN-64-STATIC-NEXT:    addq $64, %rax
8136; DARWIN-64-STATIC-NEXT:    retq
8137;
8138; DARWIN-64-DYNAMIC-LABEL: bat08:
8139; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8140; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
8141; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
8142; DARWIN-64-DYNAMIC-NEXT:    retq
8143;
8144; DARWIN-64-PIC-LABEL: bat08:
8145; DARWIN-64-PIC:       ## %bb.0: ## %entry
8146; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
8147; DARWIN-64-PIC-NEXT:    addq $64, %rax
8148; DARWIN-64-PIC-NEXT:    retq
8149
8150entry:
8151	%0 = load i32*, i32** @lptr, align 8
8152	%1 = getelementptr i32, i32* %0, i64 16
8153	%2 = bitcast i32* %1 to i8*
8154	ret i8* %2
8155}
8156
8157define dso_local i8* @bam00() nounwind {
8158; LINUX-64-STATIC-LABEL: bam00:
8159; LINUX-64-STATIC:       # %bb.0: # %entry
8160; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8161; LINUX-64-STATIC-NEXT:    addq src@GOTPCREL(%rip), %rax
8162; LINUX-64-STATIC-NEXT:    retq
8163;
8164; LINUX-32-STATIC-LABEL: bam00:
8165; LINUX-32-STATIC:       # %bb.0: # %entry
8166; LINUX-32-STATIC-NEXT:    leal src+262144, %eax
8167; LINUX-32-STATIC-NEXT:    retl
8168;
8169; LINUX-32-PIC-LABEL: bam00:
8170; LINUX-32-PIC:       # %bb.0: # %entry
8171; LINUX-32-PIC-NEXT:    calll .L99$pb
8172; LINUX-32-PIC-NEXT:  .L99$pb:
8173; LINUX-32-PIC-NEXT:    popl %ecx
8174; LINUX-32-PIC-NEXT:  .Ltmp99:
8175; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp99-.L99$pb), %ecx
8176; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8177; LINUX-32-PIC-NEXT:    addl src@GOT(%ecx), %eax
8178; LINUX-32-PIC-NEXT:    retl
8179;
8180; LINUX-64-PIC-LABEL: bam00:
8181; LINUX-64-PIC:       # %bb.0: # %entry
8182; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8183; LINUX-64-PIC-NEXT:    addq src@GOTPCREL(%rip), %rax
8184; LINUX-64-PIC-NEXT:    retq
8185;
8186; DARWIN-32-STATIC-LABEL: bam00:
8187; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8188; DARWIN-32-STATIC-NEXT:    movl $_src+262144, %eax
8189; DARWIN-32-STATIC-NEXT:    retl
8190;
8191; DARWIN-32-DYNAMIC-LABEL: bam00:
8192; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8193; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8194; DARWIN-32-DYNAMIC-NEXT:    addl L_src$non_lazy_ptr, %eax
8195; DARWIN-32-DYNAMIC-NEXT:    retl
8196;
8197; DARWIN-32-PIC-LABEL: bam00:
8198; DARWIN-32-PIC:       ## %bb.0: ## %entry
8199; DARWIN-32-PIC-NEXT:    calll L99$pb
8200; DARWIN-32-PIC-NEXT:  L99$pb:
8201; DARWIN-32-PIC-NEXT:    popl %ecx
8202; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8203; DARWIN-32-PIC-NEXT:    addl L_src$non_lazy_ptr-L99$pb(%ecx), %eax
8204; DARWIN-32-PIC-NEXT:    retl
8205;
8206; DARWIN-64-STATIC-LABEL: bam00:
8207; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8208; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8209; DARWIN-64-STATIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8210; DARWIN-64-STATIC-NEXT:    retq
8211;
8212; DARWIN-64-DYNAMIC-LABEL: bam00:
8213; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8214; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8215; DARWIN-64-DYNAMIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8216; DARWIN-64-DYNAMIC-NEXT:    retq
8217;
8218; DARWIN-64-PIC-LABEL: bam00:
8219; DARWIN-64-PIC:       ## %bb.0: ## %entry
8220; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8221; DARWIN-64-PIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8222; DARWIN-64-PIC-NEXT:    retq
8223
8224entry:
8225	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536) to i8*)
8226}
8227
8228define dso_local i8* @bam01() nounwind {
8229; LINUX-64-STATIC-LABEL: bam01:
8230; LINUX-64-STATIC:       # %bb.0: # %entry
8231; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8232; LINUX-64-STATIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
8233; LINUX-64-STATIC-NEXT:    retq
8234;
8235; LINUX-32-STATIC-LABEL: bam01:
8236; LINUX-32-STATIC:       # %bb.0: # %entry
8237; LINUX-32-STATIC-NEXT:    leal dst+262144, %eax
8238; LINUX-32-STATIC-NEXT:    retl
8239;
8240; LINUX-32-PIC-LABEL: bam01:
8241; LINUX-32-PIC:       # %bb.0: # %entry
8242; LINUX-32-PIC-NEXT:    calll .L100$pb
8243; LINUX-32-PIC-NEXT:  .L100$pb:
8244; LINUX-32-PIC-NEXT:    popl %ecx
8245; LINUX-32-PIC-NEXT:  .Ltmp100:
8246; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp100-.L100$pb), %ecx
8247; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8248; LINUX-32-PIC-NEXT:    addl dst@GOT(%ecx), %eax
8249; LINUX-32-PIC-NEXT:    retl
8250;
8251; LINUX-64-PIC-LABEL: bam01:
8252; LINUX-64-PIC:       # %bb.0: # %entry
8253; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8254; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
8255; LINUX-64-PIC-NEXT:    retq
8256;
8257; DARWIN-32-STATIC-LABEL: bam01:
8258; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8259; DARWIN-32-STATIC-NEXT:    movl $_dst+262144, %eax
8260; DARWIN-32-STATIC-NEXT:    retl
8261;
8262; DARWIN-32-DYNAMIC-LABEL: bam01:
8263; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8264; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8265; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
8266; DARWIN-32-DYNAMIC-NEXT:    retl
8267;
8268; DARWIN-32-PIC-LABEL: bam01:
8269; DARWIN-32-PIC:       ## %bb.0: ## %entry
8270; DARWIN-32-PIC-NEXT:    calll L100$pb
8271; DARWIN-32-PIC-NEXT:  L100$pb:
8272; DARWIN-32-PIC-NEXT:    popl %ecx
8273; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8274; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L100$pb(%ecx), %eax
8275; DARWIN-32-PIC-NEXT:    retl
8276;
8277; DARWIN-64-STATIC-LABEL: bam01:
8278; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8279; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8280; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8281; DARWIN-64-STATIC-NEXT:    retq
8282;
8283; DARWIN-64-DYNAMIC-LABEL: bam01:
8284; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8285; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8286; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8287; DARWIN-64-DYNAMIC-NEXT:    retq
8288;
8289; DARWIN-64-PIC-LABEL: bam01:
8290; DARWIN-64-PIC:       ## %bb.0: ## %entry
8291; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8292; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8293; DARWIN-64-PIC-NEXT:    retq
8294
8295entry:
8296	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536) to i8*)
8297}
8298
8299define dso_local i8* @bxm01() nounwind {
8300; LINUX-64-STATIC-LABEL: bxm01:
8301; LINUX-64-STATIC:       # %bb.0: # %entry
8302; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8303; LINUX-64-STATIC-NEXT:    addq xdst@GOTPCREL(%rip), %rax
8304; LINUX-64-STATIC-NEXT:    retq
8305;
8306; LINUX-32-STATIC-LABEL: bxm01:
8307; LINUX-32-STATIC:       # %bb.0: # %entry
8308; LINUX-32-STATIC-NEXT:    leal xdst+262144, %eax
8309; LINUX-32-STATIC-NEXT:    retl
8310;
8311; LINUX-32-PIC-LABEL: bxm01:
8312; LINUX-32-PIC:       # %bb.0: # %entry
8313; LINUX-32-PIC-NEXT:    calll .L101$pb
8314; LINUX-32-PIC-NEXT:  .L101$pb:
8315; LINUX-32-PIC-NEXT:    popl %ecx
8316; LINUX-32-PIC-NEXT:  .Ltmp101:
8317; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp101-.L101$pb), %ecx
8318; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8319; LINUX-32-PIC-NEXT:    addl xdst@GOT(%ecx), %eax
8320; LINUX-32-PIC-NEXT:    retl
8321;
8322; LINUX-64-PIC-LABEL: bxm01:
8323; LINUX-64-PIC:       # %bb.0: # %entry
8324; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8325; LINUX-64-PIC-NEXT:    addq xdst@GOTPCREL(%rip), %rax
8326; LINUX-64-PIC-NEXT:    retq
8327;
8328; DARWIN-32-STATIC-LABEL: bxm01:
8329; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8330; DARWIN-32-STATIC-NEXT:    movl $_xdst+262144, %eax
8331; DARWIN-32-STATIC-NEXT:    retl
8332;
8333; DARWIN-32-DYNAMIC-LABEL: bxm01:
8334; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8335; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8336; DARWIN-32-DYNAMIC-NEXT:    addl L_xdst$non_lazy_ptr, %eax
8337; DARWIN-32-DYNAMIC-NEXT:    retl
8338;
8339; DARWIN-32-PIC-LABEL: bxm01:
8340; DARWIN-32-PIC:       ## %bb.0: ## %entry
8341; DARWIN-32-PIC-NEXT:    calll L101$pb
8342; DARWIN-32-PIC-NEXT:  L101$pb:
8343; DARWIN-32-PIC-NEXT:    popl %ecx
8344; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8345; DARWIN-32-PIC-NEXT:    addl L_xdst$non_lazy_ptr-L101$pb(%ecx), %eax
8346; DARWIN-32-PIC-NEXT:    retl
8347;
8348; DARWIN-64-STATIC-LABEL: bxm01:
8349; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8350; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8351; DARWIN-64-STATIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8352; DARWIN-64-STATIC-NEXT:    retq
8353;
8354; DARWIN-64-DYNAMIC-LABEL: bxm01:
8355; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8356; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8357; DARWIN-64-DYNAMIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8358; DARWIN-64-DYNAMIC-NEXT:    retq
8359;
8360; DARWIN-64-PIC-LABEL: bxm01:
8361; DARWIN-64-PIC:       ## %bb.0: ## %entry
8362; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8363; DARWIN-64-PIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8364; DARWIN-64-PIC-NEXT:    retq
8365
8366entry:
8367	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 65536) to i8*)
8368}
8369
8370define dso_local i8* @bam02() nounwind {
8371; LINUX-64-STATIC-LABEL: bam02:
8372; LINUX-64-STATIC:       # %bb.0: # %entry
8373; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
8374; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8375; LINUX-64-STATIC-NEXT:    addq (%rcx), %rax
8376; LINUX-64-STATIC-NEXT:    retq
8377;
8378; LINUX-32-STATIC-LABEL: bam02:
8379; LINUX-32-STATIC:       # %bb.0: # %entry
8380; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8381; LINUX-32-STATIC-NEXT:    addl ptr, %eax
8382; LINUX-32-STATIC-NEXT:    retl
8383;
8384; LINUX-32-PIC-LABEL: bam02:
8385; LINUX-32-PIC:       # %bb.0: # %entry
8386; LINUX-32-PIC-NEXT:    calll .L102$pb
8387; LINUX-32-PIC-NEXT:  .L102$pb:
8388; LINUX-32-PIC-NEXT:    popl %eax
8389; LINUX-32-PIC-NEXT:  .Ltmp102:
8390; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp102-.L102$pb), %eax
8391; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %ecx
8392; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8393; LINUX-32-PIC-NEXT:    addl (%ecx), %eax
8394; LINUX-32-PIC-NEXT:    retl
8395;
8396; LINUX-64-PIC-LABEL: bam02:
8397; LINUX-64-PIC:       # %bb.0: # %entry
8398; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
8399; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8400; LINUX-64-PIC-NEXT:    addq (%rcx), %rax
8401; LINUX-64-PIC-NEXT:    retq
8402;
8403; DARWIN-32-STATIC-LABEL: bam02:
8404; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8405; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8406; DARWIN-32-STATIC-NEXT:    addl _ptr, %eax
8407; DARWIN-32-STATIC-NEXT:    retl
8408;
8409; DARWIN-32-DYNAMIC-LABEL: bam02:
8410; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8411; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
8412; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8413; DARWIN-32-DYNAMIC-NEXT:    addl (%ecx), %eax
8414; DARWIN-32-DYNAMIC-NEXT:    retl
8415;
8416; DARWIN-32-PIC-LABEL: bam02:
8417; DARWIN-32-PIC:       ## %bb.0: ## %entry
8418; DARWIN-32-PIC-NEXT:    calll L102$pb
8419; DARWIN-32-PIC-NEXT:  L102$pb:
8420; DARWIN-32-PIC-NEXT:    popl %eax
8421; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L102$pb(%eax), %ecx
8422; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8423; DARWIN-32-PIC-NEXT:    addl (%ecx), %eax
8424; DARWIN-32-PIC-NEXT:    retl
8425;
8426; DARWIN-64-STATIC-LABEL: bam02:
8427; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8428; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8429; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8430; DARWIN-64-STATIC-NEXT:    addq (%rcx), %rax
8431; DARWIN-64-STATIC-NEXT:    retq
8432;
8433; DARWIN-64-DYNAMIC-LABEL: bam02:
8434; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8435; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8436; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8437; DARWIN-64-DYNAMIC-NEXT:    addq (%rcx), %rax
8438; DARWIN-64-DYNAMIC-NEXT:    retq
8439;
8440; DARWIN-64-PIC-LABEL: bam02:
8441; DARWIN-64-PIC:       ## %bb.0: ## %entry
8442; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8443; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8444; DARWIN-64-PIC-NEXT:    addq (%rcx), %rax
8445; DARWIN-64-PIC-NEXT:    retq
8446
8447entry:
8448	%0 = load i32*, i32** @ptr, align 8
8449	%1 = getelementptr i32, i32* %0, i64 65536
8450	%2 = bitcast i32* %1 to i8*
8451	ret i8* %2
8452}
8453
8454define dso_local i8* @bam03() nounwind {
8455; LINUX-64-STATIC-LABEL: bam03:
8456; LINUX-64-STATIC:       # %bb.0: # %entry
8457; LINUX-64-STATIC-NEXT:    movl $dsrc+262144, %eax
8458; LINUX-64-STATIC-NEXT:    retq
8459;
8460; LINUX-32-STATIC-LABEL: bam03:
8461; LINUX-32-STATIC:       # %bb.0: # %entry
8462; LINUX-32-STATIC-NEXT:    movl $dsrc+262144, %eax
8463; LINUX-32-STATIC-NEXT:    retl
8464;
8465; LINUX-32-PIC-LABEL: bam03:
8466; LINUX-32-PIC:       # %bb.0: # %entry
8467; LINUX-32-PIC-NEXT:    calll .L103$pb
8468; LINUX-32-PIC-NEXT:  .L103$pb:
8469; LINUX-32-PIC-NEXT:    popl %eax
8470; LINUX-32-PIC-NEXT:  .Ltmp103:
8471; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp103-.L103$pb), %eax
8472; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF+262144(%eax), %eax
8473; LINUX-32-PIC-NEXT:    retl
8474;
8475; LINUX-64-PIC-LABEL: bam03:
8476; LINUX-64-PIC:       # %bb.0: # %entry
8477; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local+262144(%rip), %rax
8478; LINUX-64-PIC-NEXT:    retq
8479;
8480; DARWIN-32-STATIC-LABEL: bam03:
8481; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8482; DARWIN-32-STATIC-NEXT:    movl $_dsrc+262144, %eax
8483; DARWIN-32-STATIC-NEXT:    retl
8484;
8485; DARWIN-32-DYNAMIC-LABEL: bam03:
8486; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8487; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc+262144, %eax
8488; DARWIN-32-DYNAMIC-NEXT:    retl
8489;
8490; DARWIN-32-PIC-LABEL: bam03:
8491; DARWIN-32-PIC:       ## %bb.0: ## %entry
8492; DARWIN-32-PIC-NEXT:    calll L103$pb
8493; DARWIN-32-PIC-NEXT:  L103$pb:
8494; DARWIN-32-PIC-NEXT:    popl %eax
8495; DARWIN-32-PIC-NEXT:    leal (_dsrc-L103$pb)+262144(%eax), %eax
8496; DARWIN-32-PIC-NEXT:    retl
8497;
8498; DARWIN-64-STATIC-LABEL: bam03:
8499; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8500; DARWIN-64-STATIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8501; DARWIN-64-STATIC-NEXT:    retq
8502;
8503; DARWIN-64-DYNAMIC-LABEL: bam03:
8504; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8505; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8506; DARWIN-64-DYNAMIC-NEXT:    retq
8507;
8508; DARWIN-64-PIC-LABEL: bam03:
8509; DARWIN-64-PIC:       ## %bb.0: ## %entry
8510; DARWIN-64-PIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8511; DARWIN-64-PIC-NEXT:    retq
8512
8513entry:
8514	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
8515}
8516
8517define dso_local i8* @bam04() nounwind {
8518; LINUX-64-STATIC-LABEL: bam04:
8519; LINUX-64-STATIC:       # %bb.0: # %entry
8520; LINUX-64-STATIC-NEXT:    movl $ddst+262144, %eax
8521; LINUX-64-STATIC-NEXT:    retq
8522;
8523; LINUX-32-STATIC-LABEL: bam04:
8524; LINUX-32-STATIC:       # %bb.0: # %entry
8525; LINUX-32-STATIC-NEXT:    movl $ddst+262144, %eax
8526; LINUX-32-STATIC-NEXT:    retl
8527;
8528; LINUX-32-PIC-LABEL: bam04:
8529; LINUX-32-PIC:       # %bb.0: # %entry
8530; LINUX-32-PIC-NEXT:    calll .L104$pb
8531; LINUX-32-PIC-NEXT:  .L104$pb:
8532; LINUX-32-PIC-NEXT:    popl %eax
8533; LINUX-32-PIC-NEXT:  .Ltmp104:
8534; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp104-.L104$pb), %eax
8535; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+262144(%eax), %eax
8536; LINUX-32-PIC-NEXT:    retl
8537;
8538; LINUX-64-PIC-LABEL: bam04:
8539; LINUX-64-PIC:       # %bb.0: # %entry
8540; LINUX-64-PIC-NEXT:    leaq .Lddst$local+262144(%rip), %rax
8541; LINUX-64-PIC-NEXT:    retq
8542;
8543; DARWIN-32-STATIC-LABEL: bam04:
8544; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8545; DARWIN-32-STATIC-NEXT:    movl $_ddst+262144, %eax
8546; DARWIN-32-STATIC-NEXT:    retl
8547;
8548; DARWIN-32-DYNAMIC-LABEL: bam04:
8549; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8550; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+262144, %eax
8551; DARWIN-32-DYNAMIC-NEXT:    retl
8552;
8553; DARWIN-32-PIC-LABEL: bam04:
8554; DARWIN-32-PIC:       ## %bb.0: ## %entry
8555; DARWIN-32-PIC-NEXT:    calll L104$pb
8556; DARWIN-32-PIC-NEXT:  L104$pb:
8557; DARWIN-32-PIC-NEXT:    popl %eax
8558; DARWIN-32-PIC-NEXT:    leal (_ddst-L104$pb)+262144(%eax), %eax
8559; DARWIN-32-PIC-NEXT:    retl
8560;
8561; DARWIN-64-STATIC-LABEL: bam04:
8562; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8563; DARWIN-64-STATIC-NEXT:    leaq _ddst+262144(%rip), %rax
8564; DARWIN-64-STATIC-NEXT:    retq
8565;
8566; DARWIN-64-DYNAMIC-LABEL: bam04:
8567; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8568; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+262144(%rip), %rax
8569; DARWIN-64-DYNAMIC-NEXT:    retq
8570;
8571; DARWIN-64-PIC-LABEL: bam04:
8572; DARWIN-64-PIC:       ## %bb.0: ## %entry
8573; DARWIN-64-PIC-NEXT:    leaq _ddst+262144(%rip), %rax
8574; DARWIN-64-PIC-NEXT:    retq
8575
8576entry:
8577	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
8578}
8579
8580define dso_local i8* @bam05() nounwind {
8581; LINUX-64-STATIC-LABEL: bam05:
8582; LINUX-64-STATIC:       # %bb.0: # %entry
8583; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8584; LINUX-64-STATIC-NEXT:    addq dptr(%rip), %rax
8585; LINUX-64-STATIC-NEXT:    retq
8586;
8587; LINUX-32-STATIC-LABEL: bam05:
8588; LINUX-32-STATIC:       # %bb.0: # %entry
8589; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8590; LINUX-32-STATIC-NEXT:    addl dptr, %eax
8591; LINUX-32-STATIC-NEXT:    retl
8592;
8593; LINUX-32-PIC-LABEL: bam05:
8594; LINUX-32-PIC:       # %bb.0: # %entry
8595; LINUX-32-PIC-NEXT:    calll .L105$pb
8596; LINUX-32-PIC-NEXT:  .L105$pb:
8597; LINUX-32-PIC-NEXT:    popl %ecx
8598; LINUX-32-PIC-NEXT:  .Ltmp105:
8599; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp105-.L105$pb), %ecx
8600; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8601; LINUX-32-PIC-NEXT:    addl .Ldptr$local@GOTOFF(%ecx), %eax
8602; LINUX-32-PIC-NEXT:    retl
8603;
8604; LINUX-64-PIC-LABEL: bam05:
8605; LINUX-64-PIC:       # %bb.0: # %entry
8606; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8607; LINUX-64-PIC-NEXT:    addq .Ldptr$local(%rip), %rax
8608; LINUX-64-PIC-NEXT:    retq
8609;
8610; DARWIN-32-STATIC-LABEL: bam05:
8611; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8612; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8613; DARWIN-32-STATIC-NEXT:    addl _dptr, %eax
8614; DARWIN-32-STATIC-NEXT:    retl
8615;
8616; DARWIN-32-DYNAMIC-LABEL: bam05:
8617; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8618; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8619; DARWIN-32-DYNAMIC-NEXT:    addl _dptr, %eax
8620; DARWIN-32-DYNAMIC-NEXT:    retl
8621;
8622; DARWIN-32-PIC-LABEL: bam05:
8623; DARWIN-32-PIC:       ## %bb.0: ## %entry
8624; DARWIN-32-PIC-NEXT:    calll L105$pb
8625; DARWIN-32-PIC-NEXT:  L105$pb:
8626; DARWIN-32-PIC-NEXT:    popl %ecx
8627; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8628; DARWIN-32-PIC-NEXT:    addl _dptr-L105$pb(%ecx), %eax
8629; DARWIN-32-PIC-NEXT:    retl
8630;
8631; DARWIN-64-STATIC-LABEL: bam05:
8632; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8633; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8634; DARWIN-64-STATIC-NEXT:    addq _dptr(%rip), %rax
8635; DARWIN-64-STATIC-NEXT:    retq
8636;
8637; DARWIN-64-DYNAMIC-LABEL: bam05:
8638; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8639; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8640; DARWIN-64-DYNAMIC-NEXT:    addq _dptr(%rip), %rax
8641; DARWIN-64-DYNAMIC-NEXT:    retq
8642;
8643; DARWIN-64-PIC-LABEL: bam05:
8644; DARWIN-64-PIC:       ## %bb.0: ## %entry
8645; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8646; DARWIN-64-PIC-NEXT:    addq _dptr(%rip), %rax
8647; DARWIN-64-PIC-NEXT:    retq
8648
8649entry:
8650	%0 = load i32*, i32** @dptr, align 8
8651	%1 = getelementptr i32, i32* %0, i64 65536
8652	%2 = bitcast i32* %1 to i8*
8653	ret i8* %2
8654}
8655
8656define dso_local i8* @bam06() nounwind {
8657; LINUX-64-STATIC-LABEL: bam06:
8658; LINUX-64-STATIC:       # %bb.0: # %entry
8659; LINUX-64-STATIC-NEXT:    movl $lsrc+262144, %eax
8660; LINUX-64-STATIC-NEXT:    retq
8661;
8662; LINUX-32-STATIC-LABEL: bam06:
8663; LINUX-32-STATIC:       # %bb.0: # %entry
8664; LINUX-32-STATIC-NEXT:    movl $lsrc+262144, %eax
8665; LINUX-32-STATIC-NEXT:    retl
8666;
8667; LINUX-32-PIC-LABEL: bam06:
8668; LINUX-32-PIC:       # %bb.0: # %entry
8669; LINUX-32-PIC-NEXT:    calll .L106$pb
8670; LINUX-32-PIC-NEXT:  .L106$pb:
8671; LINUX-32-PIC-NEXT:    popl %eax
8672; LINUX-32-PIC-NEXT:  .Ltmp106:
8673; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp106-.L106$pb), %eax
8674; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+262144(%eax), %eax
8675; LINUX-32-PIC-NEXT:    retl
8676;
8677; LINUX-64-PIC-LABEL: bam06:
8678; LINUX-64-PIC:       # %bb.0: # %entry
8679; LINUX-64-PIC-NEXT:    leaq lsrc+262144(%rip), %rax
8680; LINUX-64-PIC-NEXT:    retq
8681;
8682; DARWIN-32-STATIC-LABEL: bam06:
8683; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8684; DARWIN-32-STATIC-NEXT:    movl $_lsrc+262144, %eax
8685; DARWIN-32-STATIC-NEXT:    retl
8686;
8687; DARWIN-32-DYNAMIC-LABEL: bam06:
8688; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8689; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc+262144, %eax
8690; DARWIN-32-DYNAMIC-NEXT:    retl
8691;
8692; DARWIN-32-PIC-LABEL: bam06:
8693; DARWIN-32-PIC:       ## %bb.0: ## %entry
8694; DARWIN-32-PIC-NEXT:    calll L106$pb
8695; DARWIN-32-PIC-NEXT:  L106$pb:
8696; DARWIN-32-PIC-NEXT:    popl %eax
8697; DARWIN-32-PIC-NEXT:    leal (_lsrc-L106$pb)+262144(%eax), %eax
8698; DARWIN-32-PIC-NEXT:    retl
8699;
8700; DARWIN-64-STATIC-LABEL: bam06:
8701; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8702; DARWIN-64-STATIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8703; DARWIN-64-STATIC-NEXT:    retq
8704;
8705; DARWIN-64-DYNAMIC-LABEL: bam06:
8706; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8707; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8708; DARWIN-64-DYNAMIC-NEXT:    retq
8709;
8710; DARWIN-64-PIC-LABEL: bam06:
8711; DARWIN-64-PIC:       ## %bb.0: ## %entry
8712; DARWIN-64-PIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8713; DARWIN-64-PIC-NEXT:    retq
8714
8715entry:
8716	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
8717}
8718
8719define dso_local i8* @bam07() nounwind {
8720; LINUX-64-STATIC-LABEL: bam07:
8721; LINUX-64-STATIC:       # %bb.0: # %entry
8722; LINUX-64-STATIC-NEXT:    movl $ldst+262144, %eax
8723; LINUX-64-STATIC-NEXT:    retq
8724;
8725; LINUX-32-STATIC-LABEL: bam07:
8726; LINUX-32-STATIC:       # %bb.0: # %entry
8727; LINUX-32-STATIC-NEXT:    movl $ldst+262144, %eax
8728; LINUX-32-STATIC-NEXT:    retl
8729;
8730; LINUX-32-PIC-LABEL: bam07:
8731; LINUX-32-PIC:       # %bb.0: # %entry
8732; LINUX-32-PIC-NEXT:    calll .L107$pb
8733; LINUX-32-PIC-NEXT:  .L107$pb:
8734; LINUX-32-PIC-NEXT:    popl %eax
8735; LINUX-32-PIC-NEXT:  .Ltmp107:
8736; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp107-.L107$pb), %eax
8737; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax), %eax
8738; LINUX-32-PIC-NEXT:    retl
8739;
8740; LINUX-64-PIC-LABEL: bam07:
8741; LINUX-64-PIC:       # %bb.0: # %entry
8742; LINUX-64-PIC-NEXT:    leaq ldst+262144(%rip), %rax
8743; LINUX-64-PIC-NEXT:    retq
8744;
8745; DARWIN-32-STATIC-LABEL: bam07:
8746; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8747; DARWIN-32-STATIC-NEXT:    movl $_ldst+262144, %eax
8748; DARWIN-32-STATIC-NEXT:    retl
8749;
8750; DARWIN-32-DYNAMIC-LABEL: bam07:
8751; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8752; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+262144, %eax
8753; DARWIN-32-DYNAMIC-NEXT:    retl
8754;
8755; DARWIN-32-PIC-LABEL: bam07:
8756; DARWIN-32-PIC:       ## %bb.0: ## %entry
8757; DARWIN-32-PIC-NEXT:    calll L107$pb
8758; DARWIN-32-PIC-NEXT:  L107$pb:
8759; DARWIN-32-PIC-NEXT:    popl %eax
8760; DARWIN-32-PIC-NEXT:    leal (_ldst-L107$pb)+262144(%eax), %eax
8761; DARWIN-32-PIC-NEXT:    retl
8762;
8763; DARWIN-64-STATIC-LABEL: bam07:
8764; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8765; DARWIN-64-STATIC-NEXT:    leaq _ldst+262144(%rip), %rax
8766; DARWIN-64-STATIC-NEXT:    retq
8767;
8768; DARWIN-64-DYNAMIC-LABEL: bam07:
8769; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8770; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+262144(%rip), %rax
8771; DARWIN-64-DYNAMIC-NEXT:    retq
8772;
8773; DARWIN-64-PIC-LABEL: bam07:
8774; DARWIN-64-PIC:       ## %bb.0: ## %entry
8775; DARWIN-64-PIC-NEXT:    leaq _ldst+262144(%rip), %rax
8776; DARWIN-64-PIC-NEXT:    retq
8777
8778entry:
8779	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
8780}
8781
8782define dso_local i8* @bam08() nounwind {
8783; LINUX-64-STATIC-LABEL: bam08:
8784; LINUX-64-STATIC:       # %bb.0: # %entry
8785; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8786; LINUX-64-STATIC-NEXT:    addq lptr(%rip), %rax
8787; LINUX-64-STATIC-NEXT:    retq
8788;
8789; LINUX-32-STATIC-LABEL: bam08:
8790; LINUX-32-STATIC:       # %bb.0: # %entry
8791; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8792; LINUX-32-STATIC-NEXT:    addl lptr, %eax
8793; LINUX-32-STATIC-NEXT:    retl
8794;
8795; LINUX-32-PIC-LABEL: bam08:
8796; LINUX-32-PIC:       # %bb.0: # %entry
8797; LINUX-32-PIC-NEXT:    calll .L108$pb
8798; LINUX-32-PIC-NEXT:  .L108$pb:
8799; LINUX-32-PIC-NEXT:    popl %ecx
8800; LINUX-32-PIC-NEXT:  .Ltmp108:
8801; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp108-.L108$pb), %ecx
8802; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8803; LINUX-32-PIC-NEXT:    addl lptr@GOTOFF(%ecx), %eax
8804; LINUX-32-PIC-NEXT:    retl
8805;
8806; LINUX-64-PIC-LABEL: bam08:
8807; LINUX-64-PIC:       # %bb.0: # %entry
8808; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8809; LINUX-64-PIC-NEXT:    addq lptr(%rip), %rax
8810; LINUX-64-PIC-NEXT:    retq
8811;
8812; DARWIN-32-STATIC-LABEL: bam08:
8813; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8814; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8815; DARWIN-32-STATIC-NEXT:    addl _lptr, %eax
8816; DARWIN-32-STATIC-NEXT:    retl
8817;
8818; DARWIN-32-DYNAMIC-LABEL: bam08:
8819; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8820; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8821; DARWIN-32-DYNAMIC-NEXT:    addl _lptr, %eax
8822; DARWIN-32-DYNAMIC-NEXT:    retl
8823;
8824; DARWIN-32-PIC-LABEL: bam08:
8825; DARWIN-32-PIC:       ## %bb.0: ## %entry
8826; DARWIN-32-PIC-NEXT:    calll L108$pb
8827; DARWIN-32-PIC-NEXT:  L108$pb:
8828; DARWIN-32-PIC-NEXT:    popl %ecx
8829; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8830; DARWIN-32-PIC-NEXT:    addl _lptr-L108$pb(%ecx), %eax
8831; DARWIN-32-PIC-NEXT:    retl
8832;
8833; DARWIN-64-STATIC-LABEL: bam08:
8834; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8835; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8836; DARWIN-64-STATIC-NEXT:    addq _lptr(%rip), %rax
8837; DARWIN-64-STATIC-NEXT:    retq
8838;
8839; DARWIN-64-DYNAMIC-LABEL: bam08:
8840; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8841; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8842; DARWIN-64-DYNAMIC-NEXT:    addq _lptr(%rip), %rax
8843; DARWIN-64-DYNAMIC-NEXT:    retq
8844;
8845; DARWIN-64-PIC-LABEL: bam08:
8846; DARWIN-64-PIC:       ## %bb.0: ## %entry
8847; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8848; DARWIN-64-PIC-NEXT:    addq _lptr(%rip), %rax
8849; DARWIN-64-PIC-NEXT:    retq
8850
8851entry:
8852	%0 = load i32*, i32** @lptr, align 8
8853	%1 = getelementptr i32, i32* %0, i64 65536
8854	%2 = bitcast i32* %1 to i8*
8855	ret i8* %2
8856}
8857
8858define dso_local i8* @cat00(i64 %i) nounwind {
8859; LINUX-64-STATIC-LABEL: cat00:
8860; LINUX-64-STATIC:       # %bb.0: # %entry
8861; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
8862; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8863; LINUX-64-STATIC-NEXT:    retq
8864;
8865; LINUX-32-STATIC-LABEL: cat00:
8866; LINUX-32-STATIC:       # %bb.0: # %entry
8867; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8868; LINUX-32-STATIC-NEXT:    leal src+64(,%eax,4), %eax
8869; LINUX-32-STATIC-NEXT:    retl
8870;
8871; LINUX-32-PIC-LABEL: cat00:
8872; LINUX-32-PIC:       # %bb.0: # %entry
8873; LINUX-32-PIC-NEXT:    calll .L109$pb
8874; LINUX-32-PIC-NEXT:  .L109$pb:
8875; LINUX-32-PIC-NEXT:    popl %eax
8876; LINUX-32-PIC-NEXT:  .Ltmp109:
8877; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp109-.L109$pb), %eax
8878; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8879; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
8880; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8881; LINUX-32-PIC-NEXT:    retl
8882;
8883; LINUX-64-PIC-LABEL: cat00:
8884; LINUX-64-PIC:       # %bb.0: # %entry
8885; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
8886; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8887; LINUX-64-PIC-NEXT:    retq
8888;
8889; DARWIN-32-STATIC-LABEL: cat00:
8890; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8891; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8892; DARWIN-32-STATIC-NEXT:    leal _src+64(,%eax,4), %eax
8893; DARWIN-32-STATIC-NEXT:    retl
8894;
8895; DARWIN-32-DYNAMIC-LABEL: cat00:
8896; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8897; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8898; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
8899; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
8900; DARWIN-32-DYNAMIC-NEXT:    retl
8901;
8902; DARWIN-32-PIC-LABEL: cat00:
8903; DARWIN-32-PIC:       ## %bb.0: ## %entry
8904; DARWIN-32-PIC-NEXT:    calll L109$pb
8905; DARWIN-32-PIC-NEXT:  L109$pb:
8906; DARWIN-32-PIC-NEXT:    popl %eax
8907; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8908; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L109$pb(%eax), %eax
8909; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8910; DARWIN-32-PIC-NEXT:    retl
8911;
8912; DARWIN-64-STATIC-LABEL: cat00:
8913; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8914; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8915; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8916; DARWIN-64-STATIC-NEXT:    retq
8917;
8918; DARWIN-64-DYNAMIC-LABEL: cat00:
8919; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8920; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8921; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8922; DARWIN-64-DYNAMIC-NEXT:    retq
8923;
8924; DARWIN-64-PIC-LABEL: cat00:
8925; DARWIN-64-PIC:       ## %bb.0: ## %entry
8926; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8927; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8928; DARWIN-64-PIC-NEXT:    retq
8929
8930entry:
8931	%0 = add i64 %i, 16
8932	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
8933	%2 = bitcast i32* %1 to i8*
8934	ret i8* %2
8935}
8936
8937define dso_local i8* @cxt00(i64 %i) nounwind {
8938; LINUX-64-STATIC-LABEL: cxt00:
8939; LINUX-64-STATIC:       # %bb.0: # %entry
8940; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
8941; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8942; LINUX-64-STATIC-NEXT:    retq
8943;
8944; LINUX-32-STATIC-LABEL: cxt00:
8945; LINUX-32-STATIC:       # %bb.0: # %entry
8946; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8947; LINUX-32-STATIC-NEXT:    leal xsrc+64(,%eax,4), %eax
8948; LINUX-32-STATIC-NEXT:    retl
8949;
8950; LINUX-32-PIC-LABEL: cxt00:
8951; LINUX-32-PIC:       # %bb.0: # %entry
8952; LINUX-32-PIC-NEXT:    calll .L110$pb
8953; LINUX-32-PIC-NEXT:  .L110$pb:
8954; LINUX-32-PIC-NEXT:    popl %eax
8955; LINUX-32-PIC-NEXT:  .Ltmp110:
8956; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp110-.L110$pb), %eax
8957; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8958; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
8959; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8960; LINUX-32-PIC-NEXT:    retl
8961;
8962; LINUX-64-PIC-LABEL: cxt00:
8963; LINUX-64-PIC:       # %bb.0: # %entry
8964; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
8965; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8966; LINUX-64-PIC-NEXT:    retq
8967;
8968; DARWIN-32-STATIC-LABEL: cxt00:
8969; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8970; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8971; DARWIN-32-STATIC-NEXT:    leal _xsrc+64(,%eax,4), %eax
8972; DARWIN-32-STATIC-NEXT:    retl
8973;
8974; DARWIN-32-DYNAMIC-LABEL: cxt00:
8975; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8976; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8977; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
8978; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
8979; DARWIN-32-DYNAMIC-NEXT:    retl
8980;
8981; DARWIN-32-PIC-LABEL: cxt00:
8982; DARWIN-32-PIC:       ## %bb.0: ## %entry
8983; DARWIN-32-PIC-NEXT:    calll L110$pb
8984; DARWIN-32-PIC-NEXT:  L110$pb:
8985; DARWIN-32-PIC-NEXT:    popl %eax
8986; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8987; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L110$pb(%eax), %eax
8988; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8989; DARWIN-32-PIC-NEXT:    retl
8990;
8991; DARWIN-64-STATIC-LABEL: cxt00:
8992; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8993; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
8994; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8995; DARWIN-64-STATIC-NEXT:    retq
8996;
8997; DARWIN-64-DYNAMIC-LABEL: cxt00:
8998; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8999; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9000; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9001; DARWIN-64-DYNAMIC-NEXT:    retq
9002;
9003; DARWIN-64-PIC-LABEL: cxt00:
9004; DARWIN-64-PIC:       ## %bb.0: ## %entry
9005; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9006; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9007; DARWIN-64-PIC-NEXT:    retq
9008
9009entry:
9010	%0 = add i64 %i, 16
9011	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
9012	%2 = bitcast i32* %1 to i8*
9013	ret i8* %2
9014}
9015
9016define dso_local i8* @cat01(i64 %i) nounwind {
9017; LINUX-64-STATIC-LABEL: cat01:
9018; LINUX-64-STATIC:       # %bb.0: # %entry
9019; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9020; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9021; LINUX-64-STATIC-NEXT:    retq
9022;
9023; LINUX-32-STATIC-LABEL: cat01:
9024; LINUX-32-STATIC:       # %bb.0: # %entry
9025; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9026; LINUX-32-STATIC-NEXT:    leal dst+64(,%eax,4), %eax
9027; LINUX-32-STATIC-NEXT:    retl
9028;
9029; LINUX-32-PIC-LABEL: cat01:
9030; LINUX-32-PIC:       # %bb.0: # %entry
9031; LINUX-32-PIC-NEXT:    calll .L111$pb
9032; LINUX-32-PIC-NEXT:  .L111$pb:
9033; LINUX-32-PIC-NEXT:    popl %eax
9034; LINUX-32-PIC-NEXT:  .Ltmp111:
9035; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp111-.L111$pb), %eax
9036; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9037; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
9038; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9039; LINUX-32-PIC-NEXT:    retl
9040;
9041; LINUX-64-PIC-LABEL: cat01:
9042; LINUX-64-PIC:       # %bb.0: # %entry
9043; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9044; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9045; LINUX-64-PIC-NEXT:    retq
9046;
9047; DARWIN-32-STATIC-LABEL: cat01:
9048; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9049; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9050; DARWIN-32-STATIC-NEXT:    leal _dst+64(,%eax,4), %eax
9051; DARWIN-32-STATIC-NEXT:    retl
9052;
9053; DARWIN-32-DYNAMIC-LABEL: cat01:
9054; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9055; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9056; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
9057; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9058; DARWIN-32-DYNAMIC-NEXT:    retl
9059;
9060; DARWIN-32-PIC-LABEL: cat01:
9061; DARWIN-32-PIC:       ## %bb.0: ## %entry
9062; DARWIN-32-PIC-NEXT:    calll L111$pb
9063; DARWIN-32-PIC-NEXT:  L111$pb:
9064; DARWIN-32-PIC-NEXT:    popl %eax
9065; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9066; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L111$pb(%eax), %eax
9067; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9068; DARWIN-32-PIC-NEXT:    retl
9069;
9070; DARWIN-64-STATIC-LABEL: cat01:
9071; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9072; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9073; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9074; DARWIN-64-STATIC-NEXT:    retq
9075;
9076; DARWIN-64-DYNAMIC-LABEL: cat01:
9077; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9078; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9079; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9080; DARWIN-64-DYNAMIC-NEXT:    retq
9081;
9082; DARWIN-64-PIC-LABEL: cat01:
9083; DARWIN-64-PIC:       ## %bb.0: ## %entry
9084; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9085; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9086; DARWIN-64-PIC-NEXT:    retq
9087
9088entry:
9089	%0 = add i64 %i, 16
9090	%1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
9091	%2 = bitcast i32* %1 to i8*
9092	ret i8* %2
9093}
9094
9095define dso_local i8* @cxt01(i64 %i) nounwind {
9096; LINUX-64-STATIC-LABEL: cxt01:
9097; LINUX-64-STATIC:       # %bb.0: # %entry
9098; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9099; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9100; LINUX-64-STATIC-NEXT:    retq
9101;
9102; LINUX-32-STATIC-LABEL: cxt01:
9103; LINUX-32-STATIC:       # %bb.0: # %entry
9104; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9105; LINUX-32-STATIC-NEXT:    leal xdst+64(,%eax,4), %eax
9106; LINUX-32-STATIC-NEXT:    retl
9107;
9108; LINUX-32-PIC-LABEL: cxt01:
9109; LINUX-32-PIC:       # %bb.0: # %entry
9110; LINUX-32-PIC-NEXT:    calll .L112$pb
9111; LINUX-32-PIC-NEXT:  .L112$pb:
9112; LINUX-32-PIC-NEXT:    popl %eax
9113; LINUX-32-PIC-NEXT:  .Ltmp112:
9114; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp112-.L112$pb), %eax
9115; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9116; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
9117; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9118; LINUX-32-PIC-NEXT:    retl
9119;
9120; LINUX-64-PIC-LABEL: cxt01:
9121; LINUX-64-PIC:       # %bb.0: # %entry
9122; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9123; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9124; LINUX-64-PIC-NEXT:    retq
9125;
9126; DARWIN-32-STATIC-LABEL: cxt01:
9127; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9128; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9129; DARWIN-32-STATIC-NEXT:    leal _xdst+64(,%eax,4), %eax
9130; DARWIN-32-STATIC-NEXT:    retl
9131;
9132; DARWIN-32-DYNAMIC-LABEL: cxt01:
9133; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9134; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9135; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
9136; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9137; DARWIN-32-DYNAMIC-NEXT:    retl
9138;
9139; DARWIN-32-PIC-LABEL: cxt01:
9140; DARWIN-32-PIC:       ## %bb.0: ## %entry
9141; DARWIN-32-PIC-NEXT:    calll L112$pb
9142; DARWIN-32-PIC-NEXT:  L112$pb:
9143; DARWIN-32-PIC-NEXT:    popl %eax
9144; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9145; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L112$pb(%eax), %eax
9146; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9147; DARWIN-32-PIC-NEXT:    retl
9148;
9149; DARWIN-64-STATIC-LABEL: cxt01:
9150; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9151; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9152; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9153; DARWIN-64-STATIC-NEXT:    retq
9154;
9155; DARWIN-64-DYNAMIC-LABEL: cxt01:
9156; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9157; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9158; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9159; DARWIN-64-DYNAMIC-NEXT:    retq
9160;
9161; DARWIN-64-PIC-LABEL: cxt01:
9162; DARWIN-64-PIC:       ## %bb.0: ## %entry
9163; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9164; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9165; DARWIN-64-PIC-NEXT:    retq
9166
9167entry:
9168	%0 = add i64 %i, 16
9169	%1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
9170	%2 = bitcast i32* %1 to i8*
9171	ret i8* %2
9172}
9173
9174define dso_local i8* @cat02(i64 %i) nounwind {
9175; LINUX-64-STATIC-LABEL: cat02:
9176; LINUX-64-STATIC:       # %bb.0: # %entry
9177; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
9178; LINUX-64-STATIC-NEXT:    movq (%rax), %rax
9179; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9180; LINUX-64-STATIC-NEXT:    retq
9181;
9182; LINUX-32-STATIC-LABEL: cat02:
9183; LINUX-32-STATIC:       # %bb.0: # %entry
9184; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9185; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
9186; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9187; LINUX-32-STATIC-NEXT:    retl
9188;
9189; LINUX-32-PIC-LABEL: cat02:
9190; LINUX-32-PIC:       # %bb.0: # %entry
9191; LINUX-32-PIC-NEXT:    calll .L113$pb
9192; LINUX-32-PIC-NEXT:  .L113$pb:
9193; LINUX-32-PIC-NEXT:    popl %eax
9194; LINUX-32-PIC-NEXT:  .Ltmp113:
9195; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp113-.L113$pb), %eax
9196; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
9197; LINUX-32-PIC-NEXT:    movl (%eax), %eax
9198; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9199; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9200; LINUX-32-PIC-NEXT:    retl
9201;
9202; LINUX-64-PIC-LABEL: cat02:
9203; LINUX-64-PIC:       # %bb.0: # %entry
9204; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
9205; LINUX-64-PIC-NEXT:    movq (%rax), %rax
9206; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9207; LINUX-64-PIC-NEXT:    retq
9208;
9209; DARWIN-32-STATIC-LABEL: cat02:
9210; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9211; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9212; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
9213; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9214; DARWIN-32-STATIC-NEXT:    retl
9215;
9216; DARWIN-32-DYNAMIC-LABEL: cat02:
9217; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9218; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
9219; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
9220; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9221; DARWIN-32-DYNAMIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9222; DARWIN-32-DYNAMIC-NEXT:    retl
9223;
9224; DARWIN-32-PIC-LABEL: cat02:
9225; DARWIN-32-PIC:       ## %bb.0: ## %entry
9226; DARWIN-32-PIC-NEXT:    calll L113$pb
9227; DARWIN-32-PIC-NEXT:  L113$pb:
9228; DARWIN-32-PIC-NEXT:    popl %eax
9229; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L113$pb(%eax), %eax
9230; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
9231; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9232; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9233; DARWIN-32-PIC-NEXT:    retl
9234;
9235; DARWIN-64-STATIC-LABEL: cat02:
9236; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9237; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9238; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
9239; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9240; DARWIN-64-STATIC-NEXT:    retq
9241;
9242; DARWIN-64-DYNAMIC-LABEL: cat02:
9243; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9244; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9245; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
9246; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9247; DARWIN-64-DYNAMIC-NEXT:    retq
9248;
9249; DARWIN-64-PIC-LABEL: cat02:
9250; DARWIN-64-PIC:       ## %bb.0: ## %entry
9251; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9252; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
9253; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9254; DARWIN-64-PIC-NEXT:    retq
9255
9256entry:
9257	%0 = load i32*, i32** @ptr, align 8
9258	%1 = add i64 %i, 16
9259	%2 = getelementptr i32, i32* %0, i64 %1
9260	%3 = bitcast i32* %2 to i8*
9261	ret i8* %3
9262}
9263
9264define dso_local i8* @cat03(i64 %i) nounwind {
9265; LINUX-64-STATIC-LABEL: cat03:
9266; LINUX-64-STATIC:       # %bb.0: # %entry
9267; LINUX-64-STATIC-NEXT:    leaq dsrc+64(,%rdi,4), %rax
9268; LINUX-64-STATIC-NEXT:    retq
9269;
9270; LINUX-32-STATIC-LABEL: cat03:
9271; LINUX-32-STATIC:       # %bb.0: # %entry
9272; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9273; LINUX-32-STATIC-NEXT:    leal dsrc+64(,%eax,4), %eax
9274; LINUX-32-STATIC-NEXT:    retl
9275;
9276; LINUX-32-PIC-LABEL: cat03:
9277; LINUX-32-PIC:       # %bb.0: # %entry
9278; LINUX-32-PIC-NEXT:    calll .L114$pb
9279; LINUX-32-PIC-NEXT:  .L114$pb:
9280; LINUX-32-PIC-NEXT:    popl %eax
9281; LINUX-32-PIC-NEXT:  .Ltmp114:
9282; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp114-.L114$pb), %eax
9283; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9284; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF+64(%eax,%ecx,4), %eax
9285; LINUX-32-PIC-NEXT:    retl
9286;
9287; LINUX-64-PIC-LABEL: cat03:
9288; LINUX-64-PIC:       # %bb.0: # %entry
9289; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
9290; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9291; LINUX-64-PIC-NEXT:    retq
9292;
9293; DARWIN-32-STATIC-LABEL: cat03:
9294; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9295; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9296; DARWIN-32-STATIC-NEXT:    leal _dsrc+64(,%eax,4), %eax
9297; DARWIN-32-STATIC-NEXT:    retl
9298;
9299; DARWIN-32-DYNAMIC-LABEL: cat03:
9300; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9301; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9302; DARWIN-32-DYNAMIC-NEXT:    leal _dsrc+64(,%eax,4), %eax
9303; DARWIN-32-DYNAMIC-NEXT:    retl
9304;
9305; DARWIN-32-PIC-LABEL: cat03:
9306; DARWIN-32-PIC:       ## %bb.0: ## %entry
9307; DARWIN-32-PIC-NEXT:    calll L114$pb
9308; DARWIN-32-PIC-NEXT:  L114$pb:
9309; DARWIN-32-PIC-NEXT:    popl %eax
9310; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9311; DARWIN-32-PIC-NEXT:    leal (_dsrc-L114$pb)+64(%eax,%ecx,4), %eax
9312; DARWIN-32-PIC-NEXT:    retl
9313;
9314; DARWIN-64-STATIC-LABEL: cat03:
9315; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9316; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
9317; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9318; DARWIN-64-STATIC-NEXT:    retq
9319;
9320; DARWIN-64-DYNAMIC-LABEL: cat03:
9321; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9322; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
9323; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9324; DARWIN-64-DYNAMIC-NEXT:    retq
9325;
9326; DARWIN-64-PIC-LABEL: cat03:
9327; DARWIN-64-PIC:       ## %bb.0: ## %entry
9328; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
9329; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9330; DARWIN-64-PIC-NEXT:    retq
9331
9332entry:
9333	%0 = add i64 %i, 16
9334	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
9335	%2 = bitcast i32* %1 to i8*
9336	ret i8* %2
9337}
9338
9339define dso_local i8* @cat04(i64 %i) nounwind {
9340; LINUX-64-STATIC-LABEL: cat04:
9341; LINUX-64-STATIC:       # %bb.0: # %entry
9342; LINUX-64-STATIC-NEXT:    leaq ddst+64(,%rdi,4), %rax
9343; LINUX-64-STATIC-NEXT:    retq
9344;
9345; LINUX-32-STATIC-LABEL: cat04:
9346; LINUX-32-STATIC:       # %bb.0: # %entry
9347; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9348; LINUX-32-STATIC-NEXT:    leal ddst+64(,%eax,4), %eax
9349; LINUX-32-STATIC-NEXT:    retl
9350;
9351; LINUX-32-PIC-LABEL: cat04:
9352; LINUX-32-PIC:       # %bb.0: # %entry
9353; LINUX-32-PIC-NEXT:    calll .L115$pb
9354; LINUX-32-PIC-NEXT:  .L115$pb:
9355; LINUX-32-PIC-NEXT:    popl %eax
9356; LINUX-32-PIC-NEXT:  .Ltmp115:
9357; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp115-.L115$pb), %eax
9358; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9359; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+64(%eax,%ecx,4), %eax
9360; LINUX-32-PIC-NEXT:    retl
9361;
9362; LINUX-64-PIC-LABEL: cat04:
9363; LINUX-64-PIC:       # %bb.0: # %entry
9364; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
9365; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9366; LINUX-64-PIC-NEXT:    retq
9367;
9368; DARWIN-32-STATIC-LABEL: cat04:
9369; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9370; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9371; DARWIN-32-STATIC-NEXT:    leal _ddst+64(,%eax,4), %eax
9372; DARWIN-32-STATIC-NEXT:    retl
9373;
9374; DARWIN-32-DYNAMIC-LABEL: cat04:
9375; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9376; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9377; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+64(,%eax,4), %eax
9378; DARWIN-32-DYNAMIC-NEXT:    retl
9379;
9380; DARWIN-32-PIC-LABEL: cat04:
9381; DARWIN-32-PIC:       ## %bb.0: ## %entry
9382; DARWIN-32-PIC-NEXT:    calll L115$pb
9383; DARWIN-32-PIC-NEXT:  L115$pb:
9384; DARWIN-32-PIC-NEXT:    popl %eax
9385; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9386; DARWIN-32-PIC-NEXT:    leal (_ddst-L115$pb)+64(%eax,%ecx,4), %eax
9387; DARWIN-32-PIC-NEXT:    retl
9388;
9389; DARWIN-64-STATIC-LABEL: cat04:
9390; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9391; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
9392; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9393; DARWIN-64-STATIC-NEXT:    retq
9394;
9395; DARWIN-64-DYNAMIC-LABEL: cat04:
9396; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9397; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
9398; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9399; DARWIN-64-DYNAMIC-NEXT:    retq
9400;
9401; DARWIN-64-PIC-LABEL: cat04:
9402; DARWIN-64-PIC:       ## %bb.0: ## %entry
9403; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
9404; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9405; DARWIN-64-PIC-NEXT:    retq
9406
9407entry:
9408	%0 = add i64 %i, 16
9409	%1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
9410	%2 = bitcast i32* %1 to i8*
9411	ret i8* %2
9412}
9413
9414define dso_local i8* @cat05(i64 %i) nounwind {
9415; LINUX-64-STATIC-LABEL: cat05:
9416; LINUX-64-STATIC:       # %bb.0: # %entry
9417; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
9418; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9419; LINUX-64-STATIC-NEXT:    retq
9420;
9421; LINUX-32-STATIC-LABEL: cat05:
9422; LINUX-32-STATIC:       # %bb.0: # %entry
9423; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9424; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
9425; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9426; LINUX-32-STATIC-NEXT:    retl
9427;
9428; LINUX-32-PIC-LABEL: cat05:
9429; LINUX-32-PIC:       # %bb.0: # %entry
9430; LINUX-32-PIC-NEXT:    calll .L116$pb
9431; LINUX-32-PIC-NEXT:  .L116$pb:
9432; LINUX-32-PIC-NEXT:    popl %eax
9433; LINUX-32-PIC-NEXT:  .Ltmp116:
9434; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp116-.L116$pb), %eax
9435; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9436; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
9437; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9438; LINUX-32-PIC-NEXT:    retl
9439;
9440; LINUX-64-PIC-LABEL: cat05:
9441; LINUX-64-PIC:       # %bb.0: # %entry
9442; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rax
9443; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9444; LINUX-64-PIC-NEXT:    retq
9445;
9446; DARWIN-32-STATIC-LABEL: cat05:
9447; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9448; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9449; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
9450; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9451; DARWIN-32-STATIC-NEXT:    retl
9452;
9453; DARWIN-32-DYNAMIC-LABEL: cat05:
9454; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9455; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9456; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
9457; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9458; DARWIN-32-DYNAMIC-NEXT:    retl
9459;
9460; DARWIN-32-PIC-LABEL: cat05:
9461; DARWIN-32-PIC:       ## %bb.0: ## %entry
9462; DARWIN-32-PIC-NEXT:    calll L116$pb
9463; DARWIN-32-PIC-NEXT:  L116$pb:
9464; DARWIN-32-PIC-NEXT:    popl %eax
9465; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9466; DARWIN-32-PIC-NEXT:    movl _dptr-L116$pb(%eax), %eax
9467; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9468; DARWIN-32-PIC-NEXT:    retl
9469;
9470; DARWIN-64-STATIC-LABEL: cat05:
9471; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9472; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
9473; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9474; DARWIN-64-STATIC-NEXT:    retq
9475;
9476; DARWIN-64-DYNAMIC-LABEL: cat05:
9477; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9478; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
9479; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9480; DARWIN-64-DYNAMIC-NEXT:    retq
9481;
9482; DARWIN-64-PIC-LABEL: cat05:
9483; DARWIN-64-PIC:       ## %bb.0: ## %entry
9484; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
9485; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9486; DARWIN-64-PIC-NEXT:    retq
9487
9488entry:
9489	%0 = load i32*, i32** @dptr, align 8
9490	%1 = add i64 %i, 16
9491	%2 = getelementptr i32, i32* %0, i64 %1
9492	%3 = bitcast i32* %2 to i8*
9493	ret i8* %3
9494}
9495
9496define dso_local i8* @cat06(i64 %i) nounwind {
9497; LINUX-64-STATIC-LABEL: cat06:
9498; LINUX-64-STATIC:       # %bb.0: # %entry
9499; LINUX-64-STATIC-NEXT:    leaq lsrc+64(,%rdi,4), %rax
9500; LINUX-64-STATIC-NEXT:    retq
9501;
9502; LINUX-32-STATIC-LABEL: cat06:
9503; LINUX-32-STATIC:       # %bb.0: # %entry
9504; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9505; LINUX-32-STATIC-NEXT:    leal lsrc+64(,%eax,4), %eax
9506; LINUX-32-STATIC-NEXT:    retl
9507;
9508; LINUX-32-PIC-LABEL: cat06:
9509; LINUX-32-PIC:       # %bb.0: # %entry
9510; LINUX-32-PIC-NEXT:    calll .L117$pb
9511; LINUX-32-PIC-NEXT:  .L117$pb:
9512; LINUX-32-PIC-NEXT:    popl %eax
9513; LINUX-32-PIC-NEXT:  .Ltmp117:
9514; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp117-.L117$pb), %eax
9515; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9516; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+64(%eax,%ecx,4), %eax
9517; LINUX-32-PIC-NEXT:    retl
9518;
9519; LINUX-64-PIC-LABEL: cat06:
9520; LINUX-64-PIC:       # %bb.0: # %entry
9521; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
9522; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9523; LINUX-64-PIC-NEXT:    retq
9524;
9525; DARWIN-32-STATIC-LABEL: cat06:
9526; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9527; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9528; DARWIN-32-STATIC-NEXT:    leal _lsrc+64(,%eax,4), %eax
9529; DARWIN-32-STATIC-NEXT:    retl
9530;
9531; DARWIN-32-DYNAMIC-LABEL: cat06:
9532; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9533; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9534; DARWIN-32-DYNAMIC-NEXT:    leal _lsrc+64(,%eax,4), %eax
9535; DARWIN-32-DYNAMIC-NEXT:    retl
9536;
9537; DARWIN-32-PIC-LABEL: cat06:
9538; DARWIN-32-PIC:       ## %bb.0: ## %entry
9539; DARWIN-32-PIC-NEXT:    calll L117$pb
9540; DARWIN-32-PIC-NEXT:  L117$pb:
9541; DARWIN-32-PIC-NEXT:    popl %eax
9542; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9543; DARWIN-32-PIC-NEXT:    leal (_lsrc-L117$pb)+64(%eax,%ecx,4), %eax
9544; DARWIN-32-PIC-NEXT:    retl
9545;
9546; DARWIN-64-STATIC-LABEL: cat06:
9547; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9548; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
9549; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9550; DARWIN-64-STATIC-NEXT:    retq
9551;
9552; DARWIN-64-DYNAMIC-LABEL: cat06:
9553; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9554; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
9555; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9556; DARWIN-64-DYNAMIC-NEXT:    retq
9557;
9558; DARWIN-64-PIC-LABEL: cat06:
9559; DARWIN-64-PIC:       ## %bb.0: ## %entry
9560; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
9561; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9562; DARWIN-64-PIC-NEXT:    retq
9563
9564entry:
9565	%0 = add i64 %i, 16
9566	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
9567	%2 = bitcast i32* %1 to i8*
9568	ret i8* %2
9569}
9570
9571define dso_local i8* @cat07(i64 %i) nounwind {
9572; LINUX-64-STATIC-LABEL: cat07:
9573; LINUX-64-STATIC:       # %bb.0: # %entry
9574; LINUX-64-STATIC-NEXT:    leaq ldst+64(,%rdi,4), %rax
9575; LINUX-64-STATIC-NEXT:    retq
9576;
9577; LINUX-32-STATIC-LABEL: cat07:
9578; LINUX-32-STATIC:       # %bb.0: # %entry
9579; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9580; LINUX-32-STATIC-NEXT:    leal ldst+64(,%eax,4), %eax
9581; LINUX-32-STATIC-NEXT:    retl
9582;
9583; LINUX-32-PIC-LABEL: cat07:
9584; LINUX-32-PIC:       # %bb.0: # %entry
9585; LINUX-32-PIC-NEXT:    calll .L118$pb
9586; LINUX-32-PIC-NEXT:  .L118$pb:
9587; LINUX-32-PIC-NEXT:    popl %eax
9588; LINUX-32-PIC-NEXT:  .Ltmp118:
9589; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp118-.L118$pb), %eax
9590; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9591; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax,%ecx,4), %eax
9592; LINUX-32-PIC-NEXT:    retl
9593;
9594; LINUX-64-PIC-LABEL: cat07:
9595; LINUX-64-PIC:       # %bb.0: # %entry
9596; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
9597; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9598; LINUX-64-PIC-NEXT:    retq
9599;
9600; DARWIN-32-STATIC-LABEL: cat07:
9601; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9602; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9603; DARWIN-32-STATIC-NEXT:    leal _ldst+64(,%eax,4), %eax
9604; DARWIN-32-STATIC-NEXT:    retl
9605;
9606; DARWIN-32-DYNAMIC-LABEL: cat07:
9607; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9608; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9609; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+64(,%eax,4), %eax
9610; DARWIN-32-DYNAMIC-NEXT:    retl
9611;
9612; DARWIN-32-PIC-LABEL: cat07:
9613; DARWIN-32-PIC:       ## %bb.0: ## %entry
9614; DARWIN-32-PIC-NEXT:    calll L118$pb
9615; DARWIN-32-PIC-NEXT:  L118$pb:
9616; DARWIN-32-PIC-NEXT:    popl %eax
9617; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9618; DARWIN-32-PIC-NEXT:    leal (_ldst-L118$pb)+64(%eax,%ecx,4), %eax
9619; DARWIN-32-PIC-NEXT:    retl
9620;
9621; DARWIN-64-STATIC-LABEL: cat07:
9622; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9623; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
9624; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9625; DARWIN-64-STATIC-NEXT:    retq
9626;
9627; DARWIN-64-DYNAMIC-LABEL: cat07:
9628; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9629; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
9630; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9631; DARWIN-64-DYNAMIC-NEXT:    retq
9632;
9633; DARWIN-64-PIC-LABEL: cat07:
9634; DARWIN-64-PIC:       ## %bb.0: ## %entry
9635; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
9636; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9637; DARWIN-64-PIC-NEXT:    retq
9638
9639entry:
9640	%0 = add i64 %i, 16
9641	%1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
9642	%2 = bitcast i32* %1 to i8*
9643	ret i8* %2
9644}
9645
9646define dso_local i8* @cat08(i64 %i) nounwind {
9647; LINUX-64-STATIC-LABEL: cat08:
9648; LINUX-64-STATIC:       # %bb.0: # %entry
9649; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
9650; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9651; LINUX-64-STATIC-NEXT:    retq
9652;
9653; LINUX-32-STATIC-LABEL: cat08:
9654; LINUX-32-STATIC:       # %bb.0: # %entry
9655; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9656; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
9657; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9658; LINUX-32-STATIC-NEXT:    retl
9659;
9660; LINUX-32-PIC-LABEL: cat08:
9661; LINUX-32-PIC:       # %bb.0: # %entry
9662; LINUX-32-PIC-NEXT:    calll .L119$pb
9663; LINUX-32-PIC-NEXT:  .L119$pb:
9664; LINUX-32-PIC-NEXT:    popl %eax
9665; LINUX-32-PIC-NEXT:  .Ltmp119:
9666; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp119-.L119$pb), %eax
9667; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9668; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
9669; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9670; LINUX-32-PIC-NEXT:    retl
9671;
9672; LINUX-64-PIC-LABEL: cat08:
9673; LINUX-64-PIC:       # %bb.0: # %entry
9674; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
9675; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9676; LINUX-64-PIC-NEXT:    retq
9677;
9678; DARWIN-32-STATIC-LABEL: cat08:
9679; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9680; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9681; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
9682; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9683; DARWIN-32-STATIC-NEXT:    retl
9684;
9685; DARWIN-32-DYNAMIC-LABEL: cat08:
9686; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9687; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9688; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
9689; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9690; DARWIN-32-DYNAMIC-NEXT:    retl
9691;
9692; DARWIN-32-PIC-LABEL: cat08:
9693; DARWIN-32-PIC:       ## %bb.0: ## %entry
9694; DARWIN-32-PIC-NEXT:    calll L119$pb
9695; DARWIN-32-PIC-NEXT:  L119$pb:
9696; DARWIN-32-PIC-NEXT:    popl %eax
9697; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9698; DARWIN-32-PIC-NEXT:    movl _lptr-L119$pb(%eax), %eax
9699; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9700; DARWIN-32-PIC-NEXT:    retl
9701;
9702; DARWIN-64-STATIC-LABEL: cat08:
9703; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9704; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
9705; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9706; DARWIN-64-STATIC-NEXT:    retq
9707;
9708; DARWIN-64-DYNAMIC-LABEL: cat08:
9709; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9710; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
9711; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9712; DARWIN-64-DYNAMIC-NEXT:    retq
9713;
9714; DARWIN-64-PIC-LABEL: cat08:
9715; DARWIN-64-PIC:       ## %bb.0: ## %entry
9716; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
9717; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9718; DARWIN-64-PIC-NEXT:    retq
9719
9720entry:
9721	%0 = load i32*, i32** @lptr, align 8
9722	%1 = add i64 %i, 16
9723	%2 = getelementptr i32, i32* %0, i64 %1
9724	%3 = bitcast i32* %2 to i8*
9725	ret i8* %3
9726}
9727
9728define dso_local i8* @cam00(i64 %i) nounwind {
9729; LINUX-64-STATIC-LABEL: cam00:
9730; LINUX-64-STATIC:       # %bb.0: # %entry
9731; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
9732; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9733; LINUX-64-STATIC-NEXT:    retq
9734;
9735; LINUX-32-STATIC-LABEL: cam00:
9736; LINUX-32-STATIC:       # %bb.0: # %entry
9737; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9738; LINUX-32-STATIC-NEXT:    leal src+262144(,%eax,4), %eax
9739; LINUX-32-STATIC-NEXT:    retl
9740;
9741; LINUX-32-PIC-LABEL: cam00:
9742; LINUX-32-PIC:       # %bb.0: # %entry
9743; LINUX-32-PIC-NEXT:    calll .L120$pb
9744; LINUX-32-PIC-NEXT:  .L120$pb:
9745; LINUX-32-PIC-NEXT:    popl %eax
9746; LINUX-32-PIC-NEXT:  .Ltmp120:
9747; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp120-.L120$pb), %eax
9748; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9749; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
9750; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9751; LINUX-32-PIC-NEXT:    retl
9752;
9753; LINUX-64-PIC-LABEL: cam00:
9754; LINUX-64-PIC:       # %bb.0: # %entry
9755; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
9756; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9757; LINUX-64-PIC-NEXT:    retq
9758;
9759; DARWIN-32-STATIC-LABEL: cam00:
9760; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9761; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9762; DARWIN-32-STATIC-NEXT:    leal _src+262144(,%eax,4), %eax
9763; DARWIN-32-STATIC-NEXT:    retl
9764;
9765; DARWIN-32-DYNAMIC-LABEL: cam00:
9766; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9767; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9768; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
9769; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9770; DARWIN-32-DYNAMIC-NEXT:    retl
9771;
9772; DARWIN-32-PIC-LABEL: cam00:
9773; DARWIN-32-PIC:       ## %bb.0: ## %entry
9774; DARWIN-32-PIC-NEXT:    calll L120$pb
9775; DARWIN-32-PIC-NEXT:  L120$pb:
9776; DARWIN-32-PIC-NEXT:    popl %eax
9777; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9778; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L120$pb(%eax), %eax
9779; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9780; DARWIN-32-PIC-NEXT:    retl
9781;
9782; DARWIN-64-STATIC-LABEL: cam00:
9783; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9784; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9785; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9786; DARWIN-64-STATIC-NEXT:    retq
9787;
9788; DARWIN-64-DYNAMIC-LABEL: cam00:
9789; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9790; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9791; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9792; DARWIN-64-DYNAMIC-NEXT:    retq
9793;
9794; DARWIN-64-PIC-LABEL: cam00:
9795; DARWIN-64-PIC:       ## %bb.0: ## %entry
9796; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9797; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9798; DARWIN-64-PIC-NEXT:    retq
9799
9800entry:
9801	%0 = add i64 %i, 65536
9802	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
9803	%2 = bitcast i32* %1 to i8*
9804	ret i8* %2
9805}
9806
9807define dso_local i8* @cxm00(i64 %i) nounwind {
9808; LINUX-64-STATIC-LABEL: cxm00:
9809; LINUX-64-STATIC:       # %bb.0: # %entry
9810; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
9811; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9812; LINUX-64-STATIC-NEXT:    retq
9813;
9814; LINUX-32-STATIC-LABEL: cxm00:
9815; LINUX-32-STATIC:       # %bb.0: # %entry
9816; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9817; LINUX-32-STATIC-NEXT:    leal xsrc+262144(,%eax,4), %eax
9818; LINUX-32-STATIC-NEXT:    retl
9819;
9820; LINUX-32-PIC-LABEL: cxm00:
9821; LINUX-32-PIC:       # %bb.0: # %entry
9822; LINUX-32-PIC-NEXT:    calll .L121$pb
9823; LINUX-32-PIC-NEXT:  .L121$pb:
9824; LINUX-32-PIC-NEXT:    popl %eax
9825; LINUX-32-PIC-NEXT:  .Ltmp121:
9826; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp121-.L121$pb), %eax
9827; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9828; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
9829; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9830; LINUX-32-PIC-NEXT:    retl
9831;
9832; LINUX-64-PIC-LABEL: cxm00:
9833; LINUX-64-PIC:       # %bb.0: # %entry
9834; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
9835; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9836; LINUX-64-PIC-NEXT:    retq
9837;
9838; DARWIN-32-STATIC-LABEL: cxm00:
9839; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9840; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9841; DARWIN-32-STATIC-NEXT:    leal _xsrc+262144(,%eax,4), %eax
9842; DARWIN-32-STATIC-NEXT:    retl
9843;
9844; DARWIN-32-DYNAMIC-LABEL: cxm00:
9845; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9846; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9847; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
9848; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9849; DARWIN-32-DYNAMIC-NEXT:    retl
9850;
9851; DARWIN-32-PIC-LABEL: cxm00:
9852; DARWIN-32-PIC:       ## %bb.0: ## %entry
9853; DARWIN-32-PIC-NEXT:    calll L121$pb
9854; DARWIN-32-PIC-NEXT:  L121$pb:
9855; DARWIN-32-PIC-NEXT:    popl %eax
9856; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9857; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L121$pb(%eax), %eax
9858; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9859; DARWIN-32-PIC-NEXT:    retl
9860;
9861; DARWIN-64-STATIC-LABEL: cxm00:
9862; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9863; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9864; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9865; DARWIN-64-STATIC-NEXT:    retq
9866;
9867; DARWIN-64-DYNAMIC-LABEL: cxm00:
9868; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9869; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9870; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9871; DARWIN-64-DYNAMIC-NEXT:    retq
9872;
9873; DARWIN-64-PIC-LABEL: cxm00:
9874; DARWIN-64-PIC:       ## %bb.0: ## %entry
9875; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9876; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9877; DARWIN-64-PIC-NEXT:    retq
9878
9879entry:
9880	%0 = add i64 %i, 65536
9881	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
9882	%2 = bitcast i32* %1 to i8*
9883	ret i8* %2
9884}
9885
9886define dso_local i8* @cam01(i64 %i) nounwind {
9887; LINUX-64-STATIC-LABEL: cam01:
9888; LINUX-64-STATIC:       # %bb.0: # %entry
9889; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9890; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9891; LINUX-64-STATIC-NEXT:    retq
9892;
9893; LINUX-32-STATIC-LABEL: cam01:
9894; LINUX-32-STATIC:       # %bb.0: # %entry
9895; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9896; LINUX-32-STATIC-NEXT:    leal dst+262144(,%eax,4), %eax
9897; LINUX-32-STATIC-NEXT:    retl
9898;
9899; LINUX-32-PIC-LABEL: cam01:
9900; LINUX-32-PIC:       # %bb.0: # %entry
9901; LINUX-32-PIC-NEXT:    calll .L122$pb
9902; LINUX-32-PIC-NEXT:  .L122$pb:
9903; LINUX-32-PIC-NEXT:    popl %eax
9904; LINUX-32-PIC-NEXT:  .Ltmp122:
9905; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp122-.L122$pb), %eax
9906; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9907; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
9908; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9909; LINUX-32-PIC-NEXT:    retl
9910;
9911; LINUX-64-PIC-LABEL: cam01:
9912; LINUX-64-PIC:       # %bb.0: # %entry
9913; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9914; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9915; LINUX-64-PIC-NEXT:    retq
9916;
9917; DARWIN-32-STATIC-LABEL: cam01:
9918; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9919; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9920; DARWIN-32-STATIC-NEXT:    leal _dst+262144(,%eax,4), %eax
9921; DARWIN-32-STATIC-NEXT:    retl
9922;
9923; DARWIN-32-DYNAMIC-LABEL: cam01:
9924; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9925; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9926; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
9927; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9928; DARWIN-32-DYNAMIC-NEXT:    retl
9929;
9930; DARWIN-32-PIC-LABEL: cam01:
9931; DARWIN-32-PIC:       ## %bb.0: ## %entry
9932; DARWIN-32-PIC-NEXT:    calll L122$pb
9933; DARWIN-32-PIC-NEXT:  L122$pb:
9934; DARWIN-32-PIC-NEXT:    popl %eax
9935; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9936; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L122$pb(%eax), %eax
9937; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9938; DARWIN-32-PIC-NEXT:    retl
9939;
9940; DARWIN-64-STATIC-LABEL: cam01:
9941; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9942; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9943; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9944; DARWIN-64-STATIC-NEXT:    retq
9945;
9946; DARWIN-64-DYNAMIC-LABEL: cam01:
9947; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9948; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9949; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9950; DARWIN-64-DYNAMIC-NEXT:    retq
9951;
9952; DARWIN-64-PIC-LABEL: cam01:
9953; DARWIN-64-PIC:       ## %bb.0: ## %entry
9954; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9955; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9956; DARWIN-64-PIC-NEXT:    retq
9957
9958entry:
9959	%0 = add i64 %i, 65536
9960	%1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
9961	%2 = bitcast i32* %1 to i8*
9962	ret i8* %2
9963}
9964
9965define dso_local i8* @cxm01(i64 %i) nounwind {
9966; LINUX-64-STATIC-LABEL: cxm01:
9967; LINUX-64-STATIC:       # %bb.0: # %entry
9968; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9969; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9970; LINUX-64-STATIC-NEXT:    retq
9971;
9972; LINUX-32-STATIC-LABEL: cxm01:
9973; LINUX-32-STATIC:       # %bb.0: # %entry
9974; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9975; LINUX-32-STATIC-NEXT:    leal xdst+262144(,%eax,4), %eax
9976; LINUX-32-STATIC-NEXT:    retl
9977;
9978; LINUX-32-PIC-LABEL: cxm01:
9979; LINUX-32-PIC:       # %bb.0: # %entry
9980; LINUX-32-PIC-NEXT:    calll .L123$pb
9981; LINUX-32-PIC-NEXT:  .L123$pb:
9982; LINUX-32-PIC-NEXT:    popl %eax
9983; LINUX-32-PIC-NEXT:  .Ltmp123:
9984; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp123-.L123$pb), %eax
9985; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9986; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
9987; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9988; LINUX-32-PIC-NEXT:    retl
9989;
9990; LINUX-64-PIC-LABEL: cxm01:
9991; LINUX-64-PIC:       # %bb.0: # %entry
9992; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9993; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9994; LINUX-64-PIC-NEXT:    retq
9995;
9996; DARWIN-32-STATIC-LABEL: cxm01:
9997; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9998; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9999; DARWIN-32-STATIC-NEXT:    leal _xdst+262144(,%eax,4), %eax
10000; DARWIN-32-STATIC-NEXT:    retl
10001;
10002; DARWIN-32-DYNAMIC-LABEL: cxm01:
10003; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10004; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10005; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
10006; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10007; DARWIN-32-DYNAMIC-NEXT:    retl
10008;
10009; DARWIN-32-PIC-LABEL: cxm01:
10010; DARWIN-32-PIC:       ## %bb.0: ## %entry
10011; DARWIN-32-PIC-NEXT:    calll L123$pb
10012; DARWIN-32-PIC-NEXT:  L123$pb:
10013; DARWIN-32-PIC-NEXT:    popl %eax
10014; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10015; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L123$pb(%eax), %eax
10016; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10017; DARWIN-32-PIC-NEXT:    retl
10018;
10019; DARWIN-64-STATIC-LABEL: cxm01:
10020; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10021; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
10022; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10023; DARWIN-64-STATIC-NEXT:    retq
10024;
10025; DARWIN-64-DYNAMIC-LABEL: cxm01:
10026; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10027; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
10028; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10029; DARWIN-64-DYNAMIC-NEXT:    retq
10030;
10031; DARWIN-64-PIC-LABEL: cxm01:
10032; DARWIN-64-PIC:       ## %bb.0: ## %entry
10033; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
10034; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10035; DARWIN-64-PIC-NEXT:    retq
10036
10037entry:
10038	%0 = add i64 %i, 65536
10039	%1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
10040	%2 = bitcast i32* %1 to i8*
10041	ret i8* %2
10042}
10043
10044define dso_local i8* @cam02(i64 %i) nounwind {
10045; LINUX-64-STATIC-LABEL: cam02:
10046; LINUX-64-STATIC:       # %bb.0: # %entry
10047; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
10048; LINUX-64-STATIC-NEXT:    movq (%rax), %rax
10049; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10050; LINUX-64-STATIC-NEXT:    retq
10051;
10052; LINUX-32-STATIC-LABEL: cam02:
10053; LINUX-32-STATIC:       # %bb.0: # %entry
10054; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10055; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
10056; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10057; LINUX-32-STATIC-NEXT:    retl
10058;
10059; LINUX-32-PIC-LABEL: cam02:
10060; LINUX-32-PIC:       # %bb.0: # %entry
10061; LINUX-32-PIC-NEXT:    calll .L124$pb
10062; LINUX-32-PIC-NEXT:  .L124$pb:
10063; LINUX-32-PIC-NEXT:    popl %eax
10064; LINUX-32-PIC-NEXT:  .Ltmp124:
10065; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp124-.L124$pb), %eax
10066; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
10067; LINUX-32-PIC-NEXT:    movl (%eax), %eax
10068; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10069; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10070; LINUX-32-PIC-NEXT:    retl
10071;
10072; LINUX-64-PIC-LABEL: cam02:
10073; LINUX-64-PIC:       # %bb.0: # %entry
10074; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
10075; LINUX-64-PIC-NEXT:    movq (%rax), %rax
10076; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10077; LINUX-64-PIC-NEXT:    retq
10078;
10079; DARWIN-32-STATIC-LABEL: cam02:
10080; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10081; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10082; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
10083; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10084; DARWIN-32-STATIC-NEXT:    retl
10085;
10086; DARWIN-32-DYNAMIC-LABEL: cam02:
10087; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10088; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
10089; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
10090; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10091; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10092; DARWIN-32-DYNAMIC-NEXT:    retl
10093;
10094; DARWIN-32-PIC-LABEL: cam02:
10095; DARWIN-32-PIC:       ## %bb.0: ## %entry
10096; DARWIN-32-PIC-NEXT:    calll L124$pb
10097; DARWIN-32-PIC-NEXT:  L124$pb:
10098; DARWIN-32-PIC-NEXT:    popl %eax
10099; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L124$pb(%eax), %eax
10100; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
10101; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10102; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10103; DARWIN-32-PIC-NEXT:    retl
10104;
10105; DARWIN-64-STATIC-LABEL: cam02:
10106; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10107; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10108; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
10109; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10110; DARWIN-64-STATIC-NEXT:    retq
10111;
10112; DARWIN-64-DYNAMIC-LABEL: cam02:
10113; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10114; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10115; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
10116; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10117; DARWIN-64-DYNAMIC-NEXT:    retq
10118;
10119; DARWIN-64-PIC-LABEL: cam02:
10120; DARWIN-64-PIC:       ## %bb.0: ## %entry
10121; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10122; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
10123; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10124; DARWIN-64-PIC-NEXT:    retq
10125
10126entry:
10127	%0 = load i32*, i32** @ptr, align 8
10128	%1 = add i64 %i, 65536
10129	%2 = getelementptr i32, i32* %0, i64 %1
10130	%3 = bitcast i32* %2 to i8*
10131	ret i8* %3
10132}
10133
10134define dso_local i8* @cam03(i64 %i) nounwind {
10135; LINUX-64-STATIC-LABEL: cam03:
10136; LINUX-64-STATIC:       # %bb.0: # %entry
10137; LINUX-64-STATIC-NEXT:    leaq dsrc+262144(,%rdi,4), %rax
10138; LINUX-64-STATIC-NEXT:    retq
10139;
10140; LINUX-32-STATIC-LABEL: cam03:
10141; LINUX-32-STATIC:       # %bb.0: # %entry
10142; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10143; LINUX-32-STATIC-NEXT:    leal dsrc+262144(,%eax,4), %eax
10144; LINUX-32-STATIC-NEXT:    retl
10145;
10146; LINUX-32-PIC-LABEL: cam03:
10147; LINUX-32-PIC:       # %bb.0: # %entry
10148; LINUX-32-PIC-NEXT:    calll .L125$pb
10149; LINUX-32-PIC-NEXT:  .L125$pb:
10150; LINUX-32-PIC-NEXT:    popl %eax
10151; LINUX-32-PIC-NEXT:  .Ltmp125:
10152; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp125-.L125$pb), %eax
10153; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10154; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF+262144(%eax,%ecx,4), %eax
10155; LINUX-32-PIC-NEXT:    retl
10156;
10157; LINUX-64-PIC-LABEL: cam03:
10158; LINUX-64-PIC:       # %bb.0: # %entry
10159; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
10160; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10161; LINUX-64-PIC-NEXT:    retq
10162;
10163; DARWIN-32-STATIC-LABEL: cam03:
10164; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10165; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10166; DARWIN-32-STATIC-NEXT:    leal _dsrc+262144(,%eax,4), %eax
10167; DARWIN-32-STATIC-NEXT:    retl
10168;
10169; DARWIN-32-DYNAMIC-LABEL: cam03:
10170; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10171; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10172; DARWIN-32-DYNAMIC-NEXT:    leal _dsrc+262144(,%eax,4), %eax
10173; DARWIN-32-DYNAMIC-NEXT:    retl
10174;
10175; DARWIN-32-PIC-LABEL: cam03:
10176; DARWIN-32-PIC:       ## %bb.0: ## %entry
10177; DARWIN-32-PIC-NEXT:    calll L125$pb
10178; DARWIN-32-PIC-NEXT:  L125$pb:
10179; DARWIN-32-PIC-NEXT:    popl %eax
10180; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10181; DARWIN-32-PIC-NEXT:    leal (_dsrc-L125$pb)+262144(%eax,%ecx,4), %eax
10182; DARWIN-32-PIC-NEXT:    retl
10183;
10184; DARWIN-64-STATIC-LABEL: cam03:
10185; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10186; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
10187; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10188; DARWIN-64-STATIC-NEXT:    retq
10189;
10190; DARWIN-64-DYNAMIC-LABEL: cam03:
10191; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10192; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
10193; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10194; DARWIN-64-DYNAMIC-NEXT:    retq
10195;
10196; DARWIN-64-PIC-LABEL: cam03:
10197; DARWIN-64-PIC:       ## %bb.0: ## %entry
10198; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
10199; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10200; DARWIN-64-PIC-NEXT:    retq
10201
10202entry:
10203	%0 = add i64 %i, 65536
10204	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
10205	%2 = bitcast i32* %1 to i8*
10206	ret i8* %2
10207}
10208
10209define dso_local i8* @cam04(i64 %i) nounwind {
10210; LINUX-64-STATIC-LABEL: cam04:
10211; LINUX-64-STATIC:       # %bb.0: # %entry
10212; LINUX-64-STATIC-NEXT:    leaq ddst+262144(,%rdi,4), %rax
10213; LINUX-64-STATIC-NEXT:    retq
10214;
10215; LINUX-32-STATIC-LABEL: cam04:
10216; LINUX-32-STATIC:       # %bb.0: # %entry
10217; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10218; LINUX-32-STATIC-NEXT:    leal ddst+262144(,%eax,4), %eax
10219; LINUX-32-STATIC-NEXT:    retl
10220;
10221; LINUX-32-PIC-LABEL: cam04:
10222; LINUX-32-PIC:       # %bb.0: # %entry
10223; LINUX-32-PIC-NEXT:    calll .L126$pb
10224; LINUX-32-PIC-NEXT:  .L126$pb:
10225; LINUX-32-PIC-NEXT:    popl %eax
10226; LINUX-32-PIC-NEXT:  .Ltmp126:
10227; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp126-.L126$pb), %eax
10228; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10229; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+262144(%eax,%ecx,4), %eax
10230; LINUX-32-PIC-NEXT:    retl
10231;
10232; LINUX-64-PIC-LABEL: cam04:
10233; LINUX-64-PIC:       # %bb.0: # %entry
10234; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
10235; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10236; LINUX-64-PIC-NEXT:    retq
10237;
10238; DARWIN-32-STATIC-LABEL: cam04:
10239; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10240; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10241; DARWIN-32-STATIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
10242; DARWIN-32-STATIC-NEXT:    retl
10243;
10244; DARWIN-32-DYNAMIC-LABEL: cam04:
10245; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10246; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10247; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
10248; DARWIN-32-DYNAMIC-NEXT:    retl
10249;
10250; DARWIN-32-PIC-LABEL: cam04:
10251; DARWIN-32-PIC:       ## %bb.0: ## %entry
10252; DARWIN-32-PIC-NEXT:    calll L126$pb
10253; DARWIN-32-PIC-NEXT:  L126$pb:
10254; DARWIN-32-PIC-NEXT:    popl %eax
10255; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10256; DARWIN-32-PIC-NEXT:    leal (_ddst-L126$pb)+262144(%eax,%ecx,4), %eax
10257; DARWIN-32-PIC-NEXT:    retl
10258;
10259; DARWIN-64-STATIC-LABEL: cam04:
10260; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10261; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
10262; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10263; DARWIN-64-STATIC-NEXT:    retq
10264;
10265; DARWIN-64-DYNAMIC-LABEL: cam04:
10266; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10267; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
10268; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10269; DARWIN-64-DYNAMIC-NEXT:    retq
10270;
10271; DARWIN-64-PIC-LABEL: cam04:
10272; DARWIN-64-PIC:       ## %bb.0: ## %entry
10273; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
10274; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10275; DARWIN-64-PIC-NEXT:    retq
10276
10277entry:
10278	%0 = add i64 %i, 65536
10279	%1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
10280	%2 = bitcast i32* %1 to i8*
10281	ret i8* %2
10282}
10283
10284define dso_local i8* @cam05(i64 %i) nounwind {
10285; LINUX-64-STATIC-LABEL: cam05:
10286; LINUX-64-STATIC:       # %bb.0: # %entry
10287; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
10288; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10289; LINUX-64-STATIC-NEXT:    retq
10290;
10291; LINUX-32-STATIC-LABEL: cam05:
10292; LINUX-32-STATIC:       # %bb.0: # %entry
10293; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10294; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
10295; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10296; LINUX-32-STATIC-NEXT:    retl
10297;
10298; LINUX-32-PIC-LABEL: cam05:
10299; LINUX-32-PIC:       # %bb.0: # %entry
10300; LINUX-32-PIC-NEXT:    calll .L127$pb
10301; LINUX-32-PIC-NEXT:  .L127$pb:
10302; LINUX-32-PIC-NEXT:    popl %eax
10303; LINUX-32-PIC-NEXT:  .Ltmp127:
10304; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp127-.L127$pb), %eax
10305; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10306; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
10307; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10308; LINUX-32-PIC-NEXT:    retl
10309;
10310; LINUX-64-PIC-LABEL: cam05:
10311; LINUX-64-PIC:       # %bb.0: # %entry
10312; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rax
10313; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10314; LINUX-64-PIC-NEXT:    retq
10315;
10316; DARWIN-32-STATIC-LABEL: cam05:
10317; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10318; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10319; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
10320; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10321; DARWIN-32-STATIC-NEXT:    retl
10322;
10323; DARWIN-32-DYNAMIC-LABEL: cam05:
10324; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10325; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10326; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
10327; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10328; DARWIN-32-DYNAMIC-NEXT:    retl
10329;
10330; DARWIN-32-PIC-LABEL: cam05:
10331; DARWIN-32-PIC:       ## %bb.0: ## %entry
10332; DARWIN-32-PIC-NEXT:    calll L127$pb
10333; DARWIN-32-PIC-NEXT:  L127$pb:
10334; DARWIN-32-PIC-NEXT:    popl %eax
10335; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10336; DARWIN-32-PIC-NEXT:    movl _dptr-L127$pb(%eax), %eax
10337; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10338; DARWIN-32-PIC-NEXT:    retl
10339;
10340; DARWIN-64-STATIC-LABEL: cam05:
10341; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10342; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
10343; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10344; DARWIN-64-STATIC-NEXT:    retq
10345;
10346; DARWIN-64-DYNAMIC-LABEL: cam05:
10347; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10348; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
10349; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10350; DARWIN-64-DYNAMIC-NEXT:    retq
10351;
10352; DARWIN-64-PIC-LABEL: cam05:
10353; DARWIN-64-PIC:       ## %bb.0: ## %entry
10354; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
10355; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10356; DARWIN-64-PIC-NEXT:    retq
10357
10358entry:
10359	%0 = load i32*, i32** @dptr, align 8
10360	%1 = add i64 %i, 65536
10361	%2 = getelementptr i32, i32* %0, i64 %1
10362	%3 = bitcast i32* %2 to i8*
10363	ret i8* %3
10364}
10365
10366define dso_local i8* @cam06(i64 %i) nounwind {
10367; LINUX-64-STATIC-LABEL: cam06:
10368; LINUX-64-STATIC:       # %bb.0: # %entry
10369; LINUX-64-STATIC-NEXT:    leaq lsrc+262144(,%rdi,4), %rax
10370; LINUX-64-STATIC-NEXT:    retq
10371;
10372; LINUX-32-STATIC-LABEL: cam06:
10373; LINUX-32-STATIC:       # %bb.0: # %entry
10374; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10375; LINUX-32-STATIC-NEXT:    leal lsrc+262144(,%eax,4), %eax
10376; LINUX-32-STATIC-NEXT:    retl
10377;
10378; LINUX-32-PIC-LABEL: cam06:
10379; LINUX-32-PIC:       # %bb.0: # %entry
10380; LINUX-32-PIC-NEXT:    calll .L128$pb
10381; LINUX-32-PIC-NEXT:  .L128$pb:
10382; LINUX-32-PIC-NEXT:    popl %eax
10383; LINUX-32-PIC-NEXT:  .Ltmp128:
10384; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp128-.L128$pb), %eax
10385; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10386; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+262144(%eax,%ecx,4), %eax
10387; LINUX-32-PIC-NEXT:    retl
10388;
10389; LINUX-64-PIC-LABEL: cam06:
10390; LINUX-64-PIC:       # %bb.0: # %entry
10391; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
10392; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10393; LINUX-64-PIC-NEXT:    retq
10394;
10395; DARWIN-32-STATIC-LABEL: cam06:
10396; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10397; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10398; DARWIN-32-STATIC-NEXT:    leal _lsrc+262144(,%eax,4), %eax
10399; DARWIN-32-STATIC-NEXT:    retl
10400;
10401; DARWIN-32-DYNAMIC-LABEL: cam06:
10402; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10403; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10404; DARWIN-32-DYNAMIC-NEXT:    leal _lsrc+262144(,%eax,4), %eax
10405; DARWIN-32-DYNAMIC-NEXT:    retl
10406;
10407; DARWIN-32-PIC-LABEL: cam06:
10408; DARWIN-32-PIC:       ## %bb.0: ## %entry
10409; DARWIN-32-PIC-NEXT:    calll L128$pb
10410; DARWIN-32-PIC-NEXT:  L128$pb:
10411; DARWIN-32-PIC-NEXT:    popl %eax
10412; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10413; DARWIN-32-PIC-NEXT:    leal (_lsrc-L128$pb)+262144(%eax,%ecx,4), %eax
10414; DARWIN-32-PIC-NEXT:    retl
10415;
10416; DARWIN-64-STATIC-LABEL: cam06:
10417; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10418; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
10419; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10420; DARWIN-64-STATIC-NEXT:    retq
10421;
10422; DARWIN-64-DYNAMIC-LABEL: cam06:
10423; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10424; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
10425; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10426; DARWIN-64-DYNAMIC-NEXT:    retq
10427;
10428; DARWIN-64-PIC-LABEL: cam06:
10429; DARWIN-64-PIC:       ## %bb.0: ## %entry
10430; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
10431; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10432; DARWIN-64-PIC-NEXT:    retq
10433
10434entry:
10435	%0 = add i64 %i, 65536
10436	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
10437	%2 = bitcast i32* %1 to i8*
10438	ret i8* %2
10439}
10440
10441define dso_local i8* @cam07(i64 %i) nounwind {
10442; LINUX-64-STATIC-LABEL: cam07:
10443; LINUX-64-STATIC:       # %bb.0: # %entry
10444; LINUX-64-STATIC-NEXT:    leaq ldst+262144(,%rdi,4), %rax
10445; LINUX-64-STATIC-NEXT:    retq
10446;
10447; LINUX-32-STATIC-LABEL: cam07:
10448; LINUX-32-STATIC:       # %bb.0: # %entry
10449; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10450; LINUX-32-STATIC-NEXT:    leal ldst+262144(,%eax,4), %eax
10451; LINUX-32-STATIC-NEXT:    retl
10452;
10453; LINUX-32-PIC-LABEL: cam07:
10454; LINUX-32-PIC:       # %bb.0: # %entry
10455; LINUX-32-PIC-NEXT:    calll .L129$pb
10456; LINUX-32-PIC-NEXT:  .L129$pb:
10457; LINUX-32-PIC-NEXT:    popl %eax
10458; LINUX-32-PIC-NEXT:  .Ltmp129:
10459; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp129-.L129$pb), %eax
10460; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10461; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax,%ecx,4), %eax
10462; LINUX-32-PIC-NEXT:    retl
10463;
10464; LINUX-64-PIC-LABEL: cam07:
10465; LINUX-64-PIC:       # %bb.0: # %entry
10466; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
10467; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10468; LINUX-64-PIC-NEXT:    retq
10469;
10470; DARWIN-32-STATIC-LABEL: cam07:
10471; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10472; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10473; DARWIN-32-STATIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
10474; DARWIN-32-STATIC-NEXT:    retl
10475;
10476; DARWIN-32-DYNAMIC-LABEL: cam07:
10477; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10478; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10479; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
10480; DARWIN-32-DYNAMIC-NEXT:    retl
10481;
10482; DARWIN-32-PIC-LABEL: cam07:
10483; DARWIN-32-PIC:       ## %bb.0: ## %entry
10484; DARWIN-32-PIC-NEXT:    calll L129$pb
10485; DARWIN-32-PIC-NEXT:  L129$pb:
10486; DARWIN-32-PIC-NEXT:    popl %eax
10487; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10488; DARWIN-32-PIC-NEXT:    leal (_ldst-L129$pb)+262144(%eax,%ecx,4), %eax
10489; DARWIN-32-PIC-NEXT:    retl
10490;
10491; DARWIN-64-STATIC-LABEL: cam07:
10492; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10493; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
10494; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10495; DARWIN-64-STATIC-NEXT:    retq
10496;
10497; DARWIN-64-DYNAMIC-LABEL: cam07:
10498; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10499; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
10500; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10501; DARWIN-64-DYNAMIC-NEXT:    retq
10502;
10503; DARWIN-64-PIC-LABEL: cam07:
10504; DARWIN-64-PIC:       ## %bb.0: ## %entry
10505; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
10506; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10507; DARWIN-64-PIC-NEXT:    retq
10508
10509entry:
10510	%0 = add i64 %i, 65536
10511	%1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
10512	%2 = bitcast i32* %1 to i8*
10513	ret i8* %2
10514}
10515
10516define dso_local i8* @cam08(i64 %i) nounwind {
10517; LINUX-64-STATIC-LABEL: cam08:
10518; LINUX-64-STATIC:       # %bb.0: # %entry
10519; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
10520; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10521; LINUX-64-STATIC-NEXT:    retq
10522;
10523; LINUX-32-STATIC-LABEL: cam08:
10524; LINUX-32-STATIC:       # %bb.0: # %entry
10525; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10526; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
10527; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10528; LINUX-32-STATIC-NEXT:    retl
10529;
10530; LINUX-32-PIC-LABEL: cam08:
10531; LINUX-32-PIC:       # %bb.0: # %entry
10532; LINUX-32-PIC-NEXT:    calll .L130$pb
10533; LINUX-32-PIC-NEXT:  .L130$pb:
10534; LINUX-32-PIC-NEXT:    popl %eax
10535; LINUX-32-PIC-NEXT:  .Ltmp130:
10536; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp130-.L130$pb), %eax
10537; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10538; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
10539; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10540; LINUX-32-PIC-NEXT:    retl
10541;
10542; LINUX-64-PIC-LABEL: cam08:
10543; LINUX-64-PIC:       # %bb.0: # %entry
10544; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
10545; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10546; LINUX-64-PIC-NEXT:    retq
10547;
10548; DARWIN-32-STATIC-LABEL: cam08:
10549; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10550; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10551; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
10552; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10553; DARWIN-32-STATIC-NEXT:    retl
10554;
10555; DARWIN-32-DYNAMIC-LABEL: cam08:
10556; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10557; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10558; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
10559; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10560; DARWIN-32-DYNAMIC-NEXT:    retl
10561;
10562; DARWIN-32-PIC-LABEL: cam08:
10563; DARWIN-32-PIC:       ## %bb.0: ## %entry
10564; DARWIN-32-PIC-NEXT:    calll L130$pb
10565; DARWIN-32-PIC-NEXT:  L130$pb:
10566; DARWIN-32-PIC-NEXT:    popl %eax
10567; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10568; DARWIN-32-PIC-NEXT:    movl _lptr-L130$pb(%eax), %eax
10569; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10570; DARWIN-32-PIC-NEXT:    retl
10571;
10572; DARWIN-64-STATIC-LABEL: cam08:
10573; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10574; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
10575; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10576; DARWIN-64-STATIC-NEXT:    retq
10577;
10578; DARWIN-64-DYNAMIC-LABEL: cam08:
10579; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10580; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
10581; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10582; DARWIN-64-DYNAMIC-NEXT:    retq
10583;
10584; DARWIN-64-PIC-LABEL: cam08:
10585; DARWIN-64-PIC:       ## %bb.0: ## %entry
10586; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
10587; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10588; DARWIN-64-PIC-NEXT:    retq
10589
10590entry:
10591	%0 = load i32*, i32** @lptr, align 8
10592	%1 = add i64 %i, 65536
10593	%2 = getelementptr i32, i32* %0, i64 %1
10594	%3 = bitcast i32* %2 to i8*
10595	ret i8* %3
10596}
10597
10598define dso_local void @lcallee() nounwind {
10599; LINUX-64-STATIC-LABEL: lcallee:
10600; LINUX-64-STATIC:       # %bb.0: # %entry
10601; LINUX-64-STATIC-NEXT:    pushq %rax
10602; LINUX-64-STATIC-NEXT:    callq x@PLT
10603; LINUX-64-STATIC-NEXT:    callq x@PLT
10604; LINUX-64-STATIC-NEXT:    callq x@PLT
10605; LINUX-64-STATIC-NEXT:    callq x@PLT
10606; LINUX-64-STATIC-NEXT:    callq x@PLT
10607; LINUX-64-STATIC-NEXT:    callq x@PLT
10608; LINUX-64-STATIC-NEXT:    callq x@PLT
10609; LINUX-64-STATIC-NEXT:    popq %rax
10610; LINUX-64-STATIC-NEXT:    retq
10611;
10612; LINUX-32-STATIC-LABEL: lcallee:
10613; LINUX-32-STATIC:       # %bb.0: # %entry
10614; LINUX-32-STATIC-NEXT:    subl $12, %esp
10615; LINUX-32-STATIC-NEXT:    calll x@PLT
10616; LINUX-32-STATIC-NEXT:    calll x@PLT
10617; LINUX-32-STATIC-NEXT:    calll x@PLT
10618; LINUX-32-STATIC-NEXT:    calll x@PLT
10619; LINUX-32-STATIC-NEXT:    calll x@PLT
10620; LINUX-32-STATIC-NEXT:    calll x@PLT
10621; LINUX-32-STATIC-NEXT:    calll x@PLT
10622; LINUX-32-STATIC-NEXT:    addl $12, %esp
10623; LINUX-32-STATIC-NEXT:    retl
10624;
10625; LINUX-32-PIC-LABEL: lcallee:
10626; LINUX-32-PIC:       # %bb.0: # %entry
10627; LINUX-32-PIC-NEXT:    pushl %ebx
10628; LINUX-32-PIC-NEXT:    subl $8, %esp
10629; LINUX-32-PIC-NEXT:    calll .L131$pb
10630; LINUX-32-PIC-NEXT:  .L131$pb:
10631; LINUX-32-PIC-NEXT:    popl %ebx
10632; LINUX-32-PIC-NEXT:  .Ltmp131:
10633; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp131-.L131$pb), %ebx
10634; LINUX-32-PIC-NEXT:    calll x@PLT
10635; LINUX-32-PIC-NEXT:    calll x@PLT
10636; LINUX-32-PIC-NEXT:    calll x@PLT
10637; LINUX-32-PIC-NEXT:    calll x@PLT
10638; LINUX-32-PIC-NEXT:    calll x@PLT
10639; LINUX-32-PIC-NEXT:    calll x@PLT
10640; LINUX-32-PIC-NEXT:    calll x@PLT
10641; LINUX-32-PIC-NEXT:    addl $8, %esp
10642; LINUX-32-PIC-NEXT:    popl %ebx
10643; LINUX-32-PIC-NEXT:    retl
10644;
10645; LINUX-64-PIC-LABEL: lcallee:
10646; LINUX-64-PIC:       # %bb.0: # %entry
10647; LINUX-64-PIC-NEXT:    pushq %rax
10648; LINUX-64-PIC-NEXT:    callq x@PLT
10649; LINUX-64-PIC-NEXT:    callq x@PLT
10650; LINUX-64-PIC-NEXT:    callq x@PLT
10651; LINUX-64-PIC-NEXT:    callq x@PLT
10652; LINUX-64-PIC-NEXT:    callq x@PLT
10653; LINUX-64-PIC-NEXT:    callq x@PLT
10654; LINUX-64-PIC-NEXT:    callq x@PLT
10655; LINUX-64-PIC-NEXT:    popq %rax
10656; LINUX-64-PIC-NEXT:    retq
10657;
10658; DARWIN-32-STATIC-LABEL: lcallee:
10659; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10660; DARWIN-32-STATIC-NEXT:    subl $12, %esp
10661; DARWIN-32-STATIC-NEXT:    calll _x
10662; DARWIN-32-STATIC-NEXT:    calll _x
10663; DARWIN-32-STATIC-NEXT:    calll _x
10664; DARWIN-32-STATIC-NEXT:    calll _x
10665; DARWIN-32-STATIC-NEXT:    calll _x
10666; DARWIN-32-STATIC-NEXT:    calll _x
10667; DARWIN-32-STATIC-NEXT:    calll _x
10668; DARWIN-32-STATIC-NEXT:    addl $12, %esp
10669; DARWIN-32-STATIC-NEXT:    retl
10670;
10671; DARWIN-32-DYNAMIC-LABEL: lcallee:
10672; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10673; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
10674; DARWIN-32-DYNAMIC-NEXT:    calll _x
10675; DARWIN-32-DYNAMIC-NEXT:    calll _x
10676; DARWIN-32-DYNAMIC-NEXT:    calll _x
10677; DARWIN-32-DYNAMIC-NEXT:    calll _x
10678; DARWIN-32-DYNAMIC-NEXT:    calll _x
10679; DARWIN-32-DYNAMIC-NEXT:    calll _x
10680; DARWIN-32-DYNAMIC-NEXT:    calll _x
10681; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
10682; DARWIN-32-DYNAMIC-NEXT:    retl
10683;
10684; DARWIN-32-PIC-LABEL: lcallee:
10685; DARWIN-32-PIC:       ## %bb.0: ## %entry
10686; DARWIN-32-PIC-NEXT:    subl $12, %esp
10687; DARWIN-32-PIC-NEXT:    calll _x
10688; DARWIN-32-PIC-NEXT:    calll _x
10689; DARWIN-32-PIC-NEXT:    calll _x
10690; DARWIN-32-PIC-NEXT:    calll _x
10691; DARWIN-32-PIC-NEXT:    calll _x
10692; DARWIN-32-PIC-NEXT:    calll _x
10693; DARWIN-32-PIC-NEXT:    calll _x
10694; DARWIN-32-PIC-NEXT:    addl $12, %esp
10695; DARWIN-32-PIC-NEXT:    retl
10696;
10697; DARWIN-64-STATIC-LABEL: lcallee:
10698; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10699; DARWIN-64-STATIC-NEXT:    pushq %rax
10700; DARWIN-64-STATIC-NEXT:    callq _x
10701; DARWIN-64-STATIC-NEXT:    callq _x
10702; DARWIN-64-STATIC-NEXT:    callq _x
10703; DARWIN-64-STATIC-NEXT:    callq _x
10704; DARWIN-64-STATIC-NEXT:    callq _x
10705; DARWIN-64-STATIC-NEXT:    callq _x
10706; DARWIN-64-STATIC-NEXT:    callq _x
10707; DARWIN-64-STATIC-NEXT:    popq %rax
10708; DARWIN-64-STATIC-NEXT:    retq
10709;
10710; DARWIN-64-DYNAMIC-LABEL: lcallee:
10711; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10712; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
10713; DARWIN-64-DYNAMIC-NEXT:    callq _x
10714; DARWIN-64-DYNAMIC-NEXT:    callq _x
10715; DARWIN-64-DYNAMIC-NEXT:    callq _x
10716; DARWIN-64-DYNAMIC-NEXT:    callq _x
10717; DARWIN-64-DYNAMIC-NEXT:    callq _x
10718; DARWIN-64-DYNAMIC-NEXT:    callq _x
10719; DARWIN-64-DYNAMIC-NEXT:    callq _x
10720; DARWIN-64-DYNAMIC-NEXT:    popq %rax
10721; DARWIN-64-DYNAMIC-NEXT:    retq
10722;
10723; DARWIN-64-PIC-LABEL: lcallee:
10724; DARWIN-64-PIC:       ## %bb.0: ## %entry
10725; DARWIN-64-PIC-NEXT:    pushq %rax
10726; DARWIN-64-PIC-NEXT:    callq _x
10727; DARWIN-64-PIC-NEXT:    callq _x
10728; DARWIN-64-PIC-NEXT:    callq _x
10729; DARWIN-64-PIC-NEXT:    callq _x
10730; DARWIN-64-PIC-NEXT:    callq _x
10731; DARWIN-64-PIC-NEXT:    callq _x
10732; DARWIN-64-PIC-NEXT:    callq _x
10733; DARWIN-64-PIC-NEXT:    popq %rax
10734; DARWIN-64-PIC-NEXT:    retq
10735
10736entry:
10737	call void @x() nounwind
10738	call void @x() nounwind
10739	call void @x() nounwind
10740	call void @x() nounwind
10741	call void @x() nounwind
10742	call void @x() nounwind
10743	call void @x() nounwind
10744	ret void
10745}
10746
10747declare void @x()
10748
10749define internal void @dcallee() nounwind {
10750; LINUX-64-STATIC-LABEL: dcallee:
10751; LINUX-64-STATIC:       # %bb.0: # %entry
10752; LINUX-64-STATIC-NEXT:    pushq %rax
10753; LINUX-64-STATIC-NEXT:    callq y@PLT
10754; LINUX-64-STATIC-NEXT:    callq y@PLT
10755; LINUX-64-STATIC-NEXT:    callq y@PLT
10756; LINUX-64-STATIC-NEXT:    callq y@PLT
10757; LINUX-64-STATIC-NEXT:    callq y@PLT
10758; LINUX-64-STATIC-NEXT:    callq y@PLT
10759; LINUX-64-STATIC-NEXT:    callq y@PLT
10760; LINUX-64-STATIC-NEXT:    popq %rax
10761; LINUX-64-STATIC-NEXT:    retq
10762;
10763; LINUX-32-STATIC-LABEL: dcallee:
10764; LINUX-32-STATIC:       # %bb.0: # %entry
10765; LINUX-32-STATIC-NEXT:    subl $12, %esp
10766; LINUX-32-STATIC-NEXT:    calll y@PLT
10767; LINUX-32-STATIC-NEXT:    calll y@PLT
10768; LINUX-32-STATIC-NEXT:    calll y@PLT
10769; LINUX-32-STATIC-NEXT:    calll y@PLT
10770; LINUX-32-STATIC-NEXT:    calll y@PLT
10771; LINUX-32-STATIC-NEXT:    calll y@PLT
10772; LINUX-32-STATIC-NEXT:    calll y@PLT
10773; LINUX-32-STATIC-NEXT:    addl $12, %esp
10774; LINUX-32-STATIC-NEXT:    retl
10775;
10776; LINUX-32-PIC-LABEL: dcallee:
10777; LINUX-32-PIC:       # %bb.0: # %entry
10778; LINUX-32-PIC-NEXT:    pushl %ebx
10779; LINUX-32-PIC-NEXT:    subl $8, %esp
10780; LINUX-32-PIC-NEXT:    calll .L132$pb
10781; LINUX-32-PIC-NEXT:  .L132$pb:
10782; LINUX-32-PIC-NEXT:    popl %ebx
10783; LINUX-32-PIC-NEXT:  .Ltmp132:
10784; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp132-.L132$pb), %ebx
10785; LINUX-32-PIC-NEXT:    calll y@PLT
10786; LINUX-32-PIC-NEXT:    calll y@PLT
10787; LINUX-32-PIC-NEXT:    calll y@PLT
10788; LINUX-32-PIC-NEXT:    calll y@PLT
10789; LINUX-32-PIC-NEXT:    calll y@PLT
10790; LINUX-32-PIC-NEXT:    calll y@PLT
10791; LINUX-32-PIC-NEXT:    calll y@PLT
10792; LINUX-32-PIC-NEXT:    addl $8, %esp
10793; LINUX-32-PIC-NEXT:    popl %ebx
10794; LINUX-32-PIC-NEXT:    retl
10795;
10796; LINUX-64-PIC-LABEL: dcallee:
10797; LINUX-64-PIC:       # %bb.0: # %entry
10798; LINUX-64-PIC-NEXT:    pushq %rax
10799; LINUX-64-PIC-NEXT:    callq y@PLT
10800; LINUX-64-PIC-NEXT:    callq y@PLT
10801; LINUX-64-PIC-NEXT:    callq y@PLT
10802; LINUX-64-PIC-NEXT:    callq y@PLT
10803; LINUX-64-PIC-NEXT:    callq y@PLT
10804; LINUX-64-PIC-NEXT:    callq y@PLT
10805; LINUX-64-PIC-NEXT:    callq y@PLT
10806; LINUX-64-PIC-NEXT:    popq %rax
10807; LINUX-64-PIC-NEXT:    retq
10808;
10809; DARWIN-32-STATIC-LABEL: dcallee:
10810; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10811; DARWIN-32-STATIC-NEXT:    subl $12, %esp
10812; DARWIN-32-STATIC-NEXT:    calll _y
10813; DARWIN-32-STATIC-NEXT:    calll _y
10814; DARWIN-32-STATIC-NEXT:    calll _y
10815; DARWIN-32-STATIC-NEXT:    calll _y
10816; DARWIN-32-STATIC-NEXT:    calll _y
10817; DARWIN-32-STATIC-NEXT:    calll _y
10818; DARWIN-32-STATIC-NEXT:    calll _y
10819; DARWIN-32-STATIC-NEXT:    addl $12, %esp
10820; DARWIN-32-STATIC-NEXT:    retl
10821;
10822; DARWIN-32-DYNAMIC-LABEL: dcallee:
10823; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10824; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
10825; DARWIN-32-DYNAMIC-NEXT:    calll _y
10826; DARWIN-32-DYNAMIC-NEXT:    calll _y
10827; DARWIN-32-DYNAMIC-NEXT:    calll _y
10828; DARWIN-32-DYNAMIC-NEXT:    calll _y
10829; DARWIN-32-DYNAMIC-NEXT:    calll _y
10830; DARWIN-32-DYNAMIC-NEXT:    calll _y
10831; DARWIN-32-DYNAMIC-NEXT:    calll _y
10832; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
10833; DARWIN-32-DYNAMIC-NEXT:    retl
10834;
10835; DARWIN-32-PIC-LABEL: dcallee:
10836; DARWIN-32-PIC:       ## %bb.0: ## %entry
10837; DARWIN-32-PIC-NEXT:    subl $12, %esp
10838; DARWIN-32-PIC-NEXT:    calll _y
10839; DARWIN-32-PIC-NEXT:    calll _y
10840; DARWIN-32-PIC-NEXT:    calll _y
10841; DARWIN-32-PIC-NEXT:    calll _y
10842; DARWIN-32-PIC-NEXT:    calll _y
10843; DARWIN-32-PIC-NEXT:    calll _y
10844; DARWIN-32-PIC-NEXT:    calll _y
10845; DARWIN-32-PIC-NEXT:    addl $12, %esp
10846; DARWIN-32-PIC-NEXT:    retl
10847;
10848; DARWIN-64-STATIC-LABEL: dcallee:
10849; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10850; DARWIN-64-STATIC-NEXT:    pushq %rax
10851; DARWIN-64-STATIC-NEXT:    callq _y
10852; DARWIN-64-STATIC-NEXT:    callq _y
10853; DARWIN-64-STATIC-NEXT:    callq _y
10854; DARWIN-64-STATIC-NEXT:    callq _y
10855; DARWIN-64-STATIC-NEXT:    callq _y
10856; DARWIN-64-STATIC-NEXT:    callq _y
10857; DARWIN-64-STATIC-NEXT:    callq _y
10858; DARWIN-64-STATIC-NEXT:    popq %rax
10859; DARWIN-64-STATIC-NEXT:    retq
10860;
10861; DARWIN-64-DYNAMIC-LABEL: dcallee:
10862; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10863; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
10864; DARWIN-64-DYNAMIC-NEXT:    callq _y
10865; DARWIN-64-DYNAMIC-NEXT:    callq _y
10866; DARWIN-64-DYNAMIC-NEXT:    callq _y
10867; DARWIN-64-DYNAMIC-NEXT:    callq _y
10868; DARWIN-64-DYNAMIC-NEXT:    callq _y
10869; DARWIN-64-DYNAMIC-NEXT:    callq _y
10870; DARWIN-64-DYNAMIC-NEXT:    callq _y
10871; DARWIN-64-DYNAMIC-NEXT:    popq %rax
10872; DARWIN-64-DYNAMIC-NEXT:    retq
10873;
10874; DARWIN-64-PIC-LABEL: dcallee:
10875; DARWIN-64-PIC:       ## %bb.0: ## %entry
10876; DARWIN-64-PIC-NEXT:    pushq %rax
10877; DARWIN-64-PIC-NEXT:    callq _y
10878; DARWIN-64-PIC-NEXT:    callq _y
10879; DARWIN-64-PIC-NEXT:    callq _y
10880; DARWIN-64-PIC-NEXT:    callq _y
10881; DARWIN-64-PIC-NEXT:    callq _y
10882; DARWIN-64-PIC-NEXT:    callq _y
10883; DARWIN-64-PIC-NEXT:    callq _y
10884; DARWIN-64-PIC-NEXT:    popq %rax
10885; DARWIN-64-PIC-NEXT:    retq
10886
10887entry:
10888	call void @y() nounwind
10889	call void @y() nounwind
10890	call void @y() nounwind
10891	call void @y() nounwind
10892	call void @y() nounwind
10893	call void @y() nounwind
10894	call void @y() nounwind
10895	ret void
10896}
10897
10898declare void @y()
10899
10900define dso_local void ()* @address() nounwind {
10901; LINUX-64-STATIC-LABEL: address:
10902; LINUX-64-STATIC:       # %bb.0: # %entry
10903; LINUX-64-STATIC-NEXT:    movq callee@GOTPCREL(%rip), %rax
10904; LINUX-64-STATIC-NEXT:    retq
10905;
10906; LINUX-32-STATIC-LABEL: address:
10907; LINUX-32-STATIC:       # %bb.0: # %entry
10908; LINUX-32-STATIC-NEXT:    movl $callee, %eax
10909; LINUX-32-STATIC-NEXT:    retl
10910;
10911; LINUX-32-PIC-LABEL: address:
10912; LINUX-32-PIC:       # %bb.0: # %entry
10913; LINUX-32-PIC-NEXT:    calll .L133$pb
10914; LINUX-32-PIC-NEXT:  .L133$pb:
10915; LINUX-32-PIC-NEXT:    popl %eax
10916; LINUX-32-PIC-NEXT:  .Ltmp133:
10917; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp133-.L133$pb), %eax
10918; LINUX-32-PIC-NEXT:    movl callee@GOT(%eax), %eax
10919; LINUX-32-PIC-NEXT:    retl
10920;
10921; LINUX-64-PIC-LABEL: address:
10922; LINUX-64-PIC:       # %bb.0: # %entry
10923; LINUX-64-PIC-NEXT:    movq callee@GOTPCREL(%rip), %rax
10924; LINUX-64-PIC-NEXT:    retq
10925;
10926; DARWIN-32-STATIC-LABEL: address:
10927; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10928; DARWIN-32-STATIC-NEXT:    movl $_callee, %eax
10929; DARWIN-32-STATIC-NEXT:    retl
10930;
10931; DARWIN-32-DYNAMIC-LABEL: address:
10932; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10933; DARWIN-32-DYNAMIC-NEXT:    movl L_callee$non_lazy_ptr, %eax
10934; DARWIN-32-DYNAMIC-NEXT:    retl
10935;
10936; DARWIN-32-PIC-LABEL: address:
10937; DARWIN-32-PIC:       ## %bb.0: ## %entry
10938; DARWIN-32-PIC-NEXT:    calll L133$pb
10939; DARWIN-32-PIC-NEXT:  L133$pb:
10940; DARWIN-32-PIC-NEXT:    popl %eax
10941; DARWIN-32-PIC-NEXT:    movl L_callee$non_lazy_ptr-L133$pb(%eax), %eax
10942; DARWIN-32-PIC-NEXT:    retl
10943;
10944; DARWIN-64-STATIC-LABEL: address:
10945; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10946; DARWIN-64-STATIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10947; DARWIN-64-STATIC-NEXT:    retq
10948;
10949; DARWIN-64-DYNAMIC-LABEL: address:
10950; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10951; DARWIN-64-DYNAMIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10952; DARWIN-64-DYNAMIC-NEXT:    retq
10953;
10954; DARWIN-64-PIC-LABEL: address:
10955; DARWIN-64-PIC:       ## %bb.0: ## %entry
10956; DARWIN-64-PIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10957; DARWIN-64-PIC-NEXT:    retq
10958
10959entry:
10960	ret void ()* @callee
10961}
10962
10963declare void @callee()
10964
10965define dso_local void ()* @laddress() nounwind {
10966; LINUX-64-STATIC-LABEL: laddress:
10967; LINUX-64-STATIC:       # %bb.0: # %entry
10968; LINUX-64-STATIC-NEXT:    movl $lcallee, %eax
10969; LINUX-64-STATIC-NEXT:    retq
10970;
10971; LINUX-32-STATIC-LABEL: laddress:
10972; LINUX-32-STATIC:       # %bb.0: # %entry
10973; LINUX-32-STATIC-NEXT:    movl $lcallee, %eax
10974; LINUX-32-STATIC-NEXT:    retl
10975;
10976; LINUX-32-PIC-LABEL: laddress:
10977; LINUX-32-PIC:       # %bb.0: # %entry
10978; LINUX-32-PIC-NEXT:    calll .L134$pb
10979; LINUX-32-PIC-NEXT:  .L134$pb:
10980; LINUX-32-PIC-NEXT:    popl %eax
10981; LINUX-32-PIC-NEXT:  .Ltmp134:
10982; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp134-.L134$pb), %eax
10983; LINUX-32-PIC-NEXT:    leal .Llcallee$local@GOTOFF(%eax), %eax
10984; LINUX-32-PIC-NEXT:    retl
10985;
10986; LINUX-64-PIC-LABEL: laddress:
10987; LINUX-64-PIC:       # %bb.0: # %entry
10988; LINUX-64-PIC-NEXT:    leaq .Llcallee$local(%rip), %rax
10989; LINUX-64-PIC-NEXT:    retq
10990;
10991; DARWIN-32-STATIC-LABEL: laddress:
10992; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10993; DARWIN-32-STATIC-NEXT:    movl $_lcallee, %eax
10994; DARWIN-32-STATIC-NEXT:    retl
10995;
10996; DARWIN-32-DYNAMIC-LABEL: laddress:
10997; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10998; DARWIN-32-DYNAMIC-NEXT:    movl $_lcallee, %eax
10999; DARWIN-32-DYNAMIC-NEXT:    retl
11000;
11001; DARWIN-32-PIC-LABEL: laddress:
11002; DARWIN-32-PIC:       ## %bb.0: ## %entry
11003; DARWIN-32-PIC-NEXT:    calll L134$pb
11004; DARWIN-32-PIC-NEXT:  L134$pb:
11005; DARWIN-32-PIC-NEXT:    popl %eax
11006; DARWIN-32-PIC-NEXT:    leal _lcallee-L134$pb(%eax), %eax
11007; DARWIN-32-PIC-NEXT:    retl
11008;
11009; DARWIN-64-STATIC-LABEL: laddress:
11010; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11011; DARWIN-64-STATIC-NEXT:    leaq _lcallee(%rip), %rax
11012; DARWIN-64-STATIC-NEXT:    retq
11013;
11014; DARWIN-64-DYNAMIC-LABEL: laddress:
11015; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11016; DARWIN-64-DYNAMIC-NEXT:    leaq _lcallee(%rip), %rax
11017; DARWIN-64-DYNAMIC-NEXT:    retq
11018;
11019; DARWIN-64-PIC-LABEL: laddress:
11020; DARWIN-64-PIC:       ## %bb.0: ## %entry
11021; DARWIN-64-PIC-NEXT:    leaq _lcallee(%rip), %rax
11022; DARWIN-64-PIC-NEXT:    retq
11023
11024entry:
11025	ret void ()* @lcallee
11026}
11027
11028define dso_local void ()* @daddress() nounwind {
11029; LINUX-64-STATIC-LABEL: daddress:
11030; LINUX-64-STATIC:       # %bb.0: # %entry
11031; LINUX-64-STATIC-NEXT:    movl $dcallee, %eax
11032; LINUX-64-STATIC-NEXT:    retq
11033;
11034; LINUX-32-STATIC-LABEL: daddress:
11035; LINUX-32-STATIC:       # %bb.0: # %entry
11036; LINUX-32-STATIC-NEXT:    movl $dcallee, %eax
11037; LINUX-32-STATIC-NEXT:    retl
11038;
11039; LINUX-32-PIC-LABEL: daddress:
11040; LINUX-32-PIC:       # %bb.0: # %entry
11041; LINUX-32-PIC-NEXT:    calll .L135$pb
11042; LINUX-32-PIC-NEXT:  .L135$pb:
11043; LINUX-32-PIC-NEXT:    popl %eax
11044; LINUX-32-PIC-NEXT:  .Ltmp135:
11045; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp135-.L135$pb), %eax
11046; LINUX-32-PIC-NEXT:    leal dcallee@GOTOFF(%eax), %eax
11047; LINUX-32-PIC-NEXT:    retl
11048;
11049; LINUX-64-PIC-LABEL: daddress:
11050; LINUX-64-PIC:       # %bb.0: # %entry
11051; LINUX-64-PIC-NEXT:    leaq dcallee(%rip), %rax
11052; LINUX-64-PIC-NEXT:    retq
11053;
11054; DARWIN-32-STATIC-LABEL: daddress:
11055; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11056; DARWIN-32-STATIC-NEXT:    movl $_dcallee, %eax
11057; DARWIN-32-STATIC-NEXT:    retl
11058;
11059; DARWIN-32-DYNAMIC-LABEL: daddress:
11060; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11061; DARWIN-32-DYNAMIC-NEXT:    movl $_dcallee, %eax
11062; DARWIN-32-DYNAMIC-NEXT:    retl
11063;
11064; DARWIN-32-PIC-LABEL: daddress:
11065; DARWIN-32-PIC:       ## %bb.0: ## %entry
11066; DARWIN-32-PIC-NEXT:    calll L135$pb
11067; DARWIN-32-PIC-NEXT:  L135$pb:
11068; DARWIN-32-PIC-NEXT:    popl %eax
11069; DARWIN-32-PIC-NEXT:    leal _dcallee-L135$pb(%eax), %eax
11070; DARWIN-32-PIC-NEXT:    retl
11071;
11072; DARWIN-64-STATIC-LABEL: daddress:
11073; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11074; DARWIN-64-STATIC-NEXT:    leaq _dcallee(%rip), %rax
11075; DARWIN-64-STATIC-NEXT:    retq
11076;
11077; DARWIN-64-DYNAMIC-LABEL: daddress:
11078; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11079; DARWIN-64-DYNAMIC-NEXT:    leaq _dcallee(%rip), %rax
11080; DARWIN-64-DYNAMIC-NEXT:    retq
11081;
11082; DARWIN-64-PIC-LABEL: daddress:
11083; DARWIN-64-PIC:       ## %bb.0: ## %entry
11084; DARWIN-64-PIC-NEXT:    leaq _dcallee(%rip), %rax
11085; DARWIN-64-PIC-NEXT:    retq
11086
11087entry:
11088	ret void ()* @dcallee
11089}
11090
11091define dso_local void @caller() nounwind {
11092; LINUX-64-STATIC-LABEL: caller:
11093; LINUX-64-STATIC:       # %bb.0: # %entry
11094; LINUX-64-STATIC-NEXT:    pushq %rax
11095; LINUX-64-STATIC-NEXT:    callq callee@PLT
11096; LINUX-64-STATIC-NEXT:    callq callee@PLT
11097; LINUX-64-STATIC-NEXT:    popq %rax
11098; LINUX-64-STATIC-NEXT:    retq
11099;
11100; LINUX-32-STATIC-LABEL: caller:
11101; LINUX-32-STATIC:       # %bb.0: # %entry
11102; LINUX-32-STATIC-NEXT:    subl $12, %esp
11103; LINUX-32-STATIC-NEXT:    calll callee@PLT
11104; LINUX-32-STATIC-NEXT:    calll callee@PLT
11105; LINUX-32-STATIC-NEXT:    addl $12, %esp
11106; LINUX-32-STATIC-NEXT:    retl
11107;
11108; LINUX-32-PIC-LABEL: caller:
11109; LINUX-32-PIC:       # %bb.0: # %entry
11110; LINUX-32-PIC-NEXT:    pushl %ebx
11111; LINUX-32-PIC-NEXT:    subl $8, %esp
11112; LINUX-32-PIC-NEXT:    calll .L136$pb
11113; LINUX-32-PIC-NEXT:  .L136$pb:
11114; LINUX-32-PIC-NEXT:    popl %ebx
11115; LINUX-32-PIC-NEXT:  .Ltmp136:
11116; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp136-.L136$pb), %ebx
11117; LINUX-32-PIC-NEXT:    calll callee@PLT
11118; LINUX-32-PIC-NEXT:    calll callee@PLT
11119; LINUX-32-PIC-NEXT:    addl $8, %esp
11120; LINUX-32-PIC-NEXT:    popl %ebx
11121; LINUX-32-PIC-NEXT:    retl
11122;
11123; LINUX-64-PIC-LABEL: caller:
11124; LINUX-64-PIC:       # %bb.0: # %entry
11125; LINUX-64-PIC-NEXT:    pushq %rax
11126; LINUX-64-PIC-NEXT:    callq callee@PLT
11127; LINUX-64-PIC-NEXT:    callq callee@PLT
11128; LINUX-64-PIC-NEXT:    popq %rax
11129; LINUX-64-PIC-NEXT:    retq
11130;
11131; DARWIN-32-STATIC-LABEL: caller:
11132; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11133; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11134; DARWIN-32-STATIC-NEXT:    calll _callee
11135; DARWIN-32-STATIC-NEXT:    calll _callee
11136; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11137; DARWIN-32-STATIC-NEXT:    retl
11138;
11139; DARWIN-32-DYNAMIC-LABEL: caller:
11140; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11141; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11142; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11143; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11144; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11145; DARWIN-32-DYNAMIC-NEXT:    retl
11146;
11147; DARWIN-32-PIC-LABEL: caller:
11148; DARWIN-32-PIC:       ## %bb.0: ## %entry
11149; DARWIN-32-PIC-NEXT:    subl $12, %esp
11150; DARWIN-32-PIC-NEXT:    calll _callee
11151; DARWIN-32-PIC-NEXT:    calll _callee
11152; DARWIN-32-PIC-NEXT:    addl $12, %esp
11153; DARWIN-32-PIC-NEXT:    retl
11154;
11155; DARWIN-64-STATIC-LABEL: caller:
11156; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11157; DARWIN-64-STATIC-NEXT:    pushq %rax
11158; DARWIN-64-STATIC-NEXT:    callq _callee
11159; DARWIN-64-STATIC-NEXT:    callq _callee
11160; DARWIN-64-STATIC-NEXT:    popq %rax
11161; DARWIN-64-STATIC-NEXT:    retq
11162;
11163; DARWIN-64-DYNAMIC-LABEL: caller:
11164; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11165; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11166; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11167; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11168; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11169; DARWIN-64-DYNAMIC-NEXT:    retq
11170;
11171; DARWIN-64-PIC-LABEL: caller:
11172; DARWIN-64-PIC:       ## %bb.0: ## %entry
11173; DARWIN-64-PIC-NEXT:    pushq %rax
11174; DARWIN-64-PIC-NEXT:    callq _callee
11175; DARWIN-64-PIC-NEXT:    callq _callee
11176; DARWIN-64-PIC-NEXT:    popq %rax
11177; DARWIN-64-PIC-NEXT:    retq
11178
11179entry:
11180	call void @callee() nounwind
11181	call void @callee() nounwind
11182	ret void
11183}
11184
11185define dso_local void @dcaller() nounwind {
11186; LINUX-64-STATIC-LABEL: dcaller:
11187; LINUX-64-STATIC:       # %bb.0: # %entry
11188; LINUX-64-STATIC-NEXT:    pushq %rax
11189; LINUX-64-STATIC-NEXT:    callq dcallee
11190; LINUX-64-STATIC-NEXT:    callq dcallee
11191; LINUX-64-STATIC-NEXT:    popq %rax
11192; LINUX-64-STATIC-NEXT:    retq
11193;
11194; LINUX-32-STATIC-LABEL: dcaller:
11195; LINUX-32-STATIC:       # %bb.0: # %entry
11196; LINUX-32-STATIC-NEXT:    subl $12, %esp
11197; LINUX-32-STATIC-NEXT:    calll dcallee
11198; LINUX-32-STATIC-NEXT:    calll dcallee
11199; LINUX-32-STATIC-NEXT:    addl $12, %esp
11200; LINUX-32-STATIC-NEXT:    retl
11201;
11202; LINUX-32-PIC-LABEL: dcaller:
11203; LINUX-32-PIC:       # %bb.0: # %entry
11204; LINUX-32-PIC-NEXT:    pushl %ebx
11205; LINUX-32-PIC-NEXT:    subl $8, %esp
11206; LINUX-32-PIC-NEXT:    calll .L137$pb
11207; LINUX-32-PIC-NEXT:  .L137$pb:
11208; LINUX-32-PIC-NEXT:    popl %ebx
11209; LINUX-32-PIC-NEXT:  .Ltmp137:
11210; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp137-.L137$pb), %ebx
11211; LINUX-32-PIC-NEXT:    calll dcallee
11212; LINUX-32-PIC-NEXT:    calll dcallee
11213; LINUX-32-PIC-NEXT:    addl $8, %esp
11214; LINUX-32-PIC-NEXT:    popl %ebx
11215; LINUX-32-PIC-NEXT:    retl
11216;
11217; LINUX-64-PIC-LABEL: dcaller:
11218; LINUX-64-PIC:       # %bb.0: # %entry
11219; LINUX-64-PIC-NEXT:    pushq %rax
11220; LINUX-64-PIC-NEXT:    callq dcallee
11221; LINUX-64-PIC-NEXT:    callq dcallee
11222; LINUX-64-PIC-NEXT:    popq %rax
11223; LINUX-64-PIC-NEXT:    retq
11224;
11225; DARWIN-32-STATIC-LABEL: dcaller:
11226; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11227; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11228; DARWIN-32-STATIC-NEXT:    calll _dcallee
11229; DARWIN-32-STATIC-NEXT:    calll _dcallee
11230; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11231; DARWIN-32-STATIC-NEXT:    retl
11232;
11233; DARWIN-32-DYNAMIC-LABEL: dcaller:
11234; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11235; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11236; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11237; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11238; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11239; DARWIN-32-DYNAMIC-NEXT:    retl
11240;
11241; DARWIN-32-PIC-LABEL: dcaller:
11242; DARWIN-32-PIC:       ## %bb.0: ## %entry
11243; DARWIN-32-PIC-NEXT:    subl $12, %esp
11244; DARWIN-32-PIC-NEXT:    calll _dcallee
11245; DARWIN-32-PIC-NEXT:    calll _dcallee
11246; DARWIN-32-PIC-NEXT:    addl $12, %esp
11247; DARWIN-32-PIC-NEXT:    retl
11248;
11249; DARWIN-64-STATIC-LABEL: dcaller:
11250; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11251; DARWIN-64-STATIC-NEXT:    pushq %rax
11252; DARWIN-64-STATIC-NEXT:    callq _dcallee
11253; DARWIN-64-STATIC-NEXT:    callq _dcallee
11254; DARWIN-64-STATIC-NEXT:    popq %rax
11255; DARWIN-64-STATIC-NEXT:    retq
11256;
11257; DARWIN-64-DYNAMIC-LABEL: dcaller:
11258; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11259; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11260; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11261; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11262; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11263; DARWIN-64-DYNAMIC-NEXT:    retq
11264;
11265; DARWIN-64-PIC-LABEL: dcaller:
11266; DARWIN-64-PIC:       ## %bb.0: ## %entry
11267; DARWIN-64-PIC-NEXT:    pushq %rax
11268; DARWIN-64-PIC-NEXT:    callq _dcallee
11269; DARWIN-64-PIC-NEXT:    callq _dcallee
11270; DARWIN-64-PIC-NEXT:    popq %rax
11271; DARWIN-64-PIC-NEXT:    retq
11272
11273entry:
11274	call void @dcallee() nounwind
11275	call void @dcallee() nounwind
11276	ret void
11277}
11278
11279define dso_local void @lcaller() nounwind {
11280; LINUX-64-STATIC-LABEL: lcaller:
11281; LINUX-64-STATIC:       # %bb.0: # %entry
11282; LINUX-64-STATIC-NEXT:    pushq %rax
11283; LINUX-64-STATIC-NEXT:    callq lcallee
11284; LINUX-64-STATIC-NEXT:    callq lcallee
11285; LINUX-64-STATIC-NEXT:    popq %rax
11286; LINUX-64-STATIC-NEXT:    retq
11287;
11288; LINUX-32-STATIC-LABEL: lcaller:
11289; LINUX-32-STATIC:       # %bb.0: # %entry
11290; LINUX-32-STATIC-NEXT:    subl $12, %esp
11291; LINUX-32-STATIC-NEXT:    calll lcallee
11292; LINUX-32-STATIC-NEXT:    calll lcallee
11293; LINUX-32-STATIC-NEXT:    addl $12, %esp
11294; LINUX-32-STATIC-NEXT:    retl
11295;
11296; LINUX-32-PIC-LABEL: lcaller:
11297; LINUX-32-PIC:       # %bb.0: # %entry
11298; LINUX-32-PIC-NEXT:    pushl %ebx
11299; LINUX-32-PIC-NEXT:    subl $8, %esp
11300; LINUX-32-PIC-NEXT:    calll .L138$pb
11301; LINUX-32-PIC-NEXT:  .L138$pb:
11302; LINUX-32-PIC-NEXT:    popl %ebx
11303; LINUX-32-PIC-NEXT:  .Ltmp138:
11304; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp138-.L138$pb), %ebx
11305; LINUX-32-PIC-NEXT:    calll .Llcallee$local
11306; LINUX-32-PIC-NEXT:    calll .Llcallee$local
11307; LINUX-32-PIC-NEXT:    addl $8, %esp
11308; LINUX-32-PIC-NEXT:    popl %ebx
11309; LINUX-32-PIC-NEXT:    retl
11310;
11311; LINUX-64-PIC-LABEL: lcaller:
11312; LINUX-64-PIC:       # %bb.0: # %entry
11313; LINUX-64-PIC-NEXT:    pushq %rax
11314; LINUX-64-PIC-NEXT:    callq .Llcallee$local
11315; LINUX-64-PIC-NEXT:    callq .Llcallee$local
11316; LINUX-64-PIC-NEXT:    popq %rax
11317; LINUX-64-PIC-NEXT:    retq
11318;
11319; DARWIN-32-STATIC-LABEL: lcaller:
11320; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11321; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11322; DARWIN-32-STATIC-NEXT:    calll _lcallee
11323; DARWIN-32-STATIC-NEXT:    calll _lcallee
11324; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11325; DARWIN-32-STATIC-NEXT:    retl
11326;
11327; DARWIN-32-DYNAMIC-LABEL: lcaller:
11328; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11329; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11330; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11331; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11332; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11333; DARWIN-32-DYNAMIC-NEXT:    retl
11334;
11335; DARWIN-32-PIC-LABEL: lcaller:
11336; DARWIN-32-PIC:       ## %bb.0: ## %entry
11337; DARWIN-32-PIC-NEXT:    subl $12, %esp
11338; DARWIN-32-PIC-NEXT:    calll _lcallee
11339; DARWIN-32-PIC-NEXT:    calll _lcallee
11340; DARWIN-32-PIC-NEXT:    addl $12, %esp
11341; DARWIN-32-PIC-NEXT:    retl
11342;
11343; DARWIN-64-STATIC-LABEL: lcaller:
11344; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11345; DARWIN-64-STATIC-NEXT:    pushq %rax
11346; DARWIN-64-STATIC-NEXT:    callq _lcallee
11347; DARWIN-64-STATIC-NEXT:    callq _lcallee
11348; DARWIN-64-STATIC-NEXT:    popq %rax
11349; DARWIN-64-STATIC-NEXT:    retq
11350;
11351; DARWIN-64-DYNAMIC-LABEL: lcaller:
11352; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11353; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11354; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11355; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11356; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11357; DARWIN-64-DYNAMIC-NEXT:    retq
11358;
11359; DARWIN-64-PIC-LABEL: lcaller:
11360; DARWIN-64-PIC:       ## %bb.0: ## %entry
11361; DARWIN-64-PIC-NEXT:    pushq %rax
11362; DARWIN-64-PIC-NEXT:    callq _lcallee
11363; DARWIN-64-PIC-NEXT:    callq _lcallee
11364; DARWIN-64-PIC-NEXT:    popq %rax
11365; DARWIN-64-PIC-NEXT:    retq
11366
11367entry:
11368	call void @lcallee() nounwind
11369	call void @lcallee() nounwind
11370	ret void
11371}
11372
11373define dso_local void @tailcaller() nounwind {
11374; LINUX-64-STATIC-LABEL: tailcaller:
11375; LINUX-64-STATIC:       # %bb.0: # %entry
11376; LINUX-64-STATIC-NEXT:    pushq %rax
11377; LINUX-64-STATIC-NEXT:    callq callee@PLT
11378; LINUX-64-STATIC-NEXT:    popq %rax
11379; LINUX-64-STATIC-NEXT:    retq
11380;
11381; LINUX-32-STATIC-LABEL: tailcaller:
11382; LINUX-32-STATIC:       # %bb.0: # %entry
11383; LINUX-32-STATIC-NEXT:    subl $12, %esp
11384; LINUX-32-STATIC-NEXT:    calll callee@PLT
11385; LINUX-32-STATIC-NEXT:    addl $12, %esp
11386; LINUX-32-STATIC-NEXT:    retl
11387;
11388; LINUX-32-PIC-LABEL: tailcaller:
11389; LINUX-32-PIC:       # %bb.0: # %entry
11390; LINUX-32-PIC-NEXT:    pushl %ebx
11391; LINUX-32-PIC-NEXT:    subl $8, %esp
11392; LINUX-32-PIC-NEXT:    calll .L139$pb
11393; LINUX-32-PIC-NEXT:  .L139$pb:
11394; LINUX-32-PIC-NEXT:    popl %ebx
11395; LINUX-32-PIC-NEXT:  .Ltmp139:
11396; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp139-.L139$pb), %ebx
11397; LINUX-32-PIC-NEXT:    calll callee@PLT
11398; LINUX-32-PIC-NEXT:    addl $8, %esp
11399; LINUX-32-PIC-NEXT:    popl %ebx
11400; LINUX-32-PIC-NEXT:    retl
11401;
11402; LINUX-64-PIC-LABEL: tailcaller:
11403; LINUX-64-PIC:       # %bb.0: # %entry
11404; LINUX-64-PIC-NEXT:    pushq %rax
11405; LINUX-64-PIC-NEXT:    callq callee@PLT
11406; LINUX-64-PIC-NEXT:    popq %rax
11407; LINUX-64-PIC-NEXT:    retq
11408;
11409; DARWIN-32-STATIC-LABEL: tailcaller:
11410; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11411; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11412; DARWIN-32-STATIC-NEXT:    calll _callee
11413; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11414; DARWIN-32-STATIC-NEXT:    retl
11415;
11416; DARWIN-32-DYNAMIC-LABEL: tailcaller:
11417; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11418; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11419; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11420; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11421; DARWIN-32-DYNAMIC-NEXT:    retl
11422;
11423; DARWIN-32-PIC-LABEL: tailcaller:
11424; DARWIN-32-PIC:       ## %bb.0: ## %entry
11425; DARWIN-32-PIC-NEXT:    subl $12, %esp
11426; DARWIN-32-PIC-NEXT:    calll _callee
11427; DARWIN-32-PIC-NEXT:    addl $12, %esp
11428; DARWIN-32-PIC-NEXT:    retl
11429;
11430; DARWIN-64-STATIC-LABEL: tailcaller:
11431; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11432; DARWIN-64-STATIC-NEXT:    pushq %rax
11433; DARWIN-64-STATIC-NEXT:    callq _callee
11434; DARWIN-64-STATIC-NEXT:    popq %rax
11435; DARWIN-64-STATIC-NEXT:    retq
11436;
11437; DARWIN-64-DYNAMIC-LABEL: tailcaller:
11438; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11439; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11440; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11441; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11442; DARWIN-64-DYNAMIC-NEXT:    retq
11443;
11444; DARWIN-64-PIC-LABEL: tailcaller:
11445; DARWIN-64-PIC:       ## %bb.0: ## %entry
11446; DARWIN-64-PIC-NEXT:    pushq %rax
11447; DARWIN-64-PIC-NEXT:    callq _callee
11448; DARWIN-64-PIC-NEXT:    popq %rax
11449; DARWIN-64-PIC-NEXT:    retq
11450
11451entry:
11452	call void @callee() nounwind
11453	ret void
11454}
11455
11456define dso_local void @dtailcaller() nounwind {
11457; LINUX-64-STATIC-LABEL: dtailcaller:
11458; LINUX-64-STATIC:       # %bb.0: # %entry
11459; LINUX-64-STATIC-NEXT:    pushq %rax
11460; LINUX-64-STATIC-NEXT:    callq dcallee
11461; LINUX-64-STATIC-NEXT:    popq %rax
11462; LINUX-64-STATIC-NEXT:    retq
11463;
11464; LINUX-32-STATIC-LABEL: dtailcaller:
11465; LINUX-32-STATIC:       # %bb.0: # %entry
11466; LINUX-32-STATIC-NEXT:    subl $12, %esp
11467; LINUX-32-STATIC-NEXT:    calll dcallee
11468; LINUX-32-STATIC-NEXT:    addl $12, %esp
11469; LINUX-32-STATIC-NEXT:    retl
11470;
11471; LINUX-32-PIC-LABEL: dtailcaller:
11472; LINUX-32-PIC:       # %bb.0: # %entry
11473; LINUX-32-PIC-NEXT:    pushl %ebx
11474; LINUX-32-PIC-NEXT:    subl $8, %esp
11475; LINUX-32-PIC-NEXT:    calll .L140$pb
11476; LINUX-32-PIC-NEXT:  .L140$pb:
11477; LINUX-32-PIC-NEXT:    popl %ebx
11478; LINUX-32-PIC-NEXT:  .Ltmp140:
11479; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp140-.L140$pb), %ebx
11480; LINUX-32-PIC-NEXT:    calll dcallee
11481; LINUX-32-PIC-NEXT:    addl $8, %esp
11482; LINUX-32-PIC-NEXT:    popl %ebx
11483; LINUX-32-PIC-NEXT:    retl
11484;
11485; LINUX-64-PIC-LABEL: dtailcaller:
11486; LINUX-64-PIC:       # %bb.0: # %entry
11487; LINUX-64-PIC-NEXT:    pushq %rax
11488; LINUX-64-PIC-NEXT:    callq dcallee
11489; LINUX-64-PIC-NEXT:    popq %rax
11490; LINUX-64-PIC-NEXT:    retq
11491;
11492; DARWIN-32-STATIC-LABEL: dtailcaller:
11493; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11494; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11495; DARWIN-32-STATIC-NEXT:    calll _dcallee
11496; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11497; DARWIN-32-STATIC-NEXT:    retl
11498;
11499; DARWIN-32-DYNAMIC-LABEL: dtailcaller:
11500; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11501; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11502; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11503; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11504; DARWIN-32-DYNAMIC-NEXT:    retl
11505;
11506; DARWIN-32-PIC-LABEL: dtailcaller:
11507; DARWIN-32-PIC:       ## %bb.0: ## %entry
11508; DARWIN-32-PIC-NEXT:    subl $12, %esp
11509; DARWIN-32-PIC-NEXT:    calll _dcallee
11510; DARWIN-32-PIC-NEXT:    addl $12, %esp
11511; DARWIN-32-PIC-NEXT:    retl
11512;
11513; DARWIN-64-STATIC-LABEL: dtailcaller:
11514; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11515; DARWIN-64-STATIC-NEXT:    pushq %rax
11516; DARWIN-64-STATIC-NEXT:    callq _dcallee
11517; DARWIN-64-STATIC-NEXT:    popq %rax
11518; DARWIN-64-STATIC-NEXT:    retq
11519;
11520; DARWIN-64-DYNAMIC-LABEL: dtailcaller:
11521; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11522; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11523; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11524; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11525; DARWIN-64-DYNAMIC-NEXT:    retq
11526;
11527; DARWIN-64-PIC-LABEL: dtailcaller:
11528; DARWIN-64-PIC:       ## %bb.0: ## %entry
11529; DARWIN-64-PIC-NEXT:    pushq %rax
11530; DARWIN-64-PIC-NEXT:    callq _dcallee
11531; DARWIN-64-PIC-NEXT:    popq %rax
11532; DARWIN-64-PIC-NEXT:    retq
11533
11534entry:
11535	call void @dcallee() nounwind
11536	ret void
11537}
11538
11539define dso_local void @ltailcaller() nounwind {
11540; LINUX-64-STATIC-LABEL: ltailcaller:
11541; LINUX-64-STATIC:       # %bb.0: # %entry
11542; LINUX-64-STATIC-NEXT:    pushq %rax
11543; LINUX-64-STATIC-NEXT:    callq lcallee
11544; LINUX-64-STATIC-NEXT:    popq %rax
11545; LINUX-64-STATIC-NEXT:    retq
11546;
11547; LINUX-32-STATIC-LABEL: ltailcaller:
11548; LINUX-32-STATIC:       # %bb.0: # %entry
11549; LINUX-32-STATIC-NEXT:    subl $12, %esp
11550; LINUX-32-STATIC-NEXT:    calll lcallee
11551; LINUX-32-STATIC-NEXT:    addl $12, %esp
11552; LINUX-32-STATIC-NEXT:    retl
11553;
11554; LINUX-32-PIC-LABEL: ltailcaller:
11555; LINUX-32-PIC:       # %bb.0: # %entry
11556; LINUX-32-PIC-NEXT:    pushl %ebx
11557; LINUX-32-PIC-NEXT:    subl $8, %esp
11558; LINUX-32-PIC-NEXT:    calll .L141$pb
11559; LINUX-32-PIC-NEXT:  .L141$pb:
11560; LINUX-32-PIC-NEXT:    popl %ebx
11561; LINUX-32-PIC-NEXT:  .Ltmp141:
11562; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp141-.L141$pb), %ebx
11563; LINUX-32-PIC-NEXT:    calll .Llcallee$local
11564; LINUX-32-PIC-NEXT:    addl $8, %esp
11565; LINUX-32-PIC-NEXT:    popl %ebx
11566; LINUX-32-PIC-NEXT:    retl
11567;
11568; LINUX-64-PIC-LABEL: ltailcaller:
11569; LINUX-64-PIC:       # %bb.0: # %entry
11570; LINUX-64-PIC-NEXT:    pushq %rax
11571; LINUX-64-PIC-NEXT:    callq .Llcallee$local
11572; LINUX-64-PIC-NEXT:    popq %rax
11573; LINUX-64-PIC-NEXT:    retq
11574;
11575; DARWIN-32-STATIC-LABEL: ltailcaller:
11576; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11577; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11578; DARWIN-32-STATIC-NEXT:    calll _lcallee
11579; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11580; DARWIN-32-STATIC-NEXT:    retl
11581;
11582; DARWIN-32-DYNAMIC-LABEL: ltailcaller:
11583; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11584; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11585; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11586; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11587; DARWIN-32-DYNAMIC-NEXT:    retl
11588;
11589; DARWIN-32-PIC-LABEL: ltailcaller:
11590; DARWIN-32-PIC:       ## %bb.0: ## %entry
11591; DARWIN-32-PIC-NEXT:    subl $12, %esp
11592; DARWIN-32-PIC-NEXT:    calll _lcallee
11593; DARWIN-32-PIC-NEXT:    addl $12, %esp
11594; DARWIN-32-PIC-NEXT:    retl
11595;
11596; DARWIN-64-STATIC-LABEL: ltailcaller:
11597; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11598; DARWIN-64-STATIC-NEXT:    pushq %rax
11599; DARWIN-64-STATIC-NEXT:    callq _lcallee
11600; DARWIN-64-STATIC-NEXT:    popq %rax
11601; DARWIN-64-STATIC-NEXT:    retq
11602;
11603; DARWIN-64-DYNAMIC-LABEL: ltailcaller:
11604; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11605; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11606; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11607; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11608; DARWIN-64-DYNAMIC-NEXT:    retq
11609;
11610; DARWIN-64-PIC-LABEL: ltailcaller:
11611; DARWIN-64-PIC:       ## %bb.0: ## %entry
11612; DARWIN-64-PIC-NEXT:    pushq %rax
11613; DARWIN-64-PIC-NEXT:    callq _lcallee
11614; DARWIN-64-PIC-NEXT:    popq %rax
11615; DARWIN-64-PIC-NEXT:    retq
11616
11617entry:
11618	call void @lcallee() nounwind
11619	ret void
11620}
11621
11622define dso_local void @icaller() nounwind {
11623; LINUX-64-STATIC-LABEL: icaller:
11624; LINUX-64-STATIC:       # %bb.0: # %entry
11625; LINUX-64-STATIC-NEXT:    pushq %rbx
11626; LINUX-64-STATIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11627; LINUX-64-STATIC-NEXT:    callq *(%rbx)
11628; LINUX-64-STATIC-NEXT:    callq *(%rbx)
11629; LINUX-64-STATIC-NEXT:    popq %rbx
11630; LINUX-64-STATIC-NEXT:    retq
11631;
11632; LINUX-32-STATIC-LABEL: icaller:
11633; LINUX-32-STATIC:       # %bb.0: # %entry
11634; LINUX-32-STATIC-NEXT:    subl $12, %esp
11635; LINUX-32-STATIC-NEXT:    calll *ifunc
11636; LINUX-32-STATIC-NEXT:    calll *ifunc
11637; LINUX-32-STATIC-NEXT:    addl $12, %esp
11638; LINUX-32-STATIC-NEXT:    retl
11639;
11640; LINUX-32-PIC-LABEL: icaller:
11641; LINUX-32-PIC:       # %bb.0: # %entry
11642; LINUX-32-PIC-NEXT:    pushl %ebx
11643; LINUX-32-PIC-NEXT:    pushl %esi
11644; LINUX-32-PIC-NEXT:    pushl %eax
11645; LINUX-32-PIC-NEXT:    calll .L142$pb
11646; LINUX-32-PIC-NEXT:  .L142$pb:
11647; LINUX-32-PIC-NEXT:    popl %ebx
11648; LINUX-32-PIC-NEXT:  .Ltmp142:
11649; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp142-.L142$pb), %ebx
11650; LINUX-32-PIC-NEXT:    movl ifunc@GOT(%ebx), %esi
11651; LINUX-32-PIC-NEXT:    calll *(%esi)
11652; LINUX-32-PIC-NEXT:    calll *(%esi)
11653; LINUX-32-PIC-NEXT:    addl $4, %esp
11654; LINUX-32-PIC-NEXT:    popl %esi
11655; LINUX-32-PIC-NEXT:    popl %ebx
11656; LINUX-32-PIC-NEXT:    retl
11657;
11658; LINUX-64-PIC-LABEL: icaller:
11659; LINUX-64-PIC:       # %bb.0: # %entry
11660; LINUX-64-PIC-NEXT:    pushq %rbx
11661; LINUX-64-PIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11662; LINUX-64-PIC-NEXT:    callq *(%rbx)
11663; LINUX-64-PIC-NEXT:    callq *(%rbx)
11664; LINUX-64-PIC-NEXT:    popq %rbx
11665; LINUX-64-PIC-NEXT:    retq
11666;
11667; DARWIN-32-STATIC-LABEL: icaller:
11668; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11669; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11670; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11671; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11672; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11673; DARWIN-32-STATIC-NEXT:    retl
11674;
11675; DARWIN-32-DYNAMIC-LABEL: icaller:
11676; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11677; DARWIN-32-DYNAMIC-NEXT:    pushl %esi
11678; DARWIN-32-DYNAMIC-NEXT:    subl $8, %esp
11679; DARWIN-32-DYNAMIC-NEXT:    movl L_ifunc$non_lazy_ptr, %esi
11680; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11681; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11682; DARWIN-32-DYNAMIC-NEXT:    addl $8, %esp
11683; DARWIN-32-DYNAMIC-NEXT:    popl %esi
11684; DARWIN-32-DYNAMIC-NEXT:    retl
11685;
11686; DARWIN-32-PIC-LABEL: icaller:
11687; DARWIN-32-PIC:       ## %bb.0: ## %entry
11688; DARWIN-32-PIC-NEXT:    pushl %esi
11689; DARWIN-32-PIC-NEXT:    subl $8, %esp
11690; DARWIN-32-PIC-NEXT:    calll L142$pb
11691; DARWIN-32-PIC-NEXT:  L142$pb:
11692; DARWIN-32-PIC-NEXT:    popl %eax
11693; DARWIN-32-PIC-NEXT:    movl L_ifunc$non_lazy_ptr-L142$pb(%eax), %esi
11694; DARWIN-32-PIC-NEXT:    calll *(%esi)
11695; DARWIN-32-PIC-NEXT:    calll *(%esi)
11696; DARWIN-32-PIC-NEXT:    addl $8, %esp
11697; DARWIN-32-PIC-NEXT:    popl %esi
11698; DARWIN-32-PIC-NEXT:    retl
11699;
11700; DARWIN-64-STATIC-LABEL: icaller:
11701; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11702; DARWIN-64-STATIC-NEXT:    pushq %rbx
11703; DARWIN-64-STATIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11704; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
11705; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
11706; DARWIN-64-STATIC-NEXT:    popq %rbx
11707; DARWIN-64-STATIC-NEXT:    retq
11708;
11709; DARWIN-64-DYNAMIC-LABEL: icaller:
11710; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11711; DARWIN-64-DYNAMIC-NEXT:    pushq %rbx
11712; DARWIN-64-DYNAMIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11713; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
11714; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
11715; DARWIN-64-DYNAMIC-NEXT:    popq %rbx
11716; DARWIN-64-DYNAMIC-NEXT:    retq
11717;
11718; DARWIN-64-PIC-LABEL: icaller:
11719; DARWIN-64-PIC:       ## %bb.0: ## %entry
11720; DARWIN-64-PIC-NEXT:    pushq %rbx
11721; DARWIN-64-PIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11722; DARWIN-64-PIC-NEXT:    callq *(%rbx)
11723; DARWIN-64-PIC-NEXT:    callq *(%rbx)
11724; DARWIN-64-PIC-NEXT:    popq %rbx
11725; DARWIN-64-PIC-NEXT:    retq
11726
11727entry:
11728	%0 = load void ()*, void ()** @ifunc, align 8
11729	call void %0() nounwind
11730	%1 = load void ()*, void ()** @ifunc, align 8
11731	call void %1() nounwind
11732	ret void
11733}
11734
11735define dso_local void @dicaller() nounwind {
11736; LINUX-64-STATIC-LABEL: dicaller:
11737; LINUX-64-STATIC:       # %bb.0: # %entry
11738; LINUX-64-STATIC-NEXT:    pushq %rax
11739; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
11740; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
11741; LINUX-64-STATIC-NEXT:    popq %rax
11742; LINUX-64-STATIC-NEXT:    retq
11743;
11744; LINUX-32-STATIC-LABEL: dicaller:
11745; LINUX-32-STATIC:       # %bb.0: # %entry
11746; LINUX-32-STATIC-NEXT:    subl $12, %esp
11747; LINUX-32-STATIC-NEXT:    calll *difunc
11748; LINUX-32-STATIC-NEXT:    calll *difunc
11749; LINUX-32-STATIC-NEXT:    addl $12, %esp
11750; LINUX-32-STATIC-NEXT:    retl
11751;
11752; LINUX-32-PIC-LABEL: dicaller:
11753; LINUX-32-PIC:       # %bb.0: # %entry
11754; LINUX-32-PIC-NEXT:    pushl %ebx
11755; LINUX-32-PIC-NEXT:    subl $8, %esp
11756; LINUX-32-PIC-NEXT:    calll .L143$pb
11757; LINUX-32-PIC-NEXT:  .L143$pb:
11758; LINUX-32-PIC-NEXT:    popl %ebx
11759; LINUX-32-PIC-NEXT:  .Ltmp143:
11760; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp143-.L143$pb), %ebx
11761; LINUX-32-PIC-NEXT:    calll *.Ldifunc$local@GOTOFF(%ebx)
11762; LINUX-32-PIC-NEXT:    calll *.Ldifunc$local@GOTOFF(%ebx)
11763; LINUX-32-PIC-NEXT:    addl $8, %esp
11764; LINUX-32-PIC-NEXT:    popl %ebx
11765; LINUX-32-PIC-NEXT:    retl
11766;
11767; LINUX-64-PIC-LABEL: dicaller:
11768; LINUX-64-PIC:       # %bb.0: # %entry
11769; LINUX-64-PIC-NEXT:    pushq %rax
11770; LINUX-64-PIC-NEXT:    callq *.Ldifunc$local(%rip)
11771; LINUX-64-PIC-NEXT:    callq *.Ldifunc$local(%rip)
11772; LINUX-64-PIC-NEXT:    popq %rax
11773; LINUX-64-PIC-NEXT:    retq
11774;
11775; DARWIN-32-STATIC-LABEL: dicaller:
11776; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11777; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11778; DARWIN-32-STATIC-NEXT:    calll *_difunc
11779; DARWIN-32-STATIC-NEXT:    calll *_difunc
11780; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11781; DARWIN-32-STATIC-NEXT:    retl
11782;
11783; DARWIN-32-DYNAMIC-LABEL: dicaller:
11784; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11785; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11786; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
11787; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
11788; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11789; DARWIN-32-DYNAMIC-NEXT:    retl
11790;
11791; DARWIN-32-PIC-LABEL: dicaller:
11792; DARWIN-32-PIC:       ## %bb.0: ## %entry
11793; DARWIN-32-PIC-NEXT:    pushl %esi
11794; DARWIN-32-PIC-NEXT:    subl $8, %esp
11795; DARWIN-32-PIC-NEXT:    calll L143$pb
11796; DARWIN-32-PIC-NEXT:  L143$pb:
11797; DARWIN-32-PIC-NEXT:    popl %esi
11798; DARWIN-32-PIC-NEXT:    calll *_difunc-L143$pb(%esi)
11799; DARWIN-32-PIC-NEXT:    calll *_difunc-L143$pb(%esi)
11800; DARWIN-32-PIC-NEXT:    addl $8, %esp
11801; DARWIN-32-PIC-NEXT:    popl %esi
11802; DARWIN-32-PIC-NEXT:    retl
11803;
11804; DARWIN-64-STATIC-LABEL: dicaller:
11805; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11806; DARWIN-64-STATIC-NEXT:    pushq %rax
11807; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
11808; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
11809; DARWIN-64-STATIC-NEXT:    popq %rax
11810; DARWIN-64-STATIC-NEXT:    retq
11811;
11812; DARWIN-64-DYNAMIC-LABEL: dicaller:
11813; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11814; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11815; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
11816; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
11817; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11818; DARWIN-64-DYNAMIC-NEXT:    retq
11819;
11820; DARWIN-64-PIC-LABEL: dicaller:
11821; DARWIN-64-PIC:       ## %bb.0: ## %entry
11822; DARWIN-64-PIC-NEXT:    pushq %rax
11823; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
11824; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
11825; DARWIN-64-PIC-NEXT:    popq %rax
11826; DARWIN-64-PIC-NEXT:    retq
11827
11828entry:
11829	%0 = load void ()*, void ()** @difunc, align 8
11830	call void %0() nounwind
11831	%1 = load void ()*, void ()** @difunc, align 8
11832	call void %1() nounwind
11833	ret void
11834}
11835
11836define dso_local void @licaller() nounwind {
11837; LINUX-64-STATIC-LABEL: licaller:
11838; LINUX-64-STATIC:       # %bb.0: # %entry
11839; LINUX-64-STATIC-NEXT:    pushq %rax
11840; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
11841; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
11842; LINUX-64-STATIC-NEXT:    popq %rax
11843; LINUX-64-STATIC-NEXT:    retq
11844;
11845; LINUX-32-STATIC-LABEL: licaller:
11846; LINUX-32-STATIC:       # %bb.0: # %entry
11847; LINUX-32-STATIC-NEXT:    subl $12, %esp
11848; LINUX-32-STATIC-NEXT:    calll *lifunc
11849; LINUX-32-STATIC-NEXT:    calll *lifunc
11850; LINUX-32-STATIC-NEXT:    addl $12, %esp
11851; LINUX-32-STATIC-NEXT:    retl
11852;
11853; LINUX-32-PIC-LABEL: licaller:
11854; LINUX-32-PIC:       # %bb.0: # %entry
11855; LINUX-32-PIC-NEXT:    pushl %ebx
11856; LINUX-32-PIC-NEXT:    subl $8, %esp
11857; LINUX-32-PIC-NEXT:    calll .L144$pb
11858; LINUX-32-PIC-NEXT:  .L144$pb:
11859; LINUX-32-PIC-NEXT:    popl %ebx
11860; LINUX-32-PIC-NEXT:  .Ltmp144:
11861; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp144-.L144$pb), %ebx
11862; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
11863; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
11864; LINUX-32-PIC-NEXT:    addl $8, %esp
11865; LINUX-32-PIC-NEXT:    popl %ebx
11866; LINUX-32-PIC-NEXT:    retl
11867;
11868; LINUX-64-PIC-LABEL: licaller:
11869; LINUX-64-PIC:       # %bb.0: # %entry
11870; LINUX-64-PIC-NEXT:    pushq %rax
11871; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
11872; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
11873; LINUX-64-PIC-NEXT:    popq %rax
11874; LINUX-64-PIC-NEXT:    retq
11875;
11876; DARWIN-32-STATIC-LABEL: licaller:
11877; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11878; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11879; DARWIN-32-STATIC-NEXT:    calll *_lifunc
11880; DARWIN-32-STATIC-NEXT:    calll *_lifunc
11881; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11882; DARWIN-32-STATIC-NEXT:    retl
11883;
11884; DARWIN-32-DYNAMIC-LABEL: licaller:
11885; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11886; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11887; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
11888; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
11889; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11890; DARWIN-32-DYNAMIC-NEXT:    retl
11891;
11892; DARWIN-32-PIC-LABEL: licaller:
11893; DARWIN-32-PIC:       ## %bb.0: ## %entry
11894; DARWIN-32-PIC-NEXT:    pushl %esi
11895; DARWIN-32-PIC-NEXT:    subl $8, %esp
11896; DARWIN-32-PIC-NEXT:    calll L144$pb
11897; DARWIN-32-PIC-NEXT:  L144$pb:
11898; DARWIN-32-PIC-NEXT:    popl %esi
11899; DARWIN-32-PIC-NEXT:    calll *_lifunc-L144$pb(%esi)
11900; DARWIN-32-PIC-NEXT:    calll *_lifunc-L144$pb(%esi)
11901; DARWIN-32-PIC-NEXT:    addl $8, %esp
11902; DARWIN-32-PIC-NEXT:    popl %esi
11903; DARWIN-32-PIC-NEXT:    retl
11904;
11905; DARWIN-64-STATIC-LABEL: licaller:
11906; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11907; DARWIN-64-STATIC-NEXT:    pushq %rax
11908; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
11909; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
11910; DARWIN-64-STATIC-NEXT:    popq %rax
11911; DARWIN-64-STATIC-NEXT:    retq
11912;
11913; DARWIN-64-DYNAMIC-LABEL: licaller:
11914; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11915; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11916; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
11917; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
11918; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11919; DARWIN-64-DYNAMIC-NEXT:    retq
11920;
11921; DARWIN-64-PIC-LABEL: licaller:
11922; DARWIN-64-PIC:       ## %bb.0: ## %entry
11923; DARWIN-64-PIC-NEXT:    pushq %rax
11924; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
11925; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
11926; DARWIN-64-PIC-NEXT:    popq %rax
11927; DARWIN-64-PIC-NEXT:    retq
11928
11929entry:
11930	%0 = load void ()*, void ()** @lifunc, align 8
11931	call void %0() nounwind
11932	%1 = load void ()*, void ()** @lifunc, align 8
11933	call void %1() nounwind
11934	ret void
11935}
11936
11937define dso_local void @itailcaller() nounwind {
11938; LINUX-64-STATIC-LABEL: itailcaller:
11939; LINUX-64-STATIC:       # %bb.0: # %entry
11940; LINUX-64-STATIC-NEXT:    pushq %rbx
11941; LINUX-64-STATIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11942; LINUX-64-STATIC-NEXT:    callq *(%rbx)
11943; LINUX-64-STATIC-NEXT:    callq *(%rbx)
11944; LINUX-64-STATIC-NEXT:    popq %rbx
11945; LINUX-64-STATIC-NEXT:    retq
11946;
11947; LINUX-32-STATIC-LABEL: itailcaller:
11948; LINUX-32-STATIC:       # %bb.0: # %entry
11949; LINUX-32-STATIC-NEXT:    subl $12, %esp
11950; LINUX-32-STATIC-NEXT:    calll *ifunc
11951; LINUX-32-STATIC-NEXT:    calll *ifunc
11952; LINUX-32-STATIC-NEXT:    addl $12, %esp
11953; LINUX-32-STATIC-NEXT:    retl
11954;
11955; LINUX-32-PIC-LABEL: itailcaller:
11956; LINUX-32-PIC:       # %bb.0: # %entry
11957; LINUX-32-PIC-NEXT:    pushl %ebx
11958; LINUX-32-PIC-NEXT:    pushl %esi
11959; LINUX-32-PIC-NEXT:    pushl %eax
11960; LINUX-32-PIC-NEXT:    calll .L145$pb
11961; LINUX-32-PIC-NEXT:  .L145$pb:
11962; LINUX-32-PIC-NEXT:    popl %ebx
11963; LINUX-32-PIC-NEXT:  .Ltmp145:
11964; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp145-.L145$pb), %ebx
11965; LINUX-32-PIC-NEXT:    movl ifunc@GOT(%ebx), %esi
11966; LINUX-32-PIC-NEXT:    calll *(%esi)
11967; LINUX-32-PIC-NEXT:    calll *(%esi)
11968; LINUX-32-PIC-NEXT:    addl $4, %esp
11969; LINUX-32-PIC-NEXT:    popl %esi
11970; LINUX-32-PIC-NEXT:    popl %ebx
11971; LINUX-32-PIC-NEXT:    retl
11972;
11973; LINUX-64-PIC-LABEL: itailcaller:
11974; LINUX-64-PIC:       # %bb.0: # %entry
11975; LINUX-64-PIC-NEXT:    pushq %rbx
11976; LINUX-64-PIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11977; LINUX-64-PIC-NEXT:    callq *(%rbx)
11978; LINUX-64-PIC-NEXT:    callq *(%rbx)
11979; LINUX-64-PIC-NEXT:    popq %rbx
11980; LINUX-64-PIC-NEXT:    retq
11981;
11982; DARWIN-32-STATIC-LABEL: itailcaller:
11983; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11984; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11985; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11986; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11987; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11988; DARWIN-32-STATIC-NEXT:    retl
11989;
11990; DARWIN-32-DYNAMIC-LABEL: itailcaller:
11991; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11992; DARWIN-32-DYNAMIC-NEXT:    pushl %esi
11993; DARWIN-32-DYNAMIC-NEXT:    subl $8, %esp
11994; DARWIN-32-DYNAMIC-NEXT:    movl L_ifunc$non_lazy_ptr, %esi
11995; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11996; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11997; DARWIN-32-DYNAMIC-NEXT:    addl $8, %esp
11998; DARWIN-32-DYNAMIC-NEXT:    popl %esi
11999; DARWIN-32-DYNAMIC-NEXT:    retl
12000;
12001; DARWIN-32-PIC-LABEL: itailcaller:
12002; DARWIN-32-PIC:       ## %bb.0: ## %entry
12003; DARWIN-32-PIC-NEXT:    pushl %esi
12004; DARWIN-32-PIC-NEXT:    subl $8, %esp
12005; DARWIN-32-PIC-NEXT:    calll L145$pb
12006; DARWIN-32-PIC-NEXT:  L145$pb:
12007; DARWIN-32-PIC-NEXT:    popl %eax
12008; DARWIN-32-PIC-NEXT:    movl L_ifunc$non_lazy_ptr-L145$pb(%eax), %esi
12009; DARWIN-32-PIC-NEXT:    calll *(%esi)
12010; DARWIN-32-PIC-NEXT:    calll *(%esi)
12011; DARWIN-32-PIC-NEXT:    addl $8, %esp
12012; DARWIN-32-PIC-NEXT:    popl %esi
12013; DARWIN-32-PIC-NEXT:    retl
12014;
12015; DARWIN-64-STATIC-LABEL: itailcaller:
12016; DARWIN-64-STATIC:       ## %bb.0: ## %entry
12017; DARWIN-64-STATIC-NEXT:    pushq %rbx
12018; DARWIN-64-STATIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
12019; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
12020; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
12021; DARWIN-64-STATIC-NEXT:    popq %rbx
12022; DARWIN-64-STATIC-NEXT:    retq
12023;
12024; DARWIN-64-DYNAMIC-LABEL: itailcaller:
12025; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
12026; DARWIN-64-DYNAMIC-NEXT:    pushq %rbx
12027; DARWIN-64-DYNAMIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
12028; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
12029; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
12030; DARWIN-64-DYNAMIC-NEXT:    popq %rbx
12031; DARWIN-64-DYNAMIC-NEXT:    retq
12032;
12033; DARWIN-64-PIC-LABEL: itailcaller:
12034; DARWIN-64-PIC:       ## %bb.0: ## %entry
12035; DARWIN-64-PIC-NEXT:    pushq %rbx
12036; DARWIN-64-PIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
12037; DARWIN-64-PIC-NEXT:    callq *(%rbx)
12038; DARWIN-64-PIC-NEXT:    callq *(%rbx)
12039; DARWIN-64-PIC-NEXT:    popq %rbx
12040; DARWIN-64-PIC-NEXT:    retq
12041
12042entry:
12043	%0 = load void ()*, void ()** @ifunc, align 8
12044	call void %0() nounwind
12045	%1 = load void ()*, void ()** @ifunc, align 8
12046	call void %1() nounwind
12047	ret void
12048}
12049
12050define dso_local void @ditailcaller() nounwind {
12051; LINUX-64-STATIC-LABEL: ditailcaller:
12052; LINUX-64-STATIC:       # %bb.0: # %entry
12053; LINUX-64-STATIC-NEXT:    pushq %rax
12054; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
12055; LINUX-64-STATIC-NEXT:    popq %rax
12056; LINUX-64-STATIC-NEXT:    retq
12057;
12058; LINUX-32-STATIC-LABEL: ditailcaller:
12059; LINUX-32-STATIC:       # %bb.0: # %entry
12060; LINUX-32-STATIC-NEXT:    subl $12, %esp
12061; LINUX-32-STATIC-NEXT:    calll *difunc
12062; LINUX-32-STATIC-NEXT:    addl $12, %esp
12063; LINUX-32-STATIC-NEXT:    retl
12064;
12065; LINUX-32-PIC-LABEL: ditailcaller:
12066; LINUX-32-PIC:       # %bb.0: # %entry
12067; LINUX-32-PIC-NEXT:    pushl %ebx
12068; LINUX-32-PIC-NEXT:    subl $8, %esp
12069; LINUX-32-PIC-NEXT:    calll .L146$pb
12070; LINUX-32-PIC-NEXT:  .L146$pb:
12071; LINUX-32-PIC-NEXT:    popl %ebx
12072; LINUX-32-PIC-NEXT:  .Ltmp146:
12073; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp146-.L146$pb), %ebx
12074; LINUX-32-PIC-NEXT:    calll *.Ldifunc$local@GOTOFF(%ebx)
12075; LINUX-32-PIC-NEXT:    addl $8, %esp
12076; LINUX-32-PIC-NEXT:    popl %ebx
12077; LINUX-32-PIC-NEXT:    retl
12078;
12079; LINUX-64-PIC-LABEL: ditailcaller:
12080; LINUX-64-PIC:       # %bb.0: # %entry
12081; LINUX-64-PIC-NEXT:    pushq %rax
12082; LINUX-64-PIC-NEXT:    callq *.Ldifunc$local(%rip)
12083; LINUX-64-PIC-NEXT:    popq %rax
12084; LINUX-64-PIC-NEXT:    retq
12085;
12086; DARWIN-32-STATIC-LABEL: ditailcaller:
12087; DARWIN-32-STATIC:       ## %bb.0: ## %entry
12088; DARWIN-32-STATIC-NEXT:    subl $12, %esp
12089; DARWIN-32-STATIC-NEXT:    calll *_difunc
12090; DARWIN-32-STATIC-NEXT:    addl $12, %esp
12091; DARWIN-32-STATIC-NEXT:    retl
12092;
12093; DARWIN-32-DYNAMIC-LABEL: ditailcaller:
12094; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
12095; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
12096; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
12097; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
12098; DARWIN-32-DYNAMIC-NEXT:    retl
12099;
12100; DARWIN-32-PIC-LABEL: ditailcaller:
12101; DARWIN-32-PIC:       ## %bb.0: ## %entry
12102; DARWIN-32-PIC-NEXT:    subl $12, %esp
12103; DARWIN-32-PIC-NEXT:    calll L146$pb
12104; DARWIN-32-PIC-NEXT:  L146$pb:
12105; DARWIN-32-PIC-NEXT:    popl %eax
12106; DARWIN-32-PIC-NEXT:    calll *_difunc-L146$pb(%eax)
12107; DARWIN-32-PIC-NEXT:    addl $12, %esp
12108; DARWIN-32-PIC-NEXT:    retl
12109;
12110; DARWIN-64-STATIC-LABEL: ditailcaller:
12111; DARWIN-64-STATIC:       ## %bb.0: ## %entry
12112; DARWIN-64-STATIC-NEXT:    pushq %rax
12113; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
12114; DARWIN-64-STATIC-NEXT:    popq %rax
12115; DARWIN-64-STATIC-NEXT:    retq
12116;
12117; DARWIN-64-DYNAMIC-LABEL: ditailcaller:
12118; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
12119; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
12120; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
12121; DARWIN-64-DYNAMIC-NEXT:    popq %rax
12122; DARWIN-64-DYNAMIC-NEXT:    retq
12123;
12124; DARWIN-64-PIC-LABEL: ditailcaller:
12125; DARWIN-64-PIC:       ## %bb.0: ## %entry
12126; DARWIN-64-PIC-NEXT:    pushq %rax
12127; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
12128; DARWIN-64-PIC-NEXT:    popq %rax
12129; DARWIN-64-PIC-NEXT:    retq
12130
12131entry:
12132	%0 = load void ()*, void ()** @difunc, align 8
12133	call void %0() nounwind
12134	ret void
12135}
12136
12137define dso_local void @litailcaller() nounwind {
12138; LINUX-64-STATIC-LABEL: litailcaller:
12139; LINUX-64-STATIC:       # %bb.0: # %entry
12140; LINUX-64-STATIC-NEXT:    pushq %rax
12141; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
12142; LINUX-64-STATIC-NEXT:    popq %rax
12143; LINUX-64-STATIC-NEXT:    retq
12144;
12145; LINUX-32-STATIC-LABEL: litailcaller:
12146; LINUX-32-STATIC:       # %bb.0: # %entry
12147; LINUX-32-STATIC-NEXT:    subl $12, %esp
12148; LINUX-32-STATIC-NEXT:    calll *lifunc
12149; LINUX-32-STATIC-NEXT:    addl $12, %esp
12150; LINUX-32-STATIC-NEXT:    retl
12151;
12152; LINUX-32-PIC-LABEL: litailcaller:
12153; LINUX-32-PIC:       # %bb.0: # %entry
12154; LINUX-32-PIC-NEXT:    pushl %ebx
12155; LINUX-32-PIC-NEXT:    subl $8, %esp
12156; LINUX-32-PIC-NEXT:    calll .L147$pb
12157; LINUX-32-PIC-NEXT:  .L147$pb:
12158; LINUX-32-PIC-NEXT:    popl %ebx
12159; LINUX-32-PIC-NEXT:  .Ltmp147:
12160; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp147-.L147$pb), %ebx
12161; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
12162; LINUX-32-PIC-NEXT:    addl $8, %esp
12163; LINUX-32-PIC-NEXT:    popl %ebx
12164; LINUX-32-PIC-NEXT:    retl
12165;
12166; LINUX-64-PIC-LABEL: litailcaller:
12167; LINUX-64-PIC:       # %bb.0: # %entry
12168; LINUX-64-PIC-NEXT:    pushq %rax
12169; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
12170; LINUX-64-PIC-NEXT:    popq %rax
12171; LINUX-64-PIC-NEXT:    retq
12172;
12173; DARWIN-32-STATIC-LABEL: litailcaller:
12174; DARWIN-32-STATIC:       ## %bb.0: ## %entry
12175; DARWIN-32-STATIC-NEXT:    subl $12, %esp
12176; DARWIN-32-STATIC-NEXT:    calll *_lifunc
12177; DARWIN-32-STATIC-NEXT:    addl $12, %esp
12178; DARWIN-32-STATIC-NEXT:    retl
12179;
12180; DARWIN-32-DYNAMIC-LABEL: litailcaller:
12181; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
12182; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
12183; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
12184; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
12185; DARWIN-32-DYNAMIC-NEXT:    retl
12186;
12187; DARWIN-32-PIC-LABEL: litailcaller:
12188; DARWIN-32-PIC:       ## %bb.0: ## %entry
12189; DARWIN-32-PIC-NEXT:    subl $12, %esp
12190; DARWIN-32-PIC-NEXT:    calll L147$pb
12191; DARWIN-32-PIC-NEXT:  L147$pb:
12192; DARWIN-32-PIC-NEXT:    popl %eax
12193; DARWIN-32-PIC-NEXT:    calll *_lifunc-L147$pb(%eax)
12194; DARWIN-32-PIC-NEXT:    addl $12, %esp
12195; DARWIN-32-PIC-NEXT:    retl
12196;
12197; DARWIN-64-STATIC-LABEL: litailcaller:
12198; DARWIN-64-STATIC:       ## %bb.0: ## %entry
12199; DARWIN-64-STATIC-NEXT:    pushq %rax
12200; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
12201; DARWIN-64-STATIC-NEXT:    popq %rax
12202; DARWIN-64-STATIC-NEXT:    retq
12203;
12204; DARWIN-64-DYNAMIC-LABEL: litailcaller:
12205; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
12206; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
12207; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
12208; DARWIN-64-DYNAMIC-NEXT:    popq %rax
12209; DARWIN-64-DYNAMIC-NEXT:    retq
12210;
12211; DARWIN-64-PIC-LABEL: litailcaller:
12212; DARWIN-64-PIC:       ## %bb.0: ## %entry
12213; DARWIN-64-PIC-NEXT:    pushq %rax
12214; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
12215; DARWIN-64-PIC-NEXT:    popq %rax
12216; DARWIN-64-PIC-NEXT:    retq
12217
12218entry:
12219	%0 = load void ()*, void ()** @lifunc, align 8
12220	call void %0() nounwind
12221	ret void
12222}
12223