disable the new asmprinter by default. Both the Mangler and MCSymbol
[oota-llvm.git] / test / CodeGen / X86 / abi-isel.ll
1 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-STATIC
2 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-PIC
3
4 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-64-STATIC
5 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=LINUX-64-PIC
6
7 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-32-STATIC
8 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC
9 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-PIC
10
11 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-64-STATIC
12 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-DYNAMIC
13 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-PIC
14
15 @src = external global [131072 x i32]
16 @dst = external global [131072 x i32]
17 @xsrc = external global [32 x i32]
18 @xdst = external global [32 x i32]
19 @ptr = external global i32*
20 @dsrc = global [131072 x i32] zeroinitializer, align 32
21 @ddst = global [131072 x i32] zeroinitializer, align 32
22 @dptr = global i32* null
23 @lsrc = internal global [131072 x i32] zeroinitializer
24 @ldst = internal global [131072 x i32] zeroinitializer
25 @lptr = internal global i32* null
26 @ifunc = external global void ()*
27 @difunc = global void ()* null
28 @lifunc = internal global void ()* null
29 @lxsrc = internal global [32 x i32] zeroinitializer, align 32
30 @lxdst = internal global [32 x i32] zeroinitializer, align 32
31 @dxsrc = global [32 x i32] zeroinitializer, align 32
32 @dxdst = global [32 x i32] zeroinitializer, align 32
33
34 define void @foo00() nounwind {
35 entry:
36         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
37         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4
38         ret void
39
40 ; LINUX-64-STATIC: foo00:
41 ; LINUX-64-STATIC: movl src(%rip), %eax
42 ; LINUX-64-STATIC: movl %eax, dst
43 ; LINUX-64-STATIC: ret
44
45 ; LINUX-32-STATIC: foo00:
46 ; LINUX-32-STATIC:      movl    src, %eax
47 ; LINUX-32-STATIC-NEXT:         movl    %eax, dst
48 ; LINUX-32-STATIC-NEXT:         ret
49
50 ; LINUX-32-PIC: foo00:
51 ; LINUX-32-PIC:         movl    src, %eax
52 ; LINUX-32-PIC-NEXT:    movl    %eax, dst
53 ; LINUX-32-PIC-NEXT:    ret
54
55 ; LINUX-64-PIC: foo00:
56 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
57 ; LINUX-64-PIC-NEXT:    movl    (%rax), %eax
58 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), %rcx
59 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx)
60 ; LINUX-64-PIC-NEXT:    ret
61
62 ; DARWIN-32-STATIC: _foo00:
63 ; DARWIN-32-STATIC:     movl    _src, %eax
64 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _dst
65 ; DARWIN-32-STATIC-NEXT:        ret
66
67 ; DARWIN-32-DYNAMIC: _foo00:
68 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
69 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%eax), %eax
70 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %ecx
71 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
72 ; DARWIN-32-DYNAMIC-NEXT:       ret
73
74 ; DARWIN-32-PIC: _foo00:
75 ; DARWIN-32-PIC:        call    "L1$pb"
76 ; DARWIN-32-PIC-NEXT: "L1$pb":
77 ; DARWIN-32-PIC-NEXT:   popl    %eax
78 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L1$pb"(%eax), %ecx
79 ; DARWIN-32-PIC-NEXT:   movl    (%ecx), %ecx
80 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L1$pb"(%eax), %eax
81 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
82 ; DARWIN-32-PIC-NEXT:   ret
83
84 ; DARWIN-64-STATIC: _foo00:
85 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
86 ; DARWIN-64-STATIC-NEXT:        movl    (%rax), %eax
87 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), %rcx
88 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx)
89 ; DARWIN-64-STATIC-NEXT:        ret
90
91 ; DARWIN-64-DYNAMIC: _foo00:
92 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
93 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax), %eax
94 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), %rcx
95 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx)
96 ; DARWIN-64-DYNAMIC-NEXT:       ret
97
98 ; DARWIN-64-PIC: _foo00:
99 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
100 ; DARWIN-64-PIC-NEXT:   movl    (%rax), %eax
101 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), %rcx
102 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx)
103 ; DARWIN-64-PIC-NEXT:   ret
104 }
105
106 define void @fxo00() nounwind {
107 entry:
108         %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
109         store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4
110         ret void
111
112 ; LINUX-64-STATIC: fxo00:
113 ; LINUX-64-STATIC: movl xsrc(%rip), %eax
114 ; LINUX-64-STATIC: movl %eax, xdst
115 ; LINUX-64-STATIC: ret
116
117 ; LINUX-32-STATIC: fxo00:
118 ; LINUX-32-STATIC:      movl    xsrc, %eax
119 ; LINUX-32-STATIC-NEXT:         movl    %eax, xdst
120 ; LINUX-32-STATIC-NEXT:         ret
121
122 ; LINUX-32-PIC: fxo00:
123 ; LINUX-32-PIC:         movl    xsrc, %eax
124 ; LINUX-32-PIC-NEXT:    movl    %eax, xdst
125 ; LINUX-32-PIC-NEXT:    ret
126
127 ; LINUX-64-PIC: fxo00:
128 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
129 ; LINUX-64-PIC-NEXT:    movl    (%rax), %eax
130 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), %rcx
131 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx)
132 ; LINUX-64-PIC-NEXT:    ret
133
134 ; DARWIN-32-STATIC: _fxo00:
135 ; DARWIN-32-STATIC:     movl    _xsrc, %eax
136 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _xdst
137 ; DARWIN-32-STATIC-NEXT:        ret
138
139 ; DARWIN-32-DYNAMIC: _fxo00:
140 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
141 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%eax), %eax
142 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, %ecx
143 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
144 ; DARWIN-32-DYNAMIC-NEXT:       ret
145
146 ; DARWIN-32-PIC: _fxo00:
147 ; DARWIN-32-PIC:        call    "L2$pb"
148 ; DARWIN-32-PIC-NEXT: "L2$pb":
149 ; DARWIN-32-PIC-NEXT:   popl    %eax
150 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L2$pb"(%eax), %ecx
151 ; DARWIN-32-PIC-NEXT:   movl    (%ecx), %ecx
152 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L2$pb"(%eax), %eax
153 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
154 ; DARWIN-32-PIC-NEXT:   ret
155
156 ; DARWIN-64-STATIC: _fxo00:
157 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
158 ; DARWIN-64-STATIC-NEXT:        movl    (%rax), %eax
159 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), %rcx
160 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx)
161 ; DARWIN-64-STATIC-NEXT:        ret
162
163 ; DARWIN-64-DYNAMIC: _fxo00:
164 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
165 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax), %eax
166 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), %rcx
167 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx)
168 ; DARWIN-64-DYNAMIC-NEXT:       ret
169
170 ; DARWIN-64-PIC: _fxo00:
171 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
172 ; DARWIN-64-PIC-NEXT:   movl    (%rax), %eax
173 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), %rcx
174 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx)
175 ; DARWIN-64-PIC-NEXT:   ret
176 }
177
178 define void @foo01() nounwind {
179 entry:
180         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
181         ret void
182 ; LINUX-64-STATIC: foo01:
183 ; LINUX-64-STATIC: movq $dst, ptr
184 ; LINUX-64-STATIC: ret
185
186 ; LINUX-32-STATIC: foo01:
187 ; LINUX-32-STATIC:      movl    $dst, ptr
188 ; LINUX-32-STATIC-NEXT:         ret
189
190 ; LINUX-32-PIC: foo01:
191 ; LINUX-32-PIC:         movl    $dst, ptr
192 ; LINUX-32-PIC-NEXT:    ret
193
194 ; LINUX-64-PIC: foo01:
195 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
196 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
197 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
198 ; LINUX-64-PIC-NEXT:    ret
199
200 ; DARWIN-32-STATIC: _foo01:
201 ; DARWIN-32-STATIC:     movl    $_dst, _ptr
202 ; DARWIN-32-STATIC-NEXT:        ret
203
204 ; DARWIN-32-DYNAMIC: _foo01:
205 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
206 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
207 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
208 ; DARWIN-32-DYNAMIC-NEXT:       ret
209
210 ; DARWIN-32-PIC: _foo01:
211 ; DARWIN-32-PIC:        call    "L3$pb"
212 ; DARWIN-32-PIC-NEXT: "L3$pb":
213 ; DARWIN-32-PIC-NEXT:   popl    %eax
214 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L3$pb"(%eax), %ecx
215 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L3$pb"(%eax), %eax
216 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
217 ; DARWIN-32-PIC-NEXT:   ret
218
219 ; DARWIN-64-STATIC: _foo01:
220 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
221 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
222 ; DARWIN-64-STATIC-NEXT:        movq    %rax, (%rcx)
223 ; DARWIN-64-STATIC-NEXT:        ret
224
225 ; DARWIN-64-DYNAMIC: _foo01:
226 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
227 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
228 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, (%rcx)
229 ; DARWIN-64-DYNAMIC-NEXT:       ret
230
231 ; DARWIN-64-PIC: _foo01:
232 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
233 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
234 ; DARWIN-64-PIC-NEXT:   movq    %rax, (%rcx)
235 ; DARWIN-64-PIC-NEXT:   ret
236 }
237
238 define void @fxo01() nounwind {
239 entry:
240         store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
241         ret void
242 ; LINUX-64-STATIC: fxo01:
243 ; LINUX-64-STATIC: movq $xdst, ptr
244 ; LINUX-64-STATIC: ret
245
246 ; LINUX-32-STATIC: fxo01:
247 ; LINUX-32-STATIC:      movl    $xdst, ptr
248 ; LINUX-32-STATIC-NEXT:         ret
249
250 ; LINUX-32-PIC: fxo01:
251 ; LINUX-32-PIC:         movl    $xdst, ptr
252 ; LINUX-32-PIC-NEXT:    ret
253
254 ; LINUX-64-PIC: fxo01:
255 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
256 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
257 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
258 ; LINUX-64-PIC-NEXT:    ret
259
260 ; DARWIN-32-STATIC: _fxo01:
261 ; DARWIN-32-STATIC:     movl    $_xdst, _ptr
262 ; DARWIN-32-STATIC-NEXT:        ret
263
264 ; DARWIN-32-DYNAMIC: _fxo01:
265 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
266 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
267 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
268 ; DARWIN-32-DYNAMIC-NEXT:       ret
269
270 ; DARWIN-32-PIC: _fxo01:
271 ; DARWIN-32-PIC:        call    "L4$pb"
272 ; DARWIN-32-PIC-NEXT: "L4$pb":
273 ; DARWIN-32-PIC-NEXT:   popl    %eax
274 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L4$pb"(%eax), %ecx
275 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L4$pb"(%eax), %eax
276 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
277 ; DARWIN-32-PIC-NEXT:   ret
278
279 ; DARWIN-64-STATIC: _fxo01:
280 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
281 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
282 ; DARWIN-64-STATIC-NEXT:        movq    %rax, (%rcx)
283 ; DARWIN-64-STATIC-NEXT:        ret
284
285 ; DARWIN-64-DYNAMIC: _fxo01:
286 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
287 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
288 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, (%rcx)
289 ; DARWIN-64-DYNAMIC-NEXT:       ret
290
291 ; DARWIN-64-PIC: _fxo01:
292 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
293 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
294 ; DARWIN-64-PIC-NEXT:   movq    %rax, (%rcx)
295 ; DARWIN-64-PIC-NEXT:   ret
296 }
297
298 define void @foo02() nounwind {
299 entry:
300         %0 = load i32** @ptr, align 8
301         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
302         store i32 %1, i32* %0, align 4
303         ret void
304 ; LINUX-64-STATIC: foo02:
305 ; LINUX-64-STATIC: movl    src(%rip), %
306 ; LINUX-64-STATIC: movq    ptr(%rip), %
307 ; LINUX-64-STATIC: movl
308 ; LINUX-64-STATIC: ret
309
310 ; LINUX-32-STATIC: foo02:
311 ; LINUX-32-STATIC:      movl    src, %eax
312 ; LINUX-32-STATIC-NEXT:         movl    ptr, %ecx
313 ; LINUX-32-STATIC-NEXT:         movl    %eax, (%ecx)
314 ; LINUX-32-STATIC-NEXT:         ret
315
316 ; LINUX-32-PIC: foo02:
317 ; LINUX-32-PIC:         movl    src, %eax
318 ; LINUX-32-PIC-NEXT:    movl    ptr, %ecx
319 ; LINUX-32-PIC-NEXT:    movl    %eax, (%ecx)
320 ; LINUX-32-PIC-NEXT:    ret
321
322 ; LINUX-64-PIC: foo02:
323 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
324 ; LINUX-64-PIC-NEXT:    movl    (%rax), %eax
325 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
326 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
327 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx)
328 ; LINUX-64-PIC-NEXT:    ret
329
330 ; DARWIN-32-STATIC: _foo02:
331 ; DARWIN-32-STATIC:     movl    _src, %eax
332 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %ecx
333 ; DARWIN-32-STATIC-NEXT:        movl    %eax, (%ecx)
334 ; DARWIN-32-STATIC-NEXT:        ret
335
336 ; DARWIN-32-DYNAMIC: _foo02:
337 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
338 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%eax), %eax
339 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
340 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx), %ecx
341 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
342 ; DARWIN-32-DYNAMIC-NEXT:       ret
343
344 ; DARWIN-32-PIC: _foo02:
345 ; DARWIN-32-PIC:        call    "L5$pb"
346 ; DARWIN-32-PIC-NEXT: "L5$pb":
347 ; DARWIN-32-PIC-NEXT:   popl    %eax
348 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L5$pb"(%eax), %ecx
349 ; DARWIN-32-PIC-NEXT:   movl    (%ecx), %ecx
350 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L5$pb"(%eax), %eax
351 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
352 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
353 ; DARWIN-32-PIC-NEXT:   ret
354
355 ; DARWIN-64-STATIC: _foo02:
356 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
357 ; DARWIN-64-STATIC-NEXT:        movl    (%rax), %eax
358 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
359 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
360 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx)
361 ; DARWIN-64-STATIC-NEXT:        ret
362
363 ; DARWIN-64-DYNAMIC: _foo02:
364 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
365 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax), %eax
366 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
367 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
368 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx)
369 ; DARWIN-64-DYNAMIC-NEXT:       ret
370
371 ; DARWIN-64-PIC: _foo02:
372 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
373 ; DARWIN-64-PIC-NEXT:   movl    (%rax), %eax
374 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
375 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
376 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx)
377 ; DARWIN-64-PIC-NEXT:   ret
378 }
379
380 define void @fxo02() nounwind {
381 entry:
382         %0 = load i32** @ptr, align 8
383         %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
384         store i32 %1, i32* %0, align 4
385 ; LINUX-64-STATIC: fxo02:
386 ; LINUX-64-STATIC: movl    xsrc(%rip), %
387 ; LINUX-64-STATIC: movq    ptr(%rip), %
388 ; LINUX-64-STATIC: movl
389 ; LINUX-64-STATIC: ret
390
391 ; LINUX-32-STATIC: fxo02:
392 ; LINUX-32-STATIC:      movl    xsrc, %eax
393 ; LINUX-32-STATIC-NEXT:         movl    ptr, %ecx
394 ; LINUX-32-STATIC-NEXT:         movl    %eax, (%ecx)
395 ; LINUX-32-STATIC-NEXT:         ret
396         ret void
397
398 ; LINUX-32-PIC: fxo02:
399 ; LINUX-32-PIC:         movl    xsrc, %eax
400 ; LINUX-32-PIC-NEXT:    movl    ptr, %ecx
401 ; LINUX-32-PIC-NEXT:    movl    %eax, (%ecx)
402 ; LINUX-32-PIC-NEXT:    ret
403
404 ; LINUX-64-PIC: fxo02:
405 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
406 ; LINUX-64-PIC-NEXT:    movl    (%rax), %eax
407 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
408 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
409 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx)
410 ; LINUX-64-PIC-NEXT:    ret
411
412 ; DARWIN-32-STATIC: _fxo02:
413 ; DARWIN-32-STATIC:     movl    _xsrc, %eax
414 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %ecx
415 ; DARWIN-32-STATIC-NEXT:        movl    %eax, (%ecx)
416 ; DARWIN-32-STATIC-NEXT:        ret
417
418 ; DARWIN-32-DYNAMIC: _fxo02:
419 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
420 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%eax), %eax
421 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
422 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx), %ecx
423 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
424 ; DARWIN-32-DYNAMIC-NEXT:       ret
425
426 ; DARWIN-32-PIC: _fxo02:
427 ; DARWIN-32-PIC:        call    "L6$pb"
428 ; DARWIN-32-PIC-NEXT: "L6$pb":
429 ; DARWIN-32-PIC-NEXT:   popl    %eax
430 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L6$pb"(%eax), %ecx
431 ; DARWIN-32-PIC-NEXT:   movl    (%ecx), %ecx
432 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L6$pb"(%eax), %eax
433 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
434 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
435 ; DARWIN-32-PIC-NEXT:   ret
436
437 ; DARWIN-64-STATIC: _fxo02:
438 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
439 ; DARWIN-64-STATIC-NEXT:        movl    (%rax), %eax
440 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
441 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
442 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx)
443 ; DARWIN-64-STATIC-NEXT:        ret
444
445 ; DARWIN-64-DYNAMIC: _fxo02:
446 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
447 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax), %eax
448 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
449 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
450 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx)
451 ; DARWIN-64-DYNAMIC-NEXT:       ret
452
453 ; DARWIN-64-PIC: _fxo02:
454 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
455 ; DARWIN-64-PIC-NEXT:   movl    (%rax), %eax
456 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
457 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
458 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx)
459 ; DARWIN-64-PIC-NEXT:   ret
460 }
461
462 define void @foo03() nounwind {
463 entry:
464         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
465         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32
466         ret void
467 ; LINUX-64-STATIC: foo03:
468 ; LINUX-64-STATIC: movl    dsrc(%rip), %eax
469 ; LINUX-64-STATIC: movl    %eax, ddst
470 ; LINUX-64-STATIC: ret
471
472 ; LINUX-32-STATIC: foo03:
473 ; LINUX-32-STATIC:      movl    dsrc, %eax
474 ; LINUX-32-STATIC-NEXT:         movl    %eax, ddst
475 ; LINUX-32-STATIC-NEXT:         ret
476
477 ; LINUX-32-PIC: foo03:
478 ; LINUX-32-PIC:         movl    dsrc, %eax
479 ; LINUX-32-PIC-NEXT:    movl    %eax, ddst
480 ; LINUX-32-PIC-NEXT:    ret
481
482 ; LINUX-64-PIC: foo03:
483 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
484 ; LINUX-64-PIC-NEXT:    movl    (%rax), %eax
485 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), %rcx
486 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx)
487 ; LINUX-64-PIC-NEXT:    ret
488
489 ; DARWIN-32-STATIC: _foo03:
490 ; DARWIN-32-STATIC:     movl    _dsrc, %eax
491 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ddst
492 ; DARWIN-32-STATIC-NEXT:        ret
493
494 ; DARWIN-32-DYNAMIC: _foo03:
495 ; DARWIN-32-DYNAMIC:    movl    _dsrc, %eax
496 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _ddst
497 ; DARWIN-32-DYNAMIC-NEXT:       ret
498
499 ; DARWIN-32-PIC: _foo03:
500 ; DARWIN-32-PIC:        call    "L7$pb"
501 ; DARWIN-32-PIC-NEXT: "L7$pb":
502 ; DARWIN-32-PIC-NEXT:   popl    %eax
503 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-"L7$pb"(%eax), %ecx
504 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _ddst-"L7$pb"(%eax)
505 ; DARWIN-32-PIC-NEXT:   ret
506
507 ; DARWIN-64-STATIC: _foo03:
508 ; DARWIN-64-STATIC:     movl    _dsrc(%rip), %eax
509 ; DARWIN-64-STATIC-NEXT:        movl    %eax, _ddst(%rip)
510 ; DARWIN-64-STATIC-NEXT:        ret
511
512 ; DARWIN-64-DYNAMIC: _foo03:
513 ; DARWIN-64-DYNAMIC:    movl    _dsrc(%rip), %eax
514 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, _ddst(%rip)
515 ; DARWIN-64-DYNAMIC-NEXT:       ret
516
517 ; DARWIN-64-PIC: _foo03:
518 ; DARWIN-64-PIC:        movl    _dsrc(%rip), %eax
519 ; DARWIN-64-PIC-NEXT:   movl    %eax, _ddst(%rip)
520 ; DARWIN-64-PIC-NEXT:   ret
521 }
522
523 define void @foo04() nounwind {
524 entry:
525         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
526         ret void
527 ; LINUX-64-STATIC: foo04:
528 ; LINUX-64-STATIC: movq    $ddst, dptr
529 ; LINUX-64-STATIC: ret
530
531 ; LINUX-32-STATIC: foo04:
532 ; LINUX-32-STATIC:      movl    $ddst, dptr
533 ; LINUX-32-STATIC-NEXT:         ret
534
535 ; LINUX-32-PIC: foo04:
536 ; LINUX-32-PIC:         movl    $ddst, dptr
537 ; LINUX-32-PIC-NEXT:    ret
538
539 ; LINUX-64-PIC: foo04:
540 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
541 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
542 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
543 ; LINUX-64-PIC-NEXT:    ret
544
545 ; DARWIN-32-STATIC: _foo04:
546 ; DARWIN-32-STATIC:     movl    $_ddst, _dptr
547 ; DARWIN-32-STATIC-NEXT:        ret
548
549 ; DARWIN-32-DYNAMIC: _foo04:
550 ; DARWIN-32-DYNAMIC:    movl    $_ddst, _dptr
551 ; DARWIN-32-DYNAMIC-NEXT:       ret
552
553 ; DARWIN-32-PIC: _foo04:
554 ; DARWIN-32-PIC:        call    "L8$pb"
555 ; DARWIN-32-PIC-NEXT: "L8$pb":
556 ; DARWIN-32-PIC-NEXT:   popl    %eax
557 ; DARWIN-32-PIC-NEXT:   leal    _ddst-"L8$pb"(%eax), %ecx
558 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-"L8$pb"(%eax)
559 ; DARWIN-32-PIC-NEXT:   ret
560
561 ; DARWIN-64-STATIC: _foo04:
562 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
563 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _dptr(%rip)
564 ; DARWIN-64-STATIC-NEXT:        ret
565
566 ; DARWIN-64-DYNAMIC: _foo04:
567 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
568 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _dptr(%rip)
569 ; DARWIN-64-DYNAMIC-NEXT:       ret
570
571 ; DARWIN-64-PIC: _foo04:
572 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
573 ; DARWIN-64-PIC-NEXT:   movq    %rax, _dptr(%rip)
574 ; DARWIN-64-PIC-NEXT:   ret
575 }
576
577 define void @foo05() nounwind {
578 entry:
579         %0 = load i32** @dptr, align 8
580         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
581         store i32 %1, i32* %0, align 4
582         ret void
583 ; LINUX-64-STATIC: foo05:
584 ; LINUX-64-STATIC: movl    dsrc(%rip), %
585 ; LINUX-64-STATIC: movq    dptr(%rip), %
586 ; LINUX-64-STATIC: movl
587 ; LINUX-64-STATIC: ret
588
589 ; LINUX-32-STATIC: foo05:
590 ; LINUX-32-STATIC:      movl    dsrc, %eax
591 ; LINUX-32-STATIC-NEXT:         movl    dptr, %ecx
592 ; LINUX-32-STATIC-NEXT:         movl    %eax, (%ecx)
593 ; LINUX-32-STATIC-NEXT:         ret
594
595 ; LINUX-32-PIC: foo05:
596 ; LINUX-32-PIC:         movl    dsrc, %eax
597 ; LINUX-32-PIC-NEXT:    movl    dptr, %ecx
598 ; LINUX-32-PIC-NEXT:    movl    %eax, (%ecx)
599 ; LINUX-32-PIC-NEXT:    ret
600
601 ; LINUX-64-PIC: foo05:
602 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
603 ; LINUX-64-PIC-NEXT:    movl    (%rax), %eax
604 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
605 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
606 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx)
607 ; LINUX-64-PIC-NEXT:    ret
608
609 ; DARWIN-32-STATIC: _foo05:
610 ; DARWIN-32-STATIC:     movl    _dsrc, %eax
611 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, %ecx
612 ; DARWIN-32-STATIC-NEXT:        movl    %eax, (%ecx)
613 ; DARWIN-32-STATIC-NEXT:        ret
614
615 ; DARWIN-32-DYNAMIC: _foo05:
616 ; DARWIN-32-DYNAMIC:    movl    _dsrc, %eax
617 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, %ecx
618 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
619 ; DARWIN-32-DYNAMIC-NEXT:       ret
620
621 ; DARWIN-32-PIC: _foo05:
622 ; DARWIN-32-PIC:        call    "L9$pb"
623 ; DARWIN-32-PIC-NEXT: "L9$pb":
624 ; DARWIN-32-PIC-NEXT:   popl    %eax
625 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-"L9$pb"(%eax), %ecx
626 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L9$pb"(%eax), %eax
627 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
628 ; DARWIN-32-PIC-NEXT:   ret
629
630 ; DARWIN-64-STATIC: _foo05:
631 ; DARWIN-64-STATIC:     movl    _dsrc(%rip), %eax
632 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), %rcx
633 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx)
634 ; DARWIN-64-STATIC-NEXT:        ret
635
636 ; DARWIN-64-DYNAMIC: _foo05:
637 ; DARWIN-64-DYNAMIC:    movl    _dsrc(%rip), %eax
638 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), %rcx
639 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx)
640 ; DARWIN-64-DYNAMIC-NEXT:       ret
641
642 ; DARWIN-64-PIC: _foo05:
643 ; DARWIN-64-PIC:        movl    _dsrc(%rip), %eax
644 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), %rcx
645 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx)
646 ; DARWIN-64-PIC-NEXT:   ret
647 }
648
649 define void @foo06() nounwind {
650 entry:
651         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
652         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4
653         ret void
654 ; LINUX-64-STATIC: foo06:
655 ; LINUX-64-STATIC: movl    lsrc(%rip), %eax
656 ; LINUX-64-STATIC: movl    %eax, ldst(%rip)
657 ; LINUX-64-STATIC: ret
658
659 ; LINUX-32-STATIC: foo06:
660 ; LINUX-32-STATIC:      movl    lsrc, %eax
661 ; LINUX-32-STATIC-NEXT:         movl    %eax, ldst
662 ; LINUX-32-STATIC-NEXT:         ret
663
664 ; LINUX-32-PIC: foo06:
665 ; LINUX-32-PIC:         movl    lsrc, %eax
666 ; LINUX-32-PIC-NEXT:    movl    %eax, ldst
667 ; LINUX-32-PIC-NEXT:    ret
668
669 ; LINUX-64-PIC: foo06:
670 ; LINUX-64-PIC:         movl    lsrc(%rip), %eax
671 ; LINUX-64-PIC-NEXT:    movl    %eax, ldst(%rip)
672 ; LINUX-64-PIC-NEXT:    ret
673
674 ; DARWIN-32-STATIC: _foo06:
675 ; DARWIN-32-STATIC:     movl    _lsrc, %eax
676 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ldst
677 ; DARWIN-32-STATIC-NEXT:        ret
678
679 ; DARWIN-32-DYNAMIC: _foo06:
680 ; DARWIN-32-DYNAMIC:    movl    _lsrc, %eax
681 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _ldst
682 ; DARWIN-32-DYNAMIC-NEXT:       ret
683
684 ; DARWIN-32-PIC: _foo06:
685 ; DARWIN-32-PIC:        call    "L10$pb"
686 ; DARWIN-32-PIC-NEXT: "L10$pb":
687 ; DARWIN-32-PIC-NEXT:   popl    %eax
688 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-"L10$pb"(%eax), %ecx
689 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _ldst-"L10$pb"(%eax)
690 ; DARWIN-32-PIC-NEXT:   ret
691
692 ; DARWIN-64-STATIC: _foo06:
693 ; DARWIN-64-STATIC:     movl    _lsrc(%rip), %eax
694 ; DARWIN-64-STATIC-NEXT:        movl    %eax, _ldst(%rip)
695 ; DARWIN-64-STATIC-NEXT:        ret
696
697 ; DARWIN-64-DYNAMIC: _foo06:
698 ; DARWIN-64-DYNAMIC:    movl    _lsrc(%rip), %eax
699 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, _ldst(%rip)
700 ; DARWIN-64-DYNAMIC-NEXT:       ret
701
702 ; DARWIN-64-PIC: _foo06:
703 ; DARWIN-64-PIC:        movl    _lsrc(%rip), %eax
704 ; DARWIN-64-PIC-NEXT:   movl    %eax, _ldst(%rip)
705 ; DARWIN-64-PIC-NEXT:   ret
706 }
707
708 define void @foo07() nounwind {
709 entry:
710         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
711         ret void
712 ; LINUX-64-STATIC: foo07:
713 ; LINUX-64-STATIC: movq    $ldst, lptr
714 ; LINUX-64-STATIC: ret
715
716 ; LINUX-32-STATIC: foo07:
717 ; LINUX-32-STATIC:      movl    $ldst, lptr
718 ; LINUX-32-STATIC-NEXT:         ret
719
720 ; LINUX-32-PIC: foo07:
721 ; LINUX-32-PIC:         movl    $ldst, lptr
722 ; LINUX-32-PIC-NEXT:    ret
723
724 ; LINUX-64-PIC: foo07:
725 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
726 ; LINUX-64-PIC-NEXT:    movq    %rax, lptr(%rip)
727 ; LINUX-64-PIC-NEXT:    ret
728
729 ; DARWIN-32-STATIC: _foo07:
730 ; DARWIN-32-STATIC:     movl    $_ldst, _lptr
731 ; DARWIN-32-STATIC-NEXT:        ret
732
733 ; DARWIN-32-DYNAMIC: _foo07:
734 ; DARWIN-32-DYNAMIC:    movl    $_ldst, _lptr
735 ; DARWIN-32-DYNAMIC-NEXT:       ret
736
737 ; DARWIN-32-PIC: _foo07:
738 ; DARWIN-32-PIC:        call    "L11$pb"
739 ; DARWIN-32-PIC-NEXT: "L11$pb":
740 ; DARWIN-32-PIC-NEXT:   popl    %eax
741 ; DARWIN-32-PIC-NEXT:   leal    _ldst-"L11$pb"(%eax), %ecx
742 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-"L11$pb"(%eax)
743 ; DARWIN-32-PIC-NEXT:   ret
744
745 ; DARWIN-64-STATIC: _foo07:
746 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
747 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _lptr(%rip)
748 ; DARWIN-64-STATIC-NEXT:        ret
749
750 ; DARWIN-64-DYNAMIC: _foo07:
751 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
752 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _lptr(%rip)
753 ; DARWIN-64-DYNAMIC-NEXT:       ret
754
755 ; DARWIN-64-PIC: _foo07:
756 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
757 ; DARWIN-64-PIC-NEXT:   movq    %rax, _lptr(%rip)
758 ; DARWIN-64-PIC-NEXT:   ret
759 }
760
761 define void @foo08() nounwind {
762 entry:
763         %0 = load i32** @lptr, align 8
764         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
765         store i32 %1, i32* %0, align 4
766         ret void
767 ; LINUX-64-STATIC: foo08:
768 ; LINUX-64-STATIC: movl    lsrc(%rip), %
769 ; LINUX-64-STATIC: movq    lptr(%rip), %
770 ; LINUX-64-STATIC: movl
771 ; LINUX-64-STATIC: ret
772
773 ; LINUX-32-STATIC: foo08:
774 ; LINUX-32-STATIC:      movl    lsrc, %eax
775 ; LINUX-32-STATIC-NEXT:         movl    lptr, %ecx
776 ; LINUX-32-STATIC-NEXT:         movl    %eax, (%ecx)
777 ; LINUX-32-STATIC-NEXT:         ret
778
779 ; LINUX-32-PIC: foo08:
780 ; LINUX-32-PIC:         movl    lsrc, %eax
781 ; LINUX-32-PIC-NEXT:    movl    lptr, %ecx
782 ; LINUX-32-PIC-NEXT:    movl    %eax, (%ecx)
783 ; LINUX-32-PIC-NEXT:    ret
784
785 ; LINUX-64-PIC: foo08:
786 ; LINUX-64-PIC:         movl    lsrc(%rip), %eax
787 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), %rcx
788 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx)
789 ; LINUX-64-PIC-NEXT:    ret
790
791 ; DARWIN-32-STATIC: _foo08:
792 ; DARWIN-32-STATIC:     movl    _lsrc, %eax
793 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, %ecx
794 ; DARWIN-32-STATIC-NEXT:        movl    %eax, (%ecx)
795 ; DARWIN-32-STATIC-NEXT:        ret
796
797 ; DARWIN-32-DYNAMIC: _foo08:
798 ; DARWIN-32-DYNAMIC:    movl    _lsrc, %eax
799 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, %ecx
800 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
801 ; DARWIN-32-DYNAMIC-NEXT:       ret
802
803 ; DARWIN-32-PIC: _foo08:
804 ; DARWIN-32-PIC:        call    "L12$pb"
805 ; DARWIN-32-PIC-NEXT: "L12$pb":
806 ; DARWIN-32-PIC-NEXT:   popl    %eax
807 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-"L12$pb"(%eax), %ecx
808 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L12$pb"(%eax), %eax
809 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
810 ; DARWIN-32-PIC-NEXT:   ret
811
812 ; DARWIN-64-STATIC: _foo08:
813 ; DARWIN-64-STATIC:     movl    _lsrc(%rip), %eax
814 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), %rcx
815 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx)
816 ; DARWIN-64-STATIC-NEXT:        ret
817
818 ; DARWIN-64-DYNAMIC: _foo08:
819 ; DARWIN-64-DYNAMIC:    movl    _lsrc(%rip), %eax
820 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), %rcx
821 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx)
822 ; DARWIN-64-DYNAMIC-NEXT:       ret
823
824 ; DARWIN-64-PIC: _foo08:
825 ; DARWIN-64-PIC:        movl    _lsrc(%rip), %eax
826 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), %rcx
827 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx)
828 ; DARWIN-64-PIC-NEXT:   ret
829 }
830
831 define void @qux00() nounwind {
832 entry:
833         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
834         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4
835         ret void
836 ; LINUX-64-STATIC: qux00:
837 ; LINUX-64-STATIC: movl    src+64(%rip), %eax
838 ; LINUX-64-STATIC: movl    %eax, dst+64(%rip)
839 ; LINUX-64-STATIC: ret
840
841 ; LINUX-32-STATIC: qux00:
842 ; LINUX-32-STATIC:      movl    src+64, %eax
843 ; LINUX-32-STATIC-NEXT:         movl    %eax, dst+64
844 ; LINUX-32-STATIC-NEXT:         ret
845
846 ; LINUX-32-PIC: qux00:
847 ; LINUX-32-PIC:         movl    src+64, %eax
848 ; LINUX-32-PIC-NEXT:    movl    %eax, dst+64
849 ; LINUX-32-PIC-NEXT:    ret
850
851 ; LINUX-64-PIC: qux00:
852 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
853 ; LINUX-64-PIC-NEXT:    movl    64(%rax), %eax
854 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), %rcx
855 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx)
856 ; LINUX-64-PIC-NEXT:    ret
857
858 ; DARWIN-32-STATIC: _qux00:
859 ; DARWIN-32-STATIC:     movl    _src+64, %eax
860 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _dst+64
861 ; DARWIN-32-STATIC-NEXT:        ret
862
863 ; DARWIN-32-DYNAMIC: _qux00:
864 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
865 ; DARWIN-32-DYNAMIC-NEXT:       movl    64(%eax), %eax
866 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %ecx
867 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 64(%ecx)
868 ; DARWIN-32-DYNAMIC-NEXT:       ret
869
870 ; DARWIN-32-PIC: _qux00:
871 ; DARWIN-32-PIC:        call    "L13$pb"
872 ; DARWIN-32-PIC-NEXT: "L13$pb":
873 ; DARWIN-32-PIC-NEXT:   popl    %eax
874 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L13$pb"(%eax), %ecx
875 ; DARWIN-32-PIC-NEXT:   movl    64(%ecx), %ecx
876 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L13$pb"(%eax), %eax
877 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 64(%eax)
878 ; DARWIN-32-PIC-NEXT:   ret
879
880 ; DARWIN-64-STATIC: _qux00:
881 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
882 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax), %eax
883 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), %rcx
884 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx)
885 ; DARWIN-64-STATIC-NEXT:        ret
886
887 ; DARWIN-64-DYNAMIC: _qux00:
888 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
889 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax), %eax
890 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), %rcx
891 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx)
892 ; DARWIN-64-DYNAMIC-NEXT:       ret
893
894 ; DARWIN-64-PIC: _qux00:
895 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
896 ; DARWIN-64-PIC-NEXT:   movl    64(%rax), %eax
897 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), %rcx
898 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx)
899 ; DARWIN-64-PIC-NEXT:   ret
900 }
901
902 define void @qxx00() nounwind {
903 entry:
904         %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
905         store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4
906         ret void
907 ; LINUX-64-STATIC: qxx00:
908 ; LINUX-64-STATIC: movl    xsrc+64(%rip), %eax
909 ; LINUX-64-STATIC: movl    %eax, xdst+64(%rip)
910 ; LINUX-64-STATIC: ret
911
912 ; LINUX-32-STATIC: qxx00:
913 ; LINUX-32-STATIC:      movl    xsrc+64, %eax
914 ; LINUX-32-STATIC-NEXT:         movl    %eax, xdst+64
915 ; LINUX-32-STATIC-NEXT:         ret
916
917 ; LINUX-32-PIC: qxx00:
918 ; LINUX-32-PIC:         movl    xsrc+64, %eax
919 ; LINUX-32-PIC-NEXT:    movl    %eax, xdst+64
920 ; LINUX-32-PIC-NEXT:    ret
921
922 ; LINUX-64-PIC: qxx00:
923 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
924 ; LINUX-64-PIC-NEXT:    movl    64(%rax), %eax
925 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), %rcx
926 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx)
927 ; LINUX-64-PIC-NEXT:    ret
928
929 ; DARWIN-32-STATIC: _qxx00:
930 ; DARWIN-32-STATIC:     movl    _xsrc+64, %eax
931 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _xdst+64
932 ; DARWIN-32-STATIC-NEXT:        ret
933
934 ; DARWIN-32-DYNAMIC: _qxx00:
935 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
936 ; DARWIN-32-DYNAMIC-NEXT:       movl    64(%eax), %eax
937 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, %ecx
938 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 64(%ecx)
939 ; DARWIN-32-DYNAMIC-NEXT:       ret
940
941 ; DARWIN-32-PIC: _qxx00:
942 ; DARWIN-32-PIC:        call    "L14$pb"
943 ; DARWIN-32-PIC-NEXT: "L14$pb":
944 ; DARWIN-32-PIC-NEXT:   popl    %eax
945 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L14$pb"(%eax), %ecx
946 ; DARWIN-32-PIC-NEXT:   movl    64(%ecx), %ecx
947 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L14$pb"(%eax), %eax
948 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 64(%eax)
949 ; DARWIN-32-PIC-NEXT:   ret
950
951 ; DARWIN-64-STATIC: _qxx00:
952 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
953 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax), %eax
954 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), %rcx
955 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx)
956 ; DARWIN-64-STATIC-NEXT:        ret
957
958 ; DARWIN-64-DYNAMIC: _qxx00:
959 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
960 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax), %eax
961 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), %rcx
962 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx)
963 ; DARWIN-64-DYNAMIC-NEXT:       ret
964
965 ; DARWIN-64-PIC: _qxx00:
966 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
967 ; DARWIN-64-PIC-NEXT:   movl    64(%rax), %eax
968 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), %rcx
969 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx)
970 ; DARWIN-64-PIC-NEXT:   ret
971 }
972
973 define void @qux01() nounwind {
974 entry:
975         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
976         ret void
977 ; LINUX-64-STATIC: qux01:
978 ; LINUX-64-STATIC: movq    $dst+64, ptr
979 ; LINUX-64-STATIC: ret
980
981 ; LINUX-32-STATIC: qux01:
982 ; LINUX-32-STATIC:      movl    $dst+64, ptr
983 ; LINUX-32-STATIC-NEXT:         ret
984
985 ; LINUX-32-PIC: qux01:
986 ; LINUX-32-PIC:         movl    $dst+64, ptr
987 ; LINUX-32-PIC-NEXT:    ret
988
989 ; LINUX-64-PIC: qux01:
990 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
991 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
992 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
993 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
994 ; LINUX-64-PIC-NEXT:    ret
995
996 ; DARWIN-32-STATIC: _qux01:
997 ; DARWIN-32-STATIC:     movl    $_dst+64, _ptr
998 ; DARWIN-32-STATIC-NEXT:        ret
999
1000 ; DARWIN-32-DYNAMIC: _qux01:
1001 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
1002 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
1003 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
1004 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
1005 ; DARWIN-32-DYNAMIC-NEXT:       ret
1006
1007 ; DARWIN-32-PIC: _qux01:
1008 ; DARWIN-32-PIC:        call    "L15$pb"
1009 ; DARWIN-32-PIC-NEXT: "L15$pb":
1010 ; DARWIN-32-PIC-NEXT:   popl    %eax
1011 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L15$pb"(%eax), %ecx
1012 ; DARWIN-32-PIC-NEXT:   addl    $64, %ecx
1013 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L15$pb"(%eax), %eax
1014 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
1015 ; DARWIN-32-PIC-NEXT:   ret
1016
1017 ; DARWIN-64-STATIC: _qux01:
1018 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
1019 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
1020 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
1021 ; DARWIN-64-STATIC-NEXT:        movq    %rax, (%rcx)
1022 ; DARWIN-64-STATIC-NEXT:        ret
1023
1024 ; DARWIN-64-DYNAMIC: _qux01:
1025 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
1026 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
1027 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
1028 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, (%rcx)
1029 ; DARWIN-64-DYNAMIC-NEXT:       ret
1030
1031 ; DARWIN-64-PIC: _qux01:
1032 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
1033 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
1034 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
1035 ; DARWIN-64-PIC-NEXT:   movq    %rax, (%rcx)
1036 ; DARWIN-64-PIC-NEXT:   ret
1037 }
1038
1039 define void @qxx01() nounwind {
1040 entry:
1041         store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1042         ret void
1043 ; LINUX-64-STATIC: qxx01:
1044 ; LINUX-64-STATIC: movq    $xdst+64, ptr
1045 ; LINUX-64-STATIC: ret
1046
1047 ; LINUX-32-STATIC: qxx01:
1048 ; LINUX-32-STATIC:      movl    $xdst+64, ptr
1049 ; LINUX-32-STATIC-NEXT:         ret
1050
1051 ; LINUX-32-PIC: qxx01:
1052 ; LINUX-32-PIC:         movl    $xdst+64, ptr
1053 ; LINUX-32-PIC-NEXT:    ret
1054
1055 ; LINUX-64-PIC: qxx01:
1056 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
1057 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
1058 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
1059 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
1060 ; LINUX-64-PIC-NEXT:    ret
1061
1062 ; DARWIN-32-STATIC: _qxx01:
1063 ; DARWIN-32-STATIC:     movl    $_xdst+64, _ptr
1064 ; DARWIN-32-STATIC-NEXT:        ret
1065
1066 ; DARWIN-32-DYNAMIC: _qxx01:
1067 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
1068 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
1069 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
1070 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
1071 ; DARWIN-32-DYNAMIC-NEXT:       ret
1072
1073 ; DARWIN-32-PIC: _qxx01:
1074 ; DARWIN-32-PIC:        call    "L16$pb"
1075 ; DARWIN-32-PIC-NEXT: "L16$pb":
1076 ; DARWIN-32-PIC-NEXT:   popl    %eax
1077 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L16$pb"(%eax), %ecx
1078 ; DARWIN-32-PIC-NEXT:   addl    $64, %ecx
1079 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L16$pb"(%eax), %eax
1080 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
1081 ; DARWIN-32-PIC-NEXT:   ret
1082
1083 ; DARWIN-64-STATIC: _qxx01:
1084 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
1085 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
1086 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
1087 ; DARWIN-64-STATIC-NEXT:        movq    %rax, (%rcx)
1088 ; DARWIN-64-STATIC-NEXT:        ret
1089
1090 ; DARWIN-64-DYNAMIC: _qxx01:
1091 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
1092 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
1093 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
1094 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, (%rcx)
1095 ; DARWIN-64-DYNAMIC-NEXT:       ret
1096
1097 ; DARWIN-64-PIC: _qxx01:
1098 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
1099 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
1100 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
1101 ; DARWIN-64-PIC-NEXT:   movq    %rax, (%rcx)
1102 ; DARWIN-64-PIC-NEXT:   ret
1103 }
1104
1105 define void @qux02() nounwind {
1106 entry:
1107         %0 = load i32** @ptr, align 8
1108         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
1109         %2 = getelementptr i32* %0, i64 16
1110         store i32 %1, i32* %2, align 4
1111 ; LINUX-64-STATIC: qux02:
1112 ; LINUX-64-STATIC: movl    src+64(%rip), %eax
1113 ; LINUX-64-STATIC: movq    ptr(%rip), %rcx
1114 ; LINUX-64-STATIC: movl    %eax, 64(%rcx)
1115 ; LINUX-64-STATIC: ret
1116
1117 ; LINUX-32-STATIC: qux02:
1118 ; LINUX-32-STATIC:      movl    src+64, %eax
1119 ; LINUX-32-STATIC-NEXT:         movl    ptr, %ecx
1120 ; LINUX-32-STATIC-NEXT:         movl    %eax, 64(%ecx)
1121 ; LINUX-32-STATIC-NEXT:         ret
1122         ret void
1123
1124 ; LINUX-32-PIC: qux02:
1125 ; LINUX-32-PIC:         movl    src+64, %eax
1126 ; LINUX-32-PIC-NEXT:    movl    ptr, %ecx
1127 ; LINUX-32-PIC-NEXT:    movl    %eax, 64(%ecx)
1128 ; LINUX-32-PIC-NEXT:    ret
1129
1130 ; LINUX-64-PIC: qux02:
1131 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
1132 ; LINUX-64-PIC-NEXT:    movl    64(%rax), %eax
1133 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
1134 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
1135 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx)
1136 ; LINUX-64-PIC-NEXT:    ret
1137
1138 ; DARWIN-32-STATIC: _qux02:
1139 ; DARWIN-32-STATIC:     movl    _src+64, %eax
1140 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %ecx
1141 ; DARWIN-32-STATIC-NEXT:        movl    %eax, 64(%ecx)
1142 ; DARWIN-32-STATIC-NEXT:        ret
1143
1144 ; DARWIN-32-DYNAMIC: _qux02:
1145 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
1146 ; DARWIN-32-DYNAMIC-NEXT:       movl    64(%eax), %eax
1147 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
1148 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx), %ecx
1149 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 64(%ecx)
1150 ; DARWIN-32-DYNAMIC-NEXT:       ret
1151
1152 ; DARWIN-32-PIC: _qux02:
1153 ; DARWIN-32-PIC:        call    "L17$pb"
1154 ; DARWIN-32-PIC-NEXT: "L17$pb":
1155 ; DARWIN-32-PIC-NEXT:   popl    %eax
1156 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L17$pb"(%eax), %ecx
1157 ; DARWIN-32-PIC-NEXT:   movl    64(%ecx), %ecx
1158 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L17$pb"(%eax), %eax
1159 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
1160 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 64(%eax)
1161 ; DARWIN-32-PIC-NEXT:   ret
1162
1163 ; DARWIN-64-STATIC: _qux02:
1164 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
1165 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax), %eax
1166 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
1167 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
1168 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx)
1169 ; DARWIN-64-STATIC-NEXT:        ret
1170
1171 ; DARWIN-64-DYNAMIC: _qux02:
1172 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
1173 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax), %eax
1174 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
1175 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
1176 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx)
1177 ; DARWIN-64-DYNAMIC-NEXT:       ret
1178
1179 ; DARWIN-64-PIC: _qux02:
1180 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
1181 ; DARWIN-64-PIC-NEXT:   movl    64(%rax), %eax
1182 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
1183 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
1184 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx)
1185 ; DARWIN-64-PIC-NEXT:   ret
1186 }
1187
1188 define void @qxx02() nounwind {
1189 entry:
1190         %0 = load i32** @ptr, align 8
1191         %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
1192         %2 = getelementptr i32* %0, i64 16
1193         store i32 %1, i32* %2, align 4
1194 ; LINUX-64-STATIC: qxx02:
1195 ; LINUX-64-STATIC: movl    xsrc+64(%rip), %eax
1196 ; LINUX-64-STATIC: movq    ptr(%rip), %rcx
1197 ; LINUX-64-STATIC: movl    %eax, 64(%rcx)
1198 ; LINUX-64-STATIC: ret
1199
1200 ; LINUX-32-STATIC: qxx02:
1201 ; LINUX-32-STATIC:      movl    xsrc+64, %eax
1202 ; LINUX-32-STATIC-NEXT:         movl    ptr, %ecx
1203 ; LINUX-32-STATIC-NEXT:         movl    %eax, 64(%ecx)
1204 ; LINUX-32-STATIC-NEXT:         ret
1205         ret void
1206
1207 ; LINUX-32-PIC: qxx02:
1208 ; LINUX-32-PIC:         movl    xsrc+64, %eax
1209 ; LINUX-32-PIC-NEXT:    movl    ptr, %ecx
1210 ; LINUX-32-PIC-NEXT:    movl    %eax, 64(%ecx)
1211 ; LINUX-32-PIC-NEXT:    ret
1212
1213 ; LINUX-64-PIC: qxx02:
1214 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
1215 ; LINUX-64-PIC-NEXT:    movl    64(%rax), %eax
1216 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
1217 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
1218 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx)
1219 ; LINUX-64-PIC-NEXT:    ret
1220
1221 ; DARWIN-32-STATIC: _qxx02:
1222 ; DARWIN-32-STATIC:     movl    _xsrc+64, %eax
1223 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %ecx
1224 ; DARWIN-32-STATIC-NEXT:        movl    %eax, 64(%ecx)
1225 ; DARWIN-32-STATIC-NEXT:        ret
1226
1227 ; DARWIN-32-DYNAMIC: _qxx02:
1228 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
1229 ; DARWIN-32-DYNAMIC-NEXT:       movl    64(%eax), %eax
1230 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
1231 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx), %ecx
1232 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 64(%ecx)
1233 ; DARWIN-32-DYNAMIC-NEXT:       ret
1234
1235 ; DARWIN-32-PIC: _qxx02:
1236 ; DARWIN-32-PIC:        call    "L18$pb"
1237 ; DARWIN-32-PIC-NEXT: "L18$pb":
1238 ; DARWIN-32-PIC-NEXT:   popl    %eax
1239 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L18$pb"(%eax), %ecx
1240 ; DARWIN-32-PIC-NEXT:   movl    64(%ecx), %ecx
1241 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L18$pb"(%eax), %eax
1242 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
1243 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 64(%eax)
1244 ; DARWIN-32-PIC-NEXT:   ret
1245
1246 ; DARWIN-64-STATIC: _qxx02:
1247 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
1248 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax), %eax
1249 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
1250 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
1251 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx)
1252 ; DARWIN-64-STATIC-NEXT:        ret
1253
1254 ; DARWIN-64-DYNAMIC: _qxx02:
1255 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
1256 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax), %eax
1257 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
1258 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
1259 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx)
1260 ; DARWIN-64-DYNAMIC-NEXT:       ret
1261
1262 ; DARWIN-64-PIC: _qxx02:
1263 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
1264 ; DARWIN-64-PIC-NEXT:   movl    64(%rax), %eax
1265 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
1266 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
1267 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx)
1268 ; DARWIN-64-PIC-NEXT:   ret
1269 }
1270
1271 define void @qux03() nounwind {
1272 entry:
1273         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1274         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32
1275         ret void
1276 ; LINUX-64-STATIC: qux03:
1277 ; LINUX-64-STATIC: movl    dsrc+64(%rip), %eax
1278 ; LINUX-64-STATIC: movl    %eax, ddst+64(%rip)
1279 ; LINUX-64-STATIC: ret
1280
1281 ; LINUX-32-STATIC: qux03:
1282 ; LINUX-32-STATIC:      movl    dsrc+64, %eax
1283 ; LINUX-32-STATIC-NEXT:         movl    %eax, ddst+64
1284 ; LINUX-32-STATIC-NEXT:         ret
1285
1286 ; LINUX-32-PIC: qux03:
1287 ; LINUX-32-PIC:         movl    dsrc+64, %eax
1288 ; LINUX-32-PIC-NEXT:    movl    %eax, ddst+64
1289 ; LINUX-32-PIC-NEXT:    ret
1290
1291 ; LINUX-64-PIC: qux03:
1292 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
1293 ; LINUX-64-PIC-NEXT:    movl    64(%rax), %eax
1294 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), %rcx
1295 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx)
1296 ; LINUX-64-PIC-NEXT:    ret
1297
1298 ; DARWIN-32-STATIC: _qux03:
1299 ; DARWIN-32-STATIC:     movl    _dsrc+64, %eax
1300 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ddst+64
1301 ; DARWIN-32-STATIC-NEXT:        ret
1302
1303 ; DARWIN-32-DYNAMIC: _qux03:
1304 ; DARWIN-32-DYNAMIC:    movl    _dsrc+64, %eax
1305 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _ddst+64
1306 ; DARWIN-32-DYNAMIC-NEXT:       ret
1307
1308 ; DARWIN-32-PIC: _qux03:
1309 ; DARWIN-32-PIC:        call    "L19$pb"
1310 ; DARWIN-32-PIC-NEXT: "L19$pb":
1311 ; DARWIN-32-PIC-NEXT:   popl    %eax
1312 ; DARWIN-32-PIC-NEXT:   movl    _dsrc+64-"L19$pb"(%eax), %ecx
1313 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _ddst+64-"L19$pb"(%eax)
1314 ; DARWIN-32-PIC-NEXT:   ret
1315
1316 ; DARWIN-64-STATIC: _qux03:
1317 ; DARWIN-64-STATIC:     movl    _dsrc+64(%rip), %eax
1318 ; DARWIN-64-STATIC-NEXT:        movl    %eax, _ddst+64(%rip)
1319 ; DARWIN-64-STATIC-NEXT:        ret
1320
1321 ; DARWIN-64-DYNAMIC: _qux03:
1322 ; DARWIN-64-DYNAMIC:    movl    _dsrc+64(%rip), %eax
1323 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, _ddst+64(%rip)
1324 ; DARWIN-64-DYNAMIC-NEXT:       ret
1325
1326 ; DARWIN-64-PIC: _qux03:
1327 ; DARWIN-64-PIC:        movl    _dsrc+64(%rip), %eax
1328 ; DARWIN-64-PIC-NEXT:   movl    %eax, _ddst+64(%rip)
1329 ; DARWIN-64-PIC-NEXT:   ret
1330 }
1331
1332 define void @qux04() nounwind {
1333 entry:
1334         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1335         ret void
1336 ; LINUX-64-STATIC: qux04:
1337 ; LINUX-64-STATIC: movq    $ddst+64, dptr(%rip)
1338 ; LINUX-64-STATIC: ret
1339
1340 ; LINUX-32-STATIC: qux04:
1341 ; LINUX-32-STATIC:      movl    $ddst+64, dptr
1342 ; LINUX-32-STATIC-NEXT:         ret
1343
1344 ; LINUX-32-PIC: qux04:
1345 ; LINUX-32-PIC:         movl    $ddst+64, dptr
1346 ; LINUX-32-PIC-NEXT:    ret
1347
1348 ; LINUX-64-PIC: qux04:
1349 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
1350 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
1351 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
1352 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
1353 ; LINUX-64-PIC-NEXT:    ret
1354
1355 ; DARWIN-32-STATIC: _qux04:
1356 ; DARWIN-32-STATIC:     movl    $_ddst+64, _dptr
1357 ; DARWIN-32-STATIC-NEXT:        ret
1358
1359 ; DARWIN-32-DYNAMIC: _qux04:
1360 ; DARWIN-32-DYNAMIC:    movl    $_ddst+64, _dptr
1361 ; DARWIN-32-DYNAMIC-NEXT:       ret
1362
1363 ; DARWIN-32-PIC: _qux04:
1364 ; DARWIN-32-PIC:        call    "L20$pb"
1365 ; DARWIN-32-PIC-NEXT: "L20$pb":
1366 ; DARWIN-32-PIC-NEXT:   popl    %eax
1367 ; DARWIN-32-PIC-NEXT:   leal    _ddst+64-"L20$pb"(%eax), %ecx
1368 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-"L20$pb"(%eax)
1369 ; DARWIN-32-PIC-NEXT:   ret
1370
1371 ; DARWIN-64-STATIC: _qux04:
1372 ; DARWIN-64-STATIC:     leaq    _ddst+64(%rip), %rax
1373 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _dptr(%rip)
1374 ; DARWIN-64-STATIC-NEXT:        ret
1375
1376 ; DARWIN-64-DYNAMIC: _qux04:
1377 ; DARWIN-64-DYNAMIC:    leaq    _ddst+64(%rip), %rax
1378 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _dptr(%rip)
1379 ; DARWIN-64-DYNAMIC-NEXT:       ret
1380
1381 ; DARWIN-64-PIC: _qux04:
1382 ; DARWIN-64-PIC:        leaq    _ddst+64(%rip), %rax
1383 ; DARWIN-64-PIC-NEXT:   movq    %rax, _dptr(%rip)
1384 ; DARWIN-64-PIC-NEXT:   ret
1385 }
1386
1387 define void @qux05() nounwind {
1388 entry:
1389         %0 = load i32** @dptr, align 8
1390         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1391         %2 = getelementptr i32* %0, i64 16
1392         store i32 %1, i32* %2, align 4
1393 ; LINUX-64-STATIC: qux05:
1394 ; LINUX-64-STATIC: movl    dsrc+64(%rip), %eax
1395 ; LINUX-64-STATIC: movq    dptr(%rip), %rcx
1396 ; LINUX-64-STATIC: movl    %eax, 64(%rcx)
1397 ; LINUX-64-STATIC: ret
1398
1399 ; LINUX-32-STATIC: qux05:
1400 ; LINUX-32-STATIC:      movl    dsrc+64, %eax
1401 ; LINUX-32-STATIC-NEXT:         movl    dptr, %ecx
1402 ; LINUX-32-STATIC-NEXT:         movl    %eax, 64(%ecx)
1403 ; LINUX-32-STATIC-NEXT:         ret
1404         ret void
1405
1406 ; LINUX-32-PIC: qux05:
1407 ; LINUX-32-PIC:         movl    dsrc+64, %eax
1408 ; LINUX-32-PIC-NEXT:    movl    dptr, %ecx
1409 ; LINUX-32-PIC-NEXT:    movl    %eax, 64(%ecx)
1410 ; LINUX-32-PIC-NEXT:    ret
1411
1412 ; LINUX-64-PIC: qux05:
1413 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
1414 ; LINUX-64-PIC-NEXT:    movl    64(%rax), %eax
1415 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
1416 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
1417 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx)
1418 ; LINUX-64-PIC-NEXT:    ret
1419
1420 ; DARWIN-32-STATIC: _qux05:
1421 ; DARWIN-32-STATIC:     movl    _dsrc+64, %eax
1422 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, %ecx
1423 ; DARWIN-32-STATIC-NEXT:        movl    %eax, 64(%ecx)
1424 ; DARWIN-32-STATIC-NEXT:        ret
1425
1426 ; DARWIN-32-DYNAMIC: _qux05:
1427 ; DARWIN-32-DYNAMIC:    movl    _dsrc+64, %eax
1428 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, %ecx
1429 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 64(%ecx)
1430 ; DARWIN-32-DYNAMIC-NEXT:       ret
1431
1432 ; DARWIN-32-PIC: _qux05:
1433 ; DARWIN-32-PIC:        call    "L21$pb"
1434 ; DARWIN-32-PIC-NEXT: "L21$pb":
1435 ; DARWIN-32-PIC-NEXT:   popl    %eax
1436 ; DARWIN-32-PIC-NEXT:   movl    _dsrc+64-"L21$pb"(%eax), %ecx
1437 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L21$pb"(%eax), %eax
1438 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 64(%eax)
1439 ; DARWIN-32-PIC-NEXT:   ret
1440
1441 ; DARWIN-64-STATIC: _qux05:
1442 ; DARWIN-64-STATIC:     movl    _dsrc+64(%rip), %eax
1443 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), %rcx
1444 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx)
1445 ; DARWIN-64-STATIC-NEXT:        ret
1446
1447 ; DARWIN-64-DYNAMIC: _qux05:
1448 ; DARWIN-64-DYNAMIC:    movl    _dsrc+64(%rip), %eax
1449 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), %rcx
1450 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx)
1451 ; DARWIN-64-DYNAMIC-NEXT:       ret
1452
1453 ; DARWIN-64-PIC: _qux05:
1454 ; DARWIN-64-PIC:        movl    _dsrc+64(%rip), %eax
1455 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), %rcx
1456 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx)
1457 ; DARWIN-64-PIC-NEXT:   ret
1458 }
1459
1460 define void @qux06() nounwind {
1461 entry:
1462         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1463         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4
1464         ret void
1465 ; LINUX-64-STATIC: qux06:
1466 ; LINUX-64-STATIC: movl    lsrc+64(%rip), %eax
1467 ; LINUX-64-STATIC: movl    %eax, ldst+64
1468 ; LINUX-64-STATIC: ret
1469
1470 ; LINUX-32-STATIC: qux06:
1471 ; LINUX-32-STATIC:      movl    lsrc+64, %eax
1472 ; LINUX-32-STATIC-NEXT:         movl    %eax, ldst+64
1473 ; LINUX-32-STATIC-NEXT:         ret
1474
1475 ; LINUX-32-PIC: qux06:
1476 ; LINUX-32-PIC:         movl    lsrc+64, %eax
1477 ; LINUX-32-PIC-NEXT:    movl    %eax, ldst+64
1478 ; LINUX-32-PIC-NEXT:    ret
1479
1480 ; LINUX-64-PIC: qux06:
1481 ; LINUX-64-PIC:         movl    lsrc+64(%rip), %eax
1482 ; LINUX-64-PIC-NEXT:    movl    %eax, ldst+64(%rip)
1483 ; LINUX-64-PIC-NEXT:    ret
1484
1485 ; DARWIN-32-STATIC: _qux06:
1486 ; DARWIN-32-STATIC:     movl    _lsrc+64, %eax
1487 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ldst+64
1488 ; DARWIN-32-STATIC-NEXT:        ret
1489
1490 ; DARWIN-32-DYNAMIC: _qux06:
1491 ; DARWIN-32-DYNAMIC:    movl    _lsrc+64, %eax
1492 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _ldst+64
1493 ; DARWIN-32-DYNAMIC-NEXT:       ret
1494
1495 ; DARWIN-32-PIC: _qux06:
1496 ; DARWIN-32-PIC:        call    "L22$pb"
1497 ; DARWIN-32-PIC-NEXT: "L22$pb":
1498 ; DARWIN-32-PIC-NEXT:   popl    %eax
1499 ; DARWIN-32-PIC-NEXT:   movl    _lsrc+64-"L22$pb"(%eax), %ecx
1500 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _ldst+64-"L22$pb"(%eax)
1501 ; DARWIN-32-PIC-NEXT:   ret
1502
1503 ; DARWIN-64-STATIC: _qux06:
1504 ; DARWIN-64-STATIC:     movl    _lsrc+64(%rip), %eax
1505 ; DARWIN-64-STATIC-NEXT:        movl    %eax, _ldst+64(%rip)
1506 ; DARWIN-64-STATIC-NEXT:        ret
1507
1508 ; DARWIN-64-DYNAMIC: _qux06:
1509 ; DARWIN-64-DYNAMIC:    movl    _lsrc+64(%rip), %eax
1510 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, _ldst+64(%rip)
1511 ; DARWIN-64-DYNAMIC-NEXT:       ret
1512
1513 ; DARWIN-64-PIC: _qux06:
1514 ; DARWIN-64-PIC:        movl    _lsrc+64(%rip), %eax
1515 ; DARWIN-64-PIC-NEXT:   movl    %eax, _ldst+64(%rip)
1516 ; DARWIN-64-PIC-NEXT:   ret
1517 }
1518
1519 define void @qux07() nounwind {
1520 entry:
1521         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1522         ret void
1523 ; LINUX-64-STATIC: qux07:
1524 ; LINUX-64-STATIC: movq    $ldst+64, lptr
1525 ; LINUX-64-STATIC: ret
1526
1527 ; LINUX-32-STATIC: qux07:
1528 ; LINUX-32-STATIC:      movl    $ldst+64, lptr
1529 ; LINUX-32-STATIC-NEXT:         ret
1530
1531 ; LINUX-32-PIC: qux07:
1532 ; LINUX-32-PIC:         movl    $ldst+64, lptr
1533 ; LINUX-32-PIC-NEXT:    ret
1534
1535 ; LINUX-64-PIC: qux07:
1536 ; LINUX-64-PIC:         leaq    ldst+64(%rip), %rax
1537 ; LINUX-64-PIC-NEXT:    movq    %rax, lptr(%rip)
1538 ; LINUX-64-PIC-NEXT:    ret
1539
1540 ; DARWIN-32-STATIC: _qux07:
1541 ; DARWIN-32-STATIC:     movl    $_ldst+64, _lptr
1542 ; DARWIN-32-STATIC-NEXT:        ret
1543
1544 ; DARWIN-32-DYNAMIC: _qux07:
1545 ; DARWIN-32-DYNAMIC:    movl    $_ldst+64, _lptr
1546 ; DARWIN-32-DYNAMIC-NEXT:       ret
1547
1548 ; DARWIN-32-PIC: _qux07:
1549 ; DARWIN-32-PIC:        call    "L23$pb"
1550 ; DARWIN-32-PIC-NEXT: "L23$pb":
1551 ; DARWIN-32-PIC-NEXT:   popl    %eax
1552 ; DARWIN-32-PIC-NEXT:   leal    _ldst+64-"L23$pb"(%eax), %ecx
1553 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-"L23$pb"(%eax)
1554 ; DARWIN-32-PIC-NEXT:   ret
1555
1556 ; DARWIN-64-STATIC: _qux07:
1557 ; DARWIN-64-STATIC:     leaq    _ldst+64(%rip), %rax
1558 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _lptr(%rip)
1559 ; DARWIN-64-STATIC-NEXT:        ret
1560
1561 ; DARWIN-64-DYNAMIC: _qux07:
1562 ; DARWIN-64-DYNAMIC:    leaq    _ldst+64(%rip), %rax
1563 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _lptr(%rip)
1564 ; DARWIN-64-DYNAMIC-NEXT:       ret
1565
1566 ; DARWIN-64-PIC: _qux07:
1567 ; DARWIN-64-PIC:        leaq    _ldst+64(%rip), %rax
1568 ; DARWIN-64-PIC-NEXT:   movq    %rax, _lptr(%rip)
1569 ; DARWIN-64-PIC-NEXT:   ret
1570 }
1571
1572 define void @qux08() nounwind {
1573 entry:
1574         %0 = load i32** @lptr, align 8
1575         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1576         %2 = getelementptr i32* %0, i64 16
1577         store i32 %1, i32* %2, align 4
1578 ; LINUX-64-STATIC: qux08:
1579 ; LINUX-64-STATIC: movl    lsrc+64(%rip), %eax
1580 ; LINUX-64-STATIC: movq    lptr(%rip), %rcx
1581 ; LINUX-64-STATIC: movl    %eax, 64(%rcx)
1582 ; LINUX-64-STATIC: ret
1583
1584 ; LINUX-32-STATIC: qux08:
1585 ; LINUX-32-STATIC:      movl    lsrc+64, %eax
1586 ; LINUX-32-STATIC-NEXT:         movl    lptr, %ecx
1587 ; LINUX-32-STATIC-NEXT:         movl    %eax, 64(%ecx)
1588 ; LINUX-32-STATIC-NEXT:         ret
1589         ret void
1590
1591 ; LINUX-32-PIC: qux08:
1592 ; LINUX-32-PIC:         movl    lsrc+64, %eax
1593 ; LINUX-32-PIC-NEXT:    movl    lptr, %ecx
1594 ; LINUX-32-PIC-NEXT:    movl    %eax, 64(%ecx)
1595 ; LINUX-32-PIC-NEXT:    ret
1596
1597 ; LINUX-64-PIC: qux08:
1598 ; LINUX-64-PIC:         movl    lsrc+64(%rip), %eax
1599 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), %rcx
1600 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx)
1601 ; LINUX-64-PIC-NEXT:    ret
1602
1603 ; DARWIN-32-STATIC: _qux08:
1604 ; DARWIN-32-STATIC:     movl    _lsrc+64, %eax
1605 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, %ecx
1606 ; DARWIN-32-STATIC-NEXT:        movl    %eax, 64(%ecx)
1607 ; DARWIN-32-STATIC-NEXT:        ret
1608
1609 ; DARWIN-32-DYNAMIC: _qux08:
1610 ; DARWIN-32-DYNAMIC:    movl    _lsrc+64, %eax
1611 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, %ecx
1612 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 64(%ecx)
1613 ; DARWIN-32-DYNAMIC-NEXT:       ret
1614
1615 ; DARWIN-32-PIC: _qux08:
1616 ; DARWIN-32-PIC:        call    "L24$pb"
1617 ; DARWIN-32-PIC-NEXT: "L24$pb":
1618 ; DARWIN-32-PIC-NEXT:   popl    %eax
1619 ; DARWIN-32-PIC-NEXT:   movl    _lsrc+64-"L24$pb"(%eax), %ecx
1620 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L24$pb"(%eax), %eax
1621 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 64(%eax)
1622 ; DARWIN-32-PIC-NEXT:   ret
1623
1624 ; DARWIN-64-STATIC: _qux08:
1625 ; DARWIN-64-STATIC:     movl    _lsrc+64(%rip), %eax
1626 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), %rcx
1627 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx)
1628 ; DARWIN-64-STATIC-NEXT:        ret
1629
1630 ; DARWIN-64-DYNAMIC: _qux08:
1631 ; DARWIN-64-DYNAMIC:    movl    _lsrc+64(%rip), %eax
1632 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), %rcx
1633 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx)
1634 ; DARWIN-64-DYNAMIC-NEXT:       ret
1635
1636 ; DARWIN-64-PIC: _qux08:
1637 ; DARWIN-64-PIC:        movl    _lsrc+64(%rip), %eax
1638 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), %rcx
1639 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx)
1640 ; DARWIN-64-PIC-NEXT:   ret
1641 }
1642
1643 define void @ind00(i64 %i) nounwind {
1644 entry:
1645         %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1646         %1 = load i32* %0, align 4
1647         %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1648         store i32 %1, i32* %2, align 4
1649         ret void
1650 ; LINUX-64-STATIC: ind00:
1651 ; LINUX-64-STATIC: movl    src(,%rdi,4), %eax
1652 ; LINUX-64-STATIC: movl    %eax, dst(,%rdi,4)
1653 ; LINUX-64-STATIC: ret
1654
1655 ; LINUX-32-STATIC: ind00:
1656 ; LINUX-32-STATIC:      movl    4(%esp), %eax
1657 ; LINUX-32-STATIC-NEXT:         movl    src(,%eax,4), %ecx
1658 ; LINUX-32-STATIC-NEXT:         movl    %ecx, dst(,%eax,4)
1659 ; LINUX-32-STATIC-NEXT:         ret
1660
1661 ; LINUX-32-PIC: ind00:
1662 ; LINUX-32-PIC:         movl    4(%esp), %eax
1663 ; LINUX-32-PIC-NEXT:    movl    src(,%eax,4), %ecx
1664 ; LINUX-32-PIC-NEXT:    movl    %ecx, dst(,%eax,4)
1665 ; LINUX-32-PIC-NEXT:    ret
1666
1667 ; LINUX-64-PIC: ind00:
1668 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
1669 ; LINUX-64-PIC-NEXT:    movl    (%rax,%rdi,4), %eax
1670 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), %rcx
1671 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx,%rdi,4)
1672 ; LINUX-64-PIC-NEXT:    ret
1673
1674 ; DARWIN-32-STATIC: _ind00:
1675 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
1676 ; DARWIN-32-STATIC-NEXT:        movl    _src(,%eax,4), %ecx
1677 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _dst(,%eax,4)
1678 ; DARWIN-32-STATIC-NEXT:        ret
1679
1680 ; DARWIN-32-DYNAMIC: _ind00:
1681 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
1682 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, %ecx
1683 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx,%eax,4), %ecx
1684 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %edx
1685 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, (%edx,%eax,4)
1686 ; DARWIN-32-DYNAMIC-NEXT:       ret
1687
1688 ; DARWIN-32-PIC: _ind00:
1689 ; DARWIN-32-PIC:        call    "L25$pb"
1690 ; DARWIN-32-PIC-NEXT: "L25$pb":
1691 ; DARWIN-32-PIC-NEXT:   popl    %eax
1692 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
1693 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L25$pb"(%eax), %edx
1694 ; DARWIN-32-PIC-NEXT:   movl    (%edx,%ecx,4), %edx
1695 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L25$pb"(%eax), %eax
1696 ; DARWIN-32-PIC-NEXT:   movl    %edx, (%eax,%ecx,4)
1697 ; DARWIN-32-PIC-NEXT:   ret
1698
1699 ; DARWIN-64-STATIC: _ind00:
1700 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
1701 ; DARWIN-64-STATIC-NEXT:        movl    (%rax,%rdi,4), %eax
1702 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), %rcx
1703 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx,%rdi,4)
1704 ; DARWIN-64-STATIC-NEXT:        ret
1705
1706 ; DARWIN-64-DYNAMIC: _ind00:
1707 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
1708 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax,%rdi,4), %eax
1709 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), %rcx
1710 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx,%rdi,4)
1711 ; DARWIN-64-DYNAMIC-NEXT:       ret
1712
1713 ; DARWIN-64-PIC: _ind00:
1714 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
1715 ; DARWIN-64-PIC-NEXT:   movl    (%rax,%rdi,4), %eax
1716 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), %rcx
1717 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx,%rdi,4)
1718 ; DARWIN-64-PIC-NEXT:   ret
1719 }
1720
1721 define void @ixd00(i64 %i) nounwind {
1722 entry:
1723         %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
1724         %1 = load i32* %0, align 4
1725         %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1726         store i32 %1, i32* %2, align 4
1727         ret void
1728 ; LINUX-64-STATIC: ixd00:
1729 ; LINUX-64-STATIC: movl    xsrc(,%rdi,4), %eax
1730 ; LINUX-64-STATIC: movl    %eax, xdst(,%rdi,4)
1731 ; LINUX-64-STATIC: ret
1732
1733 ; LINUX-32-STATIC: ixd00:
1734 ; LINUX-32-STATIC:      movl    4(%esp), %eax
1735 ; LINUX-32-STATIC-NEXT:         movl    xsrc(,%eax,4), %ecx
1736 ; LINUX-32-STATIC-NEXT:         movl    %ecx, xdst(,%eax,4)
1737 ; LINUX-32-STATIC-NEXT:         ret
1738
1739 ; LINUX-32-PIC: ixd00:
1740 ; LINUX-32-PIC:         movl    4(%esp), %eax
1741 ; LINUX-32-PIC-NEXT:    movl    xsrc(,%eax,4), %ecx
1742 ; LINUX-32-PIC-NEXT:    movl    %ecx, xdst(,%eax,4)
1743 ; LINUX-32-PIC-NEXT:    ret
1744
1745 ; LINUX-64-PIC: ixd00:
1746 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
1747 ; LINUX-64-PIC-NEXT:    movl    (%rax,%rdi,4), %eax
1748 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), %rcx
1749 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx,%rdi,4)
1750 ; LINUX-64-PIC-NEXT:    ret
1751
1752 ; DARWIN-32-STATIC: _ixd00:
1753 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
1754 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc(,%eax,4), %ecx
1755 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _xdst(,%eax,4)
1756 ; DARWIN-32-STATIC-NEXT:        ret
1757
1758 ; DARWIN-32-DYNAMIC: _ixd00:
1759 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
1760 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, %ecx
1761 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx,%eax,4), %ecx
1762 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, %edx
1763 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, (%edx,%eax,4)
1764 ; DARWIN-32-DYNAMIC-NEXT:       ret
1765
1766 ; DARWIN-32-PIC: _ixd00:
1767 ; DARWIN-32-PIC:        call    "L26$pb"
1768 ; DARWIN-32-PIC-NEXT: "L26$pb":
1769 ; DARWIN-32-PIC-NEXT:   popl    %eax
1770 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
1771 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L26$pb"(%eax), %edx
1772 ; DARWIN-32-PIC-NEXT:   movl    (%edx,%ecx,4), %edx
1773 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L26$pb"(%eax), %eax
1774 ; DARWIN-32-PIC-NEXT:   movl    %edx, (%eax,%ecx,4)
1775 ; DARWIN-32-PIC-NEXT:   ret
1776
1777 ; DARWIN-64-STATIC: _ixd00:
1778 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
1779 ; DARWIN-64-STATIC-NEXT:        movl    (%rax,%rdi,4), %eax
1780 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), %rcx
1781 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx,%rdi,4)
1782 ; DARWIN-64-STATIC-NEXT:        ret
1783
1784 ; DARWIN-64-DYNAMIC: _ixd00:
1785 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
1786 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax,%rdi,4), %eax
1787 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), %rcx
1788 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx,%rdi,4)
1789 ; DARWIN-64-DYNAMIC-NEXT:       ret
1790
1791 ; DARWIN-64-PIC: _ixd00:
1792 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
1793 ; DARWIN-64-PIC-NEXT:   movl    (%rax,%rdi,4), %eax
1794 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), %rcx
1795 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx,%rdi,4)
1796 ; DARWIN-64-PIC-NEXT:   ret
1797 }
1798
1799 define void @ind01(i64 %i) nounwind {
1800 entry:
1801         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1802         store i32* %0, i32** @ptr, align 8
1803         ret void
1804 ; LINUX-64-STATIC: ind01:
1805 ; LINUX-64-STATIC: leaq    dst(,%rdi,4), %rax
1806 ; LINUX-64-STATIC: movq    %rax, ptr
1807 ; LINUX-64-STATIC: ret
1808
1809 ; LINUX-32-STATIC: ind01:
1810 ; LINUX-32-STATIC:      movl    4(%esp), %eax
1811 ; LINUX-32-STATIC-NEXT:         leal    dst(,%eax,4), %eax
1812 ; LINUX-32-STATIC-NEXT:         movl    %eax, ptr
1813 ; LINUX-32-STATIC-NEXT:         ret
1814
1815 ; LINUX-32-PIC: ind01:
1816 ; LINUX-32-PIC:         movl    4(%esp), %eax
1817 ; LINUX-32-PIC-NEXT:    leal    dst(,%eax,4), %eax
1818 ; LINUX-32-PIC-NEXT:    movl    %eax, ptr
1819 ; LINUX-32-PIC-NEXT:    ret
1820
1821 ; LINUX-64-PIC: ind01:
1822 ; LINUX-64-PIC:         shlq    $2, %rdi
1823 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), %rdi
1824 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rax
1825 ; LINUX-64-PIC-NEXT:    movq    %rdi, (%rax)
1826 ; LINUX-64-PIC-NEXT:    ret
1827
1828 ; DARWIN-32-STATIC: _ind01:
1829 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
1830 ; DARWIN-32-STATIC-NEXT:        leal    _dst(,%eax,4), %eax
1831 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ptr
1832 ; DARWIN-32-STATIC-NEXT:        ret
1833
1834 ; DARWIN-32-DYNAMIC: _ind01:
1835 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
1836 ; DARWIN-32-DYNAMIC-NEXT:       shll    $2, %eax
1837 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, %eax
1838 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
1839 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
1840 ; DARWIN-32-DYNAMIC-NEXT:       ret
1841
1842 ; DARWIN-32-PIC: _ind01:
1843 ; DARWIN-32-PIC:        call    "L27$pb"
1844 ; DARWIN-32-PIC-NEXT: "L27$pb":
1845 ; DARWIN-32-PIC-NEXT:   popl    %eax
1846 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
1847 ; DARWIN-32-PIC-NEXT:   shll    $2, %ecx
1848 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-"L27$pb"(%eax), %ecx
1849 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L27$pb"(%eax), %eax
1850 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
1851 ; DARWIN-32-PIC-NEXT:   ret
1852
1853 ; DARWIN-64-STATIC: _ind01:
1854 ; DARWIN-64-STATIC:     shlq    $2, %rdi
1855 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), %rdi
1856 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rax
1857 ; DARWIN-64-STATIC-NEXT:        movq    %rdi, (%rax)
1858 ; DARWIN-64-STATIC-NEXT:        ret
1859
1860 ; DARWIN-64-DYNAMIC: _ind01:
1861 ; DARWIN-64-DYNAMIC:    shlq    $2, %rdi
1862 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), %rdi
1863 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rax
1864 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rdi, (%rax)
1865 ; DARWIN-64-DYNAMIC-NEXT:       ret
1866
1867 ; DARWIN-64-PIC: _ind01:
1868 ; DARWIN-64-PIC:        shlq    $2, %rdi
1869 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), %rdi
1870 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rax
1871 ; DARWIN-64-PIC-NEXT:   movq    %rdi, (%rax)
1872 ; DARWIN-64-PIC-NEXT:   ret
1873 }
1874
1875 define void @ixd01(i64 %i) nounwind {
1876 entry:
1877         %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1878         store i32* %0, i32** @ptr, align 8
1879         ret void
1880 ; LINUX-64-STATIC: ixd01:
1881 ; LINUX-64-STATIC: leaq    xdst(,%rdi,4), %rax
1882 ; LINUX-64-STATIC: movq    %rax, ptr
1883 ; LINUX-64-STATIC: ret
1884
1885 ; LINUX-32-STATIC: ixd01:
1886 ; LINUX-32-STATIC:      movl    4(%esp), %eax
1887 ; LINUX-32-STATIC-NEXT:         leal    xdst(,%eax,4), %eax
1888 ; LINUX-32-STATIC-NEXT:         movl    %eax, ptr
1889 ; LINUX-32-STATIC-NEXT:         ret
1890
1891 ; LINUX-32-PIC: ixd01:
1892 ; LINUX-32-PIC:         movl    4(%esp), %eax
1893 ; LINUX-32-PIC-NEXT:    leal    xdst(,%eax,4), %eax
1894 ; LINUX-32-PIC-NEXT:    movl    %eax, ptr
1895 ; LINUX-32-PIC-NEXT:    ret
1896
1897 ; LINUX-64-PIC: ixd01:
1898 ; LINUX-64-PIC:         shlq    $2, %rdi
1899 ; LINUX-64-PIC-NEXT:    addq    xdst@GOTPCREL(%rip), %rdi
1900 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rax
1901 ; LINUX-64-PIC-NEXT:    movq    %rdi, (%rax)
1902 ; LINUX-64-PIC-NEXT:    ret
1903
1904 ; DARWIN-32-STATIC: _ixd01:
1905 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
1906 ; DARWIN-32-STATIC-NEXT:        leal    _xdst(,%eax,4), %eax
1907 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ptr
1908 ; DARWIN-32-STATIC-NEXT:        ret
1909
1910 ; DARWIN-32-DYNAMIC: _ixd01:
1911 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
1912 ; DARWIN-32-DYNAMIC-NEXT:       shll    $2, %eax
1913 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_xdst$non_lazy_ptr, %eax
1914 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
1915 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
1916 ; DARWIN-32-DYNAMIC-NEXT:       ret
1917
1918 ; DARWIN-32-PIC: _ixd01:
1919 ; DARWIN-32-PIC:        call    "L28$pb"
1920 ; DARWIN-32-PIC-NEXT: "L28$pb":
1921 ; DARWIN-32-PIC-NEXT:   popl    %eax
1922 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
1923 ; DARWIN-32-PIC-NEXT:   shll    $2, %ecx
1924 ; DARWIN-32-PIC-NEXT:   addl    L_xdst$non_lazy_ptr-"L28$pb"(%eax), %ecx
1925 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L28$pb"(%eax), %eax
1926 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
1927 ; DARWIN-32-PIC-NEXT:   ret
1928
1929 ; DARWIN-64-STATIC: _ixd01:
1930 ; DARWIN-64-STATIC:     shlq    $2, %rdi
1931 ; DARWIN-64-STATIC-NEXT:        addq    _xdst@GOTPCREL(%rip), %rdi
1932 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rax
1933 ; DARWIN-64-STATIC-NEXT:        movq    %rdi, (%rax)
1934 ; DARWIN-64-STATIC-NEXT:        ret
1935
1936 ; DARWIN-64-DYNAMIC: _ixd01:
1937 ; DARWIN-64-DYNAMIC:    shlq    $2, %rdi
1938 ; DARWIN-64-DYNAMIC-NEXT:       addq    _xdst@GOTPCREL(%rip), %rdi
1939 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rax
1940 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rdi, (%rax)
1941 ; DARWIN-64-DYNAMIC-NEXT:       ret
1942
1943 ; DARWIN-64-PIC: _ixd01:
1944 ; DARWIN-64-PIC:        shlq    $2, %rdi
1945 ; DARWIN-64-PIC-NEXT:   addq    _xdst@GOTPCREL(%rip), %rdi
1946 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rax
1947 ; DARWIN-64-PIC-NEXT:   movq    %rdi, (%rax)
1948 ; DARWIN-64-PIC-NEXT:   ret
1949 }
1950
1951 define void @ind02(i64 %i) nounwind {
1952 entry:
1953         %0 = load i32** @ptr, align 8
1954         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1955         %2 = load i32* %1, align 4
1956         %3 = getelementptr i32* %0, i64 %i
1957         store i32 %2, i32* %3, align 4
1958         ret void
1959 ; LINUX-64-STATIC: ind02:
1960 ; LINUX-64-STATIC: movl    src(,%rdi,4), %eax
1961 ; LINUX-64-STATIC: movq    ptr(%rip), %rcx
1962 ; LINUX-64-STATIC: movl    %eax, (%rcx,%rdi,4)
1963 ; LINUX-64-STATIC: ret
1964
1965 ; LINUX-32-STATIC: ind02:
1966 ; LINUX-32-STATIC:      movl    4(%esp), %eax
1967 ; LINUX-32-STATIC-NEXT:         movl    src(,%eax,4), %ecx
1968 ; LINUX-32-STATIC-NEXT:         movl    ptr, %edx
1969 ; LINUX-32-STATIC-NEXT:         movl    %ecx, (%edx,%eax,4)
1970 ; LINUX-32-STATIC-NEXT:         ret
1971
1972 ; LINUX-32-PIC: ind02:
1973 ; LINUX-32-PIC:         movl    4(%esp), %eax
1974 ; LINUX-32-PIC-NEXT:    movl    src(,%eax,4), %ecx
1975 ; LINUX-32-PIC-NEXT:    movl    ptr, %edx
1976 ; LINUX-32-PIC-NEXT:    movl    %ecx, (%edx,%eax,4)
1977 ; LINUX-32-PIC-NEXT:    ret
1978
1979 ; LINUX-64-PIC: ind02:
1980 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
1981 ; LINUX-64-PIC-NEXT:    movl    (%rax,%rdi,4), %eax
1982 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
1983 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
1984 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx,%rdi,4)
1985 ; LINUX-64-PIC-NEXT:    ret
1986
1987 ; DARWIN-32-STATIC: _ind02:
1988 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
1989 ; DARWIN-32-STATIC-NEXT:        movl    _src(,%eax,4), %ecx
1990 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %edx
1991 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, (%edx,%eax,4)
1992 ; DARWIN-32-STATIC-NEXT:        ret
1993
1994 ; DARWIN-32-DYNAMIC: _ind02:
1995 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
1996 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, %ecx
1997 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx,%eax,4), %ecx
1998 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %edx
1999 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%edx), %edx
2000 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, (%edx,%eax,4)
2001 ; DARWIN-32-DYNAMIC-NEXT:       ret
2002
2003 ; DARWIN-32-PIC: _ind02:
2004 ; DARWIN-32-PIC:        call    "L29$pb"
2005 ; DARWIN-32-PIC-NEXT: "L29$pb":
2006 ; DARWIN-32-PIC-NEXT:   popl    %eax
2007 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2008 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L29$pb"(%eax), %edx
2009 ; DARWIN-32-PIC-NEXT:   movl    (%edx,%ecx,4), %edx
2010 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L29$pb"(%eax), %eax
2011 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
2012 ; DARWIN-32-PIC-NEXT:   movl    %edx, (%eax,%ecx,4)
2013 ; DARWIN-32-PIC-NEXT:   ret
2014
2015 ; DARWIN-64-STATIC: _ind02:
2016 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
2017 ; DARWIN-64-STATIC-NEXT:        movl    (%rax,%rdi,4), %eax
2018 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
2019 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
2020 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx,%rdi,4)
2021 ; DARWIN-64-STATIC-NEXT:        ret
2022
2023 ; DARWIN-64-DYNAMIC: _ind02:
2024 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
2025 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax,%rdi,4), %eax
2026 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
2027 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
2028 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx,%rdi,4)
2029 ; DARWIN-64-DYNAMIC-NEXT:       ret
2030
2031 ; DARWIN-64-PIC: _ind02:
2032 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
2033 ; DARWIN-64-PIC-NEXT:   movl    (%rax,%rdi,4), %eax
2034 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
2035 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
2036 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx,%rdi,4)
2037 ; DARWIN-64-PIC-NEXT:   ret
2038 }
2039
2040 define void @ixd02(i64 %i) nounwind {
2041 entry:
2042         %0 = load i32** @ptr, align 8
2043         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
2044         %2 = load i32* %1, align 4
2045         %3 = getelementptr i32* %0, i64 %i
2046         store i32 %2, i32* %3, align 4
2047         ret void
2048 ; LINUX-64-STATIC: ixd02:
2049 ; LINUX-64-STATIC: movl    xsrc(,%rdi,4), %eax
2050 ; LINUX-64-STATIC: movq    ptr(%rip), %rcx
2051 ; LINUX-64-STATIC: movl    %eax, (%rcx,%rdi,4)
2052 ; LINUX-64-STATIC: ret
2053
2054 ; LINUX-32-STATIC: ixd02:
2055 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2056 ; LINUX-32-STATIC-NEXT:         movl    xsrc(,%eax,4), %ecx
2057 ; LINUX-32-STATIC-NEXT:         movl    ptr, %edx
2058 ; LINUX-32-STATIC-NEXT:         movl    %ecx, (%edx,%eax,4)
2059 ; LINUX-32-STATIC-NEXT:         ret
2060
2061 ; LINUX-32-PIC: ixd02:
2062 ; LINUX-32-PIC:         movl    4(%esp), %eax
2063 ; LINUX-32-PIC-NEXT:    movl    xsrc(,%eax,4), %ecx
2064 ; LINUX-32-PIC-NEXT:    movl    ptr, %edx
2065 ; LINUX-32-PIC-NEXT:    movl    %ecx, (%edx,%eax,4)
2066 ; LINUX-32-PIC-NEXT:    ret
2067
2068 ; LINUX-64-PIC: ixd02:
2069 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
2070 ; LINUX-64-PIC-NEXT:    movl    (%rax,%rdi,4), %eax
2071 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
2072 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
2073 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx,%rdi,4)
2074 ; LINUX-64-PIC-NEXT:    ret
2075
2076 ; DARWIN-32-STATIC: _ixd02:
2077 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2078 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc(,%eax,4), %ecx
2079 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %edx
2080 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, (%edx,%eax,4)
2081 ; DARWIN-32-STATIC-NEXT:        ret
2082
2083 ; DARWIN-32-DYNAMIC: _ixd02:
2084 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2085 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, %ecx
2086 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx,%eax,4), %ecx
2087 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %edx
2088 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%edx), %edx
2089 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, (%edx,%eax,4)
2090 ; DARWIN-32-DYNAMIC-NEXT:       ret
2091
2092 ; DARWIN-32-PIC: _ixd02:
2093 ; DARWIN-32-PIC:        call    "L30$pb"
2094 ; DARWIN-32-PIC-NEXT: "L30$pb":
2095 ; DARWIN-32-PIC-NEXT:   popl    %eax
2096 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2097 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L30$pb"(%eax), %edx
2098 ; DARWIN-32-PIC-NEXT:   movl    (%edx,%ecx,4), %edx
2099 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L30$pb"(%eax), %eax
2100 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
2101 ; DARWIN-32-PIC-NEXT:   movl    %edx, (%eax,%ecx,4)
2102 ; DARWIN-32-PIC-NEXT:   ret
2103
2104 ; DARWIN-64-STATIC: _ixd02:
2105 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
2106 ; DARWIN-64-STATIC-NEXT:        movl    (%rax,%rdi,4), %eax
2107 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
2108 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
2109 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx,%rdi,4)
2110 ; DARWIN-64-STATIC-NEXT:        ret
2111
2112 ; DARWIN-64-DYNAMIC: _ixd02:
2113 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
2114 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax,%rdi,4), %eax
2115 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
2116 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
2117 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx,%rdi,4)
2118 ; DARWIN-64-DYNAMIC-NEXT:       ret
2119
2120 ; DARWIN-64-PIC: _ixd02:
2121 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
2122 ; DARWIN-64-PIC-NEXT:   movl    (%rax,%rdi,4), %eax
2123 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
2124 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
2125 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx,%rdi,4)
2126 ; DARWIN-64-PIC-NEXT:   ret
2127 }
2128
2129 define void @ind03(i64 %i) nounwind {
2130 entry:
2131         %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2132         %1 = load i32* %0, align 4
2133         %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2134         store i32 %1, i32* %2, align 4
2135         ret void
2136 ; LINUX-64-STATIC: ind03:
2137 ; LINUX-64-STATIC: movl    dsrc(,%rdi,4), %eax
2138 ; LINUX-64-STATIC: movl    %eax, ddst(,%rdi,4)
2139 ; LINUX-64-STATIC: ret
2140
2141 ; LINUX-32-STATIC: ind03:
2142 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2143 ; LINUX-32-STATIC-NEXT:         movl    dsrc(,%eax,4), %ecx
2144 ; LINUX-32-STATIC-NEXT:         movl    %ecx, ddst(,%eax,4)
2145 ; LINUX-32-STATIC-NEXT:         ret
2146
2147 ; LINUX-32-PIC: ind03:
2148 ; LINUX-32-PIC:         movl    4(%esp), %eax
2149 ; LINUX-32-PIC-NEXT:    movl    dsrc(,%eax,4), %ecx
2150 ; LINUX-32-PIC-NEXT:    movl    %ecx, ddst(,%eax,4)
2151 ; LINUX-32-PIC-NEXT:    ret
2152
2153 ; LINUX-64-PIC: ind03:
2154 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
2155 ; LINUX-64-PIC-NEXT:    movl    (%rax,%rdi,4), %eax
2156 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), %rcx
2157 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx,%rdi,4)
2158 ; LINUX-64-PIC-NEXT:    ret
2159
2160 ; DARWIN-32-STATIC: _ind03:
2161 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2162 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc(,%eax,4), %ecx
2163 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _ddst(,%eax,4)
2164 ; DARWIN-32-STATIC-NEXT:        ret
2165
2166 ; DARWIN-32-DYNAMIC: _ind03:
2167 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2168 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc(,%eax,4), %ecx
2169 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, _ddst(,%eax,4)
2170 ; DARWIN-32-DYNAMIC-NEXT:       ret
2171
2172 ; DARWIN-32-PIC: _ind03:
2173 ; DARWIN-32-PIC:        call    "L31$pb"
2174 ; DARWIN-32-PIC-NEXT: "L31$pb":
2175 ; DARWIN-32-PIC-NEXT:   popl    %eax
2176 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2177 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-"L31$pb"(%eax,%ecx,4), %edx
2178 ; DARWIN-32-PIC-NEXT:   movl    %edx, _ddst-"L31$pb"(%eax,%ecx,4)
2179 ; DARWIN-32-PIC-NEXT:   ret
2180
2181 ; DARWIN-64-STATIC: _ind03:
2182 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
2183 ; DARWIN-64-STATIC-NEXT:        movl    (%rax,%rdi,4), %eax
2184 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), %rcx
2185 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx,%rdi,4)
2186 ; DARWIN-64-STATIC-NEXT:        ret
2187
2188 ; DARWIN-64-DYNAMIC: _ind03:
2189 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
2190 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax,%rdi,4), %eax
2191 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), %rcx
2192 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx,%rdi,4)
2193 ; DARWIN-64-DYNAMIC-NEXT:       ret
2194
2195 ; DARWIN-64-PIC: _ind03:
2196 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
2197 ; DARWIN-64-PIC-NEXT:   movl    (%rax,%rdi,4), %eax
2198 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), %rcx
2199 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx,%rdi,4)
2200 ; DARWIN-64-PIC-NEXT:   ret
2201 }
2202
2203 define void @ind04(i64 %i) nounwind {
2204 entry:
2205         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2206         store i32* %0, i32** @dptr, align 8
2207         ret void
2208 ; LINUX-64-STATIC: ind04:
2209 ; LINUX-64-STATIC: leaq    ddst(,%rdi,4), %rax
2210 ; LINUX-64-STATIC: movq    %rax, dptr
2211 ; LINUX-64-STATIC: ret
2212
2213 ; LINUX-32-STATIC: ind04:
2214 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2215 ; LINUX-32-STATIC-NEXT:         leal    ddst(,%eax,4), %eax
2216 ; LINUX-32-STATIC-NEXT:         movl    %eax, dptr
2217 ; LINUX-32-STATIC-NEXT:         ret
2218
2219 ; LINUX-32-PIC: ind04:
2220 ; LINUX-32-PIC:         movl    4(%esp), %eax
2221 ; LINUX-32-PIC-NEXT:    leal    ddst(,%eax,4), %eax
2222 ; LINUX-32-PIC-NEXT:    movl    %eax, dptr
2223 ; LINUX-32-PIC-NEXT:    ret
2224
2225 ; LINUX-64-PIC: ind04:
2226 ; LINUX-64-PIC:         shlq    $2, %rdi
2227 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), %rdi
2228 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rax
2229 ; LINUX-64-PIC-NEXT:    movq    %rdi, (%rax)
2230 ; LINUX-64-PIC-NEXT:    ret
2231
2232 ; DARWIN-32-STATIC: _ind04:
2233 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2234 ; DARWIN-32-STATIC-NEXT:        leal    _ddst(,%eax,4), %eax
2235 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _dptr
2236 ; DARWIN-32-STATIC-NEXT:        ret
2237
2238 ; DARWIN-32-DYNAMIC: _ind04:
2239 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2240 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst(,%eax,4), %eax
2241 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _dptr
2242 ; DARWIN-32-DYNAMIC-NEXT:       ret
2243
2244 ; DARWIN-32-PIC: _ind04:
2245 ; DARWIN-32-PIC:        call    "L32$pb"
2246 ; DARWIN-32-PIC-NEXT: "L32$pb":
2247 ; DARWIN-32-PIC-NEXT:   popl    %eax
2248 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2249 ; DARWIN-32-PIC-NEXT:   leal    _ddst-"L32$pb"(%eax,%ecx,4), %ecx
2250 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-"L32$pb"(%eax)
2251 ; DARWIN-32-PIC-NEXT:   ret
2252
2253 ; DARWIN-64-STATIC: _ind04:
2254 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
2255 ; DARWIN-64-STATIC-NEXT:        leaq    (%rax,%rdi,4), %rax
2256 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _dptr(%rip)
2257 ; DARWIN-64-STATIC-NEXT:        ret
2258
2259 ; DARWIN-64-DYNAMIC: _ind04:
2260 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
2261 ; DARWIN-64-DYNAMIC-NEXT:       leaq    (%rax,%rdi,4), %rax
2262 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _dptr(%rip)
2263 ; DARWIN-64-DYNAMIC-NEXT:       ret
2264
2265 ; DARWIN-64-PIC: _ind04:
2266 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
2267 ; DARWIN-64-PIC-NEXT:   leaq    (%rax,%rdi,4), %rax
2268 ; DARWIN-64-PIC-NEXT:   movq    %rax, _dptr(%rip)
2269 ; DARWIN-64-PIC-NEXT:   ret
2270 }
2271
2272 define void @ind05(i64 %i) nounwind {
2273 entry:
2274         %0 = load i32** @dptr, align 8
2275         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2276         %2 = load i32* %1, align 4
2277         %3 = getelementptr i32* %0, i64 %i
2278         store i32 %2, i32* %3, align 4
2279         ret void
2280 ; LINUX-64-STATIC: ind05:
2281 ; LINUX-64-STATIC: movl    dsrc(,%rdi,4), %eax
2282 ; LINUX-64-STATIC: movq    dptr(%rip), %rcx
2283 ; LINUX-64-STATIC: movl    %eax, (%rcx,%rdi,4)
2284 ; LINUX-64-STATIC: ret
2285
2286 ; LINUX-32-STATIC: ind05:
2287 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2288 ; LINUX-32-STATIC-NEXT:         movl    dsrc(,%eax,4), %ecx
2289 ; LINUX-32-STATIC-NEXT:         movl    dptr, %edx
2290 ; LINUX-32-STATIC-NEXT:         movl    %ecx, (%edx,%eax,4)
2291 ; LINUX-32-STATIC-NEXT:         ret
2292
2293 ; LINUX-32-PIC: ind05:
2294 ; LINUX-32-PIC:         movl    4(%esp), %eax
2295 ; LINUX-32-PIC-NEXT:    movl    dsrc(,%eax,4), %ecx
2296 ; LINUX-32-PIC-NEXT:    movl    dptr, %edx
2297 ; LINUX-32-PIC-NEXT:    movl    %ecx, (%edx,%eax,4)
2298 ; LINUX-32-PIC-NEXT:    ret
2299
2300 ; LINUX-64-PIC: ind05:
2301 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
2302 ; LINUX-64-PIC-NEXT:    movl    (%rax,%rdi,4), %eax
2303 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
2304 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
2305 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx,%rdi,4)
2306 ; LINUX-64-PIC-NEXT:    ret
2307
2308 ; DARWIN-32-STATIC: _ind05:
2309 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2310 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc(,%eax,4), %ecx
2311 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, %edx
2312 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, (%edx,%eax,4)
2313 ; DARWIN-32-STATIC-NEXT:        ret
2314
2315 ; DARWIN-32-DYNAMIC: _ind05:
2316 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2317 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc(,%eax,4), %ecx
2318 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, %edx
2319 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, (%edx,%eax,4)
2320 ; DARWIN-32-DYNAMIC-NEXT:       ret
2321
2322 ; DARWIN-32-PIC: _ind05:
2323 ; DARWIN-32-PIC:        call    "L33$pb"
2324 ; DARWIN-32-PIC-NEXT: "L33$pb":
2325 ; DARWIN-32-PIC-NEXT:   popl    %eax
2326 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2327 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-"L33$pb"(%eax,%ecx,4), %edx
2328 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L33$pb"(%eax), %eax
2329 ; DARWIN-32-PIC-NEXT:   movl    %edx, (%eax,%ecx,4)
2330 ; DARWIN-32-PIC-NEXT:   ret
2331
2332 ; DARWIN-64-STATIC: _ind05:
2333 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
2334 ; DARWIN-64-STATIC-NEXT:        movl    (%rax,%rdi,4), %eax
2335 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), %rcx
2336 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx,%rdi,4)
2337 ; DARWIN-64-STATIC-NEXT:        ret
2338
2339 ; DARWIN-64-DYNAMIC: _ind05:
2340 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
2341 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax,%rdi,4), %eax
2342 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), %rcx
2343 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx,%rdi,4)
2344 ; DARWIN-64-DYNAMIC-NEXT:       ret
2345
2346 ; DARWIN-64-PIC: _ind05:
2347 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
2348 ; DARWIN-64-PIC-NEXT:   movl    (%rax,%rdi,4), %eax
2349 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), %rcx
2350 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx,%rdi,4)
2351 ; DARWIN-64-PIC-NEXT:   ret
2352 }
2353
2354 define void @ind06(i64 %i) nounwind {
2355 entry:
2356         %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2357         %1 = load i32* %0, align 4
2358         %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2359         store i32 %1, i32* %2, align 4
2360         ret void
2361 ; LINUX-64-STATIC: ind06:
2362 ; LINUX-64-STATIC: movl    lsrc(,%rdi,4), %eax
2363 ; LINUX-64-STATIC: movl    %eax, ldst(,%rdi,4)
2364 ; LINUX-64-STATIC: ret
2365
2366 ; LINUX-32-STATIC: ind06:
2367 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2368 ; LINUX-32-STATIC-NEXT:         movl    lsrc(,%eax,4), %ecx
2369 ; LINUX-32-STATIC-NEXT:         movl    %ecx, ldst(,%eax,4)
2370 ; LINUX-32-STATIC-NEXT:         ret
2371
2372 ; LINUX-32-PIC: ind06:
2373 ; LINUX-32-PIC:         movl    4(%esp), %eax
2374 ; LINUX-32-PIC-NEXT:    movl    lsrc(,%eax,4), %ecx
2375 ; LINUX-32-PIC-NEXT:    movl    %ecx, ldst(,%eax,4)
2376 ; LINUX-32-PIC-NEXT:    ret
2377
2378 ; LINUX-64-PIC: ind06:
2379 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
2380 ; LINUX-64-PIC-NEXT:    movl    (%rax,%rdi,4), %eax
2381 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), %rcx
2382 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx,%rdi,4)
2383 ; LINUX-64-PIC-NEXT:    ret
2384
2385 ; DARWIN-32-STATIC: _ind06:
2386 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2387 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc(,%eax,4), %ecx
2388 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _ldst(,%eax,4)
2389 ; DARWIN-32-STATIC-NEXT:        ret
2390
2391 ; DARWIN-32-DYNAMIC: _ind06:
2392 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2393 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc(,%eax,4), %ecx
2394 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, _ldst(,%eax,4)
2395 ; DARWIN-32-DYNAMIC-NEXT:       ret
2396
2397 ; DARWIN-32-PIC: _ind06:
2398 ; DARWIN-32-PIC:        call    "L34$pb"
2399 ; DARWIN-32-PIC-NEXT: "L34$pb":
2400 ; DARWIN-32-PIC-NEXT:   popl    %eax
2401 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2402 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-"L34$pb"(%eax,%ecx,4), %edx
2403 ; DARWIN-32-PIC-NEXT:   movl    %edx, _ldst-"L34$pb"(%eax,%ecx,4)
2404 ; DARWIN-32-PIC-NEXT:   ret
2405
2406 ; DARWIN-64-STATIC: _ind06:
2407 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
2408 ; DARWIN-64-STATIC-NEXT:        movl    (%rax,%rdi,4), %eax
2409 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), %rcx
2410 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx,%rdi,4)
2411 ; DARWIN-64-STATIC-NEXT:        ret
2412
2413 ; DARWIN-64-DYNAMIC: _ind06:
2414 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
2415 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax,%rdi,4), %eax
2416 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), %rcx
2417 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx,%rdi,4)
2418 ; DARWIN-64-DYNAMIC-NEXT:       ret
2419
2420 ; DARWIN-64-PIC: _ind06:
2421 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
2422 ; DARWIN-64-PIC-NEXT:   movl    (%rax,%rdi,4), %eax
2423 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), %rcx
2424 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx,%rdi,4)
2425 ; DARWIN-64-PIC-NEXT:   ret
2426 }
2427
2428 define void @ind07(i64 %i) nounwind {
2429 entry:
2430         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2431         store i32* %0, i32** @lptr, align 8
2432         ret void
2433 ; LINUX-64-STATIC: ind07:
2434 ; LINUX-64-STATIC: leaq    ldst(,%rdi,4), %rax
2435 ; LINUX-64-STATIC: movq    %rax, lptr
2436 ; LINUX-64-STATIC: ret
2437
2438 ; LINUX-32-STATIC: ind07:
2439 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2440 ; LINUX-32-STATIC-NEXT:         leal    ldst(,%eax,4), %eax
2441 ; LINUX-32-STATIC-NEXT:         movl    %eax, lptr
2442 ; LINUX-32-STATIC-NEXT:         ret
2443
2444 ; LINUX-32-PIC: ind07:
2445 ; LINUX-32-PIC:         movl    4(%esp), %eax
2446 ; LINUX-32-PIC-NEXT:    leal    ldst(,%eax,4), %eax
2447 ; LINUX-32-PIC-NEXT:    movl    %eax, lptr
2448 ; LINUX-32-PIC-NEXT:    ret
2449
2450 ; LINUX-64-PIC: ind07:
2451 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
2452 ; LINUX-64-PIC-NEXT:    leaq    (%rax,%rdi,4), %rax
2453 ; LINUX-64-PIC-NEXT:    movq    %rax, lptr(%rip)
2454 ; LINUX-64-PIC-NEXT:    ret
2455
2456 ; DARWIN-32-STATIC: _ind07:
2457 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2458 ; DARWIN-32-STATIC-NEXT:        leal    _ldst(,%eax,4), %eax
2459 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _lptr
2460 ; DARWIN-32-STATIC-NEXT:        ret
2461
2462 ; DARWIN-32-DYNAMIC: _ind07:
2463 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2464 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst(,%eax,4), %eax
2465 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _lptr
2466 ; DARWIN-32-DYNAMIC-NEXT:       ret
2467
2468 ; DARWIN-32-PIC: _ind07:
2469 ; DARWIN-32-PIC:        call    "L35$pb"
2470 ; DARWIN-32-PIC-NEXT: "L35$pb":
2471 ; DARWIN-32-PIC-NEXT:   popl    %eax
2472 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2473 ; DARWIN-32-PIC-NEXT:   leal    _ldst-"L35$pb"(%eax,%ecx,4), %ecx
2474 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-"L35$pb"(%eax)
2475 ; DARWIN-32-PIC-NEXT:   ret
2476
2477 ; DARWIN-64-STATIC: _ind07:
2478 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
2479 ; DARWIN-64-STATIC-NEXT:        leaq    (%rax,%rdi,4), %rax
2480 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _lptr(%rip)
2481 ; DARWIN-64-STATIC-NEXT:        ret
2482
2483 ; DARWIN-64-DYNAMIC: _ind07:
2484 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
2485 ; DARWIN-64-DYNAMIC-NEXT:       leaq    (%rax,%rdi,4), %rax
2486 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _lptr(%rip)
2487 ; DARWIN-64-DYNAMIC-NEXT:       ret
2488
2489 ; DARWIN-64-PIC: _ind07:
2490 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
2491 ; DARWIN-64-PIC-NEXT:   leaq    (%rax,%rdi,4), %rax
2492 ; DARWIN-64-PIC-NEXT:   movq    %rax, _lptr(%rip)
2493 ; DARWIN-64-PIC-NEXT:   ret
2494 }
2495
2496 define void @ind08(i64 %i) nounwind {
2497 entry:
2498         %0 = load i32** @lptr, align 8
2499         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2500         %2 = load i32* %1, align 4
2501         %3 = getelementptr i32* %0, i64 %i
2502         store i32 %2, i32* %3, align 4
2503         ret void
2504 ; LINUX-64-STATIC: ind08:
2505 ; LINUX-64-STATIC: movl    lsrc(,%rdi,4), %eax
2506 ; LINUX-64-STATIC: movq    lptr(%rip), %rcx
2507 ; LINUX-64-STATIC: movl    %eax, (%rcx,%rdi,4)
2508 ; LINUX-64-STATIC: ret
2509
2510 ; LINUX-32-STATIC: ind08:
2511 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2512 ; LINUX-32-STATIC-NEXT:         movl    lsrc(,%eax,4), %ecx
2513 ; LINUX-32-STATIC-NEXT:         movl    lptr, %edx
2514 ; LINUX-32-STATIC-NEXT:         movl    %ecx, (%edx,%eax,4)
2515 ; LINUX-32-STATIC-NEXT:         ret
2516
2517 ; LINUX-32-PIC: ind08:
2518 ; LINUX-32-PIC:         movl    4(%esp), %eax
2519 ; LINUX-32-PIC-NEXT:    movl    lsrc(,%eax,4), %ecx
2520 ; LINUX-32-PIC-NEXT:    movl    lptr, %edx
2521 ; LINUX-32-PIC-NEXT:    movl    %ecx, (%edx,%eax,4)
2522 ; LINUX-32-PIC-NEXT:    ret
2523
2524 ; LINUX-64-PIC: ind08:
2525 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
2526 ; LINUX-64-PIC-NEXT:    movl    (%rax,%rdi,4), %eax
2527 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), %rcx
2528 ; LINUX-64-PIC-NEXT:    movl    %eax, (%rcx,%rdi,4)
2529 ; LINUX-64-PIC-NEXT:    ret
2530
2531 ; DARWIN-32-STATIC: _ind08:
2532 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2533 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc(,%eax,4), %ecx
2534 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, %edx
2535 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, (%edx,%eax,4)
2536 ; DARWIN-32-STATIC-NEXT:        ret
2537
2538 ; DARWIN-32-DYNAMIC: _ind08:
2539 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2540 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc(,%eax,4), %ecx
2541 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, %edx
2542 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, (%edx,%eax,4)
2543 ; DARWIN-32-DYNAMIC-NEXT:       ret
2544
2545 ; DARWIN-32-PIC: _ind08:
2546 ; DARWIN-32-PIC:        call    "L36$pb"
2547 ; DARWIN-32-PIC-NEXT: "L36$pb":
2548 ; DARWIN-32-PIC-NEXT:   popl    %eax
2549 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2550 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-"L36$pb"(%eax,%ecx,4), %edx
2551 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L36$pb"(%eax), %eax
2552 ; DARWIN-32-PIC-NEXT:   movl    %edx, (%eax,%ecx,4)
2553 ; DARWIN-32-PIC-NEXT:   ret
2554
2555 ; DARWIN-64-STATIC: _ind08:
2556 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
2557 ; DARWIN-64-STATIC-NEXT:        movl    (%rax,%rdi,4), %eax
2558 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), %rcx
2559 ; DARWIN-64-STATIC-NEXT:        movl    %eax, (%rcx,%rdi,4)
2560 ; DARWIN-64-STATIC-NEXT:        ret
2561
2562 ; DARWIN-64-DYNAMIC: _ind08:
2563 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
2564 ; DARWIN-64-DYNAMIC-NEXT:       movl    (%rax,%rdi,4), %eax
2565 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), %rcx
2566 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, (%rcx,%rdi,4)
2567 ; DARWIN-64-DYNAMIC-NEXT:       ret
2568
2569 ; DARWIN-64-PIC: _ind08:
2570 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
2571 ; DARWIN-64-PIC-NEXT:   movl    (%rax,%rdi,4), %eax
2572 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), %rcx
2573 ; DARWIN-64-PIC-NEXT:   movl    %eax, (%rcx,%rdi,4)
2574 ; DARWIN-64-PIC-NEXT:   ret
2575 }
2576
2577 define void @off00(i64 %i) nounwind {
2578 entry:
2579         %0 = add i64 %i, 16
2580         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
2581         %2 = load i32* %1, align 4
2582         %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
2583         store i32 %2, i32* %3, align 4
2584         ret void
2585 ; LINUX-64-STATIC: off00:
2586 ; LINUX-64-STATIC: movl    src+64(,%rdi,4), %eax
2587 ; LINUX-64-STATIC: movl    %eax, dst+64(,%rdi,4)
2588 ; LINUX-64-STATIC: ret
2589
2590 ; LINUX-32-STATIC: off00:
2591 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2592 ; LINUX-32-STATIC-NEXT:         movl    src+64(,%eax,4), %ecx
2593 ; LINUX-32-STATIC-NEXT:         movl    %ecx, dst+64(,%eax,4)
2594 ; LINUX-32-STATIC-NEXT:         ret
2595
2596 ; LINUX-32-PIC: off00:
2597 ; LINUX-32-PIC:         movl    4(%esp), %eax
2598 ; LINUX-32-PIC-NEXT:    movl    src+64(,%eax,4), %ecx
2599 ; LINUX-32-PIC-NEXT:    movl    %ecx, dst+64(,%eax,4)
2600 ; LINUX-32-PIC-NEXT:    ret
2601
2602 ; LINUX-64-PIC: off00:
2603 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
2604 ; LINUX-64-PIC-NEXT:    movl    64(%rax,%rdi,4), %eax
2605 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), %rcx
2606 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx,%rdi,4)
2607 ; LINUX-64-PIC-NEXT:    ret
2608
2609 ; DARWIN-32-STATIC: _off00:
2610 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2611 ; DARWIN-32-STATIC-NEXT:        movl    _src+64(,%eax,4), %ecx
2612 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _dst+64(,%eax,4)
2613 ; DARWIN-32-STATIC-NEXT:        ret
2614
2615 ; DARWIN-32-DYNAMIC: _off00:
2616 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2617 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, %ecx
2618 ; DARWIN-32-DYNAMIC-NEXT:       movl    64(%ecx,%eax,4), %ecx
2619 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %edx
2620 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 64(%edx,%eax,4)
2621 ; DARWIN-32-DYNAMIC-NEXT:       ret
2622
2623 ; DARWIN-32-PIC: _off00:
2624 ; DARWIN-32-PIC:        call    "L37$pb"
2625 ; DARWIN-32-PIC-NEXT: "L37$pb":
2626 ; DARWIN-32-PIC-NEXT:   popl    %eax
2627 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2628 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L37$pb"(%eax), %edx
2629 ; DARWIN-32-PIC-NEXT:   movl    64(%edx,%ecx,4), %edx
2630 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L37$pb"(%eax), %eax
2631 ; DARWIN-32-PIC-NEXT:   movl    %edx, 64(%eax,%ecx,4)
2632 ; DARWIN-32-PIC-NEXT:   ret
2633
2634 ; DARWIN-64-STATIC: _off00:
2635 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
2636 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax,%rdi,4), %eax
2637 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), %rcx
2638 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx,%rdi,4)
2639 ; DARWIN-64-STATIC-NEXT:        ret
2640
2641 ; DARWIN-64-DYNAMIC: _off00:
2642 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
2643 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax,%rdi,4), %eax
2644 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), %rcx
2645 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx,%rdi,4)
2646 ; DARWIN-64-DYNAMIC-NEXT:       ret
2647
2648 ; DARWIN-64-PIC: _off00:
2649 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
2650 ; DARWIN-64-PIC-NEXT:   movl    64(%rax,%rdi,4), %eax
2651 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), %rcx
2652 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx,%rdi,4)
2653 ; DARWIN-64-PIC-NEXT:   ret
2654 }
2655
2656 define void @oxf00(i64 %i) nounwind {
2657 entry:
2658         %0 = add i64 %i, 16
2659         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
2660         %2 = load i32* %1, align 4
2661         %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
2662         store i32 %2, i32* %3, align 4
2663         ret void
2664 ; LINUX-64-STATIC: oxf00:
2665 ; LINUX-64-STATIC: movl    xsrc+64(,%rdi,4), %eax
2666 ; LINUX-64-STATIC: movl    %eax, xdst+64(,%rdi,4)
2667 ; LINUX-64-STATIC: ret
2668
2669 ; LINUX-32-STATIC: oxf00:
2670 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2671 ; LINUX-32-STATIC-NEXT:         movl    xsrc+64(,%eax,4), %ecx
2672 ; LINUX-32-STATIC-NEXT:         movl    %ecx, xdst+64(,%eax,4)
2673 ; LINUX-32-STATIC-NEXT:         ret
2674
2675 ; LINUX-32-PIC: oxf00:
2676 ; LINUX-32-PIC:         movl    4(%esp), %eax
2677 ; LINUX-32-PIC-NEXT:    movl    xsrc+64(,%eax,4), %ecx
2678 ; LINUX-32-PIC-NEXT:    movl    %ecx, xdst+64(,%eax,4)
2679 ; LINUX-32-PIC-NEXT:    ret
2680
2681 ; LINUX-64-PIC: oxf00:
2682 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
2683 ; LINUX-64-PIC-NEXT:    movl    64(%rax,%rdi,4), %eax
2684 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), %rcx
2685 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx,%rdi,4)
2686 ; LINUX-64-PIC-NEXT:    ret
2687
2688 ; DARWIN-32-STATIC: _oxf00:
2689 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2690 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc+64(,%eax,4), %ecx
2691 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _xdst+64(,%eax,4)
2692 ; DARWIN-32-STATIC-NEXT:        ret
2693
2694 ; DARWIN-32-DYNAMIC: _oxf00:
2695 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2696 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, %ecx
2697 ; DARWIN-32-DYNAMIC-NEXT:       movl    64(%ecx,%eax,4), %ecx
2698 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, %edx
2699 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 64(%edx,%eax,4)
2700 ; DARWIN-32-DYNAMIC-NEXT:       ret
2701
2702 ; DARWIN-32-PIC: _oxf00:
2703 ; DARWIN-32-PIC:        call    "L38$pb"
2704 ; DARWIN-32-PIC-NEXT: "L38$pb":
2705 ; DARWIN-32-PIC-NEXT:   popl    %eax
2706 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2707 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L38$pb"(%eax), %edx
2708 ; DARWIN-32-PIC-NEXT:   movl    64(%edx,%ecx,4), %edx
2709 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L38$pb"(%eax), %eax
2710 ; DARWIN-32-PIC-NEXT:   movl    %edx, 64(%eax,%ecx,4)
2711 ; DARWIN-32-PIC-NEXT:   ret
2712
2713 ; DARWIN-64-STATIC: _oxf00:
2714 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
2715 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax,%rdi,4), %eax
2716 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), %rcx
2717 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx,%rdi,4)
2718 ; DARWIN-64-STATIC-NEXT:        ret
2719
2720 ; DARWIN-64-DYNAMIC: _oxf00:
2721 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
2722 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax,%rdi,4), %eax
2723 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), %rcx
2724 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx,%rdi,4)
2725 ; DARWIN-64-DYNAMIC-NEXT:       ret
2726
2727 ; DARWIN-64-PIC: _oxf00:
2728 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
2729 ; DARWIN-64-PIC-NEXT:   movl    64(%rax,%rdi,4), %eax
2730 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), %rcx
2731 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx,%rdi,4)
2732 ; DARWIN-64-PIC-NEXT:   ret
2733 }
2734
2735 define void @off01(i64 %i) nounwind {
2736 entry:
2737         %.sum = add i64 %i, 16
2738         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
2739         store i32* %0, i32** @ptr, align 8
2740         ret void
2741 ; LINUX-64-STATIC: off01:
2742 ; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), %rax
2743 ; LINUX-64-STATIC: movq    %rax, ptr
2744 ; LINUX-64-STATIC: ret
2745
2746 ; LINUX-32-STATIC: off01:
2747 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2748 ; LINUX-32-STATIC-NEXT:         leal    dst+64(,%eax,4), %eax
2749 ; LINUX-32-STATIC-NEXT:         movl    %eax, ptr
2750 ; LINUX-32-STATIC-NEXT:         ret
2751
2752 ; LINUX-32-PIC: off01:
2753 ; LINUX-32-PIC:         movl    4(%esp), %eax
2754 ; LINUX-32-PIC-NEXT:    leal    dst+64(,%eax,4), %eax
2755 ; LINUX-32-PIC-NEXT:    movl    %eax, ptr
2756 ; LINUX-32-PIC-NEXT:    ret
2757
2758 ; LINUX-64-PIC: off01:
2759 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
2760 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
2761 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
2762 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
2763 ; LINUX-64-PIC-NEXT:    ret
2764
2765 ; DARWIN-32-STATIC: _off01:
2766 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2767 ; DARWIN-32-STATIC-NEXT:        leal    _dst+64(,%eax,4), %eax
2768 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ptr
2769 ; DARWIN-32-STATIC-NEXT:        ret
2770
2771 ; DARWIN-32-DYNAMIC: _off01:
2772 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2773 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %ecx
2774 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%ecx,%eax,4), %eax
2775 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
2776 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
2777 ; DARWIN-32-DYNAMIC-NEXT:       ret
2778
2779 ; DARWIN-32-PIC: _off01:
2780 ; DARWIN-32-PIC:        call    "L39$pb"
2781 ; DARWIN-32-PIC-NEXT: "L39$pb":
2782 ; DARWIN-32-PIC-NEXT:   popl    %eax
2783 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2784 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L39$pb"(%eax), %edx
2785 ; DARWIN-32-PIC-NEXT:   leal    64(%edx,%ecx,4), %ecx
2786 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L39$pb"(%eax), %eax
2787 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
2788 ; DARWIN-32-PIC-NEXT:   ret
2789
2790 ; DARWIN-64-STATIC: _off01:
2791 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
2792 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
2793 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
2794 ; DARWIN-64-STATIC-NEXT:        movq    %rax, (%rcx)
2795 ; DARWIN-64-STATIC-NEXT:        ret
2796
2797 ; DARWIN-64-DYNAMIC: _off01:
2798 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
2799 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
2800 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
2801 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, (%rcx)
2802 ; DARWIN-64-DYNAMIC-NEXT:       ret
2803
2804 ; DARWIN-64-PIC: _off01:
2805 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
2806 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
2807 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
2808 ; DARWIN-64-PIC-NEXT:   movq    %rax, (%rcx)
2809 ; DARWIN-64-PIC-NEXT:   ret
2810 }
2811
2812 define void @oxf01(i64 %i) nounwind {
2813 entry:
2814         %.sum = add i64 %i, 16
2815         %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum
2816         store i32* %0, i32** @ptr, align 8
2817         ret void
2818 ; LINUX-64-STATIC: oxf01:
2819 ; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), %rax
2820 ; LINUX-64-STATIC: movq    %rax, ptr
2821 ; LINUX-64-STATIC: ret
2822
2823 ; LINUX-32-STATIC: oxf01:
2824 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2825 ; LINUX-32-STATIC-NEXT:         leal    xdst+64(,%eax,4), %eax
2826 ; LINUX-32-STATIC-NEXT:         movl    %eax, ptr
2827 ; LINUX-32-STATIC-NEXT:         ret
2828
2829 ; LINUX-32-PIC: oxf01:
2830 ; LINUX-32-PIC:         movl    4(%esp), %eax
2831 ; LINUX-32-PIC-NEXT:    leal    xdst+64(,%eax,4), %eax
2832 ; LINUX-32-PIC-NEXT:    movl    %eax, ptr
2833 ; LINUX-32-PIC-NEXT:    ret
2834
2835 ; LINUX-64-PIC: oxf01:
2836 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
2837 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
2838 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
2839 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
2840 ; LINUX-64-PIC-NEXT:    ret
2841
2842 ; DARWIN-32-STATIC: _oxf01:
2843 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2844 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+64(,%eax,4), %eax
2845 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ptr
2846 ; DARWIN-32-STATIC-NEXT:        ret
2847
2848 ; DARWIN-32-DYNAMIC: _oxf01:
2849 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2850 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, %ecx
2851 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%ecx,%eax,4), %eax
2852 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
2853 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
2854 ; DARWIN-32-DYNAMIC-NEXT:       ret
2855
2856 ; DARWIN-32-PIC: _oxf01:
2857 ; DARWIN-32-PIC:        call    "L40$pb"
2858 ; DARWIN-32-PIC-NEXT: "L40$pb":
2859 ; DARWIN-32-PIC-NEXT:   popl    %eax
2860 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2861 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L40$pb"(%eax), %edx
2862 ; DARWIN-32-PIC-NEXT:   leal    64(%edx,%ecx,4), %ecx
2863 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L40$pb"(%eax), %eax
2864 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
2865 ; DARWIN-32-PIC-NEXT:   ret
2866
2867 ; DARWIN-64-STATIC: _oxf01:
2868 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
2869 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
2870 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
2871 ; DARWIN-64-STATIC-NEXT:        movq    %rax, (%rcx)
2872 ; DARWIN-64-STATIC-NEXT:        ret
2873
2874 ; DARWIN-64-DYNAMIC: _oxf01:
2875 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
2876 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
2877 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
2878 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, (%rcx)
2879 ; DARWIN-64-DYNAMIC-NEXT:       ret
2880
2881 ; DARWIN-64-PIC: _oxf01:
2882 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
2883 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
2884 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
2885 ; DARWIN-64-PIC-NEXT:   movq    %rax, (%rcx)
2886 ; DARWIN-64-PIC-NEXT:   ret
2887 }
2888
2889 define void @off02(i64 %i) nounwind {
2890 entry:
2891         %0 = load i32** @ptr, align 8
2892         %1 = add i64 %i, 16
2893         %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
2894         %3 = load i32* %2, align 4
2895         %4 = getelementptr i32* %0, i64 %1
2896         store i32 %3, i32* %4, align 4
2897         ret void
2898 ; LINUX-64-STATIC: off02:
2899 ; LINUX-64-STATIC: movl    src+64(,%rdi,4), %eax
2900 ; LINUX-64-STATIC: movq    ptr(%rip), %rcx
2901 ; LINUX-64-STATIC: movl    %eax, 64(%rcx,%rdi,4)
2902 ; LINUX-64-STATIC: ret
2903
2904 ; LINUX-32-STATIC: off02:
2905 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2906 ; LINUX-32-STATIC-NEXT:         movl    src+64(,%eax,4), %ecx
2907 ; LINUX-32-STATIC-NEXT:         movl    ptr, %edx
2908 ; LINUX-32-STATIC-NEXT:         movl    %ecx, 64(%edx,%eax,4)
2909 ; LINUX-32-STATIC-NEXT:         ret
2910
2911 ; LINUX-32-PIC: off02:
2912 ; LINUX-32-PIC:         movl    4(%esp), %eax
2913 ; LINUX-32-PIC-NEXT:    movl    src+64(,%eax,4), %ecx
2914 ; LINUX-32-PIC-NEXT:    movl    ptr, %edx
2915 ; LINUX-32-PIC-NEXT:    movl    %ecx, 64(%edx,%eax,4)
2916 ; LINUX-32-PIC-NEXT:    ret
2917
2918 ; LINUX-64-PIC: off02:
2919 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
2920 ; LINUX-64-PIC-NEXT:    movl    64(%rax,%rdi,4), %eax
2921 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
2922 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
2923 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx,%rdi,4)
2924 ; LINUX-64-PIC-NEXT:    ret
2925
2926 ; DARWIN-32-STATIC: _off02:
2927 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
2928 ; DARWIN-32-STATIC-NEXT:        movl    _src+64(,%eax,4), %ecx
2929 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %edx
2930 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, 64(%edx,%eax,4)
2931 ; DARWIN-32-STATIC-NEXT:        ret
2932
2933 ; DARWIN-32-DYNAMIC: _off02:
2934 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
2935 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, %ecx
2936 ; DARWIN-32-DYNAMIC-NEXT:       movl    64(%ecx,%eax,4), %ecx
2937 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %edx
2938 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%edx), %edx
2939 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 64(%edx,%eax,4)
2940 ; DARWIN-32-DYNAMIC-NEXT:       ret
2941
2942 ; DARWIN-32-PIC: _off02:
2943 ; DARWIN-32-PIC:        call    "L41$pb"
2944 ; DARWIN-32-PIC-NEXT: "L41$pb":
2945 ; DARWIN-32-PIC-NEXT:   popl    %eax
2946 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
2947 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L41$pb"(%eax), %edx
2948 ; DARWIN-32-PIC-NEXT:   movl    64(%edx,%ecx,4), %edx
2949 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L41$pb"(%eax), %eax
2950 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
2951 ; DARWIN-32-PIC-NEXT:   movl    %edx, 64(%eax,%ecx,4)
2952 ; DARWIN-32-PIC-NEXT:   ret
2953
2954 ; DARWIN-64-STATIC: _off02:
2955 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
2956 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax,%rdi,4), %eax
2957 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
2958 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
2959 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx,%rdi,4)
2960 ; DARWIN-64-STATIC-NEXT:        ret
2961
2962 ; DARWIN-64-DYNAMIC: _off02:
2963 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
2964 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax,%rdi,4), %eax
2965 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
2966 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
2967 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx,%rdi,4)
2968 ; DARWIN-64-DYNAMIC-NEXT:       ret
2969
2970 ; DARWIN-64-PIC: _off02:
2971 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
2972 ; DARWIN-64-PIC-NEXT:   movl    64(%rax,%rdi,4), %eax
2973 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
2974 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
2975 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx,%rdi,4)
2976 ; DARWIN-64-PIC-NEXT:   ret
2977 }
2978
2979 define void @oxf02(i64 %i) nounwind {
2980 entry:
2981         %0 = load i32** @ptr, align 8
2982         %1 = add i64 %i, 16
2983         %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1
2984         %3 = load i32* %2, align 4
2985         %4 = getelementptr i32* %0, i64 %1
2986         store i32 %3, i32* %4, align 4
2987         ret void
2988 ; LINUX-64-STATIC: oxf02:
2989 ; LINUX-64-STATIC: movl    xsrc+64(,%rdi,4), %eax
2990 ; LINUX-64-STATIC: movq    ptr(%rip), %rcx
2991 ; LINUX-64-STATIC: movl    %eax, 64(%rcx,%rdi,4)
2992 ; LINUX-64-STATIC: ret
2993
2994 ; LINUX-32-STATIC: oxf02:
2995 ; LINUX-32-STATIC:      movl    4(%esp), %eax
2996 ; LINUX-32-STATIC-NEXT:         movl    xsrc+64(,%eax,4), %ecx
2997 ; LINUX-32-STATIC-NEXT:         movl    ptr, %edx
2998 ; LINUX-32-STATIC-NEXT:         movl    %ecx, 64(%edx,%eax,4)
2999 ; LINUX-32-STATIC-NEXT:         ret
3000
3001 ; LINUX-32-PIC: oxf02:
3002 ; LINUX-32-PIC:         movl    4(%esp), %eax
3003 ; LINUX-32-PIC-NEXT:    movl    xsrc+64(,%eax,4), %ecx
3004 ; LINUX-32-PIC-NEXT:    movl    ptr, %edx
3005 ; LINUX-32-PIC-NEXT:    movl    %ecx, 64(%edx,%eax,4)
3006 ; LINUX-32-PIC-NEXT:    ret
3007
3008 ; LINUX-64-PIC: oxf02:
3009 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
3010 ; LINUX-64-PIC-NEXT:    movl    64(%rax,%rdi,4), %eax
3011 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
3012 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
3013 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx,%rdi,4)
3014 ; LINUX-64-PIC-NEXT:    ret
3015
3016 ; DARWIN-32-STATIC: _oxf02:
3017 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
3018 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc+64(,%eax,4), %ecx
3019 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %edx
3020 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, 64(%edx,%eax,4)
3021 ; DARWIN-32-STATIC-NEXT:        ret
3022
3023 ; DARWIN-32-DYNAMIC: _oxf02:
3024 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
3025 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, %ecx
3026 ; DARWIN-32-DYNAMIC-NEXT:       movl    64(%ecx,%eax,4), %ecx
3027 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %edx
3028 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%edx), %edx
3029 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 64(%edx,%eax,4)
3030 ; DARWIN-32-DYNAMIC-NEXT:       ret
3031
3032 ; DARWIN-32-PIC: _oxf02:
3033 ; DARWIN-32-PIC:        call    "L42$pb"
3034 ; DARWIN-32-PIC-NEXT: "L42$pb":
3035 ; DARWIN-32-PIC-NEXT:   popl    %eax
3036 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
3037 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L42$pb"(%eax), %edx
3038 ; DARWIN-32-PIC-NEXT:   movl    64(%edx,%ecx,4), %edx
3039 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L42$pb"(%eax), %eax
3040 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
3041 ; DARWIN-32-PIC-NEXT:   movl    %edx, 64(%eax,%ecx,4)
3042 ; DARWIN-32-PIC-NEXT:   ret
3043
3044 ; DARWIN-64-STATIC: _oxf02:
3045 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
3046 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax,%rdi,4), %eax
3047 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
3048 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
3049 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx,%rdi,4)
3050 ; DARWIN-64-STATIC-NEXT:        ret
3051
3052 ; DARWIN-64-DYNAMIC: _oxf02:
3053 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
3054 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax,%rdi,4), %eax
3055 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
3056 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
3057 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx,%rdi,4)
3058 ; DARWIN-64-DYNAMIC-NEXT:       ret
3059
3060 ; DARWIN-64-PIC: _oxf02:
3061 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
3062 ; DARWIN-64-PIC-NEXT:   movl    64(%rax,%rdi,4), %eax
3063 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
3064 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
3065 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx,%rdi,4)
3066 ; DARWIN-64-PIC-NEXT:   ret
3067 }
3068
3069 define void @off03(i64 %i) nounwind {
3070 entry:
3071         %0 = add i64 %i, 16
3072         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
3073         %2 = load i32* %1, align 4
3074         %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
3075         store i32 %2, i32* %3, align 4
3076         ret void
3077 ; LINUX-64-STATIC: off03:
3078 ; LINUX-64-STATIC: movl    dsrc+64(,%rdi,4), %eax
3079 ; LINUX-64-STATIC: movl    %eax, ddst+64(,%rdi,4)
3080 ; LINUX-64-STATIC: ret
3081
3082 ; LINUX-32-STATIC: off03:
3083 ; LINUX-32-STATIC:      movl    4(%esp), %eax
3084 ; LINUX-32-STATIC-NEXT:         movl    dsrc+64(,%eax,4), %ecx
3085 ; LINUX-32-STATIC-NEXT:         movl    %ecx, ddst+64(,%eax,4)
3086 ; LINUX-32-STATIC-NEXT:         ret
3087
3088 ; LINUX-32-PIC: off03:
3089 ; LINUX-32-PIC:         movl    4(%esp), %eax
3090 ; LINUX-32-PIC-NEXT:    movl    dsrc+64(,%eax,4), %ecx
3091 ; LINUX-32-PIC-NEXT:    movl    %ecx, ddst+64(,%eax,4)
3092 ; LINUX-32-PIC-NEXT:    ret
3093
3094 ; LINUX-64-PIC: off03:
3095 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
3096 ; LINUX-64-PIC-NEXT:    movl    64(%rax,%rdi,4), %eax
3097 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), %rcx
3098 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx,%rdi,4)
3099 ; LINUX-64-PIC-NEXT:    ret
3100
3101 ; DARWIN-32-STATIC: _off03:
3102 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
3103 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+64(,%eax,4), %ecx
3104 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _ddst+64(,%eax,4)
3105 ; DARWIN-32-STATIC-NEXT:        ret
3106
3107 ; DARWIN-32-DYNAMIC: _off03:
3108 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
3109 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+64(,%eax,4), %ecx
3110 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, _ddst+64(,%eax,4)
3111 ; DARWIN-32-DYNAMIC-NEXT:       ret
3112
3113 ; DARWIN-32-PIC: _off03:
3114 ; DARWIN-32-PIC:        call    "L43$pb"
3115 ; DARWIN-32-PIC-NEXT: "L43$pb":
3116 ; DARWIN-32-PIC-NEXT:   popl    %eax
3117 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
3118 ; DARWIN-32-PIC-NEXT:   movl    _dsrc+64-"L43$pb"(%eax,%ecx,4), %edx
3119 ; DARWIN-32-PIC-NEXT:   movl    %edx, _ddst+64-"L43$pb"(%eax,%ecx,4)
3120 ; DARWIN-32-PIC-NEXT:   ret
3121
3122 ; DARWIN-64-STATIC: _off03:
3123 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
3124 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax,%rdi,4), %eax
3125 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), %rcx
3126 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx,%rdi,4)
3127 ; DARWIN-64-STATIC-NEXT:        ret
3128
3129 ; DARWIN-64-DYNAMIC: _off03:
3130 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
3131 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax,%rdi,4), %eax
3132 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), %rcx
3133 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx,%rdi,4)
3134 ; DARWIN-64-DYNAMIC-NEXT:       ret
3135
3136 ; DARWIN-64-PIC: _off03:
3137 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
3138 ; DARWIN-64-PIC-NEXT:   movl    64(%rax,%rdi,4), %eax
3139 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), %rcx
3140 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx,%rdi,4)
3141 ; DARWIN-64-PIC-NEXT:   ret
3142 }
3143
3144 define void @off04(i64 %i) nounwind {
3145 entry:
3146         %.sum = add i64 %i, 16
3147         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
3148         store i32* %0, i32** @dptr, align 8
3149         ret void
3150 ; LINUX-64-STATIC: off04:
3151 ; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), %rax
3152 ; LINUX-64-STATIC: movq    %rax, dptr
3153 ; LINUX-64-STATIC: ret
3154
3155 ; LINUX-32-STATIC: off04:
3156 ; LINUX-32-STATIC:      movl    4(%esp), %eax
3157 ; LINUX-32-STATIC-NEXT:         leal    ddst+64(,%eax,4), %eax
3158 ; LINUX-32-STATIC-NEXT:         movl    %eax, dptr
3159 ; LINUX-32-STATIC-NEXT:         ret
3160
3161 ; LINUX-32-PIC: off04:
3162 ; LINUX-32-PIC:         movl    4(%esp), %eax
3163 ; LINUX-32-PIC-NEXT:    leal    ddst+64(,%eax,4), %eax
3164 ; LINUX-32-PIC-NEXT:    movl    %eax, dptr
3165 ; LINUX-32-PIC-NEXT:    ret
3166
3167 ; LINUX-64-PIC: off04:
3168 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
3169 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
3170 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
3171 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
3172 ; LINUX-64-PIC-NEXT:    ret
3173
3174 ; DARWIN-32-STATIC: _off04:
3175 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
3176 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+64(,%eax,4), %eax
3177 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _dptr
3178 ; DARWIN-32-STATIC-NEXT:        ret
3179
3180 ; DARWIN-32-DYNAMIC: _off04:
3181 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
3182 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+64(,%eax,4), %eax
3183 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _dptr
3184 ; DARWIN-32-DYNAMIC-NEXT:       ret
3185
3186 ; DARWIN-32-PIC: _off04:
3187 ; DARWIN-32-PIC:        call    "L44$pb"
3188 ; DARWIN-32-PIC-NEXT: "L44$pb":
3189 ; DARWIN-32-PIC-NEXT:   popl    %eax
3190 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
3191 ; DARWIN-32-PIC-NEXT:   leal    _ddst+64-"L44$pb"(%eax,%ecx,4), %ecx
3192 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-"L44$pb"(%eax)
3193 ; DARWIN-32-PIC-NEXT:   ret
3194
3195 ; DARWIN-64-STATIC: _off04:
3196 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
3197 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
3198 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _dptr(%rip)
3199 ; DARWIN-64-STATIC-NEXT:        ret
3200
3201 ; DARWIN-64-DYNAMIC: _off04:
3202 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
3203 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
3204 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _dptr(%rip)
3205 ; DARWIN-64-DYNAMIC-NEXT:       ret
3206
3207 ; DARWIN-64-PIC: _off04:
3208 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
3209 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
3210 ; DARWIN-64-PIC-NEXT:   movq    %rax, _dptr(%rip)
3211 ; DARWIN-64-PIC-NEXT:   ret
3212 }
3213
3214 define void @off05(i64 %i) nounwind {
3215 entry:
3216         %0 = load i32** @dptr, align 8
3217         %1 = add i64 %i, 16
3218         %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
3219         %3 = load i32* %2, align 4
3220         %4 = getelementptr i32* %0, i64 %1
3221         store i32 %3, i32* %4, align 4
3222         ret void
3223 ; LINUX-64-STATIC: off05:
3224 ; LINUX-64-STATIC: movl    dsrc+64(,%rdi,4), %eax
3225 ; LINUX-64-STATIC: movq    dptr(%rip), %rcx
3226 ; LINUX-64-STATIC: movl    %eax, 64(%rcx,%rdi,4)
3227 ; LINUX-64-STATIC: ret
3228
3229 ; LINUX-32-STATIC: off05:
3230 ; LINUX-32-STATIC:      movl    4(%esp), %eax
3231 ; LINUX-32-STATIC-NEXT:         movl    dsrc+64(,%eax,4), %ecx
3232 ; LINUX-32-STATIC-NEXT:         movl    dptr, %edx
3233 ; LINUX-32-STATIC-NEXT:         movl    %ecx, 64(%edx,%eax,4)
3234 ; LINUX-32-STATIC-NEXT:         ret
3235
3236 ; LINUX-32-PIC: off05:
3237 ; LINUX-32-PIC:         movl    4(%esp), %eax
3238 ; LINUX-32-PIC-NEXT:    movl    dsrc+64(,%eax,4), %ecx
3239 ; LINUX-32-PIC-NEXT:    movl    dptr, %edx
3240 ; LINUX-32-PIC-NEXT:    movl    %ecx, 64(%edx,%eax,4)
3241 ; LINUX-32-PIC-NEXT:    ret
3242
3243 ; LINUX-64-PIC: off05:
3244 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
3245 ; LINUX-64-PIC-NEXT:    movl    64(%rax,%rdi,4), %eax
3246 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
3247 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
3248 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx,%rdi,4)
3249 ; LINUX-64-PIC-NEXT:    ret
3250
3251 ; DARWIN-32-STATIC: _off05:
3252 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
3253 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+64(,%eax,4), %ecx
3254 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, %edx
3255 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, 64(%edx,%eax,4)
3256 ; DARWIN-32-STATIC-NEXT:        ret
3257
3258 ; DARWIN-32-DYNAMIC: _off05:
3259 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
3260 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+64(,%eax,4), %ecx
3261 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, %edx
3262 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 64(%edx,%eax,4)
3263 ; DARWIN-32-DYNAMIC-NEXT:       ret
3264
3265 ; DARWIN-32-PIC: _off05:
3266 ; DARWIN-32-PIC:        call    "L45$pb"
3267 ; DARWIN-32-PIC-NEXT: "L45$pb":
3268 ; DARWIN-32-PIC-NEXT:   popl    %eax
3269 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
3270 ; DARWIN-32-PIC-NEXT:   movl    _dsrc+64-"L45$pb"(%eax,%ecx,4), %edx
3271 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L45$pb"(%eax), %eax
3272 ; DARWIN-32-PIC-NEXT:   movl    %edx, 64(%eax,%ecx,4)
3273 ; DARWIN-32-PIC-NEXT:   ret
3274
3275 ; DARWIN-64-STATIC: _off05:
3276 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
3277 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax,%rdi,4), %eax
3278 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), %rcx
3279 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx,%rdi,4)
3280 ; DARWIN-64-STATIC-NEXT:        ret
3281
3282 ; DARWIN-64-DYNAMIC: _off05:
3283 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
3284 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax,%rdi,4), %eax
3285 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), %rcx
3286 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx,%rdi,4)
3287 ; DARWIN-64-DYNAMIC-NEXT:       ret
3288
3289 ; DARWIN-64-PIC: _off05:
3290 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
3291 ; DARWIN-64-PIC-NEXT:   movl    64(%rax,%rdi,4), %eax
3292 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), %rcx
3293 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx,%rdi,4)
3294 ; DARWIN-64-PIC-NEXT:   ret
3295 }
3296
3297 define void @off06(i64 %i) nounwind {
3298 entry:
3299         %0 = add i64 %i, 16
3300         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
3301         %2 = load i32* %1, align 4
3302         %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
3303         store i32 %2, i32* %3, align 4
3304         ret void
3305 ; LINUX-64-STATIC: off06:
3306 ; LINUX-64-STATIC: movl    lsrc+64(,%rdi,4), %eax
3307 ; LINUX-64-STATIC: movl    %eax, ldst+64(,%rdi,4)
3308 ; LINUX-64-STATIC: ret
3309
3310 ; LINUX-32-STATIC: off06:
3311 ; LINUX-32-STATIC:      movl    4(%esp), %eax
3312 ; LINUX-32-STATIC-NEXT:         movl    lsrc+64(,%eax,4), %ecx
3313 ; LINUX-32-STATIC-NEXT:         movl    %ecx, ldst+64(,%eax,4)
3314 ; LINUX-32-STATIC-NEXT:         ret
3315
3316 ; LINUX-32-PIC: off06:
3317 ; LINUX-32-PIC:         movl    4(%esp), %eax
3318 ; LINUX-32-PIC-NEXT:    movl    lsrc+64(,%eax,4), %ecx
3319 ; LINUX-32-PIC-NEXT:    movl    %ecx, ldst+64(,%eax,4)
3320 ; LINUX-32-PIC-NEXT:    ret
3321
3322 ; LINUX-64-PIC: off06:
3323 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
3324 ; LINUX-64-PIC-NEXT:    movl    64(%rax,%rdi,4), %eax
3325 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), %rcx
3326 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx,%rdi,4)
3327 ; LINUX-64-PIC-NEXT:    ret
3328
3329 ; DARWIN-32-STATIC: _off06:
3330 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
3331 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+64(,%eax,4), %ecx
3332 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _ldst+64(,%eax,4)
3333 ; DARWIN-32-STATIC-NEXT:        ret
3334
3335 ; DARWIN-32-DYNAMIC: _off06:
3336 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
3337 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+64(,%eax,4), %ecx
3338 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, _ldst+64(,%eax,4)
3339 ; DARWIN-32-DYNAMIC-NEXT:       ret
3340
3341 ; DARWIN-32-PIC: _off06:
3342 ; DARWIN-32-PIC:        call    "L46$pb"
3343 ; DARWIN-32-PIC-NEXT: "L46$pb":
3344 ; DARWIN-32-PIC-NEXT:   popl    %eax
3345 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
3346 ; DARWIN-32-PIC-NEXT:   movl    _lsrc+64-"L46$pb"(%eax,%ecx,4), %edx
3347 ; DARWIN-32-PIC-NEXT:   movl    %edx, _ldst+64-"L46$pb"(%eax,%ecx,4)
3348 ; DARWIN-32-PIC-NEXT:   ret
3349
3350 ; DARWIN-64-STATIC: _off06:
3351 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
3352 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax,%rdi,4), %eax
3353 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), %rcx
3354 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx,%rdi,4)
3355 ; DARWIN-64-STATIC-NEXT:        ret
3356
3357 ; DARWIN-64-DYNAMIC: _off06:
3358 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
3359 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax,%rdi,4), %eax
3360 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), %rcx
3361 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx,%rdi,4)
3362 ; DARWIN-64-DYNAMIC-NEXT:       ret
3363
3364 ; DARWIN-64-PIC: _off06:
3365 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
3366 ; DARWIN-64-PIC-NEXT:   movl    64(%rax,%rdi,4), %eax
3367 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), %rcx
3368 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx,%rdi,4)
3369 ; DARWIN-64-PIC-NEXT:   ret
3370 }
3371
3372 define void @off07(i64 %i) nounwind {
3373 entry:
3374         %.sum = add i64 %i, 16
3375         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
3376         store i32* %0, i32** @lptr, align 8
3377         ret void
3378 ; LINUX-64-STATIC: off07:
3379 ; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), %rax
3380 ; LINUX-64-STATIC: movq    %rax, lptr
3381 ; LINUX-64-STATIC: ret
3382
3383 ; LINUX-32-STATIC: off07:
3384 ; LINUX-32-STATIC:      movl    4(%esp), %eax
3385 ; LINUX-32-STATIC-NEXT:         leal    ldst+64(,%eax,4), %eax
3386 ; LINUX-32-STATIC-NEXT:         movl    %eax, lptr
3387 ; LINUX-32-STATIC-NEXT:         ret
3388
3389 ; LINUX-32-PIC: off07:
3390 ; LINUX-32-PIC:         movl    4(%esp), %eax
3391 ; LINUX-32-PIC-NEXT:    leal    ldst+64(,%eax,4), %eax
3392 ; LINUX-32-PIC-NEXT:    movl    %eax, lptr
3393 ; LINUX-32-PIC-NEXT:    ret
3394
3395 ; LINUX-64-PIC: off07:
3396 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
3397 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
3398 ; LINUX-64-PIC-NEXT:    movq    %rax, lptr(%rip)
3399 ; LINUX-64-PIC-NEXT:    ret
3400
3401 ; DARWIN-32-STATIC: _off07:
3402 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
3403 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+64(,%eax,4), %eax
3404 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _lptr
3405 ; DARWIN-32-STATIC-NEXT:        ret
3406
3407 ; DARWIN-32-DYNAMIC: _off07:
3408 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
3409 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+64(,%eax,4), %eax
3410 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _lptr
3411 ; DARWIN-32-DYNAMIC-NEXT:       ret
3412
3413 ; DARWIN-32-PIC: _off07:
3414 ; DARWIN-32-PIC:        call    "L47$pb"
3415 ; DARWIN-32-PIC-NEXT: "L47$pb":
3416 ; DARWIN-32-PIC-NEXT:   popl    %eax
3417 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
3418 ; DARWIN-32-PIC-NEXT:   leal    _ldst+64-"L47$pb"(%eax,%ecx,4), %ecx
3419 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-"L47$pb"(%eax)
3420 ; DARWIN-32-PIC-NEXT:   ret
3421
3422 ; DARWIN-64-STATIC: _off07:
3423 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
3424 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
3425 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _lptr(%rip)
3426 ; DARWIN-64-STATIC-NEXT:        ret
3427
3428 ; DARWIN-64-DYNAMIC: _off07:
3429 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
3430 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
3431 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _lptr(%rip)
3432 ; DARWIN-64-DYNAMIC-NEXT:       ret
3433
3434 ; DARWIN-64-PIC: _off07:
3435 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
3436 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
3437 ; DARWIN-64-PIC-NEXT:   movq    %rax, _lptr(%rip)
3438 ; DARWIN-64-PIC-NEXT:   ret
3439 }
3440
3441 define void @off08(i64 %i) nounwind {
3442 entry:
3443         %0 = load i32** @lptr, align 8
3444         %1 = add i64 %i, 16
3445         %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
3446         %3 = load i32* %2, align 4
3447         %4 = getelementptr i32* %0, i64 %1
3448         store i32 %3, i32* %4, align 4
3449         ret void
3450 ; LINUX-64-STATIC: off08:
3451 ; LINUX-64-STATIC: movl    lsrc+64(,%rdi,4), %eax
3452 ; LINUX-64-STATIC: movq    lptr(%rip), %rcx
3453 ; LINUX-64-STATIC: movl    %eax, 64(%rcx,%rdi,4)
3454 ; LINUX-64-STATIC: ret
3455
3456 ; LINUX-32-STATIC: off08:
3457 ; LINUX-32-STATIC:      movl    4(%esp), %eax
3458 ; LINUX-32-STATIC-NEXT:         movl    lsrc+64(,%eax,4), %ecx
3459 ; LINUX-32-STATIC-NEXT:         movl    lptr, %edx
3460 ; LINUX-32-STATIC-NEXT:         movl    %ecx, 64(%edx,%eax,4)
3461 ; LINUX-32-STATIC-NEXT:         ret
3462
3463 ; LINUX-32-PIC: off08:
3464 ; LINUX-32-PIC:         movl    4(%esp), %eax
3465 ; LINUX-32-PIC-NEXT:    movl    lsrc+64(,%eax,4), %ecx
3466 ; LINUX-32-PIC-NEXT:    movl    lptr, %edx
3467 ; LINUX-32-PIC-NEXT:    movl    %ecx, 64(%edx,%eax,4)
3468 ; LINUX-32-PIC-NEXT:    ret
3469
3470 ; LINUX-64-PIC: off08:
3471 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
3472 ; LINUX-64-PIC-NEXT:    movl    64(%rax,%rdi,4), %eax
3473 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), %rcx
3474 ; LINUX-64-PIC-NEXT:    movl    %eax, 64(%rcx,%rdi,4)
3475 ; LINUX-64-PIC-NEXT:    ret
3476
3477 ; DARWIN-32-STATIC: _off08:
3478 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
3479 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+64(,%eax,4), %ecx
3480 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, %edx
3481 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, 64(%edx,%eax,4)
3482 ; DARWIN-32-STATIC-NEXT:        ret
3483
3484 ; DARWIN-32-DYNAMIC: _off08:
3485 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
3486 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+64(,%eax,4), %ecx
3487 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, %edx
3488 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 64(%edx,%eax,4)
3489 ; DARWIN-32-DYNAMIC-NEXT:       ret
3490
3491 ; DARWIN-32-PIC: _off08:
3492 ; DARWIN-32-PIC:        call    "L48$pb"
3493 ; DARWIN-32-PIC-NEXT: "L48$pb":
3494 ; DARWIN-32-PIC-NEXT:   popl    %eax
3495 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
3496 ; DARWIN-32-PIC-NEXT:   movl    _lsrc+64-"L48$pb"(%eax,%ecx,4), %edx
3497 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L48$pb"(%eax), %eax
3498 ; DARWIN-32-PIC-NEXT:   movl    %edx, 64(%eax,%ecx,4)
3499 ; DARWIN-32-PIC-NEXT:   ret
3500
3501 ; DARWIN-64-STATIC: _off08:
3502 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
3503 ; DARWIN-64-STATIC-NEXT:        movl    64(%rax,%rdi,4), %eax
3504 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), %rcx
3505 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 64(%rcx,%rdi,4)
3506 ; DARWIN-64-STATIC-NEXT:        ret
3507
3508 ; DARWIN-64-DYNAMIC: _off08:
3509 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
3510 ; DARWIN-64-DYNAMIC-NEXT:       movl    64(%rax,%rdi,4), %eax
3511 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), %rcx
3512 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 64(%rcx,%rdi,4)
3513 ; DARWIN-64-DYNAMIC-NEXT:       ret
3514
3515 ; DARWIN-64-PIC: _off08:
3516 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
3517 ; DARWIN-64-PIC-NEXT:   movl    64(%rax,%rdi,4), %eax
3518 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), %rcx
3519 ; DARWIN-64-PIC-NEXT:   movl    %eax, 64(%rcx,%rdi,4)
3520 ; DARWIN-64-PIC-NEXT:   ret
3521 }
3522
3523 define void @moo00(i64 %i) nounwind {
3524 entry:
3525         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3526         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4
3527         ret void
3528 ; LINUX-64-STATIC: moo00:
3529 ; LINUX-64-STATIC: movl    src+262144(%rip), %eax
3530 ; LINUX-64-STATIC: movl    %eax, dst+262144(%rip)
3531 ; LINUX-64-STATIC: ret
3532
3533 ; LINUX-32-STATIC: moo00:
3534 ; LINUX-32-STATIC:      movl    src+262144, %eax
3535 ; LINUX-32-STATIC-NEXT:         movl    %eax, dst+262144
3536 ; LINUX-32-STATIC-NEXT:         ret
3537
3538 ; LINUX-32-PIC: moo00:
3539 ; LINUX-32-PIC:         movl    src+262144, %eax
3540 ; LINUX-32-PIC-NEXT:    movl    %eax, dst+262144
3541 ; LINUX-32-PIC-NEXT:    ret
3542
3543 ; LINUX-64-PIC: moo00:
3544 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
3545 ; LINUX-64-PIC-NEXT:    movl    262144(%rax), %eax
3546 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), %rcx
3547 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx)
3548 ; LINUX-64-PIC-NEXT:    ret
3549
3550 ; DARWIN-32-STATIC: _moo00:
3551 ; DARWIN-32-STATIC:     movl    _src+262144, %eax
3552 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _dst+262144
3553 ; DARWIN-32-STATIC-NEXT:        ret
3554
3555 ; DARWIN-32-DYNAMIC: _moo00:
3556 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
3557 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144(%eax), %eax
3558 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %ecx
3559 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 262144(%ecx)
3560 ; DARWIN-32-DYNAMIC-NEXT:       ret
3561
3562 ; DARWIN-32-PIC: _moo00:
3563 ; DARWIN-32-PIC:        call    "L49$pb"
3564 ; DARWIN-32-PIC-NEXT: "L49$pb":
3565 ; DARWIN-32-PIC-NEXT:   popl    %eax
3566 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L49$pb"(%eax), %ecx
3567 ; DARWIN-32-PIC-NEXT:   movl    262144(%ecx), %ecx
3568 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L49$pb"(%eax), %eax
3569 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 262144(%eax)
3570 ; DARWIN-32-PIC-NEXT:   ret
3571
3572 ; DARWIN-64-STATIC: _moo00:
3573 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
3574 ; DARWIN-64-STATIC-NEXT:        movl    262144(%rax), %eax
3575 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), %rcx
3576 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx)
3577 ; DARWIN-64-STATIC-NEXT:        ret
3578
3579 ; DARWIN-64-DYNAMIC: _moo00:
3580 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
3581 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144(%rax), %eax
3582 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), %rcx
3583 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx)
3584 ; DARWIN-64-DYNAMIC-NEXT:       ret
3585
3586 ; DARWIN-64-PIC: _moo00:
3587 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
3588 ; DARWIN-64-PIC-NEXT:   movl    262144(%rax), %eax
3589 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), %rcx
3590 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx)
3591 ; DARWIN-64-PIC-NEXT:   ret
3592 }
3593
3594 define void @moo01(i64 %i) nounwind {
3595 entry:
3596         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
3597         ret void
3598 ; LINUX-64-STATIC: moo01:
3599 ; LINUX-64-STATIC: movq    $dst+262144, ptr(%rip)
3600 ; LINUX-64-STATIC: ret
3601
3602 ; LINUX-32-STATIC: moo01:
3603 ; LINUX-32-STATIC:      movl    $dst+262144, ptr
3604 ; LINUX-32-STATIC-NEXT:         ret
3605
3606 ; LINUX-32-PIC: moo01:
3607 ; LINUX-32-PIC:         movl    $dst+262144, ptr
3608 ; LINUX-32-PIC-NEXT:    ret
3609
3610 ; LINUX-64-PIC: moo01:
3611 ; LINUX-64-PIC:         movl    $262144, %eax
3612 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), %rax
3613 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
3614 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
3615 ; LINUX-64-PIC-NEXT:    ret
3616
3617 ; DARWIN-32-STATIC: _moo01:
3618 ; DARWIN-32-STATIC:     movl    $_dst+262144, _ptr
3619 ; DARWIN-32-STATIC-NEXT:        ret
3620
3621 ; DARWIN-32-DYNAMIC: _moo01:
3622 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
3623 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, %eax
3624 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
3625 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
3626 ; DARWIN-32-DYNAMIC-NEXT:       ret
3627
3628 ; DARWIN-32-PIC: _moo01:
3629 ; DARWIN-32-PIC:        call    "L50$pb"
3630 ; DARWIN-32-PIC-NEXT: "L50$pb":
3631 ; DARWIN-32-PIC-NEXT:   popl    %eax
3632 ; DARWIN-32-PIC-NEXT:   movl    $262144, %ecx
3633 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-"L50$pb"(%eax), %ecx
3634 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L50$pb"(%eax), %eax
3635 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
3636 ; DARWIN-32-PIC-NEXT:   ret
3637
3638 ; DARWIN-64-STATIC: _moo01:
3639 ; DARWIN-64-STATIC:     movl    $262144, %eax
3640 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), %rax
3641 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
3642 ; DARWIN-64-STATIC-NEXT:        movq    %rax, (%rcx)
3643 ; DARWIN-64-STATIC-NEXT:        ret
3644
3645 ; DARWIN-64-DYNAMIC: _moo01:
3646 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
3647 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), %rax
3648 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
3649 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, (%rcx)
3650 ; DARWIN-64-DYNAMIC-NEXT:       ret
3651
3652 ; DARWIN-64-PIC: _moo01:
3653 ; DARWIN-64-PIC:        movl    $262144, %eax
3654 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), %rax
3655 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
3656 ; DARWIN-64-PIC-NEXT:   movq    %rax, (%rcx)
3657 ; DARWIN-64-PIC-NEXT:   ret
3658 }
3659
3660 define void @moo02(i64 %i) nounwind {
3661 entry:
3662         %0 = load i32** @ptr, align 8
3663         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3664         %2 = getelementptr i32* %0, i64 65536
3665         store i32 %1, i32* %2, align 4
3666         ret void
3667 ; LINUX-64-STATIC: moo02:
3668 ; LINUX-64-STATIC: movl    src+262144(%rip), %eax
3669 ; LINUX-64-STATIC: movq    ptr(%rip), %rcx
3670 ; LINUX-64-STATIC: movl    %eax, 262144(%rcx)
3671 ; LINUX-64-STATIC: ret
3672
3673 ; LINUX-32-STATIC: moo02:
3674 ; LINUX-32-STATIC:      movl    src+262144, %eax
3675 ; LINUX-32-STATIC-NEXT:         movl    ptr, %ecx
3676 ; LINUX-32-STATIC-NEXT:         movl    %eax, 262144(%ecx)
3677 ; LINUX-32-STATIC-NEXT:         ret
3678
3679 ; LINUX-32-PIC: moo02:
3680 ; LINUX-32-PIC:         movl    src+262144, %eax
3681 ; LINUX-32-PIC-NEXT:    movl    ptr, %ecx
3682 ; LINUX-32-PIC-NEXT:    movl    %eax, 262144(%ecx)
3683 ; LINUX-32-PIC-NEXT:    ret
3684
3685 ; LINUX-64-PIC: moo02:
3686 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
3687 ; LINUX-64-PIC-NEXT:    movl    262144(%rax), %eax
3688 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
3689 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
3690 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx)
3691 ; LINUX-64-PIC-NEXT:    ret
3692
3693 ; DARWIN-32-STATIC: _moo02:
3694 ; DARWIN-32-STATIC:     movl    _src+262144, %eax
3695 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %ecx
3696 ; DARWIN-32-STATIC-NEXT:        movl    %eax, 262144(%ecx)
3697 ; DARWIN-32-STATIC-NEXT:        ret
3698
3699 ; DARWIN-32-DYNAMIC: _moo02:
3700 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
3701 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144(%eax), %eax
3702 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
3703 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%ecx), %ecx
3704 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 262144(%ecx)
3705 ; DARWIN-32-DYNAMIC-NEXT:       ret
3706
3707 ; DARWIN-32-PIC: _moo02:
3708 ; DARWIN-32-PIC:        call    "L51$pb"
3709 ; DARWIN-32-PIC-NEXT: "L51$pb":
3710 ; DARWIN-32-PIC-NEXT:   popl    %eax
3711 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L51$pb"(%eax), %ecx
3712 ; DARWIN-32-PIC-NEXT:   movl    262144(%ecx), %ecx
3713 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L51$pb"(%eax), %eax
3714 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
3715 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 262144(%eax)
3716 ; DARWIN-32-PIC-NEXT:   ret
3717
3718 ; DARWIN-64-STATIC: _moo02:
3719 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
3720 ; DARWIN-64-STATIC-NEXT:        movl    262144(%rax), %eax
3721 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
3722 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
3723 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx)
3724 ; DARWIN-64-STATIC-NEXT:        ret
3725
3726 ; DARWIN-64-DYNAMIC: _moo02:
3727 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
3728 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144(%rax), %eax
3729 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
3730 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
3731 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx)
3732 ; DARWIN-64-DYNAMIC-NEXT:       ret
3733
3734 ; DARWIN-64-PIC: _moo02:
3735 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
3736 ; DARWIN-64-PIC-NEXT:   movl    262144(%rax), %eax
3737 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
3738 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
3739 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx)
3740 ; DARWIN-64-PIC-NEXT:   ret
3741 }
3742
3743 define void @moo03(i64 %i) nounwind {
3744 entry:
3745         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3746         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32
3747         ret void
3748 ; LINUX-64-STATIC: moo03:
3749 ; LINUX-64-STATIC: movl    dsrc+262144(%rip), %eax
3750 ; LINUX-64-STATIC: movl    %eax, ddst+262144(%rip)
3751 ; LINUX-64-STATIC: ret
3752
3753 ; LINUX-32-STATIC: moo03:
3754 ; LINUX-32-STATIC:      movl    dsrc+262144, %eax
3755 ; LINUX-32-STATIC-NEXT:         movl    %eax, ddst+262144
3756 ; LINUX-32-STATIC-NEXT:         ret
3757
3758 ; LINUX-32-PIC: moo03:
3759 ; LINUX-32-PIC:         movl    dsrc+262144, %eax
3760 ; LINUX-32-PIC-NEXT:    movl    %eax, ddst+262144
3761 ; LINUX-32-PIC-NEXT:    ret
3762
3763 ; LINUX-64-PIC: moo03:
3764 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
3765 ; LINUX-64-PIC-NEXT:    movl    262144(%rax), %eax
3766 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), %rcx
3767 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx)
3768 ; LINUX-64-PIC-NEXT:    ret
3769
3770 ; DARWIN-32-STATIC: _moo03:
3771 ; DARWIN-32-STATIC:     movl    _dsrc+262144, %eax
3772 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ddst+262144
3773 ; DARWIN-32-STATIC-NEXT:        ret
3774
3775 ; DARWIN-32-DYNAMIC: _moo03:
3776 ; DARWIN-32-DYNAMIC:    movl    _dsrc+262144, %eax
3777 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _ddst+262144
3778 ; DARWIN-32-DYNAMIC-NEXT:       ret
3779
3780 ; DARWIN-32-PIC: _moo03:
3781 ; DARWIN-32-PIC:        call    "L52$pb"
3782 ; DARWIN-32-PIC-NEXT: "L52$pb":
3783 ; DARWIN-32-PIC-NEXT:   popl    %eax
3784 ; DARWIN-32-PIC-NEXT:   movl    _dsrc+262144-"L52$pb"(%eax), %ecx
3785 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _ddst+262144-"L52$pb"(%eax)
3786 ; DARWIN-32-PIC-NEXT:   ret
3787
3788 ; DARWIN-64-STATIC: _moo03:
3789 ; DARWIN-64-STATIC:     movl    _dsrc+262144(%rip), %eax
3790 ; DARWIN-64-STATIC-NEXT:        movl    %eax, _ddst+262144(%rip)
3791 ; DARWIN-64-STATIC-NEXT:        ret
3792
3793 ; DARWIN-64-DYNAMIC: _moo03:
3794 ; DARWIN-64-DYNAMIC:    movl    _dsrc+262144(%rip), %eax
3795 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, _ddst+262144(%rip)
3796 ; DARWIN-64-DYNAMIC-NEXT:       ret
3797
3798 ; DARWIN-64-PIC: _moo03:
3799 ; DARWIN-64-PIC:        movl    _dsrc+262144(%rip), %eax
3800 ; DARWIN-64-PIC-NEXT:   movl    %eax, _ddst+262144(%rip)
3801 ; DARWIN-64-PIC-NEXT:   ret
3802 }
3803
3804 define void @moo04(i64 %i) nounwind {
3805 entry:
3806         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
3807         ret void
3808 ; LINUX-64-STATIC: moo04:
3809 ; LINUX-64-STATIC: movq    $ddst+262144, dptr
3810 ; LINUX-64-STATIC: ret
3811
3812 ; LINUX-32-STATIC: moo04:
3813 ; LINUX-32-STATIC:      movl    $ddst+262144, dptr
3814 ; LINUX-32-STATIC-NEXT:         ret
3815
3816 ; LINUX-32-PIC: moo04:
3817 ; LINUX-32-PIC:         movl    $ddst+262144, dptr
3818 ; LINUX-32-PIC-NEXT:    ret
3819
3820 ; LINUX-64-PIC: moo04:
3821 ; LINUX-64-PIC:         movl    $262144, %eax
3822 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), %rax
3823 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
3824 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
3825 ; LINUX-64-PIC-NEXT:    ret
3826
3827 ; DARWIN-32-STATIC: _moo04:
3828 ; DARWIN-32-STATIC:     movl    $_ddst+262144, _dptr
3829 ; DARWIN-32-STATIC-NEXT:        ret
3830
3831 ; DARWIN-32-DYNAMIC: _moo04:
3832 ; DARWIN-32-DYNAMIC:    movl    $_ddst+262144, _dptr
3833 ; DARWIN-32-DYNAMIC-NEXT:       ret
3834
3835 ; DARWIN-32-PIC: _moo04:
3836 ; DARWIN-32-PIC:        call    "L53$pb"
3837 ; DARWIN-32-PIC-NEXT: "L53$pb":
3838 ; DARWIN-32-PIC-NEXT:   popl    %eax
3839 ; DARWIN-32-PIC-NEXT:   leal    _ddst+262144-"L53$pb"(%eax), %ecx
3840 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-"L53$pb"(%eax)
3841 ; DARWIN-32-PIC-NEXT:   ret
3842
3843 ; DARWIN-64-STATIC: _moo04:
3844 ; DARWIN-64-STATIC:     leaq    _ddst+262144(%rip), %rax
3845 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _dptr(%rip)
3846 ; DARWIN-64-STATIC-NEXT:        ret
3847
3848 ; DARWIN-64-DYNAMIC: _moo04:
3849 ; DARWIN-64-DYNAMIC:    leaq    _ddst+262144(%rip), %rax
3850 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _dptr(%rip)
3851 ; DARWIN-64-DYNAMIC-NEXT:       ret
3852
3853 ; DARWIN-64-PIC: _moo04:
3854 ; DARWIN-64-PIC:        leaq    _ddst+262144(%rip), %rax
3855 ; DARWIN-64-PIC-NEXT:   movq    %rax, _dptr(%rip)
3856 ; DARWIN-64-PIC-NEXT:   ret
3857 }
3858
3859 define void @moo05(i64 %i) nounwind {
3860 entry:
3861         %0 = load i32** @dptr, align 8
3862         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3863         %2 = getelementptr i32* %0, i64 65536
3864         store i32 %1, i32* %2, align 4
3865         ret void
3866 ; LINUX-64-STATIC: moo05:
3867 ; LINUX-64-STATIC: movl    dsrc+262144(%rip), %eax
3868 ; LINUX-64-STATIC: movq    dptr(%rip), %rcx
3869 ; LINUX-64-STATIC: movl    %eax, 262144(%rcx)
3870 ; LINUX-64-STATIC: ret
3871
3872 ; LINUX-32-STATIC: moo05:
3873 ; LINUX-32-STATIC:      movl    dsrc+262144, %eax
3874 ; LINUX-32-STATIC-NEXT:         movl    dptr, %ecx
3875 ; LINUX-32-STATIC-NEXT:         movl    %eax, 262144(%ecx)
3876 ; LINUX-32-STATIC-NEXT:         ret
3877
3878 ; LINUX-32-PIC: moo05:
3879 ; LINUX-32-PIC:         movl    dsrc+262144, %eax
3880 ; LINUX-32-PIC-NEXT:    movl    dptr, %ecx
3881 ; LINUX-32-PIC-NEXT:    movl    %eax, 262144(%ecx)
3882 ; LINUX-32-PIC-NEXT:    ret
3883
3884 ; LINUX-64-PIC: moo05:
3885 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
3886 ; LINUX-64-PIC-NEXT:    movl    262144(%rax), %eax
3887 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
3888 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
3889 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx)
3890 ; LINUX-64-PIC-NEXT:    ret
3891
3892 ; DARWIN-32-STATIC: _moo05:
3893 ; DARWIN-32-STATIC:     movl    _dsrc+262144, %eax
3894 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, %ecx
3895 ; DARWIN-32-STATIC-NEXT:        movl    %eax, 262144(%ecx)
3896 ; DARWIN-32-STATIC-NEXT:        ret
3897
3898 ; DARWIN-32-DYNAMIC: _moo05:
3899 ; DARWIN-32-DYNAMIC:    movl    _dsrc+262144, %eax
3900 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, %ecx
3901 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 262144(%ecx)
3902 ; DARWIN-32-DYNAMIC-NEXT:       ret
3903
3904 ; DARWIN-32-PIC: _moo05:
3905 ; DARWIN-32-PIC:        call    "L54$pb"
3906 ; DARWIN-32-PIC-NEXT: "L54$pb":
3907 ; DARWIN-32-PIC-NEXT:   popl    %eax
3908 ; DARWIN-32-PIC-NEXT:   movl    _dsrc+262144-"L54$pb"(%eax), %ecx
3909 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L54$pb"(%eax), %eax
3910 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 262144(%eax)
3911 ; DARWIN-32-PIC-NEXT:   ret
3912
3913 ; DARWIN-64-STATIC: _moo05:
3914 ; DARWIN-64-STATIC:     movl    _dsrc+262144(%rip), %eax
3915 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), %rcx
3916 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx)
3917 ; DARWIN-64-STATIC-NEXT:        ret
3918
3919 ; DARWIN-64-DYNAMIC: _moo05:
3920 ; DARWIN-64-DYNAMIC:    movl    _dsrc+262144(%rip), %eax
3921 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), %rcx
3922 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx)
3923 ; DARWIN-64-DYNAMIC-NEXT:       ret
3924
3925 ; DARWIN-64-PIC: _moo05:
3926 ; DARWIN-64-PIC:        movl    _dsrc+262144(%rip), %eax
3927 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), %rcx
3928 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx)
3929 ; DARWIN-64-PIC-NEXT:   ret
3930 }
3931
3932 define void @moo06(i64 %i) nounwind {
3933 entry:
3934         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
3935         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4
3936         ret void
3937 ; LINUX-64-STATIC: moo06:
3938 ; LINUX-64-STATIC: movl    lsrc+262144(%rip), %eax
3939 ; LINUX-64-STATIC: movl    %eax, ldst+262144(%rip)
3940 ; LINUX-64-STATIC: ret
3941
3942 ; LINUX-32-STATIC: moo06:
3943 ; LINUX-32-STATIC:      movl    lsrc+262144, %eax
3944 ; LINUX-32-STATIC-NEXT:         movl    %eax, ldst+262144
3945 ; LINUX-32-STATIC-NEXT:         ret
3946
3947 ; LINUX-32-PIC: moo06:
3948 ; LINUX-32-PIC:         movl    lsrc+262144, %eax
3949 ; LINUX-32-PIC-NEXT:    movl    %eax, ldst+262144
3950 ; LINUX-32-PIC-NEXT:    ret
3951
3952 ; LINUX-64-PIC: moo06:
3953 ; LINUX-64-PIC:         movl    lsrc+262144(%rip), %eax
3954 ; LINUX-64-PIC-NEXT:    movl    %eax, ldst+262144(%rip)
3955 ; LINUX-64-PIC-NEXT:    ret
3956
3957 ; DARWIN-32-STATIC: _moo06:
3958 ; DARWIN-32-STATIC:     movl    _lsrc+262144, %eax
3959 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ldst+262144
3960 ; DARWIN-32-STATIC-NEXT:        ret
3961
3962 ; DARWIN-32-DYNAMIC: _moo06:
3963 ; DARWIN-32-DYNAMIC:    movl    _lsrc+262144, %eax
3964 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _ldst+262144
3965 ; DARWIN-32-DYNAMIC-NEXT:       ret
3966
3967 ; DARWIN-32-PIC: _moo06:
3968 ; DARWIN-32-PIC:        call    "L55$pb"
3969 ; DARWIN-32-PIC-NEXT: "L55$pb":
3970 ; DARWIN-32-PIC-NEXT:   popl    %eax
3971 ; DARWIN-32-PIC-NEXT:   movl    _lsrc+262144-"L55$pb"(%eax), %ecx
3972 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _ldst+262144-"L55$pb"(%eax)
3973 ; DARWIN-32-PIC-NEXT:   ret
3974
3975 ; DARWIN-64-STATIC: _moo06:
3976 ; DARWIN-64-STATIC:     movl    _lsrc+262144(%rip), %eax
3977 ; DARWIN-64-STATIC-NEXT:        movl    %eax, _ldst+262144(%rip)
3978 ; DARWIN-64-STATIC-NEXT:        ret
3979
3980 ; DARWIN-64-DYNAMIC: _moo06:
3981 ; DARWIN-64-DYNAMIC:    movl    _lsrc+262144(%rip), %eax
3982 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, _ldst+262144(%rip)
3983 ; DARWIN-64-DYNAMIC-NEXT:       ret
3984
3985 ; DARWIN-64-PIC: _moo06:
3986 ; DARWIN-64-PIC:        movl    _lsrc+262144(%rip), %eax
3987 ; DARWIN-64-PIC-NEXT:   movl    %eax, _ldst+262144(%rip)
3988 ; DARWIN-64-PIC-NEXT:   ret
3989 }
3990
3991 define void @moo07(i64 %i) nounwind {
3992 entry:
3993         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
3994         ret void
3995 ; LINUX-64-STATIC: moo07:
3996 ; LINUX-64-STATIC: movq    $ldst+262144, lptr
3997 ; LINUX-64-STATIC: ret
3998
3999 ; LINUX-32-STATIC: moo07:
4000 ; LINUX-32-STATIC:      movl    $ldst+262144, lptr
4001 ; LINUX-32-STATIC-NEXT:         ret
4002
4003 ; LINUX-32-PIC: moo07:
4004 ; LINUX-32-PIC:         movl    $ldst+262144, lptr
4005 ; LINUX-32-PIC-NEXT:    ret
4006
4007 ; LINUX-64-PIC: moo07:
4008 ; LINUX-64-PIC:         leaq    ldst+262144(%rip), %rax
4009 ; LINUX-64-PIC-NEXT:    movq    %rax, lptr(%rip)
4010 ; LINUX-64-PIC-NEXT:    ret
4011
4012 ; DARWIN-32-STATIC: _moo07:
4013 ; DARWIN-32-STATIC:     movl    $_ldst+262144, _lptr
4014 ; DARWIN-32-STATIC-NEXT:        ret
4015
4016 ; DARWIN-32-DYNAMIC: _moo07:
4017 ; DARWIN-32-DYNAMIC:    movl    $_ldst+262144, _lptr
4018 ; DARWIN-32-DYNAMIC-NEXT:       ret
4019
4020 ; DARWIN-32-PIC: _moo07:
4021 ; DARWIN-32-PIC:        call    "L56$pb"
4022 ; DARWIN-32-PIC-NEXT: "L56$pb":
4023 ; DARWIN-32-PIC-NEXT:   popl    %eax
4024 ; DARWIN-32-PIC-NEXT:   leal    _ldst+262144-"L56$pb"(%eax), %ecx
4025 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-"L56$pb"(%eax)
4026 ; DARWIN-32-PIC-NEXT:   ret
4027
4028 ; DARWIN-64-STATIC: _moo07:
4029 ; DARWIN-64-STATIC:     leaq    _ldst+262144(%rip), %rax
4030 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _lptr(%rip)
4031 ; DARWIN-64-STATIC-NEXT:        ret
4032
4033 ; DARWIN-64-DYNAMIC: _moo07:
4034 ; DARWIN-64-DYNAMIC:    leaq    _ldst+262144(%rip), %rax
4035 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _lptr(%rip)
4036 ; DARWIN-64-DYNAMIC-NEXT:       ret
4037
4038 ; DARWIN-64-PIC: _moo07:
4039 ; DARWIN-64-PIC:        leaq    _ldst+262144(%rip), %rax
4040 ; DARWIN-64-PIC-NEXT:   movq    %rax, _lptr(%rip)
4041 ; DARWIN-64-PIC-NEXT:   ret
4042 }
4043
4044 define void @moo08(i64 %i) nounwind {
4045 entry:
4046         %0 = load i32** @lptr, align 8
4047         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4048         %2 = getelementptr i32* %0, i64 65536
4049         store i32 %1, i32* %2, align 4
4050         ret void
4051 ; LINUX-64-STATIC: moo08:
4052 ; LINUX-64-STATIC: movl    lsrc+262144(%rip), %eax
4053 ; LINUX-64-STATIC: movq    lptr(%rip), %rcx
4054 ; LINUX-64-STATIC: movl    %eax, 262144(%rcx)
4055 ; LINUX-64-STATIC: ret
4056
4057 ; LINUX-32-STATIC: moo08:
4058 ; LINUX-32-STATIC:      movl    lsrc+262144, %eax
4059 ; LINUX-32-STATIC-NEXT:         movl    lptr, %ecx
4060 ; LINUX-32-STATIC-NEXT:         movl    %eax, 262144(%ecx)
4061 ; LINUX-32-STATIC-NEXT:         ret
4062
4063 ; LINUX-32-PIC: moo08:
4064 ; LINUX-32-PIC:         movl    lsrc+262144, %eax
4065 ; LINUX-32-PIC-NEXT:    movl    lptr, %ecx
4066 ; LINUX-32-PIC-NEXT:    movl    %eax, 262144(%ecx)
4067 ; LINUX-32-PIC-NEXT:    ret
4068
4069 ; LINUX-64-PIC: moo08:
4070 ; LINUX-64-PIC:         movl    lsrc+262144(%rip), %eax
4071 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), %rcx
4072 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx)
4073 ; LINUX-64-PIC-NEXT:    ret
4074
4075 ; DARWIN-32-STATIC: _moo08:
4076 ; DARWIN-32-STATIC:     movl    _lsrc+262144, %eax
4077 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, %ecx
4078 ; DARWIN-32-STATIC-NEXT:        movl    %eax, 262144(%ecx)
4079 ; DARWIN-32-STATIC-NEXT:        ret
4080
4081 ; DARWIN-32-DYNAMIC: _moo08:
4082 ; DARWIN-32-DYNAMIC:    movl    _lsrc+262144, %eax
4083 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, %ecx
4084 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, 262144(%ecx)
4085 ; DARWIN-32-DYNAMIC-NEXT:       ret
4086
4087 ; DARWIN-32-PIC: _moo08:
4088 ; DARWIN-32-PIC:        call    "L57$pb"
4089 ; DARWIN-32-PIC-NEXT: "L57$pb":
4090 ; DARWIN-32-PIC-NEXT:   popl    %eax
4091 ; DARWIN-32-PIC-NEXT:   movl    _lsrc+262144-"L57$pb"(%eax), %ecx
4092 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L57$pb"(%eax), %eax
4093 ; DARWIN-32-PIC-NEXT:   movl    %ecx, 262144(%eax)
4094 ; DARWIN-32-PIC-NEXT:   ret
4095
4096 ; DARWIN-64-STATIC: _moo08:
4097 ; DARWIN-64-STATIC:     movl    _lsrc+262144(%rip), %eax
4098 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), %rcx
4099 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx)
4100 ; DARWIN-64-STATIC-NEXT:        ret
4101
4102 ; DARWIN-64-DYNAMIC: _moo08:
4103 ; DARWIN-64-DYNAMIC:    movl    _lsrc+262144(%rip), %eax
4104 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), %rcx
4105 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx)
4106 ; DARWIN-64-DYNAMIC-NEXT:       ret
4107
4108 ; DARWIN-64-PIC: _moo08:
4109 ; DARWIN-64-PIC:        movl    _lsrc+262144(%rip), %eax
4110 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), %rcx
4111 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx)
4112 ; DARWIN-64-PIC-NEXT:   ret
4113 }
4114
4115 define void @big00(i64 %i) nounwind {
4116 entry:
4117         %0 = add i64 %i, 65536
4118         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
4119         %2 = load i32* %1, align 4
4120         %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
4121         store i32 %2, i32* %3, align 4
4122         ret void
4123 ; LINUX-64-STATIC: big00:
4124 ; LINUX-64-STATIC: movl    src+262144(,%rdi,4), %eax
4125 ; LINUX-64-STATIC: movl    %eax, dst+262144(,%rdi,4)
4126 ; LINUX-64-STATIC: ret
4127
4128 ; LINUX-32-STATIC: big00:
4129 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4130 ; LINUX-32-STATIC-NEXT:         movl    src+262144(,%eax,4), %ecx
4131 ; LINUX-32-STATIC-NEXT:         movl    %ecx, dst+262144(,%eax,4)
4132 ; LINUX-32-STATIC-NEXT:         ret
4133
4134 ; LINUX-32-PIC: big00:
4135 ; LINUX-32-PIC:         movl    4(%esp), %eax
4136 ; LINUX-32-PIC-NEXT:    movl    src+262144(,%eax,4), %ecx
4137 ; LINUX-32-PIC-NEXT:    movl    %ecx, dst+262144(,%eax,4)
4138 ; LINUX-32-PIC-NEXT:    ret
4139
4140 ; LINUX-64-PIC: big00:
4141 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
4142 ; LINUX-64-PIC-NEXT:    movl    262144(%rax,%rdi,4), %eax
4143 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), %rcx
4144 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx,%rdi,4)
4145 ; LINUX-64-PIC-NEXT:    ret
4146
4147 ; DARWIN-32-STATIC: _big00:
4148 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4149 ; DARWIN-32-STATIC-NEXT:        movl    _src+262144(,%eax,4), %ecx
4150 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _dst+262144(,%eax,4)
4151 ; DARWIN-32-STATIC-NEXT:        ret
4152
4153 ; DARWIN-32-DYNAMIC: _big00:
4154 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4155 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, %ecx
4156 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144(%ecx,%eax,4), %ecx
4157 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %edx
4158 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 262144(%edx,%eax,4)
4159 ; DARWIN-32-DYNAMIC-NEXT:       ret
4160
4161 ; DARWIN-32-PIC: _big00:
4162 ; DARWIN-32-PIC:        call    "L58$pb"
4163 ; DARWIN-32-PIC-NEXT: "L58$pb":
4164 ; DARWIN-32-PIC-NEXT:   popl    %eax
4165 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4166 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L58$pb"(%eax), %edx
4167 ; DARWIN-32-PIC-NEXT:   movl    262144(%edx,%ecx,4), %edx
4168 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L58$pb"(%eax), %eax
4169 ; DARWIN-32-PIC-NEXT:   movl    %edx, 262144(%eax,%ecx,4)
4170 ; DARWIN-32-PIC-NEXT:   ret
4171
4172 ; DARWIN-64-STATIC: _big00:
4173 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
4174 ; DARWIN-64-STATIC-NEXT:        movl    262144(%rax,%rdi,4), %eax
4175 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), %rcx
4176 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx,%rdi,4)
4177 ; DARWIN-64-STATIC-NEXT:        ret
4178
4179 ; DARWIN-64-DYNAMIC: _big00:
4180 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
4181 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144(%rax,%rdi,4), %eax
4182 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), %rcx
4183 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx,%rdi,4)
4184 ; DARWIN-64-DYNAMIC-NEXT:       ret
4185
4186 ; DARWIN-64-PIC: _big00:
4187 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
4188 ; DARWIN-64-PIC-NEXT:   movl    262144(%rax,%rdi,4), %eax
4189 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), %rcx
4190 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx,%rdi,4)
4191 ; DARWIN-64-PIC-NEXT:   ret
4192 }
4193
4194 define void @big01(i64 %i) nounwind {
4195 entry:
4196         %.sum = add i64 %i, 65536
4197         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
4198         store i32* %0, i32** @ptr, align 8
4199         ret void
4200 ; LINUX-64-STATIC: big01:
4201 ; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), %rax
4202 ; LINUX-64-STATIC: movq    %rax, ptr(%rip)
4203 ; LINUX-64-STATIC: ret
4204
4205 ; LINUX-32-STATIC: big01:
4206 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4207 ; LINUX-32-STATIC-NEXT:         leal    dst+262144(,%eax,4), %eax
4208 ; LINUX-32-STATIC-NEXT:         movl    %eax, ptr
4209 ; LINUX-32-STATIC-NEXT:         ret
4210
4211 ; LINUX-32-PIC: big01:
4212 ; LINUX-32-PIC:         movl    4(%esp), %eax
4213 ; LINUX-32-PIC-NEXT:    leal    dst+262144(,%eax,4), %eax
4214 ; LINUX-32-PIC-NEXT:    movl    %eax, ptr
4215 ; LINUX-32-PIC-NEXT:    ret
4216
4217 ; LINUX-64-PIC: big01:
4218 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
4219 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
4220 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
4221 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
4222 ; LINUX-64-PIC-NEXT:    ret
4223
4224 ; DARWIN-32-STATIC: _big01:
4225 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4226 ; DARWIN-32-STATIC-NEXT:        leal    _dst+262144(,%eax,4), %eax
4227 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _ptr
4228 ; DARWIN-32-STATIC-NEXT:        ret
4229
4230 ; DARWIN-32-DYNAMIC: _big01:
4231 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4232 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %ecx
4233 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144(%ecx,%eax,4), %eax
4234 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %ecx
4235 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, (%ecx)
4236 ; DARWIN-32-DYNAMIC-NEXT:       ret
4237
4238 ; DARWIN-32-PIC: _big01:
4239 ; DARWIN-32-PIC:        call    "L59$pb"
4240 ; DARWIN-32-PIC-NEXT: "L59$pb":
4241 ; DARWIN-32-PIC-NEXT:   popl    %eax
4242 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4243 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L59$pb"(%eax), %edx
4244 ; DARWIN-32-PIC-NEXT:   leal    262144(%edx,%ecx,4), %ecx
4245 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L59$pb"(%eax), %eax
4246 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (%eax)
4247 ; DARWIN-32-PIC-NEXT:   ret
4248
4249 ; DARWIN-64-STATIC: _big01:
4250 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
4251 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
4252 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
4253 ; DARWIN-64-STATIC-NEXT:        movq    %rax, (%rcx)
4254 ; DARWIN-64-STATIC-NEXT:        ret
4255
4256 ; DARWIN-64-DYNAMIC: _big01:
4257 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
4258 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
4259 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
4260 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, (%rcx)
4261 ; DARWIN-64-DYNAMIC-NEXT:       ret
4262
4263 ; DARWIN-64-PIC: _big01:
4264 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
4265 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
4266 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
4267 ; DARWIN-64-PIC-NEXT:   movq    %rax, (%rcx)
4268 ; DARWIN-64-PIC-NEXT:   ret
4269 }
4270
4271 define void @big02(i64 %i) nounwind {
4272 entry:
4273         %0 = load i32** @ptr, align 8
4274         %1 = add i64 %i, 65536
4275         %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
4276         %3 = load i32* %2, align 4
4277         %4 = getelementptr i32* %0, i64 %1
4278         store i32 %3, i32* %4, align 4
4279         ret void
4280 ; LINUX-64-STATIC: big02:
4281 ; LINUX-64-STATIC: movl    src+262144(,%rdi,4), %eax
4282 ; LINUX-64-STATIC: movq    ptr(%rip), %rcx
4283 ; LINUX-64-STATIC: movl    %eax, 262144(%rcx,%rdi,4)
4284 ; LINUX-64-STATIC: ret
4285
4286 ; LINUX-32-STATIC: big02:
4287 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4288 ; LINUX-32-STATIC-NEXT:         movl    src+262144(,%eax,4), %ecx
4289 ; LINUX-32-STATIC-NEXT:         movl    ptr, %edx
4290 ; LINUX-32-STATIC-NEXT:         movl    %ecx, 262144(%edx,%eax,4)
4291 ; LINUX-32-STATIC-NEXT:         ret
4292
4293 ; LINUX-32-PIC: big02:
4294 ; LINUX-32-PIC:         movl    4(%esp), %eax
4295 ; LINUX-32-PIC-NEXT:    movl    src+262144(,%eax,4), %ecx
4296 ; LINUX-32-PIC-NEXT:    movl    ptr, %edx
4297 ; LINUX-32-PIC-NEXT:    movl    %ecx, 262144(%edx,%eax,4)
4298 ; LINUX-32-PIC-NEXT:    ret
4299
4300 ; LINUX-64-PIC: big02:
4301 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
4302 ; LINUX-64-PIC-NEXT:    movl    262144(%rax,%rdi,4), %eax
4303 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), %rcx
4304 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
4305 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx,%rdi,4)
4306 ; LINUX-64-PIC-NEXT:    ret
4307
4308 ; DARWIN-32-STATIC: _big02:
4309 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4310 ; DARWIN-32-STATIC-NEXT:        movl    _src+262144(,%eax,4), %ecx
4311 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %edx
4312 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, 262144(%edx,%eax,4)
4313 ; DARWIN-32-STATIC-NEXT:        ret
4314
4315 ; DARWIN-32-DYNAMIC: _big02:
4316 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4317 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, %ecx
4318 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144(%ecx,%eax,4), %ecx
4319 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, %edx
4320 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%edx), %edx
4321 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 262144(%edx,%eax,4)
4322 ; DARWIN-32-DYNAMIC-NEXT:       ret
4323
4324 ; DARWIN-32-PIC: _big02:
4325 ; DARWIN-32-PIC:        call    "L60$pb"
4326 ; DARWIN-32-PIC-NEXT: "L60$pb":
4327 ; DARWIN-32-PIC-NEXT:   popl    %eax
4328 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4329 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L60$pb"(%eax), %edx
4330 ; DARWIN-32-PIC-NEXT:   movl    262144(%edx,%ecx,4), %edx
4331 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L60$pb"(%eax), %eax
4332 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
4333 ; DARWIN-32-PIC-NEXT:   movl    %edx, 262144(%eax,%ecx,4)
4334 ; DARWIN-32-PIC-NEXT:   ret
4335
4336 ; DARWIN-64-STATIC: _big02:
4337 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
4338 ; DARWIN-64-STATIC-NEXT:        movl    262144(%rax,%rdi,4), %eax
4339 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), %rcx
4340 ; DARWIN-64-STATIC-NEXT:        movq    (%rcx), %rcx
4341 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx,%rdi,4)
4342 ; DARWIN-64-STATIC-NEXT:        ret
4343
4344 ; DARWIN-64-DYNAMIC: _big02:
4345 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
4346 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144(%rax,%rdi,4), %eax
4347 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), %rcx
4348 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rcx), %rcx
4349 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx,%rdi,4)
4350 ; DARWIN-64-DYNAMIC-NEXT:       ret
4351
4352 ; DARWIN-64-PIC: _big02:
4353 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
4354 ; DARWIN-64-PIC-NEXT:   movl    262144(%rax,%rdi,4), %eax
4355 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), %rcx
4356 ; DARWIN-64-PIC-NEXT:   movq    (%rcx), %rcx
4357 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx,%rdi,4)
4358 ; DARWIN-64-PIC-NEXT:   ret
4359 }
4360
4361 define void @big03(i64 %i) nounwind {
4362 entry:
4363         %0 = add i64 %i, 65536
4364         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
4365         %2 = load i32* %1, align 4
4366         %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
4367         store i32 %2, i32* %3, align 4
4368         ret void
4369 ; LINUX-64-STATIC: big03:
4370 ; LINUX-64-STATIC: movl    dsrc+262144(,%rdi,4), %eax
4371 ; LINUX-64-STATIC: movl    %eax, ddst+262144(,%rdi,4)
4372 ; LINUX-64-STATIC: ret
4373
4374 ; LINUX-32-STATIC: big03:
4375 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4376 ; LINUX-32-STATIC-NEXT:         movl    dsrc+262144(,%eax,4), %ecx
4377 ; LINUX-32-STATIC-NEXT:         movl    %ecx, ddst+262144(,%eax,4)
4378 ; LINUX-32-STATIC-NEXT:         ret
4379
4380 ; LINUX-32-PIC: big03:
4381 ; LINUX-32-PIC:         movl    4(%esp), %eax
4382 ; LINUX-32-PIC-NEXT:    movl    dsrc+262144(,%eax,4), %ecx
4383 ; LINUX-32-PIC-NEXT:    movl    %ecx, ddst+262144(,%eax,4)
4384 ; LINUX-32-PIC-NEXT:    ret
4385
4386 ; LINUX-64-PIC: big03:
4387 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
4388 ; LINUX-64-PIC-NEXT:    movl    262144(%rax,%rdi,4), %eax
4389 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), %rcx
4390 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx,%rdi,4)
4391 ; LINUX-64-PIC-NEXT:    ret
4392
4393 ; DARWIN-32-STATIC: _big03:
4394 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4395 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+262144(,%eax,4), %ecx
4396 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _ddst+262144(,%eax,4)
4397 ; DARWIN-32-STATIC-NEXT:        ret
4398
4399 ; DARWIN-32-DYNAMIC: _big03:
4400 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4401 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+262144(,%eax,4), %ecx
4402 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, _ddst+262144(,%eax,4)
4403 ; DARWIN-32-DYNAMIC-NEXT:       ret
4404
4405 ; DARWIN-32-PIC: _big03:
4406 ; DARWIN-32-PIC:        call    "L61$pb"
4407 ; DARWIN-32-PIC-NEXT: "L61$pb":
4408 ; DARWIN-32-PIC-NEXT:   popl    %eax
4409 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4410 ; DARWIN-32-PIC-NEXT:   movl    _dsrc+262144-"L61$pb"(%eax,%ecx,4), %edx
4411 ; DARWIN-32-PIC-NEXT:   movl    %edx, _ddst+262144-"L61$pb"(%eax,%ecx,4)
4412 ; DARWIN-32-PIC-NEXT:   ret
4413
4414 ; DARWIN-64-STATIC: _big03:
4415 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
4416 ; DARWIN-64-STATIC-NEXT:        movl    262144(%rax,%rdi,4), %eax
4417 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), %rcx
4418 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx,%rdi,4)
4419 ; DARWIN-64-STATIC-NEXT:        ret
4420
4421 ; DARWIN-64-DYNAMIC: _big03:
4422 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
4423 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144(%rax,%rdi,4), %eax
4424 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), %rcx
4425 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx,%rdi,4)
4426 ; DARWIN-64-DYNAMIC-NEXT:       ret
4427
4428 ; DARWIN-64-PIC: _big03:
4429 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
4430 ; DARWIN-64-PIC-NEXT:   movl    262144(%rax,%rdi,4), %eax
4431 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), %rcx
4432 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx,%rdi,4)
4433 ; DARWIN-64-PIC-NEXT:   ret
4434 }
4435
4436 define void @big04(i64 %i) nounwind {
4437 entry:
4438         %.sum = add i64 %i, 65536
4439         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
4440         store i32* %0, i32** @dptr, align 8
4441         ret void
4442 ; LINUX-64-STATIC: big04:
4443 ; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), %rax
4444 ; LINUX-64-STATIC: movq    %rax, dptr
4445 ; LINUX-64-STATIC: ret
4446
4447 ; LINUX-32-STATIC: big04:
4448 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4449 ; LINUX-32-STATIC-NEXT:         leal    ddst+262144(,%eax,4), %eax
4450 ; LINUX-32-STATIC-NEXT:         movl    %eax, dptr
4451 ; LINUX-32-STATIC-NEXT:         ret
4452
4453 ; LINUX-32-PIC: big04:
4454 ; LINUX-32-PIC:         movl    4(%esp), %eax
4455 ; LINUX-32-PIC-NEXT:    leal    ddst+262144(,%eax,4), %eax
4456 ; LINUX-32-PIC-NEXT:    movl    %eax, dptr
4457 ; LINUX-32-PIC-NEXT:    ret
4458
4459 ; LINUX-64-PIC: big04:
4460 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
4461 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
4462 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
4463 ; LINUX-64-PIC-NEXT:    movq    %rax, (%rcx)
4464 ; LINUX-64-PIC-NEXT:    ret
4465
4466 ; DARWIN-32-STATIC: _big04:
4467 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4468 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+262144(,%eax,4), %eax
4469 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _dptr
4470 ; DARWIN-32-STATIC-NEXT:        ret
4471
4472 ; DARWIN-32-DYNAMIC: _big04:
4473 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4474 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+262144(,%eax,4), %eax
4475 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _dptr
4476 ; DARWIN-32-DYNAMIC-NEXT:       ret
4477
4478 ; DARWIN-32-PIC: _big04:
4479 ; DARWIN-32-PIC:        call    "L62$pb"
4480 ; DARWIN-32-PIC-NEXT: "L62$pb":
4481 ; DARWIN-32-PIC-NEXT:   popl    %eax
4482 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4483 ; DARWIN-32-PIC-NEXT:   leal    _ddst+262144-"L62$pb"(%eax,%ecx,4), %ecx
4484 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-"L62$pb"(%eax)
4485 ; DARWIN-32-PIC-NEXT:   ret
4486
4487 ; DARWIN-64-STATIC: _big04:
4488 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
4489 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
4490 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _dptr(%rip)
4491 ; DARWIN-64-STATIC-NEXT:        ret
4492
4493 ; DARWIN-64-DYNAMIC: _big04:
4494 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
4495 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
4496 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _dptr(%rip)
4497 ; DARWIN-64-DYNAMIC-NEXT:       ret
4498
4499 ; DARWIN-64-PIC: _big04:
4500 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
4501 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
4502 ; DARWIN-64-PIC-NEXT:   movq    %rax, _dptr(%rip)
4503 ; DARWIN-64-PIC-NEXT:   ret
4504 }
4505
4506 define void @big05(i64 %i) nounwind {
4507 entry:
4508         %0 = load i32** @dptr, align 8
4509         %1 = add i64 %i, 65536
4510         %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
4511         %3 = load i32* %2, align 4
4512         %4 = getelementptr i32* %0, i64 %1
4513         store i32 %3, i32* %4, align 4
4514         ret void
4515 ; LINUX-64-STATIC: big05:
4516 ; LINUX-64-STATIC: movl    dsrc+262144(,%rdi,4), %eax
4517 ; LINUX-64-STATIC: movq    dptr(%rip), %rcx
4518 ; LINUX-64-STATIC: movl    %eax, 262144(%rcx,%rdi,4)
4519 ; LINUX-64-STATIC: ret
4520
4521 ; LINUX-32-STATIC: big05:
4522 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4523 ; LINUX-32-STATIC-NEXT:         movl    dsrc+262144(,%eax,4), %ecx
4524 ; LINUX-32-STATIC-NEXT:         movl    dptr, %edx
4525 ; LINUX-32-STATIC-NEXT:         movl    %ecx, 262144(%edx,%eax,4)
4526 ; LINUX-32-STATIC-NEXT:         ret
4527
4528 ; LINUX-32-PIC: big05:
4529 ; LINUX-32-PIC:         movl    4(%esp), %eax
4530 ; LINUX-32-PIC-NEXT:    movl    dsrc+262144(,%eax,4), %ecx
4531 ; LINUX-32-PIC-NEXT:    movl    dptr, %edx
4532 ; LINUX-32-PIC-NEXT:    movl    %ecx, 262144(%edx,%eax,4)
4533 ; LINUX-32-PIC-NEXT:    ret
4534
4535 ; LINUX-64-PIC: big05:
4536 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
4537 ; LINUX-64-PIC-NEXT:    movl    262144(%rax,%rdi,4), %eax
4538 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), %rcx
4539 ; LINUX-64-PIC-NEXT:    movq    (%rcx), %rcx
4540 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx,%rdi,4)
4541 ; LINUX-64-PIC-NEXT:    ret
4542
4543 ; DARWIN-32-STATIC: _big05:
4544 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4545 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+262144(,%eax,4), %ecx
4546 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, %edx
4547 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, 262144(%edx,%eax,4)
4548 ; DARWIN-32-STATIC-NEXT:        ret
4549
4550 ; DARWIN-32-DYNAMIC: _big05:
4551 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4552 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+262144(,%eax,4), %ecx
4553 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, %edx
4554 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 262144(%edx,%eax,4)
4555 ; DARWIN-32-DYNAMIC-NEXT:       ret
4556
4557 ; DARWIN-32-PIC: _big05:
4558 ; DARWIN-32-PIC:        call    "L63$pb"
4559 ; DARWIN-32-PIC-NEXT: "L63$pb":
4560 ; DARWIN-32-PIC-NEXT:   popl    %eax
4561 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4562 ; DARWIN-32-PIC-NEXT:   movl    _dsrc+262144-"L63$pb"(%eax,%ecx,4), %edx
4563 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L63$pb"(%eax), %eax
4564 ; DARWIN-32-PIC-NEXT:   movl    %edx, 262144(%eax,%ecx,4)
4565 ; DARWIN-32-PIC-NEXT:   ret
4566
4567 ; DARWIN-64-STATIC: _big05:
4568 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
4569 ; DARWIN-64-STATIC-NEXT:        movl    262144(%rax,%rdi,4), %eax
4570 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), %rcx
4571 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx,%rdi,4)
4572 ; DARWIN-64-STATIC-NEXT:        ret
4573
4574 ; DARWIN-64-DYNAMIC: _big05:
4575 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
4576 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144(%rax,%rdi,4), %eax
4577 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), %rcx
4578 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx,%rdi,4)
4579 ; DARWIN-64-DYNAMIC-NEXT:       ret
4580
4581 ; DARWIN-64-PIC: _big05:
4582 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
4583 ; DARWIN-64-PIC-NEXT:   movl    262144(%rax,%rdi,4), %eax
4584 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), %rcx
4585 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx,%rdi,4)
4586 ; DARWIN-64-PIC-NEXT:   ret
4587 }
4588
4589 define void @big06(i64 %i) nounwind {
4590 entry:
4591         %0 = add i64 %i, 65536
4592         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
4593         %2 = load i32* %1, align 4
4594         %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
4595         store i32 %2, i32* %3, align 4
4596         ret void
4597 ; LINUX-64-STATIC: big06:
4598 ; LINUX-64-STATIC: movl    lsrc+262144(,%rdi,4), %eax
4599 ; LINUX-64-STATIC: movl    %eax, ldst+262144(,%rdi,4)
4600 ; LINUX-64-STATIC: ret
4601
4602 ; LINUX-32-STATIC: big06:
4603 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4604 ; LINUX-32-STATIC-NEXT:         movl    lsrc+262144(,%eax,4), %ecx
4605 ; LINUX-32-STATIC-NEXT:         movl    %ecx, ldst+262144(,%eax,4)
4606 ; LINUX-32-STATIC-NEXT:         ret
4607
4608 ; LINUX-32-PIC: big06:
4609 ; LINUX-32-PIC:         movl    4(%esp), %eax
4610 ; LINUX-32-PIC-NEXT:    movl    lsrc+262144(,%eax,4), %ecx
4611 ; LINUX-32-PIC-NEXT:    movl    %ecx, ldst+262144(,%eax,4)
4612 ; LINUX-32-PIC-NEXT:    ret
4613
4614 ; LINUX-64-PIC: big06:
4615 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
4616 ; LINUX-64-PIC-NEXT:    movl    262144(%rax,%rdi,4), %eax
4617 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), %rcx
4618 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx,%rdi,4)
4619 ; LINUX-64-PIC-NEXT:    ret
4620
4621 ; DARWIN-32-STATIC: _big06:
4622 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4623 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+262144(,%eax,4), %ecx
4624 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, _ldst+262144(,%eax,4)
4625 ; DARWIN-32-STATIC-NEXT:        ret
4626
4627 ; DARWIN-32-DYNAMIC: _big06:
4628 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4629 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+262144(,%eax,4), %ecx
4630 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, _ldst+262144(,%eax,4)
4631 ; DARWIN-32-DYNAMIC-NEXT:       ret
4632
4633 ; DARWIN-32-PIC: _big06:
4634 ; DARWIN-32-PIC:        call    "L64$pb"
4635 ; DARWIN-32-PIC-NEXT: "L64$pb":
4636 ; DARWIN-32-PIC-NEXT:   popl    %eax
4637 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4638 ; DARWIN-32-PIC-NEXT:   movl    _lsrc+262144-"L64$pb"(%eax,%ecx,4), %edx
4639 ; DARWIN-32-PIC-NEXT:   movl    %edx, _ldst+262144-"L64$pb"(%eax,%ecx,4)
4640 ; DARWIN-32-PIC-NEXT:   ret
4641
4642 ; DARWIN-64-STATIC: _big06:
4643 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
4644 ; DARWIN-64-STATIC-NEXT:        movl    262144(%rax,%rdi,4), %eax
4645 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), %rcx
4646 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx,%rdi,4)
4647 ; DARWIN-64-STATIC-NEXT:        ret
4648
4649 ; DARWIN-64-DYNAMIC: _big06:
4650 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
4651 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144(%rax,%rdi,4), %eax
4652 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), %rcx
4653 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx,%rdi,4)
4654 ; DARWIN-64-DYNAMIC-NEXT:       ret
4655
4656 ; DARWIN-64-PIC: _big06:
4657 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
4658 ; DARWIN-64-PIC-NEXT:   movl    262144(%rax,%rdi,4), %eax
4659 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), %rcx
4660 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx,%rdi,4)
4661 ; DARWIN-64-PIC-NEXT:   ret
4662 }
4663
4664 define void @big07(i64 %i) nounwind {
4665 entry:
4666         %.sum = add i64 %i, 65536
4667         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
4668         store i32* %0, i32** @lptr, align 8
4669         ret void
4670 ; LINUX-64-STATIC: big07:
4671 ; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), %rax
4672 ; LINUX-64-STATIC: movq    %rax, lptr
4673 ; LINUX-64-STATIC: ret
4674
4675 ; LINUX-32-STATIC: big07:
4676 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4677 ; LINUX-32-STATIC-NEXT:         leal    ldst+262144(,%eax,4), %eax
4678 ; LINUX-32-STATIC-NEXT:         movl    %eax, lptr
4679 ; LINUX-32-STATIC-NEXT:         ret
4680
4681 ; LINUX-32-PIC: big07:
4682 ; LINUX-32-PIC:         movl    4(%esp), %eax
4683 ; LINUX-32-PIC-NEXT:    leal    ldst+262144(,%eax,4), %eax
4684 ; LINUX-32-PIC-NEXT:    movl    %eax, lptr
4685 ; LINUX-32-PIC-NEXT:    ret
4686
4687 ; LINUX-64-PIC: big07:
4688 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
4689 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
4690 ; LINUX-64-PIC-NEXT:    movq    %rax, lptr(%rip)
4691 ; LINUX-64-PIC-NEXT:    ret
4692
4693 ; DARWIN-32-STATIC: _big07:
4694 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4695 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+262144(,%eax,4), %eax
4696 ; DARWIN-32-STATIC-NEXT:        movl    %eax, _lptr
4697 ; DARWIN-32-STATIC-NEXT:        ret
4698
4699 ; DARWIN-32-DYNAMIC: _big07:
4700 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4701 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+262144(,%eax,4), %eax
4702 ; DARWIN-32-DYNAMIC-NEXT:       movl    %eax, _lptr
4703 ; DARWIN-32-DYNAMIC-NEXT:       ret
4704
4705 ; DARWIN-32-PIC: _big07:
4706 ; DARWIN-32-PIC:        call    "L65$pb"
4707 ; DARWIN-32-PIC-NEXT: "L65$pb":
4708 ; DARWIN-32-PIC-NEXT:   popl    %eax
4709 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4710 ; DARWIN-32-PIC-NEXT:   leal    _ldst+262144-"L65$pb"(%eax,%ecx,4), %ecx
4711 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-"L65$pb"(%eax)
4712 ; DARWIN-32-PIC-NEXT:   ret
4713
4714 ; DARWIN-64-STATIC: _big07:
4715 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
4716 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
4717 ; DARWIN-64-STATIC-NEXT:        movq    %rax, _lptr(%rip)
4718 ; DARWIN-64-STATIC-NEXT:        ret
4719
4720 ; DARWIN-64-DYNAMIC: _big07:
4721 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
4722 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
4723 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rax, _lptr(%rip)
4724 ; DARWIN-64-DYNAMIC-NEXT:       ret
4725
4726 ; DARWIN-64-PIC: _big07:
4727 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
4728 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
4729 ; DARWIN-64-PIC-NEXT:   movq    %rax, _lptr(%rip)
4730 ; DARWIN-64-PIC-NEXT:   ret
4731 }
4732
4733 define void @big08(i64 %i) nounwind {
4734 entry:
4735         %0 = load i32** @lptr, align 8
4736         %1 = add i64 %i, 65536
4737         %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
4738         %3 = load i32* %2, align 4
4739         %4 = getelementptr i32* %0, i64 %1
4740         store i32 %3, i32* %4, align 4
4741         ret void
4742 ; LINUX-64-STATIC: big08:
4743 ; LINUX-64-STATIC: movl    lsrc+262144(,%rdi,4), %eax
4744 ; LINUX-64-STATIC: movq    lptr(%rip), %rcx
4745 ; LINUX-64-STATIC: movl    %eax, 262144(%rcx,%rdi,4)
4746 ; LINUX-64-STATIC: ret
4747
4748 ; LINUX-32-STATIC: big08:
4749 ; LINUX-32-STATIC:      movl    4(%esp), %eax
4750 ; LINUX-32-STATIC-NEXT:         movl    lsrc+262144(,%eax,4), %ecx
4751 ; LINUX-32-STATIC-NEXT:         movl    lptr, %edx
4752 ; LINUX-32-STATIC-NEXT:         movl    %ecx, 262144(%edx,%eax,4)
4753 ; LINUX-32-STATIC-NEXT:         ret
4754
4755 ; LINUX-32-PIC: big08:
4756 ; LINUX-32-PIC:         movl    4(%esp), %eax
4757 ; LINUX-32-PIC-NEXT:    movl    lsrc+262144(,%eax,4), %ecx
4758 ; LINUX-32-PIC-NEXT:    movl    lptr, %edx
4759 ; LINUX-32-PIC-NEXT:    movl    %ecx, 262144(%edx,%eax,4)
4760 ; LINUX-32-PIC-NEXT:    ret
4761
4762 ; LINUX-64-PIC: big08:
4763 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
4764 ; LINUX-64-PIC-NEXT:    movl    262144(%rax,%rdi,4), %eax
4765 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), %rcx
4766 ; LINUX-64-PIC-NEXT:    movl    %eax, 262144(%rcx,%rdi,4)
4767 ; LINUX-64-PIC-NEXT:    ret
4768
4769 ; DARWIN-32-STATIC: _big08:
4770 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
4771 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+262144(,%eax,4), %ecx
4772 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, %edx
4773 ; DARWIN-32-STATIC-NEXT:        movl    %ecx, 262144(%edx,%eax,4)
4774 ; DARWIN-32-STATIC-NEXT:        ret
4775
4776 ; DARWIN-32-DYNAMIC: _big08:
4777 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
4778 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+262144(,%eax,4), %ecx
4779 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, %edx
4780 ; DARWIN-32-DYNAMIC-NEXT:       movl    %ecx, 262144(%edx,%eax,4)
4781 ; DARWIN-32-DYNAMIC-NEXT:       ret
4782
4783 ; DARWIN-32-PIC: _big08:
4784 ; DARWIN-32-PIC:        call    "L66$pb"
4785 ; DARWIN-32-PIC-NEXT: "L66$pb":
4786 ; DARWIN-32-PIC-NEXT:   popl    %eax
4787 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
4788 ; DARWIN-32-PIC-NEXT:   movl    _lsrc+262144-"L66$pb"(%eax,%ecx,4), %edx
4789 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L66$pb"(%eax), %eax
4790 ; DARWIN-32-PIC-NEXT:   movl    %edx, 262144(%eax,%ecx,4)
4791 ; DARWIN-32-PIC-NEXT:   ret
4792
4793 ; DARWIN-64-STATIC: _big08:
4794 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
4795 ; DARWIN-64-STATIC-NEXT:        movl    262144(%rax,%rdi,4), %eax
4796 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), %rcx
4797 ; DARWIN-64-STATIC-NEXT:        movl    %eax, 262144(%rcx,%rdi,4)
4798 ; DARWIN-64-STATIC-NEXT:        ret
4799
4800 ; DARWIN-64-DYNAMIC: _big08:
4801 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
4802 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144(%rax,%rdi,4), %eax
4803 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), %rcx
4804 ; DARWIN-64-DYNAMIC-NEXT:       movl    %eax, 262144(%rcx,%rdi,4)
4805 ; DARWIN-64-DYNAMIC-NEXT:       ret
4806
4807 ; DARWIN-64-PIC: _big08:
4808 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
4809 ; DARWIN-64-PIC-NEXT:   movl    262144(%rax,%rdi,4), %eax
4810 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), %rcx
4811 ; DARWIN-64-PIC-NEXT:   movl    %eax, 262144(%rcx,%rdi,4)
4812 ; DARWIN-64-PIC-NEXT:   ret
4813 }
4814
4815 define i8* @bar00() nounwind {
4816 entry:
4817         ret i8* bitcast ([131072 x i32]* @src to i8*)
4818 ; LINUX-64-STATIC: bar00:
4819 ; LINUX-64-STATIC: movl    $src, %eax
4820 ; LINUX-64-STATIC: ret
4821
4822 ; LINUX-32-STATIC: bar00:
4823 ; LINUX-32-STATIC:      movl    $src, %eax
4824 ; LINUX-32-STATIC-NEXT:         ret
4825
4826 ; LINUX-32-PIC: bar00:
4827 ; LINUX-32-PIC:         movl    $src, %eax
4828 ; LINUX-32-PIC-NEXT:    ret
4829
4830 ; LINUX-64-PIC: bar00:
4831 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
4832 ; LINUX-64-PIC-NEXT:    ret
4833
4834 ; DARWIN-32-STATIC: _bar00:
4835 ; DARWIN-32-STATIC:     movl    $_src, %eax
4836 ; DARWIN-32-STATIC-NEXT:        ret
4837
4838 ; DARWIN-32-DYNAMIC: _bar00:
4839 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
4840 ; DARWIN-32-DYNAMIC-NEXT:       ret
4841
4842 ; DARWIN-32-PIC: _bar00:
4843 ; DARWIN-32-PIC:        call    "L67$pb"
4844 ; DARWIN-32-PIC-NEXT: "L67$pb":
4845 ; DARWIN-32-PIC-NEXT:   popl    %eax
4846 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L67$pb"(%eax), %eax
4847 ; DARWIN-32-PIC-NEXT:   ret
4848
4849 ; DARWIN-64-STATIC: _bar00:
4850 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
4851 ; DARWIN-64-STATIC-NEXT:        ret
4852
4853 ; DARWIN-64-DYNAMIC: _bar00:
4854 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
4855 ; DARWIN-64-DYNAMIC-NEXT:       ret
4856
4857 ; DARWIN-64-PIC: _bar00:
4858 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
4859 ; DARWIN-64-PIC-NEXT:   ret
4860 }
4861
4862 define i8* @bxr00() nounwind {
4863 entry:
4864         ret i8* bitcast ([32 x i32]* @xsrc to i8*)
4865 ; LINUX-64-STATIC: bxr00:
4866 ; LINUX-64-STATIC: movl    $xsrc, %eax
4867 ; LINUX-64-STATIC: ret
4868
4869 ; LINUX-32-STATIC: bxr00:
4870 ; LINUX-32-STATIC:      movl    $xsrc, %eax
4871 ; LINUX-32-STATIC-NEXT:         ret
4872
4873 ; LINUX-32-PIC: bxr00:
4874 ; LINUX-32-PIC:         movl    $xsrc, %eax
4875 ; LINUX-32-PIC-NEXT:    ret
4876
4877 ; LINUX-64-PIC: bxr00:
4878 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
4879 ; LINUX-64-PIC-NEXT:    ret
4880
4881 ; DARWIN-32-STATIC: _bxr00:
4882 ; DARWIN-32-STATIC:     movl    $_xsrc, %eax
4883 ; DARWIN-32-STATIC-NEXT:        ret
4884
4885 ; DARWIN-32-DYNAMIC: _bxr00:
4886 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
4887 ; DARWIN-32-DYNAMIC-NEXT:       ret
4888
4889 ; DARWIN-32-PIC: _bxr00:
4890 ; DARWIN-32-PIC:        call    "L68$pb"
4891 ; DARWIN-32-PIC-NEXT: "L68$pb":
4892 ; DARWIN-32-PIC-NEXT:   popl    %eax
4893 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L68$pb"(%eax), %eax
4894 ; DARWIN-32-PIC-NEXT:   ret
4895
4896 ; DARWIN-64-STATIC: _bxr00:
4897 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
4898 ; DARWIN-64-STATIC-NEXT:        ret
4899
4900 ; DARWIN-64-DYNAMIC: _bxr00:
4901 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
4902 ; DARWIN-64-DYNAMIC-NEXT:       ret
4903
4904 ; DARWIN-64-PIC: _bxr00:
4905 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
4906 ; DARWIN-64-PIC-NEXT:   ret
4907 }
4908
4909 define i8* @bar01() nounwind {
4910 entry:
4911         ret i8* bitcast ([131072 x i32]* @dst to i8*)
4912 ; LINUX-64-STATIC: bar01:
4913 ; LINUX-64-STATIC: movl    $dst, %eax
4914 ; LINUX-64-STATIC: ret
4915
4916 ; LINUX-32-STATIC: bar01:
4917 ; LINUX-32-STATIC:      movl    $dst, %eax
4918 ; LINUX-32-STATIC-NEXT:         ret
4919
4920 ; LINUX-32-PIC: bar01:
4921 ; LINUX-32-PIC:         movl    $dst, %eax
4922 ; LINUX-32-PIC-NEXT:    ret
4923
4924 ; LINUX-64-PIC: bar01:
4925 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
4926 ; LINUX-64-PIC-NEXT:    ret
4927
4928 ; DARWIN-32-STATIC: _bar01:
4929 ; DARWIN-32-STATIC:     movl    $_dst, %eax
4930 ; DARWIN-32-STATIC-NEXT:        ret
4931
4932 ; DARWIN-32-DYNAMIC: _bar01:
4933 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
4934 ; DARWIN-32-DYNAMIC-NEXT:       ret
4935
4936 ; DARWIN-32-PIC: _bar01:
4937 ; DARWIN-32-PIC:        call    "L69$pb"
4938 ; DARWIN-32-PIC-NEXT: "L69$pb":
4939 ; DARWIN-32-PIC-NEXT:   popl    %eax
4940 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L69$pb"(%eax), %eax
4941 ; DARWIN-32-PIC-NEXT:   ret
4942
4943 ; DARWIN-64-STATIC: _bar01:
4944 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
4945 ; DARWIN-64-STATIC-NEXT:        ret
4946
4947 ; DARWIN-64-DYNAMIC: _bar01:
4948 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
4949 ; DARWIN-64-DYNAMIC-NEXT:       ret
4950
4951 ; DARWIN-64-PIC: _bar01:
4952 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
4953 ; DARWIN-64-PIC-NEXT:   ret
4954 }
4955
4956 define i8* @bxr01() nounwind {
4957 entry:
4958         ret i8* bitcast ([32 x i32]* @xdst to i8*)
4959 ; LINUX-64-STATIC: bxr01:
4960 ; LINUX-64-STATIC: movl    $xdst, %eax
4961 ; LINUX-64-STATIC: ret
4962
4963 ; LINUX-32-STATIC: bxr01:
4964 ; LINUX-32-STATIC:      movl    $xdst, %eax
4965 ; LINUX-32-STATIC-NEXT:         ret
4966
4967 ; LINUX-32-PIC: bxr01:
4968 ; LINUX-32-PIC:         movl    $xdst, %eax
4969 ; LINUX-32-PIC-NEXT:    ret
4970
4971 ; LINUX-64-PIC: bxr01:
4972 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
4973 ; LINUX-64-PIC-NEXT:    ret
4974
4975 ; DARWIN-32-STATIC: _bxr01:
4976 ; DARWIN-32-STATIC:     movl    $_xdst, %eax
4977 ; DARWIN-32-STATIC-NEXT:        ret
4978
4979 ; DARWIN-32-DYNAMIC: _bxr01:
4980 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
4981 ; DARWIN-32-DYNAMIC-NEXT:       ret
4982
4983 ; DARWIN-32-PIC: _bxr01:
4984 ; DARWIN-32-PIC:        call    "L70$pb"
4985 ; DARWIN-32-PIC-NEXT: "L70$pb":
4986 ; DARWIN-32-PIC-NEXT:   popl    %eax
4987 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L70$pb"(%eax), %eax
4988 ; DARWIN-32-PIC-NEXT:   ret
4989
4990 ; DARWIN-64-STATIC: _bxr01:
4991 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
4992 ; DARWIN-64-STATIC-NEXT:        ret
4993
4994 ; DARWIN-64-DYNAMIC: _bxr01:
4995 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
4996 ; DARWIN-64-DYNAMIC-NEXT:       ret
4997
4998 ; DARWIN-64-PIC: _bxr01:
4999 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
5000 ; DARWIN-64-PIC-NEXT:   ret
5001 }
5002
5003 define i8* @bar02() nounwind {
5004 entry:
5005         ret i8* bitcast (i32** @ptr to i8*)
5006 ; LINUX-64-STATIC: bar02:
5007 ; LINUX-64-STATIC: movl    $ptr, %eax
5008 ; LINUX-64-STATIC: ret
5009
5010 ; LINUX-32-STATIC: bar02:
5011 ; LINUX-32-STATIC:      movl    $ptr, %eax
5012 ; LINUX-32-STATIC-NEXT:         ret
5013
5014 ; LINUX-32-PIC: bar02:
5015 ; LINUX-32-PIC:         movl    $ptr, %eax
5016 ; LINUX-32-PIC-NEXT:    ret
5017
5018 ; LINUX-64-PIC: bar02:
5019 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rax
5020 ; LINUX-64-PIC-NEXT:    ret
5021
5022 ; DARWIN-32-STATIC: _bar02:
5023 ; DARWIN-32-STATIC:     movl    $_ptr, %eax
5024 ; DARWIN-32-STATIC-NEXT:        ret
5025
5026 ; DARWIN-32-DYNAMIC: _bar02:
5027 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %eax
5028 ; DARWIN-32-DYNAMIC-NEXT:       ret
5029
5030 ; DARWIN-32-PIC: _bar02:
5031 ; DARWIN-32-PIC:        call    "L71$pb"
5032 ; DARWIN-32-PIC-NEXT: "L71$pb":
5033 ; DARWIN-32-PIC-NEXT:   popl    %eax
5034 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L71$pb"(%eax), %eax
5035 ; DARWIN-32-PIC-NEXT:   ret
5036
5037 ; DARWIN-64-STATIC: _bar02:
5038 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rax
5039 ; DARWIN-64-STATIC-NEXT:        ret
5040
5041 ; DARWIN-64-DYNAMIC: _bar02:
5042 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rax
5043 ; DARWIN-64-DYNAMIC-NEXT:       ret
5044
5045 ; DARWIN-64-PIC: _bar02:
5046 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rax
5047 ; DARWIN-64-PIC-NEXT:   ret
5048 }
5049
5050 define i8* @bar03() nounwind {
5051 entry:
5052         ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
5053 ; LINUX-64-STATIC: bar03:
5054 ; LINUX-64-STATIC: movl    $dsrc, %eax
5055 ; LINUX-64-STATIC: ret
5056
5057 ; LINUX-32-STATIC: bar03:
5058 ; LINUX-32-STATIC:      movl    $dsrc, %eax
5059 ; LINUX-32-STATIC-NEXT:         ret
5060
5061 ; LINUX-32-PIC: bar03:
5062 ; LINUX-32-PIC:         movl    $dsrc, %eax
5063 ; LINUX-32-PIC-NEXT:    ret
5064
5065 ; LINUX-64-PIC: bar03:
5066 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
5067 ; LINUX-64-PIC-NEXT:    ret
5068
5069 ; DARWIN-32-STATIC: _bar03:
5070 ; DARWIN-32-STATIC:     movl    $_dsrc, %eax
5071 ; DARWIN-32-STATIC-NEXT:        ret
5072
5073 ; DARWIN-32-DYNAMIC: _bar03:
5074 ; DARWIN-32-DYNAMIC:    movl    $_dsrc, %eax
5075 ; DARWIN-32-DYNAMIC-NEXT:       ret
5076
5077 ; DARWIN-32-PIC: _bar03:
5078 ; DARWIN-32-PIC:        call    "L72$pb"
5079 ; DARWIN-32-PIC-NEXT: "L72$pb":
5080 ; DARWIN-32-PIC-NEXT:   popl    %eax
5081 ; DARWIN-32-PIC-NEXT:   leal    _dsrc-"L72$pb"(%eax), %eax
5082 ; DARWIN-32-PIC-NEXT:   ret
5083
5084 ; DARWIN-64-STATIC: _bar03:
5085 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
5086 ; DARWIN-64-STATIC-NEXT:        ret
5087
5088 ; DARWIN-64-DYNAMIC: _bar03:
5089 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
5090 ; DARWIN-64-DYNAMIC-NEXT:       ret
5091
5092 ; DARWIN-64-PIC: _bar03:
5093 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
5094 ; DARWIN-64-PIC-NEXT:   ret
5095 }
5096
5097 define i8* @bar04() nounwind {
5098 entry:
5099         ret i8* bitcast ([131072 x i32]* @ddst to i8*)
5100 ; LINUX-64-STATIC: bar04:
5101 ; LINUX-64-STATIC: movl    $ddst, %eax
5102 ; LINUX-64-STATIC: ret
5103
5104 ; LINUX-32-STATIC: bar04:
5105 ; LINUX-32-STATIC:      movl    $ddst, %eax
5106 ; LINUX-32-STATIC-NEXT:         ret
5107
5108 ; LINUX-32-PIC: bar04:
5109 ; LINUX-32-PIC:         movl    $ddst, %eax
5110 ; LINUX-32-PIC-NEXT:    ret
5111
5112 ; LINUX-64-PIC: bar04:
5113 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
5114 ; LINUX-64-PIC-NEXT:    ret
5115
5116 ; DARWIN-32-STATIC: _bar04:
5117 ; DARWIN-32-STATIC:     movl    $_ddst, %eax
5118 ; DARWIN-32-STATIC-NEXT:        ret
5119
5120 ; DARWIN-32-DYNAMIC: _bar04:
5121 ; DARWIN-32-DYNAMIC:    movl    $_ddst, %eax
5122 ; DARWIN-32-DYNAMIC-NEXT:       ret
5123
5124 ; DARWIN-32-PIC: _bar04:
5125 ; DARWIN-32-PIC:        call    "L73$pb"
5126 ; DARWIN-32-PIC-NEXT: "L73$pb":
5127 ; DARWIN-32-PIC-NEXT:   popl    %eax
5128 ; DARWIN-32-PIC-NEXT:   leal    _ddst-"L73$pb"(%eax), %eax
5129 ; DARWIN-32-PIC-NEXT:   ret
5130
5131 ; DARWIN-64-STATIC: _bar04:
5132 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
5133 ; DARWIN-64-STATIC-NEXT:        ret
5134
5135 ; DARWIN-64-DYNAMIC: _bar04:
5136 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
5137 ; DARWIN-64-DYNAMIC-NEXT:       ret
5138
5139 ; DARWIN-64-PIC: _bar04:
5140 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
5141 ; DARWIN-64-PIC-NEXT:   ret
5142 }
5143
5144 define i8* @bar05() nounwind {
5145 entry:
5146         ret i8* bitcast (i32** @dptr to i8*)
5147 ; LINUX-64-STATIC: bar05:
5148 ; LINUX-64-STATIC: movl    $dptr, %eax
5149 ; LINUX-64-STATIC: ret
5150
5151 ; LINUX-32-STATIC: bar05:
5152 ; LINUX-32-STATIC:      movl    $dptr, %eax
5153 ; LINUX-32-STATIC-NEXT:         ret
5154
5155 ; LINUX-32-PIC: bar05:
5156 ; LINUX-32-PIC:         movl    $dptr, %eax
5157 ; LINUX-32-PIC-NEXT:    ret
5158
5159 ; LINUX-64-PIC: bar05:
5160 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rax
5161 ; LINUX-64-PIC-NEXT:    ret
5162
5163 ; DARWIN-32-STATIC: _bar05:
5164 ; DARWIN-32-STATIC:     movl    $_dptr, %eax
5165 ; DARWIN-32-STATIC-NEXT:        ret
5166
5167 ; DARWIN-32-DYNAMIC: _bar05:
5168 ; DARWIN-32-DYNAMIC:    movl    $_dptr, %eax
5169 ; DARWIN-32-DYNAMIC-NEXT:       ret
5170
5171 ; DARWIN-32-PIC: _bar05:
5172 ; DARWIN-32-PIC:        call    "L74$pb"
5173 ; DARWIN-32-PIC-NEXT: "L74$pb":
5174 ; DARWIN-32-PIC-NEXT:   popl    %eax
5175 ; DARWIN-32-PIC-NEXT:   leal    _dptr-"L74$pb"(%eax), %eax
5176 ; DARWIN-32-PIC-NEXT:   ret
5177
5178 ; DARWIN-64-STATIC: _bar05:
5179 ; DARWIN-64-STATIC:     leaq    _dptr(%rip), %rax
5180 ; DARWIN-64-STATIC-NEXT:        ret
5181
5182 ; DARWIN-64-DYNAMIC: _bar05:
5183 ; DARWIN-64-DYNAMIC:    leaq    _dptr(%rip), %rax
5184 ; DARWIN-64-DYNAMIC-NEXT:       ret
5185
5186 ; DARWIN-64-PIC: _bar05:
5187 ; DARWIN-64-PIC:        leaq    _dptr(%rip), %rax
5188 ; DARWIN-64-PIC-NEXT:   ret
5189 }
5190
5191 define i8* @bar06() nounwind {
5192 entry:
5193         ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
5194 ; LINUX-64-STATIC: bar06:
5195 ; LINUX-64-STATIC: movl    $lsrc, %eax
5196 ; LINUX-64-STATIC: ret
5197
5198 ; LINUX-32-STATIC: bar06:
5199 ; LINUX-32-STATIC:      movl    $lsrc, %eax
5200 ; LINUX-32-STATIC-NEXT:         ret
5201
5202 ; LINUX-32-PIC: bar06:
5203 ; LINUX-32-PIC:         movl    $lsrc, %eax
5204 ; LINUX-32-PIC-NEXT:    ret
5205
5206 ; LINUX-64-PIC: bar06:
5207 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
5208 ; LINUX-64-PIC-NEXT:    ret
5209
5210 ; DARWIN-32-STATIC: _bar06:
5211 ; DARWIN-32-STATIC:     movl    $_lsrc, %eax
5212 ; DARWIN-32-STATIC-NEXT:        ret
5213
5214 ; DARWIN-32-DYNAMIC: _bar06:
5215 ; DARWIN-32-DYNAMIC:    movl    $_lsrc, %eax
5216 ; DARWIN-32-DYNAMIC-NEXT:       ret
5217
5218 ; DARWIN-32-PIC: _bar06:
5219 ; DARWIN-32-PIC:        call    "L75$pb"
5220 ; DARWIN-32-PIC-NEXT: "L75$pb":
5221 ; DARWIN-32-PIC-NEXT:   popl    %eax
5222 ; DARWIN-32-PIC-NEXT:   leal    _lsrc-"L75$pb"(%eax), %eax
5223 ; DARWIN-32-PIC-NEXT:   ret
5224
5225 ; DARWIN-64-STATIC: _bar06:
5226 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
5227 ; DARWIN-64-STATIC-NEXT:        ret
5228
5229 ; DARWIN-64-DYNAMIC: _bar06:
5230 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
5231 ; DARWIN-64-DYNAMIC-NEXT:       ret
5232
5233 ; DARWIN-64-PIC: _bar06:
5234 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
5235 ; DARWIN-64-PIC-NEXT:   ret
5236 }
5237
5238 define i8* @bar07() nounwind {
5239 entry:
5240         ret i8* bitcast ([131072 x i32]* @ldst to i8*)
5241 ; LINUX-64-STATIC: bar07:
5242 ; LINUX-64-STATIC: movl    $ldst, %eax
5243 ; LINUX-64-STATIC: ret
5244
5245 ; LINUX-32-STATIC: bar07:
5246 ; LINUX-32-STATIC:      movl    $ldst, %eax
5247 ; LINUX-32-STATIC-NEXT:         ret
5248
5249 ; LINUX-32-PIC: bar07:
5250 ; LINUX-32-PIC:         movl    $ldst, %eax
5251 ; LINUX-32-PIC-NEXT:    ret
5252
5253 ; LINUX-64-PIC: bar07:
5254 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
5255 ; LINUX-64-PIC-NEXT:    ret
5256
5257 ; DARWIN-32-STATIC: _bar07:
5258 ; DARWIN-32-STATIC:     movl    $_ldst, %eax
5259 ; DARWIN-32-STATIC-NEXT:        ret
5260
5261 ; DARWIN-32-DYNAMIC: _bar07:
5262 ; DARWIN-32-DYNAMIC:    movl    $_ldst, %eax
5263 ; DARWIN-32-DYNAMIC-NEXT:       ret
5264
5265 ; DARWIN-32-PIC: _bar07:
5266 ; DARWIN-32-PIC:        call    "L76$pb"
5267 ; DARWIN-32-PIC-NEXT: "L76$pb":
5268 ; DARWIN-32-PIC-NEXT:   popl    %eax
5269 ; DARWIN-32-PIC-NEXT:   leal    _ldst-"L76$pb"(%eax), %eax
5270 ; DARWIN-32-PIC-NEXT:   ret
5271
5272 ; DARWIN-64-STATIC: _bar07:
5273 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
5274 ; DARWIN-64-STATIC-NEXT:        ret
5275
5276 ; DARWIN-64-DYNAMIC: _bar07:
5277 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
5278 ; DARWIN-64-DYNAMIC-NEXT:       ret
5279
5280 ; DARWIN-64-PIC: _bar07:
5281 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
5282 ; DARWIN-64-PIC-NEXT:   ret
5283 }
5284
5285 define i8* @bar08() nounwind {
5286 entry:
5287         ret i8* bitcast (i32** @lptr to i8*)
5288 ; LINUX-64-STATIC: bar08:
5289 ; LINUX-64-STATIC: movl    $lptr, %eax
5290 ; LINUX-64-STATIC: ret
5291
5292 ; LINUX-32-STATIC: bar08:
5293 ; LINUX-32-STATIC:      movl    $lptr, %eax
5294 ; LINUX-32-STATIC-NEXT:         ret
5295
5296 ; LINUX-32-PIC: bar08:
5297 ; LINUX-32-PIC:         movl    $lptr, %eax
5298 ; LINUX-32-PIC-NEXT:    ret
5299
5300 ; LINUX-64-PIC: bar08:
5301 ; LINUX-64-PIC:         leaq    lptr(%rip), %rax
5302 ; LINUX-64-PIC-NEXT:    ret
5303
5304 ; DARWIN-32-STATIC: _bar08:
5305 ; DARWIN-32-STATIC:     movl    $_lptr, %eax
5306 ; DARWIN-32-STATIC-NEXT:        ret
5307
5308 ; DARWIN-32-DYNAMIC: _bar08:
5309 ; DARWIN-32-DYNAMIC:    movl    $_lptr, %eax
5310 ; DARWIN-32-DYNAMIC-NEXT:       ret
5311
5312 ; DARWIN-32-PIC: _bar08:
5313 ; DARWIN-32-PIC:        call    "L77$pb"
5314 ; DARWIN-32-PIC-NEXT: "L77$pb":
5315 ; DARWIN-32-PIC-NEXT:   popl    %eax
5316 ; DARWIN-32-PIC-NEXT:   leal    _lptr-"L77$pb"(%eax), %eax
5317 ; DARWIN-32-PIC-NEXT:   ret
5318
5319 ; DARWIN-64-STATIC: _bar08:
5320 ; DARWIN-64-STATIC:     leaq    _lptr(%rip), %rax
5321 ; DARWIN-64-STATIC-NEXT:        ret
5322
5323 ; DARWIN-64-DYNAMIC: _bar08:
5324 ; DARWIN-64-DYNAMIC:    leaq    _lptr(%rip), %rax
5325 ; DARWIN-64-DYNAMIC-NEXT:       ret
5326
5327 ; DARWIN-64-PIC: _bar08:
5328 ; DARWIN-64-PIC:        leaq    _lptr(%rip), %rax
5329 ; DARWIN-64-PIC-NEXT:   ret
5330 }
5331
5332 define i8* @har00() nounwind {
5333 entry:
5334         ret i8* bitcast ([131072 x i32]* @src to i8*)
5335 ; LINUX-64-STATIC: har00:
5336 ; LINUX-64-STATIC: movl    $src, %eax
5337 ; LINUX-64-STATIC: ret
5338
5339 ; LINUX-32-STATIC: har00:
5340 ; LINUX-32-STATIC:      movl    $src, %eax
5341 ; LINUX-32-STATIC-NEXT:         ret
5342
5343 ; LINUX-32-PIC: har00:
5344 ; LINUX-32-PIC:         movl    $src, %eax
5345 ; LINUX-32-PIC-NEXT:    ret
5346
5347 ; LINUX-64-PIC: har00:
5348 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
5349 ; LINUX-64-PIC-NEXT:    ret
5350
5351 ; DARWIN-32-STATIC: _har00:
5352 ; DARWIN-32-STATIC:     movl    $_src, %eax
5353 ; DARWIN-32-STATIC-NEXT:        ret
5354
5355 ; DARWIN-32-DYNAMIC: _har00:
5356 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
5357 ; DARWIN-32-DYNAMIC-NEXT:       ret
5358
5359 ; DARWIN-32-PIC: _har00:
5360 ; DARWIN-32-PIC:        call    "L78$pb"
5361 ; DARWIN-32-PIC-NEXT: "L78$pb":
5362 ; DARWIN-32-PIC-NEXT:   popl    %eax
5363 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L78$pb"(%eax), %eax
5364 ; DARWIN-32-PIC-NEXT:   ret
5365
5366 ; DARWIN-64-STATIC: _har00:
5367 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
5368 ; DARWIN-64-STATIC-NEXT:        ret
5369
5370 ; DARWIN-64-DYNAMIC: _har00:
5371 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
5372 ; DARWIN-64-DYNAMIC-NEXT:       ret
5373
5374 ; DARWIN-64-PIC: _har00:
5375 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
5376 ; DARWIN-64-PIC-NEXT:   ret
5377 }
5378
5379 define i8* @hxr00() nounwind {
5380 entry:
5381         ret i8* bitcast ([32 x i32]* @xsrc to i8*)
5382 ; LINUX-64-STATIC: hxr00:
5383 ; LINUX-64-STATIC: movl    $xsrc, %eax
5384 ; LINUX-64-STATIC: ret
5385
5386 ; LINUX-32-STATIC: hxr00:
5387 ; LINUX-32-STATIC:      movl    $xsrc, %eax
5388 ; LINUX-32-STATIC-NEXT:         ret
5389
5390 ; LINUX-32-PIC: hxr00:
5391 ; LINUX-32-PIC:         movl    $xsrc, %eax
5392 ; LINUX-32-PIC-NEXT:    ret
5393
5394 ; LINUX-64-PIC: hxr00:
5395 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
5396 ; LINUX-64-PIC-NEXT:    ret
5397
5398 ; DARWIN-32-STATIC: _hxr00:
5399 ; DARWIN-32-STATIC:     movl    $_xsrc, %eax
5400 ; DARWIN-32-STATIC-NEXT:        ret
5401
5402 ; DARWIN-32-DYNAMIC: _hxr00:
5403 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
5404 ; DARWIN-32-DYNAMIC-NEXT:       ret
5405
5406 ; DARWIN-32-PIC: _hxr00:
5407 ; DARWIN-32-PIC:        call    "L79$pb"
5408 ; DARWIN-32-PIC-NEXT: "L79$pb":
5409 ; DARWIN-32-PIC-NEXT:   popl    %eax
5410 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L79$pb"(%eax), %eax
5411 ; DARWIN-32-PIC-NEXT:   ret
5412
5413 ; DARWIN-64-STATIC: _hxr00:
5414 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
5415 ; DARWIN-64-STATIC-NEXT:        ret
5416
5417 ; DARWIN-64-DYNAMIC: _hxr00:
5418 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
5419 ; DARWIN-64-DYNAMIC-NEXT:       ret
5420
5421 ; DARWIN-64-PIC: _hxr00:
5422 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
5423 ; DARWIN-64-PIC-NEXT:   ret
5424 }
5425
5426 define i8* @har01() nounwind {
5427 entry:
5428         ret i8* bitcast ([131072 x i32]* @dst to i8*)
5429 ; LINUX-64-STATIC: har01:
5430 ; LINUX-64-STATIC: movl    $dst, %eax
5431 ; LINUX-64-STATIC: ret
5432
5433 ; LINUX-32-STATIC: har01:
5434 ; LINUX-32-STATIC:      movl    $dst, %eax
5435 ; LINUX-32-STATIC-NEXT:         ret
5436
5437 ; LINUX-32-PIC: har01:
5438 ; LINUX-32-PIC:         movl    $dst, %eax
5439 ; LINUX-32-PIC-NEXT:    ret
5440
5441 ; LINUX-64-PIC: har01:
5442 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
5443 ; LINUX-64-PIC-NEXT:    ret
5444
5445 ; DARWIN-32-STATIC: _har01:
5446 ; DARWIN-32-STATIC:     movl    $_dst, %eax
5447 ; DARWIN-32-STATIC-NEXT:        ret
5448
5449 ; DARWIN-32-DYNAMIC: _har01:
5450 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
5451 ; DARWIN-32-DYNAMIC-NEXT:       ret
5452
5453 ; DARWIN-32-PIC: _har01:
5454 ; DARWIN-32-PIC:        call    "L80$pb"
5455 ; DARWIN-32-PIC-NEXT: "L80$pb":
5456 ; DARWIN-32-PIC-NEXT:   popl    %eax
5457 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L80$pb"(%eax), %eax
5458 ; DARWIN-32-PIC-NEXT:   ret
5459
5460 ; DARWIN-64-STATIC: _har01:
5461 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
5462 ; DARWIN-64-STATIC-NEXT:        ret
5463
5464 ; DARWIN-64-DYNAMIC: _har01:
5465 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
5466 ; DARWIN-64-DYNAMIC-NEXT:       ret
5467
5468 ; DARWIN-64-PIC: _har01:
5469 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
5470 ; DARWIN-64-PIC-NEXT:   ret
5471 }
5472
5473 define i8* @hxr01() nounwind {
5474 entry:
5475         ret i8* bitcast ([32 x i32]* @xdst to i8*)
5476 ; LINUX-64-STATIC: hxr01:
5477 ; LINUX-64-STATIC: movl    $xdst, %eax
5478 ; LINUX-64-STATIC: ret
5479
5480 ; LINUX-32-STATIC: hxr01:
5481 ; LINUX-32-STATIC:      movl    $xdst, %eax
5482 ; LINUX-32-STATIC-NEXT:         ret
5483
5484 ; LINUX-32-PIC: hxr01:
5485 ; LINUX-32-PIC:         movl    $xdst, %eax
5486 ; LINUX-32-PIC-NEXT:    ret
5487
5488 ; LINUX-64-PIC: hxr01:
5489 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
5490 ; LINUX-64-PIC-NEXT:    ret
5491
5492 ; DARWIN-32-STATIC: _hxr01:
5493 ; DARWIN-32-STATIC:     movl    $_xdst, %eax
5494 ; DARWIN-32-STATIC-NEXT:        ret
5495
5496 ; DARWIN-32-DYNAMIC: _hxr01:
5497 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
5498 ; DARWIN-32-DYNAMIC-NEXT:       ret
5499
5500 ; DARWIN-32-PIC: _hxr01:
5501 ; DARWIN-32-PIC:        call    "L81$pb"
5502 ; DARWIN-32-PIC-NEXT: "L81$pb":
5503 ; DARWIN-32-PIC-NEXT:   popl    %eax
5504 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L81$pb"(%eax), %eax
5505 ; DARWIN-32-PIC-NEXT:   ret
5506
5507 ; DARWIN-64-STATIC: _hxr01:
5508 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
5509 ; DARWIN-64-STATIC-NEXT:        ret
5510
5511 ; DARWIN-64-DYNAMIC: _hxr01:
5512 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
5513 ; DARWIN-64-DYNAMIC-NEXT:       ret
5514
5515 ; DARWIN-64-PIC: _hxr01:
5516 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
5517 ; DARWIN-64-PIC-NEXT:   ret
5518 }
5519
5520 define i8* @har02() nounwind {
5521 entry:
5522         %0 = load i32** @ptr, align 8
5523         %1 = bitcast i32* %0 to i8*
5524         ret i8* %1
5525 ; LINUX-64-STATIC: har02:
5526 ; LINUX-64-STATIC: movq    ptr(%rip), %rax
5527 ; LINUX-64-STATIC: ret
5528
5529 ; LINUX-32-STATIC: har02:
5530 ; LINUX-32-STATIC:      movl    ptr, %eax
5531 ; LINUX-32-STATIC-NEXT:         ret
5532
5533 ; LINUX-32-PIC: har02:
5534 ; LINUX-32-PIC:         movl    ptr, %eax
5535 ; LINUX-32-PIC-NEXT:    ret
5536
5537 ; LINUX-64-PIC: har02:
5538 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rax
5539 ; LINUX-64-PIC-NEXT:    movq    (%rax), %rax
5540 ; LINUX-64-PIC-NEXT:    ret
5541
5542 ; DARWIN-32-STATIC: _har02:
5543 ; DARWIN-32-STATIC:     movl    _ptr, %eax
5544 ; DARWIN-32-STATIC-NEXT:        ret
5545
5546 ; DARWIN-32-DYNAMIC: _har02:
5547 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %eax
5548 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%eax), %eax
5549 ; DARWIN-32-DYNAMIC-NEXT:       ret
5550
5551 ; DARWIN-32-PIC: _har02:
5552 ; DARWIN-32-PIC:        call    "L82$pb"
5553 ; DARWIN-32-PIC-NEXT: "L82$pb":
5554 ; DARWIN-32-PIC-NEXT:   popl    %eax
5555 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L82$pb"(%eax), %eax
5556 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
5557 ; DARWIN-32-PIC-NEXT:   ret
5558
5559 ; DARWIN-64-STATIC: _har02:
5560 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rax
5561 ; DARWIN-64-STATIC-NEXT:        movq    (%rax), %rax
5562 ; DARWIN-64-STATIC-NEXT:        ret
5563
5564 ; DARWIN-64-DYNAMIC: _har02:
5565 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rax
5566 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rax), %rax
5567 ; DARWIN-64-DYNAMIC-NEXT:       ret
5568
5569 ; DARWIN-64-PIC: _har02:
5570 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rax
5571 ; DARWIN-64-PIC-NEXT:   movq    (%rax), %rax
5572 ; DARWIN-64-PIC-NEXT:   ret
5573 }
5574
5575 define i8* @har03() nounwind {
5576 entry:
5577         ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
5578 ; LINUX-64-STATIC: har03:
5579 ; LINUX-64-STATIC: movl    $dsrc, %eax
5580 ; LINUX-64-STATIC: ret
5581
5582 ; LINUX-32-STATIC: har03:
5583 ; LINUX-32-STATIC:      movl    $dsrc, %eax
5584 ; LINUX-32-STATIC-NEXT:         ret
5585
5586 ; LINUX-32-PIC: har03:
5587 ; LINUX-32-PIC:         movl    $dsrc, %eax
5588 ; LINUX-32-PIC-NEXT:    ret
5589
5590 ; LINUX-64-PIC: har03:
5591 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
5592 ; LINUX-64-PIC-NEXT:    ret
5593
5594 ; DARWIN-32-STATIC: _har03:
5595 ; DARWIN-32-STATIC:     movl    $_dsrc, %eax
5596 ; DARWIN-32-STATIC-NEXT:        ret
5597
5598 ; DARWIN-32-DYNAMIC: _har03:
5599 ; DARWIN-32-DYNAMIC:    movl    $_dsrc, %eax
5600 ; DARWIN-32-DYNAMIC-NEXT:       ret
5601
5602 ; DARWIN-32-PIC: _har03:
5603 ; DARWIN-32-PIC:        call    "L83$pb"
5604 ; DARWIN-32-PIC-NEXT: "L83$pb":
5605 ; DARWIN-32-PIC-NEXT:   popl    %eax
5606 ; DARWIN-32-PIC-NEXT:   leal    _dsrc-"L83$pb"(%eax), %eax
5607 ; DARWIN-32-PIC-NEXT:   ret
5608
5609 ; DARWIN-64-STATIC: _har03:
5610 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
5611 ; DARWIN-64-STATIC-NEXT:        ret
5612
5613 ; DARWIN-64-DYNAMIC: _har03:
5614 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
5615 ; DARWIN-64-DYNAMIC-NEXT:       ret
5616
5617 ; DARWIN-64-PIC: _har03:
5618 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
5619 ; DARWIN-64-PIC-NEXT:   ret
5620 }
5621
5622 define i8* @har04() nounwind {
5623 entry:
5624         ret i8* bitcast ([131072 x i32]* @ddst to i8*)
5625 ; LINUX-64-STATIC: har04:
5626 ; LINUX-64-STATIC: movl    $ddst, %eax
5627 ; LINUX-64-STATIC: ret
5628
5629 ; LINUX-32-STATIC: har04:
5630 ; LINUX-32-STATIC:      movl    $ddst, %eax
5631 ; LINUX-32-STATIC-NEXT:         ret
5632
5633 ; LINUX-32-PIC: har04:
5634 ; LINUX-32-PIC:         movl    $ddst, %eax
5635 ; LINUX-32-PIC-NEXT:    ret
5636
5637 ; LINUX-64-PIC: har04:
5638 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
5639 ; LINUX-64-PIC-NEXT:    ret
5640
5641 ; DARWIN-32-STATIC: _har04:
5642 ; DARWIN-32-STATIC:     movl    $_ddst, %eax
5643 ; DARWIN-32-STATIC-NEXT:        ret
5644
5645 ; DARWIN-32-DYNAMIC: _har04:
5646 ; DARWIN-32-DYNAMIC:    movl    $_ddst, %eax
5647 ; DARWIN-32-DYNAMIC-NEXT:       ret
5648
5649 ; DARWIN-32-PIC: _har04:
5650 ; DARWIN-32-PIC:        call    "L84$pb"
5651 ; DARWIN-32-PIC-NEXT: "L84$pb":
5652 ; DARWIN-32-PIC-NEXT:   popl    %eax
5653 ; DARWIN-32-PIC-NEXT:   leal    _ddst-"L84$pb"(%eax), %eax
5654 ; DARWIN-32-PIC-NEXT:   ret
5655
5656 ; DARWIN-64-STATIC: _har04:
5657 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
5658 ; DARWIN-64-STATIC-NEXT:        ret
5659
5660 ; DARWIN-64-DYNAMIC: _har04:
5661 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
5662 ; DARWIN-64-DYNAMIC-NEXT:       ret
5663
5664 ; DARWIN-64-PIC: _har04:
5665 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
5666 ; DARWIN-64-PIC-NEXT:   ret
5667 }
5668
5669 define i8* @har05() nounwind {
5670 entry:
5671         %0 = load i32** @dptr, align 8
5672         %1 = bitcast i32* %0 to i8*
5673         ret i8* %1
5674 ; LINUX-64-STATIC: har05:
5675 ; LINUX-64-STATIC: movq    dptr(%rip), %rax
5676 ; LINUX-64-STATIC: ret
5677
5678 ; LINUX-32-STATIC: har05:
5679 ; LINUX-32-STATIC:      movl    dptr, %eax
5680 ; LINUX-32-STATIC-NEXT:         ret
5681
5682 ; LINUX-32-PIC: har05:
5683 ; LINUX-32-PIC:         movl    dptr, %eax
5684 ; LINUX-32-PIC-NEXT:    ret
5685
5686 ; LINUX-64-PIC: har05:
5687 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rax
5688 ; LINUX-64-PIC-NEXT:    movq    (%rax), %rax
5689 ; LINUX-64-PIC-NEXT:    ret
5690
5691 ; DARWIN-32-STATIC: _har05:
5692 ; DARWIN-32-STATIC:     movl    _dptr, %eax
5693 ; DARWIN-32-STATIC-NEXT:        ret
5694
5695 ; DARWIN-32-DYNAMIC: _har05:
5696 ; DARWIN-32-DYNAMIC:    movl    _dptr, %eax
5697 ; DARWIN-32-DYNAMIC-NEXT:       ret
5698
5699 ; DARWIN-32-PIC: _har05:
5700 ; DARWIN-32-PIC:        call    "L85$pb"
5701 ; DARWIN-32-PIC-NEXT: "L85$pb":
5702 ; DARWIN-32-PIC-NEXT:   popl    %eax
5703 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L85$pb"(%eax), %eax
5704 ; DARWIN-32-PIC-NEXT:   ret
5705
5706 ; DARWIN-64-STATIC: _har05:
5707 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
5708 ; DARWIN-64-STATIC-NEXT:        ret
5709
5710 ; DARWIN-64-DYNAMIC: _har05:
5711 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
5712 ; DARWIN-64-DYNAMIC-NEXT:       ret
5713
5714 ; DARWIN-64-PIC: _har05:
5715 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
5716 ; DARWIN-64-PIC-NEXT:   ret
5717 }
5718
5719 define i8* @har06() nounwind {
5720 entry:
5721         ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
5722 ; LINUX-64-STATIC: har06:
5723 ; LINUX-64-STATIC: movl    $lsrc, %eax
5724 ; LINUX-64-STATIC: ret
5725
5726 ; LINUX-32-STATIC: har06:
5727 ; LINUX-32-STATIC:      movl    $lsrc, %eax
5728 ; LINUX-32-STATIC-NEXT:         ret
5729
5730 ; LINUX-32-PIC: har06:
5731 ; LINUX-32-PIC:         movl    $lsrc, %eax
5732 ; LINUX-32-PIC-NEXT:    ret
5733
5734 ; LINUX-64-PIC: har06:
5735 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
5736 ; LINUX-64-PIC-NEXT:    ret
5737
5738 ; DARWIN-32-STATIC: _har06:
5739 ; DARWIN-32-STATIC:     movl    $_lsrc, %eax
5740 ; DARWIN-32-STATIC-NEXT:        ret
5741
5742 ; DARWIN-32-DYNAMIC: _har06:
5743 ; DARWIN-32-DYNAMIC:    movl    $_lsrc, %eax
5744 ; DARWIN-32-DYNAMIC-NEXT:       ret
5745
5746 ; DARWIN-32-PIC: _har06:
5747 ; DARWIN-32-PIC:        call    "L86$pb"
5748 ; DARWIN-32-PIC-NEXT: "L86$pb":
5749 ; DARWIN-32-PIC-NEXT:   popl    %eax
5750 ; DARWIN-32-PIC-NEXT:   leal    _lsrc-"L86$pb"(%eax), %eax
5751 ; DARWIN-32-PIC-NEXT:   ret
5752
5753 ; DARWIN-64-STATIC: _har06:
5754 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
5755 ; DARWIN-64-STATIC-NEXT:        ret
5756
5757 ; DARWIN-64-DYNAMIC: _har06:
5758 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
5759 ; DARWIN-64-DYNAMIC-NEXT:       ret
5760
5761 ; DARWIN-64-PIC: _har06:
5762 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
5763 ; DARWIN-64-PIC-NEXT:   ret
5764 }
5765
5766 define i8* @har07() nounwind {
5767 entry:
5768         ret i8* bitcast ([131072 x i32]* @ldst to i8*)
5769 ; LINUX-64-STATIC: har07:
5770 ; LINUX-64-STATIC: movl    $ldst, %eax
5771 ; LINUX-64-STATIC: ret
5772
5773 ; LINUX-32-STATIC: har07:
5774 ; LINUX-32-STATIC:      movl    $ldst, %eax
5775 ; LINUX-32-STATIC-NEXT:         ret
5776
5777 ; LINUX-32-PIC: har07:
5778 ; LINUX-32-PIC:         movl    $ldst, %eax
5779 ; LINUX-32-PIC-NEXT:    ret
5780
5781 ; LINUX-64-PIC: har07:
5782 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
5783 ; LINUX-64-PIC-NEXT:    ret
5784
5785 ; DARWIN-32-STATIC: _har07:
5786 ; DARWIN-32-STATIC:     movl    $_ldst, %eax
5787 ; DARWIN-32-STATIC-NEXT:        ret
5788
5789 ; DARWIN-32-DYNAMIC: _har07:
5790 ; DARWIN-32-DYNAMIC:    movl    $_ldst, %eax
5791 ; DARWIN-32-DYNAMIC-NEXT:       ret
5792
5793 ; DARWIN-32-PIC: _har07:
5794 ; DARWIN-32-PIC:        call    "L87$pb"
5795 ; DARWIN-32-PIC-NEXT: "L87$pb":
5796 ; DARWIN-32-PIC-NEXT:   popl    %eax
5797 ; DARWIN-32-PIC-NEXT:   leal    _ldst-"L87$pb"(%eax), %eax
5798 ; DARWIN-32-PIC-NEXT:   ret
5799
5800 ; DARWIN-64-STATIC: _har07:
5801 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
5802 ; DARWIN-64-STATIC-NEXT:        ret
5803
5804 ; DARWIN-64-DYNAMIC: _har07:
5805 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
5806 ; DARWIN-64-DYNAMIC-NEXT:       ret
5807
5808 ; DARWIN-64-PIC: _har07:
5809 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
5810 ; DARWIN-64-PIC-NEXT:   ret
5811 }
5812
5813 define i8* @har08() nounwind {
5814 entry:
5815         %0 = load i32** @lptr, align 8
5816         %1 = bitcast i32* %0 to i8*
5817         ret i8* %1
5818 ; LINUX-64-STATIC: har08:
5819 ; LINUX-64-STATIC: movq    lptr(%rip), %rax
5820 ; LINUX-64-STATIC: ret
5821
5822 ; LINUX-32-STATIC: har08:
5823 ; LINUX-32-STATIC:      movl    lptr, %eax
5824 ; LINUX-32-STATIC-NEXT:         ret
5825
5826 ; LINUX-32-PIC: har08:
5827 ; LINUX-32-PIC:         movl    lptr, %eax
5828 ; LINUX-32-PIC-NEXT:    ret
5829
5830 ; LINUX-64-PIC: har08:
5831 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
5832 ; LINUX-64-PIC-NEXT:    ret
5833
5834 ; DARWIN-32-STATIC: _har08:
5835 ; DARWIN-32-STATIC:     movl    _lptr, %eax
5836 ; DARWIN-32-STATIC-NEXT:        ret
5837
5838 ; DARWIN-32-DYNAMIC: _har08:
5839 ; DARWIN-32-DYNAMIC:    movl    _lptr, %eax
5840 ; DARWIN-32-DYNAMIC-NEXT:       ret
5841
5842 ; DARWIN-32-PIC: _har08:
5843 ; DARWIN-32-PIC:        call    "L88$pb"
5844 ; DARWIN-32-PIC-NEXT: "L88$pb":
5845 ; DARWIN-32-PIC-NEXT:   popl    %eax
5846 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L88$pb"(%eax), %eax
5847 ; DARWIN-32-PIC-NEXT:   ret
5848
5849 ; DARWIN-64-STATIC: _har08:
5850 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
5851 ; DARWIN-64-STATIC-NEXT:        ret
5852
5853 ; DARWIN-64-DYNAMIC: _har08:
5854 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
5855 ; DARWIN-64-DYNAMIC-NEXT:       ret
5856
5857 ; DARWIN-64-PIC: _har08:
5858 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
5859 ; DARWIN-64-PIC-NEXT:   ret
5860 }
5861
5862 define i8* @bat00() nounwind {
5863 entry:
5864         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
5865 ; LINUX-64-STATIC: bat00:
5866 ; LINUX-64-STATIC: movl    $src+64, %eax
5867 ; LINUX-64-STATIC: ret
5868
5869 ; LINUX-32-STATIC: bat00:
5870 ; LINUX-32-STATIC:      movl    $src+64, %eax
5871 ; LINUX-32-STATIC-NEXT:         ret
5872
5873 ; LINUX-32-PIC: bat00:
5874 ; LINUX-32-PIC:         movl    $src+64, %eax
5875 ; LINUX-32-PIC-NEXT:    ret
5876
5877 ; LINUX-64-PIC: bat00:
5878 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
5879 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5880 ; LINUX-64-PIC-NEXT:    ret
5881
5882 ; DARWIN-32-STATIC: _bat00:
5883 ; DARWIN-32-STATIC:     movl    $_src+64, %eax
5884 ; DARWIN-32-STATIC-NEXT:        ret
5885
5886 ; DARWIN-32-DYNAMIC: _bat00:
5887 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
5888 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
5889 ; DARWIN-32-DYNAMIC-NEXT:       ret
5890
5891 ; DARWIN-32-PIC: _bat00:
5892 ; DARWIN-32-PIC:        call    "L89$pb"
5893 ; DARWIN-32-PIC-NEXT: "L89$pb":
5894 ; DARWIN-32-PIC-NEXT:   popl    %eax
5895 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L89$pb"(%eax), %eax
5896 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
5897 ; DARWIN-32-PIC-NEXT:   ret
5898
5899 ; DARWIN-64-STATIC: _bat00:
5900 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
5901 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
5902 ; DARWIN-64-STATIC-NEXT:        ret
5903
5904 ; DARWIN-64-DYNAMIC: _bat00:
5905 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
5906 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
5907 ; DARWIN-64-DYNAMIC-NEXT:       ret
5908
5909 ; DARWIN-64-PIC: _bat00:
5910 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
5911 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
5912 ; DARWIN-64-PIC-NEXT:   ret
5913 }
5914
5915 define i8* @bxt00() nounwind {
5916 entry:
5917         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
5918 ; LINUX-64-STATIC: bxt00:
5919 ; LINUX-64-STATIC: movl    $xsrc+64, %eax
5920 ; LINUX-64-STATIC: ret
5921
5922 ; LINUX-32-STATIC: bxt00:
5923 ; LINUX-32-STATIC:      movl    $xsrc+64, %eax
5924 ; LINUX-32-STATIC-NEXT:         ret
5925
5926 ; LINUX-32-PIC: bxt00:
5927 ; LINUX-32-PIC:         movl    $xsrc+64, %eax
5928 ; LINUX-32-PIC-NEXT:    ret
5929
5930 ; LINUX-64-PIC: bxt00:
5931 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
5932 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5933 ; LINUX-64-PIC-NEXT:    ret
5934
5935 ; DARWIN-32-STATIC: _bxt00:
5936 ; DARWIN-32-STATIC:     movl    $_xsrc+64, %eax
5937 ; DARWIN-32-STATIC-NEXT:        ret
5938
5939 ; DARWIN-32-DYNAMIC: _bxt00:
5940 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
5941 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
5942 ; DARWIN-32-DYNAMIC-NEXT:       ret
5943
5944 ; DARWIN-32-PIC: _bxt00:
5945 ; DARWIN-32-PIC:        call    "L90$pb"
5946 ; DARWIN-32-PIC-NEXT: "L90$pb":
5947 ; DARWIN-32-PIC-NEXT:   popl    %eax
5948 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L90$pb"(%eax), %eax
5949 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
5950 ; DARWIN-32-PIC-NEXT:   ret
5951
5952 ; DARWIN-64-STATIC: _bxt00:
5953 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
5954 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
5955 ; DARWIN-64-STATIC-NEXT:        ret
5956
5957 ; DARWIN-64-DYNAMIC: _bxt00:
5958 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
5959 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
5960 ; DARWIN-64-DYNAMIC-NEXT:       ret
5961
5962 ; DARWIN-64-PIC: _bxt00:
5963 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
5964 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
5965 ; DARWIN-64-PIC-NEXT:   ret
5966 }
5967
5968 define i8* @bat01() nounwind {
5969 entry:
5970         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
5971 ; LINUX-64-STATIC: bat01:
5972 ; LINUX-64-STATIC: movl    $dst+64, %eax
5973 ; LINUX-64-STATIC: ret
5974
5975 ; LINUX-32-STATIC: bat01:
5976 ; LINUX-32-STATIC:      movl    $dst+64, %eax
5977 ; LINUX-32-STATIC-NEXT:         ret
5978
5979 ; LINUX-32-PIC: bat01:
5980 ; LINUX-32-PIC:         movl    $dst+64, %eax
5981 ; LINUX-32-PIC-NEXT:    ret
5982
5983 ; LINUX-64-PIC: bat01:
5984 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
5985 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5986 ; LINUX-64-PIC-NEXT:    ret
5987
5988 ; DARWIN-32-STATIC: _bat01:
5989 ; DARWIN-32-STATIC:     movl    $_dst+64, %eax
5990 ; DARWIN-32-STATIC-NEXT:        ret
5991
5992 ; DARWIN-32-DYNAMIC: _bat01:
5993 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
5994 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
5995 ; DARWIN-32-DYNAMIC-NEXT:       ret
5996
5997 ; DARWIN-32-PIC: _bat01:
5998 ; DARWIN-32-PIC:        call    "L91$pb"
5999 ; DARWIN-32-PIC-NEXT: "L91$pb":
6000 ; DARWIN-32-PIC-NEXT:   popl    %eax
6001 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L91$pb"(%eax), %eax
6002 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6003 ; DARWIN-32-PIC-NEXT:   ret
6004
6005 ; DARWIN-64-STATIC: _bat01:
6006 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
6007 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6008 ; DARWIN-64-STATIC-NEXT:        ret
6009
6010 ; DARWIN-64-DYNAMIC: _bat01:
6011 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
6012 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6013 ; DARWIN-64-DYNAMIC-NEXT:       ret
6014
6015 ; DARWIN-64-PIC: _bat01:
6016 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
6017 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6018 ; DARWIN-64-PIC-NEXT:   ret
6019 }
6020
6021 define i8* @bxt01() nounwind {
6022 entry:
6023         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
6024 ; LINUX-64-STATIC: bxt01:
6025 ; LINUX-64-STATIC: movl    $xdst+64, %eax
6026 ; LINUX-64-STATIC: ret
6027
6028 ; LINUX-32-STATIC: bxt01:
6029 ; LINUX-32-STATIC:      movl    $xdst+64, %eax
6030 ; LINUX-32-STATIC-NEXT:         ret
6031
6032 ; LINUX-32-PIC: bxt01:
6033 ; LINUX-32-PIC:         movl    $xdst+64, %eax
6034 ; LINUX-32-PIC-NEXT:    ret
6035
6036 ; LINUX-64-PIC: bxt01:
6037 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
6038 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6039 ; LINUX-64-PIC-NEXT:    ret
6040
6041 ; DARWIN-32-STATIC: _bxt01:
6042 ; DARWIN-32-STATIC:     movl    $_xdst+64, %eax
6043 ; DARWIN-32-STATIC-NEXT:        ret
6044
6045 ; DARWIN-32-DYNAMIC: _bxt01:
6046 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
6047 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6048 ; DARWIN-32-DYNAMIC-NEXT:       ret
6049
6050 ; DARWIN-32-PIC: _bxt01:
6051 ; DARWIN-32-PIC:        call    "L92$pb"
6052 ; DARWIN-32-PIC-NEXT: "L92$pb":
6053 ; DARWIN-32-PIC-NEXT:   popl    %eax
6054 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L92$pb"(%eax), %eax
6055 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6056 ; DARWIN-32-PIC-NEXT:   ret
6057
6058 ; DARWIN-64-STATIC: _bxt01:
6059 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
6060 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6061 ; DARWIN-64-STATIC-NEXT:        ret
6062
6063 ; DARWIN-64-DYNAMIC: _bxt01:
6064 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
6065 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6066 ; DARWIN-64-DYNAMIC-NEXT:       ret
6067
6068 ; DARWIN-64-PIC: _bxt01:
6069 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
6070 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6071 ; DARWIN-64-PIC-NEXT:   ret
6072 }
6073
6074 define i8* @bat02() nounwind {
6075 entry:
6076         %0 = load i32** @ptr, align 8
6077         %1 = getelementptr i32* %0, i64 16
6078         %2 = bitcast i32* %1 to i8*
6079         ret i8* %2
6080 ; LINUX-64-STATIC: bat02:
6081 ; LINUX-64-STATIC: movq    ptr(%rip), %rax
6082 ; LINUX-64-STATIC: addq    $64, %rax
6083 ; LINUX-64-STATIC: ret
6084
6085 ; LINUX-32-STATIC: bat02:
6086 ; LINUX-32-STATIC:      movl    ptr, %eax
6087 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6088 ; LINUX-32-STATIC-NEXT:         ret
6089
6090 ; LINUX-32-PIC: bat02:
6091 ; LINUX-32-PIC:         movl    ptr, %eax
6092 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6093 ; LINUX-32-PIC-NEXT:    ret
6094
6095 ; LINUX-64-PIC: bat02:
6096 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rax
6097 ; LINUX-64-PIC-NEXT:    movq    (%rax), %rax
6098 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6099 ; LINUX-64-PIC-NEXT:    ret
6100
6101 ; DARWIN-32-STATIC: _bat02:
6102 ; DARWIN-32-STATIC:     movl    _ptr, %eax
6103 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6104 ; DARWIN-32-STATIC-NEXT:        ret
6105
6106 ; DARWIN-32-DYNAMIC: _bat02:
6107 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %eax
6108 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%eax), %eax
6109 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6110 ; DARWIN-32-DYNAMIC-NEXT:       ret
6111
6112 ; DARWIN-32-PIC: _bat02:
6113 ; DARWIN-32-PIC:        call    "L93$pb"
6114 ; DARWIN-32-PIC-NEXT: "L93$pb":
6115 ; DARWIN-32-PIC-NEXT:   popl    %eax
6116 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L93$pb"(%eax), %eax
6117 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
6118 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6119 ; DARWIN-32-PIC-NEXT:   ret
6120
6121 ; DARWIN-64-STATIC: _bat02:
6122 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rax
6123 ; DARWIN-64-STATIC-NEXT:        movq    (%rax), %rax
6124 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6125 ; DARWIN-64-STATIC-NEXT:        ret
6126
6127 ; DARWIN-64-DYNAMIC: _bat02:
6128 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rax
6129 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rax), %rax
6130 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6131 ; DARWIN-64-DYNAMIC-NEXT:       ret
6132
6133 ; DARWIN-64-PIC: _bat02:
6134 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rax
6135 ; DARWIN-64-PIC-NEXT:   movq    (%rax), %rax
6136 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6137 ; DARWIN-64-PIC-NEXT:   ret
6138 }
6139
6140 define i8* @bat03() nounwind {
6141 entry:
6142         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
6143 ; LINUX-64-STATIC: bat03:
6144 ; LINUX-64-STATIC: movl    $dsrc+64, %eax
6145 ; LINUX-64-STATIC: ret
6146
6147 ; LINUX-32-STATIC: bat03:
6148 ; LINUX-32-STATIC:      movl    $dsrc+64, %eax
6149 ; LINUX-32-STATIC-NEXT:         ret
6150
6151 ; LINUX-32-PIC: bat03:
6152 ; LINUX-32-PIC:         movl    $dsrc+64, %eax
6153 ; LINUX-32-PIC-NEXT:    ret
6154
6155 ; LINUX-64-PIC: bat03:
6156 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
6157 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6158 ; LINUX-64-PIC-NEXT:    ret
6159
6160 ; DARWIN-32-STATIC: _bat03:
6161 ; DARWIN-32-STATIC:     movl    $_dsrc+64, %eax
6162 ; DARWIN-32-STATIC-NEXT:        ret
6163
6164 ; DARWIN-32-DYNAMIC: _bat03:
6165 ; DARWIN-32-DYNAMIC:    movl    $_dsrc+64, %eax
6166 ; DARWIN-32-DYNAMIC-NEXT:       ret
6167
6168 ; DARWIN-32-PIC: _bat03:
6169 ; DARWIN-32-PIC:        call    "L94$pb"
6170 ; DARWIN-32-PIC-NEXT: "L94$pb":
6171 ; DARWIN-32-PIC-NEXT:   popl    %eax
6172 ; DARWIN-32-PIC-NEXT:   leal    _dsrc+64-"L94$pb"(%eax), %eax
6173 ; DARWIN-32-PIC-NEXT:   ret
6174
6175 ; DARWIN-64-STATIC: _bat03:
6176 ; DARWIN-64-STATIC:     leaq    _dsrc+64(%rip), %rax
6177 ; DARWIN-64-STATIC-NEXT:        ret
6178
6179 ; DARWIN-64-DYNAMIC: _bat03:
6180 ; DARWIN-64-DYNAMIC:    leaq    _dsrc+64(%rip), %rax
6181 ; DARWIN-64-DYNAMIC-NEXT:       ret
6182
6183 ; DARWIN-64-PIC: _bat03:
6184 ; DARWIN-64-PIC:        leaq    _dsrc+64(%rip), %rax
6185 ; DARWIN-64-PIC-NEXT:   ret
6186 }
6187
6188 define i8* @bat04() nounwind {
6189 entry:
6190         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
6191 ; LINUX-64-STATIC: bat04:
6192 ; LINUX-64-STATIC: movl    $ddst+64, %eax
6193 ; LINUX-64-STATIC: ret
6194
6195 ; LINUX-32-STATIC: bat04:
6196 ; LINUX-32-STATIC:      movl    $ddst+64, %eax
6197 ; LINUX-32-STATIC-NEXT:         ret
6198
6199 ; LINUX-32-PIC: bat04:
6200 ; LINUX-32-PIC:         movl    $ddst+64, %eax
6201 ; LINUX-32-PIC-NEXT:    ret
6202
6203 ; LINUX-64-PIC: bat04:
6204 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
6205 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6206 ; LINUX-64-PIC-NEXT:    ret
6207
6208 ; DARWIN-32-STATIC: _bat04:
6209 ; DARWIN-32-STATIC:     movl    $_ddst+64, %eax
6210 ; DARWIN-32-STATIC-NEXT:        ret
6211
6212 ; DARWIN-32-DYNAMIC: _bat04:
6213 ; DARWIN-32-DYNAMIC:    movl    $_ddst+64, %eax
6214 ; DARWIN-32-DYNAMIC-NEXT:       ret
6215
6216 ; DARWIN-32-PIC: _bat04:
6217 ; DARWIN-32-PIC:        call    "L95$pb"
6218 ; DARWIN-32-PIC-NEXT: "L95$pb":
6219 ; DARWIN-32-PIC-NEXT:   popl    %eax
6220 ; DARWIN-32-PIC-NEXT:   leal    _ddst+64-"L95$pb"(%eax), %eax
6221 ; DARWIN-32-PIC-NEXT:   ret
6222
6223 ; DARWIN-64-STATIC: _bat04:
6224 ; DARWIN-64-STATIC:     leaq    _ddst+64(%rip), %rax
6225 ; DARWIN-64-STATIC-NEXT:        ret
6226
6227 ; DARWIN-64-DYNAMIC: _bat04:
6228 ; DARWIN-64-DYNAMIC:    leaq    _ddst+64(%rip), %rax
6229 ; DARWIN-64-DYNAMIC-NEXT:       ret
6230
6231 ; DARWIN-64-PIC: _bat04:
6232 ; DARWIN-64-PIC:        leaq    _ddst+64(%rip), %rax
6233 ; DARWIN-64-PIC-NEXT:   ret
6234 }
6235
6236 define i8* @bat05() nounwind {
6237 entry:
6238         %0 = load i32** @dptr, align 8
6239         %1 = getelementptr i32* %0, i64 16
6240         %2 = bitcast i32* %1 to i8*
6241         ret i8* %2
6242 ; LINUX-64-STATIC: bat05:
6243 ; LINUX-64-STATIC: movq    dptr(%rip), %rax
6244 ; LINUX-64-STATIC: addq    $64, %rax
6245 ; LINUX-64-STATIC: ret
6246
6247 ; LINUX-32-STATIC: bat05:
6248 ; LINUX-32-STATIC:      movl    dptr, %eax
6249 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6250 ; LINUX-32-STATIC-NEXT:         ret
6251
6252 ; LINUX-32-PIC: bat05:
6253 ; LINUX-32-PIC:         movl    dptr, %eax
6254 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6255 ; LINUX-32-PIC-NEXT:    ret
6256
6257 ; LINUX-64-PIC: bat05:
6258 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rax
6259 ; LINUX-64-PIC-NEXT:    movq    (%rax), %rax
6260 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6261 ; LINUX-64-PIC-NEXT:    ret
6262
6263 ; DARWIN-32-STATIC: _bat05:
6264 ; DARWIN-32-STATIC:     movl    _dptr, %eax
6265 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6266 ; DARWIN-32-STATIC-NEXT:        ret
6267
6268 ; DARWIN-32-DYNAMIC: _bat05:
6269 ; DARWIN-32-DYNAMIC:    movl    _dptr, %eax
6270 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6271 ; DARWIN-32-DYNAMIC-NEXT:       ret
6272
6273 ; DARWIN-32-PIC: _bat05:
6274 ; DARWIN-32-PIC:        call    "L96$pb"
6275 ; DARWIN-32-PIC-NEXT: "L96$pb":
6276 ; DARWIN-32-PIC-NEXT:   popl    %eax
6277 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L96$pb"(%eax), %eax
6278 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6279 ; DARWIN-32-PIC-NEXT:   ret
6280
6281 ; DARWIN-64-STATIC: _bat05:
6282 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
6283 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6284 ; DARWIN-64-STATIC-NEXT:        ret
6285
6286 ; DARWIN-64-DYNAMIC: _bat05:
6287 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
6288 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6289 ; DARWIN-64-DYNAMIC-NEXT:       ret
6290
6291 ; DARWIN-64-PIC: _bat05:
6292 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
6293 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6294 ; DARWIN-64-PIC-NEXT:   ret
6295 }
6296
6297 define i8* @bat06() nounwind {
6298 entry:
6299         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
6300 ; LINUX-64-STATIC: bat06:
6301 ; LINUX-64-STATIC: movl    $lsrc+64, %eax
6302 ; LINUX-64-STATIC: ret
6303
6304 ; LINUX-32-STATIC: bat06:
6305 ; LINUX-32-STATIC:      movl    $lsrc+64, %eax
6306 ; LINUX-32-STATIC-NEXT:         ret
6307
6308 ; LINUX-32-PIC: bat06:
6309 ; LINUX-32-PIC:         movl    $lsrc+64, %eax
6310 ; LINUX-32-PIC-NEXT:    ret
6311
6312 ; LINUX-64-PIC: bat06:
6313 ; LINUX-64-PIC:         leaq    lsrc+64(%rip), %rax
6314 ; LINUX-64-PIC-NEXT:    ret
6315
6316 ; DARWIN-32-STATIC: _bat06:
6317 ; DARWIN-32-STATIC:     movl    $_lsrc+64, %eax
6318 ; DARWIN-32-STATIC-NEXT:        ret
6319
6320 ; DARWIN-32-DYNAMIC: _bat06:
6321 ; DARWIN-32-DYNAMIC:    movl    $_lsrc+64, %eax
6322 ; DARWIN-32-DYNAMIC-NEXT:       ret
6323
6324 ; DARWIN-32-PIC: _bat06:
6325 ; DARWIN-32-PIC:        call    "L97$pb"
6326 ; DARWIN-32-PIC-NEXT: "L97$pb":
6327 ; DARWIN-32-PIC-NEXT:   popl    %eax
6328 ; DARWIN-32-PIC-NEXT:   leal    _lsrc+64-"L97$pb"(%eax), %eax
6329 ; DARWIN-32-PIC-NEXT:   ret
6330
6331 ; DARWIN-64-STATIC: _bat06:
6332 ; DARWIN-64-STATIC:     leaq    _lsrc+64(%rip), %rax
6333 ; DARWIN-64-STATIC-NEXT:        ret
6334
6335 ; DARWIN-64-DYNAMIC: _bat06:
6336 ; DARWIN-64-DYNAMIC:    leaq    _lsrc+64(%rip), %rax
6337 ; DARWIN-64-DYNAMIC-NEXT:       ret
6338
6339 ; DARWIN-64-PIC: _bat06:
6340 ; DARWIN-64-PIC:        leaq    _lsrc+64(%rip), %rax
6341 ; DARWIN-64-PIC-NEXT:   ret
6342 }
6343
6344 define i8* @bat07() nounwind {
6345 entry:
6346         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
6347 ; LINUX-64-STATIC: bat07:
6348 ; LINUX-64-STATIC: movl    $ldst+64, %eax
6349 ; LINUX-64-STATIC: ret
6350
6351 ; LINUX-32-STATIC: bat07:
6352 ; LINUX-32-STATIC:      movl    $ldst+64, %eax
6353 ; LINUX-32-STATIC-NEXT:         ret
6354
6355 ; LINUX-32-PIC: bat07:
6356 ; LINUX-32-PIC:         movl    $ldst+64, %eax
6357 ; LINUX-32-PIC-NEXT:    ret
6358
6359 ; LINUX-64-PIC: bat07:
6360 ; LINUX-64-PIC:         leaq    ldst+64(%rip), %rax
6361 ; LINUX-64-PIC-NEXT:    ret
6362
6363 ; DARWIN-32-STATIC: _bat07:
6364 ; DARWIN-32-STATIC:     movl    $_ldst+64, %eax
6365 ; DARWIN-32-STATIC-NEXT:        ret
6366
6367 ; DARWIN-32-DYNAMIC: _bat07:
6368 ; DARWIN-32-DYNAMIC:    movl    $_ldst+64, %eax
6369 ; DARWIN-32-DYNAMIC-NEXT:       ret
6370
6371 ; DARWIN-32-PIC: _bat07:
6372 ; DARWIN-32-PIC:        call    "L98$pb"
6373 ; DARWIN-32-PIC-NEXT: "L98$pb":
6374 ; DARWIN-32-PIC-NEXT:   popl    %eax
6375 ; DARWIN-32-PIC-NEXT:   leal    _ldst+64-"L98$pb"(%eax), %eax
6376 ; DARWIN-32-PIC-NEXT:   ret
6377
6378 ; DARWIN-64-STATIC: _bat07:
6379 ; DARWIN-64-STATIC:     leaq    _ldst+64(%rip), %rax
6380 ; DARWIN-64-STATIC-NEXT:        ret
6381
6382 ; DARWIN-64-DYNAMIC: _bat07:
6383 ; DARWIN-64-DYNAMIC:    leaq    _ldst+64(%rip), %rax
6384 ; DARWIN-64-DYNAMIC-NEXT:       ret
6385
6386 ; DARWIN-64-PIC: _bat07:
6387 ; DARWIN-64-PIC:        leaq    _ldst+64(%rip), %rax
6388 ; DARWIN-64-PIC-NEXT:   ret
6389 }
6390
6391 define i8* @bat08() nounwind {
6392 entry:
6393         %0 = load i32** @lptr, align 8
6394         %1 = getelementptr i32* %0, i64 16
6395         %2 = bitcast i32* %1 to i8*
6396         ret i8* %2
6397 ; LINUX-64-STATIC: bat08:
6398 ; LINUX-64-STATIC: movq    lptr(%rip), %rax
6399 ; LINUX-64-STATIC: addq    $64, %rax
6400 ; LINUX-64-STATIC: ret
6401
6402 ; LINUX-32-STATIC: bat08:
6403 ; LINUX-32-STATIC:      movl    lptr, %eax
6404 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6405 ; LINUX-32-STATIC-NEXT:         ret
6406
6407 ; LINUX-32-PIC: bat08:
6408 ; LINUX-32-PIC:         movl    lptr, %eax
6409 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6410 ; LINUX-32-PIC-NEXT:    ret
6411
6412 ; LINUX-64-PIC: bat08:
6413 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
6414 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6415 ; LINUX-64-PIC-NEXT:    ret
6416
6417 ; DARWIN-32-STATIC: _bat08:
6418 ; DARWIN-32-STATIC:     movl    _lptr, %eax
6419 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6420 ; DARWIN-32-STATIC-NEXT:        ret
6421
6422 ; DARWIN-32-DYNAMIC: _bat08:
6423 ; DARWIN-32-DYNAMIC:    movl    _lptr, %eax
6424 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6425 ; DARWIN-32-DYNAMIC-NEXT:       ret
6426
6427 ; DARWIN-32-PIC: _bat08:
6428 ; DARWIN-32-PIC:        call    "L99$pb"
6429 ; DARWIN-32-PIC-NEXT: "L99$pb":
6430 ; DARWIN-32-PIC-NEXT:   popl    %eax
6431 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L99$pb"(%eax), %eax
6432 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6433 ; DARWIN-32-PIC-NEXT:   ret
6434
6435 ; DARWIN-64-STATIC: _bat08:
6436 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
6437 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6438 ; DARWIN-64-STATIC-NEXT:        ret
6439
6440 ; DARWIN-64-DYNAMIC: _bat08:
6441 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
6442 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6443 ; DARWIN-64-DYNAMIC-NEXT:       ret
6444
6445 ; DARWIN-64-PIC: _bat08:
6446 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
6447 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6448 ; DARWIN-64-PIC-NEXT:   ret
6449 }
6450
6451 define i8* @bam00() nounwind {
6452 entry:
6453         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
6454 ; LINUX-64-STATIC: bam00:
6455 ; LINUX-64-STATIC: movl    $src+262144, %eax
6456 ; LINUX-64-STATIC: ret
6457
6458 ; LINUX-32-STATIC: bam00:
6459 ; LINUX-32-STATIC:      movl    $src+262144, %eax
6460 ; LINUX-32-STATIC-NEXT:         ret
6461
6462 ; LINUX-32-PIC: bam00:
6463 ; LINUX-32-PIC:         movl    $src+262144, %eax
6464 ; LINUX-32-PIC-NEXT:    ret
6465
6466 ; LINUX-64-PIC: bam00:
6467 ; LINUX-64-PIC:         movl    $262144, %eax
6468 ; LINUX-64-PIC-NEXT:    addq    src@GOTPCREL(%rip), %rax
6469 ; LINUX-64-PIC-NEXT:    ret
6470
6471 ; DARWIN-32-STATIC: _bam00:
6472 ; DARWIN-32-STATIC:     movl    $_src+262144, %eax
6473 ; DARWIN-32-STATIC-NEXT:        ret
6474
6475 ; DARWIN-32-DYNAMIC: _bam00:
6476 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6477 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_src$non_lazy_ptr, %eax
6478 ; DARWIN-32-DYNAMIC-NEXT:       ret
6479
6480 ; DARWIN-32-PIC: _bam00:
6481 ; DARWIN-32-PIC:        call    "L100$pb"
6482 ; DARWIN-32-PIC-NEXT: "L100$pb":
6483 ; DARWIN-32-PIC-NEXT:   popl    %ecx
6484 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6485 ; DARWIN-32-PIC-NEXT:   addl    L_src$non_lazy_ptr-"L100$pb"(%ecx), %eax
6486 ; DARWIN-32-PIC-NEXT:   ret
6487
6488 ; DARWIN-64-STATIC: _bam00:
6489 ; DARWIN-64-STATIC:     movl    $262144, %eax
6490 ; DARWIN-64-STATIC-NEXT:        addq    _src@GOTPCREL(%rip), %rax
6491 ; DARWIN-64-STATIC-NEXT:        ret
6492
6493 ; DARWIN-64-DYNAMIC: _bam00:
6494 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6495 ; DARWIN-64-DYNAMIC-NEXT:       addq    _src@GOTPCREL(%rip), %rax
6496 ; DARWIN-64-DYNAMIC-NEXT:       ret
6497
6498 ; DARWIN-64-PIC: _bam00:
6499 ; DARWIN-64-PIC:        movl    $262144, %eax
6500 ; DARWIN-64-PIC-NEXT:   addq    _src@GOTPCREL(%rip), %rax
6501 ; DARWIN-64-PIC-NEXT:   ret
6502 }
6503
6504 define i8* @bam01() nounwind {
6505 entry:
6506         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
6507 ; LINUX-64-STATIC: bam01:
6508 ; LINUX-64-STATIC: movl    $dst+262144, %eax
6509 ; LINUX-64-STATIC: ret
6510
6511 ; LINUX-32-STATIC: bam01:
6512 ; LINUX-32-STATIC:      movl    $dst+262144, %eax
6513 ; LINUX-32-STATIC-NEXT:         ret
6514
6515 ; LINUX-32-PIC: bam01:
6516 ; LINUX-32-PIC:         movl    $dst+262144, %eax
6517 ; LINUX-32-PIC-NEXT:    ret
6518
6519 ; LINUX-64-PIC: bam01:
6520 ; LINUX-64-PIC:         movl    $262144, %eax
6521 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), %rax
6522 ; LINUX-64-PIC-NEXT:    ret
6523
6524 ; DARWIN-32-STATIC: _bam01:
6525 ; DARWIN-32-STATIC:     movl    $_dst+262144, %eax
6526 ; DARWIN-32-STATIC-NEXT:        ret
6527
6528 ; DARWIN-32-DYNAMIC: _bam01:
6529 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6530 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, %eax
6531 ; DARWIN-32-DYNAMIC-NEXT:       ret
6532
6533 ; DARWIN-32-PIC: _bam01:
6534 ; DARWIN-32-PIC:        call    "L101$pb"
6535 ; DARWIN-32-PIC-NEXT: "L101$pb":
6536 ; DARWIN-32-PIC-NEXT:   popl    %ecx
6537 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6538 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-"L101$pb"(%ecx), %eax
6539 ; DARWIN-32-PIC-NEXT:   ret
6540
6541 ; DARWIN-64-STATIC: _bam01:
6542 ; DARWIN-64-STATIC:     movl    $262144, %eax
6543 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), %rax
6544 ; DARWIN-64-STATIC-NEXT:        ret
6545
6546 ; DARWIN-64-DYNAMIC: _bam01:
6547 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6548 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), %rax
6549 ; DARWIN-64-DYNAMIC-NEXT:       ret
6550
6551 ; DARWIN-64-PIC: _bam01:
6552 ; DARWIN-64-PIC:        movl    $262144, %eax
6553 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), %rax
6554 ; DARWIN-64-PIC-NEXT:   ret
6555 }
6556
6557 define i8* @bxm01() nounwind {
6558 entry:
6559         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
6560 ; LINUX-64-STATIC: bxm01:
6561 ; LINUX-64-STATIC: movl    $xdst+262144, %eax
6562 ; LINUX-64-STATIC: ret
6563
6564 ; LINUX-32-STATIC: bxm01:
6565 ; LINUX-32-STATIC:      movl    $xdst+262144, %eax
6566 ; LINUX-32-STATIC-NEXT:         ret
6567
6568 ; LINUX-32-PIC: bxm01:
6569 ; LINUX-32-PIC:         movl    $xdst+262144, %eax
6570 ; LINUX-32-PIC-NEXT:    ret
6571
6572 ; LINUX-64-PIC: bxm01:
6573 ; LINUX-64-PIC:         movl    $262144, %eax
6574 ; LINUX-64-PIC-NEXT:    addq    xdst@GOTPCREL(%rip), %rax
6575 ; LINUX-64-PIC-NEXT:    ret
6576
6577 ; DARWIN-32-STATIC: _bxm01:
6578 ; DARWIN-32-STATIC:     movl    $_xdst+262144, %eax
6579 ; DARWIN-32-STATIC-NEXT:        ret
6580
6581 ; DARWIN-32-DYNAMIC: _bxm01:
6582 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6583 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_xdst$non_lazy_ptr, %eax
6584 ; DARWIN-32-DYNAMIC-NEXT:       ret
6585
6586 ; DARWIN-32-PIC: _bxm01:
6587 ; DARWIN-32-PIC:        call    "L102$pb"
6588 ; DARWIN-32-PIC-NEXT: "L102$pb":
6589 ; DARWIN-32-PIC-NEXT:   popl    %ecx
6590 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6591 ; DARWIN-32-PIC-NEXT:   addl    L_xdst$non_lazy_ptr-"L102$pb"(%ecx), %eax
6592 ; DARWIN-32-PIC-NEXT:   ret
6593
6594 ; DARWIN-64-STATIC: _bxm01:
6595 ; DARWIN-64-STATIC:     movl    $262144, %eax
6596 ; DARWIN-64-STATIC-NEXT:        addq    _xdst@GOTPCREL(%rip), %rax
6597 ; DARWIN-64-STATIC-NEXT:        ret
6598
6599 ; DARWIN-64-DYNAMIC: _bxm01:
6600 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6601 ; DARWIN-64-DYNAMIC-NEXT:       addq    _xdst@GOTPCREL(%rip), %rax
6602 ; DARWIN-64-DYNAMIC-NEXT:       ret
6603
6604 ; DARWIN-64-PIC: _bxm01:
6605 ; DARWIN-64-PIC:        movl    $262144, %eax
6606 ; DARWIN-64-PIC-NEXT:   addq    _xdst@GOTPCREL(%rip), %rax
6607 ; DARWIN-64-PIC-NEXT:   ret
6608 }
6609
6610 define i8* @bam02() nounwind {
6611 entry:
6612         %0 = load i32** @ptr, align 8
6613         %1 = getelementptr i32* %0, i64 65536
6614         %2 = bitcast i32* %1 to i8*
6615         ret i8* %2
6616 ; LINUX-64-STATIC: bam02:
6617 ; LINUX-64-STATIC: movl    $262144, %eax
6618 ; LINUX-64-STATIC: addq    ptr(%rip), %rax
6619 ; LINUX-64-STATIC: ret
6620
6621 ; LINUX-32-STATIC: bam02:
6622 ; LINUX-32-STATIC:      movl    $262144, %eax
6623 ; LINUX-32-STATIC-NEXT:         addl    ptr, %eax
6624 ; LINUX-32-STATIC-NEXT:         ret
6625
6626 ; LINUX-32-PIC: bam02:
6627 ; LINUX-32-PIC:         movl    $262144, %eax
6628 ; LINUX-32-PIC-NEXT:    addl    ptr, %eax
6629 ; LINUX-32-PIC-NEXT:    ret
6630
6631 ; LINUX-64-PIC: bam02:
6632 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rcx
6633 ; LINUX-64-PIC-NEXT:    movl    $262144, %eax
6634 ; LINUX-64-PIC-NEXT:    addq    (%rcx), %rax
6635 ; LINUX-64-PIC-NEXT:    ret
6636
6637 ; DARWIN-32-STATIC: _bam02:
6638 ; DARWIN-32-STATIC:     movl    $262144, %eax
6639 ; DARWIN-32-STATIC-NEXT:        addl    _ptr, %eax
6640 ; DARWIN-32-STATIC-NEXT:        ret
6641
6642 ; DARWIN-32-DYNAMIC: _bam02:
6643 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %ecx
6644 ; DARWIN-32-DYNAMIC-NEXT:       movl    $262144, %eax
6645 ; DARWIN-32-DYNAMIC-NEXT:       addl    (%ecx), %eax
6646 ; DARWIN-32-DYNAMIC-NEXT:       ret
6647
6648 ; DARWIN-32-PIC: _bam02:
6649 ; DARWIN-32-PIC:        call    "L103$pb"
6650 ; DARWIN-32-PIC-NEXT: "L103$pb":
6651 ; DARWIN-32-PIC-NEXT:   popl    %eax
6652 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L103$pb"(%eax), %ecx
6653 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6654 ; DARWIN-32-PIC-NEXT:   addl    (%ecx), %eax
6655 ; DARWIN-32-PIC-NEXT:   ret
6656
6657 ; DARWIN-64-STATIC: _bam02:
6658 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rcx
6659 ; DARWIN-64-STATIC-NEXT:        movl    $262144, %eax
6660 ; DARWIN-64-STATIC-NEXT:        addq    (%rcx), %rax
6661 ; DARWIN-64-STATIC-NEXT:        ret
6662
6663 ; DARWIN-64-DYNAMIC: _bam02:
6664 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rcx
6665 ; DARWIN-64-DYNAMIC-NEXT:       movl    $262144, %eax
6666 ; DARWIN-64-DYNAMIC-NEXT:       addq    (%rcx), %rax
6667 ; DARWIN-64-DYNAMIC-NEXT:       ret
6668
6669 ; DARWIN-64-PIC: _bam02:
6670 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rcx
6671 ; DARWIN-64-PIC-NEXT:   movl    $262144, %eax
6672 ; DARWIN-64-PIC-NEXT:   addq    (%rcx), %rax
6673 ; DARWIN-64-PIC-NEXT:   ret
6674 }
6675
6676 define i8* @bam03() nounwind {
6677 entry:
6678         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
6679 ; LINUX-64-STATIC: bam03:
6680 ; LINUX-64-STATIC: movl    $dsrc+262144, %eax
6681 ; LINUX-64-STATIC: ret
6682
6683 ; LINUX-32-STATIC: bam03:
6684 ; LINUX-32-STATIC:      movl    $dsrc+262144, %eax
6685 ; LINUX-32-STATIC-NEXT:         ret
6686
6687 ; LINUX-32-PIC: bam03:
6688 ; LINUX-32-PIC:         movl    $dsrc+262144, %eax
6689 ; LINUX-32-PIC-NEXT:    ret
6690
6691 ; LINUX-64-PIC: bam03:
6692 ; LINUX-64-PIC:         movl    $262144, %eax
6693 ; LINUX-64-PIC-NEXT:    addq    dsrc@GOTPCREL(%rip), %rax
6694 ; LINUX-64-PIC-NEXT:    ret
6695
6696 ; DARWIN-32-STATIC: _bam03:
6697 ; DARWIN-32-STATIC:     movl    $_dsrc+262144, %eax
6698 ; DARWIN-32-STATIC-NEXT:        ret
6699
6700 ; DARWIN-32-DYNAMIC: _bam03:
6701 ; DARWIN-32-DYNAMIC:    movl    $_dsrc+262144, %eax
6702 ; DARWIN-32-DYNAMIC-NEXT:       ret
6703
6704 ; DARWIN-32-PIC: _bam03:
6705 ; DARWIN-32-PIC:        call    "L104$pb"
6706 ; DARWIN-32-PIC-NEXT: "L104$pb":
6707 ; DARWIN-32-PIC-NEXT:   popl    %eax
6708 ; DARWIN-32-PIC-NEXT:   leal    _dsrc+262144-"L104$pb"(%eax), %eax
6709 ; DARWIN-32-PIC-NEXT:   ret
6710
6711 ; DARWIN-64-STATIC: _bam03:
6712 ; DARWIN-64-STATIC:     leaq    _dsrc+262144(%rip), %rax
6713 ; DARWIN-64-STATIC-NEXT:        ret
6714
6715 ; DARWIN-64-DYNAMIC: _bam03:
6716 ; DARWIN-64-DYNAMIC:    leaq    _dsrc+262144(%rip), %rax
6717 ; DARWIN-64-DYNAMIC-NEXT:       ret
6718
6719 ; DARWIN-64-PIC: _bam03:
6720 ; DARWIN-64-PIC:        leaq    _dsrc+262144(%rip), %rax
6721 ; DARWIN-64-PIC-NEXT:   ret
6722 }
6723
6724 define i8* @bam04() nounwind {
6725 entry:
6726         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
6727 ; LINUX-64-STATIC: bam04:
6728 ; LINUX-64-STATIC: movl    $ddst+262144, %eax
6729 ; LINUX-64-STATIC: ret
6730
6731 ; LINUX-32-STATIC: bam04:
6732 ; LINUX-32-STATIC:      movl    $ddst+262144, %eax
6733 ; LINUX-32-STATIC-NEXT:         ret
6734
6735 ; LINUX-32-PIC: bam04:
6736 ; LINUX-32-PIC:         movl    $ddst+262144, %eax
6737 ; LINUX-32-PIC-NEXT:    ret
6738
6739 ; LINUX-64-PIC: bam04:
6740 ; LINUX-64-PIC:         movl    $262144, %eax
6741 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), %rax
6742 ; LINUX-64-PIC-NEXT:    ret
6743
6744 ; DARWIN-32-STATIC: _bam04:
6745 ; DARWIN-32-STATIC:     movl    $_ddst+262144, %eax
6746 ; DARWIN-32-STATIC-NEXT:        ret
6747
6748 ; DARWIN-32-DYNAMIC: _bam04:
6749 ; DARWIN-32-DYNAMIC:    movl    $_ddst+262144, %eax
6750 ; DARWIN-32-DYNAMIC-NEXT:       ret
6751
6752 ; DARWIN-32-PIC: _bam04:
6753 ; DARWIN-32-PIC:        call    "L105$pb"
6754 ; DARWIN-32-PIC-NEXT: "L105$pb":
6755 ; DARWIN-32-PIC-NEXT:   popl    %eax
6756 ; DARWIN-32-PIC-NEXT:   leal    _ddst+262144-"L105$pb"(%eax), %eax
6757 ; DARWIN-32-PIC-NEXT:   ret
6758
6759 ; DARWIN-64-STATIC: _bam04:
6760 ; DARWIN-64-STATIC:     leaq    _ddst+262144(%rip), %rax
6761 ; DARWIN-64-STATIC-NEXT:        ret
6762
6763 ; DARWIN-64-DYNAMIC: _bam04:
6764 ; DARWIN-64-DYNAMIC:    leaq    _ddst+262144(%rip), %rax
6765 ; DARWIN-64-DYNAMIC-NEXT:       ret
6766
6767 ; DARWIN-64-PIC: _bam04:
6768 ; DARWIN-64-PIC:        leaq    _ddst+262144(%rip), %rax
6769 ; DARWIN-64-PIC-NEXT:   ret
6770 }
6771
6772 define i8* @bam05() nounwind {
6773 entry:
6774         %0 = load i32** @dptr, align 8
6775         %1 = getelementptr i32* %0, i64 65536
6776         %2 = bitcast i32* %1 to i8*
6777         ret i8* %2
6778 ; LINUX-64-STATIC: bam05:
6779 ; LINUX-64-STATIC: movl    $262144, %eax
6780 ; LINUX-64-STATIC: addq    dptr(%rip), %rax
6781 ; LINUX-64-STATIC: ret
6782
6783 ; LINUX-32-STATIC: bam05:
6784 ; LINUX-32-STATIC:      movl    $262144, %eax
6785 ; LINUX-32-STATIC-NEXT:         addl    dptr, %eax
6786 ; LINUX-32-STATIC-NEXT:         ret
6787
6788 ; LINUX-32-PIC: bam05:
6789 ; LINUX-32-PIC:         movl    $262144, %eax
6790 ; LINUX-32-PIC-NEXT:    addl    dptr, %eax
6791 ; LINUX-32-PIC-NEXT:    ret
6792
6793 ; LINUX-64-PIC: bam05:
6794 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rcx
6795 ; LINUX-64-PIC-NEXT:    movl    $262144, %eax
6796 ; LINUX-64-PIC-NEXT:    addq    (%rcx), %rax
6797 ; LINUX-64-PIC-NEXT:    ret
6798
6799 ; DARWIN-32-STATIC: _bam05:
6800 ; DARWIN-32-STATIC:     movl    $262144, %eax
6801 ; DARWIN-32-STATIC-NEXT:        addl    _dptr, %eax
6802 ; DARWIN-32-STATIC-NEXT:        ret
6803
6804 ; DARWIN-32-DYNAMIC: _bam05:
6805 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6806 ; DARWIN-32-DYNAMIC-NEXT:       addl    _dptr, %eax
6807 ; DARWIN-32-DYNAMIC-NEXT:       ret
6808
6809 ; DARWIN-32-PIC: _bam05:
6810 ; DARWIN-32-PIC:        call    "L106$pb"
6811 ; DARWIN-32-PIC-NEXT: "L106$pb":
6812 ; DARWIN-32-PIC-NEXT:   popl    %ecx
6813 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6814 ; DARWIN-32-PIC-NEXT:   addl    _dptr-"L106$pb"(%ecx), %eax
6815 ; DARWIN-32-PIC-NEXT:   ret
6816
6817 ; DARWIN-64-STATIC: _bam05:
6818 ; DARWIN-64-STATIC:     movl    $262144, %eax
6819 ; DARWIN-64-STATIC-NEXT:        addq    _dptr(%rip), %rax
6820 ; DARWIN-64-STATIC-NEXT:        ret
6821
6822 ; DARWIN-64-DYNAMIC: _bam05:
6823 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6824 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dptr(%rip), %rax
6825 ; DARWIN-64-DYNAMIC-NEXT:       ret
6826
6827 ; DARWIN-64-PIC: _bam05:
6828 ; DARWIN-64-PIC:        movl    $262144, %eax
6829 ; DARWIN-64-PIC-NEXT:   addq    _dptr(%rip), %rax
6830 ; DARWIN-64-PIC-NEXT:   ret
6831 }
6832
6833 define i8* @bam06() nounwind {
6834 entry:
6835         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
6836 ; LINUX-64-STATIC: bam06:
6837 ; LINUX-64-STATIC: movl    $lsrc+262144, %eax
6838 ; LINUX-64-STATIC: ret
6839
6840 ; LINUX-32-STATIC: bam06:
6841 ; LINUX-32-STATIC:      movl    $lsrc+262144, %eax
6842 ; LINUX-32-STATIC-NEXT:         ret
6843
6844 ; LINUX-32-PIC: bam06:
6845 ; LINUX-32-PIC:         movl    $lsrc+262144, %eax
6846 ; LINUX-32-PIC-NEXT:    ret
6847
6848 ; LINUX-64-PIC: bam06:
6849 ; LINUX-64-PIC:         leaq    lsrc+262144(%rip), %rax
6850 ; LINUX-64-PIC-NEXT:    ret
6851
6852 ; DARWIN-32-STATIC: _bam06:
6853 ; DARWIN-32-STATIC:     movl    $_lsrc+262144, %eax
6854 ; DARWIN-32-STATIC-NEXT:        ret
6855
6856 ; DARWIN-32-DYNAMIC: _bam06:
6857 ; DARWIN-32-DYNAMIC:    movl    $_lsrc+262144, %eax
6858 ; DARWIN-32-DYNAMIC-NEXT:       ret
6859
6860 ; DARWIN-32-PIC: _bam06:
6861 ; DARWIN-32-PIC:        call    "L107$pb"
6862 ; DARWIN-32-PIC-NEXT: "L107$pb":
6863 ; DARWIN-32-PIC-NEXT:   popl    %eax
6864 ; DARWIN-32-PIC-NEXT:   leal    _lsrc+262144-"L107$pb"(%eax), %eax
6865 ; DARWIN-32-PIC-NEXT:   ret
6866
6867 ; DARWIN-64-STATIC: _bam06:
6868 ; DARWIN-64-STATIC:     leaq    _lsrc+262144(%rip), %rax
6869 ; DARWIN-64-STATIC-NEXT:        ret
6870
6871 ; DARWIN-64-DYNAMIC: _bam06:
6872 ; DARWIN-64-DYNAMIC:    leaq    _lsrc+262144(%rip), %rax
6873 ; DARWIN-64-DYNAMIC-NEXT:       ret
6874
6875 ; DARWIN-64-PIC: _bam06:
6876 ; DARWIN-64-PIC:        leaq    _lsrc+262144(%rip), %rax
6877 ; DARWIN-64-PIC-NEXT:   ret
6878 }
6879
6880 define i8* @bam07() nounwind {
6881 entry:
6882         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
6883 ; LINUX-64-STATIC: bam07:
6884 ; LINUX-64-STATIC: movl    $ldst+262144, %eax
6885 ; LINUX-64-STATIC: ret
6886
6887 ; LINUX-32-STATIC: bam07:
6888 ; LINUX-32-STATIC:      movl    $ldst+262144, %eax
6889 ; LINUX-32-STATIC-NEXT:         ret
6890
6891 ; LINUX-32-PIC: bam07:
6892 ; LINUX-32-PIC:         movl    $ldst+262144, %eax
6893 ; LINUX-32-PIC-NEXT:    ret
6894
6895 ; LINUX-64-PIC: bam07:
6896 ; LINUX-64-PIC:         leaq    ldst+262144(%rip), %rax
6897 ; LINUX-64-PIC-NEXT:    ret
6898
6899 ; DARWIN-32-STATIC: _bam07:
6900 ; DARWIN-32-STATIC:     movl    $_ldst+262144, %eax
6901 ; DARWIN-32-STATIC-NEXT:        ret
6902
6903 ; DARWIN-32-DYNAMIC: _bam07:
6904 ; DARWIN-32-DYNAMIC:    movl    $_ldst+262144, %eax
6905 ; DARWIN-32-DYNAMIC-NEXT:       ret
6906
6907 ; DARWIN-32-PIC: _bam07:
6908 ; DARWIN-32-PIC:        call    "L108$pb"
6909 ; DARWIN-32-PIC-NEXT: "L108$pb":
6910 ; DARWIN-32-PIC-NEXT:   popl    %eax
6911 ; DARWIN-32-PIC-NEXT:   leal    _ldst+262144-"L108$pb"(%eax), %eax
6912 ; DARWIN-32-PIC-NEXT:   ret
6913
6914 ; DARWIN-64-STATIC: _bam07:
6915 ; DARWIN-64-STATIC:     leaq    _ldst+262144(%rip), %rax
6916 ; DARWIN-64-STATIC-NEXT:        ret
6917
6918 ; DARWIN-64-DYNAMIC: _bam07:
6919 ; DARWIN-64-DYNAMIC:    leaq    _ldst+262144(%rip), %rax
6920 ; DARWIN-64-DYNAMIC-NEXT:       ret
6921
6922 ; DARWIN-64-PIC: _bam07:
6923 ; DARWIN-64-PIC:        leaq    _ldst+262144(%rip), %rax
6924 ; DARWIN-64-PIC-NEXT:   ret
6925 }
6926
6927 define i8* @bam08() nounwind {
6928 entry:
6929         %0 = load i32** @lptr, align 8
6930         %1 = getelementptr i32* %0, i64 65536
6931         %2 = bitcast i32* %1 to i8*
6932         ret i8* %2
6933 ; LINUX-64-STATIC: bam08:
6934 ; LINUX-64-STATIC: movl    $262144, %eax
6935 ; LINUX-64-STATIC: addq    lptr(%rip), %rax
6936 ; LINUX-64-STATIC: ret
6937
6938 ; LINUX-32-STATIC: bam08:
6939 ; LINUX-32-STATIC:      movl    $262144, %eax
6940 ; LINUX-32-STATIC-NEXT:         addl    lptr, %eax
6941 ; LINUX-32-STATIC-NEXT:         ret
6942
6943 ; LINUX-32-PIC: bam08:
6944 ; LINUX-32-PIC:         movl    $262144, %eax
6945 ; LINUX-32-PIC-NEXT:    addl    lptr, %eax
6946 ; LINUX-32-PIC-NEXT:    ret
6947
6948 ; LINUX-64-PIC: bam08:
6949 ; LINUX-64-PIC:         movl    $262144, %eax
6950 ; LINUX-64-PIC-NEXT:    addq    lptr(%rip), %rax
6951 ; LINUX-64-PIC-NEXT:    ret
6952
6953 ; DARWIN-32-STATIC: _bam08:
6954 ; DARWIN-32-STATIC:     movl    $262144, %eax
6955 ; DARWIN-32-STATIC-NEXT:        addl    _lptr, %eax
6956 ; DARWIN-32-STATIC-NEXT:        ret
6957
6958 ; DARWIN-32-DYNAMIC: _bam08:
6959 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6960 ; DARWIN-32-DYNAMIC-NEXT:       addl    _lptr, %eax
6961 ; DARWIN-32-DYNAMIC-NEXT:       ret
6962
6963 ; DARWIN-32-PIC: _bam08:
6964 ; DARWIN-32-PIC:        call    "L109$pb"
6965 ; DARWIN-32-PIC-NEXT: "L109$pb":
6966 ; DARWIN-32-PIC-NEXT:   popl    %ecx
6967 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6968 ; DARWIN-32-PIC-NEXT:   addl    _lptr-"L109$pb"(%ecx), %eax
6969 ; DARWIN-32-PIC-NEXT:   ret
6970
6971 ; DARWIN-64-STATIC: _bam08:
6972 ; DARWIN-64-STATIC:     movl    $262144, %eax
6973 ; DARWIN-64-STATIC-NEXT:        addq    _lptr(%rip), %rax
6974 ; DARWIN-64-STATIC-NEXT:        ret
6975
6976 ; DARWIN-64-DYNAMIC: _bam08:
6977 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6978 ; DARWIN-64-DYNAMIC-NEXT:       addq    _lptr(%rip), %rax
6979 ; DARWIN-64-DYNAMIC-NEXT:       ret
6980
6981 ; DARWIN-64-PIC: _bam08:
6982 ; DARWIN-64-PIC:        movl    $262144, %eax
6983 ; DARWIN-64-PIC-NEXT:   addq    _lptr(%rip), %rax
6984 ; DARWIN-64-PIC-NEXT:   ret
6985 }
6986
6987 define i8* @cat00(i64 %i) nounwind {
6988 entry:
6989         %0 = add i64 %i, 16
6990         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
6991         %2 = bitcast i32* %1 to i8*
6992         ret i8* %2
6993 ; LINUX-64-STATIC: cat00:
6994 ; LINUX-64-STATIC: leaq    src+64(,%rdi,4), %rax
6995 ; LINUX-64-STATIC: ret
6996
6997 ; LINUX-32-STATIC: cat00:
6998 ; LINUX-32-STATIC:      movl    4(%esp), %eax
6999 ; LINUX-32-STATIC-NEXT:         leal    src+64(,%eax,4), %eax
7000 ; LINUX-32-STATIC-NEXT:         ret
7001
7002 ; LINUX-32-PIC: cat00:
7003 ; LINUX-32-PIC:         movl    4(%esp), %eax
7004 ; LINUX-32-PIC-NEXT:    leal    src+64(,%eax,4), %eax
7005 ; LINUX-32-PIC-NEXT:    ret
7006
7007 ; LINUX-64-PIC: cat00:
7008 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
7009 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7010 ; LINUX-64-PIC-NEXT:    ret
7011
7012 ; DARWIN-32-STATIC: _cat00:
7013 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7014 ; DARWIN-32-STATIC-NEXT:        leal    _src+64(,%eax,4), %eax
7015 ; DARWIN-32-STATIC-NEXT:        ret
7016
7017 ; DARWIN-32-DYNAMIC: _cat00:
7018 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7019 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, %ecx
7020 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%ecx,%eax,4), %eax
7021 ; DARWIN-32-DYNAMIC-NEXT:       ret
7022
7023 ; DARWIN-32-PIC: _cat00:
7024 ; DARWIN-32-PIC:        call    "L110$pb"
7025 ; DARWIN-32-PIC-NEXT: "L110$pb":
7026 ; DARWIN-32-PIC-NEXT:   popl    %eax
7027 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7028 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L110$pb"(%eax), %eax
7029 ; DARWIN-32-PIC-NEXT:   leal    64(%eax,%ecx,4), %eax
7030 ; DARWIN-32-PIC-NEXT:   ret
7031
7032 ; DARWIN-64-STATIC: _cat00:
7033 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
7034 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7035 ; DARWIN-64-STATIC-NEXT:        ret
7036
7037 ; DARWIN-64-DYNAMIC: _cat00:
7038 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
7039 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7040 ; DARWIN-64-DYNAMIC-NEXT:       ret
7041
7042 ; DARWIN-64-PIC: _cat00:
7043 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
7044 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7045 ; DARWIN-64-PIC-NEXT:   ret
7046 }
7047
7048 define i8* @cxt00(i64 %i) nounwind {
7049 entry:
7050         %0 = add i64 %i, 16
7051         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7052         %2 = bitcast i32* %1 to i8*
7053         ret i8* %2
7054 ; LINUX-64-STATIC: cxt00:
7055 ; LINUX-64-STATIC: leaq    xsrc+64(,%rdi,4), %rax
7056 ; LINUX-64-STATIC: ret
7057
7058 ; LINUX-32-STATIC: cxt00:
7059 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7060 ; LINUX-32-STATIC-NEXT:         leal    xsrc+64(,%eax,4), %eax
7061 ; LINUX-32-STATIC-NEXT:         ret
7062
7063 ; LINUX-32-PIC: cxt00:
7064 ; LINUX-32-PIC:         movl    4(%esp), %eax
7065 ; LINUX-32-PIC-NEXT:    leal    xsrc+64(,%eax,4), %eax
7066 ; LINUX-32-PIC-NEXT:    ret
7067
7068 ; LINUX-64-PIC: cxt00:
7069 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
7070 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7071 ; LINUX-64-PIC-NEXT:    ret
7072
7073 ; DARWIN-32-STATIC: _cxt00:
7074 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7075 ; DARWIN-32-STATIC-NEXT:        leal    _xsrc+64(,%eax,4), %eax
7076 ; DARWIN-32-STATIC-NEXT:        ret
7077
7078 ; DARWIN-32-DYNAMIC: _cxt00:
7079 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7080 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, %ecx
7081 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%ecx,%eax,4), %eax
7082 ; DARWIN-32-DYNAMIC-NEXT:       ret
7083
7084 ; DARWIN-32-PIC: _cxt00:
7085 ; DARWIN-32-PIC:        call    "L111$pb"
7086 ; DARWIN-32-PIC-NEXT: "L111$pb":
7087 ; DARWIN-32-PIC-NEXT:   popl    %eax
7088 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7089 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L111$pb"(%eax), %eax
7090 ; DARWIN-32-PIC-NEXT:   leal    64(%eax,%ecx,4), %eax
7091 ; DARWIN-32-PIC-NEXT:   ret
7092
7093 ; DARWIN-64-STATIC: _cxt00:
7094 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
7095 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7096 ; DARWIN-64-STATIC-NEXT:        ret
7097
7098 ; DARWIN-64-DYNAMIC: _cxt00:
7099 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
7100 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7101 ; DARWIN-64-DYNAMIC-NEXT:       ret
7102
7103 ; DARWIN-64-PIC: _cxt00:
7104 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
7105 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7106 ; DARWIN-64-PIC-NEXT:   ret
7107 }
7108
7109 define i8* @cat01(i64 %i) nounwind {
7110 entry:
7111         %0 = add i64 %i, 16
7112         %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7113         %2 = bitcast i32* %1 to i8*
7114         ret i8* %2
7115 ; LINUX-64-STATIC: cat01:
7116 ; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), %rax
7117 ; LINUX-64-STATIC: ret
7118
7119 ; LINUX-32-STATIC: cat01:
7120 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7121 ; LINUX-32-STATIC-NEXT:         leal    dst+64(,%eax,4), %eax
7122 ; LINUX-32-STATIC-NEXT:         ret
7123
7124 ; LINUX-32-PIC: cat01:
7125 ; LINUX-32-PIC:         movl    4(%esp), %eax
7126 ; LINUX-32-PIC-NEXT:    leal    dst+64(,%eax,4), %eax
7127 ; LINUX-32-PIC-NEXT:    ret
7128
7129 ; LINUX-64-PIC: cat01:
7130 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
7131 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7132 ; LINUX-64-PIC-NEXT:    ret
7133
7134 ; DARWIN-32-STATIC: _cat01:
7135 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7136 ; DARWIN-32-STATIC-NEXT:        leal    _dst+64(,%eax,4), %eax
7137 ; DARWIN-32-STATIC-NEXT:        ret
7138
7139 ; DARWIN-32-DYNAMIC: _cat01:
7140 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7141 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %ecx
7142 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%ecx,%eax,4), %eax
7143 ; DARWIN-32-DYNAMIC-NEXT:       ret
7144
7145 ; DARWIN-32-PIC: _cat01:
7146 ; DARWIN-32-PIC:        call    "L112$pb"
7147 ; DARWIN-32-PIC-NEXT: "L112$pb":
7148 ; DARWIN-32-PIC-NEXT:   popl    %eax
7149 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7150 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L112$pb"(%eax), %eax
7151 ; DARWIN-32-PIC-NEXT:   leal    64(%eax,%ecx,4), %eax
7152 ; DARWIN-32-PIC-NEXT:   ret
7153
7154 ; DARWIN-64-STATIC: _cat01:
7155 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
7156 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7157 ; DARWIN-64-STATIC-NEXT:        ret
7158
7159 ; DARWIN-64-DYNAMIC: _cat01:
7160 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
7161 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7162 ; DARWIN-64-DYNAMIC-NEXT:       ret
7163
7164 ; DARWIN-64-PIC: _cat01:
7165 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
7166 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7167 ; DARWIN-64-PIC-NEXT:   ret
7168 }
7169
7170 define i8* @cxt01(i64 %i) nounwind {
7171 entry:
7172         %0 = add i64 %i, 16
7173         %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7174         %2 = bitcast i32* %1 to i8*
7175         ret i8* %2
7176 ; LINUX-64-STATIC: cxt01:
7177 ; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), %rax
7178 ; LINUX-64-STATIC: ret
7179
7180 ; LINUX-32-STATIC: cxt01:
7181 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7182 ; LINUX-32-STATIC-NEXT:         leal    xdst+64(,%eax,4), %eax
7183 ; LINUX-32-STATIC-NEXT:         ret
7184
7185 ; LINUX-32-PIC: cxt01:
7186 ; LINUX-32-PIC:         movl    4(%esp), %eax
7187 ; LINUX-32-PIC-NEXT:    leal    xdst+64(,%eax,4), %eax
7188 ; LINUX-32-PIC-NEXT:    ret
7189
7190 ; LINUX-64-PIC: cxt01:
7191 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
7192 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7193 ; LINUX-64-PIC-NEXT:    ret
7194
7195 ; DARWIN-32-STATIC: _cxt01:
7196 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7197 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+64(,%eax,4), %eax
7198 ; DARWIN-32-STATIC-NEXT:        ret
7199
7200 ; DARWIN-32-DYNAMIC: _cxt01:
7201 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7202 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, %ecx
7203 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%ecx,%eax,4), %eax
7204 ; DARWIN-32-DYNAMIC-NEXT:       ret
7205
7206 ; DARWIN-32-PIC: _cxt01:
7207 ; DARWIN-32-PIC:        call    "L113$pb"
7208 ; DARWIN-32-PIC-NEXT: "L113$pb":
7209 ; DARWIN-32-PIC-NEXT:   popl    %eax
7210 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7211 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L113$pb"(%eax), %eax
7212 ; DARWIN-32-PIC-NEXT:   leal    64(%eax,%ecx,4), %eax
7213 ; DARWIN-32-PIC-NEXT:   ret
7214
7215 ; DARWIN-64-STATIC: _cxt01:
7216 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
7217 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7218 ; DARWIN-64-STATIC-NEXT:        ret
7219
7220 ; DARWIN-64-DYNAMIC: _cxt01:
7221 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
7222 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7223 ; DARWIN-64-DYNAMIC-NEXT:       ret
7224
7225 ; DARWIN-64-PIC: _cxt01:
7226 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
7227 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7228 ; DARWIN-64-PIC-NEXT:   ret
7229 }
7230
7231 define i8* @cat02(i64 %i) nounwind {
7232 entry:
7233         %0 = load i32** @ptr, align 8
7234         %1 = add i64 %i, 16
7235         %2 = getelementptr i32* %0, i64 %1
7236         %3 = bitcast i32* %2 to i8*
7237         ret i8* %3
7238 ; LINUX-64-STATIC: cat02:
7239 ; LINUX-64-STATIC: movq    ptr(%rip), %rax
7240 ; LINUX-64-STATIC: leaq    64(%rax,%rdi,4), %rax
7241 ; LINUX-64-STATIC: ret
7242
7243 ; LINUX-32-STATIC: cat02:
7244 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7245 ; LINUX-32-STATIC-NEXT:         movl    ptr, %ecx
7246 ; LINUX-32-STATIC-NEXT:         leal    64(%ecx,%eax,4), %eax
7247 ; LINUX-32-STATIC-NEXT:         ret
7248
7249 ; LINUX-32-PIC: cat02:
7250 ; LINUX-32-PIC:         movl    4(%esp), %eax
7251 ; LINUX-32-PIC-NEXT:    movl    ptr, %ecx
7252 ; LINUX-32-PIC-NEXT:    leal    64(%ecx,%eax,4), %eax
7253 ; LINUX-32-PIC-NEXT:    ret
7254
7255 ; LINUX-64-PIC: cat02:
7256 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rax
7257 ; LINUX-64-PIC-NEXT:    movq    (%rax), %rax
7258 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7259 ; LINUX-64-PIC-NEXT:    ret
7260
7261 ; DARWIN-32-STATIC: _cat02:
7262 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7263 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %ecx
7264 ; DARWIN-32-STATIC-NEXT:        leal    64(%ecx,%eax,4), %eax
7265 ; DARWIN-32-STATIC-NEXT:        ret
7266
7267 ; DARWIN-32-DYNAMIC: _cat02:
7268 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %eax
7269 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%eax), %eax
7270 ; DARWIN-32-DYNAMIC-NEXT:       movl    4(%esp), %ecx
7271 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%eax,%ecx,4), %eax
7272 ; DARWIN-32-DYNAMIC-NEXT:       ret
7273
7274 ; DARWIN-32-PIC: _cat02:
7275 ; DARWIN-32-PIC:        call    "L114$pb"
7276 ; DARWIN-32-PIC-NEXT: "L114$pb":
7277 ; DARWIN-32-PIC-NEXT:   popl    %eax
7278 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L114$pb"(%eax), %eax
7279 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
7280 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7281 ; DARWIN-32-PIC-NEXT:   leal    64(%eax,%ecx,4), %eax
7282 ; DARWIN-32-PIC-NEXT:   ret
7283
7284 ; DARWIN-64-STATIC: _cat02:
7285 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rax
7286 ; DARWIN-64-STATIC-NEXT:        movq    (%rax), %rax
7287 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7288 ; DARWIN-64-STATIC-NEXT:        ret
7289
7290 ; DARWIN-64-DYNAMIC: _cat02:
7291 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rax
7292 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rax), %rax
7293 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7294 ; DARWIN-64-DYNAMIC-NEXT:       ret
7295
7296 ; DARWIN-64-PIC: _cat02:
7297 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rax
7298 ; DARWIN-64-PIC-NEXT:   movq    (%rax), %rax
7299 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7300 ; DARWIN-64-PIC-NEXT:   ret
7301 }
7302
7303 define i8* @cat03(i64 %i) nounwind {
7304 entry:
7305         %0 = add i64 %i, 16
7306         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7307         %2 = bitcast i32* %1 to i8*
7308         ret i8* %2
7309 ; LINUX-64-STATIC: cat03:
7310 ; LINUX-64-STATIC: leaq    dsrc+64(,%rdi,4), %rax
7311 ; LINUX-64-STATIC: ret
7312
7313 ; LINUX-32-STATIC: cat03:
7314 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7315 ; LINUX-32-STATIC-NEXT:         leal    dsrc+64(,%eax,4), %eax
7316 ; LINUX-32-STATIC-NEXT:         ret
7317
7318 ; LINUX-32-PIC: cat03:
7319 ; LINUX-32-PIC:         movl    4(%esp), %eax
7320 ; LINUX-32-PIC-NEXT:    leal    dsrc+64(,%eax,4), %eax
7321 ; LINUX-32-PIC-NEXT:    ret
7322
7323 ; LINUX-64-PIC: cat03:
7324 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
7325 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7326 ; LINUX-64-PIC-NEXT:    ret
7327
7328 ; DARWIN-32-STATIC: _cat03:
7329 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7330 ; DARWIN-32-STATIC-NEXT:        leal    _dsrc+64(,%eax,4), %eax
7331 ; DARWIN-32-STATIC-NEXT:        ret
7332
7333 ; DARWIN-32-DYNAMIC: _cat03:
7334 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7335 ; DARWIN-32-DYNAMIC-NEXT:       leal    _dsrc+64(,%eax,4), %eax
7336 ; DARWIN-32-DYNAMIC-NEXT:       ret
7337
7338 ; DARWIN-32-PIC: _cat03:
7339 ; DARWIN-32-PIC:        call    "L115$pb"
7340 ; DARWIN-32-PIC-NEXT: "L115$pb":
7341 ; DARWIN-32-PIC-NEXT:   popl    %eax
7342 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7343 ; DARWIN-32-PIC-NEXT:   leal    _dsrc+64-"L115$pb"(%eax,%ecx,4), %eax
7344 ; DARWIN-32-PIC-NEXT:   ret
7345
7346 ; DARWIN-64-STATIC: _cat03:
7347 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
7348 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7349 ; DARWIN-64-STATIC-NEXT:        ret
7350
7351 ; DARWIN-64-DYNAMIC: _cat03:
7352 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
7353 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7354 ; DARWIN-64-DYNAMIC-NEXT:       ret
7355
7356 ; DARWIN-64-PIC: _cat03:
7357 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
7358 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7359 ; DARWIN-64-PIC-NEXT:   ret
7360 }
7361
7362 define i8* @cat04(i64 %i) nounwind {
7363 entry:
7364         %0 = add i64 %i, 16
7365         %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
7366         %2 = bitcast i32* %1 to i8*
7367         ret i8* %2
7368 ; LINUX-64-STATIC: cat04:
7369 ; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), %rax
7370 ; LINUX-64-STATIC: ret
7371
7372 ; LINUX-32-STATIC: cat04:
7373 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7374 ; LINUX-32-STATIC-NEXT:         leal    ddst+64(,%eax,4), %eax
7375 ; LINUX-32-STATIC-NEXT:         ret
7376
7377 ; LINUX-32-PIC: cat04:
7378 ; LINUX-32-PIC:         movl    4(%esp), %eax
7379 ; LINUX-32-PIC-NEXT:    leal    ddst+64(,%eax,4), %eax
7380 ; LINUX-32-PIC-NEXT:    ret
7381
7382 ; LINUX-64-PIC: cat04:
7383 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
7384 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7385 ; LINUX-64-PIC-NEXT:    ret
7386
7387 ; DARWIN-32-STATIC: _cat04:
7388 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7389 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+64(,%eax,4), %eax
7390 ; DARWIN-32-STATIC-NEXT:        ret
7391
7392 ; DARWIN-32-DYNAMIC: _cat04:
7393 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7394 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+64(,%eax,4), %eax
7395 ; DARWIN-32-DYNAMIC-NEXT:       ret
7396
7397 ; DARWIN-32-PIC: _cat04:
7398 ; DARWIN-32-PIC:        call    "L116$pb"
7399 ; DARWIN-32-PIC-NEXT: "L116$pb":
7400 ; DARWIN-32-PIC-NEXT:   popl    %eax
7401 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7402 ; DARWIN-32-PIC-NEXT:   leal    _ddst+64-"L116$pb"(%eax,%ecx,4), %eax
7403 ; DARWIN-32-PIC-NEXT:   ret
7404
7405 ; DARWIN-64-STATIC: _cat04:
7406 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
7407 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7408 ; DARWIN-64-STATIC-NEXT:        ret
7409
7410 ; DARWIN-64-DYNAMIC: _cat04:
7411 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
7412 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7413 ; DARWIN-64-DYNAMIC-NEXT:       ret
7414
7415 ; DARWIN-64-PIC: _cat04:
7416 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
7417 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7418 ; DARWIN-64-PIC-NEXT:   ret
7419 }
7420
7421 define i8* @cat05(i64 %i) nounwind {
7422 entry:
7423         %0 = load i32** @dptr, align 8
7424         %1 = add i64 %i, 16
7425         %2 = getelementptr i32* %0, i64 %1
7426         %3 = bitcast i32* %2 to i8*
7427         ret i8* %3
7428 ; LINUX-64-STATIC: cat05:
7429 ; LINUX-64-STATIC: movq    dptr(%rip), %rax
7430 ; LINUX-64-STATIC: leaq    64(%rax,%rdi,4), %rax
7431 ; LINUX-64-STATIC: ret
7432
7433 ; LINUX-32-STATIC: cat05:
7434 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7435 ; LINUX-32-STATIC-NEXT:         movl    dptr, %ecx
7436 ; LINUX-32-STATIC-NEXT:         leal    64(%ecx,%eax,4), %eax
7437 ; LINUX-32-STATIC-NEXT:         ret
7438
7439 ; LINUX-32-PIC: cat05:
7440 ; LINUX-32-PIC:         movl    4(%esp), %eax
7441 ; LINUX-32-PIC-NEXT:    movl    dptr, %ecx
7442 ; LINUX-32-PIC-NEXT:    leal    64(%ecx,%eax,4), %eax
7443 ; LINUX-32-PIC-NEXT:    ret
7444
7445 ; LINUX-64-PIC: cat05:
7446 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rax
7447 ; LINUX-64-PIC-NEXT:    movq    (%rax), %rax
7448 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7449 ; LINUX-64-PIC-NEXT:    ret
7450
7451 ; DARWIN-32-STATIC: _cat05:
7452 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7453 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, %ecx
7454 ; DARWIN-32-STATIC-NEXT:        leal    64(%ecx,%eax,4), %eax
7455 ; DARWIN-32-STATIC-NEXT:        ret
7456
7457 ; DARWIN-32-DYNAMIC: _cat05:
7458 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7459 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, %ecx
7460 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%ecx,%eax,4), %eax
7461 ; DARWIN-32-DYNAMIC-NEXT:       ret
7462
7463 ; DARWIN-32-PIC: _cat05:
7464 ; DARWIN-32-PIC:        call    "L117$pb"
7465 ; DARWIN-32-PIC-NEXT: "L117$pb":
7466 ; DARWIN-32-PIC-NEXT:   popl    %eax
7467 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7468 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L117$pb"(%eax), %eax
7469 ; DARWIN-32-PIC-NEXT:   leal    64(%eax,%ecx,4), %eax
7470 ; DARWIN-32-PIC-NEXT:   ret
7471
7472 ; DARWIN-64-STATIC: _cat05:
7473 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
7474 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7475 ; DARWIN-64-STATIC-NEXT:        ret
7476
7477 ; DARWIN-64-DYNAMIC: _cat05:
7478 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
7479 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7480 ; DARWIN-64-DYNAMIC-NEXT:       ret
7481
7482 ; DARWIN-64-PIC: _cat05:
7483 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
7484 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7485 ; DARWIN-64-PIC-NEXT:   ret
7486 }
7487
7488 define i8* @cat06(i64 %i) nounwind {
7489 entry:
7490         %0 = add i64 %i, 16
7491         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
7492         %2 = bitcast i32* %1 to i8*
7493         ret i8* %2
7494 ; LINUX-64-STATIC: cat06:
7495 ; LINUX-64-STATIC: leaq    lsrc+64(,%rdi,4), %rax
7496 ; LINUX-64-STATIC: ret
7497
7498 ; LINUX-32-STATIC: cat06:
7499 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7500 ; LINUX-32-STATIC-NEXT:         leal    lsrc+64(,%eax,4), %eax
7501 ; LINUX-32-STATIC-NEXT:         ret
7502
7503 ; LINUX-32-PIC: cat06:
7504 ; LINUX-32-PIC:         movl    4(%esp), %eax
7505 ; LINUX-32-PIC-NEXT:    leal    lsrc+64(,%eax,4), %eax
7506 ; LINUX-32-PIC-NEXT:    ret
7507
7508 ; LINUX-64-PIC: cat06:
7509 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
7510 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7511 ; LINUX-64-PIC-NEXT:    ret
7512
7513 ; DARWIN-32-STATIC: _cat06:
7514 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7515 ; DARWIN-32-STATIC-NEXT:        leal    _lsrc+64(,%eax,4), %eax
7516 ; DARWIN-32-STATIC-NEXT:        ret
7517
7518 ; DARWIN-32-DYNAMIC: _cat06:
7519 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7520 ; DARWIN-32-DYNAMIC-NEXT:       leal    _lsrc+64(,%eax,4), %eax
7521 ; DARWIN-32-DYNAMIC-NEXT:       ret
7522
7523 ; DARWIN-32-PIC: _cat06:
7524 ; DARWIN-32-PIC:        call    "L118$pb"
7525 ; DARWIN-32-PIC-NEXT: "L118$pb":
7526 ; DARWIN-32-PIC-NEXT:   popl    %eax
7527 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7528 ; DARWIN-32-PIC-NEXT:   leal    _lsrc+64-"L118$pb"(%eax,%ecx,4), %eax
7529 ; DARWIN-32-PIC-NEXT:   ret
7530
7531 ; DARWIN-64-STATIC: _cat06:
7532 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
7533 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7534 ; DARWIN-64-STATIC-NEXT:        ret
7535
7536 ; DARWIN-64-DYNAMIC: _cat06:
7537 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
7538 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7539 ; DARWIN-64-DYNAMIC-NEXT:       ret
7540
7541 ; DARWIN-64-PIC: _cat06:
7542 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
7543 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7544 ; DARWIN-64-PIC-NEXT:   ret
7545 }
7546
7547 define i8* @cat07(i64 %i) nounwind {
7548 entry:
7549         %0 = add i64 %i, 16
7550         %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
7551         %2 = bitcast i32* %1 to i8*
7552         ret i8* %2
7553 ; LINUX-64-STATIC: cat07:
7554 ; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), %rax
7555 ; LINUX-64-STATIC: ret
7556
7557 ; LINUX-32-STATIC: cat07:
7558 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7559 ; LINUX-32-STATIC-NEXT:         leal    ldst+64(,%eax,4), %eax
7560 ; LINUX-32-STATIC-NEXT:         ret
7561
7562 ; LINUX-32-PIC: cat07:
7563 ; LINUX-32-PIC:         movl    4(%esp), %eax
7564 ; LINUX-32-PIC-NEXT:    leal    ldst+64(,%eax,4), %eax
7565 ; LINUX-32-PIC-NEXT:    ret
7566
7567 ; LINUX-64-PIC: cat07:
7568 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
7569 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7570 ; LINUX-64-PIC-NEXT:    ret
7571
7572 ; DARWIN-32-STATIC: _cat07:
7573 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7574 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+64(,%eax,4), %eax
7575 ; DARWIN-32-STATIC-NEXT:        ret
7576
7577 ; DARWIN-32-DYNAMIC: _cat07:
7578 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7579 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+64(,%eax,4), %eax
7580 ; DARWIN-32-DYNAMIC-NEXT:       ret
7581
7582 ; DARWIN-32-PIC: _cat07:
7583 ; DARWIN-32-PIC:        call    "L119$pb"
7584 ; DARWIN-32-PIC-NEXT: "L119$pb":
7585 ; DARWIN-32-PIC-NEXT:   popl    %eax
7586 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7587 ; DARWIN-32-PIC-NEXT:   leal    _ldst+64-"L119$pb"(%eax,%ecx,4), %eax
7588 ; DARWIN-32-PIC-NEXT:   ret
7589
7590 ; DARWIN-64-STATIC: _cat07:
7591 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
7592 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7593 ; DARWIN-64-STATIC-NEXT:        ret
7594
7595 ; DARWIN-64-DYNAMIC: _cat07:
7596 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
7597 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7598 ; DARWIN-64-DYNAMIC-NEXT:       ret
7599
7600 ; DARWIN-64-PIC: _cat07:
7601 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
7602 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7603 ; DARWIN-64-PIC-NEXT:   ret
7604 }
7605
7606 define i8* @cat08(i64 %i) nounwind {
7607 entry:
7608         %0 = load i32** @lptr, align 8
7609         %1 = add i64 %i, 16
7610         %2 = getelementptr i32* %0, i64 %1
7611         %3 = bitcast i32* %2 to i8*
7612         ret i8* %3
7613 ; LINUX-64-STATIC: cat08:
7614 ; LINUX-64-STATIC: movq    lptr(%rip), %rax
7615 ; LINUX-64-STATIC: leaq    64(%rax,%rdi,4), %rax
7616 ; LINUX-64-STATIC: ret
7617
7618 ; LINUX-32-STATIC: cat08:
7619 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7620 ; LINUX-32-STATIC-NEXT:         movl    lptr, %ecx
7621 ; LINUX-32-STATIC-NEXT:         leal    64(%ecx,%eax,4), %eax
7622 ; LINUX-32-STATIC-NEXT:         ret
7623
7624 ; LINUX-32-PIC: cat08:
7625 ; LINUX-32-PIC:         movl    4(%esp), %eax
7626 ; LINUX-32-PIC-NEXT:    movl    lptr, %ecx
7627 ; LINUX-32-PIC-NEXT:    leal    64(%ecx,%eax,4), %eax
7628 ; LINUX-32-PIC-NEXT:    ret
7629
7630 ; LINUX-64-PIC: cat08:
7631 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
7632 ; LINUX-64-PIC-NEXT:    leaq    64(%rax,%rdi,4), %rax
7633 ; LINUX-64-PIC-NEXT:    ret
7634
7635 ; DARWIN-32-STATIC: _cat08:
7636 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7637 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, %ecx
7638 ; DARWIN-32-STATIC-NEXT:        leal    64(%ecx,%eax,4), %eax
7639 ; DARWIN-32-STATIC-NEXT:        ret
7640
7641 ; DARWIN-32-DYNAMIC: _cat08:
7642 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7643 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, %ecx
7644 ; DARWIN-32-DYNAMIC-NEXT:       leal    64(%ecx,%eax,4), %eax
7645 ; DARWIN-32-DYNAMIC-NEXT:       ret
7646
7647 ; DARWIN-32-PIC: _cat08:
7648 ; DARWIN-32-PIC:        call    "L120$pb"
7649 ; DARWIN-32-PIC-NEXT: "L120$pb":
7650 ; DARWIN-32-PIC-NEXT:   popl    %eax
7651 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7652 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L120$pb"(%eax), %eax
7653 ; DARWIN-32-PIC-NEXT:   leal    64(%eax,%ecx,4), %eax
7654 ; DARWIN-32-PIC-NEXT:   ret
7655
7656 ; DARWIN-64-STATIC: _cat08:
7657 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
7658 ; DARWIN-64-STATIC-NEXT:        leaq    64(%rax,%rdi,4), %rax
7659 ; DARWIN-64-STATIC-NEXT:        ret
7660
7661 ; DARWIN-64-DYNAMIC: _cat08:
7662 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
7663 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64(%rax,%rdi,4), %rax
7664 ; DARWIN-64-DYNAMIC-NEXT:       ret
7665
7666 ; DARWIN-64-PIC: _cat08:
7667 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
7668 ; DARWIN-64-PIC-NEXT:   leaq    64(%rax,%rdi,4), %rax
7669 ; DARWIN-64-PIC-NEXT:   ret
7670 }
7671
7672 define i8* @cam00(i64 %i) nounwind {
7673 entry:
7674         %0 = add i64 %i, 65536
7675         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
7676         %2 = bitcast i32* %1 to i8*
7677         ret i8* %2
7678 ; LINUX-64-STATIC: cam00:
7679 ; LINUX-64-STATIC: leaq    src+262144(,%rdi,4), %rax
7680 ; LINUX-64-STATIC: ret
7681
7682 ; LINUX-32-STATIC: cam00:
7683 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7684 ; LINUX-32-STATIC-NEXT:         leal    src+262144(,%eax,4), %eax
7685 ; LINUX-32-STATIC-NEXT:         ret
7686
7687 ; LINUX-32-PIC: cam00:
7688 ; LINUX-32-PIC:         movl    4(%esp), %eax
7689 ; LINUX-32-PIC-NEXT:    leal    src+262144(,%eax,4), %eax
7690 ; LINUX-32-PIC-NEXT:    ret
7691
7692 ; LINUX-64-PIC: cam00:
7693 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
7694 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
7695 ; LINUX-64-PIC-NEXT:    ret
7696
7697 ; DARWIN-32-STATIC: _cam00:
7698 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7699 ; DARWIN-32-STATIC-NEXT:        leal    _src+262144(,%eax,4), %eax
7700 ; DARWIN-32-STATIC-NEXT:        ret
7701
7702 ; DARWIN-32-DYNAMIC: _cam00:
7703 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7704 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, %ecx
7705 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144(%ecx,%eax,4), %eax
7706 ; DARWIN-32-DYNAMIC-NEXT:       ret
7707
7708 ; DARWIN-32-PIC: _cam00:
7709 ; DARWIN-32-PIC:        call    "L121$pb"
7710 ; DARWIN-32-PIC-NEXT: "L121$pb":
7711 ; DARWIN-32-PIC-NEXT:   popl    %eax
7712 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7713 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-"L121$pb"(%eax), %eax
7714 ; DARWIN-32-PIC-NEXT:   leal    262144(%eax,%ecx,4), %eax
7715 ; DARWIN-32-PIC-NEXT:   ret
7716
7717 ; DARWIN-64-STATIC: _cam00:
7718 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
7719 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
7720 ; DARWIN-64-STATIC-NEXT:        ret
7721
7722 ; DARWIN-64-DYNAMIC: _cam00:
7723 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
7724 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
7725 ; DARWIN-64-DYNAMIC-NEXT:       ret
7726
7727 ; DARWIN-64-PIC: _cam00:
7728 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
7729 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
7730 ; DARWIN-64-PIC-NEXT:   ret
7731 }
7732
7733 define i8* @cxm00(i64 %i) nounwind {
7734 entry:
7735         %0 = add i64 %i, 65536
7736         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7737         %2 = bitcast i32* %1 to i8*
7738         ret i8* %2
7739 ; LINUX-64-STATIC: cxm00:
7740 ; LINUX-64-STATIC: leaq    xsrc+262144(,%rdi,4), %rax
7741 ; LINUX-64-STATIC: ret
7742
7743 ; LINUX-32-STATIC: cxm00:
7744 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7745 ; LINUX-32-STATIC-NEXT:         leal    xsrc+262144(,%eax,4), %eax
7746 ; LINUX-32-STATIC-NEXT:         ret
7747
7748 ; LINUX-32-PIC: cxm00:
7749 ; LINUX-32-PIC:         movl    4(%esp), %eax
7750 ; LINUX-32-PIC-NEXT:    leal    xsrc+262144(,%eax,4), %eax
7751 ; LINUX-32-PIC-NEXT:    ret
7752
7753 ; LINUX-64-PIC: cxm00:
7754 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
7755 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
7756 ; LINUX-64-PIC-NEXT:    ret
7757
7758 ; DARWIN-32-STATIC: _cxm00:
7759 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7760 ; DARWIN-32-STATIC-NEXT:        leal    _xsrc+262144(,%eax,4), %eax
7761 ; DARWIN-32-STATIC-NEXT:        ret
7762
7763 ; DARWIN-32-DYNAMIC: _cxm00:
7764 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7765 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, %ecx
7766 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144(%ecx,%eax,4), %eax
7767 ; DARWIN-32-DYNAMIC-NEXT:       ret
7768
7769 ; DARWIN-32-PIC: _cxm00:
7770 ; DARWIN-32-PIC:        call    "L122$pb"
7771 ; DARWIN-32-PIC-NEXT: "L122$pb":
7772 ; DARWIN-32-PIC-NEXT:   popl    %eax
7773 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7774 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-"L122$pb"(%eax), %eax
7775 ; DARWIN-32-PIC-NEXT:   leal    262144(%eax,%ecx,4), %eax
7776 ; DARWIN-32-PIC-NEXT:   ret
7777
7778 ; DARWIN-64-STATIC: _cxm00:
7779 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
7780 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
7781 ; DARWIN-64-STATIC-NEXT:        ret
7782
7783 ; DARWIN-64-DYNAMIC: _cxm00:
7784 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
7785 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
7786 ; DARWIN-64-DYNAMIC-NEXT:       ret
7787
7788 ; DARWIN-64-PIC: _cxm00:
7789 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
7790 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
7791 ; DARWIN-64-PIC-NEXT:   ret
7792 }
7793
7794 define i8* @cam01(i64 %i) nounwind {
7795 entry:
7796         %0 = add i64 %i, 65536
7797         %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7798         %2 = bitcast i32* %1 to i8*
7799         ret i8* %2
7800 ; LINUX-64-STATIC: cam01:
7801 ; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), %rax
7802 ; LINUX-64-STATIC: ret
7803
7804 ; LINUX-32-STATIC: cam01:
7805 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7806 ; LINUX-32-STATIC-NEXT:         leal    dst+262144(,%eax,4), %eax
7807 ; LINUX-32-STATIC-NEXT:         ret
7808
7809 ; LINUX-32-PIC: cam01:
7810 ; LINUX-32-PIC:         movl    4(%esp), %eax
7811 ; LINUX-32-PIC-NEXT:    leal    dst+262144(,%eax,4), %eax
7812 ; LINUX-32-PIC-NEXT:    ret
7813
7814 ; LINUX-64-PIC: cam01:
7815 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
7816 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
7817 ; LINUX-64-PIC-NEXT:    ret
7818
7819 ; DARWIN-32-STATIC: _cam01:
7820 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7821 ; DARWIN-32-STATIC-NEXT:        leal    _dst+262144(,%eax,4), %eax
7822 ; DARWIN-32-STATIC-NEXT:        ret
7823
7824 ; DARWIN-32-DYNAMIC: _cam01:
7825 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7826 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, %ecx
7827 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144(%ecx,%eax,4), %eax
7828 ; DARWIN-32-DYNAMIC-NEXT:       ret
7829
7830 ; DARWIN-32-PIC: _cam01:
7831 ; DARWIN-32-PIC:        call    "L123$pb"
7832 ; DARWIN-32-PIC-NEXT: "L123$pb":
7833 ; DARWIN-32-PIC-NEXT:   popl    %eax
7834 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7835 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-"L123$pb"(%eax), %eax
7836 ; DARWIN-32-PIC-NEXT:   leal    262144(%eax,%ecx,4), %eax
7837 ; DARWIN-32-PIC-NEXT:   ret
7838
7839 ; DARWIN-64-STATIC: _cam01:
7840 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
7841 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
7842 ; DARWIN-64-STATIC-NEXT:        ret
7843
7844 ; DARWIN-64-DYNAMIC: _cam01:
7845 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
7846 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
7847 ; DARWIN-64-DYNAMIC-NEXT:       ret
7848
7849 ; DARWIN-64-PIC: _cam01:
7850 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
7851 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
7852 ; DARWIN-64-PIC-NEXT:   ret
7853 }
7854
7855 define i8* @cxm01(i64 %i) nounwind {
7856 entry:
7857         %0 = add i64 %i, 65536
7858         %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7859         %2 = bitcast i32* %1 to i8*
7860         ret i8* %2
7861 ; LINUX-64-STATIC: cxm01:
7862 ; LINUX-64-STATIC: leaq    xdst+262144(,%rdi,4), %rax
7863 ; LINUX-64-STATIC: ret
7864
7865 ; LINUX-32-STATIC: cxm01:
7866 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7867 ; LINUX-32-STATIC-NEXT:         leal    xdst+262144(,%eax,4), %eax
7868 ; LINUX-32-STATIC-NEXT:         ret
7869
7870 ; LINUX-32-PIC: cxm01:
7871 ; LINUX-32-PIC:         movl    4(%esp), %eax
7872 ; LINUX-32-PIC-NEXT:    leal    xdst+262144(,%eax,4), %eax
7873 ; LINUX-32-PIC-NEXT:    ret
7874
7875 ; LINUX-64-PIC: cxm01:
7876 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
7877 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
7878 ; LINUX-64-PIC-NEXT:    ret
7879
7880 ; DARWIN-32-STATIC: _cxm01:
7881 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7882 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+262144(,%eax,4), %eax
7883 ; DARWIN-32-STATIC-NEXT:        ret
7884
7885 ; DARWIN-32-DYNAMIC: _cxm01:
7886 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
7887 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, %ecx
7888 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144(%ecx,%eax,4), %eax
7889 ; DARWIN-32-DYNAMIC-NEXT:       ret
7890
7891 ; DARWIN-32-PIC: _cxm01:
7892 ; DARWIN-32-PIC:        call    "L124$pb"
7893 ; DARWIN-32-PIC-NEXT: "L124$pb":
7894 ; DARWIN-32-PIC-NEXT:   popl    %eax
7895 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7896 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-"L124$pb"(%eax), %eax
7897 ; DARWIN-32-PIC-NEXT:   leal    262144(%eax,%ecx,4), %eax
7898 ; DARWIN-32-PIC-NEXT:   ret
7899
7900 ; DARWIN-64-STATIC: _cxm01:
7901 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
7902 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
7903 ; DARWIN-64-STATIC-NEXT:        ret
7904
7905 ; DARWIN-64-DYNAMIC: _cxm01:
7906 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
7907 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
7908 ; DARWIN-64-DYNAMIC-NEXT:       ret
7909
7910 ; DARWIN-64-PIC: _cxm01:
7911 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
7912 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
7913 ; DARWIN-64-PIC-NEXT:   ret
7914 }
7915
7916 define i8* @cam02(i64 %i) nounwind {
7917 entry:
7918         %0 = load i32** @ptr, align 8
7919         %1 = add i64 %i, 65536
7920         %2 = getelementptr i32* %0, i64 %1
7921         %3 = bitcast i32* %2 to i8*
7922         ret i8* %3
7923 ; LINUX-64-STATIC: cam02:
7924 ; LINUX-64-STATIC: movq    ptr(%rip), %rax
7925 ; LINUX-64-STATIC: leaq    262144(%rax,%rdi,4), %rax
7926 ; LINUX-64-STATIC: ret
7927
7928 ; LINUX-32-STATIC: cam02:
7929 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7930 ; LINUX-32-STATIC-NEXT:         movl    ptr, %ecx
7931 ; LINUX-32-STATIC-NEXT:         leal    262144(%ecx,%eax,4), %eax
7932 ; LINUX-32-STATIC-NEXT:         ret
7933
7934 ; LINUX-32-PIC: cam02:
7935 ; LINUX-32-PIC:         movl    4(%esp), %eax
7936 ; LINUX-32-PIC-NEXT:    movl    ptr, %ecx
7937 ; LINUX-32-PIC-NEXT:    leal    262144(%ecx,%eax,4), %eax
7938 ; LINUX-32-PIC-NEXT:    ret
7939
7940 ; LINUX-64-PIC: cam02:
7941 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rax
7942 ; LINUX-64-PIC-NEXT:    movq    (%rax), %rax
7943 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
7944 ; LINUX-64-PIC-NEXT:    ret
7945
7946 ; DARWIN-32-STATIC: _cam02:
7947 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
7948 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, %ecx
7949 ; DARWIN-32-STATIC-NEXT:        leal    262144(%ecx,%eax,4), %eax
7950 ; DARWIN-32-STATIC-NEXT:        ret
7951
7952 ; DARWIN-32-DYNAMIC: _cam02:
7953 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %eax
7954 ; DARWIN-32-DYNAMIC-NEXT:       movl    (%eax), %eax
7955 ; DARWIN-32-DYNAMIC-NEXT:       movl    4(%esp), %ecx
7956 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144(%eax,%ecx,4), %eax
7957 ; DARWIN-32-DYNAMIC-NEXT:       ret
7958
7959 ; DARWIN-32-PIC: _cam02:
7960 ; DARWIN-32-PIC:        call    "L125$pb"
7961 ; DARWIN-32-PIC-NEXT: "L125$pb":
7962 ; DARWIN-32-PIC-NEXT:   popl    %eax
7963 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-"L125$pb"(%eax), %eax
7964 ; DARWIN-32-PIC-NEXT:   movl    (%eax), %eax
7965 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
7966 ; DARWIN-32-PIC-NEXT:   leal    262144(%eax,%ecx,4), %eax
7967 ; DARWIN-32-PIC-NEXT:   ret
7968
7969 ; DARWIN-64-STATIC: _cam02:
7970 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rax
7971 ; DARWIN-64-STATIC-NEXT:        movq    (%rax), %rax
7972 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
7973 ; DARWIN-64-STATIC-NEXT:        ret
7974
7975 ; DARWIN-64-DYNAMIC: _cam02:
7976 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rax
7977 ; DARWIN-64-DYNAMIC-NEXT:       movq    (%rax), %rax
7978 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
7979 ; DARWIN-64-DYNAMIC-NEXT:       ret
7980
7981 ; DARWIN-64-PIC: _cam02:
7982 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rax
7983 ; DARWIN-64-PIC-NEXT:   movq    (%rax), %rax
7984 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
7985 ; DARWIN-64-PIC-NEXT:   ret
7986 }
7987
7988 define i8* @cam03(i64 %i) nounwind {
7989 entry:
7990         %0 = add i64 %i, 65536
7991         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7992         %2 = bitcast i32* %1 to i8*
7993         ret i8* %2
7994 ; LINUX-64-STATIC: cam03:
7995 ; LINUX-64-STATIC: leaq    dsrc+262144(,%rdi,4), %rax
7996 ; LINUX-64-STATIC: ret
7997
7998 ; LINUX-32-STATIC: cam03:
7999 ; LINUX-32-STATIC:      movl    4(%esp), %eax
8000 ; LINUX-32-STATIC-NEXT:         leal    dsrc+262144(,%eax,4), %eax
8001 ; LINUX-32-STATIC-NEXT:         ret
8002
8003 ; LINUX-32-PIC: cam03:
8004 ; LINUX-32-PIC:         movl    4(%esp), %eax
8005 ; LINUX-32-PIC-NEXT:    leal    dsrc+262144(,%eax,4), %eax
8006 ; LINUX-32-PIC-NEXT:    ret
8007
8008 ; LINUX-64-PIC: cam03:
8009 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
8010 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
8011 ; LINUX-64-PIC-NEXT:    ret
8012
8013 ; DARWIN-32-STATIC: _cam03:
8014 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
8015 ; DARWIN-32-STATIC-NEXT:        leal    _dsrc+262144(,%eax,4), %eax
8016 ; DARWIN-32-STATIC-NEXT:        ret
8017
8018 ; DARWIN-32-DYNAMIC: _cam03:
8019 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
8020 ; DARWIN-32-DYNAMIC-NEXT:       leal    _dsrc+262144(,%eax,4), %eax
8021 ; DARWIN-32-DYNAMIC-NEXT:       ret
8022
8023 ; DARWIN-32-PIC: _cam03:
8024 ; DARWIN-32-PIC:        call    "L126$pb"
8025 ; DARWIN-32-PIC-NEXT: "L126$pb":
8026 ; DARWIN-32-PIC-NEXT:   popl    %eax
8027 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
8028 ; DARWIN-32-PIC-NEXT:   leal    _dsrc+262144-"L126$pb"(%eax,%ecx,4), %eax
8029 ; DARWIN-32-PIC-NEXT:   ret
8030
8031 ; DARWIN-64-STATIC: _cam03:
8032 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
8033 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
8034 ; DARWIN-64-STATIC-NEXT:        ret
8035
8036 ; DARWIN-64-DYNAMIC: _cam03:
8037 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
8038 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
8039 ; DARWIN-64-DYNAMIC-NEXT:       ret
8040
8041 ; DARWIN-64-PIC: _cam03:
8042 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
8043 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
8044 ; DARWIN-64-PIC-NEXT:   ret
8045 }
8046
8047 define i8* @cam04(i64 %i) nounwind {
8048 entry:
8049         %0 = add i64 %i, 65536
8050         %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
8051         %2 = bitcast i32* %1 to i8*
8052         ret i8* %2
8053 ; LINUX-64-STATIC: cam04:
8054 ; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), %rax
8055 ; LINUX-64-STATIC: ret
8056
8057 ; LINUX-32-STATIC: cam04:
8058 ; LINUX-32-STATIC:      movl    4(%esp), %eax
8059 ; LINUX-32-STATIC-NEXT:         leal    ddst+262144(,%eax,4), %eax
8060 ; LINUX-32-STATIC-NEXT:         ret
8061
8062 ; LINUX-32-PIC: cam04:
8063 ; LINUX-32-PIC:         movl    4(%esp), %eax
8064 ; LINUX-32-PIC-NEXT:    leal    ddst+262144(,%eax,4), %eax
8065 ; LINUX-32-PIC-NEXT:    ret
8066
8067 ; LINUX-64-PIC: cam04:
8068 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
8069 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
8070 ; LINUX-64-PIC-NEXT:    ret
8071
8072 ; DARWIN-32-STATIC: _cam04:
8073 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
8074 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+262144(,%eax,4), %eax
8075 ; DARWIN-32-STATIC-NEXT:        ret
8076
8077 ; DARWIN-32-DYNAMIC: _cam04:
8078 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
8079 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+262144(,%eax,4), %eax
8080 ; DARWIN-32-DYNAMIC-NEXT:       ret
8081
8082 ; DARWIN-32-PIC: _cam04:
8083 ; DARWIN-32-PIC:        call    "L127$pb"
8084 ; DARWIN-32-PIC-NEXT: "L127$pb":
8085 ; DARWIN-32-PIC-NEXT:   popl    %eax
8086 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
8087 ; DARWIN-32-PIC-NEXT:   leal    _ddst+262144-"L127$pb"(%eax,%ecx,4), %eax
8088 ; DARWIN-32-PIC-NEXT:   ret
8089
8090 ; DARWIN-64-STATIC: _cam04:
8091 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
8092 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
8093 ; DARWIN-64-STATIC-NEXT:        ret
8094
8095 ; DARWIN-64-DYNAMIC: _cam04:
8096 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
8097 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
8098 ; DARWIN-64-DYNAMIC-NEXT:       ret
8099
8100 ; DARWIN-64-PIC: _cam04:
8101 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
8102 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
8103 ; DARWIN-64-PIC-NEXT:   ret
8104 }
8105
8106 define i8* @cam05(i64 %i) nounwind {
8107 entry:
8108         %0 = load i32** @dptr, align 8
8109         %1 = add i64 %i, 65536
8110         %2 = getelementptr i32* %0, i64 %1
8111         %3 = bitcast i32* %2 to i8*
8112         ret i8* %3
8113 ; LINUX-64-STATIC: cam05:
8114 ; LINUX-64-STATIC: movq    dptr(%rip), %rax
8115 ; LINUX-64-STATIC: leaq    262144(%rax,%rdi,4), %rax
8116 ; LINUX-64-STATIC: ret
8117
8118 ; LINUX-32-STATIC: cam05:
8119 ; LINUX-32-STATIC:      movl    4(%esp), %eax
8120 ; LINUX-32-STATIC-NEXT:         movl    dptr, %ecx
8121 ; LINUX-32-STATIC-NEXT:         leal    262144(%ecx,%eax,4), %eax
8122 ; LINUX-32-STATIC-NEXT:         ret
8123
8124 ; LINUX-32-PIC: cam05:
8125 ; LINUX-32-PIC:         movl    4(%esp), %eax
8126 ; LINUX-32-PIC-NEXT:    movl    dptr, %ecx
8127 ; LINUX-32-PIC-NEXT:    leal    262144(%ecx,%eax,4), %eax
8128 ; LINUX-32-PIC-NEXT:    ret
8129
8130 ; LINUX-64-PIC: cam05:
8131 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rax
8132 ; LINUX-64-PIC-NEXT:    movq    (%rax), %rax
8133 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
8134 ; LINUX-64-PIC-NEXT:    ret
8135
8136 ; DARWIN-32-STATIC: _cam05:
8137 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
8138 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, %ecx
8139 ; DARWIN-32-STATIC-NEXT:        leal    262144(%ecx,%eax,4), %eax
8140 ; DARWIN-32-STATIC-NEXT:        ret
8141
8142 ; DARWIN-32-DYNAMIC: _cam05:
8143 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
8144 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, %ecx
8145 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144(%ecx,%eax,4), %eax
8146 ; DARWIN-32-DYNAMIC-NEXT:       ret
8147
8148 ; DARWIN-32-PIC: _cam05:
8149 ; DARWIN-32-PIC:        call    "L128$pb"
8150 ; DARWIN-32-PIC-NEXT: "L128$pb":
8151 ; DARWIN-32-PIC-NEXT:   popl    %eax
8152 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
8153 ; DARWIN-32-PIC-NEXT:   movl    _dptr-"L128$pb"(%eax), %eax
8154 ; DARWIN-32-PIC-NEXT:   leal    262144(%eax,%ecx,4), %eax
8155 ; DARWIN-32-PIC-NEXT:   ret
8156
8157 ; DARWIN-64-STATIC: _cam05:
8158 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
8159 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
8160 ; DARWIN-64-STATIC-NEXT:        ret
8161
8162 ; DARWIN-64-DYNAMIC: _cam05:
8163 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
8164 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
8165 ; DARWIN-64-DYNAMIC-NEXT:       ret
8166
8167 ; DARWIN-64-PIC: _cam05:
8168 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
8169 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
8170 ; DARWIN-64-PIC-NEXT:   ret
8171 }
8172
8173 define i8* @cam06(i64 %i) nounwind {
8174 entry:
8175         %0 = add i64 %i, 65536
8176         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
8177         %2 = bitcast i32* %1 to i8*
8178         ret i8* %2
8179 ; LINUX-64-STATIC: cam06:
8180 ; LINUX-64-STATIC: leaq    lsrc+262144(,%rdi,4), %rax
8181 ; LINUX-64-STATIC: ret
8182
8183 ; LINUX-32-STATIC: cam06:
8184 ; LINUX-32-STATIC:      movl    4(%esp), %eax
8185 ; LINUX-32-STATIC-NEXT:         leal    lsrc+262144(,%eax,4), %eax
8186 ; LINUX-32-STATIC-NEXT:         ret
8187
8188 ; LINUX-32-PIC: cam06:
8189 ; LINUX-32-PIC:         movl    4(%esp), %eax
8190 ; LINUX-32-PIC-NEXT:    leal    lsrc+262144(,%eax,4), %eax
8191 ; LINUX-32-PIC-NEXT:    ret
8192
8193 ; LINUX-64-PIC: cam06:
8194 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
8195 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
8196 ; LINUX-64-PIC-NEXT:    ret
8197
8198 ; DARWIN-32-STATIC: _cam06:
8199 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
8200 ; DARWIN-32-STATIC-NEXT:        leal    _lsrc+262144(,%eax,4), %eax
8201 ; DARWIN-32-STATIC-NEXT:        ret
8202
8203 ; DARWIN-32-DYNAMIC: _cam06:
8204 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
8205 ; DARWIN-32-DYNAMIC-NEXT:       leal    _lsrc+262144(,%eax,4), %eax
8206 ; DARWIN-32-DYNAMIC-NEXT:       ret
8207
8208 ; DARWIN-32-PIC: _cam06:
8209 ; DARWIN-32-PIC:        call    "L129$pb"
8210 ; DARWIN-32-PIC-NEXT: "L129$pb":
8211 ; DARWIN-32-PIC-NEXT:   popl    %eax
8212 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
8213 ; DARWIN-32-PIC-NEXT:   leal    _lsrc+262144-"L129$pb"(%eax,%ecx,4), %eax
8214 ; DARWIN-32-PIC-NEXT:   ret
8215
8216 ; DARWIN-64-STATIC: _cam06:
8217 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
8218 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
8219 ; DARWIN-64-STATIC-NEXT:        ret
8220
8221 ; DARWIN-64-DYNAMIC: _cam06:
8222 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
8223 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
8224 ; DARWIN-64-DYNAMIC-NEXT:       ret
8225
8226 ; DARWIN-64-PIC: _cam06:
8227 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
8228 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
8229 ; DARWIN-64-PIC-NEXT:   ret
8230 }
8231
8232 define i8* @cam07(i64 %i) nounwind {
8233 entry:
8234         %0 = add i64 %i, 65536
8235         %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
8236         %2 = bitcast i32* %1 to i8*
8237         ret i8* %2
8238 ; LINUX-64-STATIC: cam07:
8239 ; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), %rax
8240 ; LINUX-64-STATIC: ret
8241
8242 ; LINUX-32-STATIC: cam07:
8243 ; LINUX-32-STATIC:      movl    4(%esp), %eax
8244 ; LINUX-32-STATIC-NEXT:         leal    ldst+262144(,%eax,4), %eax
8245 ; LINUX-32-STATIC-NEXT:         ret
8246
8247 ; LINUX-32-PIC: cam07:
8248 ; LINUX-32-PIC:         movl    4(%esp), %eax
8249 ; LINUX-32-PIC-NEXT:    leal    ldst+262144(,%eax,4), %eax
8250 ; LINUX-32-PIC-NEXT:    ret
8251
8252 ; LINUX-64-PIC: cam07:
8253 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
8254 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
8255 ; LINUX-64-PIC-NEXT:    ret
8256
8257 ; DARWIN-32-STATIC: _cam07:
8258 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
8259 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+262144(,%eax,4), %eax
8260 ; DARWIN-32-STATIC-NEXT:        ret
8261
8262 ; DARWIN-32-DYNAMIC: _cam07:
8263 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
8264 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+262144(,%eax,4), %eax
8265 ; DARWIN-32-DYNAMIC-NEXT:       ret
8266
8267 ; DARWIN-32-PIC: _cam07:
8268 ; DARWIN-32-PIC:        call    "L130$pb"
8269 ; DARWIN-32-PIC-NEXT: "L130$pb":
8270 ; DARWIN-32-PIC-NEXT:   popl    %eax
8271 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
8272 ; DARWIN-32-PIC-NEXT:   leal    _ldst+262144-"L130$pb"(%eax,%ecx,4), %eax
8273 ; DARWIN-32-PIC-NEXT:   ret
8274
8275 ; DARWIN-64-STATIC: _cam07:
8276 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
8277 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
8278 ; DARWIN-64-STATIC-NEXT:        ret
8279
8280 ; DARWIN-64-DYNAMIC: _cam07:
8281 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
8282 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
8283 ; DARWIN-64-DYNAMIC-NEXT:       ret
8284
8285 ; DARWIN-64-PIC: _cam07:
8286 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
8287 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
8288 ; DARWIN-64-PIC-NEXT:   ret
8289 }
8290
8291 define i8* @cam08(i64 %i) nounwind {
8292 entry:
8293         %0 = load i32** @lptr, align 8
8294         %1 = add i64 %i, 65536
8295         %2 = getelementptr i32* %0, i64 %1
8296         %3 = bitcast i32* %2 to i8*
8297         ret i8* %3
8298 ; LINUX-64-STATIC: cam08:
8299 ; LINUX-64-STATIC: movq    lptr(%rip), %rax
8300 ; LINUX-64-STATIC: leaq    262144(%rax,%rdi,4), %rax
8301 ; LINUX-64-STATIC: ret
8302
8303 ; LINUX-32-STATIC: cam08:
8304 ; LINUX-32-STATIC:      movl    4(%esp), %eax
8305 ; LINUX-32-STATIC-NEXT:         movl    lptr, %ecx
8306 ; LINUX-32-STATIC-NEXT:         leal    262144(%ecx,%eax,4), %eax
8307 ; LINUX-32-STATIC-NEXT:         ret
8308
8309 ; LINUX-32-PIC: cam08:
8310 ; LINUX-32-PIC:         movl    4(%esp), %eax
8311 ; LINUX-32-PIC-NEXT:    movl    lptr, %ecx
8312 ; LINUX-32-PIC-NEXT:    leal    262144(%ecx,%eax,4), %eax
8313 ; LINUX-32-PIC-NEXT:    ret
8314
8315 ; LINUX-64-PIC: cam08:
8316 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
8317 ; LINUX-64-PIC-NEXT:    leaq    262144(%rax,%rdi,4), %rax
8318 ; LINUX-64-PIC-NEXT:    ret
8319
8320 ; DARWIN-32-STATIC: _cam08:
8321 ; DARWIN-32-STATIC:     movl    4(%esp), %eax
8322 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, %ecx
8323 ; DARWIN-32-STATIC-NEXT:        leal    262144(%ecx,%eax,4), %eax
8324 ; DARWIN-32-STATIC-NEXT:        ret
8325
8326 ; DARWIN-32-DYNAMIC: _cam08:
8327 ; DARWIN-32-DYNAMIC:    movl    4(%esp), %eax
8328 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, %ecx
8329 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144(%ecx,%eax,4), %eax
8330 ; DARWIN-32-DYNAMIC-NEXT:       ret
8331
8332 ; DARWIN-32-PIC: _cam08:
8333 ; DARWIN-32-PIC:        call    "L131$pb"
8334 ; DARWIN-32-PIC-NEXT: "L131$pb":
8335 ; DARWIN-32-PIC-NEXT:   popl    %eax
8336 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), %ecx
8337 ; DARWIN-32-PIC-NEXT:   movl    _lptr-"L131$pb"(%eax), %eax
8338 ; DARWIN-32-PIC-NEXT:   leal    262144(%eax,%ecx,4), %eax
8339 ; DARWIN-32-PIC-NEXT:   ret
8340
8341 ; DARWIN-64-STATIC: _cam08:
8342 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
8343 ; DARWIN-64-STATIC-NEXT:        leaq    262144(%rax,%rdi,4), %rax
8344 ; DARWIN-64-STATIC-NEXT:        ret
8345
8346 ; DARWIN-64-DYNAMIC: _cam08:
8347 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
8348 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144(%rax,%rdi,4), %rax
8349 ; DARWIN-64-DYNAMIC-NEXT:       ret
8350
8351 ; DARWIN-64-PIC: _cam08:
8352 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
8353 ; DARWIN-64-PIC-NEXT:   leaq    262144(%rax,%rdi,4), %rax
8354 ; DARWIN-64-PIC-NEXT:   ret
8355 }
8356
8357 define void @lcallee() nounwind {
8358 entry:
8359         tail call void @x() nounwind
8360         tail call void @x() nounwind
8361         tail call void @x() nounwind
8362         tail call void @x() nounwind
8363         tail call void @x() nounwind
8364         tail call void @x() nounwind
8365         tail call void @x() nounwind
8366         ret void
8367 ; LINUX-64-STATIC: lcallee:
8368 ; LINUX-64-STATIC: call    x
8369 ; LINUX-64-STATIC: call    x
8370 ; LINUX-64-STATIC: call    x
8371 ; LINUX-64-STATIC: call    x
8372 ; LINUX-64-STATIC: call    x
8373 ; LINUX-64-STATIC: call    x
8374 ; LINUX-64-STATIC: call    x
8375 ; LINUX-64-STATIC: ret
8376
8377 ; LINUX-32-STATIC: lcallee:
8378 ; LINUX-32-STATIC:      subl    $4, %esp
8379 ; LINUX-32-STATIC-NEXT:         call    x
8380 ; LINUX-32-STATIC-NEXT:         call    x
8381 ; LINUX-32-STATIC-NEXT:         call    x
8382 ; LINUX-32-STATIC-NEXT:         call    x
8383 ; LINUX-32-STATIC-NEXT:         call    x
8384 ; LINUX-32-STATIC-NEXT:         call    x
8385 ; LINUX-32-STATIC-NEXT:         call    x
8386 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
8387 ; LINUX-32-STATIC-NEXT:         ret
8388
8389 ; LINUX-32-PIC: lcallee:
8390 ; LINUX-32-PIC:         subl    $4, %esp
8391 ; LINUX-32-PIC-NEXT:    call    x
8392 ; LINUX-32-PIC-NEXT:    call    x
8393 ; LINUX-32-PIC-NEXT:    call    x
8394 ; LINUX-32-PIC-NEXT:    call    x
8395 ; LINUX-32-PIC-NEXT:    call    x
8396 ; LINUX-32-PIC-NEXT:    call    x
8397 ; LINUX-32-PIC-NEXT:    call    x
8398 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
8399 ; LINUX-32-PIC-NEXT:    ret
8400
8401 ; LINUX-64-PIC: lcallee:
8402 ; LINUX-64-PIC:         subq    $8, %rsp
8403 ; LINUX-64-PIC-NEXT:    call    x@PLT
8404 ; LINUX-64-PIC-NEXT:    call    x@PLT
8405 ; LINUX-64-PIC-NEXT:    call    x@PLT
8406 ; LINUX-64-PIC-NEXT:    call    x@PLT
8407 ; LINUX-64-PIC-NEXT:    call    x@PLT
8408 ; LINUX-64-PIC-NEXT:    call    x@PLT
8409 ; LINUX-64-PIC-NEXT:    call    x@PLT
8410 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
8411 ; LINUX-64-PIC-NEXT:    ret
8412
8413 ; DARWIN-32-STATIC: _lcallee:
8414 ; DARWIN-32-STATIC:     subl    $12, %esp
8415 ; DARWIN-32-STATIC-NEXT:        call    _x
8416 ; DARWIN-32-STATIC-NEXT:        call    _x
8417 ; DARWIN-32-STATIC-NEXT:        call    _x
8418 ; DARWIN-32-STATIC-NEXT:        call    _x
8419 ; DARWIN-32-STATIC-NEXT:        call    _x
8420 ; DARWIN-32-STATIC-NEXT:        call    _x
8421 ; DARWIN-32-STATIC-NEXT:        call    _x
8422 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8423 ; DARWIN-32-STATIC-NEXT:        ret
8424
8425 ; DARWIN-32-DYNAMIC: _lcallee:
8426 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8427 ; DARWIN-32-DYNAMIC-NEXT:       call    L_x$stub
8428 ; DARWIN-32-DYNAMIC-NEXT:       call    L_x$stub
8429 ; DARWIN-32-DYNAMIC-NEXT:       call    L_x$stub
8430 ; DARWIN-32-DYNAMIC-NEXT:       call    L_x$stub
8431 ; DARWIN-32-DYNAMIC-NEXT:       call    L_x$stub
8432 ; DARWIN-32-DYNAMIC-NEXT:       call    L_x$stub
8433 ; DARWIN-32-DYNAMIC-NEXT:       call    L_x$stub
8434 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8435 ; DARWIN-32-DYNAMIC-NEXT:       ret
8436
8437 ; DARWIN-32-PIC: _lcallee:
8438 ; DARWIN-32-PIC:        subl    $12, %esp
8439 ; DARWIN-32-PIC-NEXT:   call    L_x$stub
8440 ; DARWIN-32-PIC-NEXT:   call    L_x$stub
8441 ; DARWIN-32-PIC-NEXT:   call    L_x$stub
8442 ; DARWIN-32-PIC-NEXT:   call    L_x$stub
8443 ; DARWIN-32-PIC-NEXT:   call    L_x$stub
8444 ; DARWIN-32-PIC-NEXT:   call    L_x$stub
8445 ; DARWIN-32-PIC-NEXT:   call    L_x$stub
8446 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8447 ; DARWIN-32-PIC-NEXT:   ret
8448
8449 ; DARWIN-64-STATIC: _lcallee:
8450 ; DARWIN-64-STATIC:     subq    $8, %rsp
8451 ; DARWIN-64-STATIC-NEXT:        call    _x
8452 ; DARWIN-64-STATIC-NEXT:        call    _x
8453 ; DARWIN-64-STATIC-NEXT:        call    _x
8454 ; DARWIN-64-STATIC-NEXT:        call    _x
8455 ; DARWIN-64-STATIC-NEXT:        call    _x
8456 ; DARWIN-64-STATIC-NEXT:        call    _x
8457 ; DARWIN-64-STATIC-NEXT:        call    _x
8458 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
8459 ; DARWIN-64-STATIC-NEXT:        ret
8460
8461 ; DARWIN-64-DYNAMIC: _lcallee:
8462 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
8463 ; DARWIN-64-DYNAMIC-NEXT:       call    _x
8464 ; DARWIN-64-DYNAMIC-NEXT:       call    _x
8465 ; DARWIN-64-DYNAMIC-NEXT:       call    _x
8466 ; DARWIN-64-DYNAMIC-NEXT:       call    _x
8467 ; DARWIN-64-DYNAMIC-NEXT:       call    _x
8468 ; DARWIN-64-DYNAMIC-NEXT:       call    _x
8469 ; DARWIN-64-DYNAMIC-NEXT:       call    _x
8470 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
8471 ; DARWIN-64-DYNAMIC-NEXT:       ret
8472
8473 ; DARWIN-64-PIC: _lcallee:
8474 ; DARWIN-64-PIC:        subq    $8, %rsp
8475 ; DARWIN-64-PIC-NEXT:   call    _x
8476 ; DARWIN-64-PIC-NEXT:   call    _x
8477 ; DARWIN-64-PIC-NEXT:   call    _x
8478 ; DARWIN-64-PIC-NEXT:   call    _x
8479 ; DARWIN-64-PIC-NEXT:   call    _x
8480 ; DARWIN-64-PIC-NEXT:   call    _x
8481 ; DARWIN-64-PIC-NEXT:   call    _x
8482 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
8483 ; DARWIN-64-PIC-NEXT:   ret
8484 }
8485
8486 declare void @x()
8487
8488 define internal void @dcallee() nounwind {
8489 entry:
8490         tail call void @y() nounwind
8491         tail call void @y() nounwind
8492         tail call void @y() nounwind
8493         tail call void @y() nounwind
8494         tail call void @y() nounwind
8495         tail call void @y() nounwind
8496         tail call void @y() nounwind
8497         ret void
8498 ; LINUX-64-STATIC: dcallee:
8499 ; LINUX-64-STATIC: call    y
8500 ; LINUX-64-STATIC: call    y
8501 ; LINUX-64-STATIC: call    y
8502 ; LINUX-64-STATIC: call    y
8503 ; LINUX-64-STATIC: call    y
8504 ; LINUX-64-STATIC: call    y
8505 ; LINUX-64-STATIC: call    y
8506 ; LINUX-64-STATIC: ret
8507
8508 ; LINUX-32-STATIC: dcallee:
8509 ; LINUX-32-STATIC:      subl    $4, %esp
8510 ; LINUX-32-STATIC-NEXT:         call    y
8511 ; LINUX-32-STATIC-NEXT:         call    y
8512 ; LINUX-32-STATIC-NEXT:         call    y
8513 ; LINUX-32-STATIC-NEXT:         call    y
8514 ; LINUX-32-STATIC-NEXT:         call    y
8515 ; LINUX-32-STATIC-NEXT:         call    y
8516 ; LINUX-32-STATIC-NEXT:         call    y
8517 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
8518 ; LINUX-32-STATIC-NEXT:         ret
8519
8520 ; LINUX-32-PIC: dcallee:
8521 ; LINUX-32-PIC:         subl    $4, %esp
8522 ; LINUX-32-PIC-NEXT:    call    y
8523 ; LINUX-32-PIC-NEXT:    call    y
8524 ; LINUX-32-PIC-NEXT:    call    y
8525 ; LINUX-32-PIC-NEXT:    call    y
8526 ; LINUX-32-PIC-NEXT:    call    y
8527 ; LINUX-32-PIC-NEXT:    call    y
8528 ; LINUX-32-PIC-NEXT:    call    y
8529 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
8530 ; LINUX-32-PIC-NEXT:    ret
8531
8532 ; LINUX-64-PIC: dcallee:
8533 ; LINUX-64-PIC:         subq    $8, %rsp
8534 ; LINUX-64-PIC-NEXT:    call    y@PLT
8535 ; LINUX-64-PIC-NEXT:    call    y@PLT
8536 ; LINUX-64-PIC-NEXT:    call    y@PLT
8537 ; LINUX-64-PIC-NEXT:    call    y@PLT
8538 ; LINUX-64-PIC-NEXT:    call    y@PLT
8539 ; LINUX-64-PIC-NEXT:    call    y@PLT
8540 ; LINUX-64-PIC-NEXT:    call    y@PLT
8541 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
8542 ; LINUX-64-PIC-NEXT:    ret
8543
8544 ; DARWIN-32-STATIC: _dcallee:
8545 ; DARWIN-32-STATIC:     subl    $12, %esp
8546 ; DARWIN-32-STATIC-NEXT:        call    _y
8547 ; DARWIN-32-STATIC-NEXT:        call    _y
8548 ; DARWIN-32-STATIC-NEXT:        call    _y
8549 ; DARWIN-32-STATIC-NEXT:        call    _y
8550 ; DARWIN-32-STATIC-NEXT:        call    _y
8551 ; DARWIN-32-STATIC-NEXT:        call    _y
8552 ; DARWIN-32-STATIC-NEXT:        call    _y
8553 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8554 ; DARWIN-32-STATIC-NEXT:        ret
8555
8556 ; DARWIN-32-DYNAMIC: _dcallee:
8557 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8558 ; DARWIN-32-DYNAMIC-NEXT:       call    L_y$stub
8559 ; DARWIN-32-DYNAMIC-NEXT:       call    L_y$stub
8560 ; DARWIN-32-DYNAMIC-NEXT:       call    L_y$stub
8561 ; DARWIN-32-DYNAMIC-NEXT:       call    L_y$stub
8562 ; DARWIN-32-DYNAMIC-NEXT:       call    L_y$stub
8563 ; DARWIN-32-DYNAMIC-NEXT:       call    L_y$stub
8564 ; DARWIN-32-DYNAMIC-NEXT:       call    L_y$stub
8565 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8566 ; DARWIN-32-DYNAMIC-NEXT:       ret
8567
8568 ; DARWIN-32-PIC: _dcallee:
8569 ; DARWIN-32-PIC:        subl    $12, %esp
8570 ; DARWIN-32-PIC-NEXT:   call    L_y$stub
8571 ; DARWIN-32-PIC-NEXT:   call    L_y$stub
8572 ; DARWIN-32-PIC-NEXT:   call    L_y$stub
8573 ; DARWIN-32-PIC-NEXT:   call    L_y$stub
8574 ; DARWIN-32-PIC-NEXT:   call    L_y$stub
8575 ; DARWIN-32-PIC-NEXT:   call    L_y$stub
8576 ; DARWIN-32-PIC-NEXT:   call    L_y$stub
8577 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8578 ; DARWIN-32-PIC-NEXT:   ret
8579
8580 ; DARWIN-64-STATIC: _dcallee:
8581 ; DARWIN-64-STATIC:     subq    $8, %rsp
8582 ; DARWIN-64-STATIC-NEXT:        call    _y
8583 ; DARWIN-64-STATIC-NEXT:        call    _y
8584 ; DARWIN-64-STATIC-NEXT:        call    _y
8585 ; DARWIN-64-STATIC-NEXT:        call    _y
8586 ; DARWIN-64-STATIC-NEXT:        call    _y
8587 ; DARWIN-64-STATIC-NEXT:        call    _y
8588 ; DARWIN-64-STATIC-NEXT:        call    _y
8589 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
8590 ; DARWIN-64-STATIC-NEXT:        ret
8591
8592 ; DARWIN-64-DYNAMIC: _dcallee:
8593 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
8594 ; DARWIN-64-DYNAMIC-NEXT:       call    _y
8595 ; DARWIN-64-DYNAMIC-NEXT:       call    _y
8596 ; DARWIN-64-DYNAMIC-NEXT:       call    _y
8597 ; DARWIN-64-DYNAMIC-NEXT:       call    _y
8598 ; DARWIN-64-DYNAMIC-NEXT:       call    _y
8599 ; DARWIN-64-DYNAMIC-NEXT:       call    _y
8600 ; DARWIN-64-DYNAMIC-NEXT:       call    _y
8601 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
8602 ; DARWIN-64-DYNAMIC-NEXT:       ret
8603
8604 ; DARWIN-64-PIC: _dcallee:
8605 ; DARWIN-64-PIC:        subq    $8, %rsp
8606 ; DARWIN-64-PIC-NEXT:   call    _y
8607 ; DARWIN-64-PIC-NEXT:   call    _y
8608 ; DARWIN-64-PIC-NEXT:   call    _y
8609 ; DARWIN-64-PIC-NEXT:   call    _y
8610 ; DARWIN-64-PIC-NEXT:   call    _y
8611 ; DARWIN-64-PIC-NEXT:   call    _y
8612 ; DARWIN-64-PIC-NEXT:   call    _y
8613 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
8614 ; DARWIN-64-PIC-NEXT:   ret
8615 }
8616
8617 declare void @y()
8618
8619 define void ()* @address() nounwind {
8620 entry:
8621         ret void ()* @callee
8622 ; LINUX-64-STATIC: address:
8623 ; LINUX-64-STATIC: movl    $callee, %eax
8624 ; LINUX-64-STATIC: ret
8625
8626 ; LINUX-32-STATIC: address:
8627 ; LINUX-32-STATIC:      movl    $callee, %eax
8628 ; LINUX-32-STATIC-NEXT:         ret
8629
8630 ; LINUX-32-PIC: address:
8631 ; LINUX-32-PIC:         movl    $callee, %eax
8632 ; LINUX-32-PIC-NEXT:    ret
8633
8634 ; LINUX-64-PIC: address:
8635 ; LINUX-64-PIC:         movq    callee@GOTPCREL(%rip), %rax
8636 ; LINUX-64-PIC-NEXT:    ret
8637
8638 ; DARWIN-32-STATIC: _address:
8639 ; DARWIN-32-STATIC:     movl    $_callee, %eax
8640 ; DARWIN-32-STATIC-NEXT:        ret
8641
8642 ; DARWIN-32-DYNAMIC: _address:
8643 ; DARWIN-32-DYNAMIC:    movl    L_callee$non_lazy_ptr, %eax
8644 ; DARWIN-32-DYNAMIC-NEXT:       ret
8645
8646 ; DARWIN-32-PIC: _address:
8647 ; DARWIN-32-PIC:        call    "L134$pb"
8648 ; DARWIN-32-PIC-NEXT: "L134$pb":
8649 ; DARWIN-32-PIC-NEXT:   popl    %eax
8650 ; DARWIN-32-PIC-NEXT:   movl    L_callee$non_lazy_ptr-"L134$pb"(%eax), %eax
8651 ; DARWIN-32-PIC-NEXT:   ret
8652
8653 ; DARWIN-64-STATIC: _address:
8654 ; DARWIN-64-STATIC:     movq    _callee@GOTPCREL(%rip), %rax
8655 ; DARWIN-64-STATIC-NEXT:        ret
8656
8657 ; DARWIN-64-DYNAMIC: _address:
8658 ; DARWIN-64-DYNAMIC:    movq    _callee@GOTPCREL(%rip), %rax
8659 ; DARWIN-64-DYNAMIC-NEXT:       ret
8660
8661 ; DARWIN-64-PIC: _address:
8662 ; DARWIN-64-PIC:        movq    _callee@GOTPCREL(%rip), %rax
8663 ; DARWIN-64-PIC-NEXT:   ret
8664 }
8665
8666 declare void @callee()
8667
8668 define void ()* @laddress() nounwind {
8669 entry:
8670         ret void ()* @lcallee
8671 ; LINUX-64-STATIC: laddress:
8672 ; LINUX-64-STATIC: movl    $lcallee, %eax
8673 ; LINUX-64-STATIC: ret
8674
8675 ; LINUX-32-STATIC: laddress:
8676 ; LINUX-32-STATIC:      movl    $lcallee, %eax
8677 ; LINUX-32-STATIC-NEXT:         ret
8678
8679 ; LINUX-32-PIC: laddress:
8680 ; LINUX-32-PIC:         movl    $lcallee, %eax
8681 ; LINUX-32-PIC-NEXT:    ret
8682
8683 ; LINUX-64-PIC: laddress:
8684 ; LINUX-64-PIC:         movq    lcallee@GOTPCREL(%rip), %rax
8685 ; LINUX-64-PIC-NEXT:    ret
8686
8687 ; DARWIN-32-STATIC: _laddress:
8688 ; DARWIN-32-STATIC:     movl    $_lcallee, %eax
8689 ; DARWIN-32-STATIC-NEXT:        ret
8690
8691 ; DARWIN-32-DYNAMIC: _laddress:
8692 ; DARWIN-32-DYNAMIC:    movl    $_lcallee, %eax
8693 ; DARWIN-32-DYNAMIC-NEXT:       ret
8694
8695 ; DARWIN-32-PIC: _laddress:
8696 ; DARWIN-32-PIC:        call    "L135$pb"
8697 ; DARWIN-32-PIC-NEXT: "L135$pb":
8698 ; DARWIN-32-PIC-NEXT:   popl    %eax
8699 ; DARWIN-32-PIC-NEXT:   leal    _lcallee-"L135$pb"(%eax), %eax
8700 ; DARWIN-32-PIC-NEXT:   ret
8701
8702 ; DARWIN-64-STATIC: _laddress:
8703 ; DARWIN-64-STATIC:     leaq    _lcallee(%rip), %rax
8704 ; DARWIN-64-STATIC-NEXT:        ret
8705
8706 ; DARWIN-64-DYNAMIC: _laddress:
8707 ; DARWIN-64-DYNAMIC:    leaq    _lcallee(%rip), %rax
8708 ; DARWIN-64-DYNAMIC-NEXT:       ret
8709
8710 ; DARWIN-64-PIC: _laddress:
8711 ; DARWIN-64-PIC:        leaq    _lcallee(%rip), %rax
8712 ; DARWIN-64-PIC-NEXT:   ret
8713 }
8714
8715 define void ()* @daddress() nounwind {
8716 entry:
8717         ret void ()* @dcallee
8718 ; LINUX-64-STATIC: daddress:
8719 ; LINUX-64-STATIC: movl    $dcallee, %eax
8720 ; LINUX-64-STATIC: ret
8721
8722 ; LINUX-32-STATIC: daddress:
8723 ; LINUX-32-STATIC:      movl    $dcallee, %eax
8724 ; LINUX-32-STATIC-NEXT:         ret
8725
8726 ; LINUX-32-PIC: daddress:
8727 ; LINUX-32-PIC:         movl    $dcallee, %eax
8728 ; LINUX-32-PIC-NEXT:    ret
8729
8730 ; LINUX-64-PIC: daddress:
8731 ; LINUX-64-PIC:         leaq    dcallee(%rip), %rax
8732 ; LINUX-64-PIC-NEXT:    ret
8733
8734 ; DARWIN-32-STATIC: _daddress:
8735 ; DARWIN-32-STATIC:     movl    $_dcallee, %eax
8736 ; DARWIN-32-STATIC-NEXT:        ret
8737
8738 ; DARWIN-32-DYNAMIC: _daddress:
8739 ; DARWIN-32-DYNAMIC:    movl    $_dcallee, %eax
8740 ; DARWIN-32-DYNAMIC-NEXT:       ret
8741
8742 ; DARWIN-32-PIC: _daddress:
8743 ; DARWIN-32-PIC:        call    "L136$pb"
8744 ; DARWIN-32-PIC-NEXT: "L136$pb":
8745 ; DARWIN-32-PIC-NEXT:   popl    %eax
8746 ; DARWIN-32-PIC-NEXT:   leal    _dcallee-"L136$pb"(%eax), %eax
8747 ; DARWIN-32-PIC-NEXT:   ret
8748
8749 ; DARWIN-64-STATIC: _daddress:
8750 ; DARWIN-64-STATIC:     leaq    _dcallee(%rip), %rax
8751 ; DARWIN-64-STATIC-NEXT:        ret
8752
8753 ; DARWIN-64-DYNAMIC: _daddress:
8754 ; DARWIN-64-DYNAMIC:    leaq    _dcallee(%rip), %rax
8755 ; DARWIN-64-DYNAMIC-NEXT:       ret
8756
8757 ; DARWIN-64-PIC: _daddress:
8758 ; DARWIN-64-PIC:        leaq    _dcallee(%rip), %rax
8759 ; DARWIN-64-PIC-NEXT:   ret
8760 }
8761
8762 define void @caller() nounwind {
8763 entry:
8764         tail call void @callee() nounwind
8765         tail call void @callee() nounwind
8766         ret void
8767 ; LINUX-64-STATIC: caller:
8768 ; LINUX-64-STATIC: call    callee
8769 ; LINUX-64-STATIC: call    callee
8770 ; LINUX-64-STATIC: ret
8771
8772 ; LINUX-32-STATIC: caller:
8773 ; LINUX-32-STATIC:      subl    $4, %esp
8774 ; LINUX-32-STATIC-NEXT:         call    callee
8775 ; LINUX-32-STATIC-NEXT:         call    callee
8776 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
8777 ; LINUX-32-STATIC-NEXT:         ret
8778
8779 ; LINUX-32-PIC: caller:
8780 ; LINUX-32-PIC:         subl    $4, %esp
8781 ; LINUX-32-PIC-NEXT:    call    callee
8782 ; LINUX-32-PIC-NEXT:    call    callee
8783 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
8784 ; LINUX-32-PIC-NEXT:    ret
8785
8786 ; LINUX-64-PIC: caller:
8787 ; LINUX-64-PIC:         subq    $8, %rsp
8788 ; LINUX-64-PIC-NEXT:    call    callee@PLT
8789 ; LINUX-64-PIC-NEXT:    call    callee@PLT
8790 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
8791 ; LINUX-64-PIC-NEXT:    ret
8792
8793 ; DARWIN-32-STATIC: _caller:
8794 ; DARWIN-32-STATIC:     subl    $12, %esp
8795 ; DARWIN-32-STATIC-NEXT:        call    _callee
8796 ; DARWIN-32-STATIC-NEXT:        call    _callee
8797 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8798 ; DARWIN-32-STATIC-NEXT:        ret
8799
8800 ; DARWIN-32-DYNAMIC: _caller:
8801 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8802 ; DARWIN-32-DYNAMIC-NEXT:       call    L_callee$stub
8803 ; DARWIN-32-DYNAMIC-NEXT:       call    L_callee$stub
8804 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8805 ; DARWIN-32-DYNAMIC-NEXT:       ret
8806
8807 ; DARWIN-32-PIC: _caller:
8808 ; DARWIN-32-PIC:        subl    $12, %esp
8809 ; DARWIN-32-PIC-NEXT:   call    L_callee$stub
8810 ; DARWIN-32-PIC-NEXT:   call    L_callee$stub
8811 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8812 ; DARWIN-32-PIC-NEXT:   ret
8813
8814 ; DARWIN-64-STATIC: _caller:
8815 ; DARWIN-64-STATIC:     subq    $8, %rsp
8816 ; DARWIN-64-STATIC-NEXT:        call    _callee
8817 ; DARWIN-64-STATIC-NEXT:        call    _callee
8818 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
8819 ; DARWIN-64-STATIC-NEXT:        ret
8820
8821 ; DARWIN-64-DYNAMIC: _caller:
8822 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
8823 ; DARWIN-64-DYNAMIC-NEXT:       call    _callee
8824 ; DARWIN-64-DYNAMIC-NEXT:       call    _callee
8825 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
8826 ; DARWIN-64-DYNAMIC-NEXT:       ret
8827
8828 ; DARWIN-64-PIC: _caller:
8829 ; DARWIN-64-PIC:        subq    $8, %rsp
8830 ; DARWIN-64-PIC-NEXT:   call    _callee
8831 ; DARWIN-64-PIC-NEXT:   call    _callee
8832 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
8833 ; DARWIN-64-PIC-NEXT:   ret
8834 }
8835
8836 define void @dcaller() nounwind {
8837 entry:
8838         tail call void @dcallee() nounwind
8839         tail call void @dcallee() nounwind
8840         ret void
8841 ; LINUX-64-STATIC: dcaller:
8842 ; LINUX-64-STATIC: call    dcallee
8843 ; LINUX-64-STATIC: call    dcallee
8844 ; LINUX-64-STATIC: ret
8845
8846 ; LINUX-32-STATIC: dcaller:
8847 ; LINUX-32-STATIC:      subl    $4, %esp
8848 ; LINUX-32-STATIC-NEXT:         call    dcallee
8849 ; LINUX-32-STATIC-NEXT:         call    dcallee
8850 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
8851 ; LINUX-32-STATIC-NEXT:         ret
8852
8853 ; LINUX-32-PIC: dcaller:
8854 ; LINUX-32-PIC:         subl    $4, %esp
8855 ; LINUX-32-PIC-NEXT:    call    dcallee
8856 ; LINUX-32-PIC-NEXT:    call    dcallee
8857 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
8858 ; LINUX-32-PIC-NEXT:    ret
8859
8860 ; LINUX-64-PIC: dcaller:
8861 ; LINUX-64-PIC:         subq    $8, %rsp
8862 ; LINUX-64-PIC-NEXT:    call    dcallee
8863 ; LINUX-64-PIC-NEXT:    call    dcallee
8864 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
8865 ; LINUX-64-PIC-NEXT:    ret
8866
8867 ; DARWIN-32-STATIC: _dcaller:
8868 ; DARWIN-32-STATIC:     subl    $12, %esp
8869 ; DARWIN-32-STATIC-NEXT:        call    _dcallee
8870 ; DARWIN-32-STATIC-NEXT:        call    _dcallee
8871 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8872 ; DARWIN-32-STATIC-NEXT:        ret
8873
8874 ; DARWIN-32-DYNAMIC: _dcaller:
8875 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8876 ; DARWIN-32-DYNAMIC-NEXT:       call    _dcallee
8877 ; DARWIN-32-DYNAMIC-NEXT:       call    _dcallee
8878 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8879 ; DARWIN-32-DYNAMIC-NEXT:       ret
8880
8881 ; DARWIN-32-PIC: _dcaller:
8882 ; DARWIN-32-PIC:        subl    $12, %esp
8883 ; DARWIN-32-PIC-NEXT:   call    _dcallee
8884 ; DARWIN-32-PIC-NEXT:   call    _dcallee
8885 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8886 ; DARWIN-32-PIC-NEXT:   ret
8887
8888 ; DARWIN-64-STATIC: _dcaller:
8889 ; DARWIN-64-STATIC:     subq    $8, %rsp
8890 ; DARWIN-64-STATIC-NEXT:        call    _dcallee
8891 ; DARWIN-64-STATIC-NEXT:        call    _dcallee
8892 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
8893 ; DARWIN-64-STATIC-NEXT:        ret
8894
8895 ; DARWIN-64-DYNAMIC: _dcaller:
8896 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
8897 ; DARWIN-64-DYNAMIC-NEXT:       call    _dcallee
8898 ; DARWIN-64-DYNAMIC-NEXT:       call    _dcallee
8899 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
8900 ; DARWIN-64-DYNAMIC-NEXT:       ret
8901
8902 ; DARWIN-64-PIC: _dcaller:
8903 ; DARWIN-64-PIC:        subq    $8, %rsp
8904 ; DARWIN-64-PIC-NEXT:   call    _dcallee
8905 ; DARWIN-64-PIC-NEXT:   call    _dcallee
8906 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
8907 ; DARWIN-64-PIC-NEXT:   ret
8908 }
8909
8910 define void @lcaller() nounwind {
8911 entry:
8912         tail call void @lcallee() nounwind
8913         tail call void @lcallee() nounwind
8914         ret void
8915 ; LINUX-64-STATIC: lcaller:
8916 ; LINUX-64-STATIC: call    lcallee
8917 ; LINUX-64-STATIC: call    lcallee
8918 ; LINUX-64-STATIC: ret
8919
8920 ; LINUX-32-STATIC: lcaller:
8921 ; LINUX-32-STATIC:      subl    $4, %esp
8922 ; LINUX-32-STATIC-NEXT:         call    lcallee
8923 ; LINUX-32-STATIC-NEXT:         call    lcallee
8924 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
8925 ; LINUX-32-STATIC-NEXT:         ret
8926
8927 ; LINUX-32-PIC: lcaller:
8928 ; LINUX-32-PIC:         subl    $4, %esp
8929 ; LINUX-32-PIC-NEXT:    call    lcallee
8930 ; LINUX-32-PIC-NEXT:    call    lcallee
8931 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
8932 ; LINUX-32-PIC-NEXT:    ret
8933
8934 ; LINUX-64-PIC: lcaller:
8935 ; LINUX-64-PIC:         subq    $8, %rsp
8936 ; LINUX-64-PIC-NEXT:    call    lcallee@PLT
8937 ; LINUX-64-PIC-NEXT:    call    lcallee@PLT
8938 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
8939 ; LINUX-64-PIC-NEXT:    ret
8940
8941 ; DARWIN-32-STATIC: _lcaller:
8942 ; DARWIN-32-STATIC:     subl    $12, %esp
8943 ; DARWIN-32-STATIC-NEXT:        call    _lcallee
8944 ; DARWIN-32-STATIC-NEXT:        call    _lcallee
8945 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8946 ; DARWIN-32-STATIC-NEXT:        ret
8947
8948 ; DARWIN-32-DYNAMIC: _lcaller:
8949 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8950 ; DARWIN-32-DYNAMIC-NEXT:       call    _lcallee
8951 ; DARWIN-32-DYNAMIC-NEXT:       call    _lcallee
8952 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8953 ; DARWIN-32-DYNAMIC-NEXT:       ret
8954
8955 ; DARWIN-32-PIC: _lcaller:
8956 ; DARWIN-32-PIC:        subl    $12, %esp
8957 ; DARWIN-32-PIC-NEXT:   call    _lcallee
8958 ; DARWIN-32-PIC-NEXT:   call    _lcallee
8959 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8960 ; DARWIN-32-PIC-NEXT:   ret
8961
8962 ; DARWIN-64-STATIC: _lcaller:
8963 ; DARWIN-64-STATIC:     subq    $8, %rsp
8964 ; DARWIN-64-STATIC-NEXT:        call    _lcallee
8965 ; DARWIN-64-STATIC-NEXT:        call    _lcallee
8966 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
8967 ; DARWIN-64-STATIC-NEXT:        ret
8968
8969 ; DARWIN-64-DYNAMIC: _lcaller:
8970 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
8971 ; DARWIN-64-DYNAMIC-NEXT:       call    _lcallee
8972 ; DARWIN-64-DYNAMIC-NEXT:       call    _lcallee
8973 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
8974 ; DARWIN-64-DYNAMIC-NEXT:       ret
8975
8976 ; DARWIN-64-PIC: _lcaller:
8977 ; DARWIN-64-PIC:        subq    $8, %rsp
8978 ; DARWIN-64-PIC-NEXT:   call    _lcallee
8979 ; DARWIN-64-PIC-NEXT:   call    _lcallee
8980 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
8981 ; DARWIN-64-PIC-NEXT:   ret
8982 }
8983
8984 define void @tailcaller() nounwind {
8985 entry:
8986         tail call void @callee() nounwind
8987         ret void
8988 ; LINUX-64-STATIC: tailcaller:
8989 ; LINUX-64-STATIC: call    callee
8990 ; LINUX-64-STATIC: ret
8991
8992 ; LINUX-32-STATIC: tailcaller:
8993 ; LINUX-32-STATIC:      subl    $4, %esp
8994 ; LINUX-32-STATIC-NEXT:         call    callee
8995 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
8996 ; LINUX-32-STATIC-NEXT:         ret
8997
8998 ; LINUX-32-PIC: tailcaller:
8999 ; LINUX-32-PIC:         subl    $4, %esp
9000 ; LINUX-32-PIC-NEXT:    call    callee
9001 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9002 ; LINUX-32-PIC-NEXT:    ret
9003
9004 ; LINUX-64-PIC: tailcaller:
9005 ; LINUX-64-PIC:         subq    $8, %rsp
9006 ; LINUX-64-PIC-NEXT:    call    callee@PLT
9007 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
9008 ; LINUX-64-PIC-NEXT:    ret
9009
9010 ; DARWIN-32-STATIC: _tailcaller:
9011 ; DARWIN-32-STATIC:     subl    $12, %esp
9012 ; DARWIN-32-STATIC-NEXT:        call    _callee
9013 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9014 ; DARWIN-32-STATIC-NEXT:        ret
9015
9016 ; DARWIN-32-DYNAMIC: _tailcaller:
9017 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9018 ; DARWIN-32-DYNAMIC-NEXT:       call    L_callee$stub
9019 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9020 ; DARWIN-32-DYNAMIC-NEXT:       ret
9021
9022 ; DARWIN-32-PIC: _tailcaller:
9023 ; DARWIN-32-PIC:        subl    $12, %esp
9024 ; DARWIN-32-PIC-NEXT:   call    L_callee$stub
9025 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9026 ; DARWIN-32-PIC-NEXT:   ret
9027
9028 ; DARWIN-64-STATIC: _tailcaller:
9029 ; DARWIN-64-STATIC:     subq    $8, %rsp
9030 ; DARWIN-64-STATIC-NEXT:        call    _callee
9031 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
9032 ; DARWIN-64-STATIC-NEXT:        ret
9033
9034 ; DARWIN-64-DYNAMIC: _tailcaller:
9035 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
9036 ; DARWIN-64-DYNAMIC-NEXT:       call    _callee
9037 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
9038 ; DARWIN-64-DYNAMIC-NEXT:       ret
9039
9040 ; DARWIN-64-PIC: _tailcaller:
9041 ; DARWIN-64-PIC:        subq    $8, %rsp
9042 ; DARWIN-64-PIC-NEXT:   call    _callee
9043 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
9044 ; DARWIN-64-PIC-NEXT:   ret
9045 }
9046
9047 define void @dtailcaller() nounwind {
9048 entry:
9049         tail call void @dcallee() nounwind
9050         ret void
9051 ; LINUX-64-STATIC: dtailcaller:
9052 ; LINUX-64-STATIC: call    dcallee
9053 ; LINUX-64-STATIC: ret
9054
9055 ; LINUX-32-STATIC: dtailcaller:
9056 ; LINUX-32-STATIC:      subl    $4, %esp
9057 ; LINUX-32-STATIC-NEXT:         call    dcallee
9058 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
9059 ; LINUX-32-STATIC-NEXT:         ret
9060
9061 ; LINUX-32-PIC: dtailcaller:
9062 ; LINUX-32-PIC:         subl    $4, %esp
9063 ; LINUX-32-PIC-NEXT:    call    dcallee
9064 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9065 ; LINUX-32-PIC-NEXT:    ret
9066
9067 ; LINUX-64-PIC: dtailcaller:
9068 ; LINUX-64-PIC:         subq    $8, %rsp
9069 ; LINUX-64-PIC-NEXT:    call    dcallee
9070 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
9071 ; LINUX-64-PIC-NEXT:    ret
9072
9073 ; DARWIN-32-STATIC: _dtailcaller:
9074 ; DARWIN-32-STATIC:     subl    $12, %esp
9075 ; DARWIN-32-STATIC-NEXT:        call    _dcallee
9076 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9077 ; DARWIN-32-STATIC-NEXT:        ret
9078
9079 ; DARWIN-32-DYNAMIC: _dtailcaller:
9080 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9081 ; DARWIN-32-DYNAMIC-NEXT:       call    _dcallee
9082 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9083 ; DARWIN-32-DYNAMIC-NEXT:       ret
9084
9085 ; DARWIN-32-PIC: _dtailcaller:
9086 ; DARWIN-32-PIC:        subl    $12, %esp
9087 ; DARWIN-32-PIC-NEXT:   call    _dcallee
9088 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9089 ; DARWIN-32-PIC-NEXT:   ret
9090
9091 ; DARWIN-64-STATIC: _dtailcaller:
9092 ; DARWIN-64-STATIC:     subq    $8, %rsp
9093 ; DARWIN-64-STATIC-NEXT:        call    _dcallee
9094 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
9095 ; DARWIN-64-STATIC-NEXT:        ret
9096
9097 ; DARWIN-64-DYNAMIC: _dtailcaller:
9098 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
9099 ; DARWIN-64-DYNAMIC-NEXT:       call    _dcallee
9100 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
9101 ; DARWIN-64-DYNAMIC-NEXT:       ret
9102
9103 ; DARWIN-64-PIC: _dtailcaller:
9104 ; DARWIN-64-PIC:        subq    $8, %rsp
9105 ; DARWIN-64-PIC-NEXT:   call    _dcallee
9106 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
9107 ; DARWIN-64-PIC-NEXT:   ret
9108 }
9109
9110 define void @ltailcaller() nounwind {
9111 entry:
9112         tail call void @lcallee() nounwind
9113         ret void
9114 ; LINUX-64-STATIC: ltailcaller:
9115 ; LINUX-64-STATIC: call    lcallee
9116 ; LINUX-64-STATIC: ret
9117
9118 ; LINUX-32-STATIC: ltailcaller:
9119 ; LINUX-32-STATIC:      subl    $4, %esp
9120 ; LINUX-32-STATIC-NEXT:         call    lcallee
9121 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
9122 ; LINUX-32-STATIC-NEXT:         ret
9123
9124 ; LINUX-32-PIC: ltailcaller:
9125 ; LINUX-32-PIC:         subl    $4, %esp
9126 ; LINUX-32-PIC-NEXT:    call    lcallee
9127 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9128 ; LINUX-32-PIC-NEXT:    ret
9129
9130 ; LINUX-64-PIC: ltailcaller:
9131 ; LINUX-64-PIC:         subq    $8, %rsp
9132 ; LINUX-64-PIC-NEXT:    call    lcallee@PLT
9133 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
9134 ; LINUX-64-PIC-NEXT:    ret
9135
9136 ; DARWIN-32-STATIC: _ltailcaller:
9137 ; DARWIN-32-STATIC:     subl    $12, %esp
9138 ; DARWIN-32-STATIC-NEXT:        call    _lcallee
9139 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9140 ; DARWIN-32-STATIC-NEXT:        ret
9141
9142 ; DARWIN-32-DYNAMIC: _ltailcaller:
9143 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9144 ; DARWIN-32-DYNAMIC-NEXT:       call    _lcallee
9145 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9146 ; DARWIN-32-DYNAMIC-NEXT:       ret
9147
9148 ; DARWIN-32-PIC: _ltailcaller:
9149 ; DARWIN-32-PIC:        subl    $12, %esp
9150 ; DARWIN-32-PIC-NEXT:   call    _lcallee
9151 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9152 ; DARWIN-32-PIC-NEXT:   ret
9153
9154 ; DARWIN-64-STATIC: _ltailcaller:
9155 ; DARWIN-64-STATIC:     subq    $8, %rsp
9156 ; DARWIN-64-STATIC-NEXT:        call    _lcallee
9157 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
9158 ; DARWIN-64-STATIC-NEXT:        ret
9159
9160 ; DARWIN-64-DYNAMIC: _ltailcaller:
9161 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
9162 ; DARWIN-64-DYNAMIC-NEXT:       call    _lcallee
9163 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
9164 ; DARWIN-64-DYNAMIC-NEXT:       ret
9165
9166 ; DARWIN-64-PIC: _ltailcaller:
9167 ; DARWIN-64-PIC:        subq    $8, %rsp
9168 ; DARWIN-64-PIC-NEXT:   call    _lcallee
9169 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
9170 ; DARWIN-64-PIC-NEXT:   ret
9171 }
9172
9173 define void @icaller() nounwind {
9174 entry:
9175         %0 = load void ()** @ifunc, align 8
9176         tail call void %0() nounwind
9177         %1 = load void ()** @ifunc, align 8
9178         tail call void %1() nounwind
9179         ret void
9180 ; LINUX-64-STATIC: icaller:
9181 ; LINUX-64-STATIC: call    *ifunc
9182 ; LINUX-64-STATIC: call    *ifunc
9183 ; LINUX-64-STATIC: ret
9184
9185 ; LINUX-32-STATIC: icaller:
9186 ; LINUX-32-STATIC:      subl    $4, %esp
9187 ; LINUX-32-STATIC-NEXT:         call    *ifunc
9188 ; LINUX-32-STATIC-NEXT:         call    *ifunc
9189 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
9190 ; LINUX-32-STATIC-NEXT:         ret
9191
9192 ; LINUX-32-PIC: icaller:
9193 ; LINUX-32-PIC:         subl    $4, %esp
9194 ; LINUX-32-PIC-NEXT:    call    *ifunc
9195 ; LINUX-32-PIC-NEXT:    call    *ifunc
9196 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9197 ; LINUX-32-PIC-NEXT:    ret
9198
9199 ; LINUX-64-PIC: icaller:
9200 ; LINUX-64-PIC:         pushq   %rbx
9201 ; LINUX-64-PIC-NEXT:    movq    ifunc@GOTPCREL(%rip), %rbx
9202 ; LINUX-64-PIC-NEXT:    call    *(%rbx)
9203 ; LINUX-64-PIC-NEXT:    call    *(%rbx)
9204 ; LINUX-64-PIC-NEXT:    popq    %rbx
9205 ; LINUX-64-PIC-NEXT:    ret
9206
9207 ; DARWIN-32-STATIC: _icaller:
9208 ; DARWIN-32-STATIC:     subl    $12, %esp
9209 ; DARWIN-32-STATIC-NEXT:        call    *_ifunc
9210 ; DARWIN-32-STATIC-NEXT:        call    *_ifunc
9211 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9212 ; DARWIN-32-STATIC-NEXT:        ret
9213
9214 ; DARWIN-32-DYNAMIC: _icaller:
9215 ; DARWIN-32-DYNAMIC:    pushl   %esi
9216 ; DARWIN-32-DYNAMIC-NEXT:       subl    $8, %esp
9217 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ifunc$non_lazy_ptr, %esi
9218 ; DARWIN-32-DYNAMIC-NEXT:       call    *(%esi)
9219 ; DARWIN-32-DYNAMIC-NEXT:       call    *(%esi)
9220 ; DARWIN-32-DYNAMIC-NEXT:       addl    $8, %esp
9221 ; DARWIN-32-DYNAMIC-NEXT:       popl    %esi
9222 ; DARWIN-32-DYNAMIC-NEXT:       ret
9223
9224 ; DARWIN-32-PIC: _icaller:
9225 ; DARWIN-32-PIC:        pushl   %esi
9226 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9227 ; DARWIN-32-PIC-NEXT:   call    "L143$pb"
9228 ; DARWIN-32-PIC-NEXT: "L143$pb":
9229 ; DARWIN-32-PIC-NEXT:   popl    %eax
9230 ; DARWIN-32-PIC-NEXT:   movl    L_ifunc$non_lazy_ptr-"L143$pb"(%eax), %esi
9231 ; DARWIN-32-PIC-NEXT:   call    *(%esi)
9232 ; DARWIN-32-PIC-NEXT:   call    *(%esi)
9233 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9234 ; DARWIN-32-PIC-NEXT:   popl    %esi
9235 ; DARWIN-32-PIC-NEXT:   ret
9236
9237 ; DARWIN-64-STATIC: _icaller:
9238 ; DARWIN-64-STATIC:     pushq   %rbx
9239 ; DARWIN-64-STATIC-NEXT:        movq    _ifunc@GOTPCREL(%rip), %rbx
9240 ; DARWIN-64-STATIC-NEXT:        call    *(%rbx)
9241 ; DARWIN-64-STATIC-NEXT:        call    *(%rbx)
9242 ; DARWIN-64-STATIC-NEXT:        popq    %rbx
9243 ; DARWIN-64-STATIC-NEXT:        ret
9244
9245 ; DARWIN-64-DYNAMIC: _icaller:
9246 ; DARWIN-64-DYNAMIC:    pushq   %rbx
9247 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ifunc@GOTPCREL(%rip), %rbx
9248 ; DARWIN-64-DYNAMIC-NEXT:       call    *(%rbx)
9249 ; DARWIN-64-DYNAMIC-NEXT:       call    *(%rbx)
9250 ; DARWIN-64-DYNAMIC-NEXT:       popq    %rbx
9251 ; DARWIN-64-DYNAMIC-NEXT:       ret
9252
9253 ; DARWIN-64-PIC: _icaller:
9254 ; DARWIN-64-PIC:        pushq   %rbx
9255 ; DARWIN-64-PIC-NEXT:   movq    _ifunc@GOTPCREL(%rip), %rbx
9256 ; DARWIN-64-PIC-NEXT:   call    *(%rbx)
9257 ; DARWIN-64-PIC-NEXT:   call    *(%rbx)
9258 ; DARWIN-64-PIC-NEXT:   popq    %rbx
9259 ; DARWIN-64-PIC-NEXT:   ret
9260 }
9261
9262 define void @dicaller() nounwind {
9263 entry:
9264         %0 = load void ()** @difunc, align 8
9265         tail call void %0() nounwind
9266         %1 = load void ()** @difunc, align 8
9267         tail call void %1() nounwind
9268         ret void
9269 ; LINUX-64-STATIC: dicaller:
9270 ; LINUX-64-STATIC: call    *difunc
9271 ; LINUX-64-STATIC: call    *difunc
9272 ; LINUX-64-STATIC: ret
9273
9274 ; LINUX-32-STATIC: dicaller:
9275 ; LINUX-32-STATIC:      subl    $4, %esp
9276 ; LINUX-32-STATIC-NEXT:         call    *difunc
9277 ; LINUX-32-STATIC-NEXT:         call    *difunc
9278 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
9279 ; LINUX-32-STATIC-NEXT:         ret
9280
9281 ; LINUX-32-PIC: dicaller:
9282 ; LINUX-32-PIC:         subl    $4, %esp
9283 ; LINUX-32-PIC-NEXT:    call    *difunc
9284 ; LINUX-32-PIC-NEXT:    call    *difunc
9285 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9286 ; LINUX-32-PIC-NEXT:    ret
9287
9288 ; LINUX-64-PIC: dicaller:
9289 ; LINUX-64-PIC:         pushq   %rbx
9290 ; LINUX-64-PIC-NEXT:    movq    difunc@GOTPCREL(%rip), %rbx
9291 ; LINUX-64-PIC-NEXT:    call    *(%rbx)
9292 ; LINUX-64-PIC-NEXT:    call    *(%rbx)
9293 ; LINUX-64-PIC-NEXT:    popq    %rbx
9294 ; LINUX-64-PIC-NEXT:    ret
9295
9296 ; DARWIN-32-STATIC: _dicaller:
9297 ; DARWIN-32-STATIC:     subl    $12, %esp
9298 ; DARWIN-32-STATIC-NEXT:        call    *_difunc
9299 ; DARWIN-32-STATIC-NEXT:        call    *_difunc
9300 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9301 ; DARWIN-32-STATIC-NEXT:        ret
9302
9303 ; DARWIN-32-DYNAMIC: _dicaller:
9304 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9305 ; DARWIN-32-DYNAMIC-NEXT:       call    *_difunc
9306 ; DARWIN-32-DYNAMIC-NEXT:       call    *_difunc
9307 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9308 ; DARWIN-32-DYNAMIC-NEXT:       ret
9309
9310 ; DARWIN-32-PIC: _dicaller:
9311 ; DARWIN-32-PIC:        pushl   %esi
9312 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9313 ; DARWIN-32-PIC-NEXT:   call    "L144$pb"
9314 ; DARWIN-32-PIC-NEXT: "L144$pb":
9315 ; DARWIN-32-PIC-NEXT:   popl    %esi
9316 ; DARWIN-32-PIC-NEXT:   call    *_difunc-"L144$pb"(%esi)
9317 ; DARWIN-32-PIC-NEXT:   call    *_difunc-"L144$pb"(%esi)
9318 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9319 ; DARWIN-32-PIC-NEXT:   popl    %esi
9320 ; DARWIN-32-PIC-NEXT:   ret
9321
9322 ; DARWIN-64-STATIC: _dicaller:
9323 ; DARWIN-64-STATIC:     subq    $8, %rsp
9324 ; DARWIN-64-STATIC-NEXT:        call    *_difunc(%rip)
9325 ; DARWIN-64-STATIC-NEXT:        call    *_difunc(%rip)
9326 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
9327 ; DARWIN-64-STATIC-NEXT:        ret
9328
9329 ; DARWIN-64-DYNAMIC: _dicaller:
9330 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
9331 ; DARWIN-64-DYNAMIC-NEXT:       call    *_difunc(%rip)
9332 ; DARWIN-64-DYNAMIC-NEXT:       call    *_difunc(%rip)
9333 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
9334 ; DARWIN-64-DYNAMIC-NEXT:       ret
9335
9336 ; DARWIN-64-PIC: _dicaller:
9337 ; DARWIN-64-PIC:        subq    $8, %rsp
9338 ; DARWIN-64-PIC-NEXT:   call    *_difunc(%rip)
9339 ; DARWIN-64-PIC-NEXT:   call    *_difunc(%rip)
9340 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
9341 ; DARWIN-64-PIC-NEXT:   ret
9342 }
9343
9344 define void @licaller() nounwind {
9345 entry:
9346         %0 = load void ()** @lifunc, align 8
9347         tail call void %0() nounwind
9348         %1 = load void ()** @lifunc, align 8
9349         tail call void %1() nounwind
9350         ret void
9351 ; LINUX-64-STATIC: licaller:
9352 ; LINUX-64-STATIC: call    *lifunc
9353 ; LINUX-64-STATIC: call    *lifunc
9354 ; LINUX-64-STATIC: ret
9355
9356 ; LINUX-32-STATIC: licaller:
9357 ; LINUX-32-STATIC:      subl    $4, %esp
9358 ; LINUX-32-STATIC-NEXT:         call    *lifunc
9359 ; LINUX-32-STATIC-NEXT:         call    *lifunc
9360 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
9361 ; LINUX-32-STATIC-NEXT:         ret
9362
9363 ; LINUX-32-PIC: licaller:
9364 ; LINUX-32-PIC:         subl    $4, %esp
9365 ; LINUX-32-PIC-NEXT:    call    *lifunc
9366 ; LINUX-32-PIC-NEXT:    call    *lifunc
9367 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9368 ; LINUX-32-PIC-NEXT:    ret
9369
9370 ; LINUX-64-PIC: licaller:
9371 ; LINUX-64-PIC:         subq    $8, %rsp
9372 ; LINUX-64-PIC-NEXT:    call    *lifunc(%rip)
9373 ; LINUX-64-PIC-NEXT:    call    *lifunc(%rip)
9374 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
9375 ; LINUX-64-PIC-NEXT:    ret
9376
9377 ; DARWIN-32-STATIC: _licaller:
9378 ; DARWIN-32-STATIC:     subl    $12, %esp
9379 ; DARWIN-32-STATIC-NEXT:        call    *_lifunc
9380 ; DARWIN-32-STATIC-NEXT:        call    *_lifunc
9381 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9382 ; DARWIN-32-STATIC-NEXT:        ret
9383
9384 ; DARWIN-32-DYNAMIC: _licaller:
9385 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9386 ; DARWIN-32-DYNAMIC-NEXT:       call    *_lifunc
9387 ; DARWIN-32-DYNAMIC-NEXT:       call    *_lifunc
9388 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9389 ; DARWIN-32-DYNAMIC-NEXT:       ret
9390
9391 ; DARWIN-32-PIC: _licaller:
9392 ; DARWIN-32-PIC:        pushl   %esi
9393 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9394 ; DARWIN-32-PIC-NEXT:   call    "L145$pb"
9395 ; DARWIN-32-PIC-NEXT: "L145$pb":
9396 ; DARWIN-32-PIC-NEXT:   popl    %esi
9397 ; DARWIN-32-PIC-NEXT:   call    *_lifunc-"L145$pb"(%esi)
9398 ; DARWIN-32-PIC-NEXT:   call    *_lifunc-"L145$pb"(%esi)
9399 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9400 ; DARWIN-32-PIC-NEXT:   popl    %esi
9401 ; DARWIN-32-PIC-NEXT:   ret
9402
9403 ; DARWIN-64-STATIC: _licaller:
9404 ; DARWIN-64-STATIC:     subq    $8, %rsp
9405 ; DARWIN-64-STATIC-NEXT:        call    *_lifunc(%rip)
9406 ; DARWIN-64-STATIC-NEXT:        call    *_lifunc(%rip)
9407 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
9408 ; DARWIN-64-STATIC-NEXT:        ret
9409
9410 ; DARWIN-64-DYNAMIC: _licaller:
9411 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
9412 ; DARWIN-64-DYNAMIC-NEXT:       call    *_lifunc(%rip)
9413 ; DARWIN-64-DYNAMIC-NEXT:       call    *_lifunc(%rip)
9414 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
9415 ; DARWIN-64-DYNAMIC-NEXT:       ret
9416
9417 ; DARWIN-64-PIC: _licaller:
9418 ; DARWIN-64-PIC:        subq    $8, %rsp
9419 ; DARWIN-64-PIC-NEXT:   call    *_lifunc(%rip)
9420 ; DARWIN-64-PIC-NEXT:   call    *_lifunc(%rip)
9421 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
9422 ; DARWIN-64-PIC-NEXT:   ret
9423 }
9424
9425 define void @itailcaller() nounwind {
9426 entry:
9427         %0 = load void ()** @ifunc, align 8
9428         tail call void %0() nounwind
9429         %1 = load void ()** @ifunc, align 8
9430         tail call void %1() nounwind
9431         ret void
9432 ; LINUX-64-STATIC: itailcaller:
9433 ; LINUX-64-STATIC: call    *ifunc
9434 ; LINUX-64-STATIC: call    *ifunc
9435 ; LINUX-64-STATIC: ret
9436
9437 ; LINUX-32-STATIC: itailcaller:
9438 ; LINUX-32-STATIC:      subl    $4, %esp
9439 ; LINUX-32-STATIC-NEXT:         call    *ifunc
9440 ; LINUX-32-STATIC-NEXT:         call    *ifunc
9441 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
9442 ; LINUX-32-STATIC-NEXT:         ret
9443
9444 ; LINUX-32-PIC: itailcaller:
9445 ; LINUX-32-PIC:         subl    $4, %esp
9446 ; LINUX-32-PIC-NEXT:    call    *ifunc
9447 ; LINUX-32-PIC-NEXT:    call    *ifunc
9448 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9449 ; LINUX-32-PIC-NEXT:    ret
9450
9451 ; LINUX-64-PIC: itailcaller:
9452 ; LINUX-64-PIC:         pushq   %rbx
9453 ; LINUX-64-PIC-NEXT:    movq    ifunc@GOTPCREL(%rip), %rbx
9454 ; LINUX-64-PIC-NEXT:    call    *(%rbx)
9455 ; LINUX-64-PIC-NEXT:    call    *(%rbx)
9456 ; LINUX-64-PIC-NEXT:    popq    %rbx
9457 ; LINUX-64-PIC-NEXT:    ret
9458
9459 ; DARWIN-32-STATIC: _itailcaller:
9460 ; DARWIN-32-STATIC:     subl    $12, %esp
9461 ; DARWIN-32-STATIC-NEXT:        call    *_ifunc
9462 ; DARWIN-32-STATIC-NEXT:        call    *_ifunc
9463 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9464 ; DARWIN-32-STATIC-NEXT:        ret
9465
9466 ; DARWIN-32-DYNAMIC: _itailcaller:
9467 ; DARWIN-32-DYNAMIC:    pushl   %esi
9468 ; DARWIN-32-DYNAMIC-NEXT:       subl    $8, %esp
9469 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ifunc$non_lazy_ptr, %esi
9470 ; DARWIN-32-DYNAMIC-NEXT:       call    *(%esi)
9471 ; DARWIN-32-DYNAMIC-NEXT:       call    *(%esi)
9472 ; DARWIN-32-DYNAMIC-NEXT:       addl    $8, %esp
9473 ; DARWIN-32-DYNAMIC-NEXT:       popl    %esi
9474 ; DARWIN-32-DYNAMIC-NEXT:       ret
9475
9476 ; DARWIN-32-PIC: _itailcaller:
9477 ; DARWIN-32-PIC:        pushl   %esi
9478 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9479 ; DARWIN-32-PIC-NEXT:   call    "L146$pb"
9480 ; DARWIN-32-PIC-NEXT: "L146$pb":
9481 ; DARWIN-32-PIC-NEXT:   popl    %eax
9482 ; DARWIN-32-PIC-NEXT:   movl    L_ifunc$non_lazy_ptr-"L146$pb"(%eax), %esi
9483 ; DARWIN-32-PIC-NEXT:   call    *(%esi)
9484 ; DARWIN-32-PIC-NEXT:   call    *(%esi)
9485 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9486 ; DARWIN-32-PIC-NEXT:   popl    %esi
9487 ; DARWIN-32-PIC-NEXT:   ret
9488
9489 ; DARWIN-64-STATIC: _itailcaller:
9490 ; DARWIN-64-STATIC:     pushq   %rbx
9491 ; DARWIN-64-STATIC-NEXT:        movq    _ifunc@GOTPCREL(%rip), %rbx
9492 ; DARWIN-64-STATIC-NEXT:        call    *(%rbx)
9493 ; DARWIN-64-STATIC-NEXT:        call    *(%rbx)
9494 ; DARWIN-64-STATIC-NEXT:        popq    %rbx
9495 ; DARWIN-64-STATIC-NEXT:        ret
9496
9497 ; DARWIN-64-DYNAMIC: _itailcaller:
9498 ; DARWIN-64-DYNAMIC:    pushq   %rbx
9499 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ifunc@GOTPCREL(%rip), %rbx
9500 ; DARWIN-64-DYNAMIC-NEXT:       call    *(%rbx)
9501 ; DARWIN-64-DYNAMIC-NEXT:       call    *(%rbx)
9502 ; DARWIN-64-DYNAMIC-NEXT:       popq    %rbx
9503 ; DARWIN-64-DYNAMIC-NEXT:       ret
9504
9505 ; DARWIN-64-PIC: _itailcaller:
9506 ; DARWIN-64-PIC:        pushq   %rbx
9507 ; DARWIN-64-PIC-NEXT:   movq    _ifunc@GOTPCREL(%rip), %rbx
9508 ; DARWIN-64-PIC-NEXT:   call    *(%rbx)
9509 ; DARWIN-64-PIC-NEXT:   call    *(%rbx)
9510 ; DARWIN-64-PIC-NEXT:   popq    %rbx
9511 ; DARWIN-64-PIC-NEXT:   ret
9512 }
9513
9514 define void @ditailcaller() nounwind {
9515 entry:
9516         %0 = load void ()** @difunc, align 8
9517         tail call void %0() nounwind
9518         ret void
9519 ; LINUX-64-STATIC: ditailcaller:
9520 ; LINUX-64-STATIC: call    *difunc
9521 ; LINUX-64-STATIC: ret
9522
9523 ; LINUX-32-STATIC: ditailcaller:
9524 ; LINUX-32-STATIC:      subl    $4, %esp
9525 ; LINUX-32-STATIC-NEXT:         call    *difunc
9526 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
9527 ; LINUX-32-STATIC-NEXT:         ret
9528
9529 ; LINUX-32-PIC: ditailcaller:
9530 ; LINUX-32-PIC:         subl    $4, %esp
9531 ; LINUX-32-PIC-NEXT:    call    *difunc
9532 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9533 ; LINUX-32-PIC-NEXT:    ret
9534
9535 ; LINUX-64-PIC: ditailcaller:
9536 ; LINUX-64-PIC:         subq    $8, %rsp
9537 ; LINUX-64-PIC-NEXT:    movq    difunc@GOTPCREL(%rip), %rax
9538 ; LINUX-64-PIC-NEXT:    call    *(%rax)
9539 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
9540 ; LINUX-64-PIC-NEXT:    ret
9541
9542 ; DARWIN-32-STATIC: _ditailcaller:
9543 ; DARWIN-32-STATIC:     subl    $12, %esp
9544 ; DARWIN-32-STATIC-NEXT:        call    *_difunc
9545 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9546 ; DARWIN-32-STATIC-NEXT:        ret
9547
9548 ; DARWIN-32-DYNAMIC: _ditailcaller:
9549 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9550 ; DARWIN-32-DYNAMIC-NEXT:       call    *_difunc
9551 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9552 ; DARWIN-32-DYNAMIC-NEXT:       ret
9553
9554 ; DARWIN-32-PIC: _ditailcaller:
9555 ; DARWIN-32-PIC:        subl    $12, %esp
9556 ; DARWIN-32-PIC-NEXT:   call    "L147$pb"
9557 ; DARWIN-32-PIC-NEXT: "L147$pb":
9558 ; DARWIN-32-PIC-NEXT:   popl    %eax
9559 ; DARWIN-32-PIC-NEXT:   call    *_difunc-"L147$pb"(%eax)
9560 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9561 ; DARWIN-32-PIC-NEXT:   ret
9562
9563 ; DARWIN-64-STATIC: _ditailcaller:
9564 ; DARWIN-64-STATIC:     subq    $8, %rsp
9565 ; DARWIN-64-STATIC-NEXT:        call    *_difunc(%rip)
9566 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
9567 ; DARWIN-64-STATIC-NEXT:        ret
9568
9569 ; DARWIN-64-DYNAMIC: _ditailcaller:
9570 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
9571 ; DARWIN-64-DYNAMIC-NEXT:       call    *_difunc(%rip)
9572 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
9573 ; DARWIN-64-DYNAMIC-NEXT:       ret
9574
9575 ; DARWIN-64-PIC: _ditailcaller:
9576 ; DARWIN-64-PIC:        call    *_difunc(%rip)
9577 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
9578 ; DARWIN-64-PIC-NEXT:   ret
9579 }
9580
9581 define void @litailcaller() nounwind {
9582 entry:
9583         %0 = load void ()** @lifunc, align 8
9584         tail call void %0() nounwind
9585         ret void
9586 ; LINUX-64-STATIC: litailcaller:
9587 ; LINUX-64-STATIC: call    *lifunc
9588 ; LINUX-64-STATIC: ret
9589
9590 ; LINUX-32-STATIC: litailcaller:
9591 ; LINUX-32-STATIC:      subl    $4, %esp
9592 ; LINUX-32-STATIC-NEXT:         call    *lifunc
9593 ; LINUX-32-STATIC-NEXT:         addl    $4, %esp
9594 ; LINUX-32-STATIC-NEXT:         ret
9595
9596 ; LINUX-32-PIC: litailcaller:
9597 ; LINUX-32-PIC:         subl    $4, %esp
9598 ; LINUX-32-PIC-NEXT:    call    *lifunc
9599 ; LINUX-32-PIC-NEXT:    addl    $4, %esp
9600 ; LINUX-32-PIC-NEXT:    ret
9601
9602 ; LINUX-64-PIC: litailcaller:
9603 ; LINUX-64-PIC:         subq    $8, %rsp
9604 ; LINUX-64-PIC-NEXT:    call    *lifunc(%rip)
9605 ; LINUX-64-PIC-NEXT:    addq    $8, %rsp
9606 ; LINUX-64-PIC-NEXT:    ret
9607
9608 ; DARWIN-32-STATIC: _litailcaller:
9609 ; DARWIN-32-STATIC:     subl    $12, %esp
9610 ; DARWIN-32-STATIC-NEXT:        call    *_lifunc
9611 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9612 ; DARWIN-32-STATIC-NEXT:        ret
9613
9614 ; DARWIN-32-DYNAMIC: _litailcaller:
9615 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9616 ; DARWIN-32-DYNAMIC-NEXT:       call    *_lifunc
9617 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9618 ; DARWIN-32-DYNAMIC-NEXT:       ret
9619
9620 ; DARWIN-32-PIC: _litailcaller:
9621 ; DARWIN-32-PIC:        subl    $12, %esp
9622 ; DARWIN-32-PIC-NEXT:   call    "L148$pb"
9623 ; DARWIN-32-PIC-NEXT: "L148$pb":
9624 ; DARWIN-32-PIC-NEXT:   popl    %eax
9625 ; DARWIN-32-PIC-NEXT:   call    *_lifunc-"L148$pb"(%eax)
9626 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9627 ; DARWIN-32-PIC-NEXT:   ret
9628
9629 ; DARWIN-64-STATIC: _litailcaller:
9630 ; DARWIN-64-STATIC:     subq    $8, %rsp
9631 ; DARWIN-64-STATIC-NEXT:        call    *_lifunc(%rip)
9632 ; DARWIN-64-STATIC-NEXT:        addq    $8, %rsp
9633 ; DARWIN-64-STATIC-NEXT:        ret
9634
9635 ; DARWIN-64-DYNAMIC: _litailcaller:
9636 ; DARWIN-64-DYNAMIC:    subq    $8, %rsp
9637 ; DARWIN-64-DYNAMIC-NEXT:       call    *_lifunc(%rip)
9638 ; DARWIN-64-DYNAMIC-NEXT:       addq    $8, %rsp
9639 ; DARWIN-64-DYNAMIC-NEXT:       ret
9640
9641 ; DARWIN-64-PIC: _litailcaller:
9642 ; DARWIN-64-PIC:        subq    $8, %rsp
9643 ; DARWIN-64-PIC-NEXT:   call    *_lifunc(%rip)
9644 ; DARWIN-64-PIC-NEXT:   addq    $8, %rsp
9645 ; DARWIN-64-PIC-NEXT:   ret
9646 }