pass machinemoduleinfo down into getSymbolForDwarfGlobalReference,
[llvm/avr.git] / test / CodeGen / X86 / abi-isel.ll
bloba6fd2d8fe1348e7faa518f28584a45509897e64b
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
186 ; LINUX-32-STATIC: foo01:
187 ; LINUX-32-STATIC:      movl    $dst, ptr
188 ; LINUX-32-STATIC-NEXT:         ret
190 ; LINUX-32-PIC: foo01:
191 ; LINUX-32-PIC:         movl    $dst, ptr
192 ; LINUX-32-PIC-NEXT:    ret
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
200 ; DARWIN-32-STATIC: _foo01:
201 ; DARWIN-32-STATIC:     movl    $_dst, _ptr
202 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
246 ; LINUX-32-STATIC: fxo01:
247 ; LINUX-32-STATIC:      movl    $xdst, ptr
248 ; LINUX-32-STATIC-NEXT:         ret
250 ; LINUX-32-PIC: fxo01:
251 ; LINUX-32-PIC:         movl    $xdst, ptr
252 ; LINUX-32-PIC-NEXT:    ret
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
260 ; DARWIN-32-STATIC: _fxo01:
261 ; DARWIN-32-STATIC:     movl    $_xdst, _ptr
262 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
531 ; LINUX-32-STATIC: foo04:
532 ; LINUX-32-STATIC:      movl    $ddst, dptr
533 ; LINUX-32-STATIC-NEXT:         ret
535 ; LINUX-32-PIC: foo04:
536 ; LINUX-32-PIC:         movl    $ddst, dptr
537 ; LINUX-32-PIC-NEXT:    ret
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
545 ; DARWIN-32-STATIC: _foo04:
546 ; DARWIN-32-STATIC:     movl    $_ddst, _dptr
547 ; DARWIN-32-STATIC-NEXT:        ret
549 ; DARWIN-32-DYNAMIC: _foo04:
550 ; DARWIN-32-DYNAMIC:    movl    $_ddst, _dptr
551 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
716 ; LINUX-32-STATIC: foo07:
717 ; LINUX-32-STATIC:      movl    $ldst, lptr
718 ; LINUX-32-STATIC-NEXT:         ret
720 ; LINUX-32-PIC: foo07:
721 ; LINUX-32-PIC:         movl    $ldst, lptr
722 ; LINUX-32-PIC-NEXT:    ret
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
729 ; DARWIN-32-STATIC: _foo07:
730 ; DARWIN-32-STATIC:     movl    $_ldst, _lptr
731 ; DARWIN-32-STATIC-NEXT:        ret
733 ; DARWIN-32-DYNAMIC: _foo07:
734 ; DARWIN-32-DYNAMIC:    movl    $_ldst, _lptr
735 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
981 ; LINUX-32-STATIC: qux01:
982 ; LINUX-32-STATIC:      movl    $dst+64, ptr
983 ; LINUX-32-STATIC-NEXT:         ret
985 ; LINUX-32-PIC: qux01:
986 ; LINUX-32-PIC:         movl    $dst+64, ptr
987 ; LINUX-32-PIC-NEXT:    ret
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
996 ; DARWIN-32-STATIC: _qux01:
997 ; DARWIN-32-STATIC:     movl    $_dst+64, _ptr
998 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
1047 ; LINUX-32-STATIC: qxx01:
1048 ; LINUX-32-STATIC:      movl    $xdst+64, ptr
1049 ; LINUX-32-STATIC-NEXT:         ret
1051 ; LINUX-32-PIC: qxx01:
1052 ; LINUX-32-PIC:         movl    $xdst+64, ptr
1053 ; LINUX-32-PIC-NEXT:    ret
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
1062 ; DARWIN-32-STATIC: _qxx01:
1063 ; DARWIN-32-STATIC:     movl    $_xdst+64, _ptr
1064 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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-L19$pb)+64(%eax), %ecx
1313 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (_ddst-L19$pb)+64(%eax)
1314 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
1340 ; LINUX-32-STATIC: qux04:
1341 ; LINUX-32-STATIC:      movl    $ddst+64, dptr
1342 ; LINUX-32-STATIC-NEXT:         ret
1344 ; LINUX-32-PIC: qux04:
1345 ; LINUX-32-PIC:         movl    $ddst+64, dptr
1346 ; LINUX-32-PIC-NEXT:    ret
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
1355 ; DARWIN-32-STATIC: _qux04:
1356 ; DARWIN-32-STATIC:     movl    $_ddst+64, _dptr
1357 ; DARWIN-32-STATIC-NEXT:        ret
1359 ; DARWIN-32-DYNAMIC: _qux04:
1360 ; DARWIN-32-DYNAMIC:    movl    $_ddst+64, _dptr
1361 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L20$pb)+64(%eax), %ecx
1368 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-L20$pb(%eax)
1369 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L21$pb)+64(%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
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
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
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
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
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
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
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
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
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
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-L22$pb)+64(%eax), %ecx
1500 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (_ldst-L22$pb)+64(%eax)
1501 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
1527 ; LINUX-32-STATIC: qux07:
1528 ; LINUX-32-STATIC:      movl    $ldst+64, lptr
1529 ; LINUX-32-STATIC-NEXT:         ret
1531 ; LINUX-32-PIC: qux07:
1532 ; LINUX-32-PIC:         movl    $ldst+64, lptr
1533 ; LINUX-32-PIC-NEXT:    ret
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
1540 ; DARWIN-32-STATIC: _qux07:
1541 ; DARWIN-32-STATIC:     movl    $_ldst+64, _lptr
1542 ; DARWIN-32-STATIC-NEXT:        ret
1544 ; DARWIN-32-DYNAMIC: _qux07:
1545 ; DARWIN-32-DYNAMIC:    movl    $_ldst+64, _lptr
1546 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L23$pb)+64(%eax), %ecx
1553 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-L23$pb(%eax)
1554 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L24$pb)+64(%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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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-L43$pb)+64(%eax,%ecx,4), %edx
3119 ; DARWIN-32-PIC-NEXT:   movl    %edx, (_ddst-L43$pb)+64(%eax,%ecx,4)
3120 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L44$pb)+64(%eax,%ecx,4), %ecx
3192 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-L44$pb(%eax)
3193 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L45$pb)+64(%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
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
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
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
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
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
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
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
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
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
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-L46$pb)+64(%eax,%ecx,4), %edx
3347 ; DARWIN-32-PIC-NEXT:   movl    %edx, (_ldst-L46$pb)+64(%eax,%ecx,4)
3348 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L47$pb)+64(%eax,%ecx,4), %ecx
3419 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-L47$pb(%eax)
3420 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L48$pb)+64(%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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3602 ; LINUX-32-STATIC: moo01:
3603 ; LINUX-32-STATIC:      movl    $dst+262144, ptr
3604 ; LINUX-32-STATIC-NEXT:         ret
3606 ; LINUX-32-PIC: moo01:
3607 ; LINUX-32-PIC:         movl    $dst+262144, ptr
3608 ; LINUX-32-PIC-NEXT:    ret
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
3617 ; DARWIN-32-STATIC: _moo01:
3618 ; DARWIN-32-STATIC:     movl    $_dst+262144, _ptr
3619 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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-L52$pb)+262144(%eax), %ecx
3785 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (_ddst-L52$pb)+262144(%eax)
3786 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
3812 ; LINUX-32-STATIC: moo04:
3813 ; LINUX-32-STATIC:      movl    $ddst+262144, dptr
3814 ; LINUX-32-STATIC-NEXT:         ret
3816 ; LINUX-32-PIC: moo04:
3817 ; LINUX-32-PIC:         movl    $ddst+262144, dptr
3818 ; LINUX-32-PIC-NEXT:    ret
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
3827 ; DARWIN-32-STATIC: _moo04:
3828 ; DARWIN-32-STATIC:     movl    $_ddst+262144, _dptr
3829 ; DARWIN-32-STATIC-NEXT:        ret
3831 ; DARWIN-32-DYNAMIC: _moo04:
3832 ; DARWIN-32-DYNAMIC:    movl    $_ddst+262144, _dptr
3833 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L53$pb)+262144(%eax), %ecx
3840 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-L53$pb(%eax)
3841 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L54$pb)+262144(%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
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
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
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
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
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
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
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
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
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
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-L55$pb)+262144(%eax), %ecx
3972 ; DARWIN-32-PIC-NEXT:   movl    %ecx, (_ldst-L55$pb)+262144(%eax)
3973 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
3999 ; LINUX-32-STATIC: moo07:
4000 ; LINUX-32-STATIC:      movl    $ldst+262144, lptr
4001 ; LINUX-32-STATIC-NEXT:         ret
4003 ; LINUX-32-PIC: moo07:
4004 ; LINUX-32-PIC:         movl    $ldst+262144, lptr
4005 ; LINUX-32-PIC-NEXT:    ret
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
4012 ; DARWIN-32-STATIC: _moo07:
4013 ; DARWIN-32-STATIC:     movl    $_ldst+262144, _lptr
4014 ; DARWIN-32-STATIC-NEXT:        ret
4016 ; DARWIN-32-DYNAMIC: _moo07:
4017 ; DARWIN-32-DYNAMIC:    movl    $_ldst+262144, _lptr
4018 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L56$pb)+262144(%eax), %ecx
4025 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-L56$pb(%eax)
4026 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L57$pb)+262144(%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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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-L61$pb)+262144(%eax,%ecx,4), %edx
4411 ; DARWIN-32-PIC-NEXT:   movl    %edx, (_ddst-L61$pb)+262144(%eax,%ecx,4)
4412 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L62$pb)+262144(%eax,%ecx,4), %ecx
4484 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _dptr-L62$pb(%eax)
4485 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L63$pb)+262144(%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
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
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
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
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
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
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
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
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
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
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-L64$pb)+262144(%eax,%ecx,4), %edx
4639 ; DARWIN-32-PIC-NEXT:   movl    %edx, (_ldst-L64$pb)+262144(%eax,%ecx,4)
4640 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L65$pb)+262144(%eax,%ecx,4), %ecx
4711 ; DARWIN-32-PIC-NEXT:   movl    %ecx, _lptr-L65$pb(%eax)
4712 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L66$pb)+262144(%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
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
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
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
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
4822 ; LINUX-32-STATIC: bar00:
4823 ; LINUX-32-STATIC:      movl    $src, %eax
4824 ; LINUX-32-STATIC-NEXT:         ret
4826 ; LINUX-32-PIC: bar00:
4827 ; LINUX-32-PIC:         movl    $src, %eax
4828 ; LINUX-32-PIC-NEXT:    ret
4830 ; LINUX-64-PIC: bar00:
4831 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
4832 ; LINUX-64-PIC-NEXT:    ret
4834 ; DARWIN-32-STATIC: _bar00:
4835 ; DARWIN-32-STATIC:     movl    $_src, %eax
4836 ; DARWIN-32-STATIC-NEXT:        ret
4838 ; DARWIN-32-DYNAMIC: _bar00:
4839 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
4840 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
4849 ; DARWIN-64-STATIC: _bar00:
4850 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
4851 ; DARWIN-64-STATIC-NEXT:        ret
4853 ; DARWIN-64-DYNAMIC: _bar00:
4854 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
4855 ; DARWIN-64-DYNAMIC-NEXT:       ret
4857 ; DARWIN-64-PIC: _bar00:
4858 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
4859 ; DARWIN-64-PIC-NEXT:   ret
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
4869 ; LINUX-32-STATIC: bxr00:
4870 ; LINUX-32-STATIC:      movl    $xsrc, %eax
4871 ; LINUX-32-STATIC-NEXT:         ret
4873 ; LINUX-32-PIC: bxr00:
4874 ; LINUX-32-PIC:         movl    $xsrc, %eax
4875 ; LINUX-32-PIC-NEXT:    ret
4877 ; LINUX-64-PIC: bxr00:
4878 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
4879 ; LINUX-64-PIC-NEXT:    ret
4881 ; DARWIN-32-STATIC: _bxr00:
4882 ; DARWIN-32-STATIC:     movl    $_xsrc, %eax
4883 ; DARWIN-32-STATIC-NEXT:        ret
4885 ; DARWIN-32-DYNAMIC: _bxr00:
4886 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
4887 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
4896 ; DARWIN-64-STATIC: _bxr00:
4897 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
4898 ; DARWIN-64-STATIC-NEXT:        ret
4900 ; DARWIN-64-DYNAMIC: _bxr00:
4901 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
4902 ; DARWIN-64-DYNAMIC-NEXT:       ret
4904 ; DARWIN-64-PIC: _bxr00:
4905 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
4906 ; DARWIN-64-PIC-NEXT:   ret
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
4916 ; LINUX-32-STATIC: bar01:
4917 ; LINUX-32-STATIC:      movl    $dst, %eax
4918 ; LINUX-32-STATIC-NEXT:         ret
4920 ; LINUX-32-PIC: bar01:
4921 ; LINUX-32-PIC:         movl    $dst, %eax
4922 ; LINUX-32-PIC-NEXT:    ret
4924 ; LINUX-64-PIC: bar01:
4925 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
4926 ; LINUX-64-PIC-NEXT:    ret
4928 ; DARWIN-32-STATIC: _bar01:
4929 ; DARWIN-32-STATIC:     movl    $_dst, %eax
4930 ; DARWIN-32-STATIC-NEXT:        ret
4932 ; DARWIN-32-DYNAMIC: _bar01:
4933 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
4934 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
4943 ; DARWIN-64-STATIC: _bar01:
4944 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
4945 ; DARWIN-64-STATIC-NEXT:        ret
4947 ; DARWIN-64-DYNAMIC: _bar01:
4948 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
4949 ; DARWIN-64-DYNAMIC-NEXT:       ret
4951 ; DARWIN-64-PIC: _bar01:
4952 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
4953 ; DARWIN-64-PIC-NEXT:   ret
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
4963 ; LINUX-32-STATIC: bxr01:
4964 ; LINUX-32-STATIC:      movl    $xdst, %eax
4965 ; LINUX-32-STATIC-NEXT:         ret
4967 ; LINUX-32-PIC: bxr01:
4968 ; LINUX-32-PIC:         movl    $xdst, %eax
4969 ; LINUX-32-PIC-NEXT:    ret
4971 ; LINUX-64-PIC: bxr01:
4972 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
4973 ; LINUX-64-PIC-NEXT:    ret
4975 ; DARWIN-32-STATIC: _bxr01:
4976 ; DARWIN-32-STATIC:     movl    $_xdst, %eax
4977 ; DARWIN-32-STATIC-NEXT:        ret
4979 ; DARWIN-32-DYNAMIC: _bxr01:
4980 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
4981 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
4990 ; DARWIN-64-STATIC: _bxr01:
4991 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
4992 ; DARWIN-64-STATIC-NEXT:        ret
4994 ; DARWIN-64-DYNAMIC: _bxr01:
4995 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
4996 ; DARWIN-64-DYNAMIC-NEXT:       ret
4998 ; DARWIN-64-PIC: _bxr01:
4999 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
5000 ; DARWIN-64-PIC-NEXT:   ret
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
5010 ; LINUX-32-STATIC: bar02:
5011 ; LINUX-32-STATIC:      movl    $ptr, %eax
5012 ; LINUX-32-STATIC-NEXT:         ret
5014 ; LINUX-32-PIC: bar02:
5015 ; LINUX-32-PIC:         movl    $ptr, %eax
5016 ; LINUX-32-PIC-NEXT:    ret
5018 ; LINUX-64-PIC: bar02:
5019 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rax
5020 ; LINUX-64-PIC-NEXT:    ret
5022 ; DARWIN-32-STATIC: _bar02:
5023 ; DARWIN-32-STATIC:     movl    $_ptr, %eax
5024 ; DARWIN-32-STATIC-NEXT:        ret
5026 ; DARWIN-32-DYNAMIC: _bar02:
5027 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %eax
5028 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5037 ; DARWIN-64-STATIC: _bar02:
5038 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rax
5039 ; DARWIN-64-STATIC-NEXT:        ret
5041 ; DARWIN-64-DYNAMIC: _bar02:
5042 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rax
5043 ; DARWIN-64-DYNAMIC-NEXT:       ret
5045 ; DARWIN-64-PIC: _bar02:
5046 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rax
5047 ; DARWIN-64-PIC-NEXT:   ret
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
5057 ; LINUX-32-STATIC: bar03:
5058 ; LINUX-32-STATIC:      movl    $dsrc, %eax
5059 ; LINUX-32-STATIC-NEXT:         ret
5061 ; LINUX-32-PIC: bar03:
5062 ; LINUX-32-PIC:         movl    $dsrc, %eax
5063 ; LINUX-32-PIC-NEXT:    ret
5065 ; LINUX-64-PIC: bar03:
5066 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
5067 ; LINUX-64-PIC-NEXT:    ret
5069 ; DARWIN-32-STATIC: _bar03:
5070 ; DARWIN-32-STATIC:     movl    $_dsrc, %eax
5071 ; DARWIN-32-STATIC-NEXT:        ret
5073 ; DARWIN-32-DYNAMIC: _bar03:
5074 ; DARWIN-32-DYNAMIC:    movl    $_dsrc, %eax
5075 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5084 ; DARWIN-64-STATIC: _bar03:
5085 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
5086 ; DARWIN-64-STATIC-NEXT:        ret
5088 ; DARWIN-64-DYNAMIC: _bar03:
5089 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
5090 ; DARWIN-64-DYNAMIC-NEXT:       ret
5092 ; DARWIN-64-PIC: _bar03:
5093 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
5094 ; DARWIN-64-PIC-NEXT:   ret
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
5104 ; LINUX-32-STATIC: bar04:
5105 ; LINUX-32-STATIC:      movl    $ddst, %eax
5106 ; LINUX-32-STATIC-NEXT:         ret
5108 ; LINUX-32-PIC: bar04:
5109 ; LINUX-32-PIC:         movl    $ddst, %eax
5110 ; LINUX-32-PIC-NEXT:    ret
5112 ; LINUX-64-PIC: bar04:
5113 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
5114 ; LINUX-64-PIC-NEXT:    ret
5116 ; DARWIN-32-STATIC: _bar04:
5117 ; DARWIN-32-STATIC:     movl    $_ddst, %eax
5118 ; DARWIN-32-STATIC-NEXT:        ret
5120 ; DARWIN-32-DYNAMIC: _bar04:
5121 ; DARWIN-32-DYNAMIC:    movl    $_ddst, %eax
5122 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5131 ; DARWIN-64-STATIC: _bar04:
5132 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
5133 ; DARWIN-64-STATIC-NEXT:        ret
5135 ; DARWIN-64-DYNAMIC: _bar04:
5136 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
5137 ; DARWIN-64-DYNAMIC-NEXT:       ret
5139 ; DARWIN-64-PIC: _bar04:
5140 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
5141 ; DARWIN-64-PIC-NEXT:   ret
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
5151 ; LINUX-32-STATIC: bar05:
5152 ; LINUX-32-STATIC:      movl    $dptr, %eax
5153 ; LINUX-32-STATIC-NEXT:         ret
5155 ; LINUX-32-PIC: bar05:
5156 ; LINUX-32-PIC:         movl    $dptr, %eax
5157 ; LINUX-32-PIC-NEXT:    ret
5159 ; LINUX-64-PIC: bar05:
5160 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rax
5161 ; LINUX-64-PIC-NEXT:    ret
5163 ; DARWIN-32-STATIC: _bar05:
5164 ; DARWIN-32-STATIC:     movl    $_dptr, %eax
5165 ; DARWIN-32-STATIC-NEXT:        ret
5167 ; DARWIN-32-DYNAMIC: _bar05:
5168 ; DARWIN-32-DYNAMIC:    movl    $_dptr, %eax
5169 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5178 ; DARWIN-64-STATIC: _bar05:
5179 ; DARWIN-64-STATIC:     leaq    _dptr(%rip), %rax
5180 ; DARWIN-64-STATIC-NEXT:        ret
5182 ; DARWIN-64-DYNAMIC: _bar05:
5183 ; DARWIN-64-DYNAMIC:    leaq    _dptr(%rip), %rax
5184 ; DARWIN-64-DYNAMIC-NEXT:       ret
5186 ; DARWIN-64-PIC: _bar05:
5187 ; DARWIN-64-PIC:        leaq    _dptr(%rip), %rax
5188 ; DARWIN-64-PIC-NEXT:   ret
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
5198 ; LINUX-32-STATIC: bar06:
5199 ; LINUX-32-STATIC:      movl    $lsrc, %eax
5200 ; LINUX-32-STATIC-NEXT:         ret
5202 ; LINUX-32-PIC: bar06:
5203 ; LINUX-32-PIC:         movl    $lsrc, %eax
5204 ; LINUX-32-PIC-NEXT:    ret
5206 ; LINUX-64-PIC: bar06:
5207 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
5208 ; LINUX-64-PIC-NEXT:    ret
5210 ; DARWIN-32-STATIC: _bar06:
5211 ; DARWIN-32-STATIC:     movl    $_lsrc, %eax
5212 ; DARWIN-32-STATIC-NEXT:        ret
5214 ; DARWIN-32-DYNAMIC: _bar06:
5215 ; DARWIN-32-DYNAMIC:    movl    $_lsrc, %eax
5216 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5225 ; DARWIN-64-STATIC: _bar06:
5226 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
5227 ; DARWIN-64-STATIC-NEXT:        ret
5229 ; DARWIN-64-DYNAMIC: _bar06:
5230 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
5231 ; DARWIN-64-DYNAMIC-NEXT:       ret
5233 ; DARWIN-64-PIC: _bar06:
5234 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
5235 ; DARWIN-64-PIC-NEXT:   ret
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
5245 ; LINUX-32-STATIC: bar07:
5246 ; LINUX-32-STATIC:      movl    $ldst, %eax
5247 ; LINUX-32-STATIC-NEXT:         ret
5249 ; LINUX-32-PIC: bar07:
5250 ; LINUX-32-PIC:         movl    $ldst, %eax
5251 ; LINUX-32-PIC-NEXT:    ret
5253 ; LINUX-64-PIC: bar07:
5254 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
5255 ; LINUX-64-PIC-NEXT:    ret
5257 ; DARWIN-32-STATIC: _bar07:
5258 ; DARWIN-32-STATIC:     movl    $_ldst, %eax
5259 ; DARWIN-32-STATIC-NEXT:        ret
5261 ; DARWIN-32-DYNAMIC: _bar07:
5262 ; DARWIN-32-DYNAMIC:    movl    $_ldst, %eax
5263 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5272 ; DARWIN-64-STATIC: _bar07:
5273 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
5274 ; DARWIN-64-STATIC-NEXT:        ret
5276 ; DARWIN-64-DYNAMIC: _bar07:
5277 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
5278 ; DARWIN-64-DYNAMIC-NEXT:       ret
5280 ; DARWIN-64-PIC: _bar07:
5281 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
5282 ; DARWIN-64-PIC-NEXT:   ret
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
5292 ; LINUX-32-STATIC: bar08:
5293 ; LINUX-32-STATIC:      movl    $lptr, %eax
5294 ; LINUX-32-STATIC-NEXT:         ret
5296 ; LINUX-32-PIC: bar08:
5297 ; LINUX-32-PIC:         movl    $lptr, %eax
5298 ; LINUX-32-PIC-NEXT:    ret
5300 ; LINUX-64-PIC: bar08:
5301 ; LINUX-64-PIC:         leaq    lptr(%rip), %rax
5302 ; LINUX-64-PIC-NEXT:    ret
5304 ; DARWIN-32-STATIC: _bar08:
5305 ; DARWIN-32-STATIC:     movl    $_lptr, %eax
5306 ; DARWIN-32-STATIC-NEXT:        ret
5308 ; DARWIN-32-DYNAMIC: _bar08:
5309 ; DARWIN-32-DYNAMIC:    movl    $_lptr, %eax
5310 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5319 ; DARWIN-64-STATIC: _bar08:
5320 ; DARWIN-64-STATIC:     leaq    _lptr(%rip), %rax
5321 ; DARWIN-64-STATIC-NEXT:        ret
5323 ; DARWIN-64-DYNAMIC: _bar08:
5324 ; DARWIN-64-DYNAMIC:    leaq    _lptr(%rip), %rax
5325 ; DARWIN-64-DYNAMIC-NEXT:       ret
5327 ; DARWIN-64-PIC: _bar08:
5328 ; DARWIN-64-PIC:        leaq    _lptr(%rip), %rax
5329 ; DARWIN-64-PIC-NEXT:   ret
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
5339 ; LINUX-32-STATIC: har00:
5340 ; LINUX-32-STATIC:      movl    $src, %eax
5341 ; LINUX-32-STATIC-NEXT:         ret
5343 ; LINUX-32-PIC: har00:
5344 ; LINUX-32-PIC:         movl    $src, %eax
5345 ; LINUX-32-PIC-NEXT:    ret
5347 ; LINUX-64-PIC: har00:
5348 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
5349 ; LINUX-64-PIC-NEXT:    ret
5351 ; DARWIN-32-STATIC: _har00:
5352 ; DARWIN-32-STATIC:     movl    $_src, %eax
5353 ; DARWIN-32-STATIC-NEXT:        ret
5355 ; DARWIN-32-DYNAMIC: _har00:
5356 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
5357 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5366 ; DARWIN-64-STATIC: _har00:
5367 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
5368 ; DARWIN-64-STATIC-NEXT:        ret
5370 ; DARWIN-64-DYNAMIC: _har00:
5371 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
5372 ; DARWIN-64-DYNAMIC-NEXT:       ret
5374 ; DARWIN-64-PIC: _har00:
5375 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
5376 ; DARWIN-64-PIC-NEXT:   ret
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
5386 ; LINUX-32-STATIC: hxr00:
5387 ; LINUX-32-STATIC:      movl    $xsrc, %eax
5388 ; LINUX-32-STATIC-NEXT:         ret
5390 ; LINUX-32-PIC: hxr00:
5391 ; LINUX-32-PIC:         movl    $xsrc, %eax
5392 ; LINUX-32-PIC-NEXT:    ret
5394 ; LINUX-64-PIC: hxr00:
5395 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
5396 ; LINUX-64-PIC-NEXT:    ret
5398 ; DARWIN-32-STATIC: _hxr00:
5399 ; DARWIN-32-STATIC:     movl    $_xsrc, %eax
5400 ; DARWIN-32-STATIC-NEXT:        ret
5402 ; DARWIN-32-DYNAMIC: _hxr00:
5403 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
5404 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5413 ; DARWIN-64-STATIC: _hxr00:
5414 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
5415 ; DARWIN-64-STATIC-NEXT:        ret
5417 ; DARWIN-64-DYNAMIC: _hxr00:
5418 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
5419 ; DARWIN-64-DYNAMIC-NEXT:       ret
5421 ; DARWIN-64-PIC: _hxr00:
5422 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
5423 ; DARWIN-64-PIC-NEXT:   ret
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
5433 ; LINUX-32-STATIC: har01:
5434 ; LINUX-32-STATIC:      movl    $dst, %eax
5435 ; LINUX-32-STATIC-NEXT:         ret
5437 ; LINUX-32-PIC: har01:
5438 ; LINUX-32-PIC:         movl    $dst, %eax
5439 ; LINUX-32-PIC-NEXT:    ret
5441 ; LINUX-64-PIC: har01:
5442 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
5443 ; LINUX-64-PIC-NEXT:    ret
5445 ; DARWIN-32-STATIC: _har01:
5446 ; DARWIN-32-STATIC:     movl    $_dst, %eax
5447 ; DARWIN-32-STATIC-NEXT:        ret
5449 ; DARWIN-32-DYNAMIC: _har01:
5450 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
5451 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5460 ; DARWIN-64-STATIC: _har01:
5461 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
5462 ; DARWIN-64-STATIC-NEXT:        ret
5464 ; DARWIN-64-DYNAMIC: _har01:
5465 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
5466 ; DARWIN-64-DYNAMIC-NEXT:       ret
5468 ; DARWIN-64-PIC: _har01:
5469 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
5470 ; DARWIN-64-PIC-NEXT:   ret
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
5480 ; LINUX-32-STATIC: hxr01:
5481 ; LINUX-32-STATIC:      movl    $xdst, %eax
5482 ; LINUX-32-STATIC-NEXT:         ret
5484 ; LINUX-32-PIC: hxr01:
5485 ; LINUX-32-PIC:         movl    $xdst, %eax
5486 ; LINUX-32-PIC-NEXT:    ret
5488 ; LINUX-64-PIC: hxr01:
5489 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
5490 ; LINUX-64-PIC-NEXT:    ret
5492 ; DARWIN-32-STATIC: _hxr01:
5493 ; DARWIN-32-STATIC:     movl    $_xdst, %eax
5494 ; DARWIN-32-STATIC-NEXT:        ret
5496 ; DARWIN-32-DYNAMIC: _hxr01:
5497 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
5498 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5507 ; DARWIN-64-STATIC: _hxr01:
5508 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
5509 ; DARWIN-64-STATIC-NEXT:        ret
5511 ; DARWIN-64-DYNAMIC: _hxr01:
5512 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
5513 ; DARWIN-64-DYNAMIC-NEXT:       ret
5515 ; DARWIN-64-PIC: _hxr01:
5516 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
5517 ; DARWIN-64-PIC-NEXT:   ret
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
5529 ; LINUX-32-STATIC: har02:
5530 ; LINUX-32-STATIC:      movl    ptr, %eax
5531 ; LINUX-32-STATIC-NEXT:         ret
5533 ; LINUX-32-PIC: har02:
5534 ; LINUX-32-PIC:         movl    ptr, %eax
5535 ; LINUX-32-PIC-NEXT:    ret
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
5542 ; DARWIN-32-STATIC: _har02:
5543 ; DARWIN-32-STATIC:     movl    _ptr, %eax
5544 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
5582 ; LINUX-32-STATIC: har03:
5583 ; LINUX-32-STATIC:      movl    $dsrc, %eax
5584 ; LINUX-32-STATIC-NEXT:         ret
5586 ; LINUX-32-PIC: har03:
5587 ; LINUX-32-PIC:         movl    $dsrc, %eax
5588 ; LINUX-32-PIC-NEXT:    ret
5590 ; LINUX-64-PIC: har03:
5591 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
5592 ; LINUX-64-PIC-NEXT:    ret
5594 ; DARWIN-32-STATIC: _har03:
5595 ; DARWIN-32-STATIC:     movl    $_dsrc, %eax
5596 ; DARWIN-32-STATIC-NEXT:        ret
5598 ; DARWIN-32-DYNAMIC: _har03:
5599 ; DARWIN-32-DYNAMIC:    movl    $_dsrc, %eax
5600 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5609 ; DARWIN-64-STATIC: _har03:
5610 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
5611 ; DARWIN-64-STATIC-NEXT:        ret
5613 ; DARWIN-64-DYNAMIC: _har03:
5614 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
5615 ; DARWIN-64-DYNAMIC-NEXT:       ret
5617 ; DARWIN-64-PIC: _har03:
5618 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
5619 ; DARWIN-64-PIC-NEXT:   ret
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
5629 ; LINUX-32-STATIC: har04:
5630 ; LINUX-32-STATIC:      movl    $ddst, %eax
5631 ; LINUX-32-STATIC-NEXT:         ret
5633 ; LINUX-32-PIC: har04:
5634 ; LINUX-32-PIC:         movl    $ddst, %eax
5635 ; LINUX-32-PIC-NEXT:    ret
5637 ; LINUX-64-PIC: har04:
5638 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
5639 ; LINUX-64-PIC-NEXT:    ret
5641 ; DARWIN-32-STATIC: _har04:
5642 ; DARWIN-32-STATIC:     movl    $_ddst, %eax
5643 ; DARWIN-32-STATIC-NEXT:        ret
5645 ; DARWIN-32-DYNAMIC: _har04:
5646 ; DARWIN-32-DYNAMIC:    movl    $_ddst, %eax
5647 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5656 ; DARWIN-64-STATIC: _har04:
5657 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
5658 ; DARWIN-64-STATIC-NEXT:        ret
5660 ; DARWIN-64-DYNAMIC: _har04:
5661 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
5662 ; DARWIN-64-DYNAMIC-NEXT:       ret
5664 ; DARWIN-64-PIC: _har04:
5665 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
5666 ; DARWIN-64-PIC-NEXT:   ret
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
5678 ; LINUX-32-STATIC: har05:
5679 ; LINUX-32-STATIC:      movl    dptr, %eax
5680 ; LINUX-32-STATIC-NEXT:         ret
5682 ; LINUX-32-PIC: har05:
5683 ; LINUX-32-PIC:         movl    dptr, %eax
5684 ; LINUX-32-PIC-NEXT:    ret
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
5691 ; DARWIN-32-STATIC: _har05:
5692 ; DARWIN-32-STATIC:     movl    _dptr, %eax
5693 ; DARWIN-32-STATIC-NEXT:        ret
5695 ; DARWIN-32-DYNAMIC: _har05:
5696 ; DARWIN-32-DYNAMIC:    movl    _dptr, %eax
5697 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5706 ; DARWIN-64-STATIC: _har05:
5707 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
5708 ; DARWIN-64-STATIC-NEXT:        ret
5710 ; DARWIN-64-DYNAMIC: _har05:
5711 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
5712 ; DARWIN-64-DYNAMIC-NEXT:       ret
5714 ; DARWIN-64-PIC: _har05:
5715 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
5716 ; DARWIN-64-PIC-NEXT:   ret
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
5726 ; LINUX-32-STATIC: har06:
5727 ; LINUX-32-STATIC:      movl    $lsrc, %eax
5728 ; LINUX-32-STATIC-NEXT:         ret
5730 ; LINUX-32-PIC: har06:
5731 ; LINUX-32-PIC:         movl    $lsrc, %eax
5732 ; LINUX-32-PIC-NEXT:    ret
5734 ; LINUX-64-PIC: har06:
5735 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
5736 ; LINUX-64-PIC-NEXT:    ret
5738 ; DARWIN-32-STATIC: _har06:
5739 ; DARWIN-32-STATIC:     movl    $_lsrc, %eax
5740 ; DARWIN-32-STATIC-NEXT:        ret
5742 ; DARWIN-32-DYNAMIC: _har06:
5743 ; DARWIN-32-DYNAMIC:    movl    $_lsrc, %eax
5744 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5753 ; DARWIN-64-STATIC: _har06:
5754 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
5755 ; DARWIN-64-STATIC-NEXT:        ret
5757 ; DARWIN-64-DYNAMIC: _har06:
5758 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
5759 ; DARWIN-64-DYNAMIC-NEXT:       ret
5761 ; DARWIN-64-PIC: _har06:
5762 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
5763 ; DARWIN-64-PIC-NEXT:   ret
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
5773 ; LINUX-32-STATIC: har07:
5774 ; LINUX-32-STATIC:      movl    $ldst, %eax
5775 ; LINUX-32-STATIC-NEXT:         ret
5777 ; LINUX-32-PIC: har07:
5778 ; LINUX-32-PIC:         movl    $ldst, %eax
5779 ; LINUX-32-PIC-NEXT:    ret
5781 ; LINUX-64-PIC: har07:
5782 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
5783 ; LINUX-64-PIC-NEXT:    ret
5785 ; DARWIN-32-STATIC: _har07:
5786 ; DARWIN-32-STATIC:     movl    $_ldst, %eax
5787 ; DARWIN-32-STATIC-NEXT:        ret
5789 ; DARWIN-32-DYNAMIC: _har07:
5790 ; DARWIN-32-DYNAMIC:    movl    $_ldst, %eax
5791 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5800 ; DARWIN-64-STATIC: _har07:
5801 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
5802 ; DARWIN-64-STATIC-NEXT:        ret
5804 ; DARWIN-64-DYNAMIC: _har07:
5805 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
5806 ; DARWIN-64-DYNAMIC-NEXT:       ret
5808 ; DARWIN-64-PIC: _har07:
5809 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
5810 ; DARWIN-64-PIC-NEXT:   ret
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
5822 ; LINUX-32-STATIC: har08:
5823 ; LINUX-32-STATIC:      movl    lptr, %eax
5824 ; LINUX-32-STATIC-NEXT:         ret
5826 ; LINUX-32-PIC: har08:
5827 ; LINUX-32-PIC:         movl    lptr, %eax
5828 ; LINUX-32-PIC-NEXT:    ret
5830 ; LINUX-64-PIC: har08:
5831 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
5832 ; LINUX-64-PIC-NEXT:    ret
5834 ; DARWIN-32-STATIC: _har08:
5835 ; DARWIN-32-STATIC:     movl    _lptr, %eax
5836 ; DARWIN-32-STATIC-NEXT:        ret
5838 ; DARWIN-32-DYNAMIC: _har08:
5839 ; DARWIN-32-DYNAMIC:    movl    _lptr, %eax
5840 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
5849 ; DARWIN-64-STATIC: _har08:
5850 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
5851 ; DARWIN-64-STATIC-NEXT:        ret
5853 ; DARWIN-64-DYNAMIC: _har08:
5854 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
5855 ; DARWIN-64-DYNAMIC-NEXT:       ret
5857 ; DARWIN-64-PIC: _har08:
5858 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
5859 ; DARWIN-64-PIC-NEXT:   ret
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
5869 ; LINUX-32-STATIC: bat00:
5870 ; LINUX-32-STATIC:      movl    $src+64, %eax
5871 ; LINUX-32-STATIC-NEXT:         ret
5873 ; LINUX-32-PIC: bat00:
5874 ; LINUX-32-PIC:         movl    $src+64, %eax
5875 ; LINUX-32-PIC-NEXT:    ret
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
5882 ; DARWIN-32-STATIC: _bat00:
5883 ; DARWIN-32-STATIC:     movl    $_src+64, %eax
5884 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
5922 ; LINUX-32-STATIC: bxt00:
5923 ; LINUX-32-STATIC:      movl    $xsrc+64, %eax
5924 ; LINUX-32-STATIC-NEXT:         ret
5926 ; LINUX-32-PIC: bxt00:
5927 ; LINUX-32-PIC:         movl    $xsrc+64, %eax
5928 ; LINUX-32-PIC-NEXT:    ret
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
5935 ; DARWIN-32-STATIC: _bxt00:
5936 ; DARWIN-32-STATIC:     movl    $_xsrc+64, %eax
5937 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
5975 ; LINUX-32-STATIC: bat01:
5976 ; LINUX-32-STATIC:      movl    $dst+64, %eax
5977 ; LINUX-32-STATIC-NEXT:         ret
5979 ; LINUX-32-PIC: bat01:
5980 ; LINUX-32-PIC:         movl    $dst+64, %eax
5981 ; LINUX-32-PIC-NEXT:    ret
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
5988 ; DARWIN-32-STATIC: _bat01:
5989 ; DARWIN-32-STATIC:     movl    $_dst+64, %eax
5990 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
6028 ; LINUX-32-STATIC: bxt01:
6029 ; LINUX-32-STATIC:      movl    $xdst+64, %eax
6030 ; LINUX-32-STATIC-NEXT:         ret
6032 ; LINUX-32-PIC: bxt01:
6033 ; LINUX-32-PIC:         movl    $xdst+64, %eax
6034 ; LINUX-32-PIC-NEXT:    ret
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
6041 ; DARWIN-32-STATIC: _bxt01:
6042 ; DARWIN-32-STATIC:     movl    $_xdst+64, %eax
6043 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
6147 ; LINUX-32-STATIC: bat03:
6148 ; LINUX-32-STATIC:      movl    $dsrc+64, %eax
6149 ; LINUX-32-STATIC-NEXT:         ret
6151 ; LINUX-32-PIC: bat03:
6152 ; LINUX-32-PIC:         movl    $dsrc+64, %eax
6153 ; LINUX-32-PIC-NEXT:    ret
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
6160 ; DARWIN-32-STATIC: _bat03:
6161 ; DARWIN-32-STATIC:     movl    $_dsrc+64, %eax
6162 ; DARWIN-32-STATIC-NEXT:        ret
6164 ; DARWIN-32-DYNAMIC: _bat03:
6165 ; DARWIN-32-DYNAMIC:    movl    $_dsrc+64, %eax
6166 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L94$pb)+64(%eax), %eax
6173 ; DARWIN-32-PIC-NEXT:   ret
6175 ; DARWIN-64-STATIC: _bat03:
6176 ; DARWIN-64-STATIC:     leaq    _dsrc+64(%rip), %rax
6177 ; DARWIN-64-STATIC-NEXT:        ret
6179 ; DARWIN-64-DYNAMIC: _bat03:
6180 ; DARWIN-64-DYNAMIC:    leaq    _dsrc+64(%rip), %rax
6181 ; DARWIN-64-DYNAMIC-NEXT:       ret
6183 ; DARWIN-64-PIC: _bat03:
6184 ; DARWIN-64-PIC:        leaq    _dsrc+64(%rip), %rax
6185 ; DARWIN-64-PIC-NEXT:   ret
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
6195 ; LINUX-32-STATIC: bat04:
6196 ; LINUX-32-STATIC:      movl    $ddst+64, %eax
6197 ; LINUX-32-STATIC-NEXT:         ret
6199 ; LINUX-32-PIC: bat04:
6200 ; LINUX-32-PIC:         movl    $ddst+64, %eax
6201 ; LINUX-32-PIC-NEXT:    ret
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
6208 ; DARWIN-32-STATIC: _bat04:
6209 ; DARWIN-32-STATIC:     movl    $_ddst+64, %eax
6210 ; DARWIN-32-STATIC-NEXT:        ret
6212 ; DARWIN-32-DYNAMIC: _bat04:
6213 ; DARWIN-32-DYNAMIC:    movl    $_ddst+64, %eax
6214 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L95$pb)+64(%eax), %eax
6221 ; DARWIN-32-PIC-NEXT:   ret
6223 ; DARWIN-64-STATIC: _bat04:
6224 ; DARWIN-64-STATIC:     leaq    _ddst+64(%rip), %rax
6225 ; DARWIN-64-STATIC-NEXT:        ret
6227 ; DARWIN-64-DYNAMIC: _bat04:
6228 ; DARWIN-64-DYNAMIC:    leaq    _ddst+64(%rip), %rax
6229 ; DARWIN-64-DYNAMIC-NEXT:       ret
6231 ; DARWIN-64-PIC: _bat04:
6232 ; DARWIN-64-PIC:        leaq    _ddst+64(%rip), %rax
6233 ; DARWIN-64-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
6304 ; LINUX-32-STATIC: bat06:
6305 ; LINUX-32-STATIC:      movl    $lsrc+64, %eax
6306 ; LINUX-32-STATIC-NEXT:         ret
6308 ; LINUX-32-PIC: bat06:
6309 ; LINUX-32-PIC:         movl    $lsrc+64, %eax
6310 ; LINUX-32-PIC-NEXT:    ret
6312 ; LINUX-64-PIC: bat06:
6313 ; LINUX-64-PIC:         leaq    lsrc+64(%rip), %rax
6314 ; LINUX-64-PIC-NEXT:    ret
6316 ; DARWIN-32-STATIC: _bat06:
6317 ; DARWIN-32-STATIC:     movl    $_lsrc+64, %eax
6318 ; DARWIN-32-STATIC-NEXT:        ret
6320 ; DARWIN-32-DYNAMIC: _bat06:
6321 ; DARWIN-32-DYNAMIC:    movl    $_lsrc+64, %eax
6322 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L97$pb)+64(%eax), %eax
6329 ; DARWIN-32-PIC-NEXT:   ret
6331 ; DARWIN-64-STATIC: _bat06:
6332 ; DARWIN-64-STATIC:     leaq    _lsrc+64(%rip), %rax
6333 ; DARWIN-64-STATIC-NEXT:        ret
6335 ; DARWIN-64-DYNAMIC: _bat06:
6336 ; DARWIN-64-DYNAMIC:    leaq    _lsrc+64(%rip), %rax
6337 ; DARWIN-64-DYNAMIC-NEXT:       ret
6339 ; DARWIN-64-PIC: _bat06:
6340 ; DARWIN-64-PIC:        leaq    _lsrc+64(%rip), %rax
6341 ; DARWIN-64-PIC-NEXT:   ret
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
6351 ; LINUX-32-STATIC: bat07:
6352 ; LINUX-32-STATIC:      movl    $ldst+64, %eax
6353 ; LINUX-32-STATIC-NEXT:         ret
6355 ; LINUX-32-PIC: bat07:
6356 ; LINUX-32-PIC:         movl    $ldst+64, %eax
6357 ; LINUX-32-PIC-NEXT:    ret
6359 ; LINUX-64-PIC: bat07:
6360 ; LINUX-64-PIC:         leaq    ldst+64(%rip), %rax
6361 ; LINUX-64-PIC-NEXT:    ret
6363 ; DARWIN-32-STATIC: _bat07:
6364 ; DARWIN-32-STATIC:     movl    $_ldst+64, %eax
6365 ; DARWIN-32-STATIC-NEXT:        ret
6367 ; DARWIN-32-DYNAMIC: _bat07:
6368 ; DARWIN-32-DYNAMIC:    movl    $_ldst+64, %eax
6369 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L98$pb)+64(%eax), %eax
6376 ; DARWIN-32-PIC-NEXT:   ret
6378 ; DARWIN-64-STATIC: _bat07:
6379 ; DARWIN-64-STATIC:     leaq    _ldst+64(%rip), %rax
6380 ; DARWIN-64-STATIC-NEXT:        ret
6382 ; DARWIN-64-DYNAMIC: _bat07:
6383 ; DARWIN-64-DYNAMIC:    leaq    _ldst+64(%rip), %rax
6384 ; DARWIN-64-DYNAMIC-NEXT:       ret
6386 ; DARWIN-64-PIC: _bat07:
6387 ; DARWIN-64-PIC:        leaq    _ldst+64(%rip), %rax
6388 ; DARWIN-64-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
6458 ; LINUX-32-STATIC: bam00:
6459 ; LINUX-32-STATIC:      movl    $src+262144, %eax
6460 ; LINUX-32-STATIC-NEXT:         ret
6462 ; LINUX-32-PIC: bam00:
6463 ; LINUX-32-PIC:         movl    $src+262144, %eax
6464 ; LINUX-32-PIC-NEXT:    ret
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
6471 ; DARWIN-32-STATIC: _bam00:
6472 ; DARWIN-32-STATIC:     movl    $_src+262144, %eax
6473 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
6511 ; LINUX-32-STATIC: bam01:
6512 ; LINUX-32-STATIC:      movl    $dst+262144, %eax
6513 ; LINUX-32-STATIC-NEXT:         ret
6515 ; LINUX-32-PIC: bam01:
6516 ; LINUX-32-PIC:         movl    $dst+262144, %eax
6517 ; LINUX-32-PIC-NEXT:    ret
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
6524 ; DARWIN-32-STATIC: _bam01:
6525 ; DARWIN-32-STATIC:     movl    $_dst+262144, %eax
6526 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
6564 ; LINUX-32-STATIC: bxm01:
6565 ; LINUX-32-STATIC:      movl    $xdst+262144, %eax
6566 ; LINUX-32-STATIC-NEXT:         ret
6568 ; LINUX-32-PIC: bxm01:
6569 ; LINUX-32-PIC:         movl    $xdst+262144, %eax
6570 ; LINUX-32-PIC-NEXT:    ret
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
6577 ; DARWIN-32-STATIC: _bxm01:
6578 ; DARWIN-32-STATIC:     movl    $_xdst+262144, %eax
6579 ; DARWIN-32-STATIC-NEXT:        ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
6683 ; LINUX-32-STATIC: bam03:
6684 ; LINUX-32-STATIC:      movl    $dsrc+262144, %eax
6685 ; LINUX-32-STATIC-NEXT:         ret
6687 ; LINUX-32-PIC: bam03:
6688 ; LINUX-32-PIC:         movl    $dsrc+262144, %eax
6689 ; LINUX-32-PIC-NEXT:    ret
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
6696 ; DARWIN-32-STATIC: _bam03:
6697 ; DARWIN-32-STATIC:     movl    $_dsrc+262144, %eax
6698 ; DARWIN-32-STATIC-NEXT:        ret
6700 ; DARWIN-32-DYNAMIC: _bam03:
6701 ; DARWIN-32-DYNAMIC:    movl    $_dsrc+262144, %eax
6702 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L104$pb)+262144(%eax), %eax
6709 ; DARWIN-32-PIC-NEXT:   ret
6711 ; DARWIN-64-STATIC: _bam03:
6712 ; DARWIN-64-STATIC:     leaq    _dsrc+262144(%rip), %rax
6713 ; DARWIN-64-STATIC-NEXT:        ret
6715 ; DARWIN-64-DYNAMIC: _bam03:
6716 ; DARWIN-64-DYNAMIC:    leaq    _dsrc+262144(%rip), %rax
6717 ; DARWIN-64-DYNAMIC-NEXT:       ret
6719 ; DARWIN-64-PIC: _bam03:
6720 ; DARWIN-64-PIC:        leaq    _dsrc+262144(%rip), %rax
6721 ; DARWIN-64-PIC-NEXT:   ret
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
6731 ; LINUX-32-STATIC: bam04:
6732 ; LINUX-32-STATIC:      movl    $ddst+262144, %eax
6733 ; LINUX-32-STATIC-NEXT:         ret
6735 ; LINUX-32-PIC: bam04:
6736 ; LINUX-32-PIC:         movl    $ddst+262144, %eax
6737 ; LINUX-32-PIC-NEXT:    ret
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
6744 ; DARWIN-32-STATIC: _bam04:
6745 ; DARWIN-32-STATIC:     movl    $_ddst+262144, %eax
6746 ; DARWIN-32-STATIC-NEXT:        ret
6748 ; DARWIN-32-DYNAMIC: _bam04:
6749 ; DARWIN-32-DYNAMIC:    movl    $_ddst+262144, %eax
6750 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L105$pb)+262144(%eax), %eax
6757 ; DARWIN-32-PIC-NEXT:   ret
6759 ; DARWIN-64-STATIC: _bam04:
6760 ; DARWIN-64-STATIC:     leaq    _ddst+262144(%rip), %rax
6761 ; DARWIN-64-STATIC-NEXT:        ret
6763 ; DARWIN-64-DYNAMIC: _bam04:
6764 ; DARWIN-64-DYNAMIC:    leaq    _ddst+262144(%rip), %rax
6765 ; DARWIN-64-DYNAMIC-NEXT:       ret
6767 ; DARWIN-64-PIC: _bam04:
6768 ; DARWIN-64-PIC:        leaq    _ddst+262144(%rip), %rax
6769 ; DARWIN-64-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
6840 ; LINUX-32-STATIC: bam06:
6841 ; LINUX-32-STATIC:      movl    $lsrc+262144, %eax
6842 ; LINUX-32-STATIC-NEXT:         ret
6844 ; LINUX-32-PIC: bam06:
6845 ; LINUX-32-PIC:         movl    $lsrc+262144, %eax
6846 ; LINUX-32-PIC-NEXT:    ret
6848 ; LINUX-64-PIC: bam06:
6849 ; LINUX-64-PIC:         leaq    lsrc+262144(%rip), %rax
6850 ; LINUX-64-PIC-NEXT:    ret
6852 ; DARWIN-32-STATIC: _bam06:
6853 ; DARWIN-32-STATIC:     movl    $_lsrc+262144, %eax
6854 ; DARWIN-32-STATIC-NEXT:        ret
6856 ; DARWIN-32-DYNAMIC: _bam06:
6857 ; DARWIN-32-DYNAMIC:    movl    $_lsrc+262144, %eax
6858 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L107$pb)+262144(%eax), %eax
6865 ; DARWIN-32-PIC-NEXT:   ret
6867 ; DARWIN-64-STATIC: _bam06:
6868 ; DARWIN-64-STATIC:     leaq    _lsrc+262144(%rip), %rax
6869 ; DARWIN-64-STATIC-NEXT:        ret
6871 ; DARWIN-64-DYNAMIC: _bam06:
6872 ; DARWIN-64-DYNAMIC:    leaq    _lsrc+262144(%rip), %rax
6873 ; DARWIN-64-DYNAMIC-NEXT:       ret
6875 ; DARWIN-64-PIC: _bam06:
6876 ; DARWIN-64-PIC:        leaq    _lsrc+262144(%rip), %rax
6877 ; DARWIN-64-PIC-NEXT:   ret
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
6887 ; LINUX-32-STATIC: bam07:
6888 ; LINUX-32-STATIC:      movl    $ldst+262144, %eax
6889 ; LINUX-32-STATIC-NEXT:         ret
6891 ; LINUX-32-PIC: bam07:
6892 ; LINUX-32-PIC:         movl    $ldst+262144, %eax
6893 ; LINUX-32-PIC-NEXT:    ret
6895 ; LINUX-64-PIC: bam07:
6896 ; LINUX-64-PIC:         leaq    ldst+262144(%rip), %rax
6897 ; LINUX-64-PIC-NEXT:    ret
6899 ; DARWIN-32-STATIC: _bam07:
6900 ; DARWIN-32-STATIC:     movl    $_ldst+262144, %eax
6901 ; DARWIN-32-STATIC-NEXT:        ret
6903 ; DARWIN-32-DYNAMIC: _bam07:
6904 ; DARWIN-32-DYNAMIC:    movl    $_ldst+262144, %eax
6905 ; DARWIN-32-DYNAMIC-NEXT:       ret
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-L108$pb)+262144(%eax), %eax
6912 ; DARWIN-32-PIC-NEXT:   ret
6914 ; DARWIN-64-STATIC: _bam07:
6915 ; DARWIN-64-STATIC:     leaq    _ldst+262144(%rip), %rax
6916 ; DARWIN-64-STATIC-NEXT:        ret
6918 ; DARWIN-64-DYNAMIC: _bam07:
6919 ; DARWIN-64-DYNAMIC:    leaq    _ldst+262144(%rip), %rax
6920 ; DARWIN-64-DYNAMIC-NEXT:       ret
6922 ; DARWIN-64-PIC: _bam07:
6923 ; DARWIN-64-PIC:        leaq    _ldst+262144(%rip), %rax
6924 ; DARWIN-64-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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-L115$pb)+64(%eax,%ecx,4), %eax
7344 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L116$pb)+64(%eax,%ecx,4), %eax
7403 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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-L118$pb)+64(%eax,%ecx,4), %eax
7529 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L119$pb)+64(%eax,%ecx,4), %eax
7588 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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-L126$pb)+262144(%eax,%ecx,4), %eax
8029 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L127$pb)+262144(%eax,%ecx,4), %eax
8088 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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-L129$pb)+262144(%eax,%ecx,4), %eax
8214 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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-L130$pb)+262144(%eax,%ecx,4), %eax
8273 ; DARWIN-32-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
8486 declare void @x()
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
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
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
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
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
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
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
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
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
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
8617 declare void @y()
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
8626 ; LINUX-32-STATIC: address:
8627 ; LINUX-32-STATIC:      movl    $callee, %eax
8628 ; LINUX-32-STATIC-NEXT:         ret
8630 ; LINUX-32-PIC: address:
8631 ; LINUX-32-PIC:         movl    $callee, %eax
8632 ; LINUX-32-PIC-NEXT:    ret
8634 ; LINUX-64-PIC: address:
8635 ; LINUX-64-PIC:         movq    callee@GOTPCREL(%rip), %rax
8636 ; LINUX-64-PIC-NEXT:    ret
8638 ; DARWIN-32-STATIC: _address:
8639 ; DARWIN-32-STATIC:     movl    $_callee, %eax
8640 ; DARWIN-32-STATIC-NEXT:        ret
8642 ; DARWIN-32-DYNAMIC: _address:
8643 ; DARWIN-32-DYNAMIC:    movl    L_callee$non_lazy_ptr, %eax
8644 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
8653 ; DARWIN-64-STATIC: _address:
8654 ; DARWIN-64-STATIC:     movq    _callee@GOTPCREL(%rip), %rax
8655 ; DARWIN-64-STATIC-NEXT:        ret
8657 ; DARWIN-64-DYNAMIC: _address:
8658 ; DARWIN-64-DYNAMIC:    movq    _callee@GOTPCREL(%rip), %rax
8659 ; DARWIN-64-DYNAMIC-NEXT:       ret
8661 ; DARWIN-64-PIC: _address:
8662 ; DARWIN-64-PIC:        movq    _callee@GOTPCREL(%rip), %rax
8663 ; DARWIN-64-PIC-NEXT:   ret
8666 declare void @callee()
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
8675 ; LINUX-32-STATIC: laddress:
8676 ; LINUX-32-STATIC:      movl    $lcallee, %eax
8677 ; LINUX-32-STATIC-NEXT:         ret
8679 ; LINUX-32-PIC: laddress:
8680 ; LINUX-32-PIC:         movl    $lcallee, %eax
8681 ; LINUX-32-PIC-NEXT:    ret
8683 ; LINUX-64-PIC: laddress:
8684 ; LINUX-64-PIC:         movq    lcallee@GOTPCREL(%rip), %rax
8685 ; LINUX-64-PIC-NEXT:    ret
8687 ; DARWIN-32-STATIC: _laddress:
8688 ; DARWIN-32-STATIC:     movl    $_lcallee, %eax
8689 ; DARWIN-32-STATIC-NEXT:        ret
8691 ; DARWIN-32-DYNAMIC: _laddress:
8692 ; DARWIN-32-DYNAMIC:    movl    $_lcallee, %eax
8693 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
8702 ; DARWIN-64-STATIC: _laddress:
8703 ; DARWIN-64-STATIC:     leaq    _lcallee(%rip), %rax
8704 ; DARWIN-64-STATIC-NEXT:        ret
8706 ; DARWIN-64-DYNAMIC: _laddress:
8707 ; DARWIN-64-DYNAMIC:    leaq    _lcallee(%rip), %rax
8708 ; DARWIN-64-DYNAMIC-NEXT:       ret
8710 ; DARWIN-64-PIC: _laddress:
8711 ; DARWIN-64-PIC:        leaq    _lcallee(%rip), %rax
8712 ; DARWIN-64-PIC-NEXT:   ret
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
8722 ; LINUX-32-STATIC: daddress:
8723 ; LINUX-32-STATIC:      movl    $dcallee, %eax
8724 ; LINUX-32-STATIC-NEXT:         ret
8726 ; LINUX-32-PIC: daddress:
8727 ; LINUX-32-PIC:         movl    $dcallee, %eax
8728 ; LINUX-32-PIC-NEXT:    ret
8730 ; LINUX-64-PIC: daddress:
8731 ; LINUX-64-PIC:         leaq    dcallee(%rip), %rax
8732 ; LINUX-64-PIC-NEXT:    ret
8734 ; DARWIN-32-STATIC: _daddress:
8735 ; DARWIN-32-STATIC:     movl    $_dcallee, %eax
8736 ; DARWIN-32-STATIC-NEXT:        ret
8738 ; DARWIN-32-DYNAMIC: _daddress:
8739 ; DARWIN-32-DYNAMIC:    movl    $_dcallee, %eax
8740 ; DARWIN-32-DYNAMIC-NEXT:       ret
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
8749 ; DARWIN-64-STATIC: _daddress:
8750 ; DARWIN-64-STATIC:     leaq    _dcallee(%rip), %rax
8751 ; DARWIN-64-STATIC-NEXT:        ret
8753 ; DARWIN-64-DYNAMIC: _daddress:
8754 ; DARWIN-64-DYNAMIC:    leaq    _dcallee(%rip), %rax
8755 ; DARWIN-64-DYNAMIC-NEXT:       ret
8757 ; DARWIN-64-PIC: _daddress:
8758 ; DARWIN-64-PIC:        leaq    _dcallee(%rip), %rax
8759 ; DARWIN-64-PIC-NEXT:   ret
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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