xref: /llvm-project/llvm/test/CodeGen/X86/abi-isel.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
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 ptr
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 ptr null
25@lsrc = internal global [131072 x i32] zeroinitializer
26@ldst = internal global [131072 x i32] zeroinitializer
27@lptr = internal global ptr null
28@ifunc = external global ptr
29@difunc = dso_local global ptr null
30@lifunc = internal global ptr 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, ptr @src, align 4
123	store i32 %0, ptr @dst, 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, ptr @xsrc, align 4
215	store i32 %0, ptr @xdst, 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 ptr @dst, ptr @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 ptr @xdst, ptr @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 ptr, ptr @ptr, align 8
477	%1 = load i32, ptr @src, align 4
478	store i32 %1, ptr %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 ptr, ptr @ptr, align 8
579	%1 = load i32, ptr @xsrc, align 4
580	store i32 %1, ptr %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, ptr @dsrc, align 32
655	store i32 %0, ptr @ddst, 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 ptr @ddst, ptr @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 ptr, ptr @dptr, align 8
810	%1 = load i32, ptr @dsrc, align 32
811	store i32 %1, ptr %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, ptr @lsrc, align 4
886	store i32 %0, ptr @ldst, 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 ptr @ldst, ptr @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 ptr, ptr @lptr, align 8
1041	%1 = load i32, ptr @lsrc, align 4
1042	store i32 %1, ptr %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, ptr getelementptr ([131072 x i32], ptr @src, i32 0, i64 16), align 4
1133	store i32 %0, ptr getelementptr ([131072 x i32], ptr @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, ptr getelementptr ([32 x i32], ptr @xsrc, i32 0, i64 16), align 4
1224	store i32 %0, ptr getelementptr ([32 x i32], ptr @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 ptr getelementptr ([131072 x i32], ptr @dst, i32 0, i64 16), ptr @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 ptr getelementptr ([32 x i32], ptr @xdst, i32 0, i64 16), ptr @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 ptr, ptr @ptr, align 8
1503	%1 = load i32, ptr getelementptr ([131072 x i32], ptr @src, i32 0, i64 16), align 4
1504	%2 = getelementptr i32, ptr %0, i64 16
1505	store i32 %1, ptr %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 ptr, ptr @ptr, align 8
1606	%1 = load i32, ptr getelementptr ([32 x i32], ptr @xsrc, i32 0, i64 16), align 4
1607	%2 = getelementptr i32, ptr %0, i64 16
1608	store i32 %1, ptr %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, ptr getelementptr ([131072 x i32], ptr @dsrc, i32 0, i64 16), align 32
1683	store i32 %0, ptr getelementptr ([131072 x i32], ptr @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 ptr getelementptr ([131072 x i32], ptr @ddst, i32 0, i64 16), ptr @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 ptr, ptr @dptr, align 8
1838	%1 = load i32, ptr getelementptr ([131072 x i32], ptr @dsrc, i32 0, i64 16), align 32
1839	%2 = getelementptr i32, ptr %0, i64 16
1840	store i32 %1, ptr %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, ptr getelementptr ([131072 x i32], ptr @lsrc, i32 0, i64 16), align 4
1915	store i32 %0, ptr getelementptr ([131072 x i32], ptr @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 ptr getelementptr ([131072 x i32], ptr @ldst, i32 0, i64 16), ptr @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 ptr, ptr @lptr, align 8
2070	%1 = load i32, ptr getelementptr ([131072 x i32], ptr @lsrc, i32 0, i64 16), align 4
2071	%2 = getelementptr i32, ptr %0, i64 16
2072	store i32 %1, ptr %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], ptr @src, i64 0, i64 %i
2168	%1 = load i32, ptr %0, align 4
2169	%2 = getelementptr [131072 x i32], ptr @dst, i64 0, i64 %i
2170	store i32 %1, ptr %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], ptr @xsrc, i64 0, i64 %i
2266	%1 = load i32, ptr %0, align 4
2267	%2 = getelementptr [32 x i32], ptr @xdst, i64 0, i64 %i
2268	store i32 %1, ptr %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], ptr @dst, i64 0, i64 %i
2364	store ptr %0, ptr @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], ptr @xdst, i64 0, i64 %i
2460	store ptr %0, ptr @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 ptr, ptr @ptr, align 8
2566	%1 = getelementptr [131072 x i32], ptr @src, i64 0, i64 %i
2567	%2 = load i32, ptr %1, align 4
2568	%3 = getelementptr i32, ptr %0, i64 %i
2569	store i32 %2, ptr %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 ptr, ptr @ptr, align 8
2675	%1 = getelementptr [32 x i32], ptr @xsrc, i64 0, i64 %i
2676	%2 = load i32, ptr %1, align 4
2677	%3 = getelementptr i32, ptr %0, i64 %i
2678	store i32 %2, ptr %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], ptr @dsrc, i64 0, i64 %i
2766	%1 = load i32, ptr %0, align 4
2767	%2 = getelementptr [131072 x i32], ptr @ddst, i64 0, i64 %i
2768	store i32 %1, ptr %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], ptr @ddst, i64 0, i64 %i
2852	store ptr %0, ptr @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 ptr, ptr @dptr, align 8
2946	%1 = getelementptr [131072 x i32], ptr @dsrc, i64 0, i64 %i
2947	%2 = load i32, ptr %1, align 4
2948	%3 = getelementptr i32, ptr %0, i64 %i
2949	store i32 %2, ptr %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], ptr @lsrc, i64 0, i64 %i
3037	%1 = load i32, ptr %0, align 4
3038	%2 = getelementptr [131072 x i32], ptr @ldst, i64 0, i64 %i
3039	store i32 %1, ptr %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], ptr @ldst, i64 0, i64 %i
3123	store ptr %0, ptr @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 ptr, ptr @lptr, align 8
3217	%1 = getelementptr [131072 x i32], ptr @lsrc, i64 0, i64 %i
3218	%2 = load i32, ptr %1, align 4
3219	%3 = getelementptr i32, ptr %0, i64 %i
3220	store i32 %2, ptr %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], ptr @src, i64 0, i64 %0
3317	%2 = load i32, ptr %1, align 4
3318	%3 = getelementptr [131072 x i32], ptr @dst, i64 0, i64 %0
3319	store i32 %2, ptr %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], ptr @xsrc, i64 0, i64 %0
3416	%2 = load i32, ptr %1, align 4
3417	%3 = getelementptr [32 x i32], ptr @xdst, i64 0, i64 %0
3418	store i32 %2, ptr %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], ptr @dst, i64 0, i64 %.sum
3515	store ptr %0, ptr @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], ptr @xdst, i64 0, i64 %.sum
3612	store ptr %0, ptr @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 ptr, ptr @ptr, align 8
3718	%1 = add i64 %i, 16
3719	%2 = getelementptr [131072 x i32], ptr @src, i64 0, i64 %1
3720	%3 = load i32, ptr %2, align 4
3721	%4 = getelementptr i32, ptr %0, i64 %1
3722	store i32 %3, ptr %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 ptr, ptr @ptr, align 8
3828	%1 = add i64 %i, 16
3829	%2 = getelementptr [32 x i32], ptr @xsrc, i64 0, i64 %1
3830	%3 = load i32, ptr %2, align 4
3831	%4 = getelementptr i32, ptr %0, i64 %1
3832	store i32 %3, ptr %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], ptr @dsrc, i64 0, i64 %0
3921	%2 = load i32, ptr %1, align 4
3922	%3 = getelementptr [131072 x i32], ptr @ddst, i64 0, i64 %0
3923	store i32 %2, ptr %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], ptr @ddst, i64 0, i64 %.sum
4008	store ptr %0, ptr @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 ptr, ptr @dptr, align 8
4102	%1 = add i64 %i, 16
4103	%2 = getelementptr [131072 x i32], ptr @dsrc, i64 0, i64 %1
4104	%3 = load i32, ptr %2, align 4
4105	%4 = getelementptr i32, ptr %0, i64 %1
4106	store i32 %3, ptr %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], ptr @lsrc, i64 0, i64 %0
4195	%2 = load i32, ptr %1, align 4
4196	%3 = getelementptr [131072 x i32], ptr @ldst, i64 0, i64 %0
4197	store i32 %2, ptr %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], ptr @ldst, i64 0, i64 %.sum
4282	store ptr %0, ptr @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 ptr, ptr @lptr, align 8
4376	%1 = add i64 %i, 16
4377	%2 = getelementptr [131072 x i32], ptr @lsrc, i64 0, i64 %1
4378	%3 = load i32, ptr %2, align 4
4379	%4 = getelementptr i32, ptr %0, i64 %1
4380	store i32 %3, ptr %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, ptr getelementptr ([131072 x i32], ptr @src, i32 0, i64 65536), align 4
4471	store i32 %0, ptr getelementptr ([131072 x i32], ptr @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 ptr getelementptr ([131072 x i32], ptr @dst, i32 0, i64 65536), ptr @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 ptr, ptr @ptr, align 8
4661	%1 = load i32, ptr getelementptr ([131072 x i32], ptr @src, i32 0, i64 65536), align 4
4662	%2 = getelementptr i32, ptr %0, i64 65536
4663	store i32 %1, ptr %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, ptr getelementptr ([131072 x i32], ptr @dsrc, i32 0, i64 65536), align 32
4738	store i32 %0, ptr getelementptr ([131072 x i32], ptr @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 ptr getelementptr ([131072 x i32], ptr @ddst, i32 0, i64 65536), ptr @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 ptr, ptr @dptr, align 8
4893	%1 = load i32, ptr getelementptr ([131072 x i32], ptr @dsrc, i32 0, i64 65536), align 32
4894	%2 = getelementptr i32, ptr %0, i64 65536
4895	store i32 %1, ptr %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, ptr getelementptr ([131072 x i32], ptr @lsrc, i32 0, i64 65536), align 4
4970	store i32 %0, ptr getelementptr ([131072 x i32], ptr @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 ptr getelementptr ([131072 x i32], ptr @ldst, i32 0, i64 65536), ptr @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 ptr, ptr @lptr, align 8
5125	%1 = load i32, ptr getelementptr ([131072 x i32], ptr @lsrc, i32 0, i64 65536), align 4
5126	%2 = getelementptr i32, ptr %0, i64 65536
5127	store i32 %1, ptr %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], ptr @src, i64 0, i64 %0
5224	%2 = load i32, ptr %1, align 4
5225	%3 = getelementptr [131072 x i32], ptr @dst, i64 0, i64 %0
5226	store i32 %2, ptr %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], ptr @dst, i64 0, i64 %.sum
5323	store ptr %0, ptr @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 ptr, ptr @ptr, align 8
5429	%1 = add i64 %i, 65536
5430	%2 = getelementptr [131072 x i32], ptr @src, i64 0, i64 %1
5431	%3 = load i32, ptr %2, align 4
5432	%4 = getelementptr i32, ptr %0, i64 %1
5433	store i32 %3, ptr %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], ptr @dsrc, i64 0, i64 %0
5522	%2 = load i32, ptr %1, align 4
5523	%3 = getelementptr [131072 x i32], ptr @ddst, i64 0, i64 %0
5524	store i32 %2, ptr %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], ptr @ddst, i64 0, i64 %.sum
5609	store ptr %0, ptr @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 ptr, ptr @dptr, align 8
5703	%1 = add i64 %i, 65536
5704	%2 = getelementptr [131072 x i32], ptr @dsrc, i64 0, i64 %1
5705	%3 = load i32, ptr %2, align 4
5706	%4 = getelementptr i32, ptr %0, i64 %1
5707	store i32 %3, ptr %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], ptr @lsrc, i64 0, i64 %0
5796	%2 = load i32, ptr %1, align 4
5797	%3 = getelementptr [131072 x i32], ptr @ldst, i64 0, i64 %0
5798	store i32 %2, ptr %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], ptr @ldst, i64 0, i64 %.sum
5883	store ptr %0, ptr @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 ptr, ptr @lptr, align 8
5977	%1 = add i64 %i, 65536
5978	%2 = getelementptr [131072 x i32], ptr @lsrc, i64 0, i64 %1
5979	%3 = load i32, ptr %2, align 4
5980	%4 = getelementptr i32, ptr %0, i64 %1
5981	store i32 %3, ptr %4, align 4
5982	ret void
5983}
5984
5985define dso_local ptr @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 ptr @src
6046}
6047
6048define dso_local ptr @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 ptr @xsrc
6109}
6110
6111define dso_local ptr @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 ptr @dst
6172}
6173
6174define dso_local ptr @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 ptr @xdst
6235}
6236
6237define dso_local ptr @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 ptr @ptr
6298}
6299
6300define dso_local ptr @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 ptr @dsrc
6361}
6362
6363define dso_local ptr @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 ptr @ddst
6424}
6425
6426define dso_local ptr @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 ptr @dptr
6487}
6488
6489define dso_local ptr @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 ptr @lsrc
6550}
6551
6552define dso_local ptr @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 ptr @ldst
6613}
6614
6615define dso_local ptr @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 ptr @lptr
6676}
6677
6678define dso_local ptr @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 ptr @src
6739}
6740
6741define dso_local ptr @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 ptr @xsrc
6802}
6803
6804define dso_local ptr @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 ptr @dst
6865}
6866
6867define dso_local ptr @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 ptr @xdst
6928}
6929
6930define dso_local ptr @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 ptr, ptr @ptr, align 8
6999	ret ptr %0
7000}
7001
7002define dso_local ptr @har03() nounwind {
7003; LINUX-64-STATIC-LABEL: har03:
7004; LINUX-64-STATIC:       # %bb.0: # %entry
7005; LINUX-64-STATIC-NEXT:    movl $dsrc, %eax
7006; LINUX-64-STATIC-NEXT:    retq
7007;
7008; LINUX-32-STATIC-LABEL: har03:
7009; LINUX-32-STATIC:       # %bb.0: # %entry
7010; LINUX-32-STATIC-NEXT:    movl $dsrc, %eax
7011; LINUX-32-STATIC-NEXT:    retl
7012;
7013; LINUX-32-PIC-LABEL: har03:
7014; LINUX-32-PIC:       # %bb.0: # %entry
7015; LINUX-32-PIC-NEXT:    calll .L82$pb
7016; LINUX-32-PIC-NEXT:  .L82$pb:
7017; LINUX-32-PIC-NEXT:    popl %eax
7018; LINUX-32-PIC-NEXT:  .Ltmp82:
7019; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp82-.L82$pb), %eax
7020; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF(%eax), %eax
7021; LINUX-32-PIC-NEXT:    retl
7022;
7023; LINUX-64-PIC-LABEL: har03:
7024; LINUX-64-PIC:       # %bb.0: # %entry
7025; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
7026; LINUX-64-PIC-NEXT:    retq
7027;
7028; DARWIN-32-STATIC-LABEL: har03:
7029; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7030; DARWIN-32-STATIC-NEXT:    movl $_dsrc, %eax
7031; DARWIN-32-STATIC-NEXT:    retl
7032;
7033; DARWIN-32-DYNAMIC-LABEL: har03:
7034; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7035; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc, %eax
7036; DARWIN-32-DYNAMIC-NEXT:    retl
7037;
7038; DARWIN-32-PIC-LABEL: har03:
7039; DARWIN-32-PIC:       ## %bb.0: ## %entry
7040; DARWIN-32-PIC-NEXT:    calll L82$pb
7041; DARWIN-32-PIC-NEXT:  L82$pb:
7042; DARWIN-32-PIC-NEXT:    popl %eax
7043; DARWIN-32-PIC-NEXT:    leal _dsrc-L82$pb(%eax), %eax
7044; DARWIN-32-PIC-NEXT:    retl
7045;
7046; DARWIN-64-STATIC-LABEL: har03:
7047; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7048; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
7049; DARWIN-64-STATIC-NEXT:    retq
7050;
7051; DARWIN-64-DYNAMIC-LABEL: har03:
7052; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7053; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
7054; DARWIN-64-DYNAMIC-NEXT:    retq
7055;
7056; DARWIN-64-PIC-LABEL: har03:
7057; DARWIN-64-PIC:       ## %bb.0: ## %entry
7058; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
7059; DARWIN-64-PIC-NEXT:    retq
7060
7061entry:
7062	ret ptr @dsrc
7063}
7064
7065define dso_local ptr @har04() nounwind {
7066; LINUX-64-STATIC-LABEL: har04:
7067; LINUX-64-STATIC:       # %bb.0: # %entry
7068; LINUX-64-STATIC-NEXT:    movl $ddst, %eax
7069; LINUX-64-STATIC-NEXT:    retq
7070;
7071; LINUX-32-STATIC-LABEL: har04:
7072; LINUX-32-STATIC:       # %bb.0: # %entry
7073; LINUX-32-STATIC-NEXT:    movl $ddst, %eax
7074; LINUX-32-STATIC-NEXT:    retl
7075;
7076; LINUX-32-PIC-LABEL: har04:
7077; LINUX-32-PIC:       # %bb.0: # %entry
7078; LINUX-32-PIC-NEXT:    calll .L83$pb
7079; LINUX-32-PIC-NEXT:  .L83$pb:
7080; LINUX-32-PIC-NEXT:    popl %eax
7081; LINUX-32-PIC-NEXT:  .Ltmp83:
7082; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp83-.L83$pb), %eax
7083; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF(%eax), %eax
7084; LINUX-32-PIC-NEXT:    retl
7085;
7086; LINUX-64-PIC-LABEL: har04:
7087; LINUX-64-PIC:       # %bb.0: # %entry
7088; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
7089; LINUX-64-PIC-NEXT:    retq
7090;
7091; DARWIN-32-STATIC-LABEL: har04:
7092; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7093; DARWIN-32-STATIC-NEXT:    movl $_ddst, %eax
7094; DARWIN-32-STATIC-NEXT:    retl
7095;
7096; DARWIN-32-DYNAMIC-LABEL: har04:
7097; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7098; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, %eax
7099; DARWIN-32-DYNAMIC-NEXT:    retl
7100;
7101; DARWIN-32-PIC-LABEL: har04:
7102; DARWIN-32-PIC:       ## %bb.0: ## %entry
7103; DARWIN-32-PIC-NEXT:    calll L83$pb
7104; DARWIN-32-PIC-NEXT:  L83$pb:
7105; DARWIN-32-PIC-NEXT:    popl %eax
7106; DARWIN-32-PIC-NEXT:    leal _ddst-L83$pb(%eax), %eax
7107; DARWIN-32-PIC-NEXT:    retl
7108;
7109; DARWIN-64-STATIC-LABEL: har04:
7110; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7111; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
7112; DARWIN-64-STATIC-NEXT:    retq
7113;
7114; DARWIN-64-DYNAMIC-LABEL: har04:
7115; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7116; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
7117; DARWIN-64-DYNAMIC-NEXT:    retq
7118;
7119; DARWIN-64-PIC-LABEL: har04:
7120; DARWIN-64-PIC:       ## %bb.0: ## %entry
7121; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
7122; DARWIN-64-PIC-NEXT:    retq
7123
7124entry:
7125	ret ptr @ddst
7126}
7127
7128define dso_local ptr @har05() nounwind {
7129; LINUX-64-STATIC-LABEL: har05:
7130; LINUX-64-STATIC:       # %bb.0: # %entry
7131; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
7132; LINUX-64-STATIC-NEXT:    retq
7133;
7134; LINUX-32-STATIC-LABEL: har05:
7135; LINUX-32-STATIC:       # %bb.0: # %entry
7136; LINUX-32-STATIC-NEXT:    movl dptr, %eax
7137; LINUX-32-STATIC-NEXT:    retl
7138;
7139; LINUX-32-PIC-LABEL: har05:
7140; LINUX-32-PIC:       # %bb.0: # %entry
7141; LINUX-32-PIC-NEXT:    calll .L84$pb
7142; LINUX-32-PIC-NEXT:  .L84$pb:
7143; LINUX-32-PIC-NEXT:    popl %eax
7144; LINUX-32-PIC-NEXT:  .Ltmp84:
7145; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp84-.L84$pb), %eax
7146; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
7147; LINUX-32-PIC-NEXT:    retl
7148;
7149; LINUX-64-PIC-LABEL: har05:
7150; LINUX-64-PIC:       # %bb.0: # %entry
7151; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rax
7152; LINUX-64-PIC-NEXT:    retq
7153;
7154; DARWIN-32-STATIC-LABEL: har05:
7155; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7156; DARWIN-32-STATIC-NEXT:    movl _dptr, %eax
7157; DARWIN-32-STATIC-NEXT:    retl
7158;
7159; DARWIN-32-DYNAMIC-LABEL: har05:
7160; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7161; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %eax
7162; DARWIN-32-DYNAMIC-NEXT:    retl
7163;
7164; DARWIN-32-PIC-LABEL: har05:
7165; DARWIN-32-PIC:       ## %bb.0: ## %entry
7166; DARWIN-32-PIC-NEXT:    calll L84$pb
7167; DARWIN-32-PIC-NEXT:  L84$pb:
7168; DARWIN-32-PIC-NEXT:    popl %eax
7169; DARWIN-32-PIC-NEXT:    movl _dptr-L84$pb(%eax), %eax
7170; DARWIN-32-PIC-NEXT:    retl
7171;
7172; DARWIN-64-STATIC-LABEL: har05:
7173; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7174; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
7175; DARWIN-64-STATIC-NEXT:    retq
7176;
7177; DARWIN-64-DYNAMIC-LABEL: har05:
7178; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7179; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
7180; DARWIN-64-DYNAMIC-NEXT:    retq
7181;
7182; DARWIN-64-PIC-LABEL: har05:
7183; DARWIN-64-PIC:       ## %bb.0: ## %entry
7184; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
7185; DARWIN-64-PIC-NEXT:    retq
7186
7187entry:
7188	%0 = load ptr, ptr @dptr, align 8
7189	ret ptr %0
7190}
7191
7192define dso_local ptr @har06() nounwind {
7193; LINUX-64-STATIC-LABEL: har06:
7194; LINUX-64-STATIC:       # %bb.0: # %entry
7195; LINUX-64-STATIC-NEXT:    movl $lsrc, %eax
7196; LINUX-64-STATIC-NEXT:    retq
7197;
7198; LINUX-32-STATIC-LABEL: har06:
7199; LINUX-32-STATIC:       # %bb.0: # %entry
7200; LINUX-32-STATIC-NEXT:    movl $lsrc, %eax
7201; LINUX-32-STATIC-NEXT:    retl
7202;
7203; LINUX-32-PIC-LABEL: har06:
7204; LINUX-32-PIC:       # %bb.0: # %entry
7205; LINUX-32-PIC-NEXT:    calll .L85$pb
7206; LINUX-32-PIC-NEXT:  .L85$pb:
7207; LINUX-32-PIC-NEXT:    popl %eax
7208; LINUX-32-PIC-NEXT:  .Ltmp85:
7209; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp85-.L85$pb), %eax
7210; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF(%eax), %eax
7211; LINUX-32-PIC-NEXT:    retl
7212;
7213; LINUX-64-PIC-LABEL: har06:
7214; LINUX-64-PIC:       # %bb.0: # %entry
7215; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
7216; LINUX-64-PIC-NEXT:    retq
7217;
7218; DARWIN-32-STATIC-LABEL: har06:
7219; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7220; DARWIN-32-STATIC-NEXT:    movl $_lsrc, %eax
7221; DARWIN-32-STATIC-NEXT:    retl
7222;
7223; DARWIN-32-DYNAMIC-LABEL: har06:
7224; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7225; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc, %eax
7226; DARWIN-32-DYNAMIC-NEXT:    retl
7227;
7228; DARWIN-32-PIC-LABEL: har06:
7229; DARWIN-32-PIC:       ## %bb.0: ## %entry
7230; DARWIN-32-PIC-NEXT:    calll L85$pb
7231; DARWIN-32-PIC-NEXT:  L85$pb:
7232; DARWIN-32-PIC-NEXT:    popl %eax
7233; DARWIN-32-PIC-NEXT:    leal _lsrc-L85$pb(%eax), %eax
7234; DARWIN-32-PIC-NEXT:    retl
7235;
7236; DARWIN-64-STATIC-LABEL: har06:
7237; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7238; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
7239; DARWIN-64-STATIC-NEXT:    retq
7240;
7241; DARWIN-64-DYNAMIC-LABEL: har06:
7242; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7243; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
7244; DARWIN-64-DYNAMIC-NEXT:    retq
7245;
7246; DARWIN-64-PIC-LABEL: har06:
7247; DARWIN-64-PIC:       ## %bb.0: ## %entry
7248; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
7249; DARWIN-64-PIC-NEXT:    retq
7250
7251entry:
7252	ret ptr @lsrc
7253}
7254
7255define dso_local ptr @har07() nounwind {
7256; LINUX-64-STATIC-LABEL: har07:
7257; LINUX-64-STATIC:       # %bb.0: # %entry
7258; LINUX-64-STATIC-NEXT:    movl $ldst, %eax
7259; LINUX-64-STATIC-NEXT:    retq
7260;
7261; LINUX-32-STATIC-LABEL: har07:
7262; LINUX-32-STATIC:       # %bb.0: # %entry
7263; LINUX-32-STATIC-NEXT:    movl $ldst, %eax
7264; LINUX-32-STATIC-NEXT:    retl
7265;
7266; LINUX-32-PIC-LABEL: har07:
7267; LINUX-32-PIC:       # %bb.0: # %entry
7268; LINUX-32-PIC-NEXT:    calll .L86$pb
7269; LINUX-32-PIC-NEXT:  .L86$pb:
7270; LINUX-32-PIC-NEXT:    popl %eax
7271; LINUX-32-PIC-NEXT:  .Ltmp86:
7272; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp86-.L86$pb), %eax
7273; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %eax
7274; LINUX-32-PIC-NEXT:    retl
7275;
7276; LINUX-64-PIC-LABEL: har07:
7277; LINUX-64-PIC:       # %bb.0: # %entry
7278; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
7279; LINUX-64-PIC-NEXT:    retq
7280;
7281; DARWIN-32-STATIC-LABEL: har07:
7282; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7283; DARWIN-32-STATIC-NEXT:    movl $_ldst, %eax
7284; DARWIN-32-STATIC-NEXT:    retl
7285;
7286; DARWIN-32-DYNAMIC-LABEL: har07:
7287; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7288; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, %eax
7289; DARWIN-32-DYNAMIC-NEXT:    retl
7290;
7291; DARWIN-32-PIC-LABEL: har07:
7292; DARWIN-32-PIC:       ## %bb.0: ## %entry
7293; DARWIN-32-PIC-NEXT:    calll L86$pb
7294; DARWIN-32-PIC-NEXT:  L86$pb:
7295; DARWIN-32-PIC-NEXT:    popl %eax
7296; DARWIN-32-PIC-NEXT:    leal _ldst-L86$pb(%eax), %eax
7297; DARWIN-32-PIC-NEXT:    retl
7298;
7299; DARWIN-64-STATIC-LABEL: har07:
7300; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7301; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
7302; DARWIN-64-STATIC-NEXT:    retq
7303;
7304; DARWIN-64-DYNAMIC-LABEL: har07:
7305; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7306; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
7307; DARWIN-64-DYNAMIC-NEXT:    retq
7308;
7309; DARWIN-64-PIC-LABEL: har07:
7310; DARWIN-64-PIC:       ## %bb.0: ## %entry
7311; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
7312; DARWIN-64-PIC-NEXT:    retq
7313
7314entry:
7315	ret ptr @ldst
7316}
7317
7318define dso_local ptr @har08() nounwind {
7319; LINUX-64-STATIC-LABEL: har08:
7320; LINUX-64-STATIC:       # %bb.0: # %entry
7321; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
7322; LINUX-64-STATIC-NEXT:    retq
7323;
7324; LINUX-32-STATIC-LABEL: har08:
7325; LINUX-32-STATIC:       # %bb.0: # %entry
7326; LINUX-32-STATIC-NEXT:    movl lptr, %eax
7327; LINUX-32-STATIC-NEXT:    retl
7328;
7329; LINUX-32-PIC-LABEL: har08:
7330; LINUX-32-PIC:       # %bb.0: # %entry
7331; LINUX-32-PIC-NEXT:    calll .L87$pb
7332; LINUX-32-PIC-NEXT:  .L87$pb:
7333; LINUX-32-PIC-NEXT:    popl %eax
7334; LINUX-32-PIC-NEXT:  .Ltmp87:
7335; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp87-.L87$pb), %eax
7336; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
7337; LINUX-32-PIC-NEXT:    retl
7338;
7339; LINUX-64-PIC-LABEL: har08:
7340; LINUX-64-PIC:       # %bb.0: # %entry
7341; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
7342; LINUX-64-PIC-NEXT:    retq
7343;
7344; DARWIN-32-STATIC-LABEL: har08:
7345; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7346; DARWIN-32-STATIC-NEXT:    movl _lptr, %eax
7347; DARWIN-32-STATIC-NEXT:    retl
7348;
7349; DARWIN-32-DYNAMIC-LABEL: har08:
7350; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7351; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %eax
7352; DARWIN-32-DYNAMIC-NEXT:    retl
7353;
7354; DARWIN-32-PIC-LABEL: har08:
7355; DARWIN-32-PIC:       ## %bb.0: ## %entry
7356; DARWIN-32-PIC-NEXT:    calll L87$pb
7357; DARWIN-32-PIC-NEXT:  L87$pb:
7358; DARWIN-32-PIC-NEXT:    popl %eax
7359; DARWIN-32-PIC-NEXT:    movl _lptr-L87$pb(%eax), %eax
7360; DARWIN-32-PIC-NEXT:    retl
7361;
7362; DARWIN-64-STATIC-LABEL: har08:
7363; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7364; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
7365; DARWIN-64-STATIC-NEXT:    retq
7366;
7367; DARWIN-64-DYNAMIC-LABEL: har08:
7368; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7369; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
7370; DARWIN-64-DYNAMIC-NEXT:    retq
7371;
7372; DARWIN-64-PIC-LABEL: har08:
7373; DARWIN-64-PIC:       ## %bb.0: ## %entry
7374; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
7375; DARWIN-64-PIC-NEXT:    retq
7376
7377entry:
7378	%0 = load ptr, ptr @lptr, align 8
7379	ret ptr %0
7380}
7381
7382define dso_local ptr @bat00() nounwind {
7383; LINUX-64-STATIC-LABEL: bat00:
7384; LINUX-64-STATIC:       # %bb.0: # %entry
7385; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
7386; LINUX-64-STATIC-NEXT:    addq $64, %rax
7387; LINUX-64-STATIC-NEXT:    retq
7388;
7389; LINUX-32-STATIC-LABEL: bat00:
7390; LINUX-32-STATIC:       # %bb.0: # %entry
7391; LINUX-32-STATIC-NEXT:    leal src+64, %eax
7392; LINUX-32-STATIC-NEXT:    retl
7393;
7394; LINUX-32-PIC-LABEL: bat00:
7395; LINUX-32-PIC:       # %bb.0: # %entry
7396; LINUX-32-PIC-NEXT:    calll .L88$pb
7397; LINUX-32-PIC-NEXT:  .L88$pb:
7398; LINUX-32-PIC-NEXT:    popl %eax
7399; LINUX-32-PIC-NEXT:  .Ltmp88:
7400; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp88-.L88$pb), %eax
7401; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
7402; LINUX-32-PIC-NEXT:    addl $64, %eax
7403; LINUX-32-PIC-NEXT:    retl
7404;
7405; LINUX-64-PIC-LABEL: bat00:
7406; LINUX-64-PIC:       # %bb.0: # %entry
7407; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
7408; LINUX-64-PIC-NEXT:    addq $64, %rax
7409; LINUX-64-PIC-NEXT:    retq
7410;
7411; DARWIN-32-STATIC-LABEL: bat00:
7412; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7413; DARWIN-32-STATIC-NEXT:    movl $_src+64, %eax
7414; DARWIN-32-STATIC-NEXT:    retl
7415;
7416; DARWIN-32-DYNAMIC-LABEL: bat00:
7417; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7418; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
7419; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7420; DARWIN-32-DYNAMIC-NEXT:    retl
7421;
7422; DARWIN-32-PIC-LABEL: bat00:
7423; DARWIN-32-PIC:       ## %bb.0: ## %entry
7424; DARWIN-32-PIC-NEXT:    calll L88$pb
7425; DARWIN-32-PIC-NEXT:  L88$pb:
7426; DARWIN-32-PIC-NEXT:    popl %eax
7427; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L88$pb(%eax), %eax
7428; DARWIN-32-PIC-NEXT:    addl $64, %eax
7429; DARWIN-32-PIC-NEXT:    retl
7430;
7431; DARWIN-64-STATIC-LABEL: bat00:
7432; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7433; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7434; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7435; DARWIN-64-STATIC-NEXT:    retq
7436;
7437; DARWIN-64-DYNAMIC-LABEL: bat00:
7438; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7439; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7440; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7441; DARWIN-64-DYNAMIC-NEXT:    retq
7442;
7443; DARWIN-64-PIC-LABEL: bat00:
7444; DARWIN-64-PIC:       ## %bb.0: ## %entry
7445; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
7446; DARWIN-64-PIC-NEXT:    addq $64, %rax
7447; DARWIN-64-PIC-NEXT:    retq
7448
7449entry:
7450	ret ptr getelementptr ([131072 x i32], ptr @src, i32 0, i64 16)
7451}
7452
7453define dso_local ptr @bxt00() nounwind {
7454; LINUX-64-STATIC-LABEL: bxt00:
7455; LINUX-64-STATIC:       # %bb.0: # %entry
7456; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
7457; LINUX-64-STATIC-NEXT:    addq $64, %rax
7458; LINUX-64-STATIC-NEXT:    retq
7459;
7460; LINUX-32-STATIC-LABEL: bxt00:
7461; LINUX-32-STATIC:       # %bb.0: # %entry
7462; LINUX-32-STATIC-NEXT:    leal xsrc+64, %eax
7463; LINUX-32-STATIC-NEXT:    retl
7464;
7465; LINUX-32-PIC-LABEL: bxt00:
7466; LINUX-32-PIC:       # %bb.0: # %entry
7467; LINUX-32-PIC-NEXT:    calll .L89$pb
7468; LINUX-32-PIC-NEXT:  .L89$pb:
7469; LINUX-32-PIC-NEXT:    popl %eax
7470; LINUX-32-PIC-NEXT:  .Ltmp89:
7471; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp89-.L89$pb), %eax
7472; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
7473; LINUX-32-PIC-NEXT:    addl $64, %eax
7474; LINUX-32-PIC-NEXT:    retl
7475;
7476; LINUX-64-PIC-LABEL: bxt00:
7477; LINUX-64-PIC:       # %bb.0: # %entry
7478; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
7479; LINUX-64-PIC-NEXT:    addq $64, %rax
7480; LINUX-64-PIC-NEXT:    retq
7481;
7482; DARWIN-32-STATIC-LABEL: bxt00:
7483; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7484; DARWIN-32-STATIC-NEXT:    movl $_xsrc+64, %eax
7485; DARWIN-32-STATIC-NEXT:    retl
7486;
7487; DARWIN-32-DYNAMIC-LABEL: bxt00:
7488; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7489; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
7490; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7491; DARWIN-32-DYNAMIC-NEXT:    retl
7492;
7493; DARWIN-32-PIC-LABEL: bxt00:
7494; DARWIN-32-PIC:       ## %bb.0: ## %entry
7495; DARWIN-32-PIC-NEXT:    calll L89$pb
7496; DARWIN-32-PIC-NEXT:  L89$pb:
7497; DARWIN-32-PIC-NEXT:    popl %eax
7498; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L89$pb(%eax), %eax
7499; DARWIN-32-PIC-NEXT:    addl $64, %eax
7500; DARWIN-32-PIC-NEXT:    retl
7501;
7502; DARWIN-64-STATIC-LABEL: bxt00:
7503; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7504; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7505; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7506; DARWIN-64-STATIC-NEXT:    retq
7507;
7508; DARWIN-64-DYNAMIC-LABEL: bxt00:
7509; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7510; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7511; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7512; DARWIN-64-DYNAMIC-NEXT:    retq
7513;
7514; DARWIN-64-PIC-LABEL: bxt00:
7515; DARWIN-64-PIC:       ## %bb.0: ## %entry
7516; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
7517; DARWIN-64-PIC-NEXT:    addq $64, %rax
7518; DARWIN-64-PIC-NEXT:    retq
7519
7520entry:
7521	ret ptr getelementptr ([32 x i32], ptr @xsrc, i32 0, i64 16)
7522}
7523
7524define dso_local ptr @bat01() nounwind {
7525; LINUX-64-STATIC-LABEL: bat01:
7526; LINUX-64-STATIC:       # %bb.0: # %entry
7527; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
7528; LINUX-64-STATIC-NEXT:    addq $64, %rax
7529; LINUX-64-STATIC-NEXT:    retq
7530;
7531; LINUX-32-STATIC-LABEL: bat01:
7532; LINUX-32-STATIC:       # %bb.0: # %entry
7533; LINUX-32-STATIC-NEXT:    leal dst+64, %eax
7534; LINUX-32-STATIC-NEXT:    retl
7535;
7536; LINUX-32-PIC-LABEL: bat01:
7537; LINUX-32-PIC:       # %bb.0: # %entry
7538; LINUX-32-PIC-NEXT:    calll .L90$pb
7539; LINUX-32-PIC-NEXT:  .L90$pb:
7540; LINUX-32-PIC-NEXT:    popl %eax
7541; LINUX-32-PIC-NEXT:  .Ltmp90:
7542; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp90-.L90$pb), %eax
7543; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
7544; LINUX-32-PIC-NEXT:    addl $64, %eax
7545; LINUX-32-PIC-NEXT:    retl
7546;
7547; LINUX-64-PIC-LABEL: bat01:
7548; LINUX-64-PIC:       # %bb.0: # %entry
7549; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
7550; LINUX-64-PIC-NEXT:    addq $64, %rax
7551; LINUX-64-PIC-NEXT:    retq
7552;
7553; DARWIN-32-STATIC-LABEL: bat01:
7554; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7555; DARWIN-32-STATIC-NEXT:    movl $_dst+64, %eax
7556; DARWIN-32-STATIC-NEXT:    retl
7557;
7558; DARWIN-32-DYNAMIC-LABEL: bat01:
7559; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7560; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
7561; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7562; DARWIN-32-DYNAMIC-NEXT:    retl
7563;
7564; DARWIN-32-PIC-LABEL: bat01:
7565; DARWIN-32-PIC:       ## %bb.0: ## %entry
7566; DARWIN-32-PIC-NEXT:    calll L90$pb
7567; DARWIN-32-PIC-NEXT:  L90$pb:
7568; DARWIN-32-PIC-NEXT:    popl %eax
7569; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L90$pb(%eax), %eax
7570; DARWIN-32-PIC-NEXT:    addl $64, %eax
7571; DARWIN-32-PIC-NEXT:    retl
7572;
7573; DARWIN-64-STATIC-LABEL: bat01:
7574; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7575; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7576; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7577; DARWIN-64-STATIC-NEXT:    retq
7578;
7579; DARWIN-64-DYNAMIC-LABEL: bat01:
7580; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7581; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7582; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7583; DARWIN-64-DYNAMIC-NEXT:    retq
7584;
7585; DARWIN-64-PIC-LABEL: bat01:
7586; DARWIN-64-PIC:       ## %bb.0: ## %entry
7587; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
7588; DARWIN-64-PIC-NEXT:    addq $64, %rax
7589; DARWIN-64-PIC-NEXT:    retq
7590
7591entry:
7592	ret ptr getelementptr ([131072 x i32], ptr @dst, i32 0, i64 16)
7593}
7594
7595define dso_local ptr @bxt01() nounwind {
7596; LINUX-64-STATIC-LABEL: bxt01:
7597; LINUX-64-STATIC:       # %bb.0: # %entry
7598; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
7599; LINUX-64-STATIC-NEXT:    addq $64, %rax
7600; LINUX-64-STATIC-NEXT:    retq
7601;
7602; LINUX-32-STATIC-LABEL: bxt01:
7603; LINUX-32-STATIC:       # %bb.0: # %entry
7604; LINUX-32-STATIC-NEXT:    leal xdst+64, %eax
7605; LINUX-32-STATIC-NEXT:    retl
7606;
7607; LINUX-32-PIC-LABEL: bxt01:
7608; LINUX-32-PIC:       # %bb.0: # %entry
7609; LINUX-32-PIC-NEXT:    calll .L91$pb
7610; LINUX-32-PIC-NEXT:  .L91$pb:
7611; LINUX-32-PIC-NEXT:    popl %eax
7612; LINUX-32-PIC-NEXT:  .Ltmp91:
7613; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp91-.L91$pb), %eax
7614; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
7615; LINUX-32-PIC-NEXT:    addl $64, %eax
7616; LINUX-32-PIC-NEXT:    retl
7617;
7618; LINUX-64-PIC-LABEL: bxt01:
7619; LINUX-64-PIC:       # %bb.0: # %entry
7620; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
7621; LINUX-64-PIC-NEXT:    addq $64, %rax
7622; LINUX-64-PIC-NEXT:    retq
7623;
7624; DARWIN-32-STATIC-LABEL: bxt01:
7625; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7626; DARWIN-32-STATIC-NEXT:    movl $_xdst+64, %eax
7627; DARWIN-32-STATIC-NEXT:    retl
7628;
7629; DARWIN-32-DYNAMIC-LABEL: bxt01:
7630; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7631; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
7632; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7633; DARWIN-32-DYNAMIC-NEXT:    retl
7634;
7635; DARWIN-32-PIC-LABEL: bxt01:
7636; DARWIN-32-PIC:       ## %bb.0: ## %entry
7637; DARWIN-32-PIC-NEXT:    calll L91$pb
7638; DARWIN-32-PIC-NEXT:  L91$pb:
7639; DARWIN-32-PIC-NEXT:    popl %eax
7640; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L91$pb(%eax), %eax
7641; DARWIN-32-PIC-NEXT:    addl $64, %eax
7642; DARWIN-32-PIC-NEXT:    retl
7643;
7644; DARWIN-64-STATIC-LABEL: bxt01:
7645; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7646; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7647; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7648; DARWIN-64-STATIC-NEXT:    retq
7649;
7650; DARWIN-64-DYNAMIC-LABEL: bxt01:
7651; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7652; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7653; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7654; DARWIN-64-DYNAMIC-NEXT:    retq
7655;
7656; DARWIN-64-PIC-LABEL: bxt01:
7657; DARWIN-64-PIC:       ## %bb.0: ## %entry
7658; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
7659; DARWIN-64-PIC-NEXT:    addq $64, %rax
7660; DARWIN-64-PIC-NEXT:    retq
7661
7662entry:
7663	ret ptr getelementptr ([32 x i32], ptr @xdst, i32 0, i64 16)
7664}
7665
7666define dso_local ptr @bat02() nounwind {
7667; LINUX-64-STATIC-LABEL: bat02:
7668; LINUX-64-STATIC:       # %bb.0: # %entry
7669; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
7670; LINUX-64-STATIC-NEXT:    movq (%rax), %rax
7671; LINUX-64-STATIC-NEXT:    addq $64, %rax
7672; LINUX-64-STATIC-NEXT:    retq
7673;
7674; LINUX-32-STATIC-LABEL: bat02:
7675; LINUX-32-STATIC:       # %bb.0: # %entry
7676; LINUX-32-STATIC-NEXT:    movl ptr, %eax
7677; LINUX-32-STATIC-NEXT:    addl $64, %eax
7678; LINUX-32-STATIC-NEXT:    retl
7679;
7680; LINUX-32-PIC-LABEL: bat02:
7681; LINUX-32-PIC:       # %bb.0: # %entry
7682; LINUX-32-PIC-NEXT:    calll .L92$pb
7683; LINUX-32-PIC-NEXT:  .L92$pb:
7684; LINUX-32-PIC-NEXT:    popl %eax
7685; LINUX-32-PIC-NEXT:  .Ltmp92:
7686; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp92-.L92$pb), %eax
7687; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
7688; LINUX-32-PIC-NEXT:    movl (%eax), %eax
7689; LINUX-32-PIC-NEXT:    addl $64, %eax
7690; LINUX-32-PIC-NEXT:    retl
7691;
7692; LINUX-64-PIC-LABEL: bat02:
7693; LINUX-64-PIC:       # %bb.0: # %entry
7694; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
7695; LINUX-64-PIC-NEXT:    movq (%rax), %rax
7696; LINUX-64-PIC-NEXT:    addq $64, %rax
7697; LINUX-64-PIC-NEXT:    retq
7698;
7699; DARWIN-32-STATIC-LABEL: bat02:
7700; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7701; DARWIN-32-STATIC-NEXT:    movl _ptr, %eax
7702; DARWIN-32-STATIC-NEXT:    addl $64, %eax
7703; DARWIN-32-STATIC-NEXT:    retl
7704;
7705; DARWIN-32-DYNAMIC-LABEL: bat02:
7706; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7707; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
7708; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
7709; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7710; DARWIN-32-DYNAMIC-NEXT:    retl
7711;
7712; DARWIN-32-PIC-LABEL: bat02:
7713; DARWIN-32-PIC:       ## %bb.0: ## %entry
7714; DARWIN-32-PIC-NEXT:    calll L92$pb
7715; DARWIN-32-PIC-NEXT:  L92$pb:
7716; DARWIN-32-PIC-NEXT:    popl %eax
7717; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L92$pb(%eax), %eax
7718; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
7719; DARWIN-32-PIC-NEXT:    addl $64, %eax
7720; DARWIN-32-PIC-NEXT:    retl
7721;
7722; DARWIN-64-STATIC-LABEL: bat02:
7723; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7724; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7725; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
7726; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7727; DARWIN-64-STATIC-NEXT:    retq
7728;
7729; DARWIN-64-DYNAMIC-LABEL: bat02:
7730; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7731; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7732; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
7733; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7734; DARWIN-64-DYNAMIC-NEXT:    retq
7735;
7736; DARWIN-64-PIC-LABEL: bat02:
7737; DARWIN-64-PIC:       ## %bb.0: ## %entry
7738; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
7739; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
7740; DARWIN-64-PIC-NEXT:    addq $64, %rax
7741; DARWIN-64-PIC-NEXT:    retq
7742
7743entry:
7744	%0 = load ptr, ptr @ptr, align 8
7745	%1 = getelementptr i32, ptr %0, i64 16
7746	ret ptr %1
7747}
7748
7749define dso_local ptr @bat03() nounwind {
7750; LINUX-64-STATIC-LABEL: bat03:
7751; LINUX-64-STATIC:       # %bb.0: # %entry
7752; LINUX-64-STATIC-NEXT:    movl $dsrc+64, %eax
7753; LINUX-64-STATIC-NEXT:    retq
7754;
7755; LINUX-32-STATIC-LABEL: bat03:
7756; LINUX-32-STATIC:       # %bb.0: # %entry
7757; LINUX-32-STATIC-NEXT:    movl $dsrc+64, %eax
7758; LINUX-32-STATIC-NEXT:    retl
7759;
7760; LINUX-32-PIC-LABEL: bat03:
7761; LINUX-32-PIC:       # %bb.0: # %entry
7762; LINUX-32-PIC-NEXT:    calll .L93$pb
7763; LINUX-32-PIC-NEXT:  .L93$pb:
7764; LINUX-32-PIC-NEXT:    popl %eax
7765; LINUX-32-PIC-NEXT:  .Ltmp93:
7766; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp93-.L93$pb), %eax
7767; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF+64(%eax), %eax
7768; LINUX-32-PIC-NEXT:    retl
7769;
7770; LINUX-64-PIC-LABEL: bat03:
7771; LINUX-64-PIC:       # %bb.0: # %entry
7772; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local+64(%rip), %rax
7773; LINUX-64-PIC-NEXT:    retq
7774;
7775; DARWIN-32-STATIC-LABEL: bat03:
7776; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7777; DARWIN-32-STATIC-NEXT:    movl $_dsrc+64, %eax
7778; DARWIN-32-STATIC-NEXT:    retl
7779;
7780; DARWIN-32-DYNAMIC-LABEL: bat03:
7781; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7782; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc+64, %eax
7783; DARWIN-32-DYNAMIC-NEXT:    retl
7784;
7785; DARWIN-32-PIC-LABEL: bat03:
7786; DARWIN-32-PIC:       ## %bb.0: ## %entry
7787; DARWIN-32-PIC-NEXT:    calll L93$pb
7788; DARWIN-32-PIC-NEXT:  L93$pb:
7789; DARWIN-32-PIC-NEXT:    popl %eax
7790; DARWIN-32-PIC-NEXT:    leal (_dsrc-L93$pb)+64(%eax), %eax
7791; DARWIN-32-PIC-NEXT:    retl
7792;
7793; DARWIN-64-STATIC-LABEL: bat03:
7794; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7795; DARWIN-64-STATIC-NEXT:    leaq _dsrc+64(%rip), %rax
7796; DARWIN-64-STATIC-NEXT:    retq
7797;
7798; DARWIN-64-DYNAMIC-LABEL: bat03:
7799; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7800; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc+64(%rip), %rax
7801; DARWIN-64-DYNAMIC-NEXT:    retq
7802;
7803; DARWIN-64-PIC-LABEL: bat03:
7804; DARWIN-64-PIC:       ## %bb.0: ## %entry
7805; DARWIN-64-PIC-NEXT:    leaq _dsrc+64(%rip), %rax
7806; DARWIN-64-PIC-NEXT:    retq
7807
7808entry:
7809	ret ptr getelementptr ([131072 x i32], ptr @dsrc, i32 0, i64 16)
7810}
7811
7812define dso_local ptr @bat04() nounwind {
7813; LINUX-64-STATIC-LABEL: bat04:
7814; LINUX-64-STATIC:       # %bb.0: # %entry
7815; LINUX-64-STATIC-NEXT:    movl $ddst+64, %eax
7816; LINUX-64-STATIC-NEXT:    retq
7817;
7818; LINUX-32-STATIC-LABEL: bat04:
7819; LINUX-32-STATIC:       # %bb.0: # %entry
7820; LINUX-32-STATIC-NEXT:    movl $ddst+64, %eax
7821; LINUX-32-STATIC-NEXT:    retl
7822;
7823; LINUX-32-PIC-LABEL: bat04:
7824; LINUX-32-PIC:       # %bb.0: # %entry
7825; LINUX-32-PIC-NEXT:    calll .L94$pb
7826; LINUX-32-PIC-NEXT:  .L94$pb:
7827; LINUX-32-PIC-NEXT:    popl %eax
7828; LINUX-32-PIC-NEXT:  .Ltmp94:
7829; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp94-.L94$pb), %eax
7830; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+64(%eax), %eax
7831; LINUX-32-PIC-NEXT:    retl
7832;
7833; LINUX-64-PIC-LABEL: bat04:
7834; LINUX-64-PIC:       # %bb.0: # %entry
7835; LINUX-64-PIC-NEXT:    leaq .Lddst$local+64(%rip), %rax
7836; LINUX-64-PIC-NEXT:    retq
7837;
7838; DARWIN-32-STATIC-LABEL: bat04:
7839; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7840; DARWIN-32-STATIC-NEXT:    movl $_ddst+64, %eax
7841; DARWIN-32-STATIC-NEXT:    retl
7842;
7843; DARWIN-32-DYNAMIC-LABEL: bat04:
7844; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7845; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+64, %eax
7846; DARWIN-32-DYNAMIC-NEXT:    retl
7847;
7848; DARWIN-32-PIC-LABEL: bat04:
7849; DARWIN-32-PIC:       ## %bb.0: ## %entry
7850; DARWIN-32-PIC-NEXT:    calll L94$pb
7851; DARWIN-32-PIC-NEXT:  L94$pb:
7852; DARWIN-32-PIC-NEXT:    popl %eax
7853; DARWIN-32-PIC-NEXT:    leal (_ddst-L94$pb)+64(%eax), %eax
7854; DARWIN-32-PIC-NEXT:    retl
7855;
7856; DARWIN-64-STATIC-LABEL: bat04:
7857; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7858; DARWIN-64-STATIC-NEXT:    leaq _ddst+64(%rip), %rax
7859; DARWIN-64-STATIC-NEXT:    retq
7860;
7861; DARWIN-64-DYNAMIC-LABEL: bat04:
7862; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7863; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+64(%rip), %rax
7864; DARWIN-64-DYNAMIC-NEXT:    retq
7865;
7866; DARWIN-64-PIC-LABEL: bat04:
7867; DARWIN-64-PIC:       ## %bb.0: ## %entry
7868; DARWIN-64-PIC-NEXT:    leaq _ddst+64(%rip), %rax
7869; DARWIN-64-PIC-NEXT:    retq
7870
7871entry:
7872	ret ptr getelementptr ([131072 x i32], ptr @ddst, i32 0, i64 16)
7873}
7874
7875define dso_local ptr @bat05() nounwind {
7876; LINUX-64-STATIC-LABEL: bat05:
7877; LINUX-64-STATIC:       # %bb.0: # %entry
7878; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
7879; LINUX-64-STATIC-NEXT:    addq $64, %rax
7880; LINUX-64-STATIC-NEXT:    retq
7881;
7882; LINUX-32-STATIC-LABEL: bat05:
7883; LINUX-32-STATIC:       # %bb.0: # %entry
7884; LINUX-32-STATIC-NEXT:    movl dptr, %eax
7885; LINUX-32-STATIC-NEXT:    addl $64, %eax
7886; LINUX-32-STATIC-NEXT:    retl
7887;
7888; LINUX-32-PIC-LABEL: bat05:
7889; LINUX-32-PIC:       # %bb.0: # %entry
7890; LINUX-32-PIC-NEXT:    calll .L95$pb
7891; LINUX-32-PIC-NEXT:  .L95$pb:
7892; LINUX-32-PIC-NEXT:    popl %eax
7893; LINUX-32-PIC-NEXT:  .Ltmp95:
7894; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp95-.L95$pb), %eax
7895; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
7896; LINUX-32-PIC-NEXT:    addl $64, %eax
7897; LINUX-32-PIC-NEXT:    retl
7898;
7899; LINUX-64-PIC-LABEL: bat05:
7900; LINUX-64-PIC:       # %bb.0: # %entry
7901; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rax
7902; LINUX-64-PIC-NEXT:    addq $64, %rax
7903; LINUX-64-PIC-NEXT:    retq
7904;
7905; DARWIN-32-STATIC-LABEL: bat05:
7906; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7907; DARWIN-32-STATIC-NEXT:    movl _dptr, %eax
7908; DARWIN-32-STATIC-NEXT:    addl $64, %eax
7909; DARWIN-32-STATIC-NEXT:    retl
7910;
7911; DARWIN-32-DYNAMIC-LABEL: bat05:
7912; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7913; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %eax
7914; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
7915; DARWIN-32-DYNAMIC-NEXT:    retl
7916;
7917; DARWIN-32-PIC-LABEL: bat05:
7918; DARWIN-32-PIC:       ## %bb.0: ## %entry
7919; DARWIN-32-PIC-NEXT:    calll L95$pb
7920; DARWIN-32-PIC-NEXT:  L95$pb:
7921; DARWIN-32-PIC-NEXT:    popl %eax
7922; DARWIN-32-PIC-NEXT:    movl _dptr-L95$pb(%eax), %eax
7923; DARWIN-32-PIC-NEXT:    addl $64, %eax
7924; DARWIN-32-PIC-NEXT:    retl
7925;
7926; DARWIN-64-STATIC-LABEL: bat05:
7927; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7928; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
7929; DARWIN-64-STATIC-NEXT:    addq $64, %rax
7930; DARWIN-64-STATIC-NEXT:    retq
7931;
7932; DARWIN-64-DYNAMIC-LABEL: bat05:
7933; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
7934; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
7935; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
7936; DARWIN-64-DYNAMIC-NEXT:    retq
7937;
7938; DARWIN-64-PIC-LABEL: bat05:
7939; DARWIN-64-PIC:       ## %bb.0: ## %entry
7940; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
7941; DARWIN-64-PIC-NEXT:    addq $64, %rax
7942; DARWIN-64-PIC-NEXT:    retq
7943
7944entry:
7945	%0 = load ptr, ptr @dptr, align 8
7946	%1 = getelementptr i32, ptr %0, i64 16
7947	ret ptr %1
7948}
7949
7950define dso_local ptr @bat06() nounwind {
7951; LINUX-64-STATIC-LABEL: bat06:
7952; LINUX-64-STATIC:       # %bb.0: # %entry
7953; LINUX-64-STATIC-NEXT:    movl $lsrc+64, %eax
7954; LINUX-64-STATIC-NEXT:    retq
7955;
7956; LINUX-32-STATIC-LABEL: bat06:
7957; LINUX-32-STATIC:       # %bb.0: # %entry
7958; LINUX-32-STATIC-NEXT:    movl $lsrc+64, %eax
7959; LINUX-32-STATIC-NEXT:    retl
7960;
7961; LINUX-32-PIC-LABEL: bat06:
7962; LINUX-32-PIC:       # %bb.0: # %entry
7963; LINUX-32-PIC-NEXT:    calll .L96$pb
7964; LINUX-32-PIC-NEXT:  .L96$pb:
7965; LINUX-32-PIC-NEXT:    popl %eax
7966; LINUX-32-PIC-NEXT:  .Ltmp96:
7967; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp96-.L96$pb), %eax
7968; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+64(%eax), %eax
7969; LINUX-32-PIC-NEXT:    retl
7970;
7971; LINUX-64-PIC-LABEL: bat06:
7972; LINUX-64-PIC:       # %bb.0: # %entry
7973; LINUX-64-PIC-NEXT:    leaq lsrc+64(%rip), %rax
7974; LINUX-64-PIC-NEXT:    retq
7975;
7976; DARWIN-32-STATIC-LABEL: bat06:
7977; DARWIN-32-STATIC:       ## %bb.0: ## %entry
7978; DARWIN-32-STATIC-NEXT:    movl $_lsrc+64, %eax
7979; DARWIN-32-STATIC-NEXT:    retl
7980;
7981; DARWIN-32-DYNAMIC-LABEL: bat06:
7982; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
7983; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc+64, %eax
7984; DARWIN-32-DYNAMIC-NEXT:    retl
7985;
7986; DARWIN-32-PIC-LABEL: bat06:
7987; DARWIN-32-PIC:       ## %bb.0: ## %entry
7988; DARWIN-32-PIC-NEXT:    calll L96$pb
7989; DARWIN-32-PIC-NEXT:  L96$pb:
7990; DARWIN-32-PIC-NEXT:    popl %eax
7991; DARWIN-32-PIC-NEXT:    leal (_lsrc-L96$pb)+64(%eax), %eax
7992; DARWIN-32-PIC-NEXT:    retl
7993;
7994; DARWIN-64-STATIC-LABEL: bat06:
7995; DARWIN-64-STATIC:       ## %bb.0: ## %entry
7996; DARWIN-64-STATIC-NEXT:    leaq _lsrc+64(%rip), %rax
7997; DARWIN-64-STATIC-NEXT:    retq
7998;
7999; DARWIN-64-DYNAMIC-LABEL: bat06:
8000; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8001; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc+64(%rip), %rax
8002; DARWIN-64-DYNAMIC-NEXT:    retq
8003;
8004; DARWIN-64-PIC-LABEL: bat06:
8005; DARWIN-64-PIC:       ## %bb.0: ## %entry
8006; DARWIN-64-PIC-NEXT:    leaq _lsrc+64(%rip), %rax
8007; DARWIN-64-PIC-NEXT:    retq
8008
8009entry:
8010	ret ptr getelementptr ([131072 x i32], ptr @lsrc, i32 0, i64 16)
8011}
8012
8013define dso_local ptr @bat07() nounwind {
8014; LINUX-64-STATIC-LABEL: bat07:
8015; LINUX-64-STATIC:       # %bb.0: # %entry
8016; LINUX-64-STATIC-NEXT:    movl $ldst+64, %eax
8017; LINUX-64-STATIC-NEXT:    retq
8018;
8019; LINUX-32-STATIC-LABEL: bat07:
8020; LINUX-32-STATIC:       # %bb.0: # %entry
8021; LINUX-32-STATIC-NEXT:    movl $ldst+64, %eax
8022; LINUX-32-STATIC-NEXT:    retl
8023;
8024; LINUX-32-PIC-LABEL: bat07:
8025; LINUX-32-PIC:       # %bb.0: # %entry
8026; LINUX-32-PIC-NEXT:    calll .L97$pb
8027; LINUX-32-PIC-NEXT:  .L97$pb:
8028; LINUX-32-PIC-NEXT:    popl %eax
8029; LINUX-32-PIC-NEXT:  .Ltmp97:
8030; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp97-.L97$pb), %eax
8031; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax), %eax
8032; LINUX-32-PIC-NEXT:    retl
8033;
8034; LINUX-64-PIC-LABEL: bat07:
8035; LINUX-64-PIC:       # %bb.0: # %entry
8036; LINUX-64-PIC-NEXT:    leaq ldst+64(%rip), %rax
8037; LINUX-64-PIC-NEXT:    retq
8038;
8039; DARWIN-32-STATIC-LABEL: bat07:
8040; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8041; DARWIN-32-STATIC-NEXT:    movl $_ldst+64, %eax
8042; DARWIN-32-STATIC-NEXT:    retl
8043;
8044; DARWIN-32-DYNAMIC-LABEL: bat07:
8045; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8046; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+64, %eax
8047; DARWIN-32-DYNAMIC-NEXT:    retl
8048;
8049; DARWIN-32-PIC-LABEL: bat07:
8050; DARWIN-32-PIC:       ## %bb.0: ## %entry
8051; DARWIN-32-PIC-NEXT:    calll L97$pb
8052; DARWIN-32-PIC-NEXT:  L97$pb:
8053; DARWIN-32-PIC-NEXT:    popl %eax
8054; DARWIN-32-PIC-NEXT:    leal (_ldst-L97$pb)+64(%eax), %eax
8055; DARWIN-32-PIC-NEXT:    retl
8056;
8057; DARWIN-64-STATIC-LABEL: bat07:
8058; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8059; DARWIN-64-STATIC-NEXT:    leaq _ldst+64(%rip), %rax
8060; DARWIN-64-STATIC-NEXT:    retq
8061;
8062; DARWIN-64-DYNAMIC-LABEL: bat07:
8063; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8064; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+64(%rip), %rax
8065; DARWIN-64-DYNAMIC-NEXT:    retq
8066;
8067; DARWIN-64-PIC-LABEL: bat07:
8068; DARWIN-64-PIC:       ## %bb.0: ## %entry
8069; DARWIN-64-PIC-NEXT:    leaq _ldst+64(%rip), %rax
8070; DARWIN-64-PIC-NEXT:    retq
8071
8072entry:
8073	ret ptr getelementptr ([131072 x i32], ptr @ldst, i32 0, i64 16)
8074}
8075
8076define dso_local ptr @bat08() nounwind {
8077; LINUX-64-STATIC-LABEL: bat08:
8078; LINUX-64-STATIC:       # %bb.0: # %entry
8079; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
8080; LINUX-64-STATIC-NEXT:    addq $64, %rax
8081; LINUX-64-STATIC-NEXT:    retq
8082;
8083; LINUX-32-STATIC-LABEL: bat08:
8084; LINUX-32-STATIC:       # %bb.0: # %entry
8085; LINUX-32-STATIC-NEXT:    movl lptr, %eax
8086; LINUX-32-STATIC-NEXT:    addl $64, %eax
8087; LINUX-32-STATIC-NEXT:    retl
8088;
8089; LINUX-32-PIC-LABEL: bat08:
8090; LINUX-32-PIC:       # %bb.0: # %entry
8091; LINUX-32-PIC-NEXT:    calll .L98$pb
8092; LINUX-32-PIC-NEXT:  .L98$pb:
8093; LINUX-32-PIC-NEXT:    popl %eax
8094; LINUX-32-PIC-NEXT:  .Ltmp98:
8095; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp98-.L98$pb), %eax
8096; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
8097; LINUX-32-PIC-NEXT:    addl $64, %eax
8098; LINUX-32-PIC-NEXT:    retl
8099;
8100; LINUX-64-PIC-LABEL: bat08:
8101; LINUX-64-PIC:       # %bb.0: # %entry
8102; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
8103; LINUX-64-PIC-NEXT:    addq $64, %rax
8104; LINUX-64-PIC-NEXT:    retq
8105;
8106; DARWIN-32-STATIC-LABEL: bat08:
8107; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8108; DARWIN-32-STATIC-NEXT:    movl _lptr, %eax
8109; DARWIN-32-STATIC-NEXT:    addl $64, %eax
8110; DARWIN-32-STATIC-NEXT:    retl
8111;
8112; DARWIN-32-DYNAMIC-LABEL: bat08:
8113; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8114; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %eax
8115; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
8116; DARWIN-32-DYNAMIC-NEXT:    retl
8117;
8118; DARWIN-32-PIC-LABEL: bat08:
8119; DARWIN-32-PIC:       ## %bb.0: ## %entry
8120; DARWIN-32-PIC-NEXT:    calll L98$pb
8121; DARWIN-32-PIC-NEXT:  L98$pb:
8122; DARWIN-32-PIC-NEXT:    popl %eax
8123; DARWIN-32-PIC-NEXT:    movl _lptr-L98$pb(%eax), %eax
8124; DARWIN-32-PIC-NEXT:    addl $64, %eax
8125; DARWIN-32-PIC-NEXT:    retl
8126;
8127; DARWIN-64-STATIC-LABEL: bat08:
8128; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8129; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
8130; DARWIN-64-STATIC-NEXT:    addq $64, %rax
8131; DARWIN-64-STATIC-NEXT:    retq
8132;
8133; DARWIN-64-DYNAMIC-LABEL: bat08:
8134; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8135; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
8136; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
8137; DARWIN-64-DYNAMIC-NEXT:    retq
8138;
8139; DARWIN-64-PIC-LABEL: bat08:
8140; DARWIN-64-PIC:       ## %bb.0: ## %entry
8141; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
8142; DARWIN-64-PIC-NEXT:    addq $64, %rax
8143; DARWIN-64-PIC-NEXT:    retq
8144
8145entry:
8146	%0 = load ptr, ptr @lptr, align 8
8147	%1 = getelementptr i32, ptr %0, i64 16
8148	ret ptr %1
8149}
8150
8151define dso_local ptr @bam00() nounwind {
8152; LINUX-64-STATIC-LABEL: bam00:
8153; LINUX-64-STATIC:       # %bb.0: # %entry
8154; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8155; LINUX-64-STATIC-NEXT:    addq src@GOTPCREL(%rip), %rax
8156; LINUX-64-STATIC-NEXT:    retq
8157;
8158; LINUX-32-STATIC-LABEL: bam00:
8159; LINUX-32-STATIC:       # %bb.0: # %entry
8160; LINUX-32-STATIC-NEXT:    leal src+262144, %eax
8161; LINUX-32-STATIC-NEXT:    retl
8162;
8163; LINUX-32-PIC-LABEL: bam00:
8164; LINUX-32-PIC:       # %bb.0: # %entry
8165; LINUX-32-PIC-NEXT:    calll .L99$pb
8166; LINUX-32-PIC-NEXT:  .L99$pb:
8167; LINUX-32-PIC-NEXT:    popl %ecx
8168; LINUX-32-PIC-NEXT:  .Ltmp99:
8169; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp99-.L99$pb), %ecx
8170; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8171; LINUX-32-PIC-NEXT:    addl src@GOT(%ecx), %eax
8172; LINUX-32-PIC-NEXT:    retl
8173;
8174; LINUX-64-PIC-LABEL: bam00:
8175; LINUX-64-PIC:       # %bb.0: # %entry
8176; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8177; LINUX-64-PIC-NEXT:    addq src@GOTPCREL(%rip), %rax
8178; LINUX-64-PIC-NEXT:    retq
8179;
8180; DARWIN-32-STATIC-LABEL: bam00:
8181; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8182; DARWIN-32-STATIC-NEXT:    movl $_src+262144, %eax
8183; DARWIN-32-STATIC-NEXT:    retl
8184;
8185; DARWIN-32-DYNAMIC-LABEL: bam00:
8186; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8187; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8188; DARWIN-32-DYNAMIC-NEXT:    addl L_src$non_lazy_ptr, %eax
8189; DARWIN-32-DYNAMIC-NEXT:    retl
8190;
8191; DARWIN-32-PIC-LABEL: bam00:
8192; DARWIN-32-PIC:       ## %bb.0: ## %entry
8193; DARWIN-32-PIC-NEXT:    calll L99$pb
8194; DARWIN-32-PIC-NEXT:  L99$pb:
8195; DARWIN-32-PIC-NEXT:    popl %ecx
8196; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8197; DARWIN-32-PIC-NEXT:    addl L_src$non_lazy_ptr-L99$pb(%ecx), %eax
8198; DARWIN-32-PIC-NEXT:    retl
8199;
8200; DARWIN-64-STATIC-LABEL: bam00:
8201; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8202; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8203; DARWIN-64-STATIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8204; DARWIN-64-STATIC-NEXT:    retq
8205;
8206; DARWIN-64-DYNAMIC-LABEL: bam00:
8207; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8208; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8209; DARWIN-64-DYNAMIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8210; DARWIN-64-DYNAMIC-NEXT:    retq
8211;
8212; DARWIN-64-PIC-LABEL: bam00:
8213; DARWIN-64-PIC:       ## %bb.0: ## %entry
8214; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8215; DARWIN-64-PIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
8216; DARWIN-64-PIC-NEXT:    retq
8217
8218entry:
8219	ret ptr getelementptr ([131072 x i32], ptr @src, i32 0, i64 65536)
8220}
8221
8222define dso_local ptr @bam01() nounwind {
8223; LINUX-64-STATIC-LABEL: bam01:
8224; LINUX-64-STATIC:       # %bb.0: # %entry
8225; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8226; LINUX-64-STATIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
8227; LINUX-64-STATIC-NEXT:    retq
8228;
8229; LINUX-32-STATIC-LABEL: bam01:
8230; LINUX-32-STATIC:       # %bb.0: # %entry
8231; LINUX-32-STATIC-NEXT:    leal dst+262144, %eax
8232; LINUX-32-STATIC-NEXT:    retl
8233;
8234; LINUX-32-PIC-LABEL: bam01:
8235; LINUX-32-PIC:       # %bb.0: # %entry
8236; LINUX-32-PIC-NEXT:    calll .L100$pb
8237; LINUX-32-PIC-NEXT:  .L100$pb:
8238; LINUX-32-PIC-NEXT:    popl %ecx
8239; LINUX-32-PIC-NEXT:  .Ltmp100:
8240; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp100-.L100$pb), %ecx
8241; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8242; LINUX-32-PIC-NEXT:    addl dst@GOT(%ecx), %eax
8243; LINUX-32-PIC-NEXT:    retl
8244;
8245; LINUX-64-PIC-LABEL: bam01:
8246; LINUX-64-PIC:       # %bb.0: # %entry
8247; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8248; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
8249; LINUX-64-PIC-NEXT:    retq
8250;
8251; DARWIN-32-STATIC-LABEL: bam01:
8252; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8253; DARWIN-32-STATIC-NEXT:    movl $_dst+262144, %eax
8254; DARWIN-32-STATIC-NEXT:    retl
8255;
8256; DARWIN-32-DYNAMIC-LABEL: bam01:
8257; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8258; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8259; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
8260; DARWIN-32-DYNAMIC-NEXT:    retl
8261;
8262; DARWIN-32-PIC-LABEL: bam01:
8263; DARWIN-32-PIC:       ## %bb.0: ## %entry
8264; DARWIN-32-PIC-NEXT:    calll L100$pb
8265; DARWIN-32-PIC-NEXT:  L100$pb:
8266; DARWIN-32-PIC-NEXT:    popl %ecx
8267; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8268; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L100$pb(%ecx), %eax
8269; DARWIN-32-PIC-NEXT:    retl
8270;
8271; DARWIN-64-STATIC-LABEL: bam01:
8272; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8273; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8274; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8275; DARWIN-64-STATIC-NEXT:    retq
8276;
8277; DARWIN-64-DYNAMIC-LABEL: bam01:
8278; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8279; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8280; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8281; DARWIN-64-DYNAMIC-NEXT:    retq
8282;
8283; DARWIN-64-PIC-LABEL: bam01:
8284; DARWIN-64-PIC:       ## %bb.0: ## %entry
8285; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8286; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
8287; DARWIN-64-PIC-NEXT:    retq
8288
8289entry:
8290	ret ptr getelementptr ([131072 x i32], ptr @dst, i32 0, i64 65536)
8291}
8292
8293define dso_local ptr @bxm01() nounwind {
8294; LINUX-64-STATIC-LABEL: bxm01:
8295; LINUX-64-STATIC:       # %bb.0: # %entry
8296; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8297; LINUX-64-STATIC-NEXT:    addq xdst@GOTPCREL(%rip), %rax
8298; LINUX-64-STATIC-NEXT:    retq
8299;
8300; LINUX-32-STATIC-LABEL: bxm01:
8301; LINUX-32-STATIC:       # %bb.0: # %entry
8302; LINUX-32-STATIC-NEXT:    leal xdst+262144, %eax
8303; LINUX-32-STATIC-NEXT:    retl
8304;
8305; LINUX-32-PIC-LABEL: bxm01:
8306; LINUX-32-PIC:       # %bb.0: # %entry
8307; LINUX-32-PIC-NEXT:    calll .L101$pb
8308; LINUX-32-PIC-NEXT:  .L101$pb:
8309; LINUX-32-PIC-NEXT:    popl %ecx
8310; LINUX-32-PIC-NEXT:  .Ltmp101:
8311; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp101-.L101$pb), %ecx
8312; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8313; LINUX-32-PIC-NEXT:    addl xdst@GOT(%ecx), %eax
8314; LINUX-32-PIC-NEXT:    retl
8315;
8316; LINUX-64-PIC-LABEL: bxm01:
8317; LINUX-64-PIC:       # %bb.0: # %entry
8318; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8319; LINUX-64-PIC-NEXT:    addq xdst@GOTPCREL(%rip), %rax
8320; LINUX-64-PIC-NEXT:    retq
8321;
8322; DARWIN-32-STATIC-LABEL: bxm01:
8323; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8324; DARWIN-32-STATIC-NEXT:    movl $_xdst+262144, %eax
8325; DARWIN-32-STATIC-NEXT:    retl
8326;
8327; DARWIN-32-DYNAMIC-LABEL: bxm01:
8328; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8329; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8330; DARWIN-32-DYNAMIC-NEXT:    addl L_xdst$non_lazy_ptr, %eax
8331; DARWIN-32-DYNAMIC-NEXT:    retl
8332;
8333; DARWIN-32-PIC-LABEL: bxm01:
8334; DARWIN-32-PIC:       ## %bb.0: ## %entry
8335; DARWIN-32-PIC-NEXT:    calll L101$pb
8336; DARWIN-32-PIC-NEXT:  L101$pb:
8337; DARWIN-32-PIC-NEXT:    popl %ecx
8338; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8339; DARWIN-32-PIC-NEXT:    addl L_xdst$non_lazy_ptr-L101$pb(%ecx), %eax
8340; DARWIN-32-PIC-NEXT:    retl
8341;
8342; DARWIN-64-STATIC-LABEL: bxm01:
8343; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8344; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8345; DARWIN-64-STATIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8346; DARWIN-64-STATIC-NEXT:    retq
8347;
8348; DARWIN-64-DYNAMIC-LABEL: bxm01:
8349; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8350; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8351; DARWIN-64-DYNAMIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8352; DARWIN-64-DYNAMIC-NEXT:    retq
8353;
8354; DARWIN-64-PIC-LABEL: bxm01:
8355; DARWIN-64-PIC:       ## %bb.0: ## %entry
8356; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8357; DARWIN-64-PIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
8358; DARWIN-64-PIC-NEXT:    retq
8359
8360entry:
8361	ret ptr getelementptr ([32 x i32], ptr @xdst, i32 0, i64 65536)
8362}
8363
8364define dso_local ptr @bam02() nounwind {
8365; LINUX-64-STATIC-LABEL: bam02:
8366; LINUX-64-STATIC:       # %bb.0: # %entry
8367; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
8368; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8369; LINUX-64-STATIC-NEXT:    addq (%rcx), %rax
8370; LINUX-64-STATIC-NEXT:    retq
8371;
8372; LINUX-32-STATIC-LABEL: bam02:
8373; LINUX-32-STATIC:       # %bb.0: # %entry
8374; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8375; LINUX-32-STATIC-NEXT:    addl ptr, %eax
8376; LINUX-32-STATIC-NEXT:    retl
8377;
8378; LINUX-32-PIC-LABEL: bam02:
8379; LINUX-32-PIC:       # %bb.0: # %entry
8380; LINUX-32-PIC-NEXT:    calll .L102$pb
8381; LINUX-32-PIC-NEXT:  .L102$pb:
8382; LINUX-32-PIC-NEXT:    popl %eax
8383; LINUX-32-PIC-NEXT:  .Ltmp102:
8384; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp102-.L102$pb), %eax
8385; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %ecx
8386; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8387; LINUX-32-PIC-NEXT:    addl (%ecx), %eax
8388; LINUX-32-PIC-NEXT:    retl
8389;
8390; LINUX-64-PIC-LABEL: bam02:
8391; LINUX-64-PIC:       # %bb.0: # %entry
8392; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
8393; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8394; LINUX-64-PIC-NEXT:    addq (%rcx), %rax
8395; LINUX-64-PIC-NEXT:    retq
8396;
8397; DARWIN-32-STATIC-LABEL: bam02:
8398; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8399; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8400; DARWIN-32-STATIC-NEXT:    addl _ptr, %eax
8401; DARWIN-32-STATIC-NEXT:    retl
8402;
8403; DARWIN-32-DYNAMIC-LABEL: bam02:
8404; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8405; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
8406; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8407; DARWIN-32-DYNAMIC-NEXT:    addl (%ecx), %eax
8408; DARWIN-32-DYNAMIC-NEXT:    retl
8409;
8410; DARWIN-32-PIC-LABEL: bam02:
8411; DARWIN-32-PIC:       ## %bb.0: ## %entry
8412; DARWIN-32-PIC-NEXT:    calll L102$pb
8413; DARWIN-32-PIC-NEXT:  L102$pb:
8414; DARWIN-32-PIC-NEXT:    popl %eax
8415; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L102$pb(%eax), %ecx
8416; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8417; DARWIN-32-PIC-NEXT:    addl (%ecx), %eax
8418; DARWIN-32-PIC-NEXT:    retl
8419;
8420; DARWIN-64-STATIC-LABEL: bam02:
8421; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8422; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8423; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8424; DARWIN-64-STATIC-NEXT:    addq (%rcx), %rax
8425; DARWIN-64-STATIC-NEXT:    retq
8426;
8427; DARWIN-64-DYNAMIC-LABEL: bam02:
8428; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8429; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8430; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8431; DARWIN-64-DYNAMIC-NEXT:    addq (%rcx), %rax
8432; DARWIN-64-DYNAMIC-NEXT:    retq
8433;
8434; DARWIN-64-PIC-LABEL: bam02:
8435; DARWIN-64-PIC:       ## %bb.0: ## %entry
8436; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
8437; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8438; DARWIN-64-PIC-NEXT:    addq (%rcx), %rax
8439; DARWIN-64-PIC-NEXT:    retq
8440
8441entry:
8442	%0 = load ptr, ptr @ptr, align 8
8443	%1 = getelementptr i32, ptr %0, i64 65536
8444	ret ptr %1
8445}
8446
8447define dso_local ptr @bam03() nounwind {
8448; LINUX-64-STATIC-LABEL: bam03:
8449; LINUX-64-STATIC:       # %bb.0: # %entry
8450; LINUX-64-STATIC-NEXT:    movl $dsrc+262144, %eax
8451; LINUX-64-STATIC-NEXT:    retq
8452;
8453; LINUX-32-STATIC-LABEL: bam03:
8454; LINUX-32-STATIC:       # %bb.0: # %entry
8455; LINUX-32-STATIC-NEXT:    movl $dsrc+262144, %eax
8456; LINUX-32-STATIC-NEXT:    retl
8457;
8458; LINUX-32-PIC-LABEL: bam03:
8459; LINUX-32-PIC:       # %bb.0: # %entry
8460; LINUX-32-PIC-NEXT:    calll .L103$pb
8461; LINUX-32-PIC-NEXT:  .L103$pb:
8462; LINUX-32-PIC-NEXT:    popl %eax
8463; LINUX-32-PIC-NEXT:  .Ltmp103:
8464; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp103-.L103$pb), %eax
8465; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF+262144(%eax), %eax
8466; LINUX-32-PIC-NEXT:    retl
8467;
8468; LINUX-64-PIC-LABEL: bam03:
8469; LINUX-64-PIC:       # %bb.0: # %entry
8470; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local+262144(%rip), %rax
8471; LINUX-64-PIC-NEXT:    retq
8472;
8473; DARWIN-32-STATIC-LABEL: bam03:
8474; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8475; DARWIN-32-STATIC-NEXT:    movl $_dsrc+262144, %eax
8476; DARWIN-32-STATIC-NEXT:    retl
8477;
8478; DARWIN-32-DYNAMIC-LABEL: bam03:
8479; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8480; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc+262144, %eax
8481; DARWIN-32-DYNAMIC-NEXT:    retl
8482;
8483; DARWIN-32-PIC-LABEL: bam03:
8484; DARWIN-32-PIC:       ## %bb.0: ## %entry
8485; DARWIN-32-PIC-NEXT:    calll L103$pb
8486; DARWIN-32-PIC-NEXT:  L103$pb:
8487; DARWIN-32-PIC-NEXT:    popl %eax
8488; DARWIN-32-PIC-NEXT:    leal (_dsrc-L103$pb)+262144(%eax), %eax
8489; DARWIN-32-PIC-NEXT:    retl
8490;
8491; DARWIN-64-STATIC-LABEL: bam03:
8492; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8493; DARWIN-64-STATIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8494; DARWIN-64-STATIC-NEXT:    retq
8495;
8496; DARWIN-64-DYNAMIC-LABEL: bam03:
8497; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8498; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8499; DARWIN-64-DYNAMIC-NEXT:    retq
8500;
8501; DARWIN-64-PIC-LABEL: bam03:
8502; DARWIN-64-PIC:       ## %bb.0: ## %entry
8503; DARWIN-64-PIC-NEXT:    leaq _dsrc+262144(%rip), %rax
8504; DARWIN-64-PIC-NEXT:    retq
8505
8506entry:
8507	ret ptr getelementptr ([131072 x i32], ptr @dsrc, i32 0, i64 65536)
8508}
8509
8510define dso_local ptr @bam04() nounwind {
8511; LINUX-64-STATIC-LABEL: bam04:
8512; LINUX-64-STATIC:       # %bb.0: # %entry
8513; LINUX-64-STATIC-NEXT:    movl $ddst+262144, %eax
8514; LINUX-64-STATIC-NEXT:    retq
8515;
8516; LINUX-32-STATIC-LABEL: bam04:
8517; LINUX-32-STATIC:       # %bb.0: # %entry
8518; LINUX-32-STATIC-NEXT:    movl $ddst+262144, %eax
8519; LINUX-32-STATIC-NEXT:    retl
8520;
8521; LINUX-32-PIC-LABEL: bam04:
8522; LINUX-32-PIC:       # %bb.0: # %entry
8523; LINUX-32-PIC-NEXT:    calll .L104$pb
8524; LINUX-32-PIC-NEXT:  .L104$pb:
8525; LINUX-32-PIC-NEXT:    popl %eax
8526; LINUX-32-PIC-NEXT:  .Ltmp104:
8527; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp104-.L104$pb), %eax
8528; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+262144(%eax), %eax
8529; LINUX-32-PIC-NEXT:    retl
8530;
8531; LINUX-64-PIC-LABEL: bam04:
8532; LINUX-64-PIC:       # %bb.0: # %entry
8533; LINUX-64-PIC-NEXT:    leaq .Lddst$local+262144(%rip), %rax
8534; LINUX-64-PIC-NEXT:    retq
8535;
8536; DARWIN-32-STATIC-LABEL: bam04:
8537; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8538; DARWIN-32-STATIC-NEXT:    movl $_ddst+262144, %eax
8539; DARWIN-32-STATIC-NEXT:    retl
8540;
8541; DARWIN-32-DYNAMIC-LABEL: bam04:
8542; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8543; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+262144, %eax
8544; DARWIN-32-DYNAMIC-NEXT:    retl
8545;
8546; DARWIN-32-PIC-LABEL: bam04:
8547; DARWIN-32-PIC:       ## %bb.0: ## %entry
8548; DARWIN-32-PIC-NEXT:    calll L104$pb
8549; DARWIN-32-PIC-NEXT:  L104$pb:
8550; DARWIN-32-PIC-NEXT:    popl %eax
8551; DARWIN-32-PIC-NEXT:    leal (_ddst-L104$pb)+262144(%eax), %eax
8552; DARWIN-32-PIC-NEXT:    retl
8553;
8554; DARWIN-64-STATIC-LABEL: bam04:
8555; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8556; DARWIN-64-STATIC-NEXT:    leaq _ddst+262144(%rip), %rax
8557; DARWIN-64-STATIC-NEXT:    retq
8558;
8559; DARWIN-64-DYNAMIC-LABEL: bam04:
8560; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8561; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+262144(%rip), %rax
8562; DARWIN-64-DYNAMIC-NEXT:    retq
8563;
8564; DARWIN-64-PIC-LABEL: bam04:
8565; DARWIN-64-PIC:       ## %bb.0: ## %entry
8566; DARWIN-64-PIC-NEXT:    leaq _ddst+262144(%rip), %rax
8567; DARWIN-64-PIC-NEXT:    retq
8568
8569entry:
8570	ret ptr getelementptr ([131072 x i32], ptr @ddst, i32 0, i64 65536)
8571}
8572
8573define dso_local ptr @bam05() nounwind {
8574; LINUX-64-STATIC-LABEL: bam05:
8575; LINUX-64-STATIC:       # %bb.0: # %entry
8576; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8577; LINUX-64-STATIC-NEXT:    addq dptr(%rip), %rax
8578; LINUX-64-STATIC-NEXT:    retq
8579;
8580; LINUX-32-STATIC-LABEL: bam05:
8581; LINUX-32-STATIC:       # %bb.0: # %entry
8582; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8583; LINUX-32-STATIC-NEXT:    addl dptr, %eax
8584; LINUX-32-STATIC-NEXT:    retl
8585;
8586; LINUX-32-PIC-LABEL: bam05:
8587; LINUX-32-PIC:       # %bb.0: # %entry
8588; LINUX-32-PIC-NEXT:    calll .L105$pb
8589; LINUX-32-PIC-NEXT:  .L105$pb:
8590; LINUX-32-PIC-NEXT:    popl %ecx
8591; LINUX-32-PIC-NEXT:  .Ltmp105:
8592; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp105-.L105$pb), %ecx
8593; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8594; LINUX-32-PIC-NEXT:    addl .Ldptr$local@GOTOFF(%ecx), %eax
8595; LINUX-32-PIC-NEXT:    retl
8596;
8597; LINUX-64-PIC-LABEL: bam05:
8598; LINUX-64-PIC:       # %bb.0: # %entry
8599; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8600; LINUX-64-PIC-NEXT:    addq .Ldptr$local(%rip), %rax
8601; LINUX-64-PIC-NEXT:    retq
8602;
8603; DARWIN-32-STATIC-LABEL: bam05:
8604; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8605; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8606; DARWIN-32-STATIC-NEXT:    addl _dptr, %eax
8607; DARWIN-32-STATIC-NEXT:    retl
8608;
8609; DARWIN-32-DYNAMIC-LABEL: bam05:
8610; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8611; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8612; DARWIN-32-DYNAMIC-NEXT:    addl _dptr, %eax
8613; DARWIN-32-DYNAMIC-NEXT:    retl
8614;
8615; DARWIN-32-PIC-LABEL: bam05:
8616; DARWIN-32-PIC:       ## %bb.0: ## %entry
8617; DARWIN-32-PIC-NEXT:    calll L105$pb
8618; DARWIN-32-PIC-NEXT:  L105$pb:
8619; DARWIN-32-PIC-NEXT:    popl %ecx
8620; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8621; DARWIN-32-PIC-NEXT:    addl _dptr-L105$pb(%ecx), %eax
8622; DARWIN-32-PIC-NEXT:    retl
8623;
8624; DARWIN-64-STATIC-LABEL: bam05:
8625; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8626; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8627; DARWIN-64-STATIC-NEXT:    addq _dptr(%rip), %rax
8628; DARWIN-64-STATIC-NEXT:    retq
8629;
8630; DARWIN-64-DYNAMIC-LABEL: bam05:
8631; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8632; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8633; DARWIN-64-DYNAMIC-NEXT:    addq _dptr(%rip), %rax
8634; DARWIN-64-DYNAMIC-NEXT:    retq
8635;
8636; DARWIN-64-PIC-LABEL: bam05:
8637; DARWIN-64-PIC:       ## %bb.0: ## %entry
8638; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8639; DARWIN-64-PIC-NEXT:    addq _dptr(%rip), %rax
8640; DARWIN-64-PIC-NEXT:    retq
8641
8642entry:
8643	%0 = load ptr, ptr @dptr, align 8
8644	%1 = getelementptr i32, ptr %0, i64 65536
8645	ret ptr %1
8646}
8647
8648define dso_local ptr @bam06() nounwind {
8649; LINUX-64-STATIC-LABEL: bam06:
8650; LINUX-64-STATIC:       # %bb.0: # %entry
8651; LINUX-64-STATIC-NEXT:    movl $lsrc+262144, %eax
8652; LINUX-64-STATIC-NEXT:    retq
8653;
8654; LINUX-32-STATIC-LABEL: bam06:
8655; LINUX-32-STATIC:       # %bb.0: # %entry
8656; LINUX-32-STATIC-NEXT:    movl $lsrc+262144, %eax
8657; LINUX-32-STATIC-NEXT:    retl
8658;
8659; LINUX-32-PIC-LABEL: bam06:
8660; LINUX-32-PIC:       # %bb.0: # %entry
8661; LINUX-32-PIC-NEXT:    calll .L106$pb
8662; LINUX-32-PIC-NEXT:  .L106$pb:
8663; LINUX-32-PIC-NEXT:    popl %eax
8664; LINUX-32-PIC-NEXT:  .Ltmp106:
8665; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp106-.L106$pb), %eax
8666; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+262144(%eax), %eax
8667; LINUX-32-PIC-NEXT:    retl
8668;
8669; LINUX-64-PIC-LABEL: bam06:
8670; LINUX-64-PIC:       # %bb.0: # %entry
8671; LINUX-64-PIC-NEXT:    leaq lsrc+262144(%rip), %rax
8672; LINUX-64-PIC-NEXT:    retq
8673;
8674; DARWIN-32-STATIC-LABEL: bam06:
8675; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8676; DARWIN-32-STATIC-NEXT:    movl $_lsrc+262144, %eax
8677; DARWIN-32-STATIC-NEXT:    retl
8678;
8679; DARWIN-32-DYNAMIC-LABEL: bam06:
8680; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8681; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc+262144, %eax
8682; DARWIN-32-DYNAMIC-NEXT:    retl
8683;
8684; DARWIN-32-PIC-LABEL: bam06:
8685; DARWIN-32-PIC:       ## %bb.0: ## %entry
8686; DARWIN-32-PIC-NEXT:    calll L106$pb
8687; DARWIN-32-PIC-NEXT:  L106$pb:
8688; DARWIN-32-PIC-NEXT:    popl %eax
8689; DARWIN-32-PIC-NEXT:    leal (_lsrc-L106$pb)+262144(%eax), %eax
8690; DARWIN-32-PIC-NEXT:    retl
8691;
8692; DARWIN-64-STATIC-LABEL: bam06:
8693; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8694; DARWIN-64-STATIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8695; DARWIN-64-STATIC-NEXT:    retq
8696;
8697; DARWIN-64-DYNAMIC-LABEL: bam06:
8698; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8699; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8700; DARWIN-64-DYNAMIC-NEXT:    retq
8701;
8702; DARWIN-64-PIC-LABEL: bam06:
8703; DARWIN-64-PIC:       ## %bb.0: ## %entry
8704; DARWIN-64-PIC-NEXT:    leaq _lsrc+262144(%rip), %rax
8705; DARWIN-64-PIC-NEXT:    retq
8706
8707entry:
8708	ret ptr getelementptr ([131072 x i32], ptr @lsrc, i32 0, i64 65536)
8709}
8710
8711define dso_local ptr @bam07() nounwind {
8712; LINUX-64-STATIC-LABEL: bam07:
8713; LINUX-64-STATIC:       # %bb.0: # %entry
8714; LINUX-64-STATIC-NEXT:    movl $ldst+262144, %eax
8715; LINUX-64-STATIC-NEXT:    retq
8716;
8717; LINUX-32-STATIC-LABEL: bam07:
8718; LINUX-32-STATIC:       # %bb.0: # %entry
8719; LINUX-32-STATIC-NEXT:    movl $ldst+262144, %eax
8720; LINUX-32-STATIC-NEXT:    retl
8721;
8722; LINUX-32-PIC-LABEL: bam07:
8723; LINUX-32-PIC:       # %bb.0: # %entry
8724; LINUX-32-PIC-NEXT:    calll .L107$pb
8725; LINUX-32-PIC-NEXT:  .L107$pb:
8726; LINUX-32-PIC-NEXT:    popl %eax
8727; LINUX-32-PIC-NEXT:  .Ltmp107:
8728; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp107-.L107$pb), %eax
8729; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax), %eax
8730; LINUX-32-PIC-NEXT:    retl
8731;
8732; LINUX-64-PIC-LABEL: bam07:
8733; LINUX-64-PIC:       # %bb.0: # %entry
8734; LINUX-64-PIC-NEXT:    leaq ldst+262144(%rip), %rax
8735; LINUX-64-PIC-NEXT:    retq
8736;
8737; DARWIN-32-STATIC-LABEL: bam07:
8738; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8739; DARWIN-32-STATIC-NEXT:    movl $_ldst+262144, %eax
8740; DARWIN-32-STATIC-NEXT:    retl
8741;
8742; DARWIN-32-DYNAMIC-LABEL: bam07:
8743; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8744; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+262144, %eax
8745; DARWIN-32-DYNAMIC-NEXT:    retl
8746;
8747; DARWIN-32-PIC-LABEL: bam07:
8748; DARWIN-32-PIC:       ## %bb.0: ## %entry
8749; DARWIN-32-PIC-NEXT:    calll L107$pb
8750; DARWIN-32-PIC-NEXT:  L107$pb:
8751; DARWIN-32-PIC-NEXT:    popl %eax
8752; DARWIN-32-PIC-NEXT:    leal (_ldst-L107$pb)+262144(%eax), %eax
8753; DARWIN-32-PIC-NEXT:    retl
8754;
8755; DARWIN-64-STATIC-LABEL: bam07:
8756; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8757; DARWIN-64-STATIC-NEXT:    leaq _ldst+262144(%rip), %rax
8758; DARWIN-64-STATIC-NEXT:    retq
8759;
8760; DARWIN-64-DYNAMIC-LABEL: bam07:
8761; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8762; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+262144(%rip), %rax
8763; DARWIN-64-DYNAMIC-NEXT:    retq
8764;
8765; DARWIN-64-PIC-LABEL: bam07:
8766; DARWIN-64-PIC:       ## %bb.0: ## %entry
8767; DARWIN-64-PIC-NEXT:    leaq _ldst+262144(%rip), %rax
8768; DARWIN-64-PIC-NEXT:    retq
8769
8770entry:
8771	ret ptr getelementptr ([131072 x i32], ptr @ldst, i32 0, i64 65536)
8772}
8773
8774define dso_local ptr @bam08() nounwind {
8775; LINUX-64-STATIC-LABEL: bam08:
8776; LINUX-64-STATIC:       # %bb.0: # %entry
8777; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8778; LINUX-64-STATIC-NEXT:    addq lptr(%rip), %rax
8779; LINUX-64-STATIC-NEXT:    retq
8780;
8781; LINUX-32-STATIC-LABEL: bam08:
8782; LINUX-32-STATIC:       # %bb.0: # %entry
8783; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
8784; LINUX-32-STATIC-NEXT:    addl lptr, %eax
8785; LINUX-32-STATIC-NEXT:    retl
8786;
8787; LINUX-32-PIC-LABEL: bam08:
8788; LINUX-32-PIC:       # %bb.0: # %entry
8789; LINUX-32-PIC-NEXT:    calll .L108$pb
8790; LINUX-32-PIC-NEXT:  .L108$pb:
8791; LINUX-32-PIC-NEXT:    popl %ecx
8792; LINUX-32-PIC-NEXT:  .Ltmp108:
8793; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp108-.L108$pb), %ecx
8794; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8795; LINUX-32-PIC-NEXT:    addl lptr@GOTOFF(%ecx), %eax
8796; LINUX-32-PIC-NEXT:    retl
8797;
8798; LINUX-64-PIC-LABEL: bam08:
8799; LINUX-64-PIC:       # %bb.0: # %entry
8800; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
8801; LINUX-64-PIC-NEXT:    addq lptr(%rip), %rax
8802; LINUX-64-PIC-NEXT:    retq
8803;
8804; DARWIN-32-STATIC-LABEL: bam08:
8805; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8806; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8807; DARWIN-32-STATIC-NEXT:    addl _lptr, %eax
8808; DARWIN-32-STATIC-NEXT:    retl
8809;
8810; DARWIN-32-DYNAMIC-LABEL: bam08:
8811; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8812; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8813; DARWIN-32-DYNAMIC-NEXT:    addl _lptr, %eax
8814; DARWIN-32-DYNAMIC-NEXT:    retl
8815;
8816; DARWIN-32-PIC-LABEL: bam08:
8817; DARWIN-32-PIC:       ## %bb.0: ## %entry
8818; DARWIN-32-PIC-NEXT:    calll L108$pb
8819; DARWIN-32-PIC-NEXT:  L108$pb:
8820; DARWIN-32-PIC-NEXT:    popl %ecx
8821; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8822; DARWIN-32-PIC-NEXT:    addl _lptr-L108$pb(%ecx), %eax
8823; DARWIN-32-PIC-NEXT:    retl
8824;
8825; DARWIN-64-STATIC-LABEL: bam08:
8826; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8827; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8828; DARWIN-64-STATIC-NEXT:    addq _lptr(%rip), %rax
8829; DARWIN-64-STATIC-NEXT:    retq
8830;
8831; DARWIN-64-DYNAMIC-LABEL: bam08:
8832; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8833; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8834; DARWIN-64-DYNAMIC-NEXT:    addq _lptr(%rip), %rax
8835; DARWIN-64-DYNAMIC-NEXT:    retq
8836;
8837; DARWIN-64-PIC-LABEL: bam08:
8838; DARWIN-64-PIC:       ## %bb.0: ## %entry
8839; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
8840; DARWIN-64-PIC-NEXT:    addq _lptr(%rip), %rax
8841; DARWIN-64-PIC-NEXT:    retq
8842
8843entry:
8844	%0 = load ptr, ptr @lptr, align 8
8845	%1 = getelementptr i32, ptr %0, i64 65536
8846	ret ptr %1
8847}
8848
8849define dso_local ptr @cat00(i64 %i) nounwind {
8850; LINUX-64-STATIC-LABEL: cat00:
8851; LINUX-64-STATIC:       # %bb.0: # %entry
8852; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
8853; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8854; LINUX-64-STATIC-NEXT:    retq
8855;
8856; LINUX-32-STATIC-LABEL: cat00:
8857; LINUX-32-STATIC:       # %bb.0: # %entry
8858; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8859; LINUX-32-STATIC-NEXT:    leal src+64(,%eax,4), %eax
8860; LINUX-32-STATIC-NEXT:    retl
8861;
8862; LINUX-32-PIC-LABEL: cat00:
8863; LINUX-32-PIC:       # %bb.0: # %entry
8864; LINUX-32-PIC-NEXT:    calll .L109$pb
8865; LINUX-32-PIC-NEXT:  .L109$pb:
8866; LINUX-32-PIC-NEXT:    popl %eax
8867; LINUX-32-PIC-NEXT:  .Ltmp109:
8868; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp109-.L109$pb), %eax
8869; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8870; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
8871; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8872; LINUX-32-PIC-NEXT:    retl
8873;
8874; LINUX-64-PIC-LABEL: cat00:
8875; LINUX-64-PIC:       # %bb.0: # %entry
8876; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
8877; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8878; LINUX-64-PIC-NEXT:    retq
8879;
8880; DARWIN-32-STATIC-LABEL: cat00:
8881; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8882; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8883; DARWIN-32-STATIC-NEXT:    leal _src+64(,%eax,4), %eax
8884; DARWIN-32-STATIC-NEXT:    retl
8885;
8886; DARWIN-32-DYNAMIC-LABEL: cat00:
8887; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8888; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8889; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
8890; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
8891; DARWIN-32-DYNAMIC-NEXT:    retl
8892;
8893; DARWIN-32-PIC-LABEL: cat00:
8894; DARWIN-32-PIC:       ## %bb.0: ## %entry
8895; DARWIN-32-PIC-NEXT:    calll L109$pb
8896; DARWIN-32-PIC-NEXT:  L109$pb:
8897; DARWIN-32-PIC-NEXT:    popl %eax
8898; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8899; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L109$pb(%eax), %eax
8900; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8901; DARWIN-32-PIC-NEXT:    retl
8902;
8903; DARWIN-64-STATIC-LABEL: cat00:
8904; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8905; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8906; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8907; DARWIN-64-STATIC-NEXT:    retq
8908;
8909; DARWIN-64-DYNAMIC-LABEL: cat00:
8910; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8911; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8912; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8913; DARWIN-64-DYNAMIC-NEXT:    retq
8914;
8915; DARWIN-64-PIC-LABEL: cat00:
8916; DARWIN-64-PIC:       ## %bb.0: ## %entry
8917; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
8918; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8919; DARWIN-64-PIC-NEXT:    retq
8920
8921entry:
8922	%0 = add i64 %i, 16
8923	%1 = getelementptr [131072 x i32], ptr @src, i64 0, i64 %0
8924	ret ptr %1
8925}
8926
8927define dso_local ptr @cxt00(i64 %i) nounwind {
8928; LINUX-64-STATIC-LABEL: cxt00:
8929; LINUX-64-STATIC:       # %bb.0: # %entry
8930; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
8931; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8932; LINUX-64-STATIC-NEXT:    retq
8933;
8934; LINUX-32-STATIC-LABEL: cxt00:
8935; LINUX-32-STATIC:       # %bb.0: # %entry
8936; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8937; LINUX-32-STATIC-NEXT:    leal xsrc+64(,%eax,4), %eax
8938; LINUX-32-STATIC-NEXT:    retl
8939;
8940; LINUX-32-PIC-LABEL: cxt00:
8941; LINUX-32-PIC:       # %bb.0: # %entry
8942; LINUX-32-PIC-NEXT:    calll .L110$pb
8943; LINUX-32-PIC-NEXT:  .L110$pb:
8944; LINUX-32-PIC-NEXT:    popl %eax
8945; LINUX-32-PIC-NEXT:  .Ltmp110:
8946; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp110-.L110$pb), %eax
8947; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8948; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
8949; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8950; LINUX-32-PIC-NEXT:    retl
8951;
8952; LINUX-64-PIC-LABEL: cxt00:
8953; LINUX-64-PIC:       # %bb.0: # %entry
8954; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
8955; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8956; LINUX-64-PIC-NEXT:    retq
8957;
8958; DARWIN-32-STATIC-LABEL: cxt00:
8959; DARWIN-32-STATIC:       ## %bb.0: ## %entry
8960; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8961; DARWIN-32-STATIC-NEXT:    leal _xsrc+64(,%eax,4), %eax
8962; DARWIN-32-STATIC-NEXT:    retl
8963;
8964; DARWIN-32-DYNAMIC-LABEL: cxt00:
8965; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
8966; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
8967; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
8968; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
8969; DARWIN-32-DYNAMIC-NEXT:    retl
8970;
8971; DARWIN-32-PIC-LABEL: cxt00:
8972; DARWIN-32-PIC:       ## %bb.0: ## %entry
8973; DARWIN-32-PIC-NEXT:    calll L110$pb
8974; DARWIN-32-PIC-NEXT:  L110$pb:
8975; DARWIN-32-PIC-NEXT:    popl %eax
8976; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
8977; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L110$pb(%eax), %eax
8978; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
8979; DARWIN-32-PIC-NEXT:    retl
8980;
8981; DARWIN-64-STATIC-LABEL: cxt00:
8982; DARWIN-64-STATIC:       ## %bb.0: ## %entry
8983; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
8984; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8985; DARWIN-64-STATIC-NEXT:    retq
8986;
8987; DARWIN-64-DYNAMIC-LABEL: cxt00:
8988; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
8989; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
8990; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8991; DARWIN-64-DYNAMIC-NEXT:    retq
8992;
8993; DARWIN-64-PIC-LABEL: cxt00:
8994; DARWIN-64-PIC:       ## %bb.0: ## %entry
8995; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
8996; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
8997; DARWIN-64-PIC-NEXT:    retq
8998
8999entry:
9000	%0 = add i64 %i, 16
9001	%1 = getelementptr [32 x i32], ptr @xsrc, i64 0, i64 %0
9002	ret ptr %1
9003}
9004
9005define dso_local ptr @cat01(i64 %i) nounwind {
9006; LINUX-64-STATIC-LABEL: cat01:
9007; LINUX-64-STATIC:       # %bb.0: # %entry
9008; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9009; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9010; LINUX-64-STATIC-NEXT:    retq
9011;
9012; LINUX-32-STATIC-LABEL: cat01:
9013; LINUX-32-STATIC:       # %bb.0: # %entry
9014; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9015; LINUX-32-STATIC-NEXT:    leal dst+64(,%eax,4), %eax
9016; LINUX-32-STATIC-NEXT:    retl
9017;
9018; LINUX-32-PIC-LABEL: cat01:
9019; LINUX-32-PIC:       # %bb.0: # %entry
9020; LINUX-32-PIC-NEXT:    calll .L111$pb
9021; LINUX-32-PIC-NEXT:  .L111$pb:
9022; LINUX-32-PIC-NEXT:    popl %eax
9023; LINUX-32-PIC-NEXT:  .Ltmp111:
9024; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp111-.L111$pb), %eax
9025; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9026; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
9027; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9028; LINUX-32-PIC-NEXT:    retl
9029;
9030; LINUX-64-PIC-LABEL: cat01:
9031; LINUX-64-PIC:       # %bb.0: # %entry
9032; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9033; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9034; LINUX-64-PIC-NEXT:    retq
9035;
9036; DARWIN-32-STATIC-LABEL: cat01:
9037; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9038; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9039; DARWIN-32-STATIC-NEXT:    leal _dst+64(,%eax,4), %eax
9040; DARWIN-32-STATIC-NEXT:    retl
9041;
9042; DARWIN-32-DYNAMIC-LABEL: cat01:
9043; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9044; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9045; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
9046; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9047; DARWIN-32-DYNAMIC-NEXT:    retl
9048;
9049; DARWIN-32-PIC-LABEL: cat01:
9050; DARWIN-32-PIC:       ## %bb.0: ## %entry
9051; DARWIN-32-PIC-NEXT:    calll L111$pb
9052; DARWIN-32-PIC-NEXT:  L111$pb:
9053; DARWIN-32-PIC-NEXT:    popl %eax
9054; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9055; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L111$pb(%eax), %eax
9056; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9057; DARWIN-32-PIC-NEXT:    retl
9058;
9059; DARWIN-64-STATIC-LABEL: cat01:
9060; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9061; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9062; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9063; DARWIN-64-STATIC-NEXT:    retq
9064;
9065; DARWIN-64-DYNAMIC-LABEL: cat01:
9066; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9067; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9068; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9069; DARWIN-64-DYNAMIC-NEXT:    retq
9070;
9071; DARWIN-64-PIC-LABEL: cat01:
9072; DARWIN-64-PIC:       ## %bb.0: ## %entry
9073; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9074; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9075; DARWIN-64-PIC-NEXT:    retq
9076
9077entry:
9078	%0 = add i64 %i, 16
9079	%1 = getelementptr [131072 x i32], ptr @dst, i64 0, i64 %0
9080	ret ptr %1
9081}
9082
9083define dso_local ptr @cxt01(i64 %i) nounwind {
9084; LINUX-64-STATIC-LABEL: cxt01:
9085; LINUX-64-STATIC:       # %bb.0: # %entry
9086; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9087; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9088; LINUX-64-STATIC-NEXT:    retq
9089;
9090; LINUX-32-STATIC-LABEL: cxt01:
9091; LINUX-32-STATIC:       # %bb.0: # %entry
9092; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9093; LINUX-32-STATIC-NEXT:    leal xdst+64(,%eax,4), %eax
9094; LINUX-32-STATIC-NEXT:    retl
9095;
9096; LINUX-32-PIC-LABEL: cxt01:
9097; LINUX-32-PIC:       # %bb.0: # %entry
9098; LINUX-32-PIC-NEXT:    calll .L112$pb
9099; LINUX-32-PIC-NEXT:  .L112$pb:
9100; LINUX-32-PIC-NEXT:    popl %eax
9101; LINUX-32-PIC-NEXT:  .Ltmp112:
9102; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp112-.L112$pb), %eax
9103; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9104; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
9105; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9106; LINUX-32-PIC-NEXT:    retl
9107;
9108; LINUX-64-PIC-LABEL: cxt01:
9109; LINUX-64-PIC:       # %bb.0: # %entry
9110; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9111; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9112; LINUX-64-PIC-NEXT:    retq
9113;
9114; DARWIN-32-STATIC-LABEL: cxt01:
9115; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9116; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9117; DARWIN-32-STATIC-NEXT:    leal _xdst+64(,%eax,4), %eax
9118; DARWIN-32-STATIC-NEXT:    retl
9119;
9120; DARWIN-32-DYNAMIC-LABEL: cxt01:
9121; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9122; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9123; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
9124; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9125; DARWIN-32-DYNAMIC-NEXT:    retl
9126;
9127; DARWIN-32-PIC-LABEL: cxt01:
9128; DARWIN-32-PIC:       ## %bb.0: ## %entry
9129; DARWIN-32-PIC-NEXT:    calll L112$pb
9130; DARWIN-32-PIC-NEXT:  L112$pb:
9131; DARWIN-32-PIC-NEXT:    popl %eax
9132; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9133; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L112$pb(%eax), %eax
9134; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9135; DARWIN-32-PIC-NEXT:    retl
9136;
9137; DARWIN-64-STATIC-LABEL: cxt01:
9138; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9139; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9140; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9141; DARWIN-64-STATIC-NEXT:    retq
9142;
9143; DARWIN-64-DYNAMIC-LABEL: cxt01:
9144; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9145; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9146; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9147; DARWIN-64-DYNAMIC-NEXT:    retq
9148;
9149; DARWIN-64-PIC-LABEL: cxt01:
9150; DARWIN-64-PIC:       ## %bb.0: ## %entry
9151; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9152; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9153; DARWIN-64-PIC-NEXT:    retq
9154
9155entry:
9156	%0 = add i64 %i, 16
9157	%1 = getelementptr [32 x i32], ptr @xdst, i64 0, i64 %0
9158	ret ptr %1
9159}
9160
9161define dso_local ptr @cat02(i64 %i) nounwind {
9162; LINUX-64-STATIC-LABEL: cat02:
9163; LINUX-64-STATIC:       # %bb.0: # %entry
9164; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
9165; LINUX-64-STATIC-NEXT:    movq (%rax), %rax
9166; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9167; LINUX-64-STATIC-NEXT:    retq
9168;
9169; LINUX-32-STATIC-LABEL: cat02:
9170; LINUX-32-STATIC:       # %bb.0: # %entry
9171; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9172; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
9173; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9174; LINUX-32-STATIC-NEXT:    retl
9175;
9176; LINUX-32-PIC-LABEL: cat02:
9177; LINUX-32-PIC:       # %bb.0: # %entry
9178; LINUX-32-PIC-NEXT:    calll .L113$pb
9179; LINUX-32-PIC-NEXT:  .L113$pb:
9180; LINUX-32-PIC-NEXT:    popl %eax
9181; LINUX-32-PIC-NEXT:  .Ltmp113:
9182; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp113-.L113$pb), %eax
9183; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
9184; LINUX-32-PIC-NEXT:    movl (%eax), %eax
9185; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9186; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9187; LINUX-32-PIC-NEXT:    retl
9188;
9189; LINUX-64-PIC-LABEL: cat02:
9190; LINUX-64-PIC:       # %bb.0: # %entry
9191; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
9192; LINUX-64-PIC-NEXT:    movq (%rax), %rax
9193; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9194; LINUX-64-PIC-NEXT:    retq
9195;
9196; DARWIN-32-STATIC-LABEL: cat02:
9197; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9198; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9199; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
9200; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9201; DARWIN-32-STATIC-NEXT:    retl
9202;
9203; DARWIN-32-DYNAMIC-LABEL: cat02:
9204; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9205; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
9206; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
9207; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9208; DARWIN-32-DYNAMIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9209; DARWIN-32-DYNAMIC-NEXT:    retl
9210;
9211; DARWIN-32-PIC-LABEL: cat02:
9212; DARWIN-32-PIC:       ## %bb.0: ## %entry
9213; DARWIN-32-PIC-NEXT:    calll L113$pb
9214; DARWIN-32-PIC-NEXT:  L113$pb:
9215; DARWIN-32-PIC-NEXT:    popl %eax
9216; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L113$pb(%eax), %eax
9217; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
9218; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9219; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9220; DARWIN-32-PIC-NEXT:    retl
9221;
9222; DARWIN-64-STATIC-LABEL: cat02:
9223; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9224; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9225; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
9226; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9227; DARWIN-64-STATIC-NEXT:    retq
9228;
9229; DARWIN-64-DYNAMIC-LABEL: cat02:
9230; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9231; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9232; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
9233; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9234; DARWIN-64-DYNAMIC-NEXT:    retq
9235;
9236; DARWIN-64-PIC-LABEL: cat02:
9237; DARWIN-64-PIC:       ## %bb.0: ## %entry
9238; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
9239; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
9240; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9241; DARWIN-64-PIC-NEXT:    retq
9242
9243entry:
9244	%0 = load ptr, ptr @ptr, align 8
9245	%1 = add i64 %i, 16
9246	%2 = getelementptr i32, ptr %0, i64 %1
9247	ret ptr %2
9248}
9249
9250define dso_local ptr @cat03(i64 %i) nounwind {
9251; LINUX-64-STATIC-LABEL: cat03:
9252; LINUX-64-STATIC:       # %bb.0: # %entry
9253; LINUX-64-STATIC-NEXT:    leaq dsrc+64(,%rdi,4), %rax
9254; LINUX-64-STATIC-NEXT:    retq
9255;
9256; LINUX-32-STATIC-LABEL: cat03:
9257; LINUX-32-STATIC:       # %bb.0: # %entry
9258; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9259; LINUX-32-STATIC-NEXT:    leal dsrc+64(,%eax,4), %eax
9260; LINUX-32-STATIC-NEXT:    retl
9261;
9262; LINUX-32-PIC-LABEL: cat03:
9263; LINUX-32-PIC:       # %bb.0: # %entry
9264; LINUX-32-PIC-NEXT:    calll .L114$pb
9265; LINUX-32-PIC-NEXT:  .L114$pb:
9266; LINUX-32-PIC-NEXT:    popl %eax
9267; LINUX-32-PIC-NEXT:  .Ltmp114:
9268; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp114-.L114$pb), %eax
9269; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9270; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF+64(%eax,%ecx,4), %eax
9271; LINUX-32-PIC-NEXT:    retl
9272;
9273; LINUX-64-PIC-LABEL: cat03:
9274; LINUX-64-PIC:       # %bb.0: # %entry
9275; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
9276; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9277; LINUX-64-PIC-NEXT:    retq
9278;
9279; DARWIN-32-STATIC-LABEL: cat03:
9280; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9281; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9282; DARWIN-32-STATIC-NEXT:    leal _dsrc+64(,%eax,4), %eax
9283; DARWIN-32-STATIC-NEXT:    retl
9284;
9285; DARWIN-32-DYNAMIC-LABEL: cat03:
9286; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9287; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9288; DARWIN-32-DYNAMIC-NEXT:    leal _dsrc+64(,%eax,4), %eax
9289; DARWIN-32-DYNAMIC-NEXT:    retl
9290;
9291; DARWIN-32-PIC-LABEL: cat03:
9292; DARWIN-32-PIC:       ## %bb.0: ## %entry
9293; DARWIN-32-PIC-NEXT:    calll L114$pb
9294; DARWIN-32-PIC-NEXT:  L114$pb:
9295; DARWIN-32-PIC-NEXT:    popl %eax
9296; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9297; DARWIN-32-PIC-NEXT:    leal (_dsrc-L114$pb)+64(%eax,%ecx,4), %eax
9298; DARWIN-32-PIC-NEXT:    retl
9299;
9300; DARWIN-64-STATIC-LABEL: cat03:
9301; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9302; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
9303; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9304; DARWIN-64-STATIC-NEXT:    retq
9305;
9306; DARWIN-64-DYNAMIC-LABEL: cat03:
9307; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9308; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
9309; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9310; DARWIN-64-DYNAMIC-NEXT:    retq
9311;
9312; DARWIN-64-PIC-LABEL: cat03:
9313; DARWIN-64-PIC:       ## %bb.0: ## %entry
9314; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
9315; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9316; DARWIN-64-PIC-NEXT:    retq
9317
9318entry:
9319	%0 = add i64 %i, 16
9320	%1 = getelementptr [131072 x i32], ptr @dsrc, i64 0, i64 %0
9321	ret ptr %1
9322}
9323
9324define dso_local ptr @cat04(i64 %i) nounwind {
9325; LINUX-64-STATIC-LABEL: cat04:
9326; LINUX-64-STATIC:       # %bb.0: # %entry
9327; LINUX-64-STATIC-NEXT:    leaq ddst+64(,%rdi,4), %rax
9328; LINUX-64-STATIC-NEXT:    retq
9329;
9330; LINUX-32-STATIC-LABEL: cat04:
9331; LINUX-32-STATIC:       # %bb.0: # %entry
9332; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9333; LINUX-32-STATIC-NEXT:    leal ddst+64(,%eax,4), %eax
9334; LINUX-32-STATIC-NEXT:    retl
9335;
9336; LINUX-32-PIC-LABEL: cat04:
9337; LINUX-32-PIC:       # %bb.0: # %entry
9338; LINUX-32-PIC-NEXT:    calll .L115$pb
9339; LINUX-32-PIC-NEXT:  .L115$pb:
9340; LINUX-32-PIC-NEXT:    popl %eax
9341; LINUX-32-PIC-NEXT:  .Ltmp115:
9342; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp115-.L115$pb), %eax
9343; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9344; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+64(%eax,%ecx,4), %eax
9345; LINUX-32-PIC-NEXT:    retl
9346;
9347; LINUX-64-PIC-LABEL: cat04:
9348; LINUX-64-PIC:       # %bb.0: # %entry
9349; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
9350; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9351; LINUX-64-PIC-NEXT:    retq
9352;
9353; DARWIN-32-STATIC-LABEL: cat04:
9354; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9355; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9356; DARWIN-32-STATIC-NEXT:    leal _ddst+64(,%eax,4), %eax
9357; DARWIN-32-STATIC-NEXT:    retl
9358;
9359; DARWIN-32-DYNAMIC-LABEL: cat04:
9360; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9361; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9362; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+64(,%eax,4), %eax
9363; DARWIN-32-DYNAMIC-NEXT:    retl
9364;
9365; DARWIN-32-PIC-LABEL: cat04:
9366; DARWIN-32-PIC:       ## %bb.0: ## %entry
9367; DARWIN-32-PIC-NEXT:    calll L115$pb
9368; DARWIN-32-PIC-NEXT:  L115$pb:
9369; DARWIN-32-PIC-NEXT:    popl %eax
9370; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9371; DARWIN-32-PIC-NEXT:    leal (_ddst-L115$pb)+64(%eax,%ecx,4), %eax
9372; DARWIN-32-PIC-NEXT:    retl
9373;
9374; DARWIN-64-STATIC-LABEL: cat04:
9375; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9376; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
9377; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9378; DARWIN-64-STATIC-NEXT:    retq
9379;
9380; DARWIN-64-DYNAMIC-LABEL: cat04:
9381; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9382; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
9383; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9384; DARWIN-64-DYNAMIC-NEXT:    retq
9385;
9386; DARWIN-64-PIC-LABEL: cat04:
9387; DARWIN-64-PIC:       ## %bb.0: ## %entry
9388; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
9389; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9390; DARWIN-64-PIC-NEXT:    retq
9391
9392entry:
9393	%0 = add i64 %i, 16
9394	%1 = getelementptr [131072 x i32], ptr @ddst, i64 0, i64 %0
9395	ret ptr %1
9396}
9397
9398define dso_local ptr @cat05(i64 %i) nounwind {
9399; LINUX-64-STATIC-LABEL: cat05:
9400; LINUX-64-STATIC:       # %bb.0: # %entry
9401; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
9402; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9403; LINUX-64-STATIC-NEXT:    retq
9404;
9405; LINUX-32-STATIC-LABEL: cat05:
9406; LINUX-32-STATIC:       # %bb.0: # %entry
9407; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9408; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
9409; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9410; LINUX-32-STATIC-NEXT:    retl
9411;
9412; LINUX-32-PIC-LABEL: cat05:
9413; LINUX-32-PIC:       # %bb.0: # %entry
9414; LINUX-32-PIC-NEXT:    calll .L116$pb
9415; LINUX-32-PIC-NEXT:  .L116$pb:
9416; LINUX-32-PIC-NEXT:    popl %eax
9417; LINUX-32-PIC-NEXT:  .Ltmp116:
9418; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp116-.L116$pb), %eax
9419; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9420; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
9421; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9422; LINUX-32-PIC-NEXT:    retl
9423;
9424; LINUX-64-PIC-LABEL: cat05:
9425; LINUX-64-PIC:       # %bb.0: # %entry
9426; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rax
9427; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9428; LINUX-64-PIC-NEXT:    retq
9429;
9430; DARWIN-32-STATIC-LABEL: cat05:
9431; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9432; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9433; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
9434; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9435; DARWIN-32-STATIC-NEXT:    retl
9436;
9437; DARWIN-32-DYNAMIC-LABEL: cat05:
9438; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9439; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9440; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
9441; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9442; DARWIN-32-DYNAMIC-NEXT:    retl
9443;
9444; DARWIN-32-PIC-LABEL: cat05:
9445; DARWIN-32-PIC:       ## %bb.0: ## %entry
9446; DARWIN-32-PIC-NEXT:    calll L116$pb
9447; DARWIN-32-PIC-NEXT:  L116$pb:
9448; DARWIN-32-PIC-NEXT:    popl %eax
9449; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9450; DARWIN-32-PIC-NEXT:    movl _dptr-L116$pb(%eax), %eax
9451; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9452; DARWIN-32-PIC-NEXT:    retl
9453;
9454; DARWIN-64-STATIC-LABEL: cat05:
9455; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9456; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
9457; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9458; DARWIN-64-STATIC-NEXT:    retq
9459;
9460; DARWIN-64-DYNAMIC-LABEL: cat05:
9461; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9462; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
9463; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9464; DARWIN-64-DYNAMIC-NEXT:    retq
9465;
9466; DARWIN-64-PIC-LABEL: cat05:
9467; DARWIN-64-PIC:       ## %bb.0: ## %entry
9468; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
9469; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9470; DARWIN-64-PIC-NEXT:    retq
9471
9472entry:
9473	%0 = load ptr, ptr @dptr, align 8
9474	%1 = add i64 %i, 16
9475	%2 = getelementptr i32, ptr %0, i64 %1
9476	ret ptr %2
9477}
9478
9479define dso_local ptr @cat06(i64 %i) nounwind {
9480; LINUX-64-STATIC-LABEL: cat06:
9481; LINUX-64-STATIC:       # %bb.0: # %entry
9482; LINUX-64-STATIC-NEXT:    leaq lsrc+64(,%rdi,4), %rax
9483; LINUX-64-STATIC-NEXT:    retq
9484;
9485; LINUX-32-STATIC-LABEL: cat06:
9486; LINUX-32-STATIC:       # %bb.0: # %entry
9487; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9488; LINUX-32-STATIC-NEXT:    leal lsrc+64(,%eax,4), %eax
9489; LINUX-32-STATIC-NEXT:    retl
9490;
9491; LINUX-32-PIC-LABEL: cat06:
9492; LINUX-32-PIC:       # %bb.0: # %entry
9493; LINUX-32-PIC-NEXT:    calll .L117$pb
9494; LINUX-32-PIC-NEXT:  .L117$pb:
9495; LINUX-32-PIC-NEXT:    popl %eax
9496; LINUX-32-PIC-NEXT:  .Ltmp117:
9497; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp117-.L117$pb), %eax
9498; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9499; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+64(%eax,%ecx,4), %eax
9500; LINUX-32-PIC-NEXT:    retl
9501;
9502; LINUX-64-PIC-LABEL: cat06:
9503; LINUX-64-PIC:       # %bb.0: # %entry
9504; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
9505; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9506; LINUX-64-PIC-NEXT:    retq
9507;
9508; DARWIN-32-STATIC-LABEL: cat06:
9509; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9510; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9511; DARWIN-32-STATIC-NEXT:    leal _lsrc+64(,%eax,4), %eax
9512; DARWIN-32-STATIC-NEXT:    retl
9513;
9514; DARWIN-32-DYNAMIC-LABEL: cat06:
9515; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9516; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9517; DARWIN-32-DYNAMIC-NEXT:    leal _lsrc+64(,%eax,4), %eax
9518; DARWIN-32-DYNAMIC-NEXT:    retl
9519;
9520; DARWIN-32-PIC-LABEL: cat06:
9521; DARWIN-32-PIC:       ## %bb.0: ## %entry
9522; DARWIN-32-PIC-NEXT:    calll L117$pb
9523; DARWIN-32-PIC-NEXT:  L117$pb:
9524; DARWIN-32-PIC-NEXT:    popl %eax
9525; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9526; DARWIN-32-PIC-NEXT:    leal (_lsrc-L117$pb)+64(%eax,%ecx,4), %eax
9527; DARWIN-32-PIC-NEXT:    retl
9528;
9529; DARWIN-64-STATIC-LABEL: cat06:
9530; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9531; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
9532; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9533; DARWIN-64-STATIC-NEXT:    retq
9534;
9535; DARWIN-64-DYNAMIC-LABEL: cat06:
9536; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9537; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
9538; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9539; DARWIN-64-DYNAMIC-NEXT:    retq
9540;
9541; DARWIN-64-PIC-LABEL: cat06:
9542; DARWIN-64-PIC:       ## %bb.0: ## %entry
9543; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
9544; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9545; DARWIN-64-PIC-NEXT:    retq
9546
9547entry:
9548	%0 = add i64 %i, 16
9549	%1 = getelementptr [131072 x i32], ptr @lsrc, i64 0, i64 %0
9550	ret ptr %1
9551}
9552
9553define dso_local ptr @cat07(i64 %i) nounwind {
9554; LINUX-64-STATIC-LABEL: cat07:
9555; LINUX-64-STATIC:       # %bb.0: # %entry
9556; LINUX-64-STATIC-NEXT:    leaq ldst+64(,%rdi,4), %rax
9557; LINUX-64-STATIC-NEXT:    retq
9558;
9559; LINUX-32-STATIC-LABEL: cat07:
9560; LINUX-32-STATIC:       # %bb.0: # %entry
9561; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9562; LINUX-32-STATIC-NEXT:    leal ldst+64(,%eax,4), %eax
9563; LINUX-32-STATIC-NEXT:    retl
9564;
9565; LINUX-32-PIC-LABEL: cat07:
9566; LINUX-32-PIC:       # %bb.0: # %entry
9567; LINUX-32-PIC-NEXT:    calll .L118$pb
9568; LINUX-32-PIC-NEXT:  .L118$pb:
9569; LINUX-32-PIC-NEXT:    popl %eax
9570; LINUX-32-PIC-NEXT:  .Ltmp118:
9571; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp118-.L118$pb), %eax
9572; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9573; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax,%ecx,4), %eax
9574; LINUX-32-PIC-NEXT:    retl
9575;
9576; LINUX-64-PIC-LABEL: cat07:
9577; LINUX-64-PIC:       # %bb.0: # %entry
9578; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
9579; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9580; LINUX-64-PIC-NEXT:    retq
9581;
9582; DARWIN-32-STATIC-LABEL: cat07:
9583; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9584; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9585; DARWIN-32-STATIC-NEXT:    leal _ldst+64(,%eax,4), %eax
9586; DARWIN-32-STATIC-NEXT:    retl
9587;
9588; DARWIN-32-DYNAMIC-LABEL: cat07:
9589; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9590; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9591; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+64(,%eax,4), %eax
9592; DARWIN-32-DYNAMIC-NEXT:    retl
9593;
9594; DARWIN-32-PIC-LABEL: cat07:
9595; DARWIN-32-PIC:       ## %bb.0: ## %entry
9596; DARWIN-32-PIC-NEXT:    calll L118$pb
9597; DARWIN-32-PIC-NEXT:  L118$pb:
9598; DARWIN-32-PIC-NEXT:    popl %eax
9599; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9600; DARWIN-32-PIC-NEXT:    leal (_ldst-L118$pb)+64(%eax,%ecx,4), %eax
9601; DARWIN-32-PIC-NEXT:    retl
9602;
9603; DARWIN-64-STATIC-LABEL: cat07:
9604; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9605; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
9606; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9607; DARWIN-64-STATIC-NEXT:    retq
9608;
9609; DARWIN-64-DYNAMIC-LABEL: cat07:
9610; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9611; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
9612; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9613; DARWIN-64-DYNAMIC-NEXT:    retq
9614;
9615; DARWIN-64-PIC-LABEL: cat07:
9616; DARWIN-64-PIC:       ## %bb.0: ## %entry
9617; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
9618; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9619; DARWIN-64-PIC-NEXT:    retq
9620
9621entry:
9622	%0 = add i64 %i, 16
9623	%1 = getelementptr [131072 x i32], ptr @ldst, i64 0, i64 %0
9624	ret ptr %1
9625}
9626
9627define dso_local ptr @cat08(i64 %i) nounwind {
9628; LINUX-64-STATIC-LABEL: cat08:
9629; LINUX-64-STATIC:       # %bb.0: # %entry
9630; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
9631; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9632; LINUX-64-STATIC-NEXT:    retq
9633;
9634; LINUX-32-STATIC-LABEL: cat08:
9635; LINUX-32-STATIC:       # %bb.0: # %entry
9636; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9637; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
9638; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9639; LINUX-32-STATIC-NEXT:    retl
9640;
9641; LINUX-32-PIC-LABEL: cat08:
9642; LINUX-32-PIC:       # %bb.0: # %entry
9643; LINUX-32-PIC-NEXT:    calll .L119$pb
9644; LINUX-32-PIC-NEXT:  .L119$pb:
9645; LINUX-32-PIC-NEXT:    popl %eax
9646; LINUX-32-PIC-NEXT:  .Ltmp119:
9647; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp119-.L119$pb), %eax
9648; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9649; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
9650; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9651; LINUX-32-PIC-NEXT:    retl
9652;
9653; LINUX-64-PIC-LABEL: cat08:
9654; LINUX-64-PIC:       # %bb.0: # %entry
9655; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
9656; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9657; LINUX-64-PIC-NEXT:    retq
9658;
9659; DARWIN-32-STATIC-LABEL: cat08:
9660; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9661; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9662; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
9663; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9664; DARWIN-32-STATIC-NEXT:    retl
9665;
9666; DARWIN-32-DYNAMIC-LABEL: cat08:
9667; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9668; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9669; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
9670; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
9671; DARWIN-32-DYNAMIC-NEXT:    retl
9672;
9673; DARWIN-32-PIC-LABEL: cat08:
9674; DARWIN-32-PIC:       ## %bb.0: ## %entry
9675; DARWIN-32-PIC-NEXT:    calll L119$pb
9676; DARWIN-32-PIC-NEXT:  L119$pb:
9677; DARWIN-32-PIC-NEXT:    popl %eax
9678; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9679; DARWIN-32-PIC-NEXT:    movl _lptr-L119$pb(%eax), %eax
9680; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
9681; DARWIN-32-PIC-NEXT:    retl
9682;
9683; DARWIN-64-STATIC-LABEL: cat08:
9684; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9685; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
9686; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9687; DARWIN-64-STATIC-NEXT:    retq
9688;
9689; DARWIN-64-DYNAMIC-LABEL: cat08:
9690; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9691; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
9692; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9693; DARWIN-64-DYNAMIC-NEXT:    retq
9694;
9695; DARWIN-64-PIC-LABEL: cat08:
9696; DARWIN-64-PIC:       ## %bb.0: ## %entry
9697; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
9698; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
9699; DARWIN-64-PIC-NEXT:    retq
9700
9701entry:
9702	%0 = load ptr, ptr @lptr, align 8
9703	%1 = add i64 %i, 16
9704	%2 = getelementptr i32, ptr %0, i64 %1
9705	ret ptr %2
9706}
9707
9708define dso_local ptr @cam00(i64 %i) nounwind {
9709; LINUX-64-STATIC-LABEL: cam00:
9710; LINUX-64-STATIC:       # %bb.0: # %entry
9711; LINUX-64-STATIC-NEXT:    movq src@GOTPCREL(%rip), %rax
9712; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9713; LINUX-64-STATIC-NEXT:    retq
9714;
9715; LINUX-32-STATIC-LABEL: cam00:
9716; LINUX-32-STATIC:       # %bb.0: # %entry
9717; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9718; LINUX-32-STATIC-NEXT:    leal src+262144(,%eax,4), %eax
9719; LINUX-32-STATIC-NEXT:    retl
9720;
9721; LINUX-32-PIC-LABEL: cam00:
9722; LINUX-32-PIC:       # %bb.0: # %entry
9723; LINUX-32-PIC-NEXT:    calll .L120$pb
9724; LINUX-32-PIC-NEXT:  .L120$pb:
9725; LINUX-32-PIC-NEXT:    popl %eax
9726; LINUX-32-PIC-NEXT:  .Ltmp120:
9727; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp120-.L120$pb), %eax
9728; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9729; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
9730; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9731; LINUX-32-PIC-NEXT:    retl
9732;
9733; LINUX-64-PIC-LABEL: cam00:
9734; LINUX-64-PIC:       # %bb.0: # %entry
9735; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
9736; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9737; LINUX-64-PIC-NEXT:    retq
9738;
9739; DARWIN-32-STATIC-LABEL: cam00:
9740; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9741; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9742; DARWIN-32-STATIC-NEXT:    leal _src+262144(,%eax,4), %eax
9743; DARWIN-32-STATIC-NEXT:    retl
9744;
9745; DARWIN-32-DYNAMIC-LABEL: cam00:
9746; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9747; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9748; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
9749; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9750; DARWIN-32-DYNAMIC-NEXT:    retl
9751;
9752; DARWIN-32-PIC-LABEL: cam00:
9753; DARWIN-32-PIC:       ## %bb.0: ## %entry
9754; DARWIN-32-PIC-NEXT:    calll L120$pb
9755; DARWIN-32-PIC-NEXT:  L120$pb:
9756; DARWIN-32-PIC-NEXT:    popl %eax
9757; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9758; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L120$pb(%eax), %eax
9759; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9760; DARWIN-32-PIC-NEXT:    retl
9761;
9762; DARWIN-64-STATIC-LABEL: cam00:
9763; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9764; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9765; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9766; DARWIN-64-STATIC-NEXT:    retq
9767;
9768; DARWIN-64-DYNAMIC-LABEL: cam00:
9769; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9770; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9771; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9772; DARWIN-64-DYNAMIC-NEXT:    retq
9773;
9774; DARWIN-64-PIC-LABEL: cam00:
9775; DARWIN-64-PIC:       ## %bb.0: ## %entry
9776; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
9777; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9778; DARWIN-64-PIC-NEXT:    retq
9779
9780entry:
9781	%0 = add i64 %i, 65536
9782	%1 = getelementptr [131072 x i32], ptr @src, i64 0, i64 %0
9783	ret ptr %1
9784}
9785
9786define dso_local ptr @cxm00(i64 %i) nounwind {
9787; LINUX-64-STATIC-LABEL: cxm00:
9788; LINUX-64-STATIC:       # %bb.0: # %entry
9789; LINUX-64-STATIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
9790; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9791; LINUX-64-STATIC-NEXT:    retq
9792;
9793; LINUX-32-STATIC-LABEL: cxm00:
9794; LINUX-32-STATIC:       # %bb.0: # %entry
9795; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9796; LINUX-32-STATIC-NEXT:    leal xsrc+262144(,%eax,4), %eax
9797; LINUX-32-STATIC-NEXT:    retl
9798;
9799; LINUX-32-PIC-LABEL: cxm00:
9800; LINUX-32-PIC:       # %bb.0: # %entry
9801; LINUX-32-PIC-NEXT:    calll .L121$pb
9802; LINUX-32-PIC-NEXT:  .L121$pb:
9803; LINUX-32-PIC-NEXT:    popl %eax
9804; LINUX-32-PIC-NEXT:  .Ltmp121:
9805; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp121-.L121$pb), %eax
9806; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9807; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
9808; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9809; LINUX-32-PIC-NEXT:    retl
9810;
9811; LINUX-64-PIC-LABEL: cxm00:
9812; LINUX-64-PIC:       # %bb.0: # %entry
9813; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
9814; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9815; LINUX-64-PIC-NEXT:    retq
9816;
9817; DARWIN-32-STATIC-LABEL: cxm00:
9818; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9819; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9820; DARWIN-32-STATIC-NEXT:    leal _xsrc+262144(,%eax,4), %eax
9821; DARWIN-32-STATIC-NEXT:    retl
9822;
9823; DARWIN-32-DYNAMIC-LABEL: cxm00:
9824; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9825; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9826; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
9827; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9828; DARWIN-32-DYNAMIC-NEXT:    retl
9829;
9830; DARWIN-32-PIC-LABEL: cxm00:
9831; DARWIN-32-PIC:       ## %bb.0: ## %entry
9832; DARWIN-32-PIC-NEXT:    calll L121$pb
9833; DARWIN-32-PIC-NEXT:  L121$pb:
9834; DARWIN-32-PIC-NEXT:    popl %eax
9835; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9836; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L121$pb(%eax), %eax
9837; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9838; DARWIN-32-PIC-NEXT:    retl
9839;
9840; DARWIN-64-STATIC-LABEL: cxm00:
9841; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9842; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9843; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9844; DARWIN-64-STATIC-NEXT:    retq
9845;
9846; DARWIN-64-DYNAMIC-LABEL: cxm00:
9847; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9848; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9849; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9850; DARWIN-64-DYNAMIC-NEXT:    retq
9851;
9852; DARWIN-64-PIC-LABEL: cxm00:
9853; DARWIN-64-PIC:       ## %bb.0: ## %entry
9854; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
9855; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9856; DARWIN-64-PIC-NEXT:    retq
9857
9858entry:
9859	%0 = add i64 %i, 65536
9860	%1 = getelementptr [32 x i32], ptr @xsrc, i64 0, i64 %0
9861	ret ptr %1
9862}
9863
9864define dso_local ptr @cam01(i64 %i) nounwind {
9865; LINUX-64-STATIC-LABEL: cam01:
9866; LINUX-64-STATIC:       # %bb.0: # %entry
9867; LINUX-64-STATIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9868; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9869; LINUX-64-STATIC-NEXT:    retq
9870;
9871; LINUX-32-STATIC-LABEL: cam01:
9872; LINUX-32-STATIC:       # %bb.0: # %entry
9873; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9874; LINUX-32-STATIC-NEXT:    leal dst+262144(,%eax,4), %eax
9875; LINUX-32-STATIC-NEXT:    retl
9876;
9877; LINUX-32-PIC-LABEL: cam01:
9878; LINUX-32-PIC:       # %bb.0: # %entry
9879; LINUX-32-PIC-NEXT:    calll .L122$pb
9880; LINUX-32-PIC-NEXT:  .L122$pb:
9881; LINUX-32-PIC-NEXT:    popl %eax
9882; LINUX-32-PIC-NEXT:  .Ltmp122:
9883; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp122-.L122$pb), %eax
9884; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9885; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
9886; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9887; LINUX-32-PIC-NEXT:    retl
9888;
9889; LINUX-64-PIC-LABEL: cam01:
9890; LINUX-64-PIC:       # %bb.0: # %entry
9891; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
9892; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9893; LINUX-64-PIC-NEXT:    retq
9894;
9895; DARWIN-32-STATIC-LABEL: cam01:
9896; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9897; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9898; DARWIN-32-STATIC-NEXT:    leal _dst+262144(,%eax,4), %eax
9899; DARWIN-32-STATIC-NEXT:    retl
9900;
9901; DARWIN-32-DYNAMIC-LABEL: cam01:
9902; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9903; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9904; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
9905; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9906; DARWIN-32-DYNAMIC-NEXT:    retl
9907;
9908; DARWIN-32-PIC-LABEL: cam01:
9909; DARWIN-32-PIC:       ## %bb.0: ## %entry
9910; DARWIN-32-PIC-NEXT:    calll L122$pb
9911; DARWIN-32-PIC-NEXT:  L122$pb:
9912; DARWIN-32-PIC-NEXT:    popl %eax
9913; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9914; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L122$pb(%eax), %eax
9915; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9916; DARWIN-32-PIC-NEXT:    retl
9917;
9918; DARWIN-64-STATIC-LABEL: cam01:
9919; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9920; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9921; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9922; DARWIN-64-STATIC-NEXT:    retq
9923;
9924; DARWIN-64-DYNAMIC-LABEL: cam01:
9925; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
9926; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9927; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9928; DARWIN-64-DYNAMIC-NEXT:    retq
9929;
9930; DARWIN-64-PIC-LABEL: cam01:
9931; DARWIN-64-PIC:       ## %bb.0: ## %entry
9932; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
9933; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9934; DARWIN-64-PIC-NEXT:    retq
9935
9936entry:
9937	%0 = add i64 %i, 65536
9938	%1 = getelementptr [131072 x i32], ptr @dst, i64 0, i64 %0
9939	ret ptr %1
9940}
9941
9942define dso_local ptr @cxm01(i64 %i) nounwind {
9943; LINUX-64-STATIC-LABEL: cxm01:
9944; LINUX-64-STATIC:       # %bb.0: # %entry
9945; LINUX-64-STATIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9946; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9947; LINUX-64-STATIC-NEXT:    retq
9948;
9949; LINUX-32-STATIC-LABEL: cxm01:
9950; LINUX-32-STATIC:       # %bb.0: # %entry
9951; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9952; LINUX-32-STATIC-NEXT:    leal xdst+262144(,%eax,4), %eax
9953; LINUX-32-STATIC-NEXT:    retl
9954;
9955; LINUX-32-PIC-LABEL: cxm01:
9956; LINUX-32-PIC:       # %bb.0: # %entry
9957; LINUX-32-PIC-NEXT:    calll .L123$pb
9958; LINUX-32-PIC-NEXT:  .L123$pb:
9959; LINUX-32-PIC-NEXT:    popl %eax
9960; LINUX-32-PIC-NEXT:  .Ltmp123:
9961; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp123-.L123$pb), %eax
9962; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9963; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
9964; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9965; LINUX-32-PIC-NEXT:    retl
9966;
9967; LINUX-64-PIC-LABEL: cxm01:
9968; LINUX-64-PIC:       # %bb.0: # %entry
9969; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
9970; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
9971; LINUX-64-PIC-NEXT:    retq
9972;
9973; DARWIN-32-STATIC-LABEL: cxm01:
9974; DARWIN-32-STATIC:       ## %bb.0: ## %entry
9975; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9976; DARWIN-32-STATIC-NEXT:    leal _xdst+262144(,%eax,4), %eax
9977; DARWIN-32-STATIC-NEXT:    retl
9978;
9979; DARWIN-32-DYNAMIC-LABEL: cxm01:
9980; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
9981; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
9982; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
9983; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
9984; DARWIN-32-DYNAMIC-NEXT:    retl
9985;
9986; DARWIN-32-PIC-LABEL: cxm01:
9987; DARWIN-32-PIC:       ## %bb.0: ## %entry
9988; DARWIN-32-PIC-NEXT:    calll L123$pb
9989; DARWIN-32-PIC-NEXT:  L123$pb:
9990; DARWIN-32-PIC-NEXT:    popl %eax
9991; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
9992; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L123$pb(%eax), %eax
9993; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
9994; DARWIN-32-PIC-NEXT:    retl
9995;
9996; DARWIN-64-STATIC-LABEL: cxm01:
9997; DARWIN-64-STATIC:       ## %bb.0: ## %entry
9998; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
9999; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10000; DARWIN-64-STATIC-NEXT:    retq
10001;
10002; DARWIN-64-DYNAMIC-LABEL: cxm01:
10003; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10004; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
10005; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10006; DARWIN-64-DYNAMIC-NEXT:    retq
10007;
10008; DARWIN-64-PIC-LABEL: cxm01:
10009; DARWIN-64-PIC:       ## %bb.0: ## %entry
10010; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
10011; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10012; DARWIN-64-PIC-NEXT:    retq
10013
10014entry:
10015	%0 = add i64 %i, 65536
10016	%1 = getelementptr [32 x i32], ptr @xdst, i64 0, i64 %0
10017	ret ptr %1
10018}
10019
10020define dso_local ptr @cam02(i64 %i) nounwind {
10021; LINUX-64-STATIC-LABEL: cam02:
10022; LINUX-64-STATIC:       # %bb.0: # %entry
10023; LINUX-64-STATIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
10024; LINUX-64-STATIC-NEXT:    movq (%rax), %rax
10025; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10026; LINUX-64-STATIC-NEXT:    retq
10027;
10028; LINUX-32-STATIC-LABEL: cam02:
10029; LINUX-32-STATIC:       # %bb.0: # %entry
10030; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10031; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
10032; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10033; LINUX-32-STATIC-NEXT:    retl
10034;
10035; LINUX-32-PIC-LABEL: cam02:
10036; LINUX-32-PIC:       # %bb.0: # %entry
10037; LINUX-32-PIC-NEXT:    calll .L124$pb
10038; LINUX-32-PIC-NEXT:  .L124$pb:
10039; LINUX-32-PIC-NEXT:    popl %eax
10040; LINUX-32-PIC-NEXT:  .Ltmp124:
10041; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp124-.L124$pb), %eax
10042; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
10043; LINUX-32-PIC-NEXT:    movl (%eax), %eax
10044; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10045; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10046; LINUX-32-PIC-NEXT:    retl
10047;
10048; LINUX-64-PIC-LABEL: cam02:
10049; LINUX-64-PIC:       # %bb.0: # %entry
10050; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
10051; LINUX-64-PIC-NEXT:    movq (%rax), %rax
10052; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10053; LINUX-64-PIC-NEXT:    retq
10054;
10055; DARWIN-32-STATIC-LABEL: cam02:
10056; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10057; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10058; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
10059; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10060; DARWIN-32-STATIC-NEXT:    retl
10061;
10062; DARWIN-32-DYNAMIC-LABEL: cam02:
10063; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10064; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
10065; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
10066; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10067; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10068; DARWIN-32-DYNAMIC-NEXT:    retl
10069;
10070; DARWIN-32-PIC-LABEL: cam02:
10071; DARWIN-32-PIC:       ## %bb.0: ## %entry
10072; DARWIN-32-PIC-NEXT:    calll L124$pb
10073; DARWIN-32-PIC-NEXT:  L124$pb:
10074; DARWIN-32-PIC-NEXT:    popl %eax
10075; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L124$pb(%eax), %eax
10076; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
10077; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10078; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10079; DARWIN-32-PIC-NEXT:    retl
10080;
10081; DARWIN-64-STATIC-LABEL: cam02:
10082; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10083; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10084; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
10085; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10086; DARWIN-64-STATIC-NEXT:    retq
10087;
10088; DARWIN-64-DYNAMIC-LABEL: cam02:
10089; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10090; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10091; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
10092; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10093; DARWIN-64-DYNAMIC-NEXT:    retq
10094;
10095; DARWIN-64-PIC-LABEL: cam02:
10096; DARWIN-64-PIC:       ## %bb.0: ## %entry
10097; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
10098; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
10099; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10100; DARWIN-64-PIC-NEXT:    retq
10101
10102entry:
10103	%0 = load ptr, ptr @ptr, align 8
10104	%1 = add i64 %i, 65536
10105	%2 = getelementptr i32, ptr %0, i64 %1
10106	ret ptr %2
10107}
10108
10109define dso_local ptr @cam03(i64 %i) nounwind {
10110; LINUX-64-STATIC-LABEL: cam03:
10111; LINUX-64-STATIC:       # %bb.0: # %entry
10112; LINUX-64-STATIC-NEXT:    leaq dsrc+262144(,%rdi,4), %rax
10113; LINUX-64-STATIC-NEXT:    retq
10114;
10115; LINUX-32-STATIC-LABEL: cam03:
10116; LINUX-32-STATIC:       # %bb.0: # %entry
10117; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10118; LINUX-32-STATIC-NEXT:    leal dsrc+262144(,%eax,4), %eax
10119; LINUX-32-STATIC-NEXT:    retl
10120;
10121; LINUX-32-PIC-LABEL: cam03:
10122; LINUX-32-PIC:       # %bb.0: # %entry
10123; LINUX-32-PIC-NEXT:    calll .L125$pb
10124; LINUX-32-PIC-NEXT:  .L125$pb:
10125; LINUX-32-PIC-NEXT:    popl %eax
10126; LINUX-32-PIC-NEXT:  .Ltmp125:
10127; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp125-.L125$pb), %eax
10128; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10129; LINUX-32-PIC-NEXT:    leal .Ldsrc$local@GOTOFF+262144(%eax,%ecx,4), %eax
10130; LINUX-32-PIC-NEXT:    retl
10131;
10132; LINUX-64-PIC-LABEL: cam03:
10133; LINUX-64-PIC:       # %bb.0: # %entry
10134; LINUX-64-PIC-NEXT:    leaq .Ldsrc$local(%rip), %rax
10135; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10136; LINUX-64-PIC-NEXT:    retq
10137;
10138; DARWIN-32-STATIC-LABEL: cam03:
10139; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10140; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10141; DARWIN-32-STATIC-NEXT:    leal _dsrc+262144(,%eax,4), %eax
10142; DARWIN-32-STATIC-NEXT:    retl
10143;
10144; DARWIN-32-DYNAMIC-LABEL: cam03:
10145; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10146; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10147; DARWIN-32-DYNAMIC-NEXT:    leal _dsrc+262144(,%eax,4), %eax
10148; DARWIN-32-DYNAMIC-NEXT:    retl
10149;
10150; DARWIN-32-PIC-LABEL: cam03:
10151; DARWIN-32-PIC:       ## %bb.0: ## %entry
10152; DARWIN-32-PIC-NEXT:    calll L125$pb
10153; DARWIN-32-PIC-NEXT:  L125$pb:
10154; DARWIN-32-PIC-NEXT:    popl %eax
10155; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10156; DARWIN-32-PIC-NEXT:    leal (_dsrc-L125$pb)+262144(%eax,%ecx,4), %eax
10157; DARWIN-32-PIC-NEXT:    retl
10158;
10159; DARWIN-64-STATIC-LABEL: cam03:
10160; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10161; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
10162; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10163; DARWIN-64-STATIC-NEXT:    retq
10164;
10165; DARWIN-64-DYNAMIC-LABEL: cam03:
10166; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10167; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
10168; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10169; DARWIN-64-DYNAMIC-NEXT:    retq
10170;
10171; DARWIN-64-PIC-LABEL: cam03:
10172; DARWIN-64-PIC:       ## %bb.0: ## %entry
10173; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
10174; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10175; DARWIN-64-PIC-NEXT:    retq
10176
10177entry:
10178	%0 = add i64 %i, 65536
10179	%1 = getelementptr [131072 x i32], ptr @dsrc, i64 0, i64 %0
10180	ret ptr %1
10181}
10182
10183define dso_local ptr @cam04(i64 %i) nounwind {
10184; LINUX-64-STATIC-LABEL: cam04:
10185; LINUX-64-STATIC:       # %bb.0: # %entry
10186; LINUX-64-STATIC-NEXT:    leaq ddst+262144(,%rdi,4), %rax
10187; LINUX-64-STATIC-NEXT:    retq
10188;
10189; LINUX-32-STATIC-LABEL: cam04:
10190; LINUX-32-STATIC:       # %bb.0: # %entry
10191; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10192; LINUX-32-STATIC-NEXT:    leal ddst+262144(,%eax,4), %eax
10193; LINUX-32-STATIC-NEXT:    retl
10194;
10195; LINUX-32-PIC-LABEL: cam04:
10196; LINUX-32-PIC:       # %bb.0: # %entry
10197; LINUX-32-PIC-NEXT:    calll .L126$pb
10198; LINUX-32-PIC-NEXT:  .L126$pb:
10199; LINUX-32-PIC-NEXT:    popl %eax
10200; LINUX-32-PIC-NEXT:  .Ltmp126:
10201; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp126-.L126$pb), %eax
10202; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10203; LINUX-32-PIC-NEXT:    leal .Lddst$local@GOTOFF+262144(%eax,%ecx,4), %eax
10204; LINUX-32-PIC-NEXT:    retl
10205;
10206; LINUX-64-PIC-LABEL: cam04:
10207; LINUX-64-PIC:       # %bb.0: # %entry
10208; LINUX-64-PIC-NEXT:    leaq .Lddst$local(%rip), %rax
10209; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10210; LINUX-64-PIC-NEXT:    retq
10211;
10212; DARWIN-32-STATIC-LABEL: cam04:
10213; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10214; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10215; DARWIN-32-STATIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
10216; DARWIN-32-STATIC-NEXT:    retl
10217;
10218; DARWIN-32-DYNAMIC-LABEL: cam04:
10219; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10220; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10221; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
10222; DARWIN-32-DYNAMIC-NEXT:    retl
10223;
10224; DARWIN-32-PIC-LABEL: cam04:
10225; DARWIN-32-PIC:       ## %bb.0: ## %entry
10226; DARWIN-32-PIC-NEXT:    calll L126$pb
10227; DARWIN-32-PIC-NEXT:  L126$pb:
10228; DARWIN-32-PIC-NEXT:    popl %eax
10229; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10230; DARWIN-32-PIC-NEXT:    leal (_ddst-L126$pb)+262144(%eax,%ecx,4), %eax
10231; DARWIN-32-PIC-NEXT:    retl
10232;
10233; DARWIN-64-STATIC-LABEL: cam04:
10234; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10235; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
10236; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10237; DARWIN-64-STATIC-NEXT:    retq
10238;
10239; DARWIN-64-DYNAMIC-LABEL: cam04:
10240; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10241; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
10242; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10243; DARWIN-64-DYNAMIC-NEXT:    retq
10244;
10245; DARWIN-64-PIC-LABEL: cam04:
10246; DARWIN-64-PIC:       ## %bb.0: ## %entry
10247; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
10248; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10249; DARWIN-64-PIC-NEXT:    retq
10250
10251entry:
10252	%0 = add i64 %i, 65536
10253	%1 = getelementptr [131072 x i32], ptr @ddst, i64 0, i64 %0
10254	ret ptr %1
10255}
10256
10257define dso_local ptr @cam05(i64 %i) nounwind {
10258; LINUX-64-STATIC-LABEL: cam05:
10259; LINUX-64-STATIC:       # %bb.0: # %entry
10260; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
10261; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10262; LINUX-64-STATIC-NEXT:    retq
10263;
10264; LINUX-32-STATIC-LABEL: cam05:
10265; LINUX-32-STATIC:       # %bb.0: # %entry
10266; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10267; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
10268; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10269; LINUX-32-STATIC-NEXT:    retl
10270;
10271; LINUX-32-PIC-LABEL: cam05:
10272; LINUX-32-PIC:       # %bb.0: # %entry
10273; LINUX-32-PIC-NEXT:    calll .L127$pb
10274; LINUX-32-PIC-NEXT:  .L127$pb:
10275; LINUX-32-PIC-NEXT:    popl %eax
10276; LINUX-32-PIC-NEXT:  .Ltmp127:
10277; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp127-.L127$pb), %eax
10278; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10279; LINUX-32-PIC-NEXT:    movl .Ldptr$local@GOTOFF(%eax), %eax
10280; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10281; LINUX-32-PIC-NEXT:    retl
10282;
10283; LINUX-64-PIC-LABEL: cam05:
10284; LINUX-64-PIC:       # %bb.0: # %entry
10285; LINUX-64-PIC-NEXT:    movq .Ldptr$local(%rip), %rax
10286; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10287; LINUX-64-PIC-NEXT:    retq
10288;
10289; DARWIN-32-STATIC-LABEL: cam05:
10290; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10291; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10292; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
10293; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10294; DARWIN-32-STATIC-NEXT:    retl
10295;
10296; DARWIN-32-DYNAMIC-LABEL: cam05:
10297; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10298; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10299; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
10300; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10301; DARWIN-32-DYNAMIC-NEXT:    retl
10302;
10303; DARWIN-32-PIC-LABEL: cam05:
10304; DARWIN-32-PIC:       ## %bb.0: ## %entry
10305; DARWIN-32-PIC-NEXT:    calll L127$pb
10306; DARWIN-32-PIC-NEXT:  L127$pb:
10307; DARWIN-32-PIC-NEXT:    popl %eax
10308; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10309; DARWIN-32-PIC-NEXT:    movl _dptr-L127$pb(%eax), %eax
10310; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10311; DARWIN-32-PIC-NEXT:    retl
10312;
10313; DARWIN-64-STATIC-LABEL: cam05:
10314; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10315; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
10316; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10317; DARWIN-64-STATIC-NEXT:    retq
10318;
10319; DARWIN-64-DYNAMIC-LABEL: cam05:
10320; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10321; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
10322; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10323; DARWIN-64-DYNAMIC-NEXT:    retq
10324;
10325; DARWIN-64-PIC-LABEL: cam05:
10326; DARWIN-64-PIC:       ## %bb.0: ## %entry
10327; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
10328; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10329; DARWIN-64-PIC-NEXT:    retq
10330
10331entry:
10332	%0 = load ptr, ptr @dptr, align 8
10333	%1 = add i64 %i, 65536
10334	%2 = getelementptr i32, ptr %0, i64 %1
10335	ret ptr %2
10336}
10337
10338define dso_local ptr @cam06(i64 %i) nounwind {
10339; LINUX-64-STATIC-LABEL: cam06:
10340; LINUX-64-STATIC:       # %bb.0: # %entry
10341; LINUX-64-STATIC-NEXT:    leaq lsrc+262144(,%rdi,4), %rax
10342; LINUX-64-STATIC-NEXT:    retq
10343;
10344; LINUX-32-STATIC-LABEL: cam06:
10345; LINUX-32-STATIC:       # %bb.0: # %entry
10346; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10347; LINUX-32-STATIC-NEXT:    leal lsrc+262144(,%eax,4), %eax
10348; LINUX-32-STATIC-NEXT:    retl
10349;
10350; LINUX-32-PIC-LABEL: cam06:
10351; LINUX-32-PIC:       # %bb.0: # %entry
10352; LINUX-32-PIC-NEXT:    calll .L128$pb
10353; LINUX-32-PIC-NEXT:  .L128$pb:
10354; LINUX-32-PIC-NEXT:    popl %eax
10355; LINUX-32-PIC-NEXT:  .Ltmp128:
10356; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp128-.L128$pb), %eax
10357; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10358; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+262144(%eax,%ecx,4), %eax
10359; LINUX-32-PIC-NEXT:    retl
10360;
10361; LINUX-64-PIC-LABEL: cam06:
10362; LINUX-64-PIC:       # %bb.0: # %entry
10363; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
10364; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10365; LINUX-64-PIC-NEXT:    retq
10366;
10367; DARWIN-32-STATIC-LABEL: cam06:
10368; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10369; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10370; DARWIN-32-STATIC-NEXT:    leal _lsrc+262144(,%eax,4), %eax
10371; DARWIN-32-STATIC-NEXT:    retl
10372;
10373; DARWIN-32-DYNAMIC-LABEL: cam06:
10374; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10375; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10376; DARWIN-32-DYNAMIC-NEXT:    leal _lsrc+262144(,%eax,4), %eax
10377; DARWIN-32-DYNAMIC-NEXT:    retl
10378;
10379; DARWIN-32-PIC-LABEL: cam06:
10380; DARWIN-32-PIC:       ## %bb.0: ## %entry
10381; DARWIN-32-PIC-NEXT:    calll L128$pb
10382; DARWIN-32-PIC-NEXT:  L128$pb:
10383; DARWIN-32-PIC-NEXT:    popl %eax
10384; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10385; DARWIN-32-PIC-NEXT:    leal (_lsrc-L128$pb)+262144(%eax,%ecx,4), %eax
10386; DARWIN-32-PIC-NEXT:    retl
10387;
10388; DARWIN-64-STATIC-LABEL: cam06:
10389; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10390; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
10391; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10392; DARWIN-64-STATIC-NEXT:    retq
10393;
10394; DARWIN-64-DYNAMIC-LABEL: cam06:
10395; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10396; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
10397; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10398; DARWIN-64-DYNAMIC-NEXT:    retq
10399;
10400; DARWIN-64-PIC-LABEL: cam06:
10401; DARWIN-64-PIC:       ## %bb.0: ## %entry
10402; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
10403; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10404; DARWIN-64-PIC-NEXT:    retq
10405
10406entry:
10407	%0 = add i64 %i, 65536
10408	%1 = getelementptr [131072 x i32], ptr @lsrc, i64 0, i64 %0
10409	ret ptr %1
10410}
10411
10412define dso_local ptr @cam07(i64 %i) nounwind {
10413; LINUX-64-STATIC-LABEL: cam07:
10414; LINUX-64-STATIC:       # %bb.0: # %entry
10415; LINUX-64-STATIC-NEXT:    leaq ldst+262144(,%rdi,4), %rax
10416; LINUX-64-STATIC-NEXT:    retq
10417;
10418; LINUX-32-STATIC-LABEL: cam07:
10419; LINUX-32-STATIC:       # %bb.0: # %entry
10420; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10421; LINUX-32-STATIC-NEXT:    leal ldst+262144(,%eax,4), %eax
10422; LINUX-32-STATIC-NEXT:    retl
10423;
10424; LINUX-32-PIC-LABEL: cam07:
10425; LINUX-32-PIC:       # %bb.0: # %entry
10426; LINUX-32-PIC-NEXT:    calll .L129$pb
10427; LINUX-32-PIC-NEXT:  .L129$pb:
10428; LINUX-32-PIC-NEXT:    popl %eax
10429; LINUX-32-PIC-NEXT:  .Ltmp129:
10430; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp129-.L129$pb), %eax
10431; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10432; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax,%ecx,4), %eax
10433; LINUX-32-PIC-NEXT:    retl
10434;
10435; LINUX-64-PIC-LABEL: cam07:
10436; LINUX-64-PIC:       # %bb.0: # %entry
10437; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
10438; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10439; LINUX-64-PIC-NEXT:    retq
10440;
10441; DARWIN-32-STATIC-LABEL: cam07:
10442; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10443; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10444; DARWIN-32-STATIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
10445; DARWIN-32-STATIC-NEXT:    retl
10446;
10447; DARWIN-32-DYNAMIC-LABEL: cam07:
10448; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10449; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10450; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
10451; DARWIN-32-DYNAMIC-NEXT:    retl
10452;
10453; DARWIN-32-PIC-LABEL: cam07:
10454; DARWIN-32-PIC:       ## %bb.0: ## %entry
10455; DARWIN-32-PIC-NEXT:    calll L129$pb
10456; DARWIN-32-PIC-NEXT:  L129$pb:
10457; DARWIN-32-PIC-NEXT:    popl %eax
10458; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10459; DARWIN-32-PIC-NEXT:    leal (_ldst-L129$pb)+262144(%eax,%ecx,4), %eax
10460; DARWIN-32-PIC-NEXT:    retl
10461;
10462; DARWIN-64-STATIC-LABEL: cam07:
10463; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10464; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
10465; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10466; DARWIN-64-STATIC-NEXT:    retq
10467;
10468; DARWIN-64-DYNAMIC-LABEL: cam07:
10469; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10470; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
10471; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10472; DARWIN-64-DYNAMIC-NEXT:    retq
10473;
10474; DARWIN-64-PIC-LABEL: cam07:
10475; DARWIN-64-PIC:       ## %bb.0: ## %entry
10476; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
10477; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10478; DARWIN-64-PIC-NEXT:    retq
10479
10480entry:
10481	%0 = add i64 %i, 65536
10482	%1 = getelementptr [131072 x i32], ptr @ldst, i64 0, i64 %0
10483	ret ptr %1
10484}
10485
10486define dso_local ptr @cam08(i64 %i) nounwind {
10487; LINUX-64-STATIC-LABEL: cam08:
10488; LINUX-64-STATIC:       # %bb.0: # %entry
10489; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
10490; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10491; LINUX-64-STATIC-NEXT:    retq
10492;
10493; LINUX-32-STATIC-LABEL: cam08:
10494; LINUX-32-STATIC:       # %bb.0: # %entry
10495; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10496; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
10497; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10498; LINUX-32-STATIC-NEXT:    retl
10499;
10500; LINUX-32-PIC-LABEL: cam08:
10501; LINUX-32-PIC:       # %bb.0: # %entry
10502; LINUX-32-PIC-NEXT:    calll .L130$pb
10503; LINUX-32-PIC-NEXT:  .L130$pb:
10504; LINUX-32-PIC-NEXT:    popl %eax
10505; LINUX-32-PIC-NEXT:  .Ltmp130:
10506; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp130-.L130$pb), %eax
10507; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10508; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
10509; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10510; LINUX-32-PIC-NEXT:    retl
10511;
10512; LINUX-64-PIC-LABEL: cam08:
10513; LINUX-64-PIC:       # %bb.0: # %entry
10514; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
10515; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10516; LINUX-64-PIC-NEXT:    retq
10517;
10518; DARWIN-32-STATIC-LABEL: cam08:
10519; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10520; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10521; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
10522; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10523; DARWIN-32-STATIC-NEXT:    retl
10524;
10525; DARWIN-32-DYNAMIC-LABEL: cam08:
10526; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10527; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
10528; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
10529; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
10530; DARWIN-32-DYNAMIC-NEXT:    retl
10531;
10532; DARWIN-32-PIC-LABEL: cam08:
10533; DARWIN-32-PIC:       ## %bb.0: ## %entry
10534; DARWIN-32-PIC-NEXT:    calll L130$pb
10535; DARWIN-32-PIC-NEXT:  L130$pb:
10536; DARWIN-32-PIC-NEXT:    popl %eax
10537; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
10538; DARWIN-32-PIC-NEXT:    movl _lptr-L130$pb(%eax), %eax
10539; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
10540; DARWIN-32-PIC-NEXT:    retl
10541;
10542; DARWIN-64-STATIC-LABEL: cam08:
10543; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10544; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
10545; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10546; DARWIN-64-STATIC-NEXT:    retq
10547;
10548; DARWIN-64-DYNAMIC-LABEL: cam08:
10549; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10550; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
10551; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10552; DARWIN-64-DYNAMIC-NEXT:    retq
10553;
10554; DARWIN-64-PIC-LABEL: cam08:
10555; DARWIN-64-PIC:       ## %bb.0: ## %entry
10556; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
10557; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
10558; DARWIN-64-PIC-NEXT:    retq
10559
10560entry:
10561	%0 = load ptr, ptr @lptr, align 8
10562	%1 = add i64 %i, 65536
10563	%2 = getelementptr i32, ptr %0, i64 %1
10564	ret ptr %2
10565}
10566
10567define dso_local void @lcallee() nounwind {
10568; LINUX-64-STATIC-LABEL: lcallee:
10569; LINUX-64-STATIC:       # %bb.0: # %entry
10570; LINUX-64-STATIC-NEXT:    pushq %rax
10571; LINUX-64-STATIC-NEXT:    callq x@PLT
10572; LINUX-64-STATIC-NEXT:    callq x@PLT
10573; LINUX-64-STATIC-NEXT:    callq x@PLT
10574; LINUX-64-STATIC-NEXT:    callq x@PLT
10575; LINUX-64-STATIC-NEXT:    callq x@PLT
10576; LINUX-64-STATIC-NEXT:    callq x@PLT
10577; LINUX-64-STATIC-NEXT:    callq x@PLT
10578; LINUX-64-STATIC-NEXT:    popq %rax
10579; LINUX-64-STATIC-NEXT:    retq
10580;
10581; LINUX-32-STATIC-LABEL: lcallee:
10582; LINUX-32-STATIC:       # %bb.0: # %entry
10583; LINUX-32-STATIC-NEXT:    subl $12, %esp
10584; LINUX-32-STATIC-NEXT:    calll x@PLT
10585; LINUX-32-STATIC-NEXT:    calll x@PLT
10586; LINUX-32-STATIC-NEXT:    calll x@PLT
10587; LINUX-32-STATIC-NEXT:    calll x@PLT
10588; LINUX-32-STATIC-NEXT:    calll x@PLT
10589; LINUX-32-STATIC-NEXT:    calll x@PLT
10590; LINUX-32-STATIC-NEXT:    calll x@PLT
10591; LINUX-32-STATIC-NEXT:    addl $12, %esp
10592; LINUX-32-STATIC-NEXT:    retl
10593;
10594; LINUX-32-PIC-LABEL: lcallee:
10595; LINUX-32-PIC:       # %bb.0: # %entry
10596; LINUX-32-PIC-NEXT:    pushl %ebx
10597; LINUX-32-PIC-NEXT:    subl $8, %esp
10598; LINUX-32-PIC-NEXT:    calll .L131$pb
10599; LINUX-32-PIC-NEXT:  .L131$pb:
10600; LINUX-32-PIC-NEXT:    popl %ebx
10601; LINUX-32-PIC-NEXT:  .Ltmp131:
10602; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp131-.L131$pb), %ebx
10603; LINUX-32-PIC-NEXT:    calll x@PLT
10604; LINUX-32-PIC-NEXT:    calll x@PLT
10605; LINUX-32-PIC-NEXT:    calll x@PLT
10606; LINUX-32-PIC-NEXT:    calll x@PLT
10607; LINUX-32-PIC-NEXT:    calll x@PLT
10608; LINUX-32-PIC-NEXT:    calll x@PLT
10609; LINUX-32-PIC-NEXT:    calll x@PLT
10610; LINUX-32-PIC-NEXT:    addl $8, %esp
10611; LINUX-32-PIC-NEXT:    popl %ebx
10612; LINUX-32-PIC-NEXT:    retl
10613;
10614; LINUX-64-PIC-LABEL: lcallee:
10615; LINUX-64-PIC:       # %bb.0: # %entry
10616; LINUX-64-PIC-NEXT:    pushq %rax
10617; LINUX-64-PIC-NEXT:    callq x@PLT
10618; LINUX-64-PIC-NEXT:    callq x@PLT
10619; LINUX-64-PIC-NEXT:    callq x@PLT
10620; LINUX-64-PIC-NEXT:    callq x@PLT
10621; LINUX-64-PIC-NEXT:    callq x@PLT
10622; LINUX-64-PIC-NEXT:    callq x@PLT
10623; LINUX-64-PIC-NEXT:    callq x@PLT
10624; LINUX-64-PIC-NEXT:    popq %rax
10625; LINUX-64-PIC-NEXT:    retq
10626;
10627; DARWIN-32-STATIC-LABEL: lcallee:
10628; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10629; DARWIN-32-STATIC-NEXT:    subl $12, %esp
10630; DARWIN-32-STATIC-NEXT:    calll _x
10631; DARWIN-32-STATIC-NEXT:    calll _x
10632; DARWIN-32-STATIC-NEXT:    calll _x
10633; DARWIN-32-STATIC-NEXT:    calll _x
10634; DARWIN-32-STATIC-NEXT:    calll _x
10635; DARWIN-32-STATIC-NEXT:    calll _x
10636; DARWIN-32-STATIC-NEXT:    calll _x
10637; DARWIN-32-STATIC-NEXT:    addl $12, %esp
10638; DARWIN-32-STATIC-NEXT:    retl
10639;
10640; DARWIN-32-DYNAMIC-LABEL: lcallee:
10641; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10642; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
10643; DARWIN-32-DYNAMIC-NEXT:    calll _x
10644; DARWIN-32-DYNAMIC-NEXT:    calll _x
10645; DARWIN-32-DYNAMIC-NEXT:    calll _x
10646; DARWIN-32-DYNAMIC-NEXT:    calll _x
10647; DARWIN-32-DYNAMIC-NEXT:    calll _x
10648; DARWIN-32-DYNAMIC-NEXT:    calll _x
10649; DARWIN-32-DYNAMIC-NEXT:    calll _x
10650; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
10651; DARWIN-32-DYNAMIC-NEXT:    retl
10652;
10653; DARWIN-32-PIC-LABEL: lcallee:
10654; DARWIN-32-PIC:       ## %bb.0: ## %entry
10655; DARWIN-32-PIC-NEXT:    subl $12, %esp
10656; DARWIN-32-PIC-NEXT:    calll _x
10657; DARWIN-32-PIC-NEXT:    calll _x
10658; DARWIN-32-PIC-NEXT:    calll _x
10659; DARWIN-32-PIC-NEXT:    calll _x
10660; DARWIN-32-PIC-NEXT:    calll _x
10661; DARWIN-32-PIC-NEXT:    calll _x
10662; DARWIN-32-PIC-NEXT:    calll _x
10663; DARWIN-32-PIC-NEXT:    addl $12, %esp
10664; DARWIN-32-PIC-NEXT:    retl
10665;
10666; DARWIN-64-STATIC-LABEL: lcallee:
10667; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10668; DARWIN-64-STATIC-NEXT:    pushq %rax
10669; DARWIN-64-STATIC-NEXT:    callq _x
10670; DARWIN-64-STATIC-NEXT:    callq _x
10671; DARWIN-64-STATIC-NEXT:    callq _x
10672; DARWIN-64-STATIC-NEXT:    callq _x
10673; DARWIN-64-STATIC-NEXT:    callq _x
10674; DARWIN-64-STATIC-NEXT:    callq _x
10675; DARWIN-64-STATIC-NEXT:    callq _x
10676; DARWIN-64-STATIC-NEXT:    popq %rax
10677; DARWIN-64-STATIC-NEXT:    retq
10678;
10679; DARWIN-64-DYNAMIC-LABEL: lcallee:
10680; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10681; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
10682; DARWIN-64-DYNAMIC-NEXT:    callq _x
10683; DARWIN-64-DYNAMIC-NEXT:    callq _x
10684; DARWIN-64-DYNAMIC-NEXT:    callq _x
10685; DARWIN-64-DYNAMIC-NEXT:    callq _x
10686; DARWIN-64-DYNAMIC-NEXT:    callq _x
10687; DARWIN-64-DYNAMIC-NEXT:    callq _x
10688; DARWIN-64-DYNAMIC-NEXT:    callq _x
10689; DARWIN-64-DYNAMIC-NEXT:    popq %rax
10690; DARWIN-64-DYNAMIC-NEXT:    retq
10691;
10692; DARWIN-64-PIC-LABEL: lcallee:
10693; DARWIN-64-PIC:       ## %bb.0: ## %entry
10694; DARWIN-64-PIC-NEXT:    pushq %rax
10695; DARWIN-64-PIC-NEXT:    callq _x
10696; DARWIN-64-PIC-NEXT:    callq _x
10697; DARWIN-64-PIC-NEXT:    callq _x
10698; DARWIN-64-PIC-NEXT:    callq _x
10699; DARWIN-64-PIC-NEXT:    callq _x
10700; DARWIN-64-PIC-NEXT:    callq _x
10701; DARWIN-64-PIC-NEXT:    callq _x
10702; DARWIN-64-PIC-NEXT:    popq %rax
10703; DARWIN-64-PIC-NEXT:    retq
10704
10705entry:
10706	call void @x() nounwind
10707	call void @x() nounwind
10708	call void @x() nounwind
10709	call void @x() nounwind
10710	call void @x() nounwind
10711	call void @x() nounwind
10712	call void @x() nounwind
10713	ret void
10714}
10715
10716declare void @x()
10717
10718define internal void @dcallee() nounwind {
10719; LINUX-64-STATIC-LABEL: dcallee:
10720; LINUX-64-STATIC:       # %bb.0: # %entry
10721; LINUX-64-STATIC-NEXT:    pushq %rax
10722; LINUX-64-STATIC-NEXT:    callq y@PLT
10723; LINUX-64-STATIC-NEXT:    callq y@PLT
10724; LINUX-64-STATIC-NEXT:    callq y@PLT
10725; LINUX-64-STATIC-NEXT:    callq y@PLT
10726; LINUX-64-STATIC-NEXT:    callq y@PLT
10727; LINUX-64-STATIC-NEXT:    callq y@PLT
10728; LINUX-64-STATIC-NEXT:    callq y@PLT
10729; LINUX-64-STATIC-NEXT:    popq %rax
10730; LINUX-64-STATIC-NEXT:    retq
10731;
10732; LINUX-32-STATIC-LABEL: dcallee:
10733; LINUX-32-STATIC:       # %bb.0: # %entry
10734; LINUX-32-STATIC-NEXT:    subl $12, %esp
10735; LINUX-32-STATIC-NEXT:    calll y@PLT
10736; LINUX-32-STATIC-NEXT:    calll y@PLT
10737; LINUX-32-STATIC-NEXT:    calll y@PLT
10738; LINUX-32-STATIC-NEXT:    calll y@PLT
10739; LINUX-32-STATIC-NEXT:    calll y@PLT
10740; LINUX-32-STATIC-NEXT:    calll y@PLT
10741; LINUX-32-STATIC-NEXT:    calll y@PLT
10742; LINUX-32-STATIC-NEXT:    addl $12, %esp
10743; LINUX-32-STATIC-NEXT:    retl
10744;
10745; LINUX-32-PIC-LABEL: dcallee:
10746; LINUX-32-PIC:       # %bb.0: # %entry
10747; LINUX-32-PIC-NEXT:    pushl %ebx
10748; LINUX-32-PIC-NEXT:    subl $8, %esp
10749; LINUX-32-PIC-NEXT:    calll .L132$pb
10750; LINUX-32-PIC-NEXT:  .L132$pb:
10751; LINUX-32-PIC-NEXT:    popl %ebx
10752; LINUX-32-PIC-NEXT:  .Ltmp132:
10753; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp132-.L132$pb), %ebx
10754; LINUX-32-PIC-NEXT:    calll y@PLT
10755; LINUX-32-PIC-NEXT:    calll y@PLT
10756; LINUX-32-PIC-NEXT:    calll y@PLT
10757; LINUX-32-PIC-NEXT:    calll y@PLT
10758; LINUX-32-PIC-NEXT:    calll y@PLT
10759; LINUX-32-PIC-NEXT:    calll y@PLT
10760; LINUX-32-PIC-NEXT:    calll y@PLT
10761; LINUX-32-PIC-NEXT:    addl $8, %esp
10762; LINUX-32-PIC-NEXT:    popl %ebx
10763; LINUX-32-PIC-NEXT:    retl
10764;
10765; LINUX-64-PIC-LABEL: dcallee:
10766; LINUX-64-PIC:       # %bb.0: # %entry
10767; LINUX-64-PIC-NEXT:    pushq %rax
10768; LINUX-64-PIC-NEXT:    callq y@PLT
10769; LINUX-64-PIC-NEXT:    callq y@PLT
10770; LINUX-64-PIC-NEXT:    callq y@PLT
10771; LINUX-64-PIC-NEXT:    callq y@PLT
10772; LINUX-64-PIC-NEXT:    callq y@PLT
10773; LINUX-64-PIC-NEXT:    callq y@PLT
10774; LINUX-64-PIC-NEXT:    callq y@PLT
10775; LINUX-64-PIC-NEXT:    popq %rax
10776; LINUX-64-PIC-NEXT:    retq
10777;
10778; DARWIN-32-STATIC-LABEL: dcallee:
10779; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10780; DARWIN-32-STATIC-NEXT:    subl $12, %esp
10781; DARWIN-32-STATIC-NEXT:    calll _y
10782; DARWIN-32-STATIC-NEXT:    calll _y
10783; DARWIN-32-STATIC-NEXT:    calll _y
10784; DARWIN-32-STATIC-NEXT:    calll _y
10785; DARWIN-32-STATIC-NEXT:    calll _y
10786; DARWIN-32-STATIC-NEXT:    calll _y
10787; DARWIN-32-STATIC-NEXT:    calll _y
10788; DARWIN-32-STATIC-NEXT:    addl $12, %esp
10789; DARWIN-32-STATIC-NEXT:    retl
10790;
10791; DARWIN-32-DYNAMIC-LABEL: dcallee:
10792; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10793; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
10794; DARWIN-32-DYNAMIC-NEXT:    calll _y
10795; DARWIN-32-DYNAMIC-NEXT:    calll _y
10796; DARWIN-32-DYNAMIC-NEXT:    calll _y
10797; DARWIN-32-DYNAMIC-NEXT:    calll _y
10798; DARWIN-32-DYNAMIC-NEXT:    calll _y
10799; DARWIN-32-DYNAMIC-NEXT:    calll _y
10800; DARWIN-32-DYNAMIC-NEXT:    calll _y
10801; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
10802; DARWIN-32-DYNAMIC-NEXT:    retl
10803;
10804; DARWIN-32-PIC-LABEL: dcallee:
10805; DARWIN-32-PIC:       ## %bb.0: ## %entry
10806; DARWIN-32-PIC-NEXT:    subl $12, %esp
10807; DARWIN-32-PIC-NEXT:    calll _y
10808; DARWIN-32-PIC-NEXT:    calll _y
10809; DARWIN-32-PIC-NEXT:    calll _y
10810; DARWIN-32-PIC-NEXT:    calll _y
10811; DARWIN-32-PIC-NEXT:    calll _y
10812; DARWIN-32-PIC-NEXT:    calll _y
10813; DARWIN-32-PIC-NEXT:    calll _y
10814; DARWIN-32-PIC-NEXT:    addl $12, %esp
10815; DARWIN-32-PIC-NEXT:    retl
10816;
10817; DARWIN-64-STATIC-LABEL: dcallee:
10818; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10819; DARWIN-64-STATIC-NEXT:    pushq %rax
10820; DARWIN-64-STATIC-NEXT:    callq _y
10821; DARWIN-64-STATIC-NEXT:    callq _y
10822; DARWIN-64-STATIC-NEXT:    callq _y
10823; DARWIN-64-STATIC-NEXT:    callq _y
10824; DARWIN-64-STATIC-NEXT:    callq _y
10825; DARWIN-64-STATIC-NEXT:    callq _y
10826; DARWIN-64-STATIC-NEXT:    callq _y
10827; DARWIN-64-STATIC-NEXT:    popq %rax
10828; DARWIN-64-STATIC-NEXT:    retq
10829;
10830; DARWIN-64-DYNAMIC-LABEL: dcallee:
10831; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10832; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
10833; DARWIN-64-DYNAMIC-NEXT:    callq _y
10834; DARWIN-64-DYNAMIC-NEXT:    callq _y
10835; DARWIN-64-DYNAMIC-NEXT:    callq _y
10836; DARWIN-64-DYNAMIC-NEXT:    callq _y
10837; DARWIN-64-DYNAMIC-NEXT:    callq _y
10838; DARWIN-64-DYNAMIC-NEXT:    callq _y
10839; DARWIN-64-DYNAMIC-NEXT:    callq _y
10840; DARWIN-64-DYNAMIC-NEXT:    popq %rax
10841; DARWIN-64-DYNAMIC-NEXT:    retq
10842;
10843; DARWIN-64-PIC-LABEL: dcallee:
10844; DARWIN-64-PIC:       ## %bb.0: ## %entry
10845; DARWIN-64-PIC-NEXT:    pushq %rax
10846; DARWIN-64-PIC-NEXT:    callq _y
10847; DARWIN-64-PIC-NEXT:    callq _y
10848; DARWIN-64-PIC-NEXT:    callq _y
10849; DARWIN-64-PIC-NEXT:    callq _y
10850; DARWIN-64-PIC-NEXT:    callq _y
10851; DARWIN-64-PIC-NEXT:    callq _y
10852; DARWIN-64-PIC-NEXT:    callq _y
10853; DARWIN-64-PIC-NEXT:    popq %rax
10854; DARWIN-64-PIC-NEXT:    retq
10855
10856entry:
10857	call void @y() nounwind
10858	call void @y() nounwind
10859	call void @y() nounwind
10860	call void @y() nounwind
10861	call void @y() nounwind
10862	call void @y() nounwind
10863	call void @y() nounwind
10864	ret void
10865}
10866
10867declare void @y()
10868
10869define dso_local ptr @address() nounwind {
10870; LINUX-64-STATIC-LABEL: address:
10871; LINUX-64-STATIC:       # %bb.0: # %entry
10872; LINUX-64-STATIC-NEXT:    movq callee@GOTPCREL(%rip), %rax
10873; LINUX-64-STATIC-NEXT:    retq
10874;
10875; LINUX-32-STATIC-LABEL: address:
10876; LINUX-32-STATIC:       # %bb.0: # %entry
10877; LINUX-32-STATIC-NEXT:    movl $callee, %eax
10878; LINUX-32-STATIC-NEXT:    retl
10879;
10880; LINUX-32-PIC-LABEL: address:
10881; LINUX-32-PIC:       # %bb.0: # %entry
10882; LINUX-32-PIC-NEXT:    calll .L133$pb
10883; LINUX-32-PIC-NEXT:  .L133$pb:
10884; LINUX-32-PIC-NEXT:    popl %eax
10885; LINUX-32-PIC-NEXT:  .Ltmp133:
10886; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp133-.L133$pb), %eax
10887; LINUX-32-PIC-NEXT:    movl callee@GOT(%eax), %eax
10888; LINUX-32-PIC-NEXT:    retl
10889;
10890; LINUX-64-PIC-LABEL: address:
10891; LINUX-64-PIC:       # %bb.0: # %entry
10892; LINUX-64-PIC-NEXT:    movq callee@GOTPCREL(%rip), %rax
10893; LINUX-64-PIC-NEXT:    retq
10894;
10895; DARWIN-32-STATIC-LABEL: address:
10896; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10897; DARWIN-32-STATIC-NEXT:    movl $_callee, %eax
10898; DARWIN-32-STATIC-NEXT:    retl
10899;
10900; DARWIN-32-DYNAMIC-LABEL: address:
10901; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10902; DARWIN-32-DYNAMIC-NEXT:    movl L_callee$non_lazy_ptr, %eax
10903; DARWIN-32-DYNAMIC-NEXT:    retl
10904;
10905; DARWIN-32-PIC-LABEL: address:
10906; DARWIN-32-PIC:       ## %bb.0: ## %entry
10907; DARWIN-32-PIC-NEXT:    calll L133$pb
10908; DARWIN-32-PIC-NEXT:  L133$pb:
10909; DARWIN-32-PIC-NEXT:    popl %eax
10910; DARWIN-32-PIC-NEXT:    movl L_callee$non_lazy_ptr-L133$pb(%eax), %eax
10911; DARWIN-32-PIC-NEXT:    retl
10912;
10913; DARWIN-64-STATIC-LABEL: address:
10914; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10915; DARWIN-64-STATIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10916; DARWIN-64-STATIC-NEXT:    retq
10917;
10918; DARWIN-64-DYNAMIC-LABEL: address:
10919; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10920; DARWIN-64-DYNAMIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10921; DARWIN-64-DYNAMIC-NEXT:    retq
10922;
10923; DARWIN-64-PIC-LABEL: address:
10924; DARWIN-64-PIC:       ## %bb.0: ## %entry
10925; DARWIN-64-PIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
10926; DARWIN-64-PIC-NEXT:    retq
10927
10928entry:
10929	ret ptr @callee
10930}
10931
10932declare void @callee()
10933
10934define dso_local ptr @laddress() nounwind {
10935; LINUX-64-STATIC-LABEL: laddress:
10936; LINUX-64-STATIC:       # %bb.0: # %entry
10937; LINUX-64-STATIC-NEXT:    movl $lcallee, %eax
10938; LINUX-64-STATIC-NEXT:    retq
10939;
10940; LINUX-32-STATIC-LABEL: laddress:
10941; LINUX-32-STATIC:       # %bb.0: # %entry
10942; LINUX-32-STATIC-NEXT:    movl $lcallee, %eax
10943; LINUX-32-STATIC-NEXT:    retl
10944;
10945; LINUX-32-PIC-LABEL: laddress:
10946; LINUX-32-PIC:       # %bb.0: # %entry
10947; LINUX-32-PIC-NEXT:    calll .L134$pb
10948; LINUX-32-PIC-NEXT:  .L134$pb:
10949; LINUX-32-PIC-NEXT:    popl %eax
10950; LINUX-32-PIC-NEXT:  .Ltmp134:
10951; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp134-.L134$pb), %eax
10952; LINUX-32-PIC-NEXT:    leal .Llcallee$local@GOTOFF(%eax), %eax
10953; LINUX-32-PIC-NEXT:    retl
10954;
10955; LINUX-64-PIC-LABEL: laddress:
10956; LINUX-64-PIC:       # %bb.0: # %entry
10957; LINUX-64-PIC-NEXT:    leaq .Llcallee$local(%rip), %rax
10958; LINUX-64-PIC-NEXT:    retq
10959;
10960; DARWIN-32-STATIC-LABEL: laddress:
10961; DARWIN-32-STATIC:       ## %bb.0: ## %entry
10962; DARWIN-32-STATIC-NEXT:    movl $_lcallee, %eax
10963; DARWIN-32-STATIC-NEXT:    retl
10964;
10965; DARWIN-32-DYNAMIC-LABEL: laddress:
10966; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
10967; DARWIN-32-DYNAMIC-NEXT:    movl $_lcallee, %eax
10968; DARWIN-32-DYNAMIC-NEXT:    retl
10969;
10970; DARWIN-32-PIC-LABEL: laddress:
10971; DARWIN-32-PIC:       ## %bb.0: ## %entry
10972; DARWIN-32-PIC-NEXT:    calll L134$pb
10973; DARWIN-32-PIC-NEXT:  L134$pb:
10974; DARWIN-32-PIC-NEXT:    popl %eax
10975; DARWIN-32-PIC-NEXT:    leal _lcallee-L134$pb(%eax), %eax
10976; DARWIN-32-PIC-NEXT:    retl
10977;
10978; DARWIN-64-STATIC-LABEL: laddress:
10979; DARWIN-64-STATIC:       ## %bb.0: ## %entry
10980; DARWIN-64-STATIC-NEXT:    leaq _lcallee(%rip), %rax
10981; DARWIN-64-STATIC-NEXT:    retq
10982;
10983; DARWIN-64-DYNAMIC-LABEL: laddress:
10984; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
10985; DARWIN-64-DYNAMIC-NEXT:    leaq _lcallee(%rip), %rax
10986; DARWIN-64-DYNAMIC-NEXT:    retq
10987;
10988; DARWIN-64-PIC-LABEL: laddress:
10989; DARWIN-64-PIC:       ## %bb.0: ## %entry
10990; DARWIN-64-PIC-NEXT:    leaq _lcallee(%rip), %rax
10991; DARWIN-64-PIC-NEXT:    retq
10992
10993entry:
10994	ret ptr @lcallee
10995}
10996
10997define dso_local ptr @daddress() nounwind {
10998; LINUX-64-STATIC-LABEL: daddress:
10999; LINUX-64-STATIC:       # %bb.0: # %entry
11000; LINUX-64-STATIC-NEXT:    movl $dcallee, %eax
11001; LINUX-64-STATIC-NEXT:    retq
11002;
11003; LINUX-32-STATIC-LABEL: daddress:
11004; LINUX-32-STATIC:       # %bb.0: # %entry
11005; LINUX-32-STATIC-NEXT:    movl $dcallee, %eax
11006; LINUX-32-STATIC-NEXT:    retl
11007;
11008; LINUX-32-PIC-LABEL: daddress:
11009; LINUX-32-PIC:       # %bb.0: # %entry
11010; LINUX-32-PIC-NEXT:    calll .L135$pb
11011; LINUX-32-PIC-NEXT:  .L135$pb:
11012; LINUX-32-PIC-NEXT:    popl %eax
11013; LINUX-32-PIC-NEXT:  .Ltmp135:
11014; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp135-.L135$pb), %eax
11015; LINUX-32-PIC-NEXT:    leal dcallee@GOTOFF(%eax), %eax
11016; LINUX-32-PIC-NEXT:    retl
11017;
11018; LINUX-64-PIC-LABEL: daddress:
11019; LINUX-64-PIC:       # %bb.0: # %entry
11020; LINUX-64-PIC-NEXT:    leaq dcallee(%rip), %rax
11021; LINUX-64-PIC-NEXT:    retq
11022;
11023; DARWIN-32-STATIC-LABEL: daddress:
11024; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11025; DARWIN-32-STATIC-NEXT:    movl $_dcallee, %eax
11026; DARWIN-32-STATIC-NEXT:    retl
11027;
11028; DARWIN-32-DYNAMIC-LABEL: daddress:
11029; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11030; DARWIN-32-DYNAMIC-NEXT:    movl $_dcallee, %eax
11031; DARWIN-32-DYNAMIC-NEXT:    retl
11032;
11033; DARWIN-32-PIC-LABEL: daddress:
11034; DARWIN-32-PIC:       ## %bb.0: ## %entry
11035; DARWIN-32-PIC-NEXT:    calll L135$pb
11036; DARWIN-32-PIC-NEXT:  L135$pb:
11037; DARWIN-32-PIC-NEXT:    popl %eax
11038; DARWIN-32-PIC-NEXT:    leal _dcallee-L135$pb(%eax), %eax
11039; DARWIN-32-PIC-NEXT:    retl
11040;
11041; DARWIN-64-STATIC-LABEL: daddress:
11042; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11043; DARWIN-64-STATIC-NEXT:    leaq _dcallee(%rip), %rax
11044; DARWIN-64-STATIC-NEXT:    retq
11045;
11046; DARWIN-64-DYNAMIC-LABEL: daddress:
11047; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11048; DARWIN-64-DYNAMIC-NEXT:    leaq _dcallee(%rip), %rax
11049; DARWIN-64-DYNAMIC-NEXT:    retq
11050;
11051; DARWIN-64-PIC-LABEL: daddress:
11052; DARWIN-64-PIC:       ## %bb.0: ## %entry
11053; DARWIN-64-PIC-NEXT:    leaq _dcallee(%rip), %rax
11054; DARWIN-64-PIC-NEXT:    retq
11055
11056entry:
11057	ret ptr @dcallee
11058}
11059
11060define dso_local void @caller() nounwind {
11061; LINUX-64-STATIC-LABEL: caller:
11062; LINUX-64-STATIC:       # %bb.0: # %entry
11063; LINUX-64-STATIC-NEXT:    pushq %rax
11064; LINUX-64-STATIC-NEXT:    callq callee@PLT
11065; LINUX-64-STATIC-NEXT:    callq callee@PLT
11066; LINUX-64-STATIC-NEXT:    popq %rax
11067; LINUX-64-STATIC-NEXT:    retq
11068;
11069; LINUX-32-STATIC-LABEL: caller:
11070; LINUX-32-STATIC:       # %bb.0: # %entry
11071; LINUX-32-STATIC-NEXT:    subl $12, %esp
11072; LINUX-32-STATIC-NEXT:    calll callee@PLT
11073; LINUX-32-STATIC-NEXT:    calll callee@PLT
11074; LINUX-32-STATIC-NEXT:    addl $12, %esp
11075; LINUX-32-STATIC-NEXT:    retl
11076;
11077; LINUX-32-PIC-LABEL: caller:
11078; LINUX-32-PIC:       # %bb.0: # %entry
11079; LINUX-32-PIC-NEXT:    pushl %ebx
11080; LINUX-32-PIC-NEXT:    subl $8, %esp
11081; LINUX-32-PIC-NEXT:    calll .L136$pb
11082; LINUX-32-PIC-NEXT:  .L136$pb:
11083; LINUX-32-PIC-NEXT:    popl %ebx
11084; LINUX-32-PIC-NEXT:  .Ltmp136:
11085; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp136-.L136$pb), %ebx
11086; LINUX-32-PIC-NEXT:    calll callee@PLT
11087; LINUX-32-PIC-NEXT:    calll callee@PLT
11088; LINUX-32-PIC-NEXT:    addl $8, %esp
11089; LINUX-32-PIC-NEXT:    popl %ebx
11090; LINUX-32-PIC-NEXT:    retl
11091;
11092; LINUX-64-PIC-LABEL: caller:
11093; LINUX-64-PIC:       # %bb.0: # %entry
11094; LINUX-64-PIC-NEXT:    pushq %rax
11095; LINUX-64-PIC-NEXT:    callq callee@PLT
11096; LINUX-64-PIC-NEXT:    callq callee@PLT
11097; LINUX-64-PIC-NEXT:    popq %rax
11098; LINUX-64-PIC-NEXT:    retq
11099;
11100; DARWIN-32-STATIC-LABEL: caller:
11101; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11102; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11103; DARWIN-32-STATIC-NEXT:    calll _callee
11104; DARWIN-32-STATIC-NEXT:    calll _callee
11105; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11106; DARWIN-32-STATIC-NEXT:    retl
11107;
11108; DARWIN-32-DYNAMIC-LABEL: caller:
11109; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11110; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11111; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11112; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11113; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11114; DARWIN-32-DYNAMIC-NEXT:    retl
11115;
11116; DARWIN-32-PIC-LABEL: caller:
11117; DARWIN-32-PIC:       ## %bb.0: ## %entry
11118; DARWIN-32-PIC-NEXT:    subl $12, %esp
11119; DARWIN-32-PIC-NEXT:    calll _callee
11120; DARWIN-32-PIC-NEXT:    calll _callee
11121; DARWIN-32-PIC-NEXT:    addl $12, %esp
11122; DARWIN-32-PIC-NEXT:    retl
11123;
11124; DARWIN-64-STATIC-LABEL: caller:
11125; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11126; DARWIN-64-STATIC-NEXT:    pushq %rax
11127; DARWIN-64-STATIC-NEXT:    callq _callee
11128; DARWIN-64-STATIC-NEXT:    callq _callee
11129; DARWIN-64-STATIC-NEXT:    popq %rax
11130; DARWIN-64-STATIC-NEXT:    retq
11131;
11132; DARWIN-64-DYNAMIC-LABEL: caller:
11133; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11134; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11135; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11136; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11137; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11138; DARWIN-64-DYNAMIC-NEXT:    retq
11139;
11140; DARWIN-64-PIC-LABEL: caller:
11141; DARWIN-64-PIC:       ## %bb.0: ## %entry
11142; DARWIN-64-PIC-NEXT:    pushq %rax
11143; DARWIN-64-PIC-NEXT:    callq _callee
11144; DARWIN-64-PIC-NEXT:    callq _callee
11145; DARWIN-64-PIC-NEXT:    popq %rax
11146; DARWIN-64-PIC-NEXT:    retq
11147
11148entry:
11149	call void @callee() nounwind
11150	call void @callee() nounwind
11151	ret void
11152}
11153
11154define dso_local void @dcaller() nounwind {
11155; LINUX-64-STATIC-LABEL: dcaller:
11156; LINUX-64-STATIC:       # %bb.0: # %entry
11157; LINUX-64-STATIC-NEXT:    pushq %rax
11158; LINUX-64-STATIC-NEXT:    callq dcallee
11159; LINUX-64-STATIC-NEXT:    callq dcallee
11160; LINUX-64-STATIC-NEXT:    popq %rax
11161; LINUX-64-STATIC-NEXT:    retq
11162;
11163; LINUX-32-STATIC-LABEL: dcaller:
11164; LINUX-32-STATIC:       # %bb.0: # %entry
11165; LINUX-32-STATIC-NEXT:    subl $12, %esp
11166; LINUX-32-STATIC-NEXT:    calll dcallee
11167; LINUX-32-STATIC-NEXT:    calll dcallee
11168; LINUX-32-STATIC-NEXT:    addl $12, %esp
11169; LINUX-32-STATIC-NEXT:    retl
11170;
11171; LINUX-32-PIC-LABEL: dcaller:
11172; LINUX-32-PIC:       # %bb.0: # %entry
11173; LINUX-32-PIC-NEXT:    pushl %ebx
11174; LINUX-32-PIC-NEXT:    subl $8, %esp
11175; LINUX-32-PIC-NEXT:    calll .L137$pb
11176; LINUX-32-PIC-NEXT:  .L137$pb:
11177; LINUX-32-PIC-NEXT:    popl %ebx
11178; LINUX-32-PIC-NEXT:  .Ltmp137:
11179; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp137-.L137$pb), %ebx
11180; LINUX-32-PIC-NEXT:    calll dcallee
11181; LINUX-32-PIC-NEXT:    calll dcallee
11182; LINUX-32-PIC-NEXT:    addl $8, %esp
11183; LINUX-32-PIC-NEXT:    popl %ebx
11184; LINUX-32-PIC-NEXT:    retl
11185;
11186; LINUX-64-PIC-LABEL: dcaller:
11187; LINUX-64-PIC:       # %bb.0: # %entry
11188; LINUX-64-PIC-NEXT:    pushq %rax
11189; LINUX-64-PIC-NEXT:    callq dcallee
11190; LINUX-64-PIC-NEXT:    callq dcallee
11191; LINUX-64-PIC-NEXT:    popq %rax
11192; LINUX-64-PIC-NEXT:    retq
11193;
11194; DARWIN-32-STATIC-LABEL: dcaller:
11195; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11196; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11197; DARWIN-32-STATIC-NEXT:    calll _dcallee
11198; DARWIN-32-STATIC-NEXT:    calll _dcallee
11199; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11200; DARWIN-32-STATIC-NEXT:    retl
11201;
11202; DARWIN-32-DYNAMIC-LABEL: dcaller:
11203; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11204; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11205; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11206; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11207; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11208; DARWIN-32-DYNAMIC-NEXT:    retl
11209;
11210; DARWIN-32-PIC-LABEL: dcaller:
11211; DARWIN-32-PIC:       ## %bb.0: ## %entry
11212; DARWIN-32-PIC-NEXT:    subl $12, %esp
11213; DARWIN-32-PIC-NEXT:    calll _dcallee
11214; DARWIN-32-PIC-NEXT:    calll _dcallee
11215; DARWIN-32-PIC-NEXT:    addl $12, %esp
11216; DARWIN-32-PIC-NEXT:    retl
11217;
11218; DARWIN-64-STATIC-LABEL: dcaller:
11219; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11220; DARWIN-64-STATIC-NEXT:    pushq %rax
11221; DARWIN-64-STATIC-NEXT:    callq _dcallee
11222; DARWIN-64-STATIC-NEXT:    callq _dcallee
11223; DARWIN-64-STATIC-NEXT:    popq %rax
11224; DARWIN-64-STATIC-NEXT:    retq
11225;
11226; DARWIN-64-DYNAMIC-LABEL: dcaller:
11227; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11228; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11229; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11230; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11231; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11232; DARWIN-64-DYNAMIC-NEXT:    retq
11233;
11234; DARWIN-64-PIC-LABEL: dcaller:
11235; DARWIN-64-PIC:       ## %bb.0: ## %entry
11236; DARWIN-64-PIC-NEXT:    pushq %rax
11237; DARWIN-64-PIC-NEXT:    callq _dcallee
11238; DARWIN-64-PIC-NEXT:    callq _dcallee
11239; DARWIN-64-PIC-NEXT:    popq %rax
11240; DARWIN-64-PIC-NEXT:    retq
11241
11242entry:
11243	call void @dcallee() nounwind
11244	call void @dcallee() nounwind
11245	ret void
11246}
11247
11248define dso_local void @lcaller() nounwind {
11249; LINUX-64-STATIC-LABEL: lcaller:
11250; LINUX-64-STATIC:       # %bb.0: # %entry
11251; LINUX-64-STATIC-NEXT:    pushq %rax
11252; LINUX-64-STATIC-NEXT:    callq lcallee
11253; LINUX-64-STATIC-NEXT:    callq lcallee
11254; LINUX-64-STATIC-NEXT:    popq %rax
11255; LINUX-64-STATIC-NEXT:    retq
11256;
11257; LINUX-32-STATIC-LABEL: lcaller:
11258; LINUX-32-STATIC:       # %bb.0: # %entry
11259; LINUX-32-STATIC-NEXT:    subl $12, %esp
11260; LINUX-32-STATIC-NEXT:    calll lcallee
11261; LINUX-32-STATIC-NEXT:    calll lcallee
11262; LINUX-32-STATIC-NEXT:    addl $12, %esp
11263; LINUX-32-STATIC-NEXT:    retl
11264;
11265; LINUX-32-PIC-LABEL: lcaller:
11266; LINUX-32-PIC:       # %bb.0: # %entry
11267; LINUX-32-PIC-NEXT:    pushl %ebx
11268; LINUX-32-PIC-NEXT:    subl $8, %esp
11269; LINUX-32-PIC-NEXT:    calll .L138$pb
11270; LINUX-32-PIC-NEXT:  .L138$pb:
11271; LINUX-32-PIC-NEXT:    popl %ebx
11272; LINUX-32-PIC-NEXT:  .Ltmp138:
11273; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp138-.L138$pb), %ebx
11274; LINUX-32-PIC-NEXT:    calll .Llcallee$local
11275; LINUX-32-PIC-NEXT:    calll .Llcallee$local
11276; LINUX-32-PIC-NEXT:    addl $8, %esp
11277; LINUX-32-PIC-NEXT:    popl %ebx
11278; LINUX-32-PIC-NEXT:    retl
11279;
11280; LINUX-64-PIC-LABEL: lcaller:
11281; LINUX-64-PIC:       # %bb.0: # %entry
11282; LINUX-64-PIC-NEXT:    pushq %rax
11283; LINUX-64-PIC-NEXT:    callq .Llcallee$local
11284; LINUX-64-PIC-NEXT:    callq .Llcallee$local
11285; LINUX-64-PIC-NEXT:    popq %rax
11286; LINUX-64-PIC-NEXT:    retq
11287;
11288; DARWIN-32-STATIC-LABEL: lcaller:
11289; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11290; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11291; DARWIN-32-STATIC-NEXT:    calll _lcallee
11292; DARWIN-32-STATIC-NEXT:    calll _lcallee
11293; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11294; DARWIN-32-STATIC-NEXT:    retl
11295;
11296; DARWIN-32-DYNAMIC-LABEL: lcaller:
11297; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11298; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11299; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11300; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11301; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11302; DARWIN-32-DYNAMIC-NEXT:    retl
11303;
11304; DARWIN-32-PIC-LABEL: lcaller:
11305; DARWIN-32-PIC:       ## %bb.0: ## %entry
11306; DARWIN-32-PIC-NEXT:    subl $12, %esp
11307; DARWIN-32-PIC-NEXT:    calll _lcallee
11308; DARWIN-32-PIC-NEXT:    calll _lcallee
11309; DARWIN-32-PIC-NEXT:    addl $12, %esp
11310; DARWIN-32-PIC-NEXT:    retl
11311;
11312; DARWIN-64-STATIC-LABEL: lcaller:
11313; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11314; DARWIN-64-STATIC-NEXT:    pushq %rax
11315; DARWIN-64-STATIC-NEXT:    callq _lcallee
11316; DARWIN-64-STATIC-NEXT:    callq _lcallee
11317; DARWIN-64-STATIC-NEXT:    popq %rax
11318; DARWIN-64-STATIC-NEXT:    retq
11319;
11320; DARWIN-64-DYNAMIC-LABEL: lcaller:
11321; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11322; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11323; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11324; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11325; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11326; DARWIN-64-DYNAMIC-NEXT:    retq
11327;
11328; DARWIN-64-PIC-LABEL: lcaller:
11329; DARWIN-64-PIC:       ## %bb.0: ## %entry
11330; DARWIN-64-PIC-NEXT:    pushq %rax
11331; DARWIN-64-PIC-NEXT:    callq _lcallee
11332; DARWIN-64-PIC-NEXT:    callq _lcallee
11333; DARWIN-64-PIC-NEXT:    popq %rax
11334; DARWIN-64-PIC-NEXT:    retq
11335
11336entry:
11337	call void @lcallee() nounwind
11338	call void @lcallee() nounwind
11339	ret void
11340}
11341
11342define dso_local void @tailcaller() nounwind {
11343; LINUX-64-STATIC-LABEL: tailcaller:
11344; LINUX-64-STATIC:       # %bb.0: # %entry
11345; LINUX-64-STATIC-NEXT:    pushq %rax
11346; LINUX-64-STATIC-NEXT:    callq callee@PLT
11347; LINUX-64-STATIC-NEXT:    popq %rax
11348; LINUX-64-STATIC-NEXT:    retq
11349;
11350; LINUX-32-STATIC-LABEL: tailcaller:
11351; LINUX-32-STATIC:       # %bb.0: # %entry
11352; LINUX-32-STATIC-NEXT:    subl $12, %esp
11353; LINUX-32-STATIC-NEXT:    calll callee@PLT
11354; LINUX-32-STATIC-NEXT:    addl $12, %esp
11355; LINUX-32-STATIC-NEXT:    retl
11356;
11357; LINUX-32-PIC-LABEL: tailcaller:
11358; LINUX-32-PIC:       # %bb.0: # %entry
11359; LINUX-32-PIC-NEXT:    pushl %ebx
11360; LINUX-32-PIC-NEXT:    subl $8, %esp
11361; LINUX-32-PIC-NEXT:    calll .L139$pb
11362; LINUX-32-PIC-NEXT:  .L139$pb:
11363; LINUX-32-PIC-NEXT:    popl %ebx
11364; LINUX-32-PIC-NEXT:  .Ltmp139:
11365; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp139-.L139$pb), %ebx
11366; LINUX-32-PIC-NEXT:    calll callee@PLT
11367; LINUX-32-PIC-NEXT:    addl $8, %esp
11368; LINUX-32-PIC-NEXT:    popl %ebx
11369; LINUX-32-PIC-NEXT:    retl
11370;
11371; LINUX-64-PIC-LABEL: tailcaller:
11372; LINUX-64-PIC:       # %bb.0: # %entry
11373; LINUX-64-PIC-NEXT:    pushq %rax
11374; LINUX-64-PIC-NEXT:    callq callee@PLT
11375; LINUX-64-PIC-NEXT:    popq %rax
11376; LINUX-64-PIC-NEXT:    retq
11377;
11378; DARWIN-32-STATIC-LABEL: tailcaller:
11379; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11380; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11381; DARWIN-32-STATIC-NEXT:    calll _callee
11382; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11383; DARWIN-32-STATIC-NEXT:    retl
11384;
11385; DARWIN-32-DYNAMIC-LABEL: tailcaller:
11386; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11387; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11388; DARWIN-32-DYNAMIC-NEXT:    calll _callee
11389; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11390; DARWIN-32-DYNAMIC-NEXT:    retl
11391;
11392; DARWIN-32-PIC-LABEL: tailcaller:
11393; DARWIN-32-PIC:       ## %bb.0: ## %entry
11394; DARWIN-32-PIC-NEXT:    subl $12, %esp
11395; DARWIN-32-PIC-NEXT:    calll _callee
11396; DARWIN-32-PIC-NEXT:    addl $12, %esp
11397; DARWIN-32-PIC-NEXT:    retl
11398;
11399; DARWIN-64-STATIC-LABEL: tailcaller:
11400; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11401; DARWIN-64-STATIC-NEXT:    pushq %rax
11402; DARWIN-64-STATIC-NEXT:    callq _callee
11403; DARWIN-64-STATIC-NEXT:    popq %rax
11404; DARWIN-64-STATIC-NEXT:    retq
11405;
11406; DARWIN-64-DYNAMIC-LABEL: tailcaller:
11407; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11408; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11409; DARWIN-64-DYNAMIC-NEXT:    callq _callee
11410; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11411; DARWIN-64-DYNAMIC-NEXT:    retq
11412;
11413; DARWIN-64-PIC-LABEL: tailcaller:
11414; DARWIN-64-PIC:       ## %bb.0: ## %entry
11415; DARWIN-64-PIC-NEXT:    pushq %rax
11416; DARWIN-64-PIC-NEXT:    callq _callee
11417; DARWIN-64-PIC-NEXT:    popq %rax
11418; DARWIN-64-PIC-NEXT:    retq
11419
11420entry:
11421	call void @callee() nounwind
11422	ret void
11423}
11424
11425define dso_local void @dtailcaller() nounwind {
11426; LINUX-64-STATIC-LABEL: dtailcaller:
11427; LINUX-64-STATIC:       # %bb.0: # %entry
11428; LINUX-64-STATIC-NEXT:    pushq %rax
11429; LINUX-64-STATIC-NEXT:    callq dcallee
11430; LINUX-64-STATIC-NEXT:    popq %rax
11431; LINUX-64-STATIC-NEXT:    retq
11432;
11433; LINUX-32-STATIC-LABEL: dtailcaller:
11434; LINUX-32-STATIC:       # %bb.0: # %entry
11435; LINUX-32-STATIC-NEXT:    subl $12, %esp
11436; LINUX-32-STATIC-NEXT:    calll dcallee
11437; LINUX-32-STATIC-NEXT:    addl $12, %esp
11438; LINUX-32-STATIC-NEXT:    retl
11439;
11440; LINUX-32-PIC-LABEL: dtailcaller:
11441; LINUX-32-PIC:       # %bb.0: # %entry
11442; LINUX-32-PIC-NEXT:    pushl %ebx
11443; LINUX-32-PIC-NEXT:    subl $8, %esp
11444; LINUX-32-PIC-NEXT:    calll .L140$pb
11445; LINUX-32-PIC-NEXT:  .L140$pb:
11446; LINUX-32-PIC-NEXT:    popl %ebx
11447; LINUX-32-PIC-NEXT:  .Ltmp140:
11448; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp140-.L140$pb), %ebx
11449; LINUX-32-PIC-NEXT:    calll dcallee
11450; LINUX-32-PIC-NEXT:    addl $8, %esp
11451; LINUX-32-PIC-NEXT:    popl %ebx
11452; LINUX-32-PIC-NEXT:    retl
11453;
11454; LINUX-64-PIC-LABEL: dtailcaller:
11455; LINUX-64-PIC:       # %bb.0: # %entry
11456; LINUX-64-PIC-NEXT:    pushq %rax
11457; LINUX-64-PIC-NEXT:    callq dcallee
11458; LINUX-64-PIC-NEXT:    popq %rax
11459; LINUX-64-PIC-NEXT:    retq
11460;
11461; DARWIN-32-STATIC-LABEL: dtailcaller:
11462; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11463; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11464; DARWIN-32-STATIC-NEXT:    calll _dcallee
11465; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11466; DARWIN-32-STATIC-NEXT:    retl
11467;
11468; DARWIN-32-DYNAMIC-LABEL: dtailcaller:
11469; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11470; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11471; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
11472; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11473; DARWIN-32-DYNAMIC-NEXT:    retl
11474;
11475; DARWIN-32-PIC-LABEL: dtailcaller:
11476; DARWIN-32-PIC:       ## %bb.0: ## %entry
11477; DARWIN-32-PIC-NEXT:    subl $12, %esp
11478; DARWIN-32-PIC-NEXT:    calll _dcallee
11479; DARWIN-32-PIC-NEXT:    addl $12, %esp
11480; DARWIN-32-PIC-NEXT:    retl
11481;
11482; DARWIN-64-STATIC-LABEL: dtailcaller:
11483; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11484; DARWIN-64-STATIC-NEXT:    pushq %rax
11485; DARWIN-64-STATIC-NEXT:    callq _dcallee
11486; DARWIN-64-STATIC-NEXT:    popq %rax
11487; DARWIN-64-STATIC-NEXT:    retq
11488;
11489; DARWIN-64-DYNAMIC-LABEL: dtailcaller:
11490; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11491; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11492; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
11493; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11494; DARWIN-64-DYNAMIC-NEXT:    retq
11495;
11496; DARWIN-64-PIC-LABEL: dtailcaller:
11497; DARWIN-64-PIC:       ## %bb.0: ## %entry
11498; DARWIN-64-PIC-NEXT:    pushq %rax
11499; DARWIN-64-PIC-NEXT:    callq _dcallee
11500; DARWIN-64-PIC-NEXT:    popq %rax
11501; DARWIN-64-PIC-NEXT:    retq
11502
11503entry:
11504	call void @dcallee() nounwind
11505	ret void
11506}
11507
11508define dso_local void @ltailcaller() nounwind {
11509; LINUX-64-STATIC-LABEL: ltailcaller:
11510; LINUX-64-STATIC:       # %bb.0: # %entry
11511; LINUX-64-STATIC-NEXT:    pushq %rax
11512; LINUX-64-STATIC-NEXT:    callq lcallee
11513; LINUX-64-STATIC-NEXT:    popq %rax
11514; LINUX-64-STATIC-NEXT:    retq
11515;
11516; LINUX-32-STATIC-LABEL: ltailcaller:
11517; LINUX-32-STATIC:       # %bb.0: # %entry
11518; LINUX-32-STATIC-NEXT:    subl $12, %esp
11519; LINUX-32-STATIC-NEXT:    calll lcallee
11520; LINUX-32-STATIC-NEXT:    addl $12, %esp
11521; LINUX-32-STATIC-NEXT:    retl
11522;
11523; LINUX-32-PIC-LABEL: ltailcaller:
11524; LINUX-32-PIC:       # %bb.0: # %entry
11525; LINUX-32-PIC-NEXT:    pushl %ebx
11526; LINUX-32-PIC-NEXT:    subl $8, %esp
11527; LINUX-32-PIC-NEXT:    calll .L141$pb
11528; LINUX-32-PIC-NEXT:  .L141$pb:
11529; LINUX-32-PIC-NEXT:    popl %ebx
11530; LINUX-32-PIC-NEXT:  .Ltmp141:
11531; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp141-.L141$pb), %ebx
11532; LINUX-32-PIC-NEXT:    calll .Llcallee$local
11533; LINUX-32-PIC-NEXT:    addl $8, %esp
11534; LINUX-32-PIC-NEXT:    popl %ebx
11535; LINUX-32-PIC-NEXT:    retl
11536;
11537; LINUX-64-PIC-LABEL: ltailcaller:
11538; LINUX-64-PIC:       # %bb.0: # %entry
11539; LINUX-64-PIC-NEXT:    pushq %rax
11540; LINUX-64-PIC-NEXT:    callq .Llcallee$local
11541; LINUX-64-PIC-NEXT:    popq %rax
11542; LINUX-64-PIC-NEXT:    retq
11543;
11544; DARWIN-32-STATIC-LABEL: ltailcaller:
11545; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11546; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11547; DARWIN-32-STATIC-NEXT:    calll _lcallee
11548; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11549; DARWIN-32-STATIC-NEXT:    retl
11550;
11551; DARWIN-32-DYNAMIC-LABEL: ltailcaller:
11552; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11553; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11554; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
11555; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11556; DARWIN-32-DYNAMIC-NEXT:    retl
11557;
11558; DARWIN-32-PIC-LABEL: ltailcaller:
11559; DARWIN-32-PIC:       ## %bb.0: ## %entry
11560; DARWIN-32-PIC-NEXT:    subl $12, %esp
11561; DARWIN-32-PIC-NEXT:    calll _lcallee
11562; DARWIN-32-PIC-NEXT:    addl $12, %esp
11563; DARWIN-32-PIC-NEXT:    retl
11564;
11565; DARWIN-64-STATIC-LABEL: ltailcaller:
11566; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11567; DARWIN-64-STATIC-NEXT:    pushq %rax
11568; DARWIN-64-STATIC-NEXT:    callq _lcallee
11569; DARWIN-64-STATIC-NEXT:    popq %rax
11570; DARWIN-64-STATIC-NEXT:    retq
11571;
11572; DARWIN-64-DYNAMIC-LABEL: ltailcaller:
11573; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11574; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11575; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
11576; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11577; DARWIN-64-DYNAMIC-NEXT:    retq
11578;
11579; DARWIN-64-PIC-LABEL: ltailcaller:
11580; DARWIN-64-PIC:       ## %bb.0: ## %entry
11581; DARWIN-64-PIC-NEXT:    pushq %rax
11582; DARWIN-64-PIC-NEXT:    callq _lcallee
11583; DARWIN-64-PIC-NEXT:    popq %rax
11584; DARWIN-64-PIC-NEXT:    retq
11585
11586entry:
11587	call void @lcallee() nounwind
11588	ret void
11589}
11590
11591define dso_local void @icaller() nounwind {
11592; LINUX-64-STATIC-LABEL: icaller:
11593; LINUX-64-STATIC:       # %bb.0: # %entry
11594; LINUX-64-STATIC-NEXT:    pushq %rbx
11595; LINUX-64-STATIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11596; LINUX-64-STATIC-NEXT:    callq *(%rbx)
11597; LINUX-64-STATIC-NEXT:    callq *(%rbx)
11598; LINUX-64-STATIC-NEXT:    popq %rbx
11599; LINUX-64-STATIC-NEXT:    retq
11600;
11601; LINUX-32-STATIC-LABEL: icaller:
11602; LINUX-32-STATIC:       # %bb.0: # %entry
11603; LINUX-32-STATIC-NEXT:    subl $12, %esp
11604; LINUX-32-STATIC-NEXT:    calll *ifunc
11605; LINUX-32-STATIC-NEXT:    calll *ifunc
11606; LINUX-32-STATIC-NEXT:    addl $12, %esp
11607; LINUX-32-STATIC-NEXT:    retl
11608;
11609; LINUX-32-PIC-LABEL: icaller:
11610; LINUX-32-PIC:       # %bb.0: # %entry
11611; LINUX-32-PIC-NEXT:    pushl %ebx
11612; LINUX-32-PIC-NEXT:    pushl %esi
11613; LINUX-32-PIC-NEXT:    pushl %eax
11614; LINUX-32-PIC-NEXT:    calll .L142$pb
11615; LINUX-32-PIC-NEXT:  .L142$pb:
11616; LINUX-32-PIC-NEXT:    popl %ebx
11617; LINUX-32-PIC-NEXT:  .Ltmp142:
11618; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp142-.L142$pb), %ebx
11619; LINUX-32-PIC-NEXT:    movl ifunc@GOT(%ebx), %esi
11620; LINUX-32-PIC-NEXT:    calll *(%esi)
11621; LINUX-32-PIC-NEXT:    calll *(%esi)
11622; LINUX-32-PIC-NEXT:    addl $4, %esp
11623; LINUX-32-PIC-NEXT:    popl %esi
11624; LINUX-32-PIC-NEXT:    popl %ebx
11625; LINUX-32-PIC-NEXT:    retl
11626;
11627; LINUX-64-PIC-LABEL: icaller:
11628; LINUX-64-PIC:       # %bb.0: # %entry
11629; LINUX-64-PIC-NEXT:    pushq %rbx
11630; LINUX-64-PIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11631; LINUX-64-PIC-NEXT:    callq *(%rbx)
11632; LINUX-64-PIC-NEXT:    callq *(%rbx)
11633; LINUX-64-PIC-NEXT:    popq %rbx
11634; LINUX-64-PIC-NEXT:    retq
11635;
11636; DARWIN-32-STATIC-LABEL: icaller:
11637; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11638; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11639; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11640; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11641; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11642; DARWIN-32-STATIC-NEXT:    retl
11643;
11644; DARWIN-32-DYNAMIC-LABEL: icaller:
11645; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11646; DARWIN-32-DYNAMIC-NEXT:    pushl %esi
11647; DARWIN-32-DYNAMIC-NEXT:    subl $8, %esp
11648; DARWIN-32-DYNAMIC-NEXT:    movl L_ifunc$non_lazy_ptr, %esi
11649; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11650; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11651; DARWIN-32-DYNAMIC-NEXT:    addl $8, %esp
11652; DARWIN-32-DYNAMIC-NEXT:    popl %esi
11653; DARWIN-32-DYNAMIC-NEXT:    retl
11654;
11655; DARWIN-32-PIC-LABEL: icaller:
11656; DARWIN-32-PIC:       ## %bb.0: ## %entry
11657; DARWIN-32-PIC-NEXT:    pushl %esi
11658; DARWIN-32-PIC-NEXT:    subl $8, %esp
11659; DARWIN-32-PIC-NEXT:    calll L142$pb
11660; DARWIN-32-PIC-NEXT:  L142$pb:
11661; DARWIN-32-PIC-NEXT:    popl %eax
11662; DARWIN-32-PIC-NEXT:    movl L_ifunc$non_lazy_ptr-L142$pb(%eax), %esi
11663; DARWIN-32-PIC-NEXT:    calll *(%esi)
11664; DARWIN-32-PIC-NEXT:    calll *(%esi)
11665; DARWIN-32-PIC-NEXT:    addl $8, %esp
11666; DARWIN-32-PIC-NEXT:    popl %esi
11667; DARWIN-32-PIC-NEXT:    retl
11668;
11669; DARWIN-64-STATIC-LABEL: icaller:
11670; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11671; DARWIN-64-STATIC-NEXT:    pushq %rbx
11672; DARWIN-64-STATIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11673; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
11674; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
11675; DARWIN-64-STATIC-NEXT:    popq %rbx
11676; DARWIN-64-STATIC-NEXT:    retq
11677;
11678; DARWIN-64-DYNAMIC-LABEL: icaller:
11679; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11680; DARWIN-64-DYNAMIC-NEXT:    pushq %rbx
11681; DARWIN-64-DYNAMIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11682; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
11683; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
11684; DARWIN-64-DYNAMIC-NEXT:    popq %rbx
11685; DARWIN-64-DYNAMIC-NEXT:    retq
11686;
11687; DARWIN-64-PIC-LABEL: icaller:
11688; DARWIN-64-PIC:       ## %bb.0: ## %entry
11689; DARWIN-64-PIC-NEXT:    pushq %rbx
11690; DARWIN-64-PIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11691; DARWIN-64-PIC-NEXT:    callq *(%rbx)
11692; DARWIN-64-PIC-NEXT:    callq *(%rbx)
11693; DARWIN-64-PIC-NEXT:    popq %rbx
11694; DARWIN-64-PIC-NEXT:    retq
11695
11696entry:
11697	%0 = load ptr, ptr @ifunc, align 8
11698	call void %0() nounwind
11699	%1 = load ptr, ptr @ifunc, align 8
11700	call void %1() nounwind
11701	ret void
11702}
11703
11704define dso_local void @dicaller() nounwind {
11705; LINUX-64-STATIC-LABEL: dicaller:
11706; LINUX-64-STATIC:       # %bb.0: # %entry
11707; LINUX-64-STATIC-NEXT:    pushq %rax
11708; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
11709; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
11710; LINUX-64-STATIC-NEXT:    popq %rax
11711; LINUX-64-STATIC-NEXT:    retq
11712;
11713; LINUX-32-STATIC-LABEL: dicaller:
11714; LINUX-32-STATIC:       # %bb.0: # %entry
11715; LINUX-32-STATIC-NEXT:    subl $12, %esp
11716; LINUX-32-STATIC-NEXT:    calll *difunc
11717; LINUX-32-STATIC-NEXT:    calll *difunc
11718; LINUX-32-STATIC-NEXT:    addl $12, %esp
11719; LINUX-32-STATIC-NEXT:    retl
11720;
11721; LINUX-32-PIC-LABEL: dicaller:
11722; LINUX-32-PIC:       # %bb.0: # %entry
11723; LINUX-32-PIC-NEXT:    pushl %ebx
11724; LINUX-32-PIC-NEXT:    subl $8, %esp
11725; LINUX-32-PIC-NEXT:    calll .L143$pb
11726; LINUX-32-PIC-NEXT:  .L143$pb:
11727; LINUX-32-PIC-NEXT:    popl %ebx
11728; LINUX-32-PIC-NEXT:  .Ltmp143:
11729; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp143-.L143$pb), %ebx
11730; LINUX-32-PIC-NEXT:    calll *.Ldifunc$local@GOTOFF(%ebx)
11731; LINUX-32-PIC-NEXT:    calll *.Ldifunc$local@GOTOFF(%ebx)
11732; LINUX-32-PIC-NEXT:    addl $8, %esp
11733; LINUX-32-PIC-NEXT:    popl %ebx
11734; LINUX-32-PIC-NEXT:    retl
11735;
11736; LINUX-64-PIC-LABEL: dicaller:
11737; LINUX-64-PIC:       # %bb.0: # %entry
11738; LINUX-64-PIC-NEXT:    pushq %rax
11739; LINUX-64-PIC-NEXT:    callq *.Ldifunc$local(%rip)
11740; LINUX-64-PIC-NEXT:    callq *.Ldifunc$local(%rip)
11741; LINUX-64-PIC-NEXT:    popq %rax
11742; LINUX-64-PIC-NEXT:    retq
11743;
11744; DARWIN-32-STATIC-LABEL: dicaller:
11745; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11746; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11747; DARWIN-32-STATIC-NEXT:    calll *_difunc
11748; DARWIN-32-STATIC-NEXT:    calll *_difunc
11749; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11750; DARWIN-32-STATIC-NEXT:    retl
11751;
11752; DARWIN-32-DYNAMIC-LABEL: dicaller:
11753; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11754; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11755; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
11756; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
11757; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11758; DARWIN-32-DYNAMIC-NEXT:    retl
11759;
11760; DARWIN-32-PIC-LABEL: dicaller:
11761; DARWIN-32-PIC:       ## %bb.0: ## %entry
11762; DARWIN-32-PIC-NEXT:    pushl %esi
11763; DARWIN-32-PIC-NEXT:    subl $8, %esp
11764; DARWIN-32-PIC-NEXT:    calll L143$pb
11765; DARWIN-32-PIC-NEXT:  L143$pb:
11766; DARWIN-32-PIC-NEXT:    popl %esi
11767; DARWIN-32-PIC-NEXT:    calll *_difunc-L143$pb(%esi)
11768; DARWIN-32-PIC-NEXT:    calll *_difunc-L143$pb(%esi)
11769; DARWIN-32-PIC-NEXT:    addl $8, %esp
11770; DARWIN-32-PIC-NEXT:    popl %esi
11771; DARWIN-32-PIC-NEXT:    retl
11772;
11773; DARWIN-64-STATIC-LABEL: dicaller:
11774; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11775; DARWIN-64-STATIC-NEXT:    pushq %rax
11776; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
11777; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
11778; DARWIN-64-STATIC-NEXT:    popq %rax
11779; DARWIN-64-STATIC-NEXT:    retq
11780;
11781; DARWIN-64-DYNAMIC-LABEL: dicaller:
11782; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11783; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11784; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
11785; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
11786; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11787; DARWIN-64-DYNAMIC-NEXT:    retq
11788;
11789; DARWIN-64-PIC-LABEL: dicaller:
11790; DARWIN-64-PIC:       ## %bb.0: ## %entry
11791; DARWIN-64-PIC-NEXT:    pushq %rax
11792; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
11793; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
11794; DARWIN-64-PIC-NEXT:    popq %rax
11795; DARWIN-64-PIC-NEXT:    retq
11796
11797entry:
11798	%0 = load ptr, ptr @difunc, align 8
11799	call void %0() nounwind
11800	%1 = load ptr, ptr @difunc, align 8
11801	call void %1() nounwind
11802	ret void
11803}
11804
11805define dso_local void @licaller() nounwind {
11806; LINUX-64-STATIC-LABEL: licaller:
11807; LINUX-64-STATIC:       # %bb.0: # %entry
11808; LINUX-64-STATIC-NEXT:    pushq %rax
11809; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
11810; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
11811; LINUX-64-STATIC-NEXT:    popq %rax
11812; LINUX-64-STATIC-NEXT:    retq
11813;
11814; LINUX-32-STATIC-LABEL: licaller:
11815; LINUX-32-STATIC:       # %bb.0: # %entry
11816; LINUX-32-STATIC-NEXT:    subl $12, %esp
11817; LINUX-32-STATIC-NEXT:    calll *lifunc
11818; LINUX-32-STATIC-NEXT:    calll *lifunc
11819; LINUX-32-STATIC-NEXT:    addl $12, %esp
11820; LINUX-32-STATIC-NEXT:    retl
11821;
11822; LINUX-32-PIC-LABEL: licaller:
11823; LINUX-32-PIC:       # %bb.0: # %entry
11824; LINUX-32-PIC-NEXT:    pushl %ebx
11825; LINUX-32-PIC-NEXT:    subl $8, %esp
11826; LINUX-32-PIC-NEXT:    calll .L144$pb
11827; LINUX-32-PIC-NEXT:  .L144$pb:
11828; LINUX-32-PIC-NEXT:    popl %ebx
11829; LINUX-32-PIC-NEXT:  .Ltmp144:
11830; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp144-.L144$pb), %ebx
11831; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
11832; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
11833; LINUX-32-PIC-NEXT:    addl $8, %esp
11834; LINUX-32-PIC-NEXT:    popl %ebx
11835; LINUX-32-PIC-NEXT:    retl
11836;
11837; LINUX-64-PIC-LABEL: licaller:
11838; LINUX-64-PIC:       # %bb.0: # %entry
11839; LINUX-64-PIC-NEXT:    pushq %rax
11840; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
11841; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
11842; LINUX-64-PIC-NEXT:    popq %rax
11843; LINUX-64-PIC-NEXT:    retq
11844;
11845; DARWIN-32-STATIC-LABEL: licaller:
11846; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11847; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11848; DARWIN-32-STATIC-NEXT:    calll *_lifunc
11849; DARWIN-32-STATIC-NEXT:    calll *_lifunc
11850; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11851; DARWIN-32-STATIC-NEXT:    retl
11852;
11853; DARWIN-32-DYNAMIC-LABEL: licaller:
11854; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11855; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
11856; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
11857; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
11858; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
11859; DARWIN-32-DYNAMIC-NEXT:    retl
11860;
11861; DARWIN-32-PIC-LABEL: licaller:
11862; DARWIN-32-PIC:       ## %bb.0: ## %entry
11863; DARWIN-32-PIC-NEXT:    pushl %esi
11864; DARWIN-32-PIC-NEXT:    subl $8, %esp
11865; DARWIN-32-PIC-NEXT:    calll L144$pb
11866; DARWIN-32-PIC-NEXT:  L144$pb:
11867; DARWIN-32-PIC-NEXT:    popl %esi
11868; DARWIN-32-PIC-NEXT:    calll *_lifunc-L144$pb(%esi)
11869; DARWIN-32-PIC-NEXT:    calll *_lifunc-L144$pb(%esi)
11870; DARWIN-32-PIC-NEXT:    addl $8, %esp
11871; DARWIN-32-PIC-NEXT:    popl %esi
11872; DARWIN-32-PIC-NEXT:    retl
11873;
11874; DARWIN-64-STATIC-LABEL: licaller:
11875; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11876; DARWIN-64-STATIC-NEXT:    pushq %rax
11877; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
11878; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
11879; DARWIN-64-STATIC-NEXT:    popq %rax
11880; DARWIN-64-STATIC-NEXT:    retq
11881;
11882; DARWIN-64-DYNAMIC-LABEL: licaller:
11883; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11884; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
11885; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
11886; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
11887; DARWIN-64-DYNAMIC-NEXT:    popq %rax
11888; DARWIN-64-DYNAMIC-NEXT:    retq
11889;
11890; DARWIN-64-PIC-LABEL: licaller:
11891; DARWIN-64-PIC:       ## %bb.0: ## %entry
11892; DARWIN-64-PIC-NEXT:    pushq %rax
11893; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
11894; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
11895; DARWIN-64-PIC-NEXT:    popq %rax
11896; DARWIN-64-PIC-NEXT:    retq
11897
11898entry:
11899	%0 = load ptr, ptr @lifunc, align 8
11900	call void %0() nounwind
11901	%1 = load ptr, ptr @lifunc, align 8
11902	call void %1() nounwind
11903	ret void
11904}
11905
11906define dso_local void @itailcaller() nounwind {
11907; LINUX-64-STATIC-LABEL: itailcaller:
11908; LINUX-64-STATIC:       # %bb.0: # %entry
11909; LINUX-64-STATIC-NEXT:    pushq %rbx
11910; LINUX-64-STATIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11911; LINUX-64-STATIC-NEXT:    callq *(%rbx)
11912; LINUX-64-STATIC-NEXT:    callq *(%rbx)
11913; LINUX-64-STATIC-NEXT:    popq %rbx
11914; LINUX-64-STATIC-NEXT:    retq
11915;
11916; LINUX-32-STATIC-LABEL: itailcaller:
11917; LINUX-32-STATIC:       # %bb.0: # %entry
11918; LINUX-32-STATIC-NEXT:    subl $12, %esp
11919; LINUX-32-STATIC-NEXT:    calll *ifunc
11920; LINUX-32-STATIC-NEXT:    calll *ifunc
11921; LINUX-32-STATIC-NEXT:    addl $12, %esp
11922; LINUX-32-STATIC-NEXT:    retl
11923;
11924; LINUX-32-PIC-LABEL: itailcaller:
11925; LINUX-32-PIC:       # %bb.0: # %entry
11926; LINUX-32-PIC-NEXT:    pushl %ebx
11927; LINUX-32-PIC-NEXT:    pushl %esi
11928; LINUX-32-PIC-NEXT:    pushl %eax
11929; LINUX-32-PIC-NEXT:    calll .L145$pb
11930; LINUX-32-PIC-NEXT:  .L145$pb:
11931; LINUX-32-PIC-NEXT:    popl %ebx
11932; LINUX-32-PIC-NEXT:  .Ltmp145:
11933; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp145-.L145$pb), %ebx
11934; LINUX-32-PIC-NEXT:    movl ifunc@GOT(%ebx), %esi
11935; LINUX-32-PIC-NEXT:    calll *(%esi)
11936; LINUX-32-PIC-NEXT:    calll *(%esi)
11937; LINUX-32-PIC-NEXT:    addl $4, %esp
11938; LINUX-32-PIC-NEXT:    popl %esi
11939; LINUX-32-PIC-NEXT:    popl %ebx
11940; LINUX-32-PIC-NEXT:    retl
11941;
11942; LINUX-64-PIC-LABEL: itailcaller:
11943; LINUX-64-PIC:       # %bb.0: # %entry
11944; LINUX-64-PIC-NEXT:    pushq %rbx
11945; LINUX-64-PIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
11946; LINUX-64-PIC-NEXT:    callq *(%rbx)
11947; LINUX-64-PIC-NEXT:    callq *(%rbx)
11948; LINUX-64-PIC-NEXT:    popq %rbx
11949; LINUX-64-PIC-NEXT:    retq
11950;
11951; DARWIN-32-STATIC-LABEL: itailcaller:
11952; DARWIN-32-STATIC:       ## %bb.0: ## %entry
11953; DARWIN-32-STATIC-NEXT:    subl $12, %esp
11954; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11955; DARWIN-32-STATIC-NEXT:    calll *_ifunc
11956; DARWIN-32-STATIC-NEXT:    addl $12, %esp
11957; DARWIN-32-STATIC-NEXT:    retl
11958;
11959; DARWIN-32-DYNAMIC-LABEL: itailcaller:
11960; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
11961; DARWIN-32-DYNAMIC-NEXT:    pushl %esi
11962; DARWIN-32-DYNAMIC-NEXT:    subl $8, %esp
11963; DARWIN-32-DYNAMIC-NEXT:    movl L_ifunc$non_lazy_ptr, %esi
11964; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11965; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
11966; DARWIN-32-DYNAMIC-NEXT:    addl $8, %esp
11967; DARWIN-32-DYNAMIC-NEXT:    popl %esi
11968; DARWIN-32-DYNAMIC-NEXT:    retl
11969;
11970; DARWIN-32-PIC-LABEL: itailcaller:
11971; DARWIN-32-PIC:       ## %bb.0: ## %entry
11972; DARWIN-32-PIC-NEXT:    pushl %esi
11973; DARWIN-32-PIC-NEXT:    subl $8, %esp
11974; DARWIN-32-PIC-NEXT:    calll L145$pb
11975; DARWIN-32-PIC-NEXT:  L145$pb:
11976; DARWIN-32-PIC-NEXT:    popl %eax
11977; DARWIN-32-PIC-NEXT:    movl L_ifunc$non_lazy_ptr-L145$pb(%eax), %esi
11978; DARWIN-32-PIC-NEXT:    calll *(%esi)
11979; DARWIN-32-PIC-NEXT:    calll *(%esi)
11980; DARWIN-32-PIC-NEXT:    addl $8, %esp
11981; DARWIN-32-PIC-NEXT:    popl %esi
11982; DARWIN-32-PIC-NEXT:    retl
11983;
11984; DARWIN-64-STATIC-LABEL: itailcaller:
11985; DARWIN-64-STATIC:       ## %bb.0: ## %entry
11986; DARWIN-64-STATIC-NEXT:    pushq %rbx
11987; DARWIN-64-STATIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11988; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
11989; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
11990; DARWIN-64-STATIC-NEXT:    popq %rbx
11991; DARWIN-64-STATIC-NEXT:    retq
11992;
11993; DARWIN-64-DYNAMIC-LABEL: itailcaller:
11994; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
11995; DARWIN-64-DYNAMIC-NEXT:    pushq %rbx
11996; DARWIN-64-DYNAMIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
11997; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
11998; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
11999; DARWIN-64-DYNAMIC-NEXT:    popq %rbx
12000; DARWIN-64-DYNAMIC-NEXT:    retq
12001;
12002; DARWIN-64-PIC-LABEL: itailcaller:
12003; DARWIN-64-PIC:       ## %bb.0: ## %entry
12004; DARWIN-64-PIC-NEXT:    pushq %rbx
12005; DARWIN-64-PIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
12006; DARWIN-64-PIC-NEXT:    callq *(%rbx)
12007; DARWIN-64-PIC-NEXT:    callq *(%rbx)
12008; DARWIN-64-PIC-NEXT:    popq %rbx
12009; DARWIN-64-PIC-NEXT:    retq
12010
12011entry:
12012	%0 = load ptr, ptr @ifunc, align 8
12013	call void %0() nounwind
12014	%1 = load ptr, ptr @ifunc, align 8
12015	call void %1() nounwind
12016	ret void
12017}
12018
12019define dso_local void @ditailcaller() nounwind {
12020; LINUX-64-STATIC-LABEL: ditailcaller:
12021; LINUX-64-STATIC:       # %bb.0: # %entry
12022; LINUX-64-STATIC-NEXT:    pushq %rax
12023; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
12024; LINUX-64-STATIC-NEXT:    popq %rax
12025; LINUX-64-STATIC-NEXT:    retq
12026;
12027; LINUX-32-STATIC-LABEL: ditailcaller:
12028; LINUX-32-STATIC:       # %bb.0: # %entry
12029; LINUX-32-STATIC-NEXT:    subl $12, %esp
12030; LINUX-32-STATIC-NEXT:    calll *difunc
12031; LINUX-32-STATIC-NEXT:    addl $12, %esp
12032; LINUX-32-STATIC-NEXT:    retl
12033;
12034; LINUX-32-PIC-LABEL: ditailcaller:
12035; LINUX-32-PIC:       # %bb.0: # %entry
12036; LINUX-32-PIC-NEXT:    pushl %ebx
12037; LINUX-32-PIC-NEXT:    subl $8, %esp
12038; LINUX-32-PIC-NEXT:    calll .L146$pb
12039; LINUX-32-PIC-NEXT:  .L146$pb:
12040; LINUX-32-PIC-NEXT:    popl %ebx
12041; LINUX-32-PIC-NEXT:  .Ltmp146:
12042; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp146-.L146$pb), %ebx
12043; LINUX-32-PIC-NEXT:    calll *.Ldifunc$local@GOTOFF(%ebx)
12044; LINUX-32-PIC-NEXT:    addl $8, %esp
12045; LINUX-32-PIC-NEXT:    popl %ebx
12046; LINUX-32-PIC-NEXT:    retl
12047;
12048; LINUX-64-PIC-LABEL: ditailcaller:
12049; LINUX-64-PIC:       # %bb.0: # %entry
12050; LINUX-64-PIC-NEXT:    pushq %rax
12051; LINUX-64-PIC-NEXT:    callq *.Ldifunc$local(%rip)
12052; LINUX-64-PIC-NEXT:    popq %rax
12053; LINUX-64-PIC-NEXT:    retq
12054;
12055; DARWIN-32-STATIC-LABEL: ditailcaller:
12056; DARWIN-32-STATIC:       ## %bb.0: ## %entry
12057; DARWIN-32-STATIC-NEXT:    subl $12, %esp
12058; DARWIN-32-STATIC-NEXT:    calll *_difunc
12059; DARWIN-32-STATIC-NEXT:    addl $12, %esp
12060; DARWIN-32-STATIC-NEXT:    retl
12061;
12062; DARWIN-32-DYNAMIC-LABEL: ditailcaller:
12063; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
12064; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
12065; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
12066; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
12067; DARWIN-32-DYNAMIC-NEXT:    retl
12068;
12069; DARWIN-32-PIC-LABEL: ditailcaller:
12070; DARWIN-32-PIC:       ## %bb.0: ## %entry
12071; DARWIN-32-PIC-NEXT:    subl $12, %esp
12072; DARWIN-32-PIC-NEXT:    calll L146$pb
12073; DARWIN-32-PIC-NEXT:  L146$pb:
12074; DARWIN-32-PIC-NEXT:    popl %eax
12075; DARWIN-32-PIC-NEXT:    calll *_difunc-L146$pb(%eax)
12076; DARWIN-32-PIC-NEXT:    addl $12, %esp
12077; DARWIN-32-PIC-NEXT:    retl
12078;
12079; DARWIN-64-STATIC-LABEL: ditailcaller:
12080; DARWIN-64-STATIC:       ## %bb.0: ## %entry
12081; DARWIN-64-STATIC-NEXT:    pushq %rax
12082; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
12083; DARWIN-64-STATIC-NEXT:    popq %rax
12084; DARWIN-64-STATIC-NEXT:    retq
12085;
12086; DARWIN-64-DYNAMIC-LABEL: ditailcaller:
12087; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
12088; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
12089; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
12090; DARWIN-64-DYNAMIC-NEXT:    popq %rax
12091; DARWIN-64-DYNAMIC-NEXT:    retq
12092;
12093; DARWIN-64-PIC-LABEL: ditailcaller:
12094; DARWIN-64-PIC:       ## %bb.0: ## %entry
12095; DARWIN-64-PIC-NEXT:    pushq %rax
12096; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
12097; DARWIN-64-PIC-NEXT:    popq %rax
12098; DARWIN-64-PIC-NEXT:    retq
12099
12100entry:
12101	%0 = load ptr, ptr @difunc, align 8
12102	call void %0() nounwind
12103	ret void
12104}
12105
12106define dso_local void @litailcaller() nounwind {
12107; LINUX-64-STATIC-LABEL: litailcaller:
12108; LINUX-64-STATIC:       # %bb.0: # %entry
12109; LINUX-64-STATIC-NEXT:    pushq %rax
12110; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
12111; LINUX-64-STATIC-NEXT:    popq %rax
12112; LINUX-64-STATIC-NEXT:    retq
12113;
12114; LINUX-32-STATIC-LABEL: litailcaller:
12115; LINUX-32-STATIC:       # %bb.0: # %entry
12116; LINUX-32-STATIC-NEXT:    subl $12, %esp
12117; LINUX-32-STATIC-NEXT:    calll *lifunc
12118; LINUX-32-STATIC-NEXT:    addl $12, %esp
12119; LINUX-32-STATIC-NEXT:    retl
12120;
12121; LINUX-32-PIC-LABEL: litailcaller:
12122; LINUX-32-PIC:       # %bb.0: # %entry
12123; LINUX-32-PIC-NEXT:    pushl %ebx
12124; LINUX-32-PIC-NEXT:    subl $8, %esp
12125; LINUX-32-PIC-NEXT:    calll .L147$pb
12126; LINUX-32-PIC-NEXT:  .L147$pb:
12127; LINUX-32-PIC-NEXT:    popl %ebx
12128; LINUX-32-PIC-NEXT:  .Ltmp147:
12129; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp147-.L147$pb), %ebx
12130; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
12131; LINUX-32-PIC-NEXT:    addl $8, %esp
12132; LINUX-32-PIC-NEXT:    popl %ebx
12133; LINUX-32-PIC-NEXT:    retl
12134;
12135; LINUX-64-PIC-LABEL: litailcaller:
12136; LINUX-64-PIC:       # %bb.0: # %entry
12137; LINUX-64-PIC-NEXT:    pushq %rax
12138; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
12139; LINUX-64-PIC-NEXT:    popq %rax
12140; LINUX-64-PIC-NEXT:    retq
12141;
12142; DARWIN-32-STATIC-LABEL: litailcaller:
12143; DARWIN-32-STATIC:       ## %bb.0: ## %entry
12144; DARWIN-32-STATIC-NEXT:    subl $12, %esp
12145; DARWIN-32-STATIC-NEXT:    calll *_lifunc
12146; DARWIN-32-STATIC-NEXT:    addl $12, %esp
12147; DARWIN-32-STATIC-NEXT:    retl
12148;
12149; DARWIN-32-DYNAMIC-LABEL: litailcaller:
12150; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
12151; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
12152; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
12153; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
12154; DARWIN-32-DYNAMIC-NEXT:    retl
12155;
12156; DARWIN-32-PIC-LABEL: litailcaller:
12157; DARWIN-32-PIC:       ## %bb.0: ## %entry
12158; DARWIN-32-PIC-NEXT:    subl $12, %esp
12159; DARWIN-32-PIC-NEXT:    calll L147$pb
12160; DARWIN-32-PIC-NEXT:  L147$pb:
12161; DARWIN-32-PIC-NEXT:    popl %eax
12162; DARWIN-32-PIC-NEXT:    calll *_lifunc-L147$pb(%eax)
12163; DARWIN-32-PIC-NEXT:    addl $12, %esp
12164; DARWIN-32-PIC-NEXT:    retl
12165;
12166; DARWIN-64-STATIC-LABEL: litailcaller:
12167; DARWIN-64-STATIC:       ## %bb.0: ## %entry
12168; DARWIN-64-STATIC-NEXT:    pushq %rax
12169; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
12170; DARWIN-64-STATIC-NEXT:    popq %rax
12171; DARWIN-64-STATIC-NEXT:    retq
12172;
12173; DARWIN-64-DYNAMIC-LABEL: litailcaller:
12174; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
12175; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
12176; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
12177; DARWIN-64-DYNAMIC-NEXT:    popq %rax
12178; DARWIN-64-DYNAMIC-NEXT:    retq
12179;
12180; DARWIN-64-PIC-LABEL: litailcaller:
12181; DARWIN-64-PIC:       ## %bb.0: ## %entry
12182; DARWIN-64-PIC-NEXT:    pushq %rax
12183; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
12184; DARWIN-64-PIC-NEXT:    popq %rax
12185; DARWIN-64-PIC-NEXT:    retq
12186
12187entry:
12188	%0 = load ptr, ptr @lifunc, align 8
12189	call void %0() nounwind
12190	ret void
12191}
12192