Fix vbroadcast matching logic to early unmatch if the node doesn't have
[oota-llvm.git] / test / CodeGen / X86 / abi-isel.ll
1 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-STATIC
2 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-PIC
3
4 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-64-STATIC
5 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=LINUX-64-PIC
6
7 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-32-STATIC
8 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC
9 ; RUN: llc < %s -asm-verbose=0 -mtriple=i686-apple-darwin -march=x86 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-PIC
10
11 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-64-STATIC
12 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-DYNAMIC
13 ; RUN: llc < %s -asm-verbose=0 -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-PIC
14
15 @src = external global [131072 x i32]
16 @dst = external global [131072 x i32]
17 @xsrc = external global [32 x i32]
18 @xdst = external global [32 x i32]
19 @ptr = external global i32*
20 @dsrc = global [131072 x i32] zeroinitializer, align 32
21 @ddst = global [131072 x i32] zeroinitializer, align 32
22 @dptr = global i32* null
23 @lsrc = internal global [131072 x i32] zeroinitializer
24 @ldst = internal global [131072 x i32] zeroinitializer
25 @lptr = internal global i32* null
26 @ifunc = external global void ()*
27 @difunc = global void ()* null
28 @lifunc = internal global void ()* null
29 @lxsrc = internal global [32 x i32] zeroinitializer, align 32
30 @lxdst = internal global [32 x i32] zeroinitializer, align 32
31 @dxsrc = global [32 x i32] zeroinitializer, align 32
32 @dxdst = global [32 x i32] zeroinitializer, align 32
33
34 define void @foo00() nounwind {
35 entry:
36         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
37         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4
38         ret void
39
40 ; LINUX-64-STATIC: foo00:
41 ; LINUX-64-STATIC: movl src(%rip), [[EAX:%e.x]]
42 ; LINUX-64-STATIC: movl [[EAX]], dst
43 ; LINUX-64-STATIC: ret
44
45 ; LINUX-32-STATIC: foo00:
46 ; LINUX-32-STATIC:      movl    src, [[EAX:%e.x]]
47 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dst
48 ; LINUX-32-STATIC-NEXT:         ret
49
50 ; LINUX-32-PIC: foo00:
51 ; LINUX-32-PIC:         movl    src, [[EAX:%e.x]]
52 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dst
53 ; LINUX-32-PIC-NEXT:    ret
54
55 ; LINUX-64-PIC: foo00:
56 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r..]]
57 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e..]]
58 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r..]]
59 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
60 ; LINUX-64-PIC-NEXT:    ret
61
62 ; DARWIN-32-STATIC: _foo00:
63 ; DARWIN-32-STATIC:     movl    _src, [[EAX:%e.x]]
64 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dst
65 ; DARWIN-32-STATIC-NEXT:        ret
66
67 ; DARWIN-32-DYNAMIC: _foo00:
68 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e..]]
69 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e..]]
70 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e..]]
71 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
72 ; DARWIN-32-DYNAMIC-NEXT:       ret
73
74 ; DARWIN-32-PIC: _foo00:
75 ; DARWIN-32-PIC:        calll   L0$pb
76 ; DARWIN-32-PIC-NEXT: L0$pb:
77 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e..]]
78 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L0$pb([[EAX]]), [[ECX:%e..]]
79 ; DARWIN-32-PIC-NEXT:   movl    ([[ECX]]), [[ECX:%e..]]
80 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L0$pb([[EAX]]), [[EAX:%e..]]
81 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
82 ; DARWIN-32-PIC-NEXT:   ret
83
84 ; DARWIN-64-STATIC: _foo00:
85 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r..]]
86 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]]), [[EAX:%e..]]
87 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r..]]
88 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
89 ; DARWIN-64-STATIC-NEXT:        ret
90
91 ; DARWIN-64-DYNAMIC: _foo00:
92 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r..]]
93 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]]), [[EAX:%e..]]
94 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r..]]
95 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
96 ; DARWIN-64-DYNAMIC-NEXT:       ret
97
98 ; DARWIN-64-PIC: _foo00:
99 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r..]]
100 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]]), [[EAX:%e..]]
101 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r..]]
102 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
103 ; DARWIN-64-PIC-NEXT:   ret
104 }
105
106 define void @fxo00() nounwind {
107 entry:
108         %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
109         store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4
110         ret void
111
112 ; LINUX-64-STATIC: fxo00:
113 ; LINUX-64-STATIC: movl xsrc(%rip), [[EAX:%e.x]]
114 ; LINUX-64-STATIC: movl [[EAX]], xdst
115 ; LINUX-64-STATIC: ret
116
117 ; LINUX-32-STATIC: fxo00:
118 ; LINUX-32-STATIC:      movl    xsrc, [[EAX:%e.x]]
119 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], xdst
120 ; LINUX-32-STATIC-NEXT:         ret
121
122 ; LINUX-32-PIC: fxo00:
123 ; LINUX-32-PIC:         movl    xsrc, [[EAX:%e.x]]
124 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], xdst
125 ; LINUX-32-PIC-NEXT:    ret
126
127 ; LINUX-64-PIC: fxo00:
128 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
129 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
130 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), [[RCX:%r.x]]
131 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
132 ; LINUX-64-PIC-NEXT:    ret
133
134 ; DARWIN-32-STATIC: _fxo00:
135 ; DARWIN-32-STATIC:     movl    _xsrc, [[EAX:%e.x]]
136 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _xdst
137 ; DARWIN-32-STATIC-NEXT:        ret
138
139 ; DARWIN-32-DYNAMIC: _fxo00:
140 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
141 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
142 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
143 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
144 ; DARWIN-32-DYNAMIC-NEXT:       ret
145
146 ; DARWIN-32-PIC: _fxo00:
147 ; DARWIN-32-PIC:        calll   L1$pb
148 ; DARWIN-32-PIC-NEXT: L1$pb:
149 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
150 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L1$pb([[EAX]]), [[ECX:%e.x]]
151 ; DARWIN-32-PIC-NEXT:   movl    ([[ECX]]), [[ECX:%e.x]]
152 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L1$pb([[EAX]]), [[EAX:%e.x]]
153 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
154 ; DARWIN-32-PIC-NEXT:   ret
155
156 ; DARWIN-64-STATIC: _fxo00:
157 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
158 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]]), [[EAX:%e.x]]
159 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
160 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
161 ; DARWIN-64-STATIC-NEXT:        ret
162
163 ; DARWIN-64-DYNAMIC: _fxo00:
164 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
165 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]]), [[EAX:%e.x]]
166 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
167 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
168 ; DARWIN-64-DYNAMIC-NEXT:       ret
169
170 ; DARWIN-64-PIC: _fxo00:
171 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
172 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]]), [[EAX:%e.x]]
173 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
174 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
175 ; DARWIN-64-PIC-NEXT:   ret
176 }
177
178 define void @foo01() nounwind {
179 entry:
180         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
181         ret void
182 ; LINUX-64-STATIC: foo01:
183 ; LINUX-64-STATIC: movq $dst, ptr
184 ; LINUX-64-STATIC: ret
185
186 ; LINUX-32-STATIC: foo01:
187 ; LINUX-32-STATIC:      movl    $dst, ptr
188 ; LINUX-32-STATIC-NEXT:         ret
189
190 ; LINUX-32-PIC: foo01:
191 ; LINUX-32-PIC:         movl    $dst, ptr
192 ; LINUX-32-PIC-NEXT:    ret
193
194 ; LINUX-64-PIC: foo01:
195 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
196 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
197 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
198 ; LINUX-64-PIC-NEXT:    ret
199
200 ; DARWIN-32-STATIC: _foo01:
201 ; DARWIN-32-STATIC:     movl    $_dst, _ptr
202 ; DARWIN-32-STATIC-NEXT:        ret
203
204 ; DARWIN-32-DYNAMIC: _foo01:
205 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, [[EAX:%e.x]]
206 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
207 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
208 ; DARWIN-32-DYNAMIC-NEXT:       ret
209
210 ; DARWIN-32-PIC: _foo01:
211 ; DARWIN-32-PIC:        calll   L2$pb
212 ; DARWIN-32-PIC-NEXT: L2$pb:
213 ; DARWIN-32-PIC-NEXT:   popl
214 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L2$pb(
215 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L2$pb(
216 ; DARWIN-32-PIC-NEXT:   movl
217 ; DARWIN-32-PIC-NEXT:   ret
218
219 ; DARWIN-64-STATIC: _foo01:
220 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
221 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
222 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
223 ; DARWIN-64-STATIC-NEXT:        ret
224
225 ; DARWIN-64-DYNAMIC: _foo01:
226 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
227 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
228 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
229 ; DARWIN-64-DYNAMIC-NEXT:       ret
230
231 ; DARWIN-64-PIC: _foo01:
232 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
233 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
234 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
235 ; DARWIN-64-PIC-NEXT:   ret
236 }
237
238 define void @fxo01() nounwind {
239 entry:
240         store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
241         ret void
242 ; LINUX-64-STATIC: fxo01:
243 ; LINUX-64-STATIC: movq $xdst, ptr
244 ; LINUX-64-STATIC: ret
245
246 ; LINUX-32-STATIC: fxo01:
247 ; LINUX-32-STATIC:      movl    $xdst, ptr
248 ; LINUX-32-STATIC-NEXT:         ret
249
250 ; LINUX-32-PIC: fxo01:
251 ; LINUX-32-PIC:         movl    $xdst, ptr
252 ; LINUX-32-PIC-NEXT:    ret
253
254 ; LINUX-64-PIC: fxo01:
255 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
256 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
257 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
258 ; LINUX-64-PIC-NEXT:    ret
259
260 ; DARWIN-32-STATIC: _fxo01:
261 ; DARWIN-32-STATIC:     movl    $_xdst, _ptr
262 ; DARWIN-32-STATIC-NEXT:        ret
263
264 ; DARWIN-32-DYNAMIC: _fxo01:
265 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, [[EAX:%e.x]]
266 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
267 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
268 ; DARWIN-32-DYNAMIC-NEXT:       ret
269
270 ; DARWIN-32-PIC: _fxo01:
271 ; DARWIN-32-PIC:        calll   L3$pb
272 ; DARWIN-32-PIC-NEXT: L3$pb:
273 ; DARWIN-32-PIC-NEXT:   popl    [[R0:%e..]]
274 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L3$pb([[R0]]), [[R1:%e..]]
275 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L3$pb([[R0]]), [[R2:%e..]]
276 ; DARWIN-32-PIC-NEXT:   movl    [[R1:%e..]], ([[R2]])
277 ; DARWIN-32-PIC-NEXT:   ret
278
279 ; DARWIN-64-STATIC: _fxo01:
280 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
281 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
282 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
283 ; DARWIN-64-STATIC-NEXT:        ret
284
285 ; DARWIN-64-DYNAMIC: _fxo01:
286 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
287 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
288 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
289 ; DARWIN-64-DYNAMIC-NEXT:       ret
290
291 ; DARWIN-64-PIC: _fxo01:
292 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
293 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
294 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
295 ; DARWIN-64-PIC-NEXT:   ret
296 }
297
298 define void @foo02() nounwind {
299 entry:
300         %0 = load i32** @ptr, align 8
301         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
302         store i32 %1, i32* %0, align 4
303         ret void
304 ; LINUX-64-STATIC: foo02:
305 ; LINUX-64-STATIC: movl    src(%rip), %
306 ; LINUX-64-STATIC: movq    ptr(%rip), %
307 ; LINUX-64-STATIC: movl
308 ; LINUX-64-STATIC: ret
309
310 ; LINUX-32-STATIC: foo02:
311 ; LINUX-32-STATIC:      movl    src, [[EAX:%e.x]]
312 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
313 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ([[ECX]])
314 ; LINUX-32-STATIC-NEXT:         ret
315
316 ; LINUX-32-PIC: foo02:
317 ; LINUX-32-PIC:         movl    src, [[EAX:%e.x]]
318 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
319 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ([[ECX]])
320 ; LINUX-32-PIC-NEXT:    ret
321
322 ; LINUX-64-PIC: foo02:
323 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
324 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
325 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
326 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
327 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
328 ; LINUX-64-PIC-NEXT:    ret
329
330 ; DARWIN-32-STATIC: _foo02:
331 ; DARWIN-32-STATIC:     movl    _src, [[EAX:%e.x]]
332 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
333 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], ([[ECX]])
334 ; DARWIN-32-STATIC-NEXT:        ret
335
336 ; DARWIN-32-DYNAMIC: _foo02:
337 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
338 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
339 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
340 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
341 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
342 ; DARWIN-32-DYNAMIC-NEXT:       ret
343
344 ; DARWIN-32-PIC: _foo02:
345 ; DARWIN-32-PIC:        calll   L4$pb
346 ; DARWIN-32-PIC-NEXT: L4$pb:
347 ; DARWIN-32-PIC-NEXT:   popl    [[R0:%e..]]
348 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L4$pb([[R0]]), [[R1:%e..]]
349 ; DARWIN-32-PIC-NEXT:   movl    ([[R1]]), [[R2:%e..]]
350 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L4$pb([[R0]]), [[R3:%e..]]
351 ; DARWIN-32-PIC-NEXT:   movl    ([[R3]]), [[R4:%e..]]
352 ; DARWIN-32-PIC-NEXT:   movl    [[R2]], ([[R4]])
353 ; DARWIN-32-PIC-NEXT:   ret
354
355 ; DARWIN-64-STATIC: _foo02:
356 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
357 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]]), [[EAX:%e.x]]
358 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
359 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
360 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
361 ; DARWIN-64-STATIC-NEXT:        ret
362
363 ; DARWIN-64-DYNAMIC: _foo02:
364 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
365 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]]), [[EAX:%e.x]]
366 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
367 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
368 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
369 ; DARWIN-64-DYNAMIC-NEXT:       ret
370
371 ; DARWIN-64-PIC: _foo02:
372 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
373 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]]), [[EAX:%e.x]]
374 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
375 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
376 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
377 ; DARWIN-64-PIC-NEXT:   ret
378 }
379
380 define void @fxo02() nounwind {
381 entry:
382         %0 = load i32** @ptr, align 8
383         %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
384         store i32 %1, i32* %0, align 4
385 ; LINUX-64-STATIC: fxo02:
386 ; LINUX-64-STATIC: movl    xsrc(%rip), %
387 ; LINUX-64-STATIC: movq    ptr(%rip), %
388 ; LINUX-64-STATIC: movl
389 ; LINUX-64-STATIC: ret
390
391 ; LINUX-32-STATIC: fxo02:
392 ; LINUX-32-STATIC:      movl    xsrc, [[EAX:%e.x]]
393 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
394 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ([[ECX]])
395 ; LINUX-32-STATIC-NEXT:         ret
396         ret void
397
398 ; LINUX-32-PIC: fxo02:
399 ; LINUX-32-PIC:         movl    xsrc, [[EAX:%e.x]]
400 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
401 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ([[ECX]])
402 ; LINUX-32-PIC-NEXT:    ret
403
404 ; LINUX-64-PIC: fxo02:
405 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
406 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
407 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
408 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
409 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
410 ; LINUX-64-PIC-NEXT:    ret
411
412 ; DARWIN-32-STATIC: _fxo02:
413 ; DARWIN-32-STATIC:     movl    _xsrc, [[EAX:%e.x]]
414 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
415 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], ([[ECX]])
416 ; DARWIN-32-STATIC-NEXT:        ret
417
418 ; DARWIN-32-DYNAMIC: _fxo02:
419 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
420 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
421 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
422 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
423 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
424 ; DARWIN-32-DYNAMIC-NEXT:       ret
425
426 ; DARWIN-32-PIC: _fxo02:
427 ; DARWIN-32-PIC:        calll   L5$pb
428 ; DARWIN-32-PIC-NEXT: L5$pb:
429 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
430 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L5$pb([[EAX]]), [[ECX:%e.x]]
431 ; DARWIN-32-PIC-NEXT:   movl    ([[ECX]]), [[ECX:%e.x]]
432 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L5$pb([[EAX]]), [[EAX:%e.x]]
433 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
434 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
435 ; DARWIN-32-PIC-NEXT:   ret
436
437 ; DARWIN-64-STATIC: _fxo02:
438 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
439 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]]), [[EAX:%e.x]]
440 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
441 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
442 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
443 ; DARWIN-64-STATIC-NEXT:        ret
444
445 ; DARWIN-64-DYNAMIC: _fxo02:
446 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
447 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]]), [[EAX:%e.x]]
448 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
449 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
450 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
451 ; DARWIN-64-DYNAMIC-NEXT:       ret
452
453 ; DARWIN-64-PIC: _fxo02:
454 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
455 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]]), [[EAX:%e.x]]
456 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
457 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
458 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
459 ; DARWIN-64-PIC-NEXT:   ret
460 }
461
462 define void @foo03() nounwind {
463 entry:
464         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
465         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32
466         ret void
467 ; LINUX-64-STATIC: foo03:
468 ; LINUX-64-STATIC: movl    dsrc(%rip), [[EAX:%e.x]]
469 ; LINUX-64-STATIC: movl    [[EAX]], ddst
470 ; LINUX-64-STATIC: ret
471
472 ; LINUX-32-STATIC: foo03:
473 ; LINUX-32-STATIC:      movl    dsrc, [[EAX:%e.x]]
474 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ddst
475 ; LINUX-32-STATIC-NEXT:         ret
476
477 ; LINUX-32-PIC: foo03:
478 ; LINUX-32-PIC:         movl    dsrc, [[EAX:%e.x]]
479 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ddst
480 ; LINUX-32-PIC-NEXT:    ret
481
482 ; LINUX-64-PIC: foo03:
483 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
484 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
485 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
486 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
487 ; LINUX-64-PIC-NEXT:    ret
488
489 ; DARWIN-32-STATIC: _foo03:
490 ; DARWIN-32-STATIC:     movl    _dsrc, [[EAX:%e.x]]
491 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ddst
492 ; DARWIN-32-STATIC-NEXT:        ret
493
494 ; DARWIN-32-DYNAMIC: _foo03:
495 ; DARWIN-32-DYNAMIC:    movl    _dsrc, [[EAX:%e.x]]
496 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ddst
497 ; DARWIN-32-DYNAMIC-NEXT:       ret
498
499 ; DARWIN-32-PIC: _foo03:
500 ; DARWIN-32-PIC:        calll   L6$pb
501 ; DARWIN-32-PIC-NEXT: L6$pb:
502 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
503 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-L6$pb([[EAX]]), [[ECX:%e.x]]
504 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _ddst-L6$pb([[EAX]])
505 ; DARWIN-32-PIC-NEXT:   ret
506
507 ; DARWIN-64-STATIC: _foo03:
508 ; DARWIN-64-STATIC:     movl    _dsrc(%rip), [[EAX:%e.x]]
509 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ddst(%rip)
510 ; DARWIN-64-STATIC-NEXT:        ret
511
512 ; DARWIN-64-DYNAMIC: _foo03:
513 ; DARWIN-64-DYNAMIC:    movl    _dsrc(%rip), [[EAX:%e.x]]
514 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ddst(%rip)
515 ; DARWIN-64-DYNAMIC-NEXT:       ret
516
517 ; DARWIN-64-PIC: _foo03:
518 ; DARWIN-64-PIC:        movl    _dsrc(%rip), [[EAX:%e.x]]
519 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ddst(%rip)
520 ; DARWIN-64-PIC-NEXT:   ret
521 }
522
523 define void @foo04() nounwind {
524 entry:
525         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
526         ret void
527 ; LINUX-64-STATIC: foo04:
528 ; LINUX-64-STATIC: movq    $ddst, dptr
529 ; LINUX-64-STATIC: ret
530
531 ; LINUX-32-STATIC: foo04:
532 ; LINUX-32-STATIC:      movl    $ddst, dptr
533 ; LINUX-32-STATIC-NEXT:         ret
534
535 ; LINUX-32-PIC: foo04:
536 ; LINUX-32-PIC:         movl    $ddst, dptr
537 ; LINUX-32-PIC-NEXT:    ret
538
539 ; LINUX-64-PIC: foo04:
540 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
541 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
542 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
543 ; LINUX-64-PIC-NEXT:    ret
544
545 ; DARWIN-32-STATIC: _foo04:
546 ; DARWIN-32-STATIC:     movl    $_ddst, _dptr
547 ; DARWIN-32-STATIC-NEXT:        ret
548
549 ; DARWIN-32-DYNAMIC: _foo04:
550 ; DARWIN-32-DYNAMIC:    movl    $_ddst, _dptr
551 ; DARWIN-32-DYNAMIC-NEXT:       ret
552
553 ; DARWIN-32-PIC: _foo04:
554 ; DARWIN-32-PIC:        calll   L7$pb
555 ; DARWIN-32-PIC-NEXT: L7$pb:
556 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
557 ; DARWIN-32-PIC-NEXT:   leal    _ddst-L7$pb([[EAX]]), [[ECX:%e.x]]
558 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L7$pb([[EAX]])
559 ; DARWIN-32-PIC-NEXT:   ret
560
561 ; DARWIN-64-STATIC: _foo04:
562 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
563 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
564 ; DARWIN-64-STATIC-NEXT:        ret
565
566 ; DARWIN-64-DYNAMIC: _foo04:
567 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
568 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
569 ; DARWIN-64-DYNAMIC-NEXT:       ret
570
571 ; DARWIN-64-PIC: _foo04:
572 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
573 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
574 ; DARWIN-64-PIC-NEXT:   ret
575 }
576
577 define void @foo05() nounwind {
578 entry:
579         %0 = load i32** @dptr, align 8
580         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
581         store i32 %1, i32* %0, align 4
582         ret void
583 ; LINUX-64-STATIC: foo05:
584 ; LINUX-64-STATIC: movl    dsrc(%rip), %
585 ; LINUX-64-STATIC: movq    dptr(%rip), %
586 ; LINUX-64-STATIC: movl
587 ; LINUX-64-STATIC: ret
588
589 ; LINUX-32-STATIC: foo05:
590 ; LINUX-32-STATIC:      movl    dsrc, [[EAX:%e.x]]
591 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
592 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ([[ECX]])
593 ; LINUX-32-STATIC-NEXT:         ret
594
595 ; LINUX-32-PIC: foo05:
596 ; LINUX-32-PIC:         movl    dsrc, [[EAX:%e.x]]
597 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
598 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ([[ECX]])
599 ; LINUX-32-PIC-NEXT:    ret
600
601 ; LINUX-64-PIC: foo05:
602 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
603 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
604 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
605 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
606 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
607 ; LINUX-64-PIC-NEXT:    ret
608
609 ; DARWIN-32-STATIC: _foo05:
610 ; DARWIN-32-STATIC:     movl    _dsrc, [[EAX:%e.x]]
611 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
612 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], ([[ECX]])
613 ; DARWIN-32-STATIC-NEXT:        ret
614
615 ; DARWIN-32-DYNAMIC: _foo05:
616 ; DARWIN-32-DYNAMIC:    movl    _dsrc, [[EAX:%e.x]]
617 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
618 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
619 ; DARWIN-32-DYNAMIC-NEXT:       ret
620
621 ; DARWIN-32-PIC: _foo05:
622 ; DARWIN-32-PIC:        calll   L8$pb
623 ; DARWIN-32-PIC-NEXT: L8$pb:
624 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
625 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-L8$pb([[EAX]]), [[ECX:%e.x]]
626 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L8$pb([[EAX]]), [[EAX:%e.x]]
627 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
628 ; DARWIN-32-PIC-NEXT:   ret
629
630 ; DARWIN-64-STATIC: _foo05:
631 ; DARWIN-64-STATIC:     movl    _dsrc(%rip), [[EAX:%e.x]]
632 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
633 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
634 ; DARWIN-64-STATIC-NEXT:        ret
635
636 ; DARWIN-64-DYNAMIC: _foo05:
637 ; DARWIN-64-DYNAMIC:    movl    _dsrc(%rip), [[EAX:%e.x]]
638 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
639 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
640 ; DARWIN-64-DYNAMIC-NEXT:       ret
641
642 ; DARWIN-64-PIC: _foo05:
643 ; DARWIN-64-PIC:        movl    _dsrc(%rip), [[EAX:%e.x]]
644 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
645 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
646 ; DARWIN-64-PIC-NEXT:   ret
647 }
648
649 define void @foo06() nounwind {
650 entry:
651         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
652         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4
653         ret void
654 ; LINUX-64-STATIC: foo06:
655 ; LINUX-64-STATIC: movl    lsrc(%rip), [[EAX:%e.x]]
656 ; LINUX-64-STATIC: movl    [[EAX]], ldst(%rip)
657 ; LINUX-64-STATIC: ret
658
659 ; LINUX-32-STATIC: foo06:
660 ; LINUX-32-STATIC:      movl    lsrc, [[EAX:%e.x]]
661 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ldst
662 ; LINUX-32-STATIC-NEXT:         ret
663
664 ; LINUX-32-PIC: foo06:
665 ; LINUX-32-PIC:         movl    lsrc, [[EAX:%e.x]]
666 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ldst
667 ; LINUX-32-PIC-NEXT:    ret
668
669 ; LINUX-64-PIC: foo06:
670 ; LINUX-64-PIC:         movl    lsrc(%rip), [[EAX:%e.x]]
671 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ldst(%rip)
672 ; LINUX-64-PIC-NEXT:    ret
673
674 ; DARWIN-32-STATIC: _foo06:
675 ; DARWIN-32-STATIC:     movl    _lsrc, [[EAX:%e.x]]
676 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ldst
677 ; DARWIN-32-STATIC-NEXT:        ret
678
679 ; DARWIN-32-DYNAMIC: _foo06:
680 ; DARWIN-32-DYNAMIC:    movl    _lsrc, [[EAX:%e.x]]
681 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ldst
682 ; DARWIN-32-DYNAMIC-NEXT:       ret
683
684 ; DARWIN-32-PIC: _foo06:
685 ; DARWIN-32-PIC:        calll   L9$pb
686 ; DARWIN-32-PIC-NEXT: L9$pb:
687 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
688 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-L9$pb([[EAX]]), [[ECX:%e.x]]
689 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _ldst-L9$pb([[EAX]])
690 ; DARWIN-32-PIC-NEXT:   ret
691
692 ; DARWIN-64-STATIC: _foo06:
693 ; DARWIN-64-STATIC:     movl    _lsrc(%rip), [[EAX:%e.x]]
694 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ldst(%rip)
695 ; DARWIN-64-STATIC-NEXT:        ret
696
697 ; DARWIN-64-DYNAMIC: _foo06:
698 ; DARWIN-64-DYNAMIC:    movl    _lsrc(%rip), [[EAX:%e.x]]
699 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ldst(%rip)
700 ; DARWIN-64-DYNAMIC-NEXT:       ret
701
702 ; DARWIN-64-PIC: _foo06:
703 ; DARWIN-64-PIC:        movl    _lsrc(%rip), [[EAX:%e.x]]
704 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ldst(%rip)
705 ; DARWIN-64-PIC-NEXT:   ret
706 }
707
708 define void @foo07() nounwind {
709 entry:
710         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
711         ret void
712 ; LINUX-64-STATIC: foo07:
713 ; LINUX-64-STATIC: movq    $ldst, lptr
714 ; LINUX-64-STATIC: ret
715
716 ; LINUX-32-STATIC: foo07:
717 ; LINUX-32-STATIC:      movl    $ldst, lptr
718 ; LINUX-32-STATIC-NEXT:         ret
719
720 ; LINUX-32-PIC: foo07:
721 ; LINUX-32-PIC:         movl    $ldst, lptr
722 ; LINUX-32-PIC-NEXT:    ret
723
724 ; LINUX-64-PIC: foo07:
725 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
726 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
727 ; LINUX-64-PIC-NEXT:    ret
728
729 ; DARWIN-32-STATIC: _foo07:
730 ; DARWIN-32-STATIC:     movl    $_ldst, _lptr
731 ; DARWIN-32-STATIC-NEXT:        ret
732
733 ; DARWIN-32-DYNAMIC: _foo07:
734 ; DARWIN-32-DYNAMIC:    movl    $_ldst, _lptr
735 ; DARWIN-32-DYNAMIC-NEXT:       ret
736
737 ; DARWIN-32-PIC: _foo07:
738 ; DARWIN-32-PIC:        calll   L10$pb
739 ; DARWIN-32-PIC-NEXT: L10$pb:
740 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
741 ; DARWIN-32-PIC-NEXT:   leal    _ldst-L10$pb([[EAX]]), [[ECX:%e.x]]
742 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L10$pb([[EAX]])
743 ; DARWIN-32-PIC-NEXT:   ret
744
745 ; DARWIN-64-STATIC: _foo07:
746 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
747 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
748 ; DARWIN-64-STATIC-NEXT:        ret
749
750 ; DARWIN-64-DYNAMIC: _foo07:
751 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
752 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
753 ; DARWIN-64-DYNAMIC-NEXT:       ret
754
755 ; DARWIN-64-PIC: _foo07:
756 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
757 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
758 ; DARWIN-64-PIC-NEXT:   ret
759 }
760
761 define void @foo08() nounwind {
762 entry:
763         %0 = load i32** @lptr, align 8
764         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
765         store i32 %1, i32* %0, align 4
766         ret void
767 ; LINUX-64-STATIC: foo08:
768 ; LINUX-64-STATIC: movl    lsrc(%rip), %
769 ; LINUX-64-STATIC: movq    lptr(%rip), %
770 ; LINUX-64-STATIC: movl
771 ; LINUX-64-STATIC: ret
772
773 ; LINUX-32-STATIC: foo08:
774 ; LINUX-32-STATIC:      movl    lsrc, [[EAX:%e.x]]
775 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
776 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ([[ECX]])
777 ; LINUX-32-STATIC-NEXT:         ret
778
779 ; LINUX-32-PIC: foo08:
780 ; LINUX-32-PIC:         movl    lsrc, [[EAX:%e.x]]
781 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
782 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ([[ECX]])
783 ; LINUX-32-PIC-NEXT:    ret
784
785 ; LINUX-64-PIC: foo08:
786 ; LINUX-64-PIC:         movl    lsrc(%rip), [[EAX:%e.x]]
787 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
788 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
789 ; LINUX-64-PIC-NEXT:    ret
790
791 ; DARWIN-32-STATIC: _foo08:
792 ; DARWIN-32-STATIC:     movl    _lsrc, [[EAX:%e.x]]
793 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
794 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], ([[ECX]])
795 ; DARWIN-32-STATIC-NEXT:        ret
796
797 ; DARWIN-32-DYNAMIC: _foo08:
798 ; DARWIN-32-DYNAMIC:    movl    _lsrc, [[EAX:%e.x]]
799 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
800 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
801 ; DARWIN-32-DYNAMIC-NEXT:       ret
802
803 ; DARWIN-32-PIC: _foo08:
804 ; DARWIN-32-PIC:        calll   L11$pb
805 ; DARWIN-32-PIC-NEXT: L11$pb:
806 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
807 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-L11$pb([[EAX]]), [[ECX:%e.x]]
808 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L11$pb([[EAX]]), [[EAX:%e.x]]
809 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
810 ; DARWIN-32-PIC-NEXT:   ret
811
812 ; DARWIN-64-STATIC: _foo08:
813 ; DARWIN-64-STATIC:     movl    _lsrc(%rip), [[EAX:%e.x]]
814 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
815 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
816 ; DARWIN-64-STATIC-NEXT:        ret
817
818 ; DARWIN-64-DYNAMIC: _foo08:
819 ; DARWIN-64-DYNAMIC:    movl    _lsrc(%rip), [[EAX:%e.x]]
820 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
821 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
822 ; DARWIN-64-DYNAMIC-NEXT:       ret
823
824 ; DARWIN-64-PIC: _foo08:
825 ; DARWIN-64-PIC:        movl    _lsrc(%rip), [[EAX:%e.x]]
826 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
827 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
828 ; DARWIN-64-PIC-NEXT:   ret
829 }
830
831 define void @qux00() nounwind {
832 entry:
833         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
834         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4
835         ret void
836 ; LINUX-64-STATIC: qux00:
837 ; LINUX-64-STATIC: movl    src+64(%rip), [[EAX:%e.x]]
838 ; LINUX-64-STATIC: movl    [[EAX]], dst+64(%rip)
839 ; LINUX-64-STATIC: ret
840
841 ; LINUX-32-STATIC: qux00:
842 ; LINUX-32-STATIC:      movl    src+64, [[EAX:%e.x]]
843 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dst+64
844 ; LINUX-32-STATIC-NEXT:         ret
845
846 ; LINUX-32-PIC: qux00:
847 ; LINUX-32-PIC:         movl    src+64, [[EAX:%e.x]]
848 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dst+64
849 ; LINUX-32-PIC-NEXT:    ret
850
851 ; LINUX-64-PIC: qux00:
852 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
853 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
854 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
855 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
856 ; LINUX-64-PIC-NEXT:    ret
857
858 ; DARWIN-32-STATIC: _qux00:
859 ; DARWIN-32-STATIC:     movl    _src+64, [[EAX:%e.x]]
860 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dst+64
861 ; DARWIN-32-STATIC-NEXT:        ret
862
863 ; DARWIN-32-DYNAMIC: _qux00:
864 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
865 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[EAX]]), [[EAX:%e.x]]
866 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
867 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
868 ; DARWIN-32-DYNAMIC-NEXT:       ret
869
870 ; DARWIN-32-PIC: _qux00:
871 ; DARWIN-32-PIC:        calll   L12$pb
872 ; DARWIN-32-PIC-NEXT: L12$pb:
873 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
874 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L12$pb([[EAX]]), [[ECX:%e.x]]
875 ; DARWIN-32-PIC-NEXT:   movl    64([[ECX]]), [[ECX:%e.x]]
876 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L12$pb([[EAX]]), [[EAX:%e.x]]
877 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
878 ; DARWIN-32-PIC-NEXT:   ret
879
880 ; DARWIN-64-STATIC: _qux00:
881 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
882 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]]), [[EAX:%e.x]]
883 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
884 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
885 ; DARWIN-64-STATIC-NEXT:        ret
886
887 ; DARWIN-64-DYNAMIC: _qux00:
888 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
889 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]]), [[EAX:%e.x]]
890 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
891 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
892 ; DARWIN-64-DYNAMIC-NEXT:       ret
893
894 ; DARWIN-64-PIC: _qux00:
895 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
896 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]]), [[EAX:%e.x]]
897 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
898 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
899 ; DARWIN-64-PIC-NEXT:   ret
900 }
901
902 define void @qxx00() nounwind {
903 entry:
904         %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
905         store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4
906         ret void
907 ; LINUX-64-STATIC: qxx00:
908 ; LINUX-64-STATIC: movl    xsrc+64(%rip), [[EAX:%e.x]]
909 ; LINUX-64-STATIC: movl    [[EAX]], xdst+64(%rip)
910 ; LINUX-64-STATIC: ret
911
912 ; LINUX-32-STATIC: qxx00:
913 ; LINUX-32-STATIC:      movl    xsrc+64, [[EAX:%e.x]]
914 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], xdst+64
915 ; LINUX-32-STATIC-NEXT:         ret
916
917 ; LINUX-32-PIC: qxx00:
918 ; LINUX-32-PIC:         movl    xsrc+64, [[EAX:%e.x]]
919 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], xdst+64
920 ; LINUX-32-PIC-NEXT:    ret
921
922 ; LINUX-64-PIC: qxx00:
923 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
924 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
925 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), [[RCX:%r.x]]
926 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
927 ; LINUX-64-PIC-NEXT:    ret
928
929 ; DARWIN-32-STATIC: _qxx00:
930 ; DARWIN-32-STATIC:     movl    _xsrc+64, [[EAX:%e.x]]
931 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _xdst+64
932 ; DARWIN-32-STATIC-NEXT:        ret
933
934 ; DARWIN-32-DYNAMIC: _qxx00:
935 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
936 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[EAX]]), [[EAX:%e.x]]
937 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
938 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
939 ; DARWIN-32-DYNAMIC-NEXT:       ret
940
941 ; DARWIN-32-PIC: _qxx00:
942 ; DARWIN-32-PIC:        calll   L13$pb
943 ; DARWIN-32-PIC-NEXT: L13$pb:
944 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
945 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L13$pb([[EAX]]), [[ECX:%e.x]]
946 ; DARWIN-32-PIC-NEXT:   movl    64([[ECX]]), [[ECX:%e.x]]
947 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L13$pb([[EAX]]), [[EAX:%e.x]]
948 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
949 ; DARWIN-32-PIC-NEXT:   ret
950
951 ; DARWIN-64-STATIC: _qxx00:
952 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
953 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]]), [[EAX:%e.x]]
954 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
955 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
956 ; DARWIN-64-STATIC-NEXT:        ret
957
958 ; DARWIN-64-DYNAMIC: _qxx00:
959 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
960 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]]), [[EAX:%e.x]]
961 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
962 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
963 ; DARWIN-64-DYNAMIC-NEXT:       ret
964
965 ; DARWIN-64-PIC: _qxx00:
966 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
967 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]]), [[EAX:%e.x]]
968 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
969 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
970 ; DARWIN-64-PIC-NEXT:   ret
971 }
972
973 define void @qux01() nounwind {
974 entry:
975         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
976         ret void
977 ; LINUX-64-STATIC: qux01:
978 ; LINUX-64-STATIC: movq    $dst+64, ptr
979 ; LINUX-64-STATIC: ret
980
981 ; LINUX-32-STATIC: qux01:
982 ; LINUX-32-STATIC:      movl    $dst+64, ptr
983 ; LINUX-32-STATIC-NEXT:         ret
984
985 ; LINUX-32-PIC: qux01:
986 ; LINUX-32-PIC:         movl    $dst+64, ptr
987 ; LINUX-32-PIC-NEXT:    ret
988
989 ; LINUX-64-PIC: qux01:
990 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
991 ; LINUX-64-PIC-NEXT:    addq    $64, [[RAX:%r.x]]
992 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
993 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
994 ; LINUX-64-PIC-NEXT:    ret
995
996 ; DARWIN-32-STATIC: _qux01:
997 ; DARWIN-32-STATIC:     movl    $_dst+64, _ptr
998 ; DARWIN-32-STATIC-NEXT:        ret
999
1000 ; DARWIN-32-DYNAMIC: _qux01:
1001 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, [[EAX:%e.x]]
1002 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, [[EAX:%e.x]]
1003 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1004 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
1005 ; DARWIN-32-DYNAMIC-NEXT:       ret
1006
1007 ; DARWIN-32-PIC: _qux01:
1008 ; DARWIN-32-PIC:        calll   L14$pb
1009 ; DARWIN-32-PIC-NEXT: L14$pb:
1010 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1011 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L14$pb([[EAX]]), [[ECX:%e.x]]
1012 ; DARWIN-32-PIC-NEXT:   addl    $64, [[ECX:%e.x]]
1013 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L14$pb([[EAX]]), [[EAX:%e.x]]
1014 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
1015 ; DARWIN-32-PIC-NEXT:   ret
1016
1017 ; DARWIN-64-STATIC: _qux01:
1018 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1019 ; DARWIN-64-STATIC-NEXT:        addq    $64, [[RAX:%r.x]]
1020 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1021 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
1022 ; DARWIN-64-STATIC-NEXT:        ret
1023
1024 ; DARWIN-64-DYNAMIC: _qux01:
1025 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1026 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, [[RAX:%r.x]]
1027 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1028 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
1029 ; DARWIN-64-DYNAMIC-NEXT:       ret
1030
1031 ; DARWIN-64-PIC: _qux01:
1032 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1033 ; DARWIN-64-PIC-NEXT:   addq    $64, [[RAX:%r.x]]
1034 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1035 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
1036 ; DARWIN-64-PIC-NEXT:   ret
1037 }
1038
1039 define void @qxx01() nounwind {
1040 entry:
1041         store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1042         ret void
1043 ; LINUX-64-STATIC: qxx01:
1044 ; LINUX-64-STATIC: movq    $xdst+64, ptr
1045 ; LINUX-64-STATIC: ret
1046
1047 ; LINUX-32-STATIC: qxx01:
1048 ; LINUX-32-STATIC:      movl    $xdst+64, ptr
1049 ; LINUX-32-STATIC-NEXT:         ret
1050
1051 ; LINUX-32-PIC: qxx01:
1052 ; LINUX-32-PIC:         movl    $xdst+64, ptr
1053 ; LINUX-32-PIC-NEXT:    ret
1054
1055 ; LINUX-64-PIC: qxx01:
1056 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1057 ; LINUX-64-PIC-NEXT:    addq    $64, [[RAX:%r.x]]
1058 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1059 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
1060 ; LINUX-64-PIC-NEXT:    ret
1061
1062 ; DARWIN-32-STATIC: _qxx01:
1063 ; DARWIN-32-STATIC:     movl    $_xdst+64, _ptr
1064 ; DARWIN-32-STATIC-NEXT:        ret
1065
1066 ; DARWIN-32-DYNAMIC: _qxx01:
1067 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, [[EAX:%e.x]]
1068 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, [[EAX:%e.x]]
1069 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1070 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
1071 ; DARWIN-32-DYNAMIC-NEXT:       ret
1072
1073 ; DARWIN-32-PIC: _qxx01:
1074 ; DARWIN-32-PIC:        calll   L15$pb
1075 ; DARWIN-32-PIC-NEXT: L15$pb:
1076 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1077 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L15$pb([[EAX]]), [[ECX:%e.x]]
1078 ; DARWIN-32-PIC-NEXT:   addl    $64, [[ECX:%e.x]]
1079 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L15$pb([[EAX]]), [[EAX:%e.x]]
1080 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
1081 ; DARWIN-32-PIC-NEXT:   ret
1082
1083 ; DARWIN-64-STATIC: _qxx01:
1084 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1085 ; DARWIN-64-STATIC-NEXT:        addq    $64, [[RAX:%r.x]]
1086 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1087 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
1088 ; DARWIN-64-STATIC-NEXT:        ret
1089
1090 ; DARWIN-64-DYNAMIC: _qxx01:
1091 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1092 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, [[RAX:%r.x]]
1093 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1094 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
1095 ; DARWIN-64-DYNAMIC-NEXT:       ret
1096
1097 ; DARWIN-64-PIC: _qxx01:
1098 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1099 ; DARWIN-64-PIC-NEXT:   addq    $64, [[RAX:%r.x]]
1100 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1101 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
1102 ; DARWIN-64-PIC-NEXT:   ret
1103 }
1104
1105 define void @qux02() nounwind {
1106 entry:
1107         %0 = load i32** @ptr, align 8
1108         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
1109         %2 = getelementptr i32* %0, i64 16
1110         store i32 %1, i32* %2, align 4
1111 ; LINUX-64-STATIC: qux02:
1112 ; LINUX-64-STATIC: movl    src+64(%rip), [[EAX:%e.x]]
1113 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1114 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1115 ; LINUX-64-STATIC: ret
1116
1117 ; LINUX-32-STATIC: qux02:
1118 ; LINUX-32-STATIC:      movl    src+64, [[EAX:%e.x]]
1119 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
1120 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 64([[ECX]])
1121 ; LINUX-32-STATIC-NEXT:         ret
1122         ret void
1123
1124 ; LINUX-32-PIC: qux02:
1125 ; LINUX-32-PIC:         movl    src+64, [[EAX:%e.x]]
1126 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
1127 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 64([[ECX]])
1128 ; LINUX-32-PIC-NEXT:    ret
1129
1130 ; LINUX-64-PIC: qux02:
1131 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
1132 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
1133 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1134 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
1135 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1136 ; LINUX-64-PIC-NEXT:    ret
1137
1138 ; DARWIN-32-STATIC: _qux02:
1139 ; DARWIN-32-STATIC:     movl    _src+64, [[EAX:%e.x]]
1140 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
1141 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 64([[ECX]])
1142 ; DARWIN-32-STATIC-NEXT:        ret
1143
1144 ; DARWIN-32-DYNAMIC: _qux02:
1145 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
1146 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[EAX]]), [[EAX:%e.x]]
1147 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1148 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
1149 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
1150 ; DARWIN-32-DYNAMIC-NEXT:       ret
1151
1152 ; DARWIN-32-PIC: _qux02:
1153 ; DARWIN-32-PIC:        calll   L16$pb
1154 ; DARWIN-32-PIC-NEXT: L16$pb:
1155 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1156 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L16$pb([[EAX]]), [[ECX:%e.x]]
1157 ; DARWIN-32-PIC-NEXT:   movl    64([[ECX]]), [[ECX:%e.x]]
1158 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L16$pb([[EAX]]), [[EAX:%e.x]]
1159 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
1160 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
1161 ; DARWIN-32-PIC-NEXT:   ret
1162
1163 ; DARWIN-64-STATIC: _qux02:
1164 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1165 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]]), [[EAX:%e.x]]
1166 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1167 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
1168 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
1169 ; DARWIN-64-STATIC-NEXT:        ret
1170
1171 ; DARWIN-64-DYNAMIC: _qux02:
1172 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1173 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]]), [[EAX:%e.x]]
1174 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1175 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
1176 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
1177 ; DARWIN-64-DYNAMIC-NEXT:       ret
1178
1179 ; DARWIN-64-PIC: _qux02:
1180 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1181 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]]), [[EAX:%e.x]]
1182 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1183 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
1184 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
1185 ; DARWIN-64-PIC-NEXT:   ret
1186 }
1187
1188 define void @qxx02() nounwind {
1189 entry:
1190         %0 = load i32** @ptr, align 8
1191         %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
1192         %2 = getelementptr i32* %0, i64 16
1193         store i32 %1, i32* %2, align 4
1194 ; LINUX-64-STATIC: qxx02:
1195 ; LINUX-64-STATIC: movl    xsrc+64(%rip), [[EAX:%e.x]]
1196 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1197 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1198 ; LINUX-64-STATIC: ret
1199
1200 ; LINUX-32-STATIC: qxx02:
1201 ; LINUX-32-STATIC:      movl    xsrc+64, [[EAX:%e.x]]
1202 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
1203 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 64([[ECX]])
1204 ; LINUX-32-STATIC-NEXT:         ret
1205         ret void
1206
1207 ; LINUX-32-PIC: qxx02:
1208 ; LINUX-32-PIC:         movl    xsrc+64, [[EAX:%e.x]]
1209 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
1210 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 64([[ECX]])
1211 ; LINUX-32-PIC-NEXT:    ret
1212
1213 ; LINUX-64-PIC: qxx02:
1214 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1215 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
1216 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1217 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
1218 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1219 ; LINUX-64-PIC-NEXT:    ret
1220
1221 ; DARWIN-32-STATIC: _qxx02:
1222 ; DARWIN-32-STATIC:     movl    _xsrc+64, [[EAX:%e.x]]
1223 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
1224 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 64([[ECX]])
1225 ; DARWIN-32-STATIC-NEXT:        ret
1226
1227 ; DARWIN-32-DYNAMIC: _qxx02:
1228 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
1229 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[EAX]]), [[EAX:%e.x]]
1230 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1231 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
1232 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
1233 ; DARWIN-32-DYNAMIC-NEXT:       ret
1234
1235 ; DARWIN-32-PIC: _qxx02:
1236 ; DARWIN-32-PIC:        calll   L17$pb
1237 ; DARWIN-32-PIC-NEXT: L17$pb:
1238 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1239 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L17$pb([[EAX]]), [[ECX:%e.x]]
1240 ; DARWIN-32-PIC-NEXT:   movl    64([[ECX]]), [[ECX:%e.x]]
1241 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L17$pb([[EAX]]), [[EAX:%e.x]]
1242 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
1243 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
1244 ; DARWIN-32-PIC-NEXT:   ret
1245
1246 ; DARWIN-64-STATIC: _qxx02:
1247 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1248 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]]), [[EAX:%e.x]]
1249 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1250 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
1251 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
1252 ; DARWIN-64-STATIC-NEXT:        ret
1253
1254 ; DARWIN-64-DYNAMIC: _qxx02:
1255 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1256 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]]), [[EAX:%e.x]]
1257 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1258 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
1259 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
1260 ; DARWIN-64-DYNAMIC-NEXT:       ret
1261
1262 ; DARWIN-64-PIC: _qxx02:
1263 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1264 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]]), [[EAX:%e.x]]
1265 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1266 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
1267 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
1268 ; DARWIN-64-PIC-NEXT:   ret
1269 }
1270
1271 define void @qux03() nounwind {
1272 entry:
1273         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1274         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32
1275         ret void
1276 ; LINUX-64-STATIC: qux03:
1277 ; LINUX-64-STATIC: movl    dsrc+64(%rip), [[EAX:%e.x]]
1278 ; LINUX-64-STATIC: movl    [[EAX]], ddst+64(%rip)
1279 ; LINUX-64-STATIC: ret
1280
1281 ; LINUX-32-STATIC: qux03:
1282 ; LINUX-32-STATIC:      movl    dsrc+64, [[EAX:%e.x]]
1283 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ddst+64
1284 ; LINUX-32-STATIC-NEXT:         ret
1285
1286 ; LINUX-32-PIC: qux03:
1287 ; LINUX-32-PIC:         movl    dsrc+64, [[EAX:%e.x]]
1288 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ddst+64
1289 ; LINUX-32-PIC-NEXT:    ret
1290
1291 ; LINUX-64-PIC: qux03:
1292 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1293 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
1294 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
1295 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1296 ; LINUX-64-PIC-NEXT:    ret
1297
1298 ; DARWIN-32-STATIC: _qux03:
1299 ; DARWIN-32-STATIC:     movl    _dsrc+64, [[EAX:%e.x]]
1300 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ddst+64
1301 ; DARWIN-32-STATIC-NEXT:        ret
1302
1303 ; DARWIN-32-DYNAMIC: _qux03:
1304 ; DARWIN-32-DYNAMIC:    movl    _dsrc+64, [[EAX:%e.x]]
1305 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ddst+64
1306 ; DARWIN-32-DYNAMIC-NEXT:       ret
1307
1308 ; DARWIN-32-PIC: _qux03:
1309 ; DARWIN-32-PIC:        calll   L18$pb
1310 ; DARWIN-32-PIC-NEXT: L18$pb:
1311 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1312 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L18$pb)+64([[EAX]]), [[ECX:%e.x]]
1313 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], (_ddst-L18$pb)+64([[EAX]])
1314 ; DARWIN-32-PIC-NEXT:   ret
1315
1316 ; DARWIN-64-STATIC: _qux03:
1317 ; DARWIN-64-STATIC:     movl    _dsrc+64(%rip), [[EAX:%e.x]]
1318 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ddst+64(%rip)
1319 ; DARWIN-64-STATIC-NEXT:        ret
1320
1321 ; DARWIN-64-DYNAMIC: _qux03:
1322 ; DARWIN-64-DYNAMIC:    movl    _dsrc+64(%rip), [[EAX:%e.x]]
1323 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ddst+64(%rip)
1324 ; DARWIN-64-DYNAMIC-NEXT:       ret
1325
1326 ; DARWIN-64-PIC: _qux03:
1327 ; DARWIN-64-PIC:        movl    _dsrc+64(%rip), [[EAX:%e.x]]
1328 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ddst+64(%rip)
1329 ; DARWIN-64-PIC-NEXT:   ret
1330 }
1331
1332 define void @qux04() nounwind {
1333 entry:
1334         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1335         ret void
1336 ; LINUX-64-STATIC: qux04:
1337 ; LINUX-64-STATIC: movq    $ddst+64, dptr(%rip)
1338 ; LINUX-64-STATIC: ret
1339
1340 ; LINUX-32-STATIC: qux04:
1341 ; LINUX-32-STATIC:      movl    $ddst+64, dptr
1342 ; LINUX-32-STATIC-NEXT:         ret
1343
1344 ; LINUX-32-PIC: qux04:
1345 ; LINUX-32-PIC:         movl    $ddst+64, dptr
1346 ; LINUX-32-PIC-NEXT:    ret
1347
1348 ; LINUX-64-PIC: qux04:
1349 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
1350 ; LINUX-64-PIC-NEXT:    addq    $64, [[RAX:%r.x]]
1351 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
1352 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
1353 ; LINUX-64-PIC-NEXT:    ret
1354
1355 ; DARWIN-32-STATIC: _qux04:
1356 ; DARWIN-32-STATIC:     movl    $_ddst+64, _dptr
1357 ; DARWIN-32-STATIC-NEXT:        ret
1358
1359 ; DARWIN-32-DYNAMIC: _qux04:
1360 ; DARWIN-32-DYNAMIC:    movl    $_ddst+64, _dptr
1361 ; DARWIN-32-DYNAMIC-NEXT:       ret
1362
1363 ; DARWIN-32-PIC: _qux04:
1364 ; DARWIN-32-PIC:        calll   L19$pb
1365 ; DARWIN-32-PIC-NEXT: L19$pb:
1366 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1367 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L19$pb)+64([[EAX]]), [[ECX:%e.x]]
1368 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L19$pb([[EAX]])
1369 ; DARWIN-32-PIC-NEXT:   ret
1370
1371 ; DARWIN-64-STATIC: _qux04:
1372 ; DARWIN-64-STATIC:     leaq    _ddst+64(%rip), [[RAX:%r.x]]
1373 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
1374 ; DARWIN-64-STATIC-NEXT:        ret
1375
1376 ; DARWIN-64-DYNAMIC: _qux04:
1377 ; DARWIN-64-DYNAMIC:    leaq    _ddst+64(%rip), [[RAX:%r.x]]
1378 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
1379 ; DARWIN-64-DYNAMIC-NEXT:       ret
1380
1381 ; DARWIN-64-PIC: _qux04:
1382 ; DARWIN-64-PIC:        leaq    _ddst+64(%rip), [[RAX:%r.x]]
1383 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
1384 ; DARWIN-64-PIC-NEXT:   ret
1385 }
1386
1387 define void @qux05() nounwind {
1388 entry:
1389         %0 = load i32** @dptr, align 8
1390         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1391         %2 = getelementptr i32* %0, i64 16
1392         store i32 %1, i32* %2, align 4
1393 ; LINUX-64-STATIC: qux05:
1394 ; LINUX-64-STATIC: movl    dsrc+64(%rip), [[EAX:%e.x]]
1395 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
1396 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1397 ; LINUX-64-STATIC: ret
1398
1399 ; LINUX-32-STATIC: qux05:
1400 ; LINUX-32-STATIC:      movl    dsrc+64, [[EAX:%e.x]]
1401 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
1402 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 64([[ECX]])
1403 ; LINUX-32-STATIC-NEXT:         ret
1404         ret void
1405
1406 ; LINUX-32-PIC: qux05:
1407 ; LINUX-32-PIC:         movl    dsrc+64, [[EAX:%e.x]]
1408 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
1409 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 64([[ECX]])
1410 ; LINUX-32-PIC-NEXT:    ret
1411
1412 ; LINUX-64-PIC: qux05:
1413 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1414 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
1415 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
1416 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
1417 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1418 ; LINUX-64-PIC-NEXT:    ret
1419
1420 ; DARWIN-32-STATIC: _qux05:
1421 ; DARWIN-32-STATIC:     movl    _dsrc+64, [[EAX:%e.x]]
1422 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
1423 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 64([[ECX]])
1424 ; DARWIN-32-STATIC-NEXT:        ret
1425
1426 ; DARWIN-32-DYNAMIC: _qux05:
1427 ; DARWIN-32-DYNAMIC:    movl    _dsrc+64, [[EAX:%e.x]]
1428 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
1429 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
1430 ; DARWIN-32-DYNAMIC-NEXT:       ret
1431
1432 ; DARWIN-32-PIC: _qux05:
1433 ; DARWIN-32-PIC:        calll   L20$pb
1434 ; DARWIN-32-PIC-NEXT: L20$pb:
1435 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1436 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L20$pb)+64([[EAX]]), [[ECX:%e.x]]
1437 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L20$pb([[EAX]]), [[EAX:%e.x]]
1438 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
1439 ; DARWIN-32-PIC-NEXT:   ret
1440
1441 ; DARWIN-64-STATIC: _qux05:
1442 ; DARWIN-64-STATIC:     movl    _dsrc+64(%rip), [[EAX:%e.x]]
1443 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
1444 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
1445 ; DARWIN-64-STATIC-NEXT:        ret
1446
1447 ; DARWIN-64-DYNAMIC: _qux05:
1448 ; DARWIN-64-DYNAMIC:    movl    _dsrc+64(%rip), [[EAX:%e.x]]
1449 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
1450 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
1451 ; DARWIN-64-DYNAMIC-NEXT:       ret
1452
1453 ; DARWIN-64-PIC: _qux05:
1454 ; DARWIN-64-PIC:        movl    _dsrc+64(%rip), [[EAX:%e.x]]
1455 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
1456 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
1457 ; DARWIN-64-PIC-NEXT:   ret
1458 }
1459
1460 define void @qux06() nounwind {
1461 entry:
1462         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1463         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4
1464         ret void
1465 ; LINUX-64-STATIC: qux06:
1466 ; LINUX-64-STATIC: movl    lsrc+64(%rip), [[EAX:%e.x]]
1467 ; LINUX-64-STATIC: movl    [[EAX]], ldst+64
1468 ; LINUX-64-STATIC: ret
1469
1470 ; LINUX-32-STATIC: qux06:
1471 ; LINUX-32-STATIC:      movl    lsrc+64, [[EAX:%e.x]]
1472 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ldst+64
1473 ; LINUX-32-STATIC-NEXT:         ret
1474
1475 ; LINUX-32-PIC: qux06:
1476 ; LINUX-32-PIC:         movl    lsrc+64, [[EAX:%e.x]]
1477 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ldst+64
1478 ; LINUX-32-PIC-NEXT:    ret
1479
1480 ; LINUX-64-PIC: qux06:
1481 ; LINUX-64-PIC:         movl    lsrc+64(%rip), [[EAX:%e.x]]
1482 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ldst+64(%rip)
1483 ; LINUX-64-PIC-NEXT:    ret
1484
1485 ; DARWIN-32-STATIC: _qux06:
1486 ; DARWIN-32-STATIC:     movl    _lsrc+64, [[EAX:%e.x]]
1487 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ldst+64
1488 ; DARWIN-32-STATIC-NEXT:        ret
1489
1490 ; DARWIN-32-DYNAMIC: _qux06:
1491 ; DARWIN-32-DYNAMIC:    movl    _lsrc+64, [[EAX:%e.x]]
1492 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ldst+64
1493 ; DARWIN-32-DYNAMIC-NEXT:       ret
1494
1495 ; DARWIN-32-PIC: _qux06:
1496 ; DARWIN-32-PIC:        calll   L21$pb
1497 ; DARWIN-32-PIC-NEXT: L21$pb:
1498 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1499 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L21$pb)+64([[EAX]]), [[ECX:%e.x]]
1500 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], (_ldst-L21$pb)+64([[EAX]])
1501 ; DARWIN-32-PIC-NEXT:   ret
1502
1503 ; DARWIN-64-STATIC: _qux06:
1504 ; DARWIN-64-STATIC:     movl    _lsrc+64(%rip), [[EAX:%e.x]]
1505 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ldst+64(%rip)
1506 ; DARWIN-64-STATIC-NEXT:        ret
1507
1508 ; DARWIN-64-DYNAMIC: _qux06:
1509 ; DARWIN-64-DYNAMIC:    movl    _lsrc+64(%rip), [[EAX:%e.x]]
1510 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ldst+64(%rip)
1511 ; DARWIN-64-DYNAMIC-NEXT:       ret
1512
1513 ; DARWIN-64-PIC: _qux06:
1514 ; DARWIN-64-PIC:        movl    _lsrc+64(%rip), [[EAX:%e.x]]
1515 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ldst+64(%rip)
1516 ; DARWIN-64-PIC-NEXT:   ret
1517 }
1518
1519 define void @qux07() nounwind {
1520 entry:
1521         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1522         ret void
1523 ; LINUX-64-STATIC: qux07:
1524 ; LINUX-64-STATIC: movq    $ldst+64, lptr
1525 ; LINUX-64-STATIC: ret
1526
1527 ; LINUX-32-STATIC: qux07:
1528 ; LINUX-32-STATIC:      movl    $ldst+64, lptr
1529 ; LINUX-32-STATIC-NEXT:         ret
1530
1531 ; LINUX-32-PIC: qux07:
1532 ; LINUX-32-PIC:         movl    $ldst+64, lptr
1533 ; LINUX-32-PIC-NEXT:    ret
1534
1535 ; LINUX-64-PIC: qux07:
1536 ; LINUX-64-PIC:         leaq    ldst+64(%rip), [[RAX:%r.x]]
1537 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
1538 ; LINUX-64-PIC-NEXT:    ret
1539
1540 ; DARWIN-32-STATIC: _qux07:
1541 ; DARWIN-32-STATIC:     movl    $_ldst+64, _lptr
1542 ; DARWIN-32-STATIC-NEXT:        ret
1543
1544 ; DARWIN-32-DYNAMIC: _qux07:
1545 ; DARWIN-32-DYNAMIC:    movl    $_ldst+64, _lptr
1546 ; DARWIN-32-DYNAMIC-NEXT:       ret
1547
1548 ; DARWIN-32-PIC: _qux07:
1549 ; DARWIN-32-PIC:        calll   L22$pb
1550 ; DARWIN-32-PIC-NEXT: L22$pb:
1551 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1552 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L22$pb)+64([[EAX]]), [[ECX:%e.x]]
1553 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L22$pb([[EAX]])
1554 ; DARWIN-32-PIC-NEXT:   ret
1555
1556 ; DARWIN-64-STATIC: _qux07:
1557 ; DARWIN-64-STATIC:     leaq    _ldst+64(%rip), [[RAX:%r.x]]
1558 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
1559 ; DARWIN-64-STATIC-NEXT:        ret
1560
1561 ; DARWIN-64-DYNAMIC: _qux07:
1562 ; DARWIN-64-DYNAMIC:    leaq    _ldst+64(%rip), [[RAX:%r.x]]
1563 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
1564 ; DARWIN-64-DYNAMIC-NEXT:       ret
1565
1566 ; DARWIN-64-PIC: _qux07:
1567 ; DARWIN-64-PIC:        leaq    _ldst+64(%rip), [[RAX:%r.x]]
1568 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
1569 ; DARWIN-64-PIC-NEXT:   ret
1570 }
1571
1572 define void @qux08() nounwind {
1573 entry:
1574         %0 = load i32** @lptr, align 8
1575         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1576         %2 = getelementptr i32* %0, i64 16
1577         store i32 %1, i32* %2, align 4
1578 ; LINUX-64-STATIC: qux08:
1579 ; LINUX-64-STATIC: movl    lsrc+64(%rip), [[EAX:%e.x]]
1580 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
1581 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1582 ; LINUX-64-STATIC: ret
1583
1584 ; LINUX-32-STATIC: qux08:
1585 ; LINUX-32-STATIC:      movl    lsrc+64, [[EAX:%e.x]]
1586 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
1587 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 64([[ECX]])
1588 ; LINUX-32-STATIC-NEXT:         ret
1589         ret void
1590
1591 ; LINUX-32-PIC: qux08:
1592 ; LINUX-32-PIC:         movl    lsrc+64, [[EAX:%e.x]]
1593 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
1594 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 64([[ECX]])
1595 ; LINUX-32-PIC-NEXT:    ret
1596
1597 ; LINUX-64-PIC: qux08:
1598 ; LINUX-64-PIC:         movl    lsrc+64(%rip), [[EAX:%e.x]]
1599 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
1600 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1601 ; LINUX-64-PIC-NEXT:    ret
1602
1603 ; DARWIN-32-STATIC: _qux08:
1604 ; DARWIN-32-STATIC:     movl    _lsrc+64, [[EAX:%e.x]]
1605 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
1606 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 64([[ECX]])
1607 ; DARWIN-32-STATIC-NEXT:        ret
1608
1609 ; DARWIN-32-DYNAMIC: _qux08:
1610 ; DARWIN-32-DYNAMIC:    movl    _lsrc+64, [[EAX:%e.x]]
1611 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
1612 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
1613 ; DARWIN-32-DYNAMIC-NEXT:       ret
1614
1615 ; DARWIN-32-PIC: _qux08:
1616 ; DARWIN-32-PIC:        calll   L23$pb
1617 ; DARWIN-32-PIC-NEXT: L23$pb:
1618 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1619 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L23$pb)+64([[EAX]]), [[ECX:%e.x]]
1620 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L23$pb([[EAX]]), [[EAX:%e.x]]
1621 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
1622 ; DARWIN-32-PIC-NEXT:   ret
1623
1624 ; DARWIN-64-STATIC: _qux08:
1625 ; DARWIN-64-STATIC:     movl    _lsrc+64(%rip), [[EAX:%e.x]]
1626 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
1627 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
1628 ; DARWIN-64-STATIC-NEXT:        ret
1629
1630 ; DARWIN-64-DYNAMIC: _qux08:
1631 ; DARWIN-64-DYNAMIC:    movl    _lsrc+64(%rip), [[EAX:%e.x]]
1632 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
1633 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
1634 ; DARWIN-64-DYNAMIC-NEXT:       ret
1635
1636 ; DARWIN-64-PIC: _qux08:
1637 ; DARWIN-64-PIC:        movl    _lsrc+64(%rip), [[EAX:%e.x]]
1638 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
1639 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
1640 ; DARWIN-64-PIC-NEXT:   ret
1641 }
1642
1643 define void @ind00(i64 %i) nounwind {
1644 entry:
1645         %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1646         %1 = load i32* %0, align 4
1647         %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1648         store i32 %1, i32* %2, align 4
1649         ret void
1650 ; LINUX-64-STATIC: ind00:
1651 ; LINUX-64-STATIC: movl    src(,%rdi,4), [[EAX:%e.x]]
1652 ; LINUX-64-STATIC: movl    [[EAX]], dst(,%rdi,4)
1653 ; LINUX-64-STATIC: ret
1654
1655 ; LINUX-32-STATIC: ind00:
1656 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1657 ; LINUX-32-STATIC-NEXT:         movl    src(,[[EAX]],4), [[ECX:%e.x]]
1658 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], dst(,[[EAX]],4)
1659 ; LINUX-32-STATIC-NEXT:         ret
1660
1661 ; LINUX-32-PIC: ind00:
1662 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1663 ; LINUX-32-PIC-NEXT:    movl    src(,[[EAX]],4), [[ECX:%e.x]]
1664 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], dst(,[[EAX]],4)
1665 ; LINUX-32-PIC-NEXT:    ret
1666
1667 ; LINUX-64-PIC: ind00:
1668 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
1669 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1670 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
1671 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
1672 ; LINUX-64-PIC-NEXT:    ret
1673
1674 ; DARWIN-32-STATIC: _ind00:
1675 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1676 ; DARWIN-32-STATIC-NEXT:        movl    _src(,[[EAX]],4), [[ECX:%e.x]]
1677 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _dst(,[[EAX]],4)
1678 ; DARWIN-32-STATIC-NEXT:        ret
1679
1680 ; DARWIN-32-DYNAMIC: _ind00:
1681 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1682 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
1683 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1684 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[EDX:%e.x]]
1685 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
1686 ; DARWIN-32-DYNAMIC-NEXT:       ret
1687
1688 ; DARWIN-32-PIC: _ind00:
1689 ; DARWIN-32-PIC:        calll   L24$pb
1690 ; DARWIN-32-PIC-NEXT: L24$pb:
1691 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1692 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
1693 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L24$pb([[EAX]]), [[EDX:%e.x]]
1694 ; DARWIN-32-PIC-NEXT:   movl    ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
1695 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L24$pb([[EAX]]), [[EAX:%e.x]]
1696 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
1697 ; DARWIN-32-PIC-NEXT:   ret
1698
1699 ; DARWIN-64-STATIC: _ind00:
1700 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1701 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1702 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1703 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
1704 ; DARWIN-64-STATIC-NEXT:        ret
1705
1706 ; DARWIN-64-DYNAMIC: _ind00:
1707 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1708 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1709 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1710 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
1711 ; DARWIN-64-DYNAMIC-NEXT:       ret
1712
1713 ; DARWIN-64-PIC: _ind00:
1714 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1715 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1716 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1717 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
1718 ; DARWIN-64-PIC-NEXT:   ret
1719 }
1720
1721 define void @ixd00(i64 %i) nounwind {
1722 entry:
1723         %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
1724         %1 = load i32* %0, align 4
1725         %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1726         store i32 %1, i32* %2, align 4
1727         ret void
1728 ; LINUX-64-STATIC: ixd00:
1729 ; LINUX-64-STATIC: movl    xsrc(,%rdi,4), [[EAX:%e.x]]
1730 ; LINUX-64-STATIC: movl    [[EAX]], xdst(,%rdi,4)
1731 ; LINUX-64-STATIC: ret
1732
1733 ; LINUX-32-STATIC: ixd00:
1734 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1735 ; LINUX-32-STATIC-NEXT:         movl    xsrc(,[[EAX]],4), [[ECX:%e.x]]
1736 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], xdst(,[[EAX]],4)
1737 ; LINUX-32-STATIC-NEXT:         ret
1738
1739 ; LINUX-32-PIC: ixd00:
1740 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1741 ; LINUX-32-PIC-NEXT:    movl    xsrc(,[[EAX]],4), [[ECX:%e.x]]
1742 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], xdst(,[[EAX]],4)
1743 ; LINUX-32-PIC-NEXT:    ret
1744
1745 ; LINUX-64-PIC: ixd00:
1746 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1747 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1748 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1749 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
1750 ; LINUX-64-PIC-NEXT:    ret
1751
1752 ; DARWIN-32-STATIC: _ixd00:
1753 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1754 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc(,[[EAX]],4), [[ECX:%e.x]]
1755 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _xdst(,[[EAX]],4)
1756 ; DARWIN-32-STATIC-NEXT:        ret
1757
1758 ; DARWIN-32-DYNAMIC: _ixd00:
1759 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1760 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
1761 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1762 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[EDX:%e.x]]
1763 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
1764 ; DARWIN-32-DYNAMIC-NEXT:       ret
1765
1766 ; DARWIN-32-PIC: _ixd00:
1767 ; DARWIN-32-PIC:        calll   L25$pb
1768 ; DARWIN-32-PIC-NEXT: L25$pb:
1769 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1770 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
1771 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L25$pb([[EAX]]), [[EDX:%e.x]]
1772 ; DARWIN-32-PIC-NEXT:   movl    ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
1773 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L25$pb([[EAX]]), [[EAX:%e.x]]
1774 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
1775 ; DARWIN-32-PIC-NEXT:   ret
1776
1777 ; DARWIN-64-STATIC: _ixd00:
1778 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1779 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1780 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1781 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
1782 ; DARWIN-64-STATIC-NEXT:        ret
1783
1784 ; DARWIN-64-DYNAMIC: _ixd00:
1785 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1786 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1787 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1788 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
1789 ; DARWIN-64-DYNAMIC-NEXT:       ret
1790
1791 ; DARWIN-64-PIC: _ixd00:
1792 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1793 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1794 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1795 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
1796 ; DARWIN-64-PIC-NEXT:   ret
1797 }
1798
1799 define void @ind01(i64 %i) nounwind {
1800 entry:
1801         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1802         store i32* %0, i32** @ptr, align 8
1803         ret void
1804 ; LINUX-64-STATIC: ind01:
1805 ; LINUX-64-STATIC: leaq    dst(,%rdi,4), [[RAX:%r.x]]
1806 ; LINUX-64-STATIC: movq    [[RAX]], ptr
1807 ; LINUX-64-STATIC: ret
1808
1809 ; LINUX-32-STATIC: ind01:
1810 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1811 ; LINUX-32-STATIC-NEXT:         leal    dst(,[[EAX]],4), [[EAX:%e.x]]
1812 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
1813 ; LINUX-32-STATIC-NEXT:         ret
1814
1815 ; LINUX-32-PIC: ind01:
1816 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1817 ; LINUX-32-PIC-NEXT:    leal    dst(,[[EAX]],4), [[EAX:%e.x]]
1818 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
1819 ; LINUX-32-PIC-NEXT:    ret
1820
1821 ; LINUX-64-PIC: ind01:
1822 ; LINUX-64-PIC:         shlq    $2, %rdi
1823 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), %rdi
1824 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1825 ; LINUX-64-PIC-NEXT:    movq    %rdi, ([[RAX]])
1826 ; LINUX-64-PIC-NEXT:    ret
1827
1828 ; DARWIN-32-STATIC: _ind01:
1829 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1830 ; DARWIN-32-STATIC-NEXT:        leal    _dst(,[[EAX]],4), [[EAX:%e.x]]
1831 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
1832 ; DARWIN-32-STATIC-NEXT:        ret
1833
1834 ; DARWIN-32-DYNAMIC: _ind01:
1835 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1836 ; DARWIN-32-DYNAMIC-NEXT:       shll    $2, [[EAX:%e.x]]
1837 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, [[EAX:%e.x]]
1838 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1839 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
1840 ; DARWIN-32-DYNAMIC-NEXT:       ret
1841
1842 ; DARWIN-32-PIC: _ind01:
1843 ; DARWIN-32-PIC:        calll   L26$pb
1844 ; DARWIN-32-PIC-NEXT: L26$pb:
1845 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1846 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
1847 ; DARWIN-32-PIC-NEXT:   shll    $2, [[ECX:%e.x]]
1848 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-L26$pb([[EAX]]), [[ECX:%e.x]]
1849 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L26$pb([[EAX]]), [[EAX:%e.x]]
1850 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
1851 ; DARWIN-32-PIC-NEXT:   ret
1852
1853 ; DARWIN-64-STATIC: _ind01:
1854 ; DARWIN-64-STATIC:     shlq    $2, %rdi
1855 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), %rdi
1856 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1857 ; DARWIN-64-STATIC-NEXT:        movq    %rdi, ([[RAX]])
1858 ; DARWIN-64-STATIC-NEXT:        ret
1859
1860 ; DARWIN-64-DYNAMIC: _ind01:
1861 ; DARWIN-64-DYNAMIC:    shlq    $2, %rdi
1862 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), %rdi
1863 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1864 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rdi, ([[RAX]])
1865 ; DARWIN-64-DYNAMIC-NEXT:       ret
1866
1867 ; DARWIN-64-PIC: _ind01:
1868 ; DARWIN-64-PIC:        shlq    $2, %rdi
1869 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), %rdi
1870 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1871 ; DARWIN-64-PIC-NEXT:   movq    %rdi, ([[RAX]])
1872 ; DARWIN-64-PIC-NEXT:   ret
1873 }
1874
1875 define void @ixd01(i64 %i) nounwind {
1876 entry:
1877         %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1878         store i32* %0, i32** @ptr, align 8
1879         ret void
1880 ; LINUX-64-STATIC: ixd01:
1881 ; LINUX-64-STATIC: leaq    xdst(,%rdi,4), [[RAX:%r.x]]
1882 ; LINUX-64-STATIC: movq    [[RAX]], ptr
1883 ; LINUX-64-STATIC: ret
1884
1885 ; LINUX-32-STATIC: ixd01:
1886 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1887 ; LINUX-32-STATIC-NEXT:         leal    xdst(,[[EAX]],4), [[EAX:%e.x]]
1888 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
1889 ; LINUX-32-STATIC-NEXT:         ret
1890
1891 ; LINUX-32-PIC: ixd01:
1892 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1893 ; LINUX-32-PIC-NEXT:    leal    xdst(,[[EAX]],4), [[EAX:%e.x]]
1894 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
1895 ; LINUX-32-PIC-NEXT:    ret
1896
1897 ; LINUX-64-PIC: ixd01:
1898 ; LINUX-64-PIC:         shlq    $2, %rdi
1899 ; LINUX-64-PIC-NEXT:    addq    xdst@GOTPCREL(%rip), %rdi
1900 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1901 ; LINUX-64-PIC-NEXT:    movq    %rdi, ([[RAX]])
1902 ; LINUX-64-PIC-NEXT:    ret
1903
1904 ; DARWIN-32-STATIC: _ixd01:
1905 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1906 ; DARWIN-32-STATIC-NEXT:        leal    _xdst(,[[EAX]],4), [[EAX:%e.x]]
1907 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
1908 ; DARWIN-32-STATIC-NEXT:        ret
1909
1910 ; DARWIN-32-DYNAMIC: _ixd01:
1911 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1912 ; DARWIN-32-DYNAMIC-NEXT:       shll    $2, [[EAX:%e.x]]
1913 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_xdst$non_lazy_ptr, [[EAX:%e.x]]
1914 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1915 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
1916 ; DARWIN-32-DYNAMIC-NEXT:       ret
1917
1918 ; DARWIN-32-PIC: _ixd01:
1919 ; DARWIN-32-PIC:        calll   L27$pb
1920 ; DARWIN-32-PIC-NEXT: L27$pb:
1921 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1922 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
1923 ; DARWIN-32-PIC-NEXT:   shll    $2, [[ECX:%e.x]]
1924 ; DARWIN-32-PIC-NEXT:   addl    L_xdst$non_lazy_ptr-L27$pb([[EAX]]), [[ECX:%e.x]]
1925 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L27$pb([[EAX]]), [[EAX:%e.x]]
1926 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
1927 ; DARWIN-32-PIC-NEXT:   ret
1928
1929 ; DARWIN-64-STATIC: _ixd01:
1930 ; DARWIN-64-STATIC:     shlq    $2, %rdi
1931 ; DARWIN-64-STATIC-NEXT:        addq    _xdst@GOTPCREL(%rip), %rdi
1932 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1933 ; DARWIN-64-STATIC-NEXT:        movq    %rdi, ([[RAX]])
1934 ; DARWIN-64-STATIC-NEXT:        ret
1935
1936 ; DARWIN-64-DYNAMIC: _ixd01:
1937 ; DARWIN-64-DYNAMIC:    shlq    $2, %rdi
1938 ; DARWIN-64-DYNAMIC-NEXT:       addq    _xdst@GOTPCREL(%rip), %rdi
1939 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1940 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rdi, ([[RAX]])
1941 ; DARWIN-64-DYNAMIC-NEXT:       ret
1942
1943 ; DARWIN-64-PIC: _ixd01:
1944 ; DARWIN-64-PIC:        shlq    $2, %rdi
1945 ; DARWIN-64-PIC-NEXT:   addq    _xdst@GOTPCREL(%rip), %rdi
1946 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1947 ; DARWIN-64-PIC-NEXT:   movq    %rdi, ([[RAX]])
1948 ; DARWIN-64-PIC-NEXT:   ret
1949 }
1950
1951 define void @ind02(i64 %i) nounwind {
1952 entry:
1953         %0 = load i32** @ptr, align 8
1954         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1955         %2 = load i32* %1, align 4
1956         %3 = getelementptr i32* %0, i64 %i
1957         store i32 %2, i32* %3, align 4
1958         ret void
1959 ; LINUX-64-STATIC: ind02:
1960 ; LINUX-64-STATIC: movl    src(,%rdi,4), [[EAX:%e.x]]
1961 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1962 ; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
1963 ; LINUX-64-STATIC: ret
1964
1965 ; LINUX-32-STATIC: ind02:
1966 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1967 ; LINUX-32-STATIC-NEXT:         movl    src(,[[EAX]],4), [[ECX:%e.x]]
1968 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
1969 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ([[EDX]],[[EAX]],4)
1970 ; LINUX-32-STATIC-NEXT:         ret
1971
1972 ; LINUX-32-PIC: ind02:
1973 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1974 ; LINUX-32-PIC-NEXT:    movl    src(,[[EAX]],4), [[ECX:%e.x]]
1975 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
1976 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ([[EDX]],[[EAX]],4)
1977 ; LINUX-32-PIC-NEXT:    ret
1978
1979 ; LINUX-64-PIC: ind02:
1980 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
1981 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1982 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1983 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
1984 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
1985 ; LINUX-64-PIC-NEXT:    ret
1986
1987 ; DARWIN-32-STATIC: _ind02:
1988 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1989 ; DARWIN-32-STATIC-NEXT:        movl    _src(,[[EAX]],4), [[ECX:%e.x]]
1990 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
1991 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], ([[EDX]],[[EAX]],4)
1992 ; DARWIN-32-STATIC-NEXT:        ret
1993
1994 ; DARWIN-32-DYNAMIC: _ind02:
1995 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1996 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
1997 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1998 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
1999 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
2000 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
2001 ; DARWIN-32-DYNAMIC-NEXT:       ret
2002
2003 ; DARWIN-32-PIC: _ind02:
2004 ; DARWIN-32-PIC:        calll   L28$pb
2005 ; DARWIN-32-PIC-NEXT: L28$pb:
2006 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2007 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2008 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L28$pb([[EAX]]), [[EDX:%e.x]]
2009 ; DARWIN-32-PIC-NEXT:   movl    ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2010 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L28$pb([[EAX]]), [[EAX:%e.x]]
2011 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
2012 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
2013 ; DARWIN-32-PIC-NEXT:   ret
2014
2015 ; DARWIN-64-STATIC: _ind02:
2016 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2017 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2018 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2019 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
2020 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2021 ; DARWIN-64-STATIC-NEXT:        ret
2022
2023 ; DARWIN-64-DYNAMIC: _ind02:
2024 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2025 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2026 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2027 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
2028 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2029 ; DARWIN-64-DYNAMIC-NEXT:       ret
2030
2031 ; DARWIN-64-PIC: _ind02:
2032 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2033 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2034 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2035 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
2036 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2037 ; DARWIN-64-PIC-NEXT:   ret
2038 }
2039
2040 define void @ixd02(i64 %i) nounwind {
2041 entry:
2042         %0 = load i32** @ptr, align 8
2043         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
2044         %2 = load i32* %1, align 4
2045         %3 = getelementptr i32* %0, i64 %i
2046         store i32 %2, i32* %3, align 4
2047         ret void
2048 ; LINUX-64-STATIC: ixd02:
2049 ; LINUX-64-STATIC: movl    xsrc(,%rdi,4), [[EAX:%e.x]]
2050 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
2051 ; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2052 ; LINUX-64-STATIC: ret
2053
2054 ; LINUX-32-STATIC: ixd02:
2055 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2056 ; LINUX-32-STATIC-NEXT:         movl    xsrc(,[[EAX]],4), [[ECX:%e.x]]
2057 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
2058 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ([[EDX]],[[EAX]],4)
2059 ; LINUX-32-STATIC-NEXT:         ret
2060
2061 ; LINUX-32-PIC: ixd02:
2062 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2063 ; LINUX-32-PIC-NEXT:    movl    xsrc(,[[EAX]],4), [[ECX:%e.x]]
2064 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
2065 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ([[EDX]],[[EAX]],4)
2066 ; LINUX-32-PIC-NEXT:    ret
2067
2068 ; LINUX-64-PIC: ixd02:
2069 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2070 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2071 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2072 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
2073 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2074 ; LINUX-64-PIC-NEXT:    ret
2075
2076 ; DARWIN-32-STATIC: _ixd02:
2077 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2078 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc(,[[EAX]],4), [[ECX:%e.x]]
2079 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
2080 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], ([[EDX]],[[EAX]],4)
2081 ; DARWIN-32-STATIC-NEXT:        ret
2082
2083 ; DARWIN-32-DYNAMIC: _ixd02:
2084 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2085 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
2086 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2087 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2088 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
2089 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
2090 ; DARWIN-32-DYNAMIC-NEXT:       ret
2091
2092 ; DARWIN-32-PIC: _ixd02:
2093 ; DARWIN-32-PIC:        calll   L29$pb
2094 ; DARWIN-32-PIC-NEXT: L29$pb:
2095 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2096 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2097 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L29$pb([[EAX]]), [[EDX:%e.x]]
2098 ; DARWIN-32-PIC-NEXT:   movl    ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2099 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L29$pb([[EAX]]), [[EAX:%e.x]]
2100 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
2101 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
2102 ; DARWIN-32-PIC-NEXT:   ret
2103
2104 ; DARWIN-64-STATIC: _ixd02:
2105 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2106 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2107 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2108 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
2109 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2110 ; DARWIN-64-STATIC-NEXT:        ret
2111
2112 ; DARWIN-64-DYNAMIC: _ixd02:
2113 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2114 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2115 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2116 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
2117 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2118 ; DARWIN-64-DYNAMIC-NEXT:       ret
2119
2120 ; DARWIN-64-PIC: _ixd02:
2121 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2122 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2123 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2124 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
2125 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2126 ; DARWIN-64-PIC-NEXT:   ret
2127 }
2128
2129 define void @ind03(i64 %i) nounwind {
2130 entry:
2131         %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2132         %1 = load i32* %0, align 4
2133         %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2134         store i32 %1, i32* %2, align 4
2135         ret void
2136 ; LINUX-64-STATIC: ind03:
2137 ; LINUX-64-STATIC: movl    dsrc(,%rdi,4), [[EAX:%e.x]]
2138 ; LINUX-64-STATIC: movl    [[EAX]], ddst(,%rdi,4)
2139 ; LINUX-64-STATIC: ret
2140
2141 ; LINUX-32-STATIC: ind03:
2142 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2143 ; LINUX-32-STATIC-NEXT:         movl    dsrc(,[[EAX]],4), [[ECX:%e.x]]
2144 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ddst(,[[EAX]],4)
2145 ; LINUX-32-STATIC-NEXT:         ret
2146
2147 ; LINUX-32-PIC: ind03:
2148 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2149 ; LINUX-32-PIC-NEXT:    movl    dsrc(,[[EAX]],4), [[ECX:%e.x]]
2150 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ddst(,[[EAX]],4)
2151 ; LINUX-32-PIC-NEXT:    ret
2152
2153 ; LINUX-64-PIC: ind03:
2154 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2155 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2156 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
2157 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2158 ; LINUX-64-PIC-NEXT:    ret
2159
2160 ; DARWIN-32-STATIC: _ind03:
2161 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2162 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2163 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ddst(,[[EAX]],4)
2164 ; DARWIN-32-STATIC-NEXT:        ret
2165
2166 ; DARWIN-32-DYNAMIC: _ind03:
2167 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2168 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2169 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ddst(,[[EAX]],4)
2170 ; DARWIN-32-DYNAMIC-NEXT:       ret
2171
2172 ; DARWIN-32-PIC: _ind03:
2173 ; DARWIN-32-PIC:        calll   L30$pb
2174 ; DARWIN-32-PIC-NEXT: L30$pb:
2175 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2176 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2177 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-L30$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2178 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], _ddst-L30$pb([[EAX]],[[ECX]],4)
2179 ; DARWIN-32-PIC-NEXT:   ret
2180
2181 ; DARWIN-64-STATIC: _ind03:
2182 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
2183 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2184 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), [[RCX:%r.x]]
2185 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2186 ; DARWIN-64-STATIC-NEXT:        ret
2187
2188 ; DARWIN-64-DYNAMIC: _ind03:
2189 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
2190 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2191 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), [[RCX:%r.x]]
2192 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2193 ; DARWIN-64-DYNAMIC-NEXT:       ret
2194
2195 ; DARWIN-64-PIC: _ind03:
2196 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
2197 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2198 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), [[RCX:%r.x]]
2199 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2200 ; DARWIN-64-PIC-NEXT:   ret
2201 }
2202
2203 define void @ind04(i64 %i) nounwind {
2204 entry:
2205         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2206         store i32* %0, i32** @dptr, align 8
2207         ret void
2208 ; LINUX-64-STATIC: ind04:
2209 ; LINUX-64-STATIC: leaq    ddst(,%rdi,4), [[RAX:%r.x]]
2210 ; LINUX-64-STATIC: movq    [[RAX]], dptr
2211 ; LINUX-64-STATIC: ret
2212
2213 ; LINUX-32-STATIC: ind04:
2214 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2215 ; LINUX-32-STATIC-NEXT:         leal    ddst(,[[EAX]],4), [[EAX:%e.x]]
2216 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dptr
2217 ; LINUX-32-STATIC-NEXT:         ret
2218
2219 ; LINUX-32-PIC: ind04:
2220 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2221 ; LINUX-32-PIC-NEXT:    leal    ddst(,[[EAX]],4), [[EAX:%e.x]]
2222 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dptr
2223 ; LINUX-32-PIC-NEXT:    ret
2224
2225 ; LINUX-64-PIC: ind04:
2226 ; LINUX-64-PIC:         shlq    $2, %rdi
2227 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), %rdi
2228 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
2229 ; LINUX-64-PIC-NEXT:    movq    %rdi, ([[RAX]])
2230 ; LINUX-64-PIC-NEXT:    ret
2231
2232 ; DARWIN-32-STATIC: _ind04:
2233 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2234 ; DARWIN-32-STATIC-NEXT:        leal    _ddst(,[[EAX]],4), [[EAX:%e.x]]
2235 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dptr
2236 ; DARWIN-32-STATIC-NEXT:        ret
2237
2238 ; DARWIN-32-DYNAMIC: _ind04:
2239 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2240 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst(,[[EAX]],4), [[EAX:%e.x]]
2241 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _dptr
2242 ; DARWIN-32-DYNAMIC-NEXT:       ret
2243
2244 ; DARWIN-32-PIC: _ind04:
2245 ; DARWIN-32-PIC:        calll   L31$pb
2246 ; DARWIN-32-PIC-NEXT: L31$pb:
2247 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2248 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2249 ; DARWIN-32-PIC-NEXT:   leal    _ddst-L31$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]]
2250 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L31$pb([[EAX]])
2251 ; DARWIN-32-PIC-NEXT:   ret
2252
2253 ; DARWIN-64-STATIC: _ind04:
2254 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
2255 ; DARWIN-64-STATIC-NEXT:        leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2256 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
2257 ; DARWIN-64-STATIC-NEXT:        ret
2258
2259 ; DARWIN-64-DYNAMIC: _ind04:
2260 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
2261 ; DARWIN-64-DYNAMIC-NEXT:       leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2262 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
2263 ; DARWIN-64-DYNAMIC-NEXT:       ret
2264
2265 ; DARWIN-64-PIC: _ind04:
2266 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
2267 ; DARWIN-64-PIC-NEXT:   leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2268 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
2269 ; DARWIN-64-PIC-NEXT:   ret
2270 }
2271
2272 define void @ind05(i64 %i) nounwind {
2273 entry:
2274         %0 = load i32** @dptr, align 8
2275         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2276         %2 = load i32* %1, align 4
2277         %3 = getelementptr i32* %0, i64 %i
2278         store i32 %2, i32* %3, align 4
2279         ret void
2280 ; LINUX-64-STATIC: ind05:
2281 ; LINUX-64-STATIC: movl    dsrc(,%rdi,4), [[EAX:%e.x]]
2282 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
2283 ; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2284 ; LINUX-64-STATIC: ret
2285
2286 ; LINUX-32-STATIC: ind05:
2287 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2288 ; LINUX-32-STATIC-NEXT:         movl    dsrc(,[[EAX]],4), [[ECX:%e.x]]
2289 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[EDX:%e.x]]
2290 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ([[EDX]],[[EAX]],4)
2291 ; LINUX-32-STATIC-NEXT:         ret
2292
2293 ; LINUX-32-PIC: ind05:
2294 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2295 ; LINUX-32-PIC-NEXT:    movl    dsrc(,[[EAX]],4), [[ECX:%e.x]]
2296 ; LINUX-32-PIC-NEXT:    movl    dptr, [[EDX:%e.x]]
2297 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ([[EDX]],[[EAX]],4)
2298 ; LINUX-32-PIC-NEXT:    ret
2299
2300 ; LINUX-64-PIC: ind05:
2301 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2302 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2303 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
2304 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
2305 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2306 ; LINUX-64-PIC-NEXT:    ret
2307
2308 ; DARWIN-32-STATIC: _ind05:
2309 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2310 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2311 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[EDX:%e.x]]
2312 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], ([[EDX]],[[EAX]],4)
2313 ; DARWIN-32-STATIC-NEXT:        ret
2314
2315 ; DARWIN-32-DYNAMIC: _ind05:
2316 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2317 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2318 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[EDX:%e.x]]
2319 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
2320 ; DARWIN-32-DYNAMIC-NEXT:       ret
2321
2322 ; DARWIN-32-PIC: _ind05:
2323 ; DARWIN-32-PIC:        calll   L32$pb
2324 ; DARWIN-32-PIC-NEXT: L32$pb:
2325 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2326 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2327 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-L32$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2328 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L32$pb([[EAX]]), [[EAX:%e.x]]
2329 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
2330 ; DARWIN-32-PIC-NEXT:   ret
2331
2332 ; DARWIN-64-STATIC: _ind05:
2333 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
2334 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2335 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
2336 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2337 ; DARWIN-64-STATIC-NEXT:        ret
2338
2339 ; DARWIN-64-DYNAMIC: _ind05:
2340 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
2341 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2342 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
2343 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2344 ; DARWIN-64-DYNAMIC-NEXT:       ret
2345
2346 ; DARWIN-64-PIC: _ind05:
2347 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
2348 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2349 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
2350 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2351 ; DARWIN-64-PIC-NEXT:   ret
2352 }
2353
2354 define void @ind06(i64 %i) nounwind {
2355 entry:
2356         %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2357         %1 = load i32* %0, align 4
2358         %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2359         store i32 %1, i32* %2, align 4
2360         ret void
2361 ; LINUX-64-STATIC: ind06:
2362 ; LINUX-64-STATIC: movl    lsrc(,%rdi,4), [[EAX:%e.x]]
2363 ; LINUX-64-STATIC: movl    [[EAX]], ldst(,%rdi,4)
2364 ; LINUX-64-STATIC: ret
2365
2366 ; LINUX-32-STATIC: ind06:
2367 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2368 ; LINUX-32-STATIC-NEXT:         movl    lsrc(,[[EAX]],4), [[ECX:%e.x]]
2369 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ldst(,[[EAX]],4)
2370 ; LINUX-32-STATIC-NEXT:         ret
2371
2372 ; LINUX-32-PIC: ind06:
2373 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2374 ; LINUX-32-PIC-NEXT:    movl    lsrc(,[[EAX]],4), [[ECX:%e.x]]
2375 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ldst(,[[EAX]],4)
2376 ; LINUX-32-PIC-NEXT:    ret
2377
2378 ; LINUX-64-PIC: ind06:
2379 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
2380 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2381 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), [[RCX:%r.x]]
2382 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2383 ; LINUX-64-PIC-NEXT:    ret
2384
2385 ; DARWIN-32-STATIC: _ind06:
2386 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2387 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2388 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ldst(,[[EAX]],4)
2389 ; DARWIN-32-STATIC-NEXT:        ret
2390
2391 ; DARWIN-32-DYNAMIC: _ind06:
2392 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2393 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2394 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ldst(,[[EAX]],4)
2395 ; DARWIN-32-DYNAMIC-NEXT:       ret
2396
2397 ; DARWIN-32-PIC: _ind06:
2398 ; DARWIN-32-PIC:        calll   L33$pb
2399 ; DARWIN-32-PIC-NEXT: L33$pb:
2400 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2401 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2402 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-L33$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2403 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], _ldst-L33$pb([[EAX]],[[ECX]],4)
2404 ; DARWIN-32-PIC-NEXT:   ret
2405
2406 ; DARWIN-64-STATIC: _ind06:
2407 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
2408 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2409 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), [[RCX:%r.x]]
2410 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2411 ; DARWIN-64-STATIC-NEXT:        ret
2412
2413 ; DARWIN-64-DYNAMIC: _ind06:
2414 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
2415 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2416 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), [[RCX:%r.x]]
2417 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2418 ; DARWIN-64-DYNAMIC-NEXT:       ret
2419
2420 ; DARWIN-64-PIC: _ind06:
2421 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
2422 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2423 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), [[RCX:%r.x]]
2424 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2425 ; DARWIN-64-PIC-NEXT:   ret
2426 }
2427
2428 define void @ind07(i64 %i) nounwind {
2429 entry:
2430         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2431         store i32* %0, i32** @lptr, align 8
2432         ret void
2433 ; LINUX-64-STATIC: ind07:
2434 ; LINUX-64-STATIC: leaq    ldst(,%rdi,4), [[RAX:%r.x]]
2435 ; LINUX-64-STATIC: movq    [[RAX]], lptr
2436 ; LINUX-64-STATIC: ret
2437
2438 ; LINUX-32-STATIC: ind07:
2439 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2440 ; LINUX-32-STATIC-NEXT:         leal    ldst(,[[EAX]],4), [[EAX:%e.x]]
2441 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], lptr
2442 ; LINUX-32-STATIC-NEXT:         ret
2443
2444 ; LINUX-32-PIC: ind07:
2445 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2446 ; LINUX-32-PIC-NEXT:    leal    ldst(,[[EAX]],4), [[EAX:%e.x]]
2447 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], lptr
2448 ; LINUX-32-PIC-NEXT:    ret
2449
2450 ; LINUX-64-PIC: ind07:
2451 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
2452 ; LINUX-64-PIC-NEXT:    leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2453 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
2454 ; LINUX-64-PIC-NEXT:    ret
2455
2456 ; DARWIN-32-STATIC: _ind07:
2457 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2458 ; DARWIN-32-STATIC-NEXT:        leal    _ldst(,[[EAX]],4), [[EAX:%e.x]]
2459 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _lptr
2460 ; DARWIN-32-STATIC-NEXT:        ret
2461
2462 ; DARWIN-32-DYNAMIC: _ind07:
2463 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2464 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst(,[[EAX]],4), [[EAX:%e.x]]
2465 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _lptr
2466 ; DARWIN-32-DYNAMIC-NEXT:       ret
2467
2468 ; DARWIN-32-PIC: _ind07:
2469 ; DARWIN-32-PIC:        calll   L34$pb
2470 ; DARWIN-32-PIC-NEXT: L34$pb:
2471 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2472 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2473 ; DARWIN-32-PIC-NEXT:   leal    _ldst-L34$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]]
2474 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L34$pb([[EAX]])
2475 ; DARWIN-32-PIC-NEXT:   ret
2476
2477 ; DARWIN-64-STATIC: _ind07:
2478 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
2479 ; DARWIN-64-STATIC-NEXT:        leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2480 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
2481 ; DARWIN-64-STATIC-NEXT:        ret
2482
2483 ; DARWIN-64-DYNAMIC: _ind07:
2484 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
2485 ; DARWIN-64-DYNAMIC-NEXT:       leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2486 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
2487 ; DARWIN-64-DYNAMIC-NEXT:       ret
2488
2489 ; DARWIN-64-PIC: _ind07:
2490 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
2491 ; DARWIN-64-PIC-NEXT:   leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2492 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
2493 ; DARWIN-64-PIC-NEXT:   ret
2494 }
2495
2496 define void @ind08(i64 %i) nounwind {
2497 entry:
2498         %0 = load i32** @lptr, align 8
2499         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2500         %2 = load i32* %1, align 4
2501         %3 = getelementptr i32* %0, i64 %i
2502         store i32 %2, i32* %3, align 4
2503         ret void
2504 ; LINUX-64-STATIC: ind08:
2505 ; LINUX-64-STATIC: movl    lsrc(,%rdi,4), [[EAX:%e.x]]
2506 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
2507 ; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2508 ; LINUX-64-STATIC: ret
2509
2510 ; LINUX-32-STATIC: ind08:
2511 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2512 ; LINUX-32-STATIC-NEXT:         movl    lsrc(,[[EAX]],4), [[ECX:%e.x]]
2513 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[EDX:%e.x]]
2514 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ([[EDX]],[[EAX]],4)
2515 ; LINUX-32-STATIC-NEXT:         ret
2516
2517 ; LINUX-32-PIC: ind08:
2518 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2519 ; LINUX-32-PIC-NEXT:    movl    lsrc(,[[EAX]],4), [[ECX:%e.x]]
2520 ; LINUX-32-PIC-NEXT:    movl    lptr, [[EDX:%e.x]]
2521 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ([[EDX]],[[EAX]],4)
2522 ; LINUX-32-PIC-NEXT:    ret
2523
2524 ; LINUX-64-PIC: ind08:
2525 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
2526 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2527 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
2528 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2529 ; LINUX-64-PIC-NEXT:    ret
2530
2531 ; DARWIN-32-STATIC: _ind08:
2532 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2533 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2534 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[EDX:%e.x]]
2535 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], ([[EDX]],[[EAX]],4)
2536 ; DARWIN-32-STATIC-NEXT:        ret
2537
2538 ; DARWIN-32-DYNAMIC: _ind08:
2539 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2540 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2541 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[EDX:%e.x]]
2542 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
2543 ; DARWIN-32-DYNAMIC-NEXT:       ret
2544
2545 ; DARWIN-32-PIC: _ind08:
2546 ; DARWIN-32-PIC:        calll   L35$pb
2547 ; DARWIN-32-PIC-NEXT: L35$pb:
2548 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2549 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2550 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-L35$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2551 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L35$pb([[EAX]]), [[EAX:%e.x]]
2552 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
2553 ; DARWIN-32-PIC-NEXT:   ret
2554
2555 ; DARWIN-64-STATIC: _ind08:
2556 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
2557 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2558 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
2559 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2560 ; DARWIN-64-STATIC-NEXT:        ret
2561
2562 ; DARWIN-64-DYNAMIC: _ind08:
2563 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
2564 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2565 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
2566 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2567 ; DARWIN-64-DYNAMIC-NEXT:       ret
2568
2569 ; DARWIN-64-PIC: _ind08:
2570 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
2571 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2572 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
2573 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2574 ; DARWIN-64-PIC-NEXT:   ret
2575 }
2576
2577 define void @off00(i64 %i) nounwind {
2578 entry:
2579         %0 = add i64 %i, 16
2580         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
2581         %2 = load i32* %1, align 4
2582         %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
2583         store i32 %2, i32* %3, align 4
2584         ret void
2585 ; LINUX-64-STATIC: off00:
2586 ; LINUX-64-STATIC: movl    src+64(,%rdi,4), [[EAX:%e.x]]
2587 ; LINUX-64-STATIC: movl    [[EAX]], dst+64(,%rdi,4)
2588 ; LINUX-64-STATIC: ret
2589
2590 ; LINUX-32-STATIC: off00:
2591 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2592 ; LINUX-32-STATIC-NEXT:         movl    src+64(,[[EAX]],4), [[ECX:%e.x]]
2593 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], dst+64(,[[EAX]],4)
2594 ; LINUX-32-STATIC-NEXT:         ret
2595
2596 ; LINUX-32-PIC: off00:
2597 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2598 ; LINUX-32-PIC-NEXT:    movl    src+64(,[[EAX]],4), [[ECX:%e.x]]
2599 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], dst+64(,[[EAX]],4)
2600 ; LINUX-32-PIC-NEXT:    ret
2601
2602 ; LINUX-64-PIC: off00:
2603 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
2604 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2605 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
2606 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
2607 ; LINUX-64-PIC-NEXT:    ret
2608
2609 ; DARWIN-32-STATIC: _off00:
2610 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2611 ; DARWIN-32-STATIC-NEXT:        movl    _src+64(,[[EAX]],4), [[ECX:%e.x]]
2612 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _dst+64(,[[EAX]],4)
2613 ; DARWIN-32-STATIC-NEXT:        ret
2614
2615 ; DARWIN-32-DYNAMIC: _off00:
2616 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2617 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
2618 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2619 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[EDX:%e.x]]
2620 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2621 ; DARWIN-32-DYNAMIC-NEXT:       ret
2622
2623 ; DARWIN-32-PIC: _off00:
2624 ; DARWIN-32-PIC:        calll   L36$pb
2625 ; DARWIN-32-PIC-NEXT: L36$pb:
2626 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2627 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2628 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L36$pb([[EAX]]), [[EDX:%e.x]]
2629 ; DARWIN-32-PIC-NEXT:   movl    64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2630 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L36$pb([[EAX]]), [[EAX:%e.x]]
2631 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
2632 ; DARWIN-32-PIC-NEXT:   ret
2633
2634 ; DARWIN-64-STATIC: _off00:
2635 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2636 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2637 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2638 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
2639 ; DARWIN-64-STATIC-NEXT:        ret
2640
2641 ; DARWIN-64-DYNAMIC: _off00:
2642 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2643 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2644 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2645 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
2646 ; DARWIN-64-DYNAMIC-NEXT:       ret
2647
2648 ; DARWIN-64-PIC: _off00:
2649 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2650 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2651 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2652 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
2653 ; DARWIN-64-PIC-NEXT:   ret
2654 }
2655
2656 define void @oxf00(i64 %i) nounwind {
2657 entry:
2658         %0 = add i64 %i, 16
2659         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
2660         %2 = load i32* %1, align 4
2661         %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
2662         store i32 %2, i32* %3, align 4
2663         ret void
2664 ; LINUX-64-STATIC: oxf00:
2665 ; LINUX-64-STATIC: movl    xsrc+64(,%rdi,4), [[EAX:%e.x]]
2666 ; LINUX-64-STATIC: movl    [[EAX]], xdst+64(,%rdi,4)
2667 ; LINUX-64-STATIC: ret
2668
2669 ; LINUX-32-STATIC: oxf00:
2670 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2671 ; LINUX-32-STATIC-NEXT:         movl    xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2672 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], xdst+64(,[[EAX]],4)
2673 ; LINUX-32-STATIC-NEXT:         ret
2674
2675 ; LINUX-32-PIC: oxf00:
2676 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2677 ; LINUX-32-PIC-NEXT:    movl    xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2678 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], xdst+64(,[[EAX]],4)
2679 ; LINUX-32-PIC-NEXT:    ret
2680
2681 ; LINUX-64-PIC: oxf00:
2682 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2683 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2684 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2685 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
2686 ; LINUX-64-PIC-NEXT:    ret
2687
2688 ; DARWIN-32-STATIC: _oxf00:
2689 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2690 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2691 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _xdst+64(,[[EAX]],4)
2692 ; DARWIN-32-STATIC-NEXT:        ret
2693
2694 ; DARWIN-32-DYNAMIC: _oxf00:
2695 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2696 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
2697 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2698 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[EDX:%e.x]]
2699 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2700 ; DARWIN-32-DYNAMIC-NEXT:       ret
2701
2702 ; DARWIN-32-PIC: _oxf00:
2703 ; DARWIN-32-PIC:        calll   L37$pb
2704 ; DARWIN-32-PIC-NEXT: L37$pb:
2705 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2706 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2707 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L37$pb([[EAX]]), [[EDX:%e.x]]
2708 ; DARWIN-32-PIC-NEXT:   movl    64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2709 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L37$pb([[EAX]]), [[EAX:%e.x]]
2710 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
2711 ; DARWIN-32-PIC-NEXT:   ret
2712
2713 ; DARWIN-64-STATIC: _oxf00:
2714 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2715 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2716 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2717 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
2718 ; DARWIN-64-STATIC-NEXT:        ret
2719
2720 ; DARWIN-64-DYNAMIC: _oxf00:
2721 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2722 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2723 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2724 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
2725 ; DARWIN-64-DYNAMIC-NEXT:       ret
2726
2727 ; DARWIN-64-PIC: _oxf00:
2728 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2729 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2730 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2731 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
2732 ; DARWIN-64-PIC-NEXT:   ret
2733 }
2734
2735 define void @off01(i64 %i) nounwind {
2736 entry:
2737         %.sum = add i64 %i, 16
2738         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
2739         store i32* %0, i32** @ptr, align 8
2740         ret void
2741 ; LINUX-64-STATIC: off01:
2742 ; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), [[RAX:%r.x]]
2743 ; LINUX-64-STATIC: movq    [[RAX]], ptr
2744 ; LINUX-64-STATIC: ret
2745
2746 ; LINUX-32-STATIC: off01:
2747 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2748 ; LINUX-32-STATIC-NEXT:         leal    dst+64(,[[EAX]],4), [[EAX:%e.x]]
2749 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
2750 ; LINUX-32-STATIC-NEXT:         ret
2751
2752 ; LINUX-32-PIC: off01:
2753 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2754 ; LINUX-32-PIC-NEXT:    leal    dst+64(,[[EAX]],4), [[EAX:%e.x]]
2755 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
2756 ; LINUX-32-PIC-NEXT:    ret
2757
2758 ; LINUX-64-PIC: off01:
2759 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
2760 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2761 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2762 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
2763 ; LINUX-64-PIC-NEXT:    ret
2764
2765 ; DARWIN-32-STATIC: _off01:
2766 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2767 ; DARWIN-32-STATIC-NEXT:        leal    _dst+64(,[[EAX]],4), [[EAX:%e.x]]
2768 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
2769 ; DARWIN-32-STATIC-NEXT:        ret
2770
2771 ; DARWIN-32-DYNAMIC: _off01:
2772 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2773 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
2774 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), [[EAX:%e.x]]
2775 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
2776 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
2777 ; DARWIN-32-DYNAMIC-NEXT:       ret
2778
2779 ; DARWIN-32-PIC: _off01:
2780 ; DARWIN-32-PIC:        calll   L38$pb
2781 ; DARWIN-32-PIC-NEXT: L38$pb:
2782 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2783 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2784 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L38$pb([[EAX]]), [[EDX:%e.x]]
2785 ; DARWIN-32-PIC-NEXT:   leal    64([[EDX]],[[ECX]],4), [[ECX:%e.x]]
2786 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L38$pb([[EAX]]), [[EAX:%e.x]]
2787 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
2788 ; DARWIN-32-PIC-NEXT:   ret
2789
2790 ; DARWIN-64-STATIC: _off01:
2791 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2792 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2793 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2794 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
2795 ; DARWIN-64-STATIC-NEXT:        ret
2796
2797 ; DARWIN-64-DYNAMIC: _off01:
2798 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2799 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2800 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2801 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
2802 ; DARWIN-64-DYNAMIC-NEXT:       ret
2803
2804 ; DARWIN-64-PIC: _off01:
2805 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2806 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2807 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2808 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
2809 ; DARWIN-64-PIC-NEXT:   ret
2810 }
2811
2812 define void @oxf01(i64 %i) nounwind {
2813 entry:
2814         %.sum = add i64 %i, 16
2815         %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum
2816         store i32* %0, i32** @ptr, align 8
2817         ret void
2818 ; LINUX-64-STATIC: oxf01:
2819 ; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), [[RAX:%r.x]]
2820 ; LINUX-64-STATIC: movq    [[RAX]], ptr
2821 ; LINUX-64-STATIC: ret
2822
2823 ; LINUX-32-STATIC: oxf01:
2824 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2825 ; LINUX-32-STATIC-NEXT:         leal    xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2826 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
2827 ; LINUX-32-STATIC-NEXT:         ret
2828
2829 ; LINUX-32-PIC: oxf01:
2830 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2831 ; LINUX-32-PIC-NEXT:    leal    xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2832 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
2833 ; LINUX-32-PIC-NEXT:    ret
2834
2835 ; LINUX-64-PIC: oxf01:
2836 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2837 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2838 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2839 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
2840 ; LINUX-64-PIC-NEXT:    ret
2841
2842 ; DARWIN-32-STATIC: _oxf01:
2843 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2844 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2845 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
2846 ; DARWIN-32-STATIC-NEXT:        ret
2847
2848 ; DARWIN-32-DYNAMIC: _oxf01:
2849 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2850 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
2851 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), [[EAX:%e.x]]
2852 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
2853 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
2854 ; DARWIN-32-DYNAMIC-NEXT:       ret
2855
2856 ; DARWIN-32-PIC: _oxf01:
2857 ; DARWIN-32-PIC:        calll   L39$pb
2858 ; DARWIN-32-PIC-NEXT: L39$pb:
2859 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2860 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2861 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L39$pb([[EAX]]), [[EDX:%e.x]]
2862 ; DARWIN-32-PIC-NEXT:   leal    64([[EDX]],[[ECX]],4), [[ECX:%e.x]]
2863 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L39$pb([[EAX]]), [[EAX:%e.x]]
2864 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
2865 ; DARWIN-32-PIC-NEXT:   ret
2866
2867 ; DARWIN-64-STATIC: _oxf01:
2868 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2869 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2870 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2871 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
2872 ; DARWIN-64-STATIC-NEXT:        ret
2873
2874 ; DARWIN-64-DYNAMIC: _oxf01:
2875 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2876 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2877 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2878 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
2879 ; DARWIN-64-DYNAMIC-NEXT:       ret
2880
2881 ; DARWIN-64-PIC: _oxf01:
2882 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2883 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2884 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2885 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
2886 ; DARWIN-64-PIC-NEXT:   ret
2887 }
2888
2889 define void @off02(i64 %i) nounwind {
2890 entry:
2891         %0 = load i32** @ptr, align 8
2892         %1 = add i64 %i, 16
2893         %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
2894         %3 = load i32* %2, align 4
2895         %4 = getelementptr i32* %0, i64 %1
2896         store i32 %3, i32* %4, align 4
2897         ret void
2898 ; LINUX-64-STATIC: off02:
2899 ; LINUX-64-STATIC: movl    src+64(,%rdi,4), [[EAX:%e.x]]
2900 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
2901 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
2902 ; LINUX-64-STATIC: ret
2903
2904 ; LINUX-32-STATIC: off02:
2905 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2906 ; LINUX-32-STATIC-NEXT:         movl    src+64(,[[EAX]],4), [[ECX:%e.x]]
2907 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
2908 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2909 ; LINUX-32-STATIC-NEXT:         ret
2910
2911 ; LINUX-32-PIC: off02:
2912 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2913 ; LINUX-32-PIC-NEXT:    movl    src+64(,[[EAX]],4), [[ECX:%e.x]]
2914 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
2915 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2916 ; LINUX-32-PIC-NEXT:    ret
2917
2918 ; LINUX-64-PIC: off02:
2919 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
2920 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2921 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2922 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
2923 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
2924 ; LINUX-64-PIC-NEXT:    ret
2925
2926 ; DARWIN-32-STATIC: _off02:
2927 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2928 ; DARWIN-32-STATIC-NEXT:        movl    _src+64(,[[EAX]],4), [[ECX:%e.x]]
2929 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
2930 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2931 ; DARWIN-32-STATIC-NEXT:        ret
2932
2933 ; DARWIN-32-DYNAMIC: _off02:
2934 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2935 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
2936 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2937 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2938 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
2939 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2940 ; DARWIN-32-DYNAMIC-NEXT:       ret
2941
2942 ; DARWIN-32-PIC: _off02:
2943 ; DARWIN-32-PIC:        calll   L40$pb
2944 ; DARWIN-32-PIC-NEXT: L40$pb:
2945 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2946 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2947 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L40$pb([[EAX]]), [[EDX:%e.x]]
2948 ; DARWIN-32-PIC-NEXT:   movl    64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2949 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L40$pb([[EAX]]), [[EAX:%e.x]]
2950 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
2951 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
2952 ; DARWIN-32-PIC-NEXT:   ret
2953
2954 ; DARWIN-64-STATIC: _off02:
2955 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2956 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2957 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2958 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
2959 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
2960 ; DARWIN-64-STATIC-NEXT:        ret
2961
2962 ; DARWIN-64-DYNAMIC: _off02:
2963 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2964 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2965 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2966 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
2967 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
2968 ; DARWIN-64-DYNAMIC-NEXT:       ret
2969
2970 ; DARWIN-64-PIC: _off02:
2971 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2972 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2973 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2974 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
2975 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
2976 ; DARWIN-64-PIC-NEXT:   ret
2977 }
2978
2979 define void @oxf02(i64 %i) nounwind {
2980 entry:
2981         %0 = load i32** @ptr, align 8
2982         %1 = add i64 %i, 16
2983         %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1
2984         %3 = load i32* %2, align 4
2985         %4 = getelementptr i32* %0, i64 %1
2986         store i32 %3, i32* %4, align 4
2987         ret void
2988 ; LINUX-64-STATIC: oxf02:
2989 ; LINUX-64-STATIC: movl    xsrc+64(,%rdi,4), [[EAX:%e.x]]
2990 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
2991 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
2992 ; LINUX-64-STATIC: ret
2993
2994 ; LINUX-32-STATIC: oxf02:
2995 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2996 ; LINUX-32-STATIC-NEXT:         movl    xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2997 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
2998 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2999 ; LINUX-32-STATIC-NEXT:         ret
3000
3001 ; LINUX-32-PIC: oxf02:
3002 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3003 ; LINUX-32-PIC-NEXT:    movl    xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3004 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
3005 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3006 ; LINUX-32-PIC-NEXT:    ret
3007
3008 ; LINUX-64-PIC: oxf02:
3009 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3010 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3011 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3012 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
3013 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3014 ; LINUX-64-PIC-NEXT:    ret
3015
3016 ; DARWIN-32-STATIC: _oxf02:
3017 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3018 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3019 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
3020 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3021 ; DARWIN-32-STATIC-NEXT:        ret
3022
3023 ; DARWIN-32-DYNAMIC: _oxf02:
3024 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3025 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
3026 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
3027 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
3028 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
3029 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3030 ; DARWIN-32-DYNAMIC-NEXT:       ret
3031
3032 ; DARWIN-32-PIC: _oxf02:
3033 ; DARWIN-32-PIC:        calll   L41$pb
3034 ; DARWIN-32-PIC-NEXT: L41$pb:
3035 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3036 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3037 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L41$pb([[EAX]]), [[EDX:%e.x]]
3038 ; DARWIN-32-PIC-NEXT:   movl    64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
3039 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L41$pb([[EAX]]), [[EAX:%e.x]]
3040 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
3041 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
3042 ; DARWIN-32-PIC-NEXT:   ret
3043
3044 ; DARWIN-64-STATIC: _oxf02:
3045 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3046 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3047 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3048 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
3049 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3050 ; DARWIN-64-STATIC-NEXT:        ret
3051
3052 ; DARWIN-64-DYNAMIC: _oxf02:
3053 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3054 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3055 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3056 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
3057 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3058 ; DARWIN-64-DYNAMIC-NEXT:       ret
3059
3060 ; DARWIN-64-PIC: _oxf02:
3061 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3062 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3063 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3064 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
3065 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3066 ; DARWIN-64-PIC-NEXT:   ret
3067 }
3068
3069 define void @off03(i64 %i) nounwind {
3070 entry:
3071         %0 = add i64 %i, 16
3072         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
3073         %2 = load i32* %1, align 4
3074         %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
3075         store i32 %2, i32* %3, align 4
3076         ret void
3077 ; LINUX-64-STATIC: off03:
3078 ; LINUX-64-STATIC: movl    dsrc+64(,%rdi,4), [[EAX:%e.x]]
3079 ; LINUX-64-STATIC: movl    [[EAX]], ddst+64(,%rdi,4)
3080 ; LINUX-64-STATIC: ret
3081
3082 ; LINUX-32-STATIC: off03:
3083 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3084 ; LINUX-32-STATIC-NEXT:         movl    dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3085 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ddst+64(,[[EAX]],4)
3086 ; LINUX-32-STATIC-NEXT:         ret
3087
3088 ; LINUX-32-PIC: off03:
3089 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3090 ; LINUX-32-PIC-NEXT:    movl    dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3091 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ddst+64(,[[EAX]],4)
3092 ; LINUX-32-PIC-NEXT:    ret
3093
3094 ; LINUX-64-PIC: off03:
3095 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3096 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3097 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
3098 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3099 ; LINUX-64-PIC-NEXT:    ret
3100
3101 ; DARWIN-32-STATIC: _off03:
3102 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3103 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3104 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ddst+64(,[[EAX]],4)
3105 ; DARWIN-32-STATIC-NEXT:        ret
3106
3107 ; DARWIN-32-DYNAMIC: _off03:
3108 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3109 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3110 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ddst+64(,[[EAX]],4)
3111 ; DARWIN-32-DYNAMIC-NEXT:       ret
3112
3113 ; DARWIN-32-PIC: _off03:
3114 ; DARWIN-32-PIC:        calll   L42$pb
3115 ; DARWIN-32-PIC-NEXT: L42$pb:
3116 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3117 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3118 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L42$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3119 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], (_ddst-L42$pb)+64([[EAX]],[[ECX]],4)
3120 ; DARWIN-32-PIC-NEXT:   ret
3121
3122 ; DARWIN-64-STATIC: _off03:
3123 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
3124 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3125 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), [[RCX:%r.x]]
3126 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3127 ; DARWIN-64-STATIC-NEXT:        ret
3128
3129 ; DARWIN-64-DYNAMIC: _off03:
3130 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
3131 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3132 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), [[RCX:%r.x]]
3133 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3134 ; DARWIN-64-DYNAMIC-NEXT:       ret
3135
3136 ; DARWIN-64-PIC: _off03:
3137 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
3138 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3139 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), [[RCX:%r.x]]
3140 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3141 ; DARWIN-64-PIC-NEXT:   ret
3142 }
3143
3144 define void @off04(i64 %i) nounwind {
3145 entry:
3146         %.sum = add i64 %i, 16
3147         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
3148         store i32* %0, i32** @dptr, align 8
3149         ret void
3150 ; LINUX-64-STATIC: off04:
3151 ; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), [[RAX:%r.x]]
3152 ; LINUX-64-STATIC: movq    [[RAX]], dptr
3153 ; LINUX-64-STATIC: ret
3154
3155 ; LINUX-32-STATIC: off04:
3156 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3157 ; LINUX-32-STATIC-NEXT:         leal    ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3158 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dptr
3159 ; LINUX-32-STATIC-NEXT:         ret
3160
3161 ; LINUX-32-PIC: off04:
3162 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3163 ; LINUX-32-PIC-NEXT:    leal    ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3164 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dptr
3165 ; LINUX-32-PIC-NEXT:    ret
3166
3167 ; LINUX-64-PIC: off04:
3168 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
3169 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3170 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3171 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
3172 ; LINUX-64-PIC-NEXT:    ret
3173
3174 ; DARWIN-32-STATIC: _off04:
3175 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3176 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3177 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dptr
3178 ; DARWIN-32-STATIC-NEXT:        ret
3179
3180 ; DARWIN-32-DYNAMIC: _off04:
3181 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3182 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3183 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _dptr
3184 ; DARWIN-32-DYNAMIC-NEXT:       ret
3185
3186 ; DARWIN-32-PIC: _off04:
3187 ; DARWIN-32-PIC:        calll   L43$pb
3188 ; DARWIN-32-PIC-NEXT: L43$pb:
3189 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3190 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3191 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L43$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]]
3192 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L43$pb([[EAX]])
3193 ; DARWIN-32-PIC-NEXT:   ret
3194
3195 ; DARWIN-64-STATIC: _off04:
3196 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
3197 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3198 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
3199 ; DARWIN-64-STATIC-NEXT:        ret
3200
3201 ; DARWIN-64-DYNAMIC: _off04:
3202 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
3203 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3204 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
3205 ; DARWIN-64-DYNAMIC-NEXT:       ret
3206
3207 ; DARWIN-64-PIC: _off04:
3208 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
3209 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3210 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
3211 ; DARWIN-64-PIC-NEXT:   ret
3212 }
3213
3214 define void @off05(i64 %i) nounwind {
3215 entry:
3216         %0 = load i32** @dptr, align 8
3217         %1 = add i64 %i, 16
3218         %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
3219         %3 = load i32* %2, align 4
3220         %4 = getelementptr i32* %0, i64 %1
3221         store i32 %3, i32* %4, align 4
3222         ret void
3223 ; LINUX-64-STATIC: off05:
3224 ; LINUX-64-STATIC: movl    dsrc+64(,%rdi,4), [[EAX:%e.x]]
3225 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
3226 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
3227 ; LINUX-64-STATIC: ret
3228
3229 ; LINUX-32-STATIC: off05:
3230 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3231 ; LINUX-32-STATIC-NEXT:         movl    dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3232 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[EDX:%e.x]]
3233 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3234 ; LINUX-32-STATIC-NEXT:         ret
3235
3236 ; LINUX-32-PIC: off05:
3237 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3238 ; LINUX-32-PIC-NEXT:    movl    dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3239 ; LINUX-32-PIC-NEXT:    movl    dptr, [[EDX:%e.x]]
3240 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3241 ; LINUX-32-PIC-NEXT:    ret
3242
3243 ; LINUX-64-PIC: off05:
3244 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3245 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3246 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3247 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
3248 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3249 ; LINUX-64-PIC-NEXT:    ret
3250
3251 ; DARWIN-32-STATIC: _off05:
3252 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3253 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3254 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[EDX:%e.x]]
3255 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3256 ; DARWIN-32-STATIC-NEXT:        ret
3257
3258 ; DARWIN-32-DYNAMIC: _off05:
3259 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3260 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3261 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[EDX:%e.x]]
3262 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3263 ; DARWIN-32-DYNAMIC-NEXT:       ret
3264
3265 ; DARWIN-32-PIC: _off05:
3266 ; DARWIN-32-PIC:        calll   L44$pb
3267 ; DARWIN-32-PIC-NEXT: L44$pb:
3268 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3269 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3270 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L44$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3271 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L44$pb([[EAX]]), [[EAX:%e.x]]
3272 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
3273 ; DARWIN-32-PIC-NEXT:   ret
3274
3275 ; DARWIN-64-STATIC: _off05:
3276 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
3277 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3278 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
3279 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3280 ; DARWIN-64-STATIC-NEXT:        ret
3281
3282 ; DARWIN-64-DYNAMIC: _off05:
3283 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
3284 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3285 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
3286 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3287 ; DARWIN-64-DYNAMIC-NEXT:       ret
3288
3289 ; DARWIN-64-PIC: _off05:
3290 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
3291 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3292 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
3293 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3294 ; DARWIN-64-PIC-NEXT:   ret
3295 }
3296
3297 define void @off06(i64 %i) nounwind {
3298 entry:
3299         %0 = add i64 %i, 16
3300         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
3301         %2 = load i32* %1, align 4
3302         %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
3303         store i32 %2, i32* %3, align 4
3304         ret void
3305 ; LINUX-64-STATIC: off06:
3306 ; LINUX-64-STATIC: movl    lsrc+64(,%rdi,4), [[EAX:%e.x]]
3307 ; LINUX-64-STATIC: movl    [[EAX]], ldst+64(,%rdi,4)
3308 ; LINUX-64-STATIC: ret
3309
3310 ; LINUX-32-STATIC: off06:
3311 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3312 ; LINUX-32-STATIC-NEXT:         movl    lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3313 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ldst+64(,[[EAX]],4)
3314 ; LINUX-32-STATIC-NEXT:         ret
3315
3316 ; LINUX-32-PIC: off06:
3317 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3318 ; LINUX-32-PIC-NEXT:    movl    lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3319 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ldst+64(,[[EAX]],4)
3320 ; LINUX-32-PIC-NEXT:    ret
3321
3322 ; LINUX-64-PIC: off06:
3323 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
3324 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3325 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), [[RCX:%r.x]]
3326 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3327 ; LINUX-64-PIC-NEXT:    ret
3328
3329 ; DARWIN-32-STATIC: _off06:
3330 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3331 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3332 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ldst+64(,[[EAX]],4)
3333 ; DARWIN-32-STATIC-NEXT:        ret
3334
3335 ; DARWIN-32-DYNAMIC: _off06:
3336 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3337 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3338 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ldst+64(,[[EAX]],4)
3339 ; DARWIN-32-DYNAMIC-NEXT:       ret
3340
3341 ; DARWIN-32-PIC: _off06:
3342 ; DARWIN-32-PIC:        calll   L45$pb
3343 ; DARWIN-32-PIC-NEXT: L45$pb:
3344 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3345 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3346 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L45$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3347 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], (_ldst-L45$pb)+64([[EAX]],[[ECX]],4)
3348 ; DARWIN-32-PIC-NEXT:   ret
3349
3350 ; DARWIN-64-STATIC: _off06:
3351 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
3352 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3353 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), [[RCX:%r.x]]
3354 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3355 ; DARWIN-64-STATIC-NEXT:        ret
3356
3357 ; DARWIN-64-DYNAMIC: _off06:
3358 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
3359 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3360 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), [[RCX:%r.x]]
3361 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3362 ; DARWIN-64-DYNAMIC-NEXT:       ret
3363
3364 ; DARWIN-64-PIC: _off06:
3365 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
3366 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3367 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), [[RCX:%r.x]]
3368 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3369 ; DARWIN-64-PIC-NEXT:   ret
3370 }
3371
3372 define void @off07(i64 %i) nounwind {
3373 entry:
3374         %.sum = add i64 %i, 16
3375         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
3376         store i32* %0, i32** @lptr, align 8
3377         ret void
3378 ; LINUX-64-STATIC: off07:
3379 ; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), [[RAX:%r.x]]
3380 ; LINUX-64-STATIC: movq    [[RAX]], lptr
3381 ; LINUX-64-STATIC: ret
3382
3383 ; LINUX-32-STATIC: off07:
3384 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3385 ; LINUX-32-STATIC-NEXT:         leal    ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3386 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], lptr
3387 ; LINUX-32-STATIC-NEXT:         ret
3388
3389 ; LINUX-32-PIC: off07:
3390 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3391 ; LINUX-32-PIC-NEXT:    leal    ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3392 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], lptr
3393 ; LINUX-32-PIC-NEXT:    ret
3394
3395 ; LINUX-64-PIC: off07:
3396 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
3397 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3398 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
3399 ; LINUX-64-PIC-NEXT:    ret
3400
3401 ; DARWIN-32-STATIC: _off07:
3402 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3403 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3404 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _lptr
3405 ; DARWIN-32-STATIC-NEXT:        ret
3406
3407 ; DARWIN-32-DYNAMIC: _off07:
3408 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3409 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3410 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _lptr
3411 ; DARWIN-32-DYNAMIC-NEXT:       ret
3412
3413 ; DARWIN-32-PIC: _off07:
3414 ; DARWIN-32-PIC:        calll   L46$pb
3415 ; DARWIN-32-PIC-NEXT: L46$pb:
3416 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3417 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3418 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L46$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]]
3419 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L46$pb([[EAX]])
3420 ; DARWIN-32-PIC-NEXT:   ret
3421
3422 ; DARWIN-64-STATIC: _off07:
3423 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
3424 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3425 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
3426 ; DARWIN-64-STATIC-NEXT:        ret
3427
3428 ; DARWIN-64-DYNAMIC: _off07:
3429 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
3430 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3431 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
3432 ; DARWIN-64-DYNAMIC-NEXT:       ret
3433
3434 ; DARWIN-64-PIC: _off07:
3435 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
3436 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3437 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
3438 ; DARWIN-64-PIC-NEXT:   ret
3439 }
3440
3441 define void @off08(i64 %i) nounwind {
3442 entry:
3443         %0 = load i32** @lptr, align 8
3444         %1 = add i64 %i, 16
3445         %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
3446         %3 = load i32* %2, align 4
3447         %4 = getelementptr i32* %0, i64 %1
3448         store i32 %3, i32* %4, align 4
3449         ret void
3450 ; LINUX-64-STATIC: off08:
3451 ; LINUX-64-STATIC: movl    lsrc+64(,%rdi,4), [[EAX:%e.x]]
3452 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
3453 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
3454 ; LINUX-64-STATIC: ret
3455
3456 ; LINUX-32-STATIC: off08:
3457 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3458 ; LINUX-32-STATIC-NEXT:         movl    lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3459 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[EDX:%e.x]]
3460 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3461 ; LINUX-32-STATIC-NEXT:         ret
3462
3463 ; LINUX-32-PIC: off08:
3464 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3465 ; LINUX-32-PIC-NEXT:    movl    lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3466 ; LINUX-32-PIC-NEXT:    movl    lptr, [[EDX:%e.x]]
3467 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3468 ; LINUX-32-PIC-NEXT:    ret
3469
3470 ; LINUX-64-PIC: off08:
3471 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
3472 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3473 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
3474 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3475 ; LINUX-64-PIC-NEXT:    ret
3476
3477 ; DARWIN-32-STATIC: _off08:
3478 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3479 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3480 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[EDX:%e.x]]
3481 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3482 ; DARWIN-32-STATIC-NEXT:        ret
3483
3484 ; DARWIN-32-DYNAMIC: _off08:
3485 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3486 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3487 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[EDX:%e.x]]
3488 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3489 ; DARWIN-32-DYNAMIC-NEXT:       ret
3490
3491 ; DARWIN-32-PIC: _off08:
3492 ; DARWIN-32-PIC:        calll   L47$pb
3493 ; DARWIN-32-PIC-NEXT: L47$pb:
3494 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3495 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3496 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L47$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3497 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L47$pb([[EAX]]), [[EAX:%e.x]]
3498 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
3499 ; DARWIN-32-PIC-NEXT:   ret
3500
3501 ; DARWIN-64-STATIC: _off08:
3502 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
3503 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3504 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
3505 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3506 ; DARWIN-64-STATIC-NEXT:        ret
3507
3508 ; DARWIN-64-DYNAMIC: _off08:
3509 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
3510 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3511 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
3512 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3513 ; DARWIN-64-DYNAMIC-NEXT:       ret
3514
3515 ; DARWIN-64-PIC: _off08:
3516 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
3517 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3518 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
3519 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3520 ; DARWIN-64-PIC-NEXT:   ret
3521 }
3522
3523 define void @moo00(i64 %i) nounwind {
3524 entry:
3525         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3526         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4
3527         ret void
3528 ; LINUX-64-STATIC: moo00:
3529 ; LINUX-64-STATIC: movl    src+262144(%rip), [[EAX:%e.x]]
3530 ; LINUX-64-STATIC: movl    [[EAX]], dst+262144(%rip)
3531 ; LINUX-64-STATIC: ret
3532
3533 ; LINUX-32-STATIC: moo00:
3534 ; LINUX-32-STATIC:      movl    src+262144, [[EAX:%e.x]]
3535 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dst+262144
3536 ; LINUX-32-STATIC-NEXT:         ret
3537
3538 ; LINUX-32-PIC: moo00:
3539 ; LINUX-32-PIC:         movl    src+262144, [[EAX:%e.x]]
3540 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dst+262144
3541 ; LINUX-32-PIC-NEXT:    ret
3542
3543 ; LINUX-64-PIC: moo00:
3544 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
3545 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]]), [[EAX:%e.x]]
3546 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
3547 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
3548 ; LINUX-64-PIC-NEXT:    ret
3549
3550 ; DARWIN-32-STATIC: _moo00:
3551 ; DARWIN-32-STATIC:     movl    _src+262144, [[EAX:%e.x]]
3552 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dst+262144
3553 ; DARWIN-32-STATIC-NEXT:        ret
3554
3555 ; DARWIN-32-DYNAMIC: _moo00:
3556 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
3557 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144([[EAX]]), [[EAX:%e.x]]
3558 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
3559 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[ECX]])
3560 ; DARWIN-32-DYNAMIC-NEXT:       ret
3561
3562 ; DARWIN-32-PIC: _moo00:
3563 ; DARWIN-32-PIC:        calll   L48$pb
3564 ; DARWIN-32-PIC-NEXT: L48$pb:
3565 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3566 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L48$pb([[EAX]]), [[ECX:%e.x]]
3567 ; DARWIN-32-PIC-NEXT:   movl    262144([[ECX]]), [[ECX:%e.x]]
3568 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L48$pb([[EAX]]), [[EAX:%e.x]]
3569 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 262144([[EAX]])
3570 ; DARWIN-32-PIC-NEXT:   ret
3571
3572 ; DARWIN-64-STATIC: _moo00:
3573 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3574 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]]), [[EAX:%e.x]]
3575 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3576 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]])
3577 ; DARWIN-64-STATIC-NEXT:        ret
3578
3579 ; DARWIN-64-DYNAMIC: _moo00:
3580 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3581 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]]), [[EAX:%e.x]]
3582 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3583 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]])
3584 ; DARWIN-64-DYNAMIC-NEXT:       ret
3585
3586 ; DARWIN-64-PIC: _moo00:
3587 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3588 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]]), [[EAX:%e.x]]
3589 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3590 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]])
3591 ; DARWIN-64-PIC-NEXT:   ret
3592 }
3593
3594 define void @moo01(i64 %i) nounwind {
3595 entry:
3596         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
3597         ret void
3598 ; LINUX-64-STATIC: moo01:
3599 ; LINUX-64-STATIC: movq    $dst+262144, ptr(%rip)
3600 ; LINUX-64-STATIC: ret
3601
3602 ; LINUX-32-STATIC: moo01:
3603 ; LINUX-32-STATIC:      movl    $dst+262144, ptr
3604 ; LINUX-32-STATIC-NEXT:         ret
3605
3606 ; LINUX-32-PIC: moo01:
3607 ; LINUX-32-PIC:         movl    $dst+262144, ptr
3608 ; LINUX-32-PIC-NEXT:    ret
3609
3610 ; LINUX-64-PIC: moo01:
3611 ; LINUX-64-PIC:         movl    $262144, [[EAX:%e.x]]
3612 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
3613 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3614 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
3615 ; LINUX-64-PIC-NEXT:    ret
3616
3617 ; DARWIN-32-STATIC: _moo01:
3618 ; DARWIN-32-STATIC:     movl    $_dst+262144, _ptr
3619 ; DARWIN-32-STATIC-NEXT:        ret
3620
3621 ; DARWIN-32-DYNAMIC: _moo01:
3622 ; DARWIN-32-DYNAMIC:    movl    $262144, [[EAX:%e.x]]
3623 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, [[EAX:%e.x]]
3624 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
3625 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
3626 ; DARWIN-32-DYNAMIC-NEXT:       ret
3627
3628 ; DARWIN-32-PIC: _moo01:
3629 ; DARWIN-32-PIC:        calll   L49$pb
3630 ; DARWIN-32-PIC-NEXT: L49$pb:
3631 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3632 ; DARWIN-32-PIC-NEXT:   movl    $262144, [[ECX:%e.x]]
3633 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-L49$pb([[EAX]]), [[ECX:%e.x]]
3634 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L49$pb([[EAX]]), [[EAX:%e.x]]
3635 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
3636 ; DARWIN-32-PIC-NEXT:   ret
3637
3638 ; DARWIN-64-STATIC: _moo01:
3639 ; DARWIN-64-STATIC:     movl    $262144, [[EAX:%e.x]]
3640 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3641 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3642 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
3643 ; DARWIN-64-STATIC-NEXT:        ret
3644
3645 ; DARWIN-64-DYNAMIC: _moo01:
3646 ; DARWIN-64-DYNAMIC:    movl    $262144, [[EAX:%e.x]]
3647 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3648 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3649 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
3650 ; DARWIN-64-DYNAMIC-NEXT:       ret
3651
3652 ; DARWIN-64-PIC: _moo01:
3653 ; DARWIN-64-PIC:        movl    $262144, [[EAX:%e.x]]
3654 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3655 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3656 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
3657 ; DARWIN-64-PIC-NEXT:   ret
3658 }
3659
3660 define void @moo02(i64 %i) nounwind {
3661 entry:
3662         %0 = load i32** @ptr, align 8
3663         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3664         %2 = getelementptr i32* %0, i64 65536
3665         store i32 %1, i32* %2, align 4
3666         ret void
3667 ; LINUX-64-STATIC: moo02:
3668 ; LINUX-64-STATIC: movl    src+262144(%rip), [[EAX:%e.x]]
3669 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
3670 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
3671 ; LINUX-64-STATIC: ret
3672
3673 ; LINUX-32-STATIC: moo02:
3674 ; LINUX-32-STATIC:      movl    src+262144, [[EAX:%e.x]]
3675 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
3676 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 262144([[ECX]])
3677 ; LINUX-32-STATIC-NEXT:         ret
3678
3679 ; LINUX-32-PIC: moo02:
3680 ; LINUX-32-PIC:         movl    src+262144, [[EAX:%e.x]]
3681 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
3682 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 262144([[ECX]])
3683 ; LINUX-32-PIC-NEXT:    ret
3684
3685 ; LINUX-64-PIC: moo02:
3686 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
3687 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]]), [[EAX:%e.x]]
3688 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3689 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
3690 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
3691 ; LINUX-64-PIC-NEXT:    ret
3692
3693 ; DARWIN-32-STATIC: _moo02:
3694 ; DARWIN-32-STATIC:     movl    _src+262144, [[EAX:%e.x]]
3695 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
3696 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 262144([[ECX]])
3697 ; DARWIN-32-STATIC-NEXT:        ret
3698
3699 ; DARWIN-32-DYNAMIC: _moo02:
3700 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
3701 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144([[EAX]]), [[EAX:%e.x]]
3702 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
3703 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
3704 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[ECX]])
3705 ; DARWIN-32-DYNAMIC-NEXT:       ret
3706
3707 ; DARWIN-32-PIC: _moo02:
3708 ; DARWIN-32-PIC:        calll   L50$pb
3709 ; DARWIN-32-PIC-NEXT: L50$pb:
3710 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3711 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L50$pb([[EAX]]), [[ECX:%e.x]]
3712 ; DARWIN-32-PIC-NEXT:   movl    262144([[ECX]]), [[ECX:%e.x]]
3713 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L50$pb([[EAX]]), [[EAX:%e.x]]
3714 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
3715 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 262144([[EAX]])
3716 ; DARWIN-32-PIC-NEXT:   ret
3717
3718 ; DARWIN-64-STATIC: _moo02:
3719 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3720 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]]), [[EAX:%e.x]]
3721 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3722 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
3723 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]])
3724 ; DARWIN-64-STATIC-NEXT:        ret
3725
3726 ; DARWIN-64-DYNAMIC: _moo02:
3727 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3728 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]]), [[EAX:%e.x]]
3729 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3730 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
3731 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]])
3732 ; DARWIN-64-DYNAMIC-NEXT:       ret
3733
3734 ; DARWIN-64-PIC: _moo02:
3735 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3736 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]]), [[EAX:%e.x]]
3737 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3738 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
3739 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]])
3740 ; DARWIN-64-PIC-NEXT:   ret
3741 }
3742
3743 define void @moo03(i64 %i) nounwind {
3744 entry:
3745         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3746         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32
3747         ret void
3748 ; LINUX-64-STATIC: moo03:
3749 ; LINUX-64-STATIC: movl    dsrc+262144(%rip), [[EAX:%e.x]]
3750 ; LINUX-64-STATIC: movl    [[EAX]], ddst+262144(%rip)
3751 ; LINUX-64-STATIC: ret
3752
3753 ; LINUX-32-STATIC: moo03:
3754 ; LINUX-32-STATIC:      movl    dsrc+262144, [[EAX:%e.x]]
3755 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ddst+262144
3756 ; LINUX-32-STATIC-NEXT:         ret
3757
3758 ; LINUX-32-PIC: moo03:
3759 ; LINUX-32-PIC:         movl    dsrc+262144, [[EAX:%e.x]]
3760 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ddst+262144
3761 ; LINUX-32-PIC-NEXT:    ret
3762
3763 ; LINUX-64-PIC: moo03:
3764 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3765 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]]), [[EAX:%e.x]]
3766 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
3767 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
3768 ; LINUX-64-PIC-NEXT:    ret
3769
3770 ; DARWIN-32-STATIC: _moo03:
3771 ; DARWIN-32-STATIC:     movl    _dsrc+262144, [[EAX:%e.x]]
3772 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ddst+262144
3773 ; DARWIN-32-STATIC-NEXT:        ret
3774
3775 ; DARWIN-32-DYNAMIC: _moo03:
3776 ; DARWIN-32-DYNAMIC:    movl    _dsrc+262144, [[EAX:%e.x]]
3777 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ddst+262144
3778 ; DARWIN-32-DYNAMIC-NEXT:       ret
3779
3780 ; DARWIN-32-PIC: _moo03:
3781 ; DARWIN-32-PIC:        calll   L51$pb
3782 ; DARWIN-32-PIC-NEXT: L51$pb:
3783 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3784 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L51$pb)+262144([[EAX]]), [[ECX:%e.x]]
3785 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], (_ddst-L51$pb)+262144([[EAX]])
3786 ; DARWIN-32-PIC-NEXT:   ret
3787
3788 ; DARWIN-64-STATIC: _moo03:
3789 ; DARWIN-64-STATIC:     movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3790 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ddst+262144(%rip)
3791 ; DARWIN-64-STATIC-NEXT:        ret
3792
3793 ; DARWIN-64-DYNAMIC: _moo03:
3794 ; DARWIN-64-DYNAMIC:    movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3795 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ddst+262144(%rip)
3796 ; DARWIN-64-DYNAMIC-NEXT:       ret
3797
3798 ; DARWIN-64-PIC: _moo03:
3799 ; DARWIN-64-PIC:        movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3800 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ddst+262144(%rip)
3801 ; DARWIN-64-PIC-NEXT:   ret
3802 }
3803
3804 define void @moo04(i64 %i) nounwind {
3805 entry:
3806         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
3807         ret void
3808 ; LINUX-64-STATIC: moo04:
3809 ; LINUX-64-STATIC: movq    $ddst+262144, dptr
3810 ; LINUX-64-STATIC: ret
3811
3812 ; LINUX-32-STATIC: moo04:
3813 ; LINUX-32-STATIC:      movl    $ddst+262144, dptr
3814 ; LINUX-32-STATIC-NEXT:         ret
3815
3816 ; LINUX-32-PIC: moo04:
3817 ; LINUX-32-PIC:         movl    $ddst+262144, dptr
3818 ; LINUX-32-PIC-NEXT:    ret
3819
3820 ; LINUX-64-PIC: moo04:
3821 ; LINUX-64-PIC:         movl    $262144, [[EAX:%e.x]]
3822 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
3823 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3824 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
3825 ; LINUX-64-PIC-NEXT:    ret
3826
3827 ; DARWIN-32-STATIC: _moo04:
3828 ; DARWIN-32-STATIC:     movl    $_ddst+262144, _dptr
3829 ; DARWIN-32-STATIC-NEXT:        ret
3830
3831 ; DARWIN-32-DYNAMIC: _moo04:
3832 ; DARWIN-32-DYNAMIC:    movl    $_ddst+262144, _dptr
3833 ; DARWIN-32-DYNAMIC-NEXT:       ret
3834
3835 ; DARWIN-32-PIC: _moo04:
3836 ; DARWIN-32-PIC:        calll   L52$pb
3837 ; DARWIN-32-PIC-NEXT: L52$pb:
3838 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3839 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L52$pb)+262144([[EAX]]), [[ECX:%e.x]]
3840 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L52$pb([[EAX]])
3841 ; DARWIN-32-PIC-NEXT:   ret
3842
3843 ; DARWIN-64-STATIC: _moo04:
3844 ; DARWIN-64-STATIC:     leaq    _ddst+262144(%rip), [[RAX:%r.x]]
3845 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
3846 ; DARWIN-64-STATIC-NEXT:        ret
3847
3848 ; DARWIN-64-DYNAMIC: _moo04:
3849 ; DARWIN-64-DYNAMIC:    leaq    _ddst+262144(%rip), [[RAX:%r.x]]
3850 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
3851 ; DARWIN-64-DYNAMIC-NEXT:       ret
3852
3853 ; DARWIN-64-PIC: _moo04:
3854 ; DARWIN-64-PIC:        leaq    _ddst+262144(%rip), [[RAX:%r.x]]
3855 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
3856 ; DARWIN-64-PIC-NEXT:   ret
3857 }
3858
3859 define void @moo05(i64 %i) nounwind {
3860 entry:
3861         %0 = load i32** @dptr, align 8
3862         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3863         %2 = getelementptr i32* %0, i64 65536
3864         store i32 %1, i32* %2, align 4
3865         ret void
3866 ; LINUX-64-STATIC: moo05:
3867 ; LINUX-64-STATIC: movl    dsrc+262144(%rip), [[EAX:%e.x]]
3868 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
3869 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
3870 ; LINUX-64-STATIC: ret
3871
3872 ; LINUX-32-STATIC: moo05:
3873 ; LINUX-32-STATIC:      movl    dsrc+262144, [[EAX:%e.x]]
3874 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
3875 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 262144([[ECX]])
3876 ; LINUX-32-STATIC-NEXT:         ret
3877
3878 ; LINUX-32-PIC: moo05:
3879 ; LINUX-32-PIC:         movl    dsrc+262144, [[EAX:%e.x]]
3880 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
3881 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 262144([[ECX]])
3882 ; LINUX-32-PIC-NEXT:    ret
3883
3884 ; LINUX-64-PIC: moo05:
3885 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3886 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]]), [[EAX:%e.x]]
3887 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3888 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
3889 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
3890 ; LINUX-64-PIC-NEXT:    ret
3891
3892 ; DARWIN-32-STATIC: _moo05:
3893 ; DARWIN-32-STATIC:     movl    _dsrc+262144, [[EAX:%e.x]]
3894 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
3895 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 262144([[ECX]])
3896 ; DARWIN-32-STATIC-NEXT:        ret
3897
3898 ; DARWIN-32-DYNAMIC: _moo05:
3899 ; DARWIN-32-DYNAMIC:    movl    _dsrc+262144, [[EAX:%e.x]]
3900 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
3901 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[ECX]])
3902 ; DARWIN-32-DYNAMIC-NEXT:       ret
3903
3904 ; DARWIN-32-PIC: _moo05:
3905 ; DARWIN-32-PIC:        calll   L53$pb
3906 ; DARWIN-32-PIC-NEXT: L53$pb:
3907 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3908 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L53$pb)+262144([[EAX]]), [[ECX:%e.x]]
3909 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L53$pb([[EAX]]), [[EAX:%e.x]]
3910 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 262144([[EAX]])
3911 ; DARWIN-32-PIC-NEXT:   ret
3912
3913 ; DARWIN-64-STATIC: _moo05:
3914 ; DARWIN-64-STATIC:     movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3915 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
3916 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]])
3917 ; DARWIN-64-STATIC-NEXT:        ret
3918
3919 ; DARWIN-64-DYNAMIC: _moo05:
3920 ; DARWIN-64-DYNAMIC:    movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3921 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
3922 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]])
3923 ; DARWIN-64-DYNAMIC-NEXT:       ret
3924
3925 ; DARWIN-64-PIC: _moo05:
3926 ; DARWIN-64-PIC:        movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3927 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
3928 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]])
3929 ; DARWIN-64-PIC-NEXT:   ret
3930 }
3931
3932 define void @moo06(i64 %i) nounwind {
3933 entry:
3934         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
3935         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4
3936         ret void
3937 ; LINUX-64-STATIC: moo06:
3938 ; LINUX-64-STATIC: movl    lsrc+262144(%rip), [[EAX:%e.x]]
3939 ; LINUX-64-STATIC: movl    [[EAX]], ldst+262144(%rip)
3940 ; LINUX-64-STATIC: ret
3941
3942 ; LINUX-32-STATIC: moo06:
3943 ; LINUX-32-STATIC:      movl    lsrc+262144, [[EAX:%e.x]]
3944 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ldst+262144
3945 ; LINUX-32-STATIC-NEXT:         ret
3946
3947 ; LINUX-32-PIC: moo06:
3948 ; LINUX-32-PIC:         movl    lsrc+262144, [[EAX:%e.x]]
3949 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ldst+262144
3950 ; LINUX-32-PIC-NEXT:    ret
3951
3952 ; LINUX-64-PIC: moo06:
3953 ; LINUX-64-PIC:         movl    lsrc+262144(%rip), [[EAX:%e.x]]
3954 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ldst+262144(%rip)
3955 ; LINUX-64-PIC-NEXT:    ret
3956
3957 ; DARWIN-32-STATIC: _moo06:
3958 ; DARWIN-32-STATIC:     movl    _lsrc+262144, [[EAX:%e.x]]
3959 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ldst+262144
3960 ; DARWIN-32-STATIC-NEXT:        ret
3961
3962 ; DARWIN-32-DYNAMIC: _moo06:
3963 ; DARWIN-32-DYNAMIC:    movl    _lsrc+262144, [[EAX:%e.x]]
3964 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ldst+262144
3965 ; DARWIN-32-DYNAMIC-NEXT:       ret
3966
3967 ; DARWIN-32-PIC: _moo06:
3968 ; DARWIN-32-PIC:        calll   L54$pb
3969 ; DARWIN-32-PIC-NEXT: L54$pb:
3970 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3971 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L54$pb)+262144([[EAX]]), [[ECX:%e.x]]
3972 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], (_ldst-L54$pb)+262144([[EAX]])
3973 ; DARWIN-32-PIC-NEXT:   ret
3974
3975 ; DARWIN-64-STATIC: _moo06:
3976 ; DARWIN-64-STATIC:     movl    _lsrc+262144(%rip), [[EAX:%e.x]]
3977 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ldst+262144(%rip)
3978 ; DARWIN-64-STATIC-NEXT:        ret
3979
3980 ; DARWIN-64-DYNAMIC: _moo06:
3981 ; DARWIN-64-DYNAMIC:    movl    _lsrc+262144(%rip), [[EAX:%e.x]]
3982 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ldst+262144(%rip)
3983 ; DARWIN-64-DYNAMIC-NEXT:       ret
3984
3985 ; DARWIN-64-PIC: _moo06:
3986 ; DARWIN-64-PIC:        movl    _lsrc+262144(%rip), [[EAX:%e.x]]
3987 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ldst+262144(%rip)
3988 ; DARWIN-64-PIC-NEXT:   ret
3989 }
3990
3991 define void @moo07(i64 %i) nounwind {
3992 entry:
3993         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
3994         ret void
3995 ; LINUX-64-STATIC: moo07:
3996 ; LINUX-64-STATIC: movq    $ldst+262144, lptr
3997 ; LINUX-64-STATIC: ret
3998
3999 ; LINUX-32-STATIC: moo07:
4000 ; LINUX-32-STATIC:      movl    $ldst+262144, lptr
4001 ; LINUX-32-STATIC-NEXT:         ret
4002
4003 ; LINUX-32-PIC: moo07:
4004 ; LINUX-32-PIC:         movl    $ldst+262144, lptr
4005 ; LINUX-32-PIC-NEXT:    ret
4006
4007 ; LINUX-64-PIC: moo07:
4008 ; LINUX-64-PIC:         leaq    ldst+262144(%rip), [[RAX:%r.x]]
4009 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
4010 ; LINUX-64-PIC-NEXT:    ret
4011
4012 ; DARWIN-32-STATIC: _moo07:
4013 ; DARWIN-32-STATIC:     movl    $_ldst+262144, _lptr
4014 ; DARWIN-32-STATIC-NEXT:        ret
4015
4016 ; DARWIN-32-DYNAMIC: _moo07:
4017 ; DARWIN-32-DYNAMIC:    movl    $_ldst+262144, _lptr
4018 ; DARWIN-32-DYNAMIC-NEXT:       ret
4019
4020 ; DARWIN-32-PIC: _moo07:
4021 ; DARWIN-32-PIC:        calll   L55$pb
4022 ; DARWIN-32-PIC-NEXT: L55$pb:
4023 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4024 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L55$pb)+262144([[EAX]]), [[ECX:%e.x]]
4025 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L55$pb([[EAX]])
4026 ; DARWIN-32-PIC-NEXT:   ret
4027
4028 ; DARWIN-64-STATIC: _moo07:
4029 ; DARWIN-64-STATIC:     leaq    _ldst+262144(%rip), [[RAX:%r.x]]
4030 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
4031 ; DARWIN-64-STATIC-NEXT:        ret
4032
4033 ; DARWIN-64-DYNAMIC: _moo07:
4034 ; DARWIN-64-DYNAMIC:    leaq    _ldst+262144(%rip), [[RAX:%r.x]]
4035 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
4036 ; DARWIN-64-DYNAMIC-NEXT:       ret
4037
4038 ; DARWIN-64-PIC: _moo07:
4039 ; DARWIN-64-PIC:        leaq    _ldst+262144(%rip), [[RAX:%r.x]]
4040 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
4041 ; DARWIN-64-PIC-NEXT:   ret
4042 }
4043
4044 define void @moo08(i64 %i) nounwind {
4045 entry:
4046         %0 = load i32** @lptr, align 8
4047         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4048         %2 = getelementptr i32* %0, i64 65536
4049         store i32 %1, i32* %2, align 4
4050         ret void
4051 ; LINUX-64-STATIC: moo08:
4052 ; LINUX-64-STATIC: movl    lsrc+262144(%rip), [[EAX:%e.x]]
4053 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
4054 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
4055 ; LINUX-64-STATIC: ret
4056
4057 ; LINUX-32-STATIC: moo08:
4058 ; LINUX-32-STATIC:      movl    lsrc+262144, [[EAX:%e.x]]
4059 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
4060 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 262144([[ECX]])
4061 ; LINUX-32-STATIC-NEXT:         ret
4062
4063 ; LINUX-32-PIC: moo08:
4064 ; LINUX-32-PIC:         movl    lsrc+262144, [[EAX:%e.x]]
4065 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
4066 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 262144([[ECX]])
4067 ; LINUX-32-PIC-NEXT:    ret
4068
4069 ; LINUX-64-PIC: moo08:
4070 ; LINUX-64-PIC:         movl    lsrc+262144(%rip), [[EAX:%e.x]]
4071 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
4072 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
4073 ; LINUX-64-PIC-NEXT:    ret
4074
4075 ; DARWIN-32-STATIC: _moo08:
4076 ; DARWIN-32-STATIC:     movl    _lsrc+262144, [[EAX:%e.x]]
4077 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
4078 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 262144([[ECX]])
4079 ; DARWIN-32-STATIC-NEXT:        ret
4080
4081 ; DARWIN-32-DYNAMIC: _moo08:
4082 ; DARWIN-32-DYNAMIC:    movl    _lsrc+262144, [[EAX:%e.x]]
4083 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
4084 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[ECX]])
4085 ; DARWIN-32-DYNAMIC-NEXT:       ret
4086
4087 ; DARWIN-32-PIC: _moo08:
4088 ; DARWIN-32-PIC:        calll   L56$pb
4089 ; DARWIN-32-PIC-NEXT: L56$pb:
4090 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4091 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L56$pb)+262144([[EAX]]), [[ECX:%e.x]]
4092 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L56$pb([[EAX]]), [[EAX:%e.x]]
4093 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 262144([[EAX]])
4094 ; DARWIN-32-PIC-NEXT:   ret
4095
4096 ; DARWIN-64-STATIC: _moo08:
4097 ; DARWIN-64-STATIC:     movl    _lsrc+262144(%rip), [[EAX:%e.x]]
4098 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
4099 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]])
4100 ; DARWIN-64-STATIC-NEXT:        ret
4101
4102 ; DARWIN-64-DYNAMIC: _moo08:
4103 ; DARWIN-64-DYNAMIC:    movl    _lsrc+262144(%rip), [[EAX:%e.x]]
4104 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
4105 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]])
4106 ; DARWIN-64-DYNAMIC-NEXT:       ret
4107
4108 ; DARWIN-64-PIC: _moo08:
4109 ; DARWIN-64-PIC:        movl    _lsrc+262144(%rip), [[EAX:%e.x]]
4110 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
4111 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]])
4112 ; DARWIN-64-PIC-NEXT:   ret
4113 }
4114
4115 define void @big00(i64 %i) nounwind {
4116 entry:
4117         %0 = add i64 %i, 65536
4118         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
4119         %2 = load i32* %1, align 4
4120         %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
4121         store i32 %2, i32* %3, align 4
4122         ret void
4123 ; LINUX-64-STATIC: big00:
4124 ; LINUX-64-STATIC: movl    src+262144(,%rdi,4), [[EAX:%e.x]]
4125 ; LINUX-64-STATIC: movl    [[EAX]], dst+262144(,%rdi,4)
4126 ; LINUX-64-STATIC: ret
4127
4128 ; LINUX-32-STATIC: big00:
4129 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4130 ; LINUX-32-STATIC-NEXT:         movl    src+262144(,[[EAX]],4), [[ECX:%e.x]]
4131 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], dst+262144(,[[EAX]],4)
4132 ; LINUX-32-STATIC-NEXT:         ret
4133
4134 ; LINUX-32-PIC: big00:
4135 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4136 ; LINUX-32-PIC-NEXT:    movl    src+262144(,[[EAX]],4), [[ECX:%e.x]]
4137 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], dst+262144(,[[EAX]],4)
4138 ; LINUX-32-PIC-NEXT:    ret
4139
4140 ; LINUX-64-PIC: big00:
4141 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
4142 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4143 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
4144 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4145 ; LINUX-64-PIC-NEXT:    ret
4146
4147 ; DARWIN-32-STATIC: _big00:
4148 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4149 ; DARWIN-32-STATIC-NEXT:        movl    _src+262144(,[[EAX]],4), [[ECX:%e.x]]
4150 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _dst+262144(,[[EAX]],4)
4151 ; DARWIN-32-STATIC-NEXT:        ret
4152
4153 ; DARWIN-32-DYNAMIC: _big00:
4154 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4155 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
4156 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144([[ECX]],[[EAX]],4), [[ECX:%e.x]]
4157 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[EDX:%e.x]]
4158 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4159 ; DARWIN-32-DYNAMIC-NEXT:       ret
4160
4161 ; DARWIN-32-PIC: _big00:
4162 ; DARWIN-32-PIC:        calll   L57$pb
4163 ; DARWIN-32-PIC-NEXT: L57$pb:
4164 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4165 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4166 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L57$pb([[EAX]]), [[EDX:%e.x]]
4167 ; DARWIN-32-PIC-NEXT:   movl    262144([[EDX]],[[ECX]],4), [[EDX:%e.x]]
4168 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L57$pb([[EAX]]), [[EAX:%e.x]]
4169 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 262144([[EAX]],[[ECX]],4)
4170 ; DARWIN-32-PIC-NEXT:   ret
4171
4172 ; DARWIN-64-STATIC: _big00:
4173 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4174 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4175 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4176 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4177 ; DARWIN-64-STATIC-NEXT:        ret
4178
4179 ; DARWIN-64-DYNAMIC: _big00:
4180 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4181 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4182 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4183 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4184 ; DARWIN-64-DYNAMIC-NEXT:       ret
4185
4186 ; DARWIN-64-PIC: _big00:
4187 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4188 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4189 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4190 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4191 ; DARWIN-64-PIC-NEXT:   ret
4192 }
4193
4194 define void @big01(i64 %i) nounwind {
4195 entry:
4196         %.sum = add i64 %i, 65536
4197         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
4198         store i32* %0, i32** @ptr, align 8
4199         ret void
4200 ; LINUX-64-STATIC: big01:
4201 ; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), [[RAX:%r.x]]
4202 ; LINUX-64-STATIC: movq    [[RAX]], ptr(%rip)
4203 ; LINUX-64-STATIC: ret
4204
4205 ; LINUX-32-STATIC: big01:
4206 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4207 ; LINUX-32-STATIC-NEXT:         leal    dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4208 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
4209 ; LINUX-32-STATIC-NEXT:         ret
4210
4211 ; LINUX-32-PIC: big01:
4212 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4213 ; LINUX-32-PIC-NEXT:    leal    dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4214 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
4215 ; LINUX-32-PIC-NEXT:    ret
4216
4217 ; LINUX-64-PIC: big01:
4218 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
4219 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4220 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4221 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
4222 ; LINUX-64-PIC-NEXT:    ret
4223
4224 ; DARWIN-32-STATIC: _big01:
4225 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4226 ; DARWIN-32-STATIC-NEXT:        leal    _dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4227 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
4228 ; DARWIN-32-STATIC-NEXT:        ret
4229
4230 ; DARWIN-32-DYNAMIC: _big01:
4231 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4232 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
4233 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), [[EAX:%e.x]]
4234 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
4235 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
4236 ; DARWIN-32-DYNAMIC-NEXT:       ret
4237
4238 ; DARWIN-32-PIC: _big01:
4239 ; DARWIN-32-PIC:        calll   L58$pb
4240 ; DARWIN-32-PIC-NEXT: L58$pb:
4241 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4242 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4243 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L58$pb([[EAX]]), [[EDX:%e.x]]
4244 ; DARWIN-32-PIC-NEXT:   leal    262144([[EDX]],[[ECX]],4), [[ECX:%e.x]]
4245 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L58$pb([[EAX]]), [[EAX:%e.x]]
4246 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
4247 ; DARWIN-32-PIC-NEXT:   ret
4248
4249 ; DARWIN-64-STATIC: _big01:
4250 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4251 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4252 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4253 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
4254 ; DARWIN-64-STATIC-NEXT:        ret
4255
4256 ; DARWIN-64-DYNAMIC: _big01:
4257 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4258 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4259 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4260 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
4261 ; DARWIN-64-DYNAMIC-NEXT:       ret
4262
4263 ; DARWIN-64-PIC: _big01:
4264 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4265 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4266 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4267 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
4268 ; DARWIN-64-PIC-NEXT:   ret
4269 }
4270
4271 define void @big02(i64 %i) nounwind {
4272 entry:
4273         %0 = load i32** @ptr, align 8
4274         %1 = add i64 %i, 65536
4275         %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
4276         %3 = load i32* %2, align 4
4277         %4 = getelementptr i32* %0, i64 %1
4278         store i32 %3, i32* %4, align 4
4279         ret void
4280 ; LINUX-64-STATIC: big02:
4281 ; LINUX-64-STATIC: movl    src+262144(,%rdi,4), [[EAX:%e.x]]
4282 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
4283 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4284 ; LINUX-64-STATIC: ret
4285
4286 ; LINUX-32-STATIC: big02:
4287 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4288 ; LINUX-32-STATIC-NEXT:         movl    src+262144(,[[EAX]],4), [[ECX:%e.x]]
4289 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
4290 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4291 ; LINUX-32-STATIC-NEXT:         ret
4292
4293 ; LINUX-32-PIC: big02:
4294 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4295 ; LINUX-32-PIC-NEXT:    movl    src+262144(,[[EAX]],4), [[ECX:%e.x]]
4296 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
4297 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4298 ; LINUX-32-PIC-NEXT:    ret
4299
4300 ; LINUX-64-PIC: big02:
4301 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
4302 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4303 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4304 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
4305 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4306 ; LINUX-64-PIC-NEXT:    ret
4307
4308 ; DARWIN-32-STATIC: _big02:
4309 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4310 ; DARWIN-32-STATIC-NEXT:        movl    _src+262144(,[[EAX]],4), [[ECX:%e.x]]
4311 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
4312 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4313 ; DARWIN-32-STATIC-NEXT:        ret
4314
4315 ; DARWIN-32-DYNAMIC: _big02:
4316 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4317 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
4318 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144([[ECX]],[[EAX]],4), [[ECX:%e.x]]
4319 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
4320 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
4321 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4322 ; DARWIN-32-DYNAMIC-NEXT:       ret
4323
4324 ; DARWIN-32-PIC: _big02:
4325 ; DARWIN-32-PIC:        calll   L59$pb
4326 ; DARWIN-32-PIC-NEXT: L59$pb:
4327 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4328 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4329 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L59$pb([[EAX]]), [[EDX:%e.x]]
4330 ; DARWIN-32-PIC-NEXT:   movl    262144([[EDX]],[[ECX]],4), [[EDX:%e.x]]
4331 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L59$pb([[EAX]]), [[EAX:%e.x]]
4332 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
4333 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 262144([[EAX]],[[ECX]],4)
4334 ; DARWIN-32-PIC-NEXT:   ret
4335
4336 ; DARWIN-64-STATIC: _big02:
4337 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4338 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4339 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4340 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
4341 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4342 ; DARWIN-64-STATIC-NEXT:        ret
4343
4344 ; DARWIN-64-DYNAMIC: _big02:
4345 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4346 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4347 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4348 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
4349 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4350 ; DARWIN-64-DYNAMIC-NEXT:       ret
4351
4352 ; DARWIN-64-PIC: _big02:
4353 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4354 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4355 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4356 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
4357 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4358 ; DARWIN-64-PIC-NEXT:   ret
4359 }
4360
4361 define void @big03(i64 %i) nounwind {
4362 entry:
4363         %0 = add i64 %i, 65536
4364         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
4365         %2 = load i32* %1, align 4
4366         %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
4367         store i32 %2, i32* %3, align 4
4368         ret void
4369 ; LINUX-64-STATIC: big03:
4370 ; LINUX-64-STATIC: movl    dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4371 ; LINUX-64-STATIC: movl    [[EAX]], ddst+262144(,%rdi,4)
4372 ; LINUX-64-STATIC: ret
4373
4374 ; LINUX-32-STATIC: big03:
4375 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4376 ; LINUX-32-STATIC-NEXT:         movl    dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4377 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ddst+262144(,[[EAX]],4)
4378 ; LINUX-32-STATIC-NEXT:         ret
4379
4380 ; LINUX-32-PIC: big03:
4381 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4382 ; LINUX-32-PIC-NEXT:    movl    dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4383 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ddst+262144(,[[EAX]],4)
4384 ; LINUX-32-PIC-NEXT:    ret
4385
4386 ; LINUX-64-PIC: big03:
4387 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
4388 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4389 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
4390 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4391 ; LINUX-64-PIC-NEXT:    ret
4392
4393 ; DARWIN-32-STATIC: _big03:
4394 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4395 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4396 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ddst+262144(,[[EAX]],4)
4397 ; DARWIN-32-STATIC-NEXT:        ret
4398
4399 ; DARWIN-32-DYNAMIC: _big03:
4400 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4401 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4402 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ddst+262144(,[[EAX]],4)
4403 ; DARWIN-32-DYNAMIC-NEXT:       ret
4404
4405 ; DARWIN-32-PIC: _big03:
4406 ; DARWIN-32-PIC:        calll   L60$pb
4407 ; DARWIN-32-PIC-NEXT: L60$pb:
4408 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4409 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4410 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L60$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4411 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], (_ddst-L60$pb)+262144([[EAX]],[[ECX]],4)
4412 ; DARWIN-32-PIC-NEXT:   ret
4413
4414 ; DARWIN-64-STATIC: _big03:
4415 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
4416 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4417 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), [[RCX:%r.x]]
4418 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4419 ; DARWIN-64-STATIC-NEXT:        ret
4420
4421 ; DARWIN-64-DYNAMIC: _big03:
4422 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
4423 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4424 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), [[RCX:%r.x]]
4425 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4426 ; DARWIN-64-DYNAMIC-NEXT:       ret
4427
4428 ; DARWIN-64-PIC: _big03:
4429 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
4430 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4431 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), [[RCX:%r.x]]
4432 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4433 ; DARWIN-64-PIC-NEXT:   ret
4434 }
4435
4436 define void @big04(i64 %i) nounwind {
4437 entry:
4438         %.sum = add i64 %i, 65536
4439         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
4440         store i32* %0, i32** @dptr, align 8
4441         ret void
4442 ; LINUX-64-STATIC: big04:
4443 ; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), [[RAX:%r.x]]
4444 ; LINUX-64-STATIC: movq    [[RAX]], dptr
4445 ; LINUX-64-STATIC: ret
4446
4447 ; LINUX-32-STATIC: big04:
4448 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4449 ; LINUX-32-STATIC-NEXT:         leal    ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4450 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dptr
4451 ; LINUX-32-STATIC-NEXT:         ret
4452
4453 ; LINUX-32-PIC: big04:
4454 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4455 ; LINUX-32-PIC-NEXT:    leal    ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4456 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dptr
4457 ; LINUX-32-PIC-NEXT:    ret
4458
4459 ; LINUX-64-PIC: big04:
4460 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
4461 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4462 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
4463 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
4464 ; LINUX-64-PIC-NEXT:    ret
4465
4466 ; DARWIN-32-STATIC: _big04:
4467 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4468 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4469 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dptr
4470 ; DARWIN-32-STATIC-NEXT:        ret
4471
4472 ; DARWIN-32-DYNAMIC: _big04:
4473 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4474 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4475 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _dptr
4476 ; DARWIN-32-DYNAMIC-NEXT:       ret
4477
4478 ; DARWIN-32-PIC: _big04:
4479 ; DARWIN-32-PIC:        calll   L61$pb
4480 ; DARWIN-32-PIC-NEXT: L61$pb:
4481 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4482 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4483 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L61$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]]
4484 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L61$pb([[EAX]])
4485 ; DARWIN-32-PIC-NEXT:   ret
4486
4487 ; DARWIN-64-STATIC: _big04:
4488 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
4489 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4490 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
4491 ; DARWIN-64-STATIC-NEXT:        ret
4492
4493 ; DARWIN-64-DYNAMIC: _big04:
4494 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
4495 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4496 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
4497 ; DARWIN-64-DYNAMIC-NEXT:       ret
4498
4499 ; DARWIN-64-PIC: _big04:
4500 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
4501 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4502 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
4503 ; DARWIN-64-PIC-NEXT:   ret
4504 }
4505
4506 define void @big05(i64 %i) nounwind {
4507 entry:
4508         %0 = load i32** @dptr, align 8
4509         %1 = add i64 %i, 65536
4510         %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
4511         %3 = load i32* %2, align 4
4512         %4 = getelementptr i32* %0, i64 %1
4513         store i32 %3, i32* %4, align 4
4514         ret void
4515 ; LINUX-64-STATIC: big05:
4516 ; LINUX-64-STATIC: movl    dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4517 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
4518 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4519 ; LINUX-64-STATIC: ret
4520
4521 ; LINUX-32-STATIC: big05:
4522 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4523 ; LINUX-32-STATIC-NEXT:         movl    dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4524 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[EDX:%e.x]]
4525 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4526 ; LINUX-32-STATIC-NEXT:         ret
4527
4528 ; LINUX-32-PIC: big05:
4529 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4530 ; LINUX-32-PIC-NEXT:    movl    dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4531 ; LINUX-32-PIC-NEXT:    movl    dptr, [[EDX:%e.x]]
4532 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4533 ; LINUX-32-PIC-NEXT:    ret
4534
4535 ; LINUX-64-PIC: big05:
4536 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
4537 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4538 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
4539 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
4540 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4541 ; LINUX-64-PIC-NEXT:    ret
4542
4543 ; DARWIN-32-STATIC: _big05:
4544 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4545 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4546 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[EDX:%e.x]]
4547 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4548 ; DARWIN-32-STATIC-NEXT:        ret
4549
4550 ; DARWIN-32-DYNAMIC: _big05:
4551 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4552 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4553 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[EDX:%e.x]]
4554 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4555 ; DARWIN-32-DYNAMIC-NEXT:       ret
4556
4557 ; DARWIN-32-PIC: _big05:
4558 ; DARWIN-32-PIC:        calll   L62$pb
4559 ; DARWIN-32-PIC-NEXT: L62$pb:
4560 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4561 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4562 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L62$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4563 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L62$pb([[EAX]]), [[EAX:%e.x]]
4564 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 262144([[EAX]],[[ECX]],4)
4565 ; DARWIN-32-PIC-NEXT:   ret
4566
4567 ; DARWIN-64-STATIC: _big05:
4568 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
4569 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4570 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
4571 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4572 ; DARWIN-64-STATIC-NEXT:        ret
4573
4574 ; DARWIN-64-DYNAMIC: _big05:
4575 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
4576 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4577 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
4578 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4579 ; DARWIN-64-DYNAMIC-NEXT:       ret
4580
4581 ; DARWIN-64-PIC: _big05:
4582 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
4583 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4584 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
4585 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4586 ; DARWIN-64-PIC-NEXT:   ret
4587 }
4588
4589 define void @big06(i64 %i) nounwind {
4590 entry:
4591         %0 = add i64 %i, 65536
4592         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
4593         %2 = load i32* %1, align 4
4594         %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
4595         store i32 %2, i32* %3, align 4
4596         ret void
4597 ; LINUX-64-STATIC: big06:
4598 ; LINUX-64-STATIC: movl    lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4599 ; LINUX-64-STATIC: movl    [[EAX]], ldst+262144(,%rdi,4)
4600 ; LINUX-64-STATIC: ret
4601
4602 ; LINUX-32-STATIC: big06:
4603 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4604 ; LINUX-32-STATIC-NEXT:         movl    lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4605 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ldst+262144(,[[EAX]],4)
4606 ; LINUX-32-STATIC-NEXT:         ret
4607
4608 ; LINUX-32-PIC: big06:
4609 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4610 ; LINUX-32-PIC-NEXT:    movl    lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4611 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ldst+262144(,[[EAX]],4)
4612 ; LINUX-32-PIC-NEXT:    ret
4613
4614 ; LINUX-64-PIC: big06:
4615 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
4616 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4617 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), [[RCX:%r.x]]
4618 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4619 ; LINUX-64-PIC-NEXT:    ret
4620
4621 ; DARWIN-32-STATIC: _big06:
4622 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4623 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4624 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ldst+262144(,[[EAX]],4)
4625 ; DARWIN-32-STATIC-NEXT:        ret
4626
4627 ; DARWIN-32-DYNAMIC: _big06:
4628 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4629 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4630 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ldst+262144(,[[EAX]],4)
4631 ; DARWIN-32-DYNAMIC-NEXT:       ret
4632
4633 ; DARWIN-32-PIC: _big06:
4634 ; DARWIN-32-PIC:        calll   L63$pb
4635 ; DARWIN-32-PIC-NEXT: L63$pb:
4636 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4637 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4638 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L63$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4639 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], (_ldst-L63$pb)+262144([[EAX]],[[ECX]],4)
4640 ; DARWIN-32-PIC-NEXT:   ret
4641
4642 ; DARWIN-64-STATIC: _big06:
4643 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
4644 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4645 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), [[RCX:%r.x]]
4646 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4647 ; DARWIN-64-STATIC-NEXT:        ret
4648
4649 ; DARWIN-64-DYNAMIC: _big06:
4650 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
4651 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4652 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), [[RCX:%r.x]]
4653 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4654 ; DARWIN-64-DYNAMIC-NEXT:       ret
4655
4656 ; DARWIN-64-PIC: _big06:
4657 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
4658 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4659 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), [[RCX:%r.x]]
4660 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4661 ; DARWIN-64-PIC-NEXT:   ret
4662 }
4663
4664 define void @big07(i64 %i) nounwind {
4665 entry:
4666         %.sum = add i64 %i, 65536
4667         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
4668         store i32* %0, i32** @lptr, align 8
4669         ret void
4670 ; LINUX-64-STATIC: big07:
4671 ; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), [[RAX:%r.x]]
4672 ; LINUX-64-STATIC: movq    [[RAX]], lptr
4673 ; LINUX-64-STATIC: ret
4674
4675 ; LINUX-32-STATIC: big07:
4676 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4677 ; LINUX-32-STATIC-NEXT:         leal    ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4678 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], lptr
4679 ; LINUX-32-STATIC-NEXT:         ret
4680
4681 ; LINUX-32-PIC: big07:
4682 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4683 ; LINUX-32-PIC-NEXT:    leal    ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4684 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], lptr
4685 ; LINUX-32-PIC-NEXT:    ret
4686
4687 ; LINUX-64-PIC: big07:
4688 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
4689 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4690 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
4691 ; LINUX-64-PIC-NEXT:    ret
4692
4693 ; DARWIN-32-STATIC: _big07:
4694 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4695 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4696 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _lptr
4697 ; DARWIN-32-STATIC-NEXT:        ret
4698
4699 ; DARWIN-32-DYNAMIC: _big07:
4700 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4701 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4702 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _lptr
4703 ; DARWIN-32-DYNAMIC-NEXT:       ret
4704
4705 ; DARWIN-32-PIC: _big07:
4706 ; DARWIN-32-PIC:        calll   L64$pb
4707 ; DARWIN-32-PIC-NEXT: L64$pb:
4708 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4709 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4710 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L64$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]]
4711 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L64$pb([[EAX]])
4712 ; DARWIN-32-PIC-NEXT:   ret
4713
4714 ; DARWIN-64-STATIC: _big07:
4715 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
4716 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4717 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
4718 ; DARWIN-64-STATIC-NEXT:        ret
4719
4720 ; DARWIN-64-DYNAMIC: _big07:
4721 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
4722 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4723 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
4724 ; DARWIN-64-DYNAMIC-NEXT:       ret
4725
4726 ; DARWIN-64-PIC: _big07:
4727 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
4728 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4729 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
4730 ; DARWIN-64-PIC-NEXT:   ret
4731 }
4732
4733 define void @big08(i64 %i) nounwind {
4734 entry:
4735         %0 = load i32** @lptr, align 8
4736         %1 = add i64 %i, 65536
4737         %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
4738         %3 = load i32* %2, align 4
4739         %4 = getelementptr i32* %0, i64 %1
4740         store i32 %3, i32* %4, align 4
4741         ret void
4742 ; LINUX-64-STATIC: big08:
4743 ; LINUX-64-STATIC: movl    lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4744 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
4745 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4746 ; LINUX-64-STATIC: ret
4747
4748 ; LINUX-32-STATIC: big08:
4749 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4750 ; LINUX-32-STATIC-NEXT:         movl    lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4751 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[EDX:%e.x]]
4752 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4753 ; LINUX-32-STATIC-NEXT:         ret
4754
4755 ; LINUX-32-PIC: big08:
4756 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4757 ; LINUX-32-PIC-NEXT:    movl    lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4758 ; LINUX-32-PIC-NEXT:    movl    lptr, [[EDX:%e.x]]
4759 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4760 ; LINUX-32-PIC-NEXT:    ret
4761
4762 ; LINUX-64-PIC: big08:
4763 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
4764 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4765 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
4766 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4767 ; LINUX-64-PIC-NEXT:    ret
4768
4769 ; DARWIN-32-STATIC: _big08:
4770 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4771 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4772 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[EDX:%e.x]]
4773 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4774 ; DARWIN-32-STATIC-NEXT:        ret
4775
4776 ; DARWIN-32-DYNAMIC: _big08:
4777 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4778 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4779 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[EDX:%e.x]]
4780 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4781 ; DARWIN-32-DYNAMIC-NEXT:       ret
4782
4783 ; DARWIN-32-PIC: _big08:
4784 ; DARWIN-32-PIC:        calll   L65$pb
4785 ; DARWIN-32-PIC-NEXT: L65$pb:
4786 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4787 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4788 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L65$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4789 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L65$pb([[EAX]]), [[EAX:%e.x]]
4790 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 262144([[EAX]],[[ECX]],4)
4791 ; DARWIN-32-PIC-NEXT:   ret
4792
4793 ; DARWIN-64-STATIC: _big08:
4794 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
4795 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4796 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
4797 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4798 ; DARWIN-64-STATIC-NEXT:        ret
4799
4800 ; DARWIN-64-DYNAMIC: _big08:
4801 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
4802 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4803 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
4804 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4805 ; DARWIN-64-DYNAMIC-NEXT:       ret
4806
4807 ; DARWIN-64-PIC: _big08:
4808 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
4809 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4810 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
4811 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4812 ; DARWIN-64-PIC-NEXT:   ret
4813 }
4814
4815 define i8* @bar00() nounwind {
4816 entry:
4817         ret i8* bitcast ([131072 x i32]* @src to i8*)
4818 ; LINUX-64-STATIC: bar00:
4819 ; LINUX-64-STATIC: movl    $src, %eax
4820 ; LINUX-64-STATIC: ret
4821
4822 ; LINUX-32-STATIC: bar00:
4823 ; LINUX-32-STATIC:      movl    $src, %eax
4824 ; LINUX-32-STATIC-NEXT:         ret
4825
4826 ; LINUX-32-PIC: bar00:
4827 ; LINUX-32-PIC:         movl    $src, %eax
4828 ; LINUX-32-PIC-NEXT:    ret
4829
4830 ; LINUX-64-PIC: bar00:
4831 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
4832 ; LINUX-64-PIC-NEXT:    ret
4833
4834 ; DARWIN-32-STATIC: _bar00:
4835 ; DARWIN-32-STATIC:     movl    $_src, %eax
4836 ; DARWIN-32-STATIC-NEXT:        ret
4837
4838 ; DARWIN-32-DYNAMIC: _bar00:
4839 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
4840 ; DARWIN-32-DYNAMIC-NEXT:       ret
4841
4842 ; DARWIN-32-PIC: _bar00:
4843 ; DARWIN-32-PIC:        calll   L66$pb
4844 ; DARWIN-32-PIC-NEXT: L66$pb:
4845 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4846 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L66$pb([[EAX]]), %eax
4847 ; DARWIN-32-PIC-NEXT:   ret
4848
4849 ; DARWIN-64-STATIC: _bar00:
4850 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
4851 ; DARWIN-64-STATIC-NEXT:        ret
4852
4853 ; DARWIN-64-DYNAMIC: _bar00:
4854 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
4855 ; DARWIN-64-DYNAMIC-NEXT:       ret
4856
4857 ; DARWIN-64-PIC: _bar00:
4858 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
4859 ; DARWIN-64-PIC-NEXT:   ret
4860 }
4861
4862 define i8* @bxr00() nounwind {
4863 entry:
4864         ret i8* bitcast ([32 x i32]* @xsrc to i8*)
4865 ; LINUX-64-STATIC: bxr00:
4866 ; LINUX-64-STATIC: movl    $xsrc, %eax
4867 ; LINUX-64-STATIC: ret
4868
4869 ; LINUX-32-STATIC: bxr00:
4870 ; LINUX-32-STATIC:      movl    $xsrc, %eax
4871 ; LINUX-32-STATIC-NEXT:         ret
4872
4873 ; LINUX-32-PIC: bxr00:
4874 ; LINUX-32-PIC:         movl    $xsrc, %eax
4875 ; LINUX-32-PIC-NEXT:    ret
4876
4877 ; LINUX-64-PIC: bxr00:
4878 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
4879 ; LINUX-64-PIC-NEXT:    ret
4880
4881 ; DARWIN-32-STATIC: _bxr00:
4882 ; DARWIN-32-STATIC:     movl    $_xsrc, %eax
4883 ; DARWIN-32-STATIC-NEXT:        ret
4884
4885 ; DARWIN-32-DYNAMIC: _bxr00:
4886 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
4887 ; DARWIN-32-DYNAMIC-NEXT:       ret
4888
4889 ; DARWIN-32-PIC: _bxr00:
4890 ; DARWIN-32-PIC:        calll   L67$pb
4891 ; DARWIN-32-PIC-NEXT: L67$pb:
4892 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4893 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L67$pb([[EAX]]), %eax
4894 ; DARWIN-32-PIC-NEXT:   ret
4895
4896 ; DARWIN-64-STATIC: _bxr00:
4897 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
4898 ; DARWIN-64-STATIC-NEXT:        ret
4899
4900 ; DARWIN-64-DYNAMIC: _bxr00:
4901 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
4902 ; DARWIN-64-DYNAMIC-NEXT:       ret
4903
4904 ; DARWIN-64-PIC: _bxr00:
4905 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
4906 ; DARWIN-64-PIC-NEXT:   ret
4907 }
4908
4909 define i8* @bar01() nounwind {
4910 entry:
4911         ret i8* bitcast ([131072 x i32]* @dst to i8*)
4912 ; LINUX-64-STATIC: bar01:
4913 ; LINUX-64-STATIC: movl    $dst, %eax
4914 ; LINUX-64-STATIC: ret
4915
4916 ; LINUX-32-STATIC: bar01:
4917 ; LINUX-32-STATIC:      movl    $dst, %eax
4918 ; LINUX-32-STATIC-NEXT:         ret
4919
4920 ; LINUX-32-PIC: bar01:
4921 ; LINUX-32-PIC:         movl    $dst, %eax
4922 ; LINUX-32-PIC-NEXT:    ret
4923
4924 ; LINUX-64-PIC: bar01:
4925 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
4926 ; LINUX-64-PIC-NEXT:    ret
4927
4928 ; DARWIN-32-STATIC: _bar01:
4929 ; DARWIN-32-STATIC:     movl    $_dst, %eax
4930 ; DARWIN-32-STATIC-NEXT:        ret
4931
4932 ; DARWIN-32-DYNAMIC: _bar01:
4933 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
4934 ; DARWIN-32-DYNAMIC-NEXT:       ret
4935
4936 ; DARWIN-32-PIC: _bar01:
4937 ; DARWIN-32-PIC:        calll   L68$pb
4938 ; DARWIN-32-PIC-NEXT: L68$pb:
4939 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4940 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L68$pb([[EAX]]), %eax
4941 ; DARWIN-32-PIC-NEXT:   ret
4942
4943 ; DARWIN-64-STATIC: _bar01:
4944 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
4945 ; DARWIN-64-STATIC-NEXT:        ret
4946
4947 ; DARWIN-64-DYNAMIC: _bar01:
4948 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
4949 ; DARWIN-64-DYNAMIC-NEXT:       ret
4950
4951 ; DARWIN-64-PIC: _bar01:
4952 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
4953 ; DARWIN-64-PIC-NEXT:   ret
4954 }
4955
4956 define i8* @bxr01() nounwind {
4957 entry:
4958         ret i8* bitcast ([32 x i32]* @xdst to i8*)
4959 ; LINUX-64-STATIC: bxr01:
4960 ; LINUX-64-STATIC: movl    $xdst, %eax
4961 ; LINUX-64-STATIC: ret
4962
4963 ; LINUX-32-STATIC: bxr01:
4964 ; LINUX-32-STATIC:      movl    $xdst, %eax
4965 ; LINUX-32-STATIC-NEXT:         ret
4966
4967 ; LINUX-32-PIC: bxr01:
4968 ; LINUX-32-PIC:         movl    $xdst, %eax
4969 ; LINUX-32-PIC-NEXT:    ret
4970
4971 ; LINUX-64-PIC: bxr01:
4972 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
4973 ; LINUX-64-PIC-NEXT:    ret
4974
4975 ; DARWIN-32-STATIC: _bxr01:
4976 ; DARWIN-32-STATIC:     movl    $_xdst, %eax
4977 ; DARWIN-32-STATIC-NEXT:        ret
4978
4979 ; DARWIN-32-DYNAMIC: _bxr01:
4980 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
4981 ; DARWIN-32-DYNAMIC-NEXT:       ret
4982
4983 ; DARWIN-32-PIC: _bxr01:
4984 ; DARWIN-32-PIC:        calll   L69$pb
4985 ; DARWIN-32-PIC-NEXT: L69$pb:
4986 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4987 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L69$pb([[EAX]]), %eax
4988 ; DARWIN-32-PIC-NEXT:   ret
4989
4990 ; DARWIN-64-STATIC: _bxr01:
4991 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
4992 ; DARWIN-64-STATIC-NEXT:        ret
4993
4994 ; DARWIN-64-DYNAMIC: _bxr01:
4995 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
4996 ; DARWIN-64-DYNAMIC-NEXT:       ret
4997
4998 ; DARWIN-64-PIC: _bxr01:
4999 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
5000 ; DARWIN-64-PIC-NEXT:   ret
5001 }
5002
5003 define i8* @bar02() nounwind {
5004 entry:
5005         ret i8* bitcast (i32** @ptr to i8*)
5006 ; LINUX-64-STATIC: bar02:
5007 ; LINUX-64-STATIC: movl    $ptr, %eax
5008 ; LINUX-64-STATIC: ret
5009
5010 ; LINUX-32-STATIC: bar02:
5011 ; LINUX-32-STATIC:      movl    $ptr, %eax
5012 ; LINUX-32-STATIC-NEXT:         ret
5013
5014 ; LINUX-32-PIC: bar02:
5015 ; LINUX-32-PIC:         movl    $ptr, %eax
5016 ; LINUX-32-PIC-NEXT:    ret
5017
5018 ; LINUX-64-PIC: bar02:
5019 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rax
5020 ; LINUX-64-PIC-NEXT:    ret
5021
5022 ; DARWIN-32-STATIC: _bar02:
5023 ; DARWIN-32-STATIC:     movl    $_ptr, %eax
5024 ; DARWIN-32-STATIC-NEXT:        ret
5025
5026 ; DARWIN-32-DYNAMIC: _bar02:
5027 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %eax
5028 ; DARWIN-32-DYNAMIC-NEXT:       ret
5029
5030 ; DARWIN-32-PIC: _bar02:
5031 ; DARWIN-32-PIC:        calll   L70$pb
5032 ; DARWIN-32-PIC-NEXT: L70$pb:
5033 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5034 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L70$pb([[EAX]]), %eax
5035 ; DARWIN-32-PIC-NEXT:   ret
5036
5037 ; DARWIN-64-STATIC: _bar02:
5038 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rax
5039 ; DARWIN-64-STATIC-NEXT:        ret
5040
5041 ; DARWIN-64-DYNAMIC: _bar02:
5042 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rax
5043 ; DARWIN-64-DYNAMIC-NEXT:       ret
5044
5045 ; DARWIN-64-PIC: _bar02:
5046 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rax
5047 ; DARWIN-64-PIC-NEXT:   ret
5048 }
5049
5050 define i8* @bar03() nounwind {
5051 entry:
5052         ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
5053 ; LINUX-64-STATIC: bar03:
5054 ; LINUX-64-STATIC: movl    $dsrc, %eax
5055 ; LINUX-64-STATIC: ret
5056
5057 ; LINUX-32-STATIC: bar03:
5058 ; LINUX-32-STATIC:      movl    $dsrc, %eax
5059 ; LINUX-32-STATIC-NEXT:         ret
5060
5061 ; LINUX-32-PIC: bar03:
5062 ; LINUX-32-PIC:         movl    $dsrc, %eax
5063 ; LINUX-32-PIC-NEXT:    ret
5064
5065 ; LINUX-64-PIC: bar03:
5066 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
5067 ; LINUX-64-PIC-NEXT:    ret
5068
5069 ; DARWIN-32-STATIC: _bar03:
5070 ; DARWIN-32-STATIC:     movl    $_dsrc, %eax
5071 ; DARWIN-32-STATIC-NEXT:        ret
5072
5073 ; DARWIN-32-DYNAMIC: _bar03:
5074 ; DARWIN-32-DYNAMIC:    movl    $_dsrc, %eax
5075 ; DARWIN-32-DYNAMIC-NEXT:       ret
5076
5077 ; DARWIN-32-PIC: _bar03:
5078 ; DARWIN-32-PIC:        calll   L71$pb
5079 ; DARWIN-32-PIC-NEXT: L71$pb:
5080 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5081 ; DARWIN-32-PIC-NEXT:   leal    _dsrc-L71$pb([[EAX]]), %eax
5082 ; DARWIN-32-PIC-NEXT:   ret
5083
5084 ; DARWIN-64-STATIC: _bar03:
5085 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
5086 ; DARWIN-64-STATIC-NEXT:        ret
5087
5088 ; DARWIN-64-DYNAMIC: _bar03:
5089 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
5090 ; DARWIN-64-DYNAMIC-NEXT:       ret
5091
5092 ; DARWIN-64-PIC: _bar03:
5093 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
5094 ; DARWIN-64-PIC-NEXT:   ret
5095 }
5096
5097 define i8* @bar04() nounwind {
5098 entry:
5099         ret i8* bitcast ([131072 x i32]* @ddst to i8*)
5100 ; LINUX-64-STATIC: bar04:
5101 ; LINUX-64-STATIC: movl    $ddst, %eax
5102 ; LINUX-64-STATIC: ret
5103
5104 ; LINUX-32-STATIC: bar04:
5105 ; LINUX-32-STATIC:      movl    $ddst, %eax
5106 ; LINUX-32-STATIC-NEXT:         ret
5107
5108 ; LINUX-32-PIC: bar04:
5109 ; LINUX-32-PIC:         movl    $ddst, %eax
5110 ; LINUX-32-PIC-NEXT:    ret
5111
5112 ; LINUX-64-PIC: bar04:
5113 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
5114 ; LINUX-64-PIC-NEXT:    ret
5115
5116 ; DARWIN-32-STATIC: _bar04:
5117 ; DARWIN-32-STATIC:     movl    $_ddst, %eax
5118 ; DARWIN-32-STATIC-NEXT:        ret
5119
5120 ; DARWIN-32-DYNAMIC: _bar04:
5121 ; DARWIN-32-DYNAMIC:    movl    $_ddst, %eax
5122 ; DARWIN-32-DYNAMIC-NEXT:       ret
5123
5124 ; DARWIN-32-PIC: _bar04:
5125 ; DARWIN-32-PIC:        calll   L72$pb
5126 ; DARWIN-32-PIC-NEXT: L72$pb:
5127 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5128 ; DARWIN-32-PIC-NEXT:   leal    _ddst-L72$pb([[EAX]]), %eax
5129 ; DARWIN-32-PIC-NEXT:   ret
5130
5131 ; DARWIN-64-STATIC: _bar04:
5132 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
5133 ; DARWIN-64-STATIC-NEXT:        ret
5134
5135 ; DARWIN-64-DYNAMIC: _bar04:
5136 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
5137 ; DARWIN-64-DYNAMIC-NEXT:       ret
5138
5139 ; DARWIN-64-PIC: _bar04:
5140 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
5141 ; DARWIN-64-PIC-NEXT:   ret
5142 }
5143
5144 define i8* @bar05() nounwind {
5145 entry:
5146         ret i8* bitcast (i32** @dptr to i8*)
5147 ; LINUX-64-STATIC: bar05:
5148 ; LINUX-64-STATIC: movl    $dptr, %eax
5149 ; LINUX-64-STATIC: ret
5150
5151 ; LINUX-32-STATIC: bar05:
5152 ; LINUX-32-STATIC:      movl    $dptr, %eax
5153 ; LINUX-32-STATIC-NEXT:         ret
5154
5155 ; LINUX-32-PIC: bar05:
5156 ; LINUX-32-PIC:         movl    $dptr, %eax
5157 ; LINUX-32-PIC-NEXT:    ret
5158
5159 ; LINUX-64-PIC: bar05:
5160 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rax
5161 ; LINUX-64-PIC-NEXT:    ret
5162
5163 ; DARWIN-32-STATIC: _bar05:
5164 ; DARWIN-32-STATIC:     movl    $_dptr, %eax
5165 ; DARWIN-32-STATIC-NEXT:        ret
5166
5167 ; DARWIN-32-DYNAMIC: _bar05:
5168 ; DARWIN-32-DYNAMIC:    movl    $_dptr, %eax
5169 ; DARWIN-32-DYNAMIC-NEXT:       ret
5170
5171 ; DARWIN-32-PIC: _bar05:
5172 ; DARWIN-32-PIC:        calll   L73$pb
5173 ; DARWIN-32-PIC-NEXT: L73$pb:
5174 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5175 ; DARWIN-32-PIC-NEXT:   leal    _dptr-L73$pb([[EAX]]), %eax
5176 ; DARWIN-32-PIC-NEXT:   ret
5177
5178 ; DARWIN-64-STATIC: _bar05:
5179 ; DARWIN-64-STATIC:     leaq    _dptr(%rip), %rax
5180 ; DARWIN-64-STATIC-NEXT:        ret
5181
5182 ; DARWIN-64-DYNAMIC: _bar05:
5183 ; DARWIN-64-DYNAMIC:    leaq    _dptr(%rip), %rax
5184 ; DARWIN-64-DYNAMIC-NEXT:       ret
5185
5186 ; DARWIN-64-PIC: _bar05:
5187 ; DARWIN-64-PIC:        leaq    _dptr(%rip), %rax
5188 ; DARWIN-64-PIC-NEXT:   ret
5189 }
5190
5191 define i8* @bar06() nounwind {
5192 entry:
5193         ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
5194 ; LINUX-64-STATIC: bar06:
5195 ; LINUX-64-STATIC: movl    $lsrc, %eax
5196 ; LINUX-64-STATIC: ret
5197
5198 ; LINUX-32-STATIC: bar06:
5199 ; LINUX-32-STATIC:      movl    $lsrc, %eax
5200 ; LINUX-32-STATIC-NEXT:         ret
5201
5202 ; LINUX-32-PIC: bar06:
5203 ; LINUX-32-PIC:         movl    $lsrc, %eax
5204 ; LINUX-32-PIC-NEXT:    ret
5205
5206 ; LINUX-64-PIC: bar06:
5207 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
5208 ; LINUX-64-PIC-NEXT:    ret
5209
5210 ; DARWIN-32-STATIC: _bar06:
5211 ; DARWIN-32-STATIC:     movl    $_lsrc, %eax
5212 ; DARWIN-32-STATIC-NEXT:        ret
5213
5214 ; DARWIN-32-DYNAMIC: _bar06:
5215 ; DARWIN-32-DYNAMIC:    movl    $_lsrc, %eax
5216 ; DARWIN-32-DYNAMIC-NEXT:       ret
5217
5218 ; DARWIN-32-PIC: _bar06:
5219 ; DARWIN-32-PIC:        calll   L74$pb
5220 ; DARWIN-32-PIC-NEXT: L74$pb:
5221 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5222 ; DARWIN-32-PIC-NEXT:   leal    _lsrc-L74$pb([[EAX]]), %eax
5223 ; DARWIN-32-PIC-NEXT:   ret
5224
5225 ; DARWIN-64-STATIC: _bar06:
5226 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
5227 ; DARWIN-64-STATIC-NEXT:        ret
5228
5229 ; DARWIN-64-DYNAMIC: _bar06:
5230 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
5231 ; DARWIN-64-DYNAMIC-NEXT:       ret
5232
5233 ; DARWIN-64-PIC: _bar06:
5234 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
5235 ; DARWIN-64-PIC-NEXT:   ret
5236 }
5237
5238 define i8* @bar07() nounwind {
5239 entry:
5240         ret i8* bitcast ([131072 x i32]* @ldst to i8*)
5241 ; LINUX-64-STATIC: bar07:
5242 ; LINUX-64-STATIC: movl    $ldst, %eax
5243 ; LINUX-64-STATIC: ret
5244
5245 ; LINUX-32-STATIC: bar07:
5246 ; LINUX-32-STATIC:      movl    $ldst, %eax
5247 ; LINUX-32-STATIC-NEXT:         ret
5248
5249 ; LINUX-32-PIC: bar07:
5250 ; LINUX-32-PIC:         movl    $ldst, %eax
5251 ; LINUX-32-PIC-NEXT:    ret
5252
5253 ; LINUX-64-PIC: bar07:
5254 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
5255 ; LINUX-64-PIC-NEXT:    ret
5256
5257 ; DARWIN-32-STATIC: _bar07:
5258 ; DARWIN-32-STATIC:     movl    $_ldst, %eax
5259 ; DARWIN-32-STATIC-NEXT:        ret
5260
5261 ; DARWIN-32-DYNAMIC: _bar07:
5262 ; DARWIN-32-DYNAMIC:    movl    $_ldst, %eax
5263 ; DARWIN-32-DYNAMIC-NEXT:       ret
5264
5265 ; DARWIN-32-PIC: _bar07:
5266 ; DARWIN-32-PIC:        calll   L75$pb
5267 ; DARWIN-32-PIC-NEXT: L75$pb:
5268 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5269 ; DARWIN-32-PIC-NEXT:   leal    _ldst-L75$pb([[EAX]]), %eax
5270 ; DARWIN-32-PIC-NEXT:   ret
5271
5272 ; DARWIN-64-STATIC: _bar07:
5273 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
5274 ; DARWIN-64-STATIC-NEXT:        ret
5275
5276 ; DARWIN-64-DYNAMIC: _bar07:
5277 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
5278 ; DARWIN-64-DYNAMIC-NEXT:       ret
5279
5280 ; DARWIN-64-PIC: _bar07:
5281 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
5282 ; DARWIN-64-PIC-NEXT:   ret
5283 }
5284
5285 define i8* @bar08() nounwind {
5286 entry:
5287         ret i8* bitcast (i32** @lptr to i8*)
5288 ; LINUX-64-STATIC: bar08:
5289 ; LINUX-64-STATIC: movl    $lptr, %eax
5290 ; LINUX-64-STATIC: ret
5291
5292 ; LINUX-32-STATIC: bar08:
5293 ; LINUX-32-STATIC:      movl    $lptr, %eax
5294 ; LINUX-32-STATIC-NEXT:         ret
5295
5296 ; LINUX-32-PIC: bar08:
5297 ; LINUX-32-PIC:         movl    $lptr, %eax
5298 ; LINUX-32-PIC-NEXT:    ret
5299
5300 ; LINUX-64-PIC: bar08:
5301 ; LINUX-64-PIC:         leaq    lptr(%rip), %rax
5302 ; LINUX-64-PIC-NEXT:    ret
5303
5304 ; DARWIN-32-STATIC: _bar08:
5305 ; DARWIN-32-STATIC:     movl    $_lptr, %eax
5306 ; DARWIN-32-STATIC-NEXT:        ret
5307
5308 ; DARWIN-32-DYNAMIC: _bar08:
5309 ; DARWIN-32-DYNAMIC:    movl    $_lptr, %eax
5310 ; DARWIN-32-DYNAMIC-NEXT:       ret
5311
5312 ; DARWIN-32-PIC: _bar08:
5313 ; DARWIN-32-PIC:        calll   L76$pb
5314 ; DARWIN-32-PIC-NEXT: L76$pb:
5315 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5316 ; DARWIN-32-PIC-NEXT:   leal    _lptr-L76$pb([[EAX]]), %eax
5317 ; DARWIN-32-PIC-NEXT:   ret
5318
5319 ; DARWIN-64-STATIC: _bar08:
5320 ; DARWIN-64-STATIC:     leaq    _lptr(%rip), %rax
5321 ; DARWIN-64-STATIC-NEXT:        ret
5322
5323 ; DARWIN-64-DYNAMIC: _bar08:
5324 ; DARWIN-64-DYNAMIC:    leaq    _lptr(%rip), %rax
5325 ; DARWIN-64-DYNAMIC-NEXT:       ret
5326
5327 ; DARWIN-64-PIC: _bar08:
5328 ; DARWIN-64-PIC:        leaq    _lptr(%rip), %rax
5329 ; DARWIN-64-PIC-NEXT:   ret
5330 }
5331
5332 define i8* @har00() nounwind {
5333 entry:
5334         ret i8* bitcast ([131072 x i32]* @src to i8*)
5335 ; LINUX-64-STATIC: har00:
5336 ; LINUX-64-STATIC: movl    $src, %eax
5337 ; LINUX-64-STATIC: ret
5338
5339 ; LINUX-32-STATIC: har00:
5340 ; LINUX-32-STATIC:      movl    $src, %eax
5341 ; LINUX-32-STATIC-NEXT:         ret
5342
5343 ; LINUX-32-PIC: har00:
5344 ; LINUX-32-PIC:         movl    $src, %eax
5345 ; LINUX-32-PIC-NEXT:    ret
5346
5347 ; LINUX-64-PIC: har00:
5348 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
5349 ; LINUX-64-PIC-NEXT:    ret
5350
5351 ; DARWIN-32-STATIC: _har00:
5352 ; DARWIN-32-STATIC:     movl    $_src, %eax
5353 ; DARWIN-32-STATIC-NEXT:        ret
5354
5355 ; DARWIN-32-DYNAMIC: _har00:
5356 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
5357 ; DARWIN-32-DYNAMIC-NEXT:       ret
5358
5359 ; DARWIN-32-PIC: _har00:
5360 ; DARWIN-32-PIC:        calll   L77$pb
5361 ; DARWIN-32-PIC-NEXT: L77$pb:
5362 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5363 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L77$pb([[EAX]]), %eax
5364 ; DARWIN-32-PIC-NEXT:   ret
5365
5366 ; DARWIN-64-STATIC: _har00:
5367 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
5368 ; DARWIN-64-STATIC-NEXT:        ret
5369
5370 ; DARWIN-64-DYNAMIC: _har00:
5371 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
5372 ; DARWIN-64-DYNAMIC-NEXT:       ret
5373
5374 ; DARWIN-64-PIC: _har00:
5375 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
5376 ; DARWIN-64-PIC-NEXT:   ret
5377 }
5378
5379 define i8* @hxr00() nounwind {
5380 entry:
5381         ret i8* bitcast ([32 x i32]* @xsrc to i8*)
5382 ; LINUX-64-STATIC: hxr00:
5383 ; LINUX-64-STATIC: movl    $xsrc, %eax
5384 ; LINUX-64-STATIC: ret
5385
5386 ; LINUX-32-STATIC: hxr00:
5387 ; LINUX-32-STATIC:      movl    $xsrc, %eax
5388 ; LINUX-32-STATIC-NEXT:         ret
5389
5390 ; LINUX-32-PIC: hxr00:
5391 ; LINUX-32-PIC:         movl    $xsrc, %eax
5392 ; LINUX-32-PIC-NEXT:    ret
5393
5394 ; LINUX-64-PIC: hxr00:
5395 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
5396 ; LINUX-64-PIC-NEXT:    ret
5397
5398 ; DARWIN-32-STATIC: _hxr00:
5399 ; DARWIN-32-STATIC:     movl    $_xsrc, %eax
5400 ; DARWIN-32-STATIC-NEXT:        ret
5401
5402 ; DARWIN-32-DYNAMIC: _hxr00:
5403 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
5404 ; DARWIN-32-DYNAMIC-NEXT:       ret
5405
5406 ; DARWIN-32-PIC: _hxr00:
5407 ; DARWIN-32-PIC:        calll   L78$pb
5408 ; DARWIN-32-PIC-NEXT: L78$pb:
5409 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5410 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L78$pb([[EAX]]), %eax
5411 ; DARWIN-32-PIC-NEXT:   ret
5412
5413 ; DARWIN-64-STATIC: _hxr00:
5414 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
5415 ; DARWIN-64-STATIC-NEXT:        ret
5416
5417 ; DARWIN-64-DYNAMIC: _hxr00:
5418 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
5419 ; DARWIN-64-DYNAMIC-NEXT:       ret
5420
5421 ; DARWIN-64-PIC: _hxr00:
5422 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
5423 ; DARWIN-64-PIC-NEXT:   ret
5424 }
5425
5426 define i8* @har01() nounwind {
5427 entry:
5428         ret i8* bitcast ([131072 x i32]* @dst to i8*)
5429 ; LINUX-64-STATIC: har01:
5430 ; LINUX-64-STATIC: movl    $dst, %eax
5431 ; LINUX-64-STATIC: ret
5432
5433 ; LINUX-32-STATIC: har01:
5434 ; LINUX-32-STATIC:      movl    $dst, %eax
5435 ; LINUX-32-STATIC-NEXT:         ret
5436
5437 ; LINUX-32-PIC: har01:
5438 ; LINUX-32-PIC:         movl    $dst, %eax
5439 ; LINUX-32-PIC-NEXT:    ret
5440
5441 ; LINUX-64-PIC: har01:
5442 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
5443 ; LINUX-64-PIC-NEXT:    ret
5444
5445 ; DARWIN-32-STATIC: _har01:
5446 ; DARWIN-32-STATIC:     movl    $_dst, %eax
5447 ; DARWIN-32-STATIC-NEXT:        ret
5448
5449 ; DARWIN-32-DYNAMIC: _har01:
5450 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
5451 ; DARWIN-32-DYNAMIC-NEXT:       ret
5452
5453 ; DARWIN-32-PIC: _har01:
5454 ; DARWIN-32-PIC:        calll   L79$pb
5455 ; DARWIN-32-PIC-NEXT: L79$pb:
5456 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5457 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L79$pb([[EAX]]), %eax
5458 ; DARWIN-32-PIC-NEXT:   ret
5459
5460 ; DARWIN-64-STATIC: _har01:
5461 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
5462 ; DARWIN-64-STATIC-NEXT:        ret
5463
5464 ; DARWIN-64-DYNAMIC: _har01:
5465 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
5466 ; DARWIN-64-DYNAMIC-NEXT:       ret
5467
5468 ; DARWIN-64-PIC: _har01:
5469 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
5470 ; DARWIN-64-PIC-NEXT:   ret
5471 }
5472
5473 define i8* @hxr01() nounwind {
5474 entry:
5475         ret i8* bitcast ([32 x i32]* @xdst to i8*)
5476 ; LINUX-64-STATIC: hxr01:
5477 ; LINUX-64-STATIC: movl    $xdst, %eax
5478 ; LINUX-64-STATIC: ret
5479
5480 ; LINUX-32-STATIC: hxr01:
5481 ; LINUX-32-STATIC:      movl    $xdst, %eax
5482 ; LINUX-32-STATIC-NEXT:         ret
5483
5484 ; LINUX-32-PIC: hxr01:
5485 ; LINUX-32-PIC:         movl    $xdst, %eax
5486 ; LINUX-32-PIC-NEXT:    ret
5487
5488 ; LINUX-64-PIC: hxr01:
5489 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
5490 ; LINUX-64-PIC-NEXT:    ret
5491
5492 ; DARWIN-32-STATIC: _hxr01:
5493 ; DARWIN-32-STATIC:     movl    $_xdst, %eax
5494 ; DARWIN-32-STATIC-NEXT:        ret
5495
5496 ; DARWIN-32-DYNAMIC: _hxr01:
5497 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
5498 ; DARWIN-32-DYNAMIC-NEXT:       ret
5499
5500 ; DARWIN-32-PIC: _hxr01:
5501 ; DARWIN-32-PIC:        calll   L80$pb
5502 ; DARWIN-32-PIC-NEXT: L80$pb:
5503 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5504 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L80$pb([[EAX]]), %eax
5505 ; DARWIN-32-PIC-NEXT:   ret
5506
5507 ; DARWIN-64-STATIC: _hxr01:
5508 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
5509 ; DARWIN-64-STATIC-NEXT:        ret
5510
5511 ; DARWIN-64-DYNAMIC: _hxr01:
5512 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
5513 ; DARWIN-64-DYNAMIC-NEXT:       ret
5514
5515 ; DARWIN-64-PIC: _hxr01:
5516 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
5517 ; DARWIN-64-PIC-NEXT:   ret
5518 }
5519
5520 define i8* @har02() nounwind {
5521 entry:
5522         %0 = load i32** @ptr, align 8
5523         %1 = bitcast i32* %0 to i8*
5524         ret i8* %1
5525 ; LINUX-64-STATIC: har02:
5526 ; LINUX-64-STATIC: movq    ptr(%rip), %rax
5527 ; LINUX-64-STATIC: ret
5528
5529 ; LINUX-32-STATIC: har02:
5530 ; LINUX-32-STATIC:      movl    ptr, %eax
5531 ; LINUX-32-STATIC-NEXT:         ret
5532
5533 ; LINUX-32-PIC: har02:
5534 ; LINUX-32-PIC:         movl    ptr, %eax
5535 ; LINUX-32-PIC-NEXT:    ret
5536
5537 ; LINUX-64-PIC: har02:
5538 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5539 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), %rax
5540 ; LINUX-64-PIC-NEXT:    ret
5541
5542 ; DARWIN-32-STATIC: _har02:
5543 ; DARWIN-32-STATIC:     movl    _ptr, %eax
5544 ; DARWIN-32-STATIC-NEXT:        ret
5545
5546 ; DARWIN-32-DYNAMIC: _har02:
5547 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[EAX:%e.x]]
5548 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), %eax
5549 ; DARWIN-32-DYNAMIC-NEXT:       ret
5550
5551 ; DARWIN-32-PIC: _har02:
5552 ; DARWIN-32-PIC:        calll   L81$pb
5553 ; DARWIN-32-PIC-NEXT: L81$pb:
5554 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5555 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L81$pb([[EAX]]), [[EAX:%e.x]]
5556 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), %eax
5557 ; DARWIN-32-PIC-NEXT:   ret
5558
5559 ; DARWIN-64-STATIC: _har02:
5560 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5561 ; DARWIN-64-STATIC-NEXT:        movq    ([[RAX]]), %rax
5562 ; DARWIN-64-STATIC-NEXT:        ret
5563
5564 ; DARWIN-64-DYNAMIC: _har02:
5565 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5566 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RAX]]), %rax
5567 ; DARWIN-64-DYNAMIC-NEXT:       ret
5568
5569 ; DARWIN-64-PIC: _har02:
5570 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5571 ; DARWIN-64-PIC-NEXT:   movq    ([[RAX]]), %rax
5572 ; DARWIN-64-PIC-NEXT:   ret
5573 }
5574
5575 define i8* @har03() nounwind {
5576 entry:
5577         ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
5578 ; LINUX-64-STATIC: har03:
5579 ; LINUX-64-STATIC: movl    $dsrc, %eax
5580 ; LINUX-64-STATIC: ret
5581
5582 ; LINUX-32-STATIC: har03:
5583 ; LINUX-32-STATIC:      movl    $dsrc, %eax
5584 ; LINUX-32-STATIC-NEXT:         ret
5585
5586 ; LINUX-32-PIC: har03:
5587 ; LINUX-32-PIC:         movl    $dsrc, %eax
5588 ; LINUX-32-PIC-NEXT:    ret
5589
5590 ; LINUX-64-PIC: har03:
5591 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
5592 ; LINUX-64-PIC-NEXT:    ret
5593
5594 ; DARWIN-32-STATIC: _har03:
5595 ; DARWIN-32-STATIC:     movl    $_dsrc, %eax
5596 ; DARWIN-32-STATIC-NEXT:        ret
5597
5598 ; DARWIN-32-DYNAMIC: _har03:
5599 ; DARWIN-32-DYNAMIC:    movl    $_dsrc, %eax
5600 ; DARWIN-32-DYNAMIC-NEXT:       ret
5601
5602 ; DARWIN-32-PIC: _har03:
5603 ; DARWIN-32-PIC:        calll   L82$pb
5604 ; DARWIN-32-PIC-NEXT: L82$pb:
5605 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5606 ; DARWIN-32-PIC-NEXT:   leal    _dsrc-L82$pb([[EAX]]), %eax
5607 ; DARWIN-32-PIC-NEXT:   ret
5608
5609 ; DARWIN-64-STATIC: _har03:
5610 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
5611 ; DARWIN-64-STATIC-NEXT:        ret
5612
5613 ; DARWIN-64-DYNAMIC: _har03:
5614 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
5615 ; DARWIN-64-DYNAMIC-NEXT:       ret
5616
5617 ; DARWIN-64-PIC: _har03:
5618 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
5619 ; DARWIN-64-PIC-NEXT:   ret
5620 }
5621
5622 define i8* @har04() nounwind {
5623 entry:
5624         ret i8* bitcast ([131072 x i32]* @ddst to i8*)
5625 ; LINUX-64-STATIC: har04:
5626 ; LINUX-64-STATIC: movl    $ddst, %eax
5627 ; LINUX-64-STATIC: ret
5628
5629 ; LINUX-32-STATIC: har04:
5630 ; LINUX-32-STATIC:      movl    $ddst, %eax
5631 ; LINUX-32-STATIC-NEXT:         ret
5632
5633 ; LINUX-32-PIC: har04:
5634 ; LINUX-32-PIC:         movl    $ddst, %eax
5635 ; LINUX-32-PIC-NEXT:    ret
5636
5637 ; LINUX-64-PIC: har04:
5638 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
5639 ; LINUX-64-PIC-NEXT:    ret
5640
5641 ; DARWIN-32-STATIC: _har04:
5642 ; DARWIN-32-STATIC:     movl    $_ddst, %eax
5643 ; DARWIN-32-STATIC-NEXT:        ret
5644
5645 ; DARWIN-32-DYNAMIC: _har04:
5646 ; DARWIN-32-DYNAMIC:    movl    $_ddst, %eax
5647 ; DARWIN-32-DYNAMIC-NEXT:       ret
5648
5649 ; DARWIN-32-PIC: _har04:
5650 ; DARWIN-32-PIC:        calll   L83$pb
5651 ; DARWIN-32-PIC-NEXT: L83$pb:
5652 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5653 ; DARWIN-32-PIC-NEXT:   leal    _ddst-L83$pb([[EAX]]), %eax
5654 ; DARWIN-32-PIC-NEXT:   ret
5655
5656 ; DARWIN-64-STATIC: _har04:
5657 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
5658 ; DARWIN-64-STATIC-NEXT:        ret
5659
5660 ; DARWIN-64-DYNAMIC: _har04:
5661 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
5662 ; DARWIN-64-DYNAMIC-NEXT:       ret
5663
5664 ; DARWIN-64-PIC: _har04:
5665 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
5666 ; DARWIN-64-PIC-NEXT:   ret
5667 }
5668
5669 define i8* @har05() nounwind {
5670 entry:
5671         %0 = load i32** @dptr, align 8
5672         %1 = bitcast i32* %0 to i8*
5673         ret i8* %1
5674 ; LINUX-64-STATIC: har05:
5675 ; LINUX-64-STATIC: movq    dptr(%rip), %rax
5676 ; LINUX-64-STATIC: ret
5677
5678 ; LINUX-32-STATIC: har05:
5679 ; LINUX-32-STATIC:      movl    dptr, %eax
5680 ; LINUX-32-STATIC-NEXT:         ret
5681
5682 ; LINUX-32-PIC: har05:
5683 ; LINUX-32-PIC:         movl    dptr, %eax
5684 ; LINUX-32-PIC-NEXT:    ret
5685
5686 ; LINUX-64-PIC: har05:
5687 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
5688 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), %rax
5689 ; LINUX-64-PIC-NEXT:    ret
5690
5691 ; DARWIN-32-STATIC: _har05:
5692 ; DARWIN-32-STATIC:     movl    _dptr, %eax
5693 ; DARWIN-32-STATIC-NEXT:        ret
5694
5695 ; DARWIN-32-DYNAMIC: _har05:
5696 ; DARWIN-32-DYNAMIC:    movl    _dptr, %eax
5697 ; DARWIN-32-DYNAMIC-NEXT:       ret
5698
5699 ; DARWIN-32-PIC: _har05:
5700 ; DARWIN-32-PIC:        calll   L84$pb
5701 ; DARWIN-32-PIC-NEXT: L84$pb:
5702 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5703 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L84$pb([[EAX]]), %eax
5704 ; DARWIN-32-PIC-NEXT:   ret
5705
5706 ; DARWIN-64-STATIC: _har05:
5707 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
5708 ; DARWIN-64-STATIC-NEXT:        ret
5709
5710 ; DARWIN-64-DYNAMIC: _har05:
5711 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
5712 ; DARWIN-64-DYNAMIC-NEXT:       ret
5713
5714 ; DARWIN-64-PIC: _har05:
5715 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
5716 ; DARWIN-64-PIC-NEXT:   ret
5717 }
5718
5719 define i8* @har06() nounwind {
5720 entry:
5721         ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
5722 ; LINUX-64-STATIC: har06:
5723 ; LINUX-64-STATIC: movl    $lsrc, %eax
5724 ; LINUX-64-STATIC: ret
5725
5726 ; LINUX-32-STATIC: har06:
5727 ; LINUX-32-STATIC:      movl    $lsrc, %eax
5728 ; LINUX-32-STATIC-NEXT:         ret
5729
5730 ; LINUX-32-PIC: har06:
5731 ; LINUX-32-PIC:         movl    $lsrc, %eax
5732 ; LINUX-32-PIC-NEXT:    ret
5733
5734 ; LINUX-64-PIC: har06:
5735 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
5736 ; LINUX-64-PIC-NEXT:    ret
5737
5738 ; DARWIN-32-STATIC: _har06:
5739 ; DARWIN-32-STATIC:     movl    $_lsrc, %eax
5740 ; DARWIN-32-STATIC-NEXT:        ret
5741
5742 ; DARWIN-32-DYNAMIC: _har06:
5743 ; DARWIN-32-DYNAMIC:    movl    $_lsrc, %eax
5744 ; DARWIN-32-DYNAMIC-NEXT:       ret
5745
5746 ; DARWIN-32-PIC: _har06:
5747 ; DARWIN-32-PIC:        calll   L85$pb
5748 ; DARWIN-32-PIC-NEXT: L85$pb:
5749 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5750 ; DARWIN-32-PIC-NEXT:   leal    _lsrc-L85$pb([[EAX]]), %eax
5751 ; DARWIN-32-PIC-NEXT:   ret
5752
5753 ; DARWIN-64-STATIC: _har06:
5754 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
5755 ; DARWIN-64-STATIC-NEXT:        ret
5756
5757 ; DARWIN-64-DYNAMIC: _har06:
5758 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
5759 ; DARWIN-64-DYNAMIC-NEXT:       ret
5760
5761 ; DARWIN-64-PIC: _har06:
5762 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
5763 ; DARWIN-64-PIC-NEXT:   ret
5764 }
5765
5766 define i8* @har07() nounwind {
5767 entry:
5768         ret i8* bitcast ([131072 x i32]* @ldst to i8*)
5769 ; LINUX-64-STATIC: har07:
5770 ; LINUX-64-STATIC: movl    $ldst, %eax
5771 ; LINUX-64-STATIC: ret
5772
5773 ; LINUX-32-STATIC: har07:
5774 ; LINUX-32-STATIC:      movl    $ldst, %eax
5775 ; LINUX-32-STATIC-NEXT:         ret
5776
5777 ; LINUX-32-PIC: har07:
5778 ; LINUX-32-PIC:         movl    $ldst, %eax
5779 ; LINUX-32-PIC-NEXT:    ret
5780
5781 ; LINUX-64-PIC: har07:
5782 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
5783 ; LINUX-64-PIC-NEXT:    ret
5784
5785 ; DARWIN-32-STATIC: _har07:
5786 ; DARWIN-32-STATIC:     movl    $_ldst, %eax
5787 ; DARWIN-32-STATIC-NEXT:        ret
5788
5789 ; DARWIN-32-DYNAMIC: _har07:
5790 ; DARWIN-32-DYNAMIC:    movl    $_ldst, %eax
5791 ; DARWIN-32-DYNAMIC-NEXT:       ret
5792
5793 ; DARWIN-32-PIC: _har07:
5794 ; DARWIN-32-PIC:        calll   L86$pb
5795 ; DARWIN-32-PIC-NEXT: L86$pb:
5796 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5797 ; DARWIN-32-PIC-NEXT:   leal    _ldst-L86$pb([[EAX]]), %eax
5798 ; DARWIN-32-PIC-NEXT:   ret
5799
5800 ; DARWIN-64-STATIC: _har07:
5801 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
5802 ; DARWIN-64-STATIC-NEXT:        ret
5803
5804 ; DARWIN-64-DYNAMIC: _har07:
5805 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
5806 ; DARWIN-64-DYNAMIC-NEXT:       ret
5807
5808 ; DARWIN-64-PIC: _har07:
5809 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
5810 ; DARWIN-64-PIC-NEXT:   ret
5811 }
5812
5813 define i8* @har08() nounwind {
5814 entry:
5815         %0 = load i32** @lptr, align 8
5816         %1 = bitcast i32* %0 to i8*
5817         ret i8* %1
5818 ; LINUX-64-STATIC: har08:
5819 ; LINUX-64-STATIC: movq    lptr(%rip), %rax
5820 ; LINUX-64-STATIC: ret
5821
5822 ; LINUX-32-STATIC: har08:
5823 ; LINUX-32-STATIC:      movl    lptr, %eax
5824 ; LINUX-32-STATIC-NEXT:         ret
5825
5826 ; LINUX-32-PIC: har08:
5827 ; LINUX-32-PIC:         movl    lptr, %eax
5828 ; LINUX-32-PIC-NEXT:    ret
5829
5830 ; LINUX-64-PIC: har08:
5831 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
5832 ; LINUX-64-PIC-NEXT:    ret
5833
5834 ; DARWIN-32-STATIC: _har08:
5835 ; DARWIN-32-STATIC:     movl    _lptr, %eax
5836 ; DARWIN-32-STATIC-NEXT:        ret
5837
5838 ; DARWIN-32-DYNAMIC: _har08:
5839 ; DARWIN-32-DYNAMIC:    movl    _lptr, %eax
5840 ; DARWIN-32-DYNAMIC-NEXT:       ret
5841
5842 ; DARWIN-32-PIC: _har08:
5843 ; DARWIN-32-PIC:        calll   L87$pb
5844 ; DARWIN-32-PIC-NEXT: L87$pb:
5845 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5846 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L87$pb([[EAX]]), %eax
5847 ; DARWIN-32-PIC-NEXT:   ret
5848
5849 ; DARWIN-64-STATIC: _har08:
5850 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
5851 ; DARWIN-64-STATIC-NEXT:        ret
5852
5853 ; DARWIN-64-DYNAMIC: _har08:
5854 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
5855 ; DARWIN-64-DYNAMIC-NEXT:       ret
5856
5857 ; DARWIN-64-PIC: _har08:
5858 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
5859 ; DARWIN-64-PIC-NEXT:   ret
5860 }
5861
5862 define i8* @bat00() nounwind {
5863 entry:
5864         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
5865 ; LINUX-64-STATIC: bat00:
5866 ; LINUX-64-STATIC: movl    $src+64, %eax
5867 ; LINUX-64-STATIC: ret
5868
5869 ; LINUX-32-STATIC: bat00:
5870 ; LINUX-32-STATIC:      movl    $src+64, %eax
5871 ; LINUX-32-STATIC-NEXT:         ret
5872
5873 ; LINUX-32-PIC: bat00:
5874 ; LINUX-32-PIC:         movl    $src+64, %eax
5875 ; LINUX-32-PIC-NEXT:    ret
5876
5877 ; LINUX-64-PIC: bat00:
5878 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
5879 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5880 ; LINUX-64-PIC-NEXT:    ret
5881
5882 ; DARWIN-32-STATIC: _bat00:
5883 ; DARWIN-32-STATIC:     movl    $_src+64, %eax
5884 ; DARWIN-32-STATIC-NEXT:        ret
5885
5886 ; DARWIN-32-DYNAMIC: _bat00:
5887 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
5888 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
5889 ; DARWIN-32-DYNAMIC-NEXT:       ret
5890
5891 ; DARWIN-32-PIC: _bat00:
5892 ; DARWIN-32-PIC:        calll   L88$pb
5893 ; DARWIN-32-PIC-NEXT: L88$pb:
5894 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5895 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L88$pb([[EAX]]), %eax
5896 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
5897 ; DARWIN-32-PIC-NEXT:   ret
5898
5899 ; DARWIN-64-STATIC: _bat00:
5900 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
5901 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
5902 ; DARWIN-64-STATIC-NEXT:        ret
5903
5904 ; DARWIN-64-DYNAMIC: _bat00:
5905 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
5906 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
5907 ; DARWIN-64-DYNAMIC-NEXT:       ret
5908
5909 ; DARWIN-64-PIC: _bat00:
5910 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
5911 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
5912 ; DARWIN-64-PIC-NEXT:   ret
5913 }
5914
5915 define i8* @bxt00() nounwind {
5916 entry:
5917         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
5918 ; LINUX-64-STATIC: bxt00:
5919 ; LINUX-64-STATIC: movl    $xsrc+64, %eax
5920 ; LINUX-64-STATIC: ret
5921
5922 ; LINUX-32-STATIC: bxt00:
5923 ; LINUX-32-STATIC:      movl    $xsrc+64, %eax
5924 ; LINUX-32-STATIC-NEXT:         ret
5925
5926 ; LINUX-32-PIC: bxt00:
5927 ; LINUX-32-PIC:         movl    $xsrc+64, %eax
5928 ; LINUX-32-PIC-NEXT:    ret
5929
5930 ; LINUX-64-PIC: bxt00:
5931 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
5932 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5933 ; LINUX-64-PIC-NEXT:    ret
5934
5935 ; DARWIN-32-STATIC: _bxt00:
5936 ; DARWIN-32-STATIC:     movl    $_xsrc+64, %eax
5937 ; DARWIN-32-STATIC-NEXT:        ret
5938
5939 ; DARWIN-32-DYNAMIC: _bxt00:
5940 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
5941 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
5942 ; DARWIN-32-DYNAMIC-NEXT:       ret
5943
5944 ; DARWIN-32-PIC: _bxt00:
5945 ; DARWIN-32-PIC:        calll   L89$pb
5946 ; DARWIN-32-PIC-NEXT: L89$pb:
5947 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5948 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L89$pb([[EAX]]), %eax
5949 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
5950 ; DARWIN-32-PIC-NEXT:   ret
5951
5952 ; DARWIN-64-STATIC: _bxt00:
5953 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
5954 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
5955 ; DARWIN-64-STATIC-NEXT:        ret
5956
5957 ; DARWIN-64-DYNAMIC: _bxt00:
5958 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
5959 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
5960 ; DARWIN-64-DYNAMIC-NEXT:       ret
5961
5962 ; DARWIN-64-PIC: _bxt00:
5963 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
5964 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
5965 ; DARWIN-64-PIC-NEXT:   ret
5966 }
5967
5968 define i8* @bat01() nounwind {
5969 entry:
5970         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
5971 ; LINUX-64-STATIC: bat01:
5972 ; LINUX-64-STATIC: movl    $dst+64, %eax
5973 ; LINUX-64-STATIC: ret
5974
5975 ; LINUX-32-STATIC: bat01:
5976 ; LINUX-32-STATIC:      movl    $dst+64, %eax
5977 ; LINUX-32-STATIC-NEXT:         ret
5978
5979 ; LINUX-32-PIC: bat01:
5980 ; LINUX-32-PIC:         movl    $dst+64, %eax
5981 ; LINUX-32-PIC-NEXT:    ret
5982
5983 ; LINUX-64-PIC: bat01:
5984 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
5985 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5986 ; LINUX-64-PIC-NEXT:    ret
5987
5988 ; DARWIN-32-STATIC: _bat01:
5989 ; DARWIN-32-STATIC:     movl    $_dst+64, %eax
5990 ; DARWIN-32-STATIC-NEXT:        ret
5991
5992 ; DARWIN-32-DYNAMIC: _bat01:
5993 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
5994 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
5995 ; DARWIN-32-DYNAMIC-NEXT:       ret
5996
5997 ; DARWIN-32-PIC: _bat01:
5998 ; DARWIN-32-PIC:        calll   L90$pb
5999 ; DARWIN-32-PIC-NEXT: L90$pb:
6000 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6001 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L90$pb([[EAX]]), %eax
6002 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6003 ; DARWIN-32-PIC-NEXT:   ret
6004
6005 ; DARWIN-64-STATIC: _bat01:
6006 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
6007 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6008 ; DARWIN-64-STATIC-NEXT:        ret
6009
6010 ; DARWIN-64-DYNAMIC: _bat01:
6011 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
6012 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6013 ; DARWIN-64-DYNAMIC-NEXT:       ret
6014
6015 ; DARWIN-64-PIC: _bat01:
6016 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
6017 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6018 ; DARWIN-64-PIC-NEXT:   ret
6019 }
6020
6021 define i8* @bxt01() nounwind {
6022 entry:
6023         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
6024 ; LINUX-64-STATIC: bxt01:
6025 ; LINUX-64-STATIC: movl    $xdst+64, %eax
6026 ; LINUX-64-STATIC: ret
6027
6028 ; LINUX-32-STATIC: bxt01:
6029 ; LINUX-32-STATIC:      movl    $xdst+64, %eax
6030 ; LINUX-32-STATIC-NEXT:         ret
6031
6032 ; LINUX-32-PIC: bxt01:
6033 ; LINUX-32-PIC:         movl    $xdst+64, %eax
6034 ; LINUX-32-PIC-NEXT:    ret
6035
6036 ; LINUX-64-PIC: bxt01:
6037 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
6038 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6039 ; LINUX-64-PIC-NEXT:    ret
6040
6041 ; DARWIN-32-STATIC: _bxt01:
6042 ; DARWIN-32-STATIC:     movl    $_xdst+64, %eax
6043 ; DARWIN-32-STATIC-NEXT:        ret
6044
6045 ; DARWIN-32-DYNAMIC: _bxt01:
6046 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
6047 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6048 ; DARWIN-32-DYNAMIC-NEXT:       ret
6049
6050 ; DARWIN-32-PIC: _bxt01:
6051 ; DARWIN-32-PIC:        calll   L91$pb
6052 ; DARWIN-32-PIC-NEXT: L91$pb:
6053 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6054 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L91$pb([[EAX]]), %eax
6055 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6056 ; DARWIN-32-PIC-NEXT:   ret
6057
6058 ; DARWIN-64-STATIC: _bxt01:
6059 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
6060 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6061 ; DARWIN-64-STATIC-NEXT:        ret
6062
6063 ; DARWIN-64-DYNAMIC: _bxt01:
6064 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
6065 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6066 ; DARWIN-64-DYNAMIC-NEXT:       ret
6067
6068 ; DARWIN-64-PIC: _bxt01:
6069 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
6070 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6071 ; DARWIN-64-PIC-NEXT:   ret
6072 }
6073
6074 define i8* @bat02() nounwind {
6075 entry:
6076         %0 = load i32** @ptr, align 8
6077         %1 = getelementptr i32* %0, i64 16
6078         %2 = bitcast i32* %1 to i8*
6079         ret i8* %2
6080 ; LINUX-64-STATIC: bat02:
6081 ; LINUX-64-STATIC: movq    ptr(%rip), %rax
6082 ; LINUX-64-STATIC: addq    $64, %rax
6083 ; LINUX-64-STATIC: ret
6084
6085 ; LINUX-32-STATIC: bat02:
6086 ; LINUX-32-STATIC:      movl    ptr, %eax
6087 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6088 ; LINUX-32-STATIC-NEXT:         ret
6089
6090 ; LINUX-32-PIC: bat02:
6091 ; LINUX-32-PIC:         movl    ptr, %eax
6092 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6093 ; LINUX-32-PIC-NEXT:    ret
6094
6095 ; LINUX-64-PIC: bat02:
6096 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6097 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), %rax
6098 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6099 ; LINUX-64-PIC-NEXT:    ret
6100
6101 ; DARWIN-32-STATIC: _bat02:
6102 ; DARWIN-32-STATIC:     movl    _ptr, %eax
6103 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6104 ; DARWIN-32-STATIC-NEXT:        ret
6105
6106 ; DARWIN-32-DYNAMIC: _bat02:
6107 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[EAX:%e.x]]
6108 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
6109 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6110 ; DARWIN-32-DYNAMIC-NEXT:       ret
6111
6112 ; DARWIN-32-PIC: _bat02:
6113 ; DARWIN-32-PIC:        calll   L92$pb
6114 ; DARWIN-32-PIC-NEXT: L92$pb:
6115 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6116 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L92$pb([[EAX]]), [[EAX:%e.x]]
6117 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), %eax
6118 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6119 ; DARWIN-32-PIC-NEXT:   ret
6120
6121 ; DARWIN-64-STATIC: _bat02:
6122 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6123 ; DARWIN-64-STATIC-NEXT:        movq    ([[RAX]]), %rax
6124 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6125 ; DARWIN-64-STATIC-NEXT:        ret
6126
6127 ; DARWIN-64-DYNAMIC: _bat02:
6128 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6129 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RAX]]), [[RAX:%r.x]]
6130 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6131 ; DARWIN-64-DYNAMIC-NEXT:       ret
6132
6133 ; DARWIN-64-PIC: _bat02:
6134 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6135 ; DARWIN-64-PIC-NEXT:   movq    ([[RAX]]), %rax
6136 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6137 ; DARWIN-64-PIC-NEXT:   ret
6138 }
6139
6140 define i8* @bat03() nounwind {
6141 entry:
6142         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
6143 ; LINUX-64-STATIC: bat03:
6144 ; LINUX-64-STATIC: movl    $dsrc+64, %eax
6145 ; LINUX-64-STATIC: ret
6146
6147 ; LINUX-32-STATIC: bat03:
6148 ; LINUX-32-STATIC:      movl    $dsrc+64, %eax
6149 ; LINUX-32-STATIC-NEXT:         ret
6150
6151 ; LINUX-32-PIC: bat03:
6152 ; LINUX-32-PIC:         movl    $dsrc+64, %eax
6153 ; LINUX-32-PIC-NEXT:    ret
6154
6155 ; LINUX-64-PIC: bat03:
6156 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
6157 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6158 ; LINUX-64-PIC-NEXT:    ret
6159
6160 ; DARWIN-32-STATIC: _bat03:
6161 ; DARWIN-32-STATIC:     movl    $_dsrc+64, %eax
6162 ; DARWIN-32-STATIC-NEXT:        ret
6163
6164 ; DARWIN-32-DYNAMIC: _bat03:
6165 ; DARWIN-32-DYNAMIC:    movl    $_dsrc+64, %eax
6166 ; DARWIN-32-DYNAMIC-NEXT:       ret
6167
6168 ; DARWIN-32-PIC: _bat03:
6169 ; DARWIN-32-PIC:        calll   L93$pb
6170 ; DARWIN-32-PIC-NEXT: L93$pb:
6171 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6172 ; DARWIN-32-PIC-NEXT:   leal    (_dsrc-L93$pb)+64([[EAX]]), %eax
6173 ; DARWIN-32-PIC-NEXT:   ret
6174
6175 ; DARWIN-64-STATIC: _bat03:
6176 ; DARWIN-64-STATIC:     leaq    _dsrc+64(%rip), %rax
6177 ; DARWIN-64-STATIC-NEXT:        ret
6178
6179 ; DARWIN-64-DYNAMIC: _bat03:
6180 ; DARWIN-64-DYNAMIC:    leaq    _dsrc+64(%rip), %rax
6181 ; DARWIN-64-DYNAMIC-NEXT:       ret
6182
6183 ; DARWIN-64-PIC: _bat03:
6184 ; DARWIN-64-PIC:        leaq    _dsrc+64(%rip), %rax
6185 ; DARWIN-64-PIC-NEXT:   ret
6186 }
6187
6188 define i8* @bat04() nounwind {
6189 entry:
6190         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
6191 ; LINUX-64-STATIC: bat04:
6192 ; LINUX-64-STATIC: movl    $ddst+64, %eax
6193 ; LINUX-64-STATIC: ret
6194
6195 ; LINUX-32-STATIC: bat04:
6196 ; LINUX-32-STATIC:      movl    $ddst+64, %eax
6197 ; LINUX-32-STATIC-NEXT:         ret
6198
6199 ; LINUX-32-PIC: bat04:
6200 ; LINUX-32-PIC:         movl    $ddst+64, %eax
6201 ; LINUX-32-PIC-NEXT:    ret
6202
6203 ; LINUX-64-PIC: bat04:
6204 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
6205 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6206 ; LINUX-64-PIC-NEXT:    ret
6207
6208 ; DARWIN-32-STATIC: _bat04:
6209 ; DARWIN-32-STATIC:     movl    $_ddst+64, %eax
6210 ; DARWIN-32-STATIC-NEXT:        ret
6211
6212 ; DARWIN-32-DYNAMIC: _bat04:
6213 ; DARWIN-32-DYNAMIC:    movl    $_ddst+64, %eax
6214 ; DARWIN-32-DYNAMIC-NEXT:       ret
6215
6216 ; DARWIN-32-PIC: _bat04:
6217 ; DARWIN-32-PIC:        calll   L94$pb
6218 ; DARWIN-32-PIC-NEXT: L94$pb:
6219 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6220 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L94$pb)+64([[EAX]]), %eax
6221 ; DARWIN-32-PIC-NEXT:   ret
6222
6223 ; DARWIN-64-STATIC: _bat04:
6224 ; DARWIN-64-STATIC:     leaq    _ddst+64(%rip), %rax
6225 ; DARWIN-64-STATIC-NEXT:        ret
6226
6227 ; DARWIN-64-DYNAMIC: _bat04:
6228 ; DARWIN-64-DYNAMIC:    leaq    _ddst+64(%rip), %rax
6229 ; DARWIN-64-DYNAMIC-NEXT:       ret
6230
6231 ; DARWIN-64-PIC: _bat04:
6232 ; DARWIN-64-PIC:        leaq    _ddst+64(%rip), %rax
6233 ; DARWIN-64-PIC-NEXT:   ret
6234 }
6235
6236 define i8* @bat05() nounwind {
6237 entry:
6238         %0 = load i32** @dptr, align 8
6239         %1 = getelementptr i32* %0, i64 16
6240         %2 = bitcast i32* %1 to i8*
6241         ret i8* %2
6242 ; LINUX-64-STATIC: bat05:
6243 ; LINUX-64-STATIC: movq    dptr(%rip), %rax
6244 ; LINUX-64-STATIC: addq    $64, %rax
6245 ; LINUX-64-STATIC: ret
6246
6247 ; LINUX-32-STATIC: bat05:
6248 ; LINUX-32-STATIC:      movl    dptr, %eax
6249 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6250 ; LINUX-32-STATIC-NEXT:         ret
6251
6252 ; LINUX-32-PIC: bat05:
6253 ; LINUX-32-PIC:         movl    dptr, %eax
6254 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6255 ; LINUX-32-PIC-NEXT:    ret
6256
6257 ; LINUX-64-PIC: bat05:
6258 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
6259 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), %rax
6260 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6261 ; LINUX-64-PIC-NEXT:    ret
6262
6263 ; DARWIN-32-STATIC: _bat05:
6264 ; DARWIN-32-STATIC:     movl    _dptr, %eax
6265 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6266 ; DARWIN-32-STATIC-NEXT:        ret
6267
6268 ; DARWIN-32-DYNAMIC: _bat05:
6269 ; DARWIN-32-DYNAMIC:    movl    _dptr, %eax
6270 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6271 ; DARWIN-32-DYNAMIC-NEXT:       ret
6272
6273 ; DARWIN-32-PIC: _bat05:
6274 ; DARWIN-32-PIC:        calll   L95$pb
6275 ; DARWIN-32-PIC-NEXT: L95$pb:
6276 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6277 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L95$pb([[EAX]]), %eax
6278 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6279 ; DARWIN-32-PIC-NEXT:   ret
6280
6281 ; DARWIN-64-STATIC: _bat05:
6282 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
6283 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6284 ; DARWIN-64-STATIC-NEXT:        ret
6285
6286 ; DARWIN-64-DYNAMIC: _bat05:
6287 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
6288 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6289 ; DARWIN-64-DYNAMIC-NEXT:       ret
6290
6291 ; DARWIN-64-PIC: _bat05:
6292 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
6293 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6294 ; DARWIN-64-PIC-NEXT:   ret
6295 }
6296
6297 define i8* @bat06() nounwind {
6298 entry:
6299         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
6300 ; LINUX-64-STATIC: bat06:
6301 ; LINUX-64-STATIC: movl    $lsrc+64, %eax
6302 ; LINUX-64-STATIC: ret
6303
6304 ; LINUX-32-STATIC: bat06:
6305 ; LINUX-32-STATIC:      movl    $lsrc+64, %eax
6306 ; LINUX-32-STATIC-NEXT:         ret
6307
6308 ; LINUX-32-PIC: bat06:
6309 ; LINUX-32-PIC:         movl    $lsrc+64, %eax
6310 ; LINUX-32-PIC-NEXT:    ret
6311
6312 ; LINUX-64-PIC: bat06:
6313 ; LINUX-64-PIC:         leaq    lsrc+64(%rip), %rax
6314 ; LINUX-64-PIC-NEXT:    ret
6315
6316 ; DARWIN-32-STATIC: _bat06:
6317 ; DARWIN-32-STATIC:     movl    $_lsrc+64, %eax
6318 ; DARWIN-32-STATIC-NEXT:        ret
6319
6320 ; DARWIN-32-DYNAMIC: _bat06:
6321 ; DARWIN-32-DYNAMIC:    movl    $_lsrc+64, %eax
6322 ; DARWIN-32-DYNAMIC-NEXT:       ret
6323
6324 ; DARWIN-32-PIC: _bat06:
6325 ; DARWIN-32-PIC:        calll   L96$pb
6326 ; DARWIN-32-PIC-NEXT: L96$pb:
6327 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6328 ; DARWIN-32-PIC-NEXT:   leal    (_lsrc-L96$pb)+64([[EAX]]), %eax
6329 ; DARWIN-32-PIC-NEXT:   ret
6330
6331 ; DARWIN-64-STATIC: _bat06:
6332 ; DARWIN-64-STATIC:     leaq    _lsrc+64(%rip), %rax
6333 ; DARWIN-64-STATIC-NEXT:        ret
6334
6335 ; DARWIN-64-DYNAMIC: _bat06:
6336 ; DARWIN-64-DYNAMIC:    leaq    _lsrc+64(%rip), %rax
6337 ; DARWIN-64-DYNAMIC-NEXT:       ret
6338
6339 ; DARWIN-64-PIC: _bat06:
6340 ; DARWIN-64-PIC:        leaq    _lsrc+64(%rip), %rax
6341 ; DARWIN-64-PIC-NEXT:   ret
6342 }
6343
6344 define i8* @bat07() nounwind {
6345 entry:
6346         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
6347 ; LINUX-64-STATIC: bat07:
6348 ; LINUX-64-STATIC: movl    $ldst+64, %eax
6349 ; LINUX-64-STATIC: ret
6350
6351 ; LINUX-32-STATIC: bat07:
6352 ; LINUX-32-STATIC:      movl    $ldst+64, %eax
6353 ; LINUX-32-STATIC-NEXT:         ret
6354
6355 ; LINUX-32-PIC: bat07:
6356 ; LINUX-32-PIC:         movl    $ldst+64, %eax
6357 ; LINUX-32-PIC-NEXT:    ret
6358
6359 ; LINUX-64-PIC: bat07:
6360 ; LINUX-64-PIC:         leaq    ldst+64(%rip), %rax
6361 ; LINUX-64-PIC-NEXT:    ret
6362
6363 ; DARWIN-32-STATIC: _bat07:
6364 ; DARWIN-32-STATIC:     movl    $_ldst+64, %eax
6365 ; DARWIN-32-STATIC-NEXT:        ret
6366
6367 ; DARWIN-32-DYNAMIC: _bat07:
6368 ; DARWIN-32-DYNAMIC:    movl    $_ldst+64, %eax
6369 ; DARWIN-32-DYNAMIC-NEXT:       ret
6370
6371 ; DARWIN-32-PIC: _bat07:
6372 ; DARWIN-32-PIC:        calll   L97$pb
6373 ; DARWIN-32-PIC-NEXT: L97$pb:
6374 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6375 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L97$pb)+64([[EAX]]), %eax
6376 ; DARWIN-32-PIC-NEXT:   ret
6377
6378 ; DARWIN-64-STATIC: _bat07:
6379 ; DARWIN-64-STATIC:     leaq    _ldst+64(%rip), %rax
6380 ; DARWIN-64-STATIC-NEXT:        ret
6381
6382 ; DARWIN-64-DYNAMIC: _bat07:
6383 ; DARWIN-64-DYNAMIC:    leaq    _ldst+64(%rip), %rax
6384 ; DARWIN-64-DYNAMIC-NEXT:       ret
6385
6386 ; DARWIN-64-PIC: _bat07:
6387 ; DARWIN-64-PIC:        leaq    _ldst+64(%rip), %rax
6388 ; DARWIN-64-PIC-NEXT:   ret
6389 }
6390
6391 define i8* @bat08() nounwind {
6392 entry:
6393         %0 = load i32** @lptr, align 8
6394         %1 = getelementptr i32* %0, i64 16
6395         %2 = bitcast i32* %1 to i8*
6396         ret i8* %2
6397 ; LINUX-64-STATIC: bat08:
6398 ; LINUX-64-STATIC: movq    lptr(%rip), %rax
6399 ; LINUX-64-STATIC: addq    $64, %rax
6400 ; LINUX-64-STATIC: ret
6401
6402 ; LINUX-32-STATIC: bat08:
6403 ; LINUX-32-STATIC:      movl    lptr, %eax
6404 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6405 ; LINUX-32-STATIC-NEXT:         ret
6406
6407 ; LINUX-32-PIC: bat08:
6408 ; LINUX-32-PIC:         movl    lptr, %eax
6409 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6410 ; LINUX-32-PIC-NEXT:    ret
6411
6412 ; LINUX-64-PIC: bat08:
6413 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
6414 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6415 ; LINUX-64-PIC-NEXT:    ret
6416
6417 ; DARWIN-32-STATIC: _bat08:
6418 ; DARWIN-32-STATIC:     movl    _lptr, %eax
6419 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6420 ; DARWIN-32-STATIC-NEXT:        ret
6421
6422 ; DARWIN-32-DYNAMIC: _bat08:
6423 ; DARWIN-32-DYNAMIC:    movl    _lptr, %eax
6424 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6425 ; DARWIN-32-DYNAMIC-NEXT:       ret
6426
6427 ; DARWIN-32-PIC: _bat08:
6428 ; DARWIN-32-PIC:        calll   L98$pb
6429 ; DARWIN-32-PIC-NEXT: L98$pb:
6430 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6431 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L98$pb([[EAX]]), %eax
6432 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6433 ; DARWIN-32-PIC-NEXT:   ret
6434
6435 ; DARWIN-64-STATIC: _bat08:
6436 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
6437 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6438 ; DARWIN-64-STATIC-NEXT:        ret
6439
6440 ; DARWIN-64-DYNAMIC: _bat08:
6441 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
6442 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6443 ; DARWIN-64-DYNAMIC-NEXT:       ret
6444
6445 ; DARWIN-64-PIC: _bat08:
6446 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
6447 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6448 ; DARWIN-64-PIC-NEXT:   ret
6449 }
6450
6451 define i8* @bam00() nounwind {
6452 entry:
6453         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
6454 ; LINUX-64-STATIC: bam00:
6455 ; LINUX-64-STATIC: movl    $src+262144, %eax
6456 ; LINUX-64-STATIC: ret
6457
6458 ; LINUX-32-STATIC: bam00:
6459 ; LINUX-32-STATIC:      movl    $src+262144, %eax
6460 ; LINUX-32-STATIC-NEXT:         ret
6461
6462 ; LINUX-32-PIC: bam00:
6463 ; LINUX-32-PIC:         movl    $src+262144, %eax
6464 ; LINUX-32-PIC-NEXT:    ret
6465
6466 ; LINUX-64-PIC: bam00:
6467 ; LINUX-64-PIC:         movl    $262144, %eax
6468 ; LINUX-64-PIC-NEXT:    addq    src@GOTPCREL(%rip), %rax
6469 ; LINUX-64-PIC-NEXT:    ret
6470
6471 ; DARWIN-32-STATIC: _bam00:
6472 ; DARWIN-32-STATIC:     movl    $_src+262144, %eax
6473 ; DARWIN-32-STATIC-NEXT:        ret
6474
6475 ; DARWIN-32-DYNAMIC: _bam00:
6476 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6477 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_src$non_lazy_ptr, %eax
6478 ; DARWIN-32-DYNAMIC-NEXT:       ret
6479
6480 ; DARWIN-32-PIC: _bam00:
6481 ; DARWIN-32-PIC:        calll   L99$pb
6482 ; DARWIN-32-PIC-NEXT: L99$pb:
6483 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6484 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6485 ; DARWIN-32-PIC-NEXT:   addl    L_src$non_lazy_ptr-L99$pb([[ECX]]), %eax
6486 ; DARWIN-32-PIC-NEXT:   ret
6487
6488 ; DARWIN-64-STATIC: _bam00:
6489 ; DARWIN-64-STATIC:     movl    $262144, %eax
6490 ; DARWIN-64-STATIC-NEXT:        addq    _src@GOTPCREL(%rip), %rax
6491 ; DARWIN-64-STATIC-NEXT:        ret
6492
6493 ; DARWIN-64-DYNAMIC: _bam00:
6494 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6495 ; DARWIN-64-DYNAMIC-NEXT:       addq    _src@GOTPCREL(%rip), %rax
6496 ; DARWIN-64-DYNAMIC-NEXT:       ret
6497
6498 ; DARWIN-64-PIC: _bam00:
6499 ; DARWIN-64-PIC:        movl    $262144, %eax
6500 ; DARWIN-64-PIC-NEXT:   addq    _src@GOTPCREL(%rip), %rax
6501 ; DARWIN-64-PIC-NEXT:   ret
6502 }
6503
6504 define i8* @bam01() nounwind {
6505 entry:
6506         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
6507 ; LINUX-64-STATIC: bam01:
6508 ; LINUX-64-STATIC: movl    $dst+262144, %eax
6509 ; LINUX-64-STATIC: ret
6510
6511 ; LINUX-32-STATIC: bam01:
6512 ; LINUX-32-STATIC:      movl    $dst+262144, %eax
6513 ; LINUX-32-STATIC-NEXT:         ret
6514
6515 ; LINUX-32-PIC: bam01:
6516 ; LINUX-32-PIC:         movl    $dst+262144, %eax
6517 ; LINUX-32-PIC-NEXT:    ret
6518
6519 ; LINUX-64-PIC: bam01:
6520 ; LINUX-64-PIC:         movl    $262144, %eax
6521 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), %rax
6522 ; LINUX-64-PIC-NEXT:    ret
6523
6524 ; DARWIN-32-STATIC: _bam01:
6525 ; DARWIN-32-STATIC:     movl    $_dst+262144, %eax
6526 ; DARWIN-32-STATIC-NEXT:        ret
6527
6528 ; DARWIN-32-DYNAMIC: _bam01:
6529 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6530 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, %eax
6531 ; DARWIN-32-DYNAMIC-NEXT:       ret
6532
6533 ; DARWIN-32-PIC: _bam01:
6534 ; DARWIN-32-PIC:        calll   L100$pb
6535 ; DARWIN-32-PIC-NEXT: L100$pb:
6536 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6537 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6538 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-L100$pb([[ECX]]), %eax
6539 ; DARWIN-32-PIC-NEXT:   ret
6540
6541 ; DARWIN-64-STATIC: _bam01:
6542 ; DARWIN-64-STATIC:     movl    $262144, %eax
6543 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), %rax
6544 ; DARWIN-64-STATIC-NEXT:        ret
6545
6546 ; DARWIN-64-DYNAMIC: _bam01:
6547 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6548 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), %rax
6549 ; DARWIN-64-DYNAMIC-NEXT:       ret
6550
6551 ; DARWIN-64-PIC: _bam01:
6552 ; DARWIN-64-PIC:        movl    $262144, %eax
6553 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), %rax
6554 ; DARWIN-64-PIC-NEXT:   ret
6555 }
6556
6557 define i8* @bxm01() nounwind {
6558 entry:
6559         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
6560 ; LINUX-64-STATIC: bxm01:
6561 ; LINUX-64-STATIC: movl    $xdst+262144, %eax
6562 ; LINUX-64-STATIC: ret
6563
6564 ; LINUX-32-STATIC: bxm01:
6565 ; LINUX-32-STATIC:      movl    $xdst+262144, %eax
6566 ; LINUX-32-STATIC-NEXT:         ret
6567
6568 ; LINUX-32-PIC: bxm01:
6569 ; LINUX-32-PIC:         movl    $xdst+262144, %eax
6570 ; LINUX-32-PIC-NEXT:    ret
6571
6572 ; LINUX-64-PIC: bxm01:
6573 ; LINUX-64-PIC:         movl    $262144, %eax
6574 ; LINUX-64-PIC-NEXT:    addq    xdst@GOTPCREL(%rip), %rax
6575 ; LINUX-64-PIC-NEXT:    ret
6576
6577 ; DARWIN-32-STATIC: _bxm01:
6578 ; DARWIN-32-STATIC:     movl    $_xdst+262144, %eax
6579 ; DARWIN-32-STATIC-NEXT:        ret
6580
6581 ; DARWIN-32-DYNAMIC: _bxm01:
6582 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6583 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_xdst$non_lazy_ptr, %eax
6584 ; DARWIN-32-DYNAMIC-NEXT:       ret
6585
6586 ; DARWIN-32-PIC: _bxm01:
6587 ; DARWIN-32-PIC:        calll   L101$pb
6588 ; DARWIN-32-PIC-NEXT: L101$pb:
6589 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6590 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6591 ; DARWIN-32-PIC-NEXT:   addl    L_xdst$non_lazy_ptr-L101$pb([[ECX]]), %eax
6592 ; DARWIN-32-PIC-NEXT:   ret
6593
6594 ; DARWIN-64-STATIC: _bxm01:
6595 ; DARWIN-64-STATIC:     movl    $262144, %eax
6596 ; DARWIN-64-STATIC-NEXT:        addq    _xdst@GOTPCREL(%rip), %rax
6597 ; DARWIN-64-STATIC-NEXT:        ret
6598
6599 ; DARWIN-64-DYNAMIC: _bxm01:
6600 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6601 ; DARWIN-64-DYNAMIC-NEXT:       addq    _xdst@GOTPCREL(%rip), %rax
6602 ; DARWIN-64-DYNAMIC-NEXT:       ret
6603
6604 ; DARWIN-64-PIC: _bxm01:
6605 ; DARWIN-64-PIC:        movl    $262144, %eax
6606 ; DARWIN-64-PIC-NEXT:   addq    _xdst@GOTPCREL(%rip), %rax
6607 ; DARWIN-64-PIC-NEXT:   ret
6608 }
6609
6610 define i8* @bam02() nounwind {
6611 entry:
6612         %0 = load i32** @ptr, align 8
6613         %1 = getelementptr i32* %0, i64 65536
6614         %2 = bitcast i32* %1 to i8*
6615         ret i8* %2
6616 ; LINUX-64-STATIC: bam02:
6617 ; LINUX-64-STATIC: movl    $262144, %eax
6618 ; LINUX-64-STATIC: addq    ptr(%rip), %rax
6619 ; LINUX-64-STATIC: ret
6620
6621 ; LINUX-32-STATIC: bam02:
6622 ; LINUX-32-STATIC:      movl    $262144, %eax
6623 ; LINUX-32-STATIC-NEXT:         addl    ptr, %eax
6624 ; LINUX-32-STATIC-NEXT:         ret
6625
6626 ; LINUX-32-PIC: bam02:
6627 ; LINUX-32-PIC:         movl    $262144, %eax
6628 ; LINUX-32-PIC-NEXT:    addl    ptr, %eax
6629 ; LINUX-32-PIC-NEXT:    ret
6630
6631 ; LINUX-64-PIC: bam02:
6632 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6633 ; LINUX-64-PIC-NEXT:    movl    $262144, %eax
6634 ; LINUX-64-PIC-NEXT:    addq    ([[RCX]]), %rax
6635 ; LINUX-64-PIC-NEXT:    ret
6636
6637 ; DARWIN-32-STATIC: _bam02:
6638 ; DARWIN-32-STATIC:     movl    $262144, %eax
6639 ; DARWIN-32-STATIC-NEXT:        addl    _ptr, %eax
6640 ; DARWIN-32-STATIC-NEXT:        ret
6641
6642 ; DARWIN-32-DYNAMIC: _bam02:
6643 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
6644 ; DARWIN-32-DYNAMIC-NEXT:       movl    $262144, %eax
6645 ; DARWIN-32-DYNAMIC-NEXT:       addl    ([[ECX]]), %eax
6646 ; DARWIN-32-DYNAMIC-NEXT:       ret
6647
6648 ; DARWIN-32-PIC: _bam02:
6649 ; DARWIN-32-PIC:        calll   L102$pb
6650 ; DARWIN-32-PIC-NEXT: L102$pb:
6651 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6652 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L102$pb([[EAX]]), [[ECX:%e.x]]
6653 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6654 ; DARWIN-32-PIC-NEXT:   addl    ([[ECX]]), %eax
6655 ; DARWIN-32-PIC-NEXT:   ret
6656
6657 ; DARWIN-64-STATIC: _bam02:
6658 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6659 ; DARWIN-64-STATIC-NEXT:        movl    $262144, %eax
6660 ; DARWIN-64-STATIC-NEXT:        addq    ([[RCX]]), %rax
6661 ; DARWIN-64-STATIC-NEXT:        ret
6662
6663 ; DARWIN-64-DYNAMIC: _bam02:
6664 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6665 ; DARWIN-64-DYNAMIC-NEXT:       movl    $262144, %eax
6666 ; DARWIN-64-DYNAMIC-NEXT:       addq    ([[RCX]]), %rax
6667 ; DARWIN-64-DYNAMIC-NEXT:       ret
6668
6669 ; DARWIN-64-PIC: _bam02:
6670 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6671 ; DARWIN-64-PIC-NEXT:   movl    $262144, %eax
6672 ; DARWIN-64-PIC-NEXT:   addq    ([[RCX]]), %rax
6673 ; DARWIN-64-PIC-NEXT:   ret
6674 }
6675
6676 define i8* @bam03() nounwind {
6677 entry:
6678         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
6679 ; LINUX-64-STATIC: bam03:
6680 ; LINUX-64-STATIC: movl    $dsrc+262144, %eax
6681 ; LINUX-64-STATIC: ret
6682
6683 ; LINUX-32-STATIC: bam03:
6684 ; LINUX-32-STATIC:      movl    $dsrc+262144, %eax
6685 ; LINUX-32-STATIC-NEXT:         ret
6686
6687 ; LINUX-32-PIC: bam03:
6688 ; LINUX-32-PIC:         movl    $dsrc+262144, %eax
6689 ; LINUX-32-PIC-NEXT:    ret
6690
6691 ; LINUX-64-PIC: bam03:
6692 ; LINUX-64-PIC:         movl    $262144, %eax
6693 ; LINUX-64-PIC-NEXT:    addq    dsrc@GOTPCREL(%rip), %rax
6694 ; LINUX-64-PIC-NEXT:    ret
6695
6696 ; DARWIN-32-STATIC: _bam03:
6697 ; DARWIN-32-STATIC:     movl    $_dsrc+262144, %eax
6698 ; DARWIN-32-STATIC-NEXT:        ret
6699
6700 ; DARWIN-32-DYNAMIC: _bam03:
6701 ; DARWIN-32-DYNAMIC:    movl    $_dsrc+262144, %eax
6702 ; DARWIN-32-DYNAMIC-NEXT:       ret
6703
6704 ; DARWIN-32-PIC: _bam03:
6705 ; DARWIN-32-PIC:        calll   L103$pb
6706 ; DARWIN-32-PIC-NEXT: L103$pb:
6707 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6708 ; DARWIN-32-PIC-NEXT:   leal    (_dsrc-L103$pb)+262144([[EAX]]), %eax
6709 ; DARWIN-32-PIC-NEXT:   ret
6710
6711 ; DARWIN-64-STATIC: _bam03:
6712 ; DARWIN-64-STATIC:     leaq    _dsrc+262144(%rip), %rax
6713 ; DARWIN-64-STATIC-NEXT:        ret
6714
6715 ; DARWIN-64-DYNAMIC: _bam03:
6716 ; DARWIN-64-DYNAMIC:    leaq    _dsrc+262144(%rip), %rax
6717 ; DARWIN-64-DYNAMIC-NEXT:       ret
6718
6719 ; DARWIN-64-PIC: _bam03:
6720 ; DARWIN-64-PIC:        leaq    _dsrc+262144(%rip), %rax
6721 ; DARWIN-64-PIC-NEXT:   ret
6722 }
6723
6724 define i8* @bam04() nounwind {
6725 entry:
6726         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
6727 ; LINUX-64-STATIC: bam04:
6728 ; LINUX-64-STATIC: movl    $ddst+262144, %eax
6729 ; LINUX-64-STATIC: ret
6730
6731 ; LINUX-32-STATIC: bam04:
6732 ; LINUX-32-STATIC:      movl    $ddst+262144, %eax
6733 ; LINUX-32-STATIC-NEXT:         ret
6734
6735 ; LINUX-32-PIC: bam04:
6736 ; LINUX-32-PIC:         movl    $ddst+262144, %eax
6737 ; LINUX-32-PIC-NEXT:    ret
6738
6739 ; LINUX-64-PIC: bam04:
6740 ; LINUX-64-PIC:         movl    $262144, %eax
6741 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), %rax
6742 ; LINUX-64-PIC-NEXT:    ret
6743
6744 ; DARWIN-32-STATIC: _bam04:
6745 ; DARWIN-32-STATIC:     movl    $_ddst+262144, %eax
6746 ; DARWIN-32-STATIC-NEXT:        ret
6747
6748 ; DARWIN-32-DYNAMIC: _bam04:
6749 ; DARWIN-32-DYNAMIC:    movl    $_ddst+262144, %eax
6750 ; DARWIN-32-DYNAMIC-NEXT:       ret
6751
6752 ; DARWIN-32-PIC: _bam04:
6753 ; DARWIN-32-PIC:        calll   L104$pb
6754 ; DARWIN-32-PIC-NEXT: L104$pb:
6755 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6756 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L104$pb)+262144([[EAX]]), %eax
6757 ; DARWIN-32-PIC-NEXT:   ret
6758
6759 ; DARWIN-64-STATIC: _bam04:
6760 ; DARWIN-64-STATIC:     leaq    _ddst+262144(%rip), %rax
6761 ; DARWIN-64-STATIC-NEXT:        ret
6762
6763 ; DARWIN-64-DYNAMIC: _bam04:
6764 ; DARWIN-64-DYNAMIC:    leaq    _ddst+262144(%rip), %rax
6765 ; DARWIN-64-DYNAMIC-NEXT:       ret
6766
6767 ; DARWIN-64-PIC: _bam04:
6768 ; DARWIN-64-PIC:        leaq    _ddst+262144(%rip), %rax
6769 ; DARWIN-64-PIC-NEXT:   ret
6770 }
6771
6772 define i8* @bam05() nounwind {
6773 entry:
6774         %0 = load i32** @dptr, align 8
6775         %1 = getelementptr i32* %0, i64 65536
6776         %2 = bitcast i32* %1 to i8*
6777         ret i8* %2
6778 ; LINUX-64-STATIC: bam05:
6779 ; LINUX-64-STATIC: movl    $262144, %eax
6780 ; LINUX-64-STATIC: addq    dptr(%rip), %rax
6781 ; LINUX-64-STATIC: ret
6782
6783 ; LINUX-32-STATIC: bam05:
6784 ; LINUX-32-STATIC:      movl    $262144, %eax
6785 ; LINUX-32-STATIC-NEXT:         addl    dptr, %eax
6786 ; LINUX-32-STATIC-NEXT:         ret
6787
6788 ; LINUX-32-PIC: bam05:
6789 ; LINUX-32-PIC:         movl    $262144, %eax
6790 ; LINUX-32-PIC-NEXT:    addl    dptr, %eax
6791 ; LINUX-32-PIC-NEXT:    ret
6792
6793 ; LINUX-64-PIC: bam05:
6794 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
6795 ; LINUX-64-PIC-NEXT:    movl    $262144, %eax
6796 ; LINUX-64-PIC-NEXT:    addq    ([[RCX]]), %rax
6797 ; LINUX-64-PIC-NEXT:    ret
6798
6799 ; DARWIN-32-STATIC: _bam05:
6800 ; DARWIN-32-STATIC:     movl    $262144, %eax
6801 ; DARWIN-32-STATIC-NEXT:        addl    _dptr, %eax
6802 ; DARWIN-32-STATIC-NEXT:        ret
6803
6804 ; DARWIN-32-DYNAMIC: _bam05:
6805 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6806 ; DARWIN-32-DYNAMIC-NEXT:       addl    _dptr, %eax
6807 ; DARWIN-32-DYNAMIC-NEXT:       ret
6808
6809 ; DARWIN-32-PIC: _bam05:
6810 ; DARWIN-32-PIC:        calll   L105$pb
6811 ; DARWIN-32-PIC-NEXT: L105$pb:
6812 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6813 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6814 ; DARWIN-32-PIC-NEXT:   addl    _dptr-L105$pb([[ECX]]), %eax
6815 ; DARWIN-32-PIC-NEXT:   ret
6816
6817 ; DARWIN-64-STATIC: _bam05:
6818 ; DARWIN-64-STATIC:     movl    $262144, %eax
6819 ; DARWIN-64-STATIC-NEXT:        addq    _dptr(%rip), %rax
6820 ; DARWIN-64-STATIC-NEXT:        ret
6821
6822 ; DARWIN-64-DYNAMIC: _bam05:
6823 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6824 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dptr(%rip), %rax
6825 ; DARWIN-64-DYNAMIC-NEXT:       ret
6826
6827 ; DARWIN-64-PIC: _bam05:
6828 ; DARWIN-64-PIC:        movl    $262144, %eax
6829 ; DARWIN-64-PIC-NEXT:   addq    _dptr(%rip), %rax
6830 ; DARWIN-64-PIC-NEXT:   ret
6831 }
6832
6833 define i8* @bam06() nounwind {
6834 entry:
6835         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
6836 ; LINUX-64-STATIC: bam06:
6837 ; LINUX-64-STATIC: movl    $lsrc+262144, %eax
6838 ; LINUX-64-STATIC: ret
6839
6840 ; LINUX-32-STATIC: bam06:
6841 ; LINUX-32-STATIC:      movl    $lsrc+262144, %eax
6842 ; LINUX-32-STATIC-NEXT:         ret
6843
6844 ; LINUX-32-PIC: bam06:
6845 ; LINUX-32-PIC:         movl    $lsrc+262144, %eax
6846 ; LINUX-32-PIC-NEXT:    ret
6847
6848 ; LINUX-64-PIC: bam06:
6849 ; LINUX-64-PIC:         leaq    lsrc+262144(%rip), %rax
6850 ; LINUX-64-PIC-NEXT:    ret
6851
6852 ; DARWIN-32-STATIC: _bam06:
6853 ; DARWIN-32-STATIC:     movl    $_lsrc+262144, %eax
6854 ; DARWIN-32-STATIC-NEXT:        ret
6855
6856 ; DARWIN-32-DYNAMIC: _bam06:
6857 ; DARWIN-32-DYNAMIC:    movl    $_lsrc+262144, %eax
6858 ; DARWIN-32-DYNAMIC-NEXT:       ret
6859
6860 ; DARWIN-32-PIC: _bam06:
6861 ; DARWIN-32-PIC:        calll   L106$pb
6862 ; DARWIN-32-PIC-NEXT: L106$pb:
6863 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6864 ; DARWIN-32-PIC-NEXT:   leal    (_lsrc-L106$pb)+262144([[EAX]]), %eax
6865 ; DARWIN-32-PIC-NEXT:   ret
6866
6867 ; DARWIN-64-STATIC: _bam06:
6868 ; DARWIN-64-STATIC:     leaq    _lsrc+262144(%rip), %rax
6869 ; DARWIN-64-STATIC-NEXT:        ret
6870
6871 ; DARWIN-64-DYNAMIC: _bam06:
6872 ; DARWIN-64-DYNAMIC:    leaq    _lsrc+262144(%rip), %rax
6873 ; DARWIN-64-DYNAMIC-NEXT:       ret
6874
6875 ; DARWIN-64-PIC: _bam06:
6876 ; DARWIN-64-PIC:        leaq    _lsrc+262144(%rip), %rax
6877 ; DARWIN-64-PIC-NEXT:   ret
6878 }
6879
6880 define i8* @bam07() nounwind {
6881 entry:
6882         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
6883 ; LINUX-64-STATIC: bam07:
6884 ; LINUX-64-STATIC: movl    $ldst+262144, %eax
6885 ; LINUX-64-STATIC: ret
6886
6887 ; LINUX-32-STATIC: bam07:
6888 ; LINUX-32-STATIC:      movl    $ldst+262144, %eax
6889 ; LINUX-32-STATIC-NEXT:         ret
6890
6891 ; LINUX-32-PIC: bam07:
6892 ; LINUX-32-PIC:         movl    $ldst+262144, %eax
6893 ; LINUX-32-PIC-NEXT:    ret
6894
6895 ; LINUX-64-PIC: bam07:
6896 ; LINUX-64-PIC:         leaq    ldst+262144(%rip), %rax
6897 ; LINUX-64-PIC-NEXT:    ret
6898
6899 ; DARWIN-32-STATIC: _bam07:
6900 ; DARWIN-32-STATIC:     movl    $_ldst+262144, %eax
6901 ; DARWIN-32-STATIC-NEXT:        ret
6902
6903 ; DARWIN-32-DYNAMIC: _bam07:
6904 ; DARWIN-32-DYNAMIC:    movl    $_ldst+262144, %eax
6905 ; DARWIN-32-DYNAMIC-NEXT:       ret
6906
6907 ; DARWIN-32-PIC: _bam07:
6908 ; DARWIN-32-PIC:        calll   L107$pb
6909 ; DARWIN-32-PIC-NEXT: L107$pb:
6910 ; DARWIN-32-PIC-NEXT:   popl    %eax
6911 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L107$pb)+262144([[EAX]]), %eax
6912 ; DARWIN-32-PIC-NEXT:   ret
6913
6914 ; DARWIN-64-STATIC: _bam07:
6915 ; DARWIN-64-STATIC:     leaq    _ldst+262144(%rip), %rax
6916 ; DARWIN-64-STATIC-NEXT:        ret
6917
6918 ; DARWIN-64-DYNAMIC: _bam07:
6919 ; DARWIN-64-DYNAMIC:    leaq    _ldst+262144(%rip), %rax
6920 ; DARWIN-64-DYNAMIC-NEXT:       ret
6921
6922 ; DARWIN-64-PIC: _bam07:
6923 ; DARWIN-64-PIC:        leaq    _ldst+262144(%rip), %rax
6924 ; DARWIN-64-PIC-NEXT:   ret
6925 }
6926
6927 define i8* @bam08() nounwind {
6928 entry:
6929         %0 = load i32** @lptr, align 8
6930         %1 = getelementptr i32* %0, i64 65536
6931         %2 = bitcast i32* %1 to i8*
6932         ret i8* %2
6933 ; LINUX-64-STATIC: bam08:
6934 ; LINUX-64-STATIC: movl    $262144, %eax
6935 ; LINUX-64-STATIC: addq    lptr(%rip), %rax
6936 ; LINUX-64-STATIC: ret
6937
6938 ; LINUX-32-STATIC: bam08:
6939 ; LINUX-32-STATIC:      movl    $262144, %eax
6940 ; LINUX-32-STATIC-NEXT:         addl    lptr, %eax
6941 ; LINUX-32-STATIC-NEXT:         ret
6942
6943 ; LINUX-32-PIC: bam08:
6944 ; LINUX-32-PIC:         movl    $262144, %eax
6945 ; LINUX-32-PIC-NEXT:    addl    lptr, %eax
6946 ; LINUX-32-PIC-NEXT:    ret
6947
6948 ; LINUX-64-PIC: bam08:
6949 ; LINUX-64-PIC:         movl    $262144, %eax
6950 ; LINUX-64-PIC-NEXT:    addq    lptr(%rip), %rax
6951 ; LINUX-64-PIC-NEXT:    ret
6952
6953 ; DARWIN-32-STATIC: _bam08:
6954 ; DARWIN-32-STATIC:     movl    $262144, %eax
6955 ; DARWIN-32-STATIC-NEXT:        addl    _lptr, %eax
6956 ; DARWIN-32-STATIC-NEXT:        ret
6957
6958 ; DARWIN-32-DYNAMIC: _bam08:
6959 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6960 ; DARWIN-32-DYNAMIC-NEXT:       addl    _lptr, %eax
6961 ; DARWIN-32-DYNAMIC-NEXT:       ret
6962
6963 ; DARWIN-32-PIC: _bam08:
6964 ; DARWIN-32-PIC:        calll   L108$pb
6965 ; DARWIN-32-PIC-NEXT: L108$pb:
6966 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6967 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6968 ; DARWIN-32-PIC-NEXT:   addl    _lptr-L108$pb([[ECX]]), %eax
6969 ; DARWIN-32-PIC-NEXT:   ret
6970
6971 ; DARWIN-64-STATIC: _bam08:
6972 ; DARWIN-64-STATIC:     movl    $262144, %eax
6973 ; DARWIN-64-STATIC-NEXT:        addq    _lptr(%rip), %rax
6974 ; DARWIN-64-STATIC-NEXT:        ret
6975
6976 ; DARWIN-64-DYNAMIC: _bam08:
6977 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6978 ; DARWIN-64-DYNAMIC-NEXT:       addq    _lptr(%rip), %rax
6979 ; DARWIN-64-DYNAMIC-NEXT:       ret
6980
6981 ; DARWIN-64-PIC: _bam08:
6982 ; DARWIN-64-PIC:        movl    $262144, %eax
6983 ; DARWIN-64-PIC-NEXT:   addq    _lptr(%rip), %rax
6984 ; DARWIN-64-PIC-NEXT:   ret
6985 }
6986
6987 define i8* @cat00(i64 %i) nounwind {
6988 entry:
6989         %0 = add i64 %i, 16
6990         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
6991         %2 = bitcast i32* %1 to i8*
6992         ret i8* %2
6993 ; LINUX-64-STATIC: cat00:
6994 ; LINUX-64-STATIC: leaq    src+64(,%rdi,4), %rax
6995 ; LINUX-64-STATIC: ret
6996
6997 ; LINUX-32-STATIC: cat00:
6998 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
6999 ; LINUX-32-STATIC-NEXT:         leal    src+64(,[[EAX]],4), %eax
7000 ; LINUX-32-STATIC-NEXT:         ret
7001
7002 ; LINUX-32-PIC: cat00:
7003 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7004 ; LINUX-32-PIC-NEXT:    leal    src+64(,[[EAX]],4), %eax
7005 ; LINUX-32-PIC-NEXT:    ret
7006
7007 ; LINUX-64-PIC: cat00:
7008 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
7009 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7010 ; LINUX-64-PIC-NEXT:    ret
7011
7012 ; DARWIN-32-STATIC: _cat00:
7013 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7014 ; DARWIN-32-STATIC-NEXT:        leal    _src+64(,[[EAX]],4), %eax
7015 ; DARWIN-32-STATIC-NEXT:        ret
7016
7017 ; DARWIN-32-DYNAMIC: _cat00:
7018 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7019 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
7020 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7021 ; DARWIN-32-DYNAMIC-NEXT:       ret
7022
7023 ; DARWIN-32-PIC: _cat00:
7024 ; DARWIN-32-PIC:        calll   L109$pb
7025 ; DARWIN-32-PIC-NEXT: L109$pb:
7026 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7027 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7028 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L109$pb([[EAX]]), [[EAX:%e.x]]
7029 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7030 ; DARWIN-32-PIC-NEXT:   ret
7031
7032 ; DARWIN-64-STATIC: _cat00:
7033 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7034 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7035 ; DARWIN-64-STATIC-NEXT:        ret
7036
7037 ; DARWIN-64-DYNAMIC: _cat00:
7038 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7039 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7040 ; DARWIN-64-DYNAMIC-NEXT:       ret
7041
7042 ; DARWIN-64-PIC: _cat00:
7043 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7044 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7045 ; DARWIN-64-PIC-NEXT:   ret
7046 }
7047
7048 define i8* @cxt00(i64 %i) nounwind {
7049 entry:
7050         %0 = add i64 %i, 16
7051         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7052         %2 = bitcast i32* %1 to i8*
7053         ret i8* %2
7054 ; LINUX-64-STATIC: cxt00:
7055 ; LINUX-64-STATIC: leaq    xsrc+64(,%rdi,4), %rax
7056 ; LINUX-64-STATIC: ret
7057
7058 ; LINUX-32-STATIC: cxt00:
7059 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7060 ; LINUX-32-STATIC-NEXT:         leal    xsrc+64(,[[EAX]],4), %eax
7061 ; LINUX-32-STATIC-NEXT:         ret
7062
7063 ; LINUX-32-PIC: cxt00:
7064 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7065 ; LINUX-32-PIC-NEXT:    leal    xsrc+64(,[[EAX]],4), %eax
7066 ; LINUX-32-PIC-NEXT:    ret
7067
7068 ; LINUX-64-PIC: cxt00:
7069 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7070 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7071 ; LINUX-64-PIC-NEXT:    ret
7072
7073 ; DARWIN-32-STATIC: _cxt00:
7074 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7075 ; DARWIN-32-STATIC-NEXT:        leal    _xsrc+64(,[[EAX]],4), %eax
7076 ; DARWIN-32-STATIC-NEXT:        ret
7077
7078 ; DARWIN-32-DYNAMIC: _cxt00:
7079 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7080 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
7081 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7082 ; DARWIN-32-DYNAMIC-NEXT:       ret
7083
7084 ; DARWIN-32-PIC: _cxt00:
7085 ; DARWIN-32-PIC:        calll   L110$pb
7086 ; DARWIN-32-PIC-NEXT: L110$pb:
7087 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7088 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7089 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L110$pb([[EAX]]), [[EAX:%e.x]]
7090 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7091 ; DARWIN-32-PIC-NEXT:   ret
7092
7093 ; DARWIN-64-STATIC: _cxt00:
7094 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7095 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7096 ; DARWIN-64-STATIC-NEXT:        ret
7097
7098 ; DARWIN-64-DYNAMIC: _cxt00:
7099 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7100 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7101 ; DARWIN-64-DYNAMIC-NEXT:       ret
7102
7103 ; DARWIN-64-PIC: _cxt00:
7104 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7105 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7106 ; DARWIN-64-PIC-NEXT:   ret
7107 }
7108
7109 define i8* @cat01(i64 %i) nounwind {
7110 entry:
7111         %0 = add i64 %i, 16
7112         %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7113         %2 = bitcast i32* %1 to i8*
7114         ret i8* %2
7115 ; LINUX-64-STATIC: cat01:
7116 ; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), %rax
7117 ; LINUX-64-STATIC: ret
7118
7119 ; LINUX-32-STATIC: cat01:
7120 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7121 ; LINUX-32-STATIC-NEXT:         leal    dst+64(,[[EAX]],4), %eax
7122 ; LINUX-32-STATIC-NEXT:         ret
7123
7124 ; LINUX-32-PIC: cat01:
7125 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7126 ; LINUX-32-PIC-NEXT:    leal    dst+64(,[[EAX]],4), %eax
7127 ; LINUX-32-PIC-NEXT:    ret
7128
7129 ; LINUX-64-PIC: cat01:
7130 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
7131 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7132 ; LINUX-64-PIC-NEXT:    ret
7133
7134 ; DARWIN-32-STATIC: _cat01:
7135 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7136 ; DARWIN-32-STATIC-NEXT:        leal    _dst+64(,[[EAX]],4), %eax
7137 ; DARWIN-32-STATIC-NEXT:        ret
7138
7139 ; DARWIN-32-DYNAMIC: _cat01:
7140 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7141 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
7142 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7143 ; DARWIN-32-DYNAMIC-NEXT:       ret
7144
7145 ; DARWIN-32-PIC: _cat01:
7146 ; DARWIN-32-PIC:        calll   L111$pb
7147 ; DARWIN-32-PIC-NEXT: L111$pb:
7148 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7149 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7150 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L111$pb([[EAX]]), [[EAX:%e.x]]
7151 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7152 ; DARWIN-32-PIC-NEXT:   ret
7153
7154 ; DARWIN-64-STATIC: _cat01:
7155 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7156 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7157 ; DARWIN-64-STATIC-NEXT:        ret
7158
7159 ; DARWIN-64-DYNAMIC: _cat01:
7160 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7161 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7162 ; DARWIN-64-DYNAMIC-NEXT:       ret
7163
7164 ; DARWIN-64-PIC: _cat01:
7165 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7166 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7167 ; DARWIN-64-PIC-NEXT:   ret
7168 }
7169
7170 define i8* @cxt01(i64 %i) nounwind {
7171 entry:
7172         %0 = add i64 %i, 16
7173         %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7174         %2 = bitcast i32* %1 to i8*
7175         ret i8* %2
7176 ; LINUX-64-STATIC: cxt01:
7177 ; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), %rax
7178 ; LINUX-64-STATIC: ret
7179
7180 ; LINUX-32-STATIC: cxt01:
7181 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7182 ; LINUX-32-STATIC-NEXT:         leal    xdst+64(,[[EAX]],4), %eax
7183 ; LINUX-32-STATIC-NEXT:         ret
7184
7185 ; LINUX-32-PIC: cxt01:
7186 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7187 ; LINUX-32-PIC-NEXT:    leal    xdst+64(,[[EAX]],4), %eax
7188 ; LINUX-32-PIC-NEXT:    ret
7189
7190 ; LINUX-64-PIC: cxt01:
7191 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7192 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7193 ; LINUX-64-PIC-NEXT:    ret
7194
7195 ; DARWIN-32-STATIC: _cxt01:
7196 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7197 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+64(,[[EAX]],4), %eax
7198 ; DARWIN-32-STATIC-NEXT:        ret
7199
7200 ; DARWIN-32-DYNAMIC: _cxt01:
7201 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7202 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
7203 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7204 ; DARWIN-32-DYNAMIC-NEXT:       ret
7205
7206 ; DARWIN-32-PIC: _cxt01:
7207 ; DARWIN-32-PIC:        calll   L112$pb
7208 ; DARWIN-32-PIC-NEXT: L112$pb:
7209 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7210 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7211 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L112$pb([[EAX]]), [[EAX:%e.x]]
7212 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7213 ; DARWIN-32-PIC-NEXT:   ret
7214
7215 ; DARWIN-64-STATIC: _cxt01:
7216 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7217 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7218 ; DARWIN-64-STATIC-NEXT:        ret
7219
7220 ; DARWIN-64-DYNAMIC: _cxt01:
7221 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7222 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7223 ; DARWIN-64-DYNAMIC-NEXT:       ret
7224
7225 ; DARWIN-64-PIC: _cxt01:
7226 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7227 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7228 ; DARWIN-64-PIC-NEXT:   ret
7229 }
7230
7231 define i8* @cat02(i64 %i) nounwind {
7232 entry:
7233         %0 = load i32** @ptr, align 8
7234         %1 = add i64 %i, 16
7235         %2 = getelementptr i32* %0, i64 %1
7236         %3 = bitcast i32* %2 to i8*
7237         ret i8* %3
7238 ; LINUX-64-STATIC: cat02:
7239 ; LINUX-64-STATIC: movq    ptr(%rip), [[RAX:%r.x]]
7240 ; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7241 ; LINUX-64-STATIC: ret
7242
7243 ; LINUX-32-STATIC: cat02:
7244 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7245 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
7246 ; LINUX-32-STATIC-NEXT:         leal    64([[ECX]],[[EAX]],4), %eax
7247 ; LINUX-32-STATIC-NEXT:         ret
7248
7249 ; LINUX-32-PIC: cat02:
7250 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7251 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
7252 ; LINUX-32-PIC-NEXT:    leal    64([[ECX]],[[EAX]],4), %eax
7253 ; LINUX-32-PIC-NEXT:    ret
7254
7255 ; LINUX-64-PIC: cat02:
7256 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7257 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), [[RAX:%r.x]]
7258 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7259 ; LINUX-64-PIC-NEXT:    ret
7260
7261 ; DARWIN-32-STATIC: _cat02:
7262 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7263 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
7264 ; DARWIN-32-STATIC-NEXT:        leal    64([[ECX]],[[EAX]],4), %eax
7265 ; DARWIN-32-STATIC-NEXT:        ret
7266
7267 ; DARWIN-32-DYNAMIC: _cat02:
7268 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[EAX:%e.x]]
7269 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
7270 ; DARWIN-32-DYNAMIC-NEXT:       movl    4(%esp), [[ECX:%e.x]]
7271 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[EAX]],[[ECX]],4), %eax
7272 ; DARWIN-32-DYNAMIC-NEXT:       ret
7273
7274 ; DARWIN-32-PIC: _cat02:
7275 ; DARWIN-32-PIC:        calll   L113$pb
7276 ; DARWIN-32-PIC-NEXT: L113$pb:
7277 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7278 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L113$pb([[EAX]]), [[EAX:%e.x]]
7279 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
7280 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7281 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7282 ; DARWIN-32-PIC-NEXT:   ret
7283
7284 ; DARWIN-64-STATIC: _cat02:
7285 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7286 ; DARWIN-64-STATIC-NEXT:        movq    ([[RAX]]), [[RAX:%r.x]]
7287 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7288 ; DARWIN-64-STATIC-NEXT:        ret
7289
7290 ; DARWIN-64-DYNAMIC: _cat02:
7291 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7292 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RAX]]), [[RAX:%r.x]]
7293 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7294 ; DARWIN-64-DYNAMIC-NEXT:       ret
7295
7296 ; DARWIN-64-PIC: _cat02:
7297 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7298 ; DARWIN-64-PIC-NEXT:   movq    ([[RAX]]), [[RAX:%r.x]]
7299 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7300 ; DARWIN-64-PIC-NEXT:   ret
7301 }
7302
7303 define i8* @cat03(i64 %i) nounwind {
7304 entry:
7305         %0 = add i64 %i, 16
7306         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7307         %2 = bitcast i32* %1 to i8*
7308         ret i8* %2
7309 ; LINUX-64-STATIC: cat03:
7310 ; LINUX-64-STATIC: leaq    dsrc+64(,%rdi,4), %rax
7311 ; LINUX-64-STATIC: ret
7312
7313 ; LINUX-32-STATIC: cat03:
7314 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7315 ; LINUX-32-STATIC-NEXT:         leal    dsrc+64(,[[EAX]],4), %eax
7316 ; LINUX-32-STATIC-NEXT:         ret
7317
7318 ; LINUX-32-PIC: cat03:
7319 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7320 ; LINUX-32-PIC-NEXT:    leal    dsrc+64(,[[EAX]],4), %eax
7321 ; LINUX-32-PIC-NEXT:    ret
7322
7323 ; LINUX-64-PIC: cat03:
7324 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7325 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7326 ; LINUX-64-PIC-NEXT:    ret
7327
7328 ; DARWIN-32-STATIC: _cat03:
7329 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7330 ; DARWIN-32-STATIC-NEXT:        leal    _dsrc+64(,[[EAX]],4), %eax
7331 ; DARWIN-32-STATIC-NEXT:        ret
7332
7333 ; DARWIN-32-DYNAMIC: _cat03:
7334 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7335 ; DARWIN-32-DYNAMIC-NEXT:       leal    _dsrc+64(,[[EAX]],4), %eax
7336 ; DARWIN-32-DYNAMIC-NEXT:       ret
7337
7338 ; DARWIN-32-PIC: _cat03:
7339 ; DARWIN-32-PIC:        calll   L114$pb
7340 ; DARWIN-32-PIC-NEXT: L114$pb:
7341 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7342 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7343 ; DARWIN-32-PIC-NEXT:   leal    (_dsrc-L114$pb)+64([[EAX]],[[ECX]],4), %eax
7344 ; DARWIN-32-PIC-NEXT:   ret
7345
7346 ; DARWIN-64-STATIC: _cat03:
7347 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
7348 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7349 ; DARWIN-64-STATIC-NEXT:        ret
7350
7351 ; DARWIN-64-DYNAMIC: _cat03:
7352 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
7353 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7354 ; DARWIN-64-DYNAMIC-NEXT:       ret
7355
7356 ; DARWIN-64-PIC: _cat03:
7357 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
7358 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7359 ; DARWIN-64-PIC-NEXT:   ret
7360 }
7361
7362 define i8* @cat04(i64 %i) nounwind {
7363 entry:
7364         %0 = add i64 %i, 16
7365         %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
7366         %2 = bitcast i32* %1 to i8*
7367         ret i8* %2
7368 ; LINUX-64-STATIC: cat04:
7369 ; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), %rax
7370 ; LINUX-64-STATIC: ret
7371
7372 ; LINUX-32-STATIC: cat04:
7373 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7374 ; LINUX-32-STATIC-NEXT:         leal    ddst+64(,[[EAX]],4), %eax
7375 ; LINUX-32-STATIC-NEXT:         ret
7376
7377 ; LINUX-32-PIC: cat04:
7378 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7379 ; LINUX-32-PIC-NEXT:    leal    ddst+64(,[[EAX]],4), %eax
7380 ; LINUX-32-PIC-NEXT:    ret
7381
7382 ; LINUX-64-PIC: cat04:
7383 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
7384 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7385 ; LINUX-64-PIC-NEXT:    ret
7386
7387 ; DARWIN-32-STATIC: _cat04:
7388 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7389 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+64(,[[EAX]],4), %eax
7390 ; DARWIN-32-STATIC-NEXT:        ret
7391
7392 ; DARWIN-32-DYNAMIC: _cat04:
7393 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7394 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+64(,[[EAX]],4), %eax
7395 ; DARWIN-32-DYNAMIC-NEXT:       ret
7396
7397 ; DARWIN-32-PIC: _cat04:
7398 ; DARWIN-32-PIC:        calll   L115$pb
7399 ; DARWIN-32-PIC-NEXT: L115$pb:
7400 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7401 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7402 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L115$pb)+64([[EAX]],[[ECX]],4), %eax
7403 ; DARWIN-32-PIC-NEXT:   ret
7404
7405 ; DARWIN-64-STATIC: _cat04:
7406 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
7407 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7408 ; DARWIN-64-STATIC-NEXT:        ret
7409
7410 ; DARWIN-64-DYNAMIC: _cat04:
7411 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
7412 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7413 ; DARWIN-64-DYNAMIC-NEXT:       ret
7414
7415 ; DARWIN-64-PIC: _cat04:
7416 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
7417 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7418 ; DARWIN-64-PIC-NEXT:   ret
7419 }
7420
7421 define i8* @cat05(i64 %i) nounwind {
7422 entry:
7423         %0 = load i32** @dptr, align 8
7424         %1 = add i64 %i, 16
7425         %2 = getelementptr i32* %0, i64 %1
7426         %3 = bitcast i32* %2 to i8*
7427         ret i8* %3
7428 ; LINUX-64-STATIC: cat05:
7429 ; LINUX-64-STATIC: movq    dptr(%rip), [[RAX:%r.x]]
7430 ; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7431 ; LINUX-64-STATIC: ret
7432
7433 ; LINUX-32-STATIC: cat05:
7434 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7435 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
7436 ; LINUX-32-STATIC-NEXT:         leal    64([[ECX]],[[EAX]],4), %eax
7437 ; LINUX-32-STATIC-NEXT:         ret
7438
7439 ; LINUX-32-PIC: cat05:
7440 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7441 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
7442 ; LINUX-32-PIC-NEXT:    leal    64([[ECX]],[[EAX]],4), %eax
7443 ; LINUX-32-PIC-NEXT:    ret
7444
7445 ; LINUX-64-PIC: cat05:
7446 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
7447 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), [[RAX:%r.x]]
7448 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7449 ; LINUX-64-PIC-NEXT:    ret
7450
7451 ; DARWIN-32-STATIC: _cat05:
7452 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7453 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
7454 ; DARWIN-32-STATIC-NEXT:        leal    64([[ECX]],[[EAX]],4), %eax
7455 ; DARWIN-32-STATIC-NEXT:        ret
7456
7457 ; DARWIN-32-DYNAMIC: _cat05:
7458 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7459 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
7460 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7461 ; DARWIN-32-DYNAMIC-NEXT:       ret
7462
7463 ; DARWIN-32-PIC: _cat05:
7464 ; DARWIN-32-PIC:        calll   L116$pb
7465 ; DARWIN-32-PIC-NEXT: L116$pb:
7466 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7467 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7468 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L116$pb([[EAX]]), [[EAX:%e.x]]
7469 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7470 ; DARWIN-32-PIC-NEXT:   ret
7471
7472 ; DARWIN-64-STATIC: _cat05:
7473 ; DARWIN-64-STATIC:     movq    _dptr(%rip), [[RAX:%r.x]]
7474 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7475 ; DARWIN-64-STATIC-NEXT:        ret
7476
7477 ; DARWIN-64-DYNAMIC: _cat05:
7478 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), [[RAX:%r.x]]
7479 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7480 ; DARWIN-64-DYNAMIC-NEXT:       ret
7481
7482 ; DARWIN-64-PIC: _cat05:
7483 ; DARWIN-64-PIC:        movq    _dptr(%rip), [[RAX:%r.x]]
7484 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7485 ; DARWIN-64-PIC-NEXT:   ret
7486 }
7487
7488 define i8* @cat06(i64 %i) nounwind {
7489 entry:
7490         %0 = add i64 %i, 16
7491         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
7492         %2 = bitcast i32* %1 to i8*
7493         ret i8* %2
7494 ; LINUX-64-STATIC: cat06:
7495 ; LINUX-64-STATIC: leaq    lsrc+64(,%rdi,4), %rax
7496 ; LINUX-64-STATIC: ret
7497
7498 ; LINUX-32-STATIC: cat06:
7499 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7500 ; LINUX-32-STATIC-NEXT:         leal    lsrc+64(,[[EAX]],4), %eax
7501 ; LINUX-32-STATIC-NEXT:         ret
7502
7503 ; LINUX-32-PIC: cat06:
7504 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7505 ; LINUX-32-PIC-NEXT:    leal    lsrc+64(,[[EAX]],4), %eax
7506 ; LINUX-32-PIC-NEXT:    ret
7507
7508 ; LINUX-64-PIC: cat06:
7509 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
7510 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7511 ; LINUX-64-PIC-NEXT:    ret
7512
7513 ; DARWIN-32-STATIC: _cat06:
7514 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7515 ; DARWIN-32-STATIC-NEXT:        leal    _lsrc+64(,[[EAX]],4), %eax
7516 ; DARWIN-32-STATIC-NEXT:        ret
7517
7518 ; DARWIN-32-DYNAMIC: _cat06:
7519 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7520 ; DARWIN-32-DYNAMIC-NEXT:       leal    _lsrc+64(,[[EAX]],4), %eax
7521 ; DARWIN-32-DYNAMIC-NEXT:       ret
7522
7523 ; DARWIN-32-PIC: _cat06:
7524 ; DARWIN-32-PIC:        calll   L117$pb
7525 ; DARWIN-32-PIC-NEXT: L117$pb:
7526 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7527 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7528 ; DARWIN-32-PIC-NEXT:   leal    (_lsrc-L117$pb)+64([[EAX]],[[ECX]],4), %eax
7529 ; DARWIN-32-PIC-NEXT:   ret
7530
7531 ; DARWIN-64-STATIC: _cat06:
7532 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
7533 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7534 ; DARWIN-64-STATIC-NEXT:        ret
7535
7536 ; DARWIN-64-DYNAMIC: _cat06:
7537 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
7538 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7539 ; DARWIN-64-DYNAMIC-NEXT:       ret
7540
7541 ; DARWIN-64-PIC: _cat06:
7542 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
7543 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7544 ; DARWIN-64-PIC-NEXT:   ret
7545 }
7546
7547 define i8* @cat07(i64 %i) nounwind {
7548 entry:
7549         %0 = add i64 %i, 16
7550         %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
7551         %2 = bitcast i32* %1 to i8*
7552         ret i8* %2
7553 ; LINUX-64-STATIC: cat07:
7554 ; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), %rax
7555 ; LINUX-64-STATIC: ret
7556
7557 ; LINUX-32-STATIC: cat07:
7558 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7559 ; LINUX-32-STATIC-NEXT:         leal    ldst+64(,[[EAX]],4), %eax
7560 ; LINUX-32-STATIC-NEXT:         ret
7561
7562 ; LINUX-32-PIC: cat07:
7563 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7564 ; LINUX-32-PIC-NEXT:    leal    ldst+64(,[[EAX]],4), %eax
7565 ; LINUX-32-PIC-NEXT:    ret
7566
7567 ; LINUX-64-PIC: cat07:
7568 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
7569 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7570 ; LINUX-64-PIC-NEXT:    ret
7571
7572 ; DARWIN-32-STATIC: _cat07:
7573 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7574 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+64(,[[EAX]],4), %eax
7575 ; DARWIN-32-STATIC-NEXT:        ret
7576
7577 ; DARWIN-32-DYNAMIC: _cat07:
7578 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7579 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+64(,[[EAX]],4), %eax
7580 ; DARWIN-32-DYNAMIC-NEXT:       ret
7581
7582 ; DARWIN-32-PIC: _cat07:
7583 ; DARWIN-32-PIC:        calll   L118$pb
7584 ; DARWIN-32-PIC-NEXT: L118$pb:
7585 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7586 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7587 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L118$pb)+64([[EAX]],[[ECX]],4), %eax
7588 ; DARWIN-32-PIC-NEXT:   ret
7589
7590 ; DARWIN-64-STATIC: _cat07:
7591 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
7592 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7593 ; DARWIN-64-STATIC-NEXT:        ret
7594
7595 ; DARWIN-64-DYNAMIC: _cat07:
7596 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
7597 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7598 ; DARWIN-64-DYNAMIC-NEXT:       ret
7599
7600 ; DARWIN-64-PIC: _cat07:
7601 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
7602 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7603 ; DARWIN-64-PIC-NEXT:   ret
7604 }
7605
7606 define i8* @cat08(i64 %i) nounwind {
7607 entry:
7608         %0 = load i32** @lptr, align 8
7609         %1 = add i64 %i, 16
7610         %2 = getelementptr i32* %0, i64 %1
7611         %3 = bitcast i32* %2 to i8*
7612         ret i8* %3
7613 ; LINUX-64-STATIC: cat08:
7614 ; LINUX-64-STATIC: movq    lptr(%rip), [[RAX:%r.x]]
7615 ; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7616 ; LINUX-64-STATIC: ret
7617
7618 ; LINUX-32-STATIC: cat08:
7619 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7620 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
7621 ; LINUX-32-STATIC-NEXT:         leal    64([[ECX]],[[EAX]],4), %eax
7622 ; LINUX-32-STATIC-NEXT:         ret
7623
7624 ; LINUX-32-PIC: cat08:
7625 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7626 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
7627 ; LINUX-32-PIC-NEXT:    leal    64([[ECX]],[[EAX]],4), %eax
7628 ; LINUX-32-PIC-NEXT:    ret
7629
7630 ; LINUX-64-PIC: cat08:
7631 ; LINUX-64-PIC:         movq    lptr(%rip), [[RAX:%r.x]]
7632 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7633 ; LINUX-64-PIC-NEXT:    ret
7634
7635 ; DARWIN-32-STATIC: _cat08:
7636 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7637 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
7638 ; DARWIN-32-STATIC-NEXT:        leal    64([[ECX]],[[EAX]],4), %eax
7639 ; DARWIN-32-STATIC-NEXT:        ret
7640
7641 ; DARWIN-32-DYNAMIC: _cat08:
7642 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7643 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
7644 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7645 ; DARWIN-32-DYNAMIC-NEXT:       ret
7646
7647 ; DARWIN-32-PIC: _cat08:
7648 ; DARWIN-32-PIC:        calll   L119$pb
7649 ; DARWIN-32-PIC-NEXT: L119$pb:
7650 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7651 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7652 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L119$pb([[EAX]]), [[EAX:%e.x]]
7653 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7654 ; DARWIN-32-PIC-NEXT:   ret
7655
7656 ; DARWIN-64-STATIC: _cat08:
7657 ; DARWIN-64-STATIC:     movq    _lptr(%rip), [[RAX:%r.x]]
7658 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7659 ; DARWIN-64-STATIC-NEXT:        ret
7660
7661 ; DARWIN-64-DYNAMIC: _cat08:
7662 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), [[RAX:%r.x]]
7663 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7664 ; DARWIN-64-DYNAMIC-NEXT:       ret
7665
7666 ; DARWIN-64-PIC: _cat08:
7667 ; DARWIN-64-PIC:        movq    _lptr(%rip), [[RAX:%r.x]]
7668 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7669 ; DARWIN-64-PIC-NEXT:   ret
7670 }
7671
7672 define i8* @cam00(i64 %i) nounwind {
7673 entry:
7674         %0 = add i64 %i, 65536
7675         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
7676         %2 = bitcast i32* %1 to i8*
7677         ret i8* %2
7678 ; LINUX-64-STATIC: cam00:
7679 ; LINUX-64-STATIC: leaq    src+262144(,%rdi,4), %rax
7680 ; LINUX-64-STATIC: ret
7681
7682 ; LINUX-32-STATIC: cam00:
7683 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7684 ; LINUX-32-STATIC-NEXT:         leal    src+262144(,[[EAX]],4), %eax
7685 ; LINUX-32-STATIC-NEXT:         ret
7686
7687 ; LINUX-32-PIC: cam00:
7688 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7689 ; LINUX-32-PIC-NEXT:    leal    src+262144(,[[EAX]],4), %eax
7690 ; LINUX-32-PIC-NEXT:    ret
7691
7692 ; LINUX-64-PIC: cam00:
7693 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
7694 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7695 ; LINUX-64-PIC-NEXT:    ret
7696
7697 ; DARWIN-32-STATIC: _cam00:
7698 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7699 ; DARWIN-32-STATIC-NEXT:        leal    _src+262144(,[[EAX]],4), %eax
7700 ; DARWIN-32-STATIC-NEXT:        ret
7701
7702 ; DARWIN-32-DYNAMIC: _cam00:
7703 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7704 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
7705 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
7706 ; DARWIN-32-DYNAMIC-NEXT:       ret
7707
7708 ; DARWIN-32-PIC: _cam00:
7709 ; DARWIN-32-PIC:        calll   L120$pb
7710 ; DARWIN-32-PIC-NEXT: L120$pb:
7711 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7712 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7713 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L120$pb([[EAX]]), [[EAX:%e.x]]
7714 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7715 ; DARWIN-32-PIC-NEXT:   ret
7716
7717 ; DARWIN-64-STATIC: _cam00:
7718 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7719 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7720 ; DARWIN-64-STATIC-NEXT:        ret
7721
7722 ; DARWIN-64-DYNAMIC: _cam00:
7723 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7724 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7725 ; DARWIN-64-DYNAMIC-NEXT:       ret
7726
7727 ; DARWIN-64-PIC: _cam00:
7728 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7729 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7730 ; DARWIN-64-PIC-NEXT:   ret
7731 }
7732
7733 define i8* @cxm00(i64 %i) nounwind {
7734 entry:
7735         %0 = add i64 %i, 65536
7736         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7737         %2 = bitcast i32* %1 to i8*
7738         ret i8* %2
7739 ; LINUX-64-STATIC: cxm00:
7740 ; LINUX-64-STATIC: leaq    xsrc+262144(,%rdi,4), %rax
7741 ; LINUX-64-STATIC: ret
7742
7743 ; LINUX-32-STATIC: cxm00:
7744 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7745 ; LINUX-32-STATIC-NEXT:         leal    xsrc+262144(,[[EAX]],4), %eax
7746 ; LINUX-32-STATIC-NEXT:         ret
7747
7748 ; LINUX-32-PIC: cxm00:
7749 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7750 ; LINUX-32-PIC-NEXT:    leal    xsrc+262144(,[[EAX]],4), %eax
7751 ; LINUX-32-PIC-NEXT:    ret
7752
7753 ; LINUX-64-PIC: cxm00:
7754 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7755 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7756 ; LINUX-64-PIC-NEXT:    ret
7757
7758 ; DARWIN-32-STATIC: _cxm00:
7759 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7760 ; DARWIN-32-STATIC-NEXT:        leal    _xsrc+262144(,[[EAX]],4), %eax
7761 ; DARWIN-32-STATIC-NEXT:        ret
7762
7763 ; DARWIN-32-DYNAMIC: _cxm00:
7764 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7765 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
7766 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
7767 ; DARWIN-32-DYNAMIC-NEXT:       ret
7768
7769 ; DARWIN-32-PIC: _cxm00:
7770 ; DARWIN-32-PIC:        calll   L121$pb
7771 ; DARWIN-32-PIC-NEXT: L121$pb:
7772 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7773 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7774 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L121$pb([[EAX]]), [[EAX:%e.x]]
7775 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7776 ; DARWIN-32-PIC-NEXT:   ret
7777
7778 ; DARWIN-64-STATIC: _cxm00:
7779 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7780 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7781 ; DARWIN-64-STATIC-NEXT:        ret
7782
7783 ; DARWIN-64-DYNAMIC: _cxm00:
7784 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7785 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7786 ; DARWIN-64-DYNAMIC-NEXT:       ret
7787
7788 ; DARWIN-64-PIC: _cxm00:
7789 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7790 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7791 ; DARWIN-64-PIC-NEXT:   ret
7792 }
7793
7794 define i8* @cam01(i64 %i) nounwind {
7795 entry:
7796         %0 = add i64 %i, 65536
7797         %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7798         %2 = bitcast i32* %1 to i8*
7799         ret i8* %2
7800 ; LINUX-64-STATIC: cam01:
7801 ; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), %rax
7802 ; LINUX-64-STATIC: ret
7803
7804 ; LINUX-32-STATIC: cam01:
7805 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7806 ; LINUX-32-STATIC-NEXT:         leal    dst+262144(,[[EAX]],4), %eax
7807 ; LINUX-32-STATIC-NEXT:         ret
7808
7809 ; LINUX-32-PIC: cam01:
7810 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7811 ; LINUX-32-PIC-NEXT:    leal    dst+262144(,[[EAX]],4), %eax
7812 ; LINUX-32-PIC-NEXT:    ret
7813
7814 ; LINUX-64-PIC: cam01:
7815 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
7816 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7817 ; LINUX-64-PIC-NEXT:    ret
7818
7819 ; DARWIN-32-STATIC: _cam01:
7820 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7821 ; DARWIN-32-STATIC-NEXT:        leal    _dst+262144(,[[EAX]],4), %eax
7822 ; DARWIN-32-STATIC-NEXT:        ret
7823
7824 ; DARWIN-32-DYNAMIC: _cam01:
7825 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7826 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
7827 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
7828 ; DARWIN-32-DYNAMIC-NEXT:       ret
7829
7830 ; DARWIN-32-PIC: _cam01:
7831 ; DARWIN-32-PIC:        calll   L122$pb
7832 ; DARWIN-32-PIC-NEXT: L122$pb:
7833 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7834 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7835 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L122$pb([[EAX]]), [[EAX:%e.x]]
7836 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7837 ; DARWIN-32-PIC-NEXT:   ret
7838
7839 ; DARWIN-64-STATIC: _cam01:
7840 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7841 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7842 ; DARWIN-64-STATIC-NEXT:        ret
7843
7844 ; DARWIN-64-DYNAMIC: _cam01:
7845 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7846 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7847 ; DARWIN-64-DYNAMIC-NEXT:       ret
7848
7849 ; DARWIN-64-PIC: _cam01:
7850 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7851 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7852 ; DARWIN-64-PIC-NEXT:   ret
7853 }
7854
7855 define i8* @cxm01(i64 %i) nounwind {
7856 entry:
7857         %0 = add i64 %i, 65536
7858         %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7859         %2 = bitcast i32* %1 to i8*
7860         ret i8* %2
7861 ; LINUX-64-STATIC: cxm01:
7862 ; LINUX-64-STATIC: leaq    xdst+262144(,%rdi,4), %rax
7863 ; LINUX-64-STATIC: ret
7864
7865 ; LINUX-32-STATIC: cxm01:
7866 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7867 ; LINUX-32-STATIC-NEXT:         leal    xdst+262144(,[[EAX]],4), %eax
7868 ; LINUX-32-STATIC-NEXT:         ret
7869
7870 ; LINUX-32-PIC: cxm01:
7871 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7872 ; LINUX-32-PIC-NEXT:    leal    xdst+262144(,[[EAX]],4), %eax
7873 ; LINUX-32-PIC-NEXT:    ret
7874
7875 ; LINUX-64-PIC: cxm01:
7876 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7877 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7878 ; LINUX-64-PIC-NEXT:    ret
7879
7880 ; DARWIN-32-STATIC: _cxm01:
7881 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7882 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+262144(,[[EAX]],4), %eax
7883 ; DARWIN-32-STATIC-NEXT:        ret
7884
7885 ; DARWIN-32-DYNAMIC: _cxm01:
7886 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7887 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
7888 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
7889 ; DARWIN-32-DYNAMIC-NEXT:       ret
7890
7891 ; DARWIN-32-PIC: _cxm01:
7892 ; DARWIN-32-PIC:        calll   L123$pb
7893 ; DARWIN-32-PIC-NEXT: L123$pb:
7894 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7895 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7896 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L123$pb([[EAX]]), [[EAX:%e.x]]
7897 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7898 ; DARWIN-32-PIC-NEXT:   ret
7899
7900 ; DARWIN-64-STATIC: _cxm01:
7901 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7902 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7903 ; DARWIN-64-STATIC-NEXT:        ret
7904
7905 ; DARWIN-64-DYNAMIC: _cxm01:
7906 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7907 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7908 ; DARWIN-64-DYNAMIC-NEXT:       ret
7909
7910 ; DARWIN-64-PIC: _cxm01:
7911 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7912 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7913 ; DARWIN-64-PIC-NEXT:   ret
7914 }
7915
7916 define i8* @cam02(i64 %i) nounwind {
7917 entry:
7918         %0 = load i32** @ptr, align 8
7919         %1 = add i64 %i, 65536
7920         %2 = getelementptr i32* %0, i64 %1
7921         %3 = bitcast i32* %2 to i8*
7922         ret i8* %3
7923 ; LINUX-64-STATIC: cam02:
7924 ; LINUX-64-STATIC: movq    ptr(%rip), [[RAX:%r.x]]
7925 ; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
7926 ; LINUX-64-STATIC: ret
7927
7928 ; LINUX-32-STATIC: cam02:
7929 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7930 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
7931 ; LINUX-32-STATIC-NEXT:         leal    262144([[ECX]],[[EAX]],4), %eax
7932 ; LINUX-32-STATIC-NEXT:         ret
7933
7934 ; LINUX-32-PIC: cam02:
7935 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7936 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
7937 ; LINUX-32-PIC-NEXT:    leal    262144([[ECX]],[[EAX]],4), %eax
7938 ; LINUX-32-PIC-NEXT:    ret
7939
7940 ; LINUX-64-PIC: cam02:
7941 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7942 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), [[RAX:%r.x]]
7943 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7944 ; LINUX-64-PIC-NEXT:    ret
7945
7946 ; DARWIN-32-STATIC: _cam02:
7947 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7948 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
7949 ; DARWIN-32-STATIC-NEXT:        leal    262144([[ECX]],[[EAX]],4), %eax
7950 ; DARWIN-32-STATIC-NEXT:        ret
7951
7952 ; DARWIN-32-DYNAMIC: _cam02:
7953 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[EAX:%e.x]]
7954 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
7955 ; DARWIN-32-DYNAMIC-NEXT:       movl    4(%esp), [[ECX:%e.x]]
7956 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[EAX]],[[ECX]],4), %eax
7957 ; DARWIN-32-DYNAMIC-NEXT:       ret
7958
7959 ; DARWIN-32-PIC: _cam02:
7960 ; DARWIN-32-PIC:        calll   L124$pb
7961 ; DARWIN-32-PIC-NEXT: L124$pb:
7962 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7963 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L124$pb([[EAX]]), [[EAX:%e.x]]
7964 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
7965 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7966 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7967 ; DARWIN-32-PIC-NEXT:   ret
7968
7969 ; DARWIN-64-STATIC: _cam02:
7970 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7971 ; DARWIN-64-STATIC-NEXT:        movq    ([[RAX]]), [[RAX:%r.x]]
7972 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7973 ; DARWIN-64-STATIC-NEXT:        ret
7974
7975 ; DARWIN-64-DYNAMIC: _cam02:
7976 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7977 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RAX]]), [[RAX:%r.x]]
7978 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7979 ; DARWIN-64-DYNAMIC-NEXT:       ret
7980
7981 ; DARWIN-64-PIC: _cam02:
7982 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7983 ; DARWIN-64-PIC-NEXT:   movq    ([[RAX]]), [[RAX:%r.x]]
7984 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7985 ; DARWIN-64-PIC-NEXT:   ret
7986 }
7987
7988 define i8* @cam03(i64 %i) nounwind {
7989 entry:
7990         %0 = add i64 %i, 65536
7991         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7992         %2 = bitcast i32* %1 to i8*
7993         ret i8* %2
7994 ; LINUX-64-STATIC: cam03:
7995 ; LINUX-64-STATIC: leaq    dsrc+262144(,%rdi,4), %rax
7996 ; LINUX-64-STATIC: ret
7997
7998 ; LINUX-32-STATIC: cam03:
7999 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8000 ; LINUX-32-STATIC-NEXT:         leal    dsrc+262144(,[[EAX]],4), %eax
8001 ; LINUX-32-STATIC-NEXT:         ret
8002
8003 ; LINUX-32-PIC: cam03:
8004 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8005 ; LINUX-32-PIC-NEXT:    leal    dsrc+262144(,[[EAX]],4), %eax
8006 ; LINUX-32-PIC-NEXT:    ret
8007
8008 ; LINUX-64-PIC: cam03:
8009 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
8010 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8011 ; LINUX-64-PIC-NEXT:    ret
8012
8013 ; DARWIN-32-STATIC: _cam03:
8014 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8015 ; DARWIN-32-STATIC-NEXT:        leal    _dsrc+262144(,[[EAX]],4), %eax
8016 ; DARWIN-32-STATIC-NEXT:        ret
8017
8018 ; DARWIN-32-DYNAMIC: _cam03:
8019 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8020 ; DARWIN-32-DYNAMIC-NEXT:       leal    _dsrc+262144(,[[EAX]],4), %eax
8021 ; DARWIN-32-DYNAMIC-NEXT:       ret
8022
8023 ; DARWIN-32-PIC: _cam03:
8024 ; DARWIN-32-PIC:        calll   L125$pb
8025 ; DARWIN-32-PIC-NEXT: L125$pb:
8026 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8027 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8028 ; DARWIN-32-PIC-NEXT:   leal    (_dsrc-L125$pb)+262144([[EAX]],[[ECX]],4), %eax
8029 ; DARWIN-32-PIC-NEXT:   ret
8030
8031 ; DARWIN-64-STATIC: _cam03:
8032 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
8033 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8034 ; DARWIN-64-STATIC-NEXT:        ret
8035
8036 ; DARWIN-64-DYNAMIC: _cam03:
8037 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
8038 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8039 ; DARWIN-64-DYNAMIC-NEXT:       ret
8040
8041 ; DARWIN-64-PIC: _cam03:
8042 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
8043 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8044 ; DARWIN-64-PIC-NEXT:   ret
8045 }
8046
8047 define i8* @cam04(i64 %i) nounwind {
8048 entry:
8049         %0 = add i64 %i, 65536
8050         %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
8051         %2 = bitcast i32* %1 to i8*
8052         ret i8* %2
8053 ; LINUX-64-STATIC: cam04:
8054 ; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), %rax
8055 ; LINUX-64-STATIC: ret
8056
8057 ; LINUX-32-STATIC: cam04:
8058 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8059 ; LINUX-32-STATIC-NEXT:         leal    ddst+262144(,[[EAX]],4), %eax
8060 ; LINUX-32-STATIC-NEXT:         ret
8061
8062 ; LINUX-32-PIC: cam04:
8063 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8064 ; LINUX-32-PIC-NEXT:    leal    ddst+262144(,[[EAX]],4), %eax
8065 ; LINUX-32-PIC-NEXT:    ret
8066
8067 ; LINUX-64-PIC: cam04:
8068 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
8069 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8070 ; LINUX-64-PIC-NEXT:    ret
8071
8072 ; DARWIN-32-STATIC: _cam04:
8073 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8074 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+262144(,[[EAX]],4), %eax
8075 ; DARWIN-32-STATIC-NEXT:        ret
8076
8077 ; DARWIN-32-DYNAMIC: _cam04:
8078 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8079 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+262144(,[[EAX]],4), %eax
8080 ; DARWIN-32-DYNAMIC-NEXT:       ret
8081
8082 ; DARWIN-32-PIC: _cam04:
8083 ; DARWIN-32-PIC:        calll   L126$pb
8084 ; DARWIN-32-PIC-NEXT: L126$pb:
8085 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8086 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8087 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L126$pb)+262144([[EAX]],[[ECX]],4), %eax
8088 ; DARWIN-32-PIC-NEXT:   ret
8089
8090 ; DARWIN-64-STATIC: _cam04:
8091 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
8092 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8093 ; DARWIN-64-STATIC-NEXT:        ret
8094
8095 ; DARWIN-64-DYNAMIC: _cam04:
8096 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
8097 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8098 ; DARWIN-64-DYNAMIC-NEXT:       ret
8099
8100 ; DARWIN-64-PIC: _cam04:
8101 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
8102 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8103 ; DARWIN-64-PIC-NEXT:   ret
8104 }
8105
8106 define i8* @cam05(i64 %i) nounwind {
8107 entry:
8108         %0 = load i32** @dptr, align 8
8109         %1 = add i64 %i, 65536
8110         %2 = getelementptr i32* %0, i64 %1
8111         %3 = bitcast i32* %2 to i8*
8112         ret i8* %3
8113 ; LINUX-64-STATIC: cam05:
8114 ; LINUX-64-STATIC: movq    dptr(%rip), [[RAX:%r.x]]
8115 ; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
8116 ; LINUX-64-STATIC: ret
8117
8118 ; LINUX-32-STATIC: cam05:
8119 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8120 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
8121 ; LINUX-32-STATIC-NEXT:         leal    262144([[ECX]],[[EAX]],4), %eax
8122 ; LINUX-32-STATIC-NEXT:         ret
8123
8124 ; LINUX-32-PIC: cam05:
8125 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8126 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
8127 ; LINUX-32-PIC-NEXT:    leal    262144([[ECX]],[[EAX]],4), %eax
8128 ; LINUX-32-PIC-NEXT:    ret
8129
8130 ; LINUX-64-PIC: cam05:
8131 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
8132 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), [[RAX:%r.x]]
8133 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8134 ; LINUX-64-PIC-NEXT:    ret
8135
8136 ; DARWIN-32-STATIC: _cam05:
8137 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8138 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
8139 ; DARWIN-32-STATIC-NEXT:        leal    262144([[ECX]],[[EAX]],4), %eax
8140 ; DARWIN-32-STATIC-NEXT:        ret
8141
8142 ; DARWIN-32-DYNAMIC: _cam05:
8143 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8144 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
8145 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
8146 ; DARWIN-32-DYNAMIC-NEXT:       ret
8147
8148 ; DARWIN-32-PIC: _cam05:
8149 ; DARWIN-32-PIC:        calll   L127$pb
8150 ; DARWIN-32-PIC-NEXT: L127$pb:
8151 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8152 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8153 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L127$pb([[EAX]]), [[EAX:%e.x]]
8154 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
8155 ; DARWIN-32-PIC-NEXT:   ret
8156
8157 ; DARWIN-64-STATIC: _cam05:
8158 ; DARWIN-64-STATIC:     movq    _dptr(%rip), [[RAX:%r.x]]
8159 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8160 ; DARWIN-64-STATIC-NEXT:        ret
8161
8162 ; DARWIN-64-DYNAMIC: _cam05:
8163 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), [[RAX:%r.x]]
8164 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8165 ; DARWIN-64-DYNAMIC-NEXT:       ret
8166
8167 ; DARWIN-64-PIC: _cam05:
8168 ; DARWIN-64-PIC:        movq    _dptr(%rip), [[RAX:%r.x]]
8169 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8170 ; DARWIN-64-PIC-NEXT:   ret
8171 }
8172
8173 define i8* @cam06(i64 %i) nounwind {
8174 entry:
8175         %0 = add i64 %i, 65536
8176         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
8177         %2 = bitcast i32* %1 to i8*
8178         ret i8* %2
8179 ; LINUX-64-STATIC: cam06:
8180 ; LINUX-64-STATIC: leaq    lsrc+262144(,%rdi,4), %rax
8181 ; LINUX-64-STATIC: ret
8182
8183 ; LINUX-32-STATIC: cam06:
8184 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8185 ; LINUX-32-STATIC-NEXT:         leal    lsrc+262144(,[[EAX]],4), %eax
8186 ; LINUX-32-STATIC-NEXT:         ret
8187
8188 ; LINUX-32-PIC: cam06:
8189 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8190 ; LINUX-32-PIC-NEXT:    leal    lsrc+262144(,[[EAX]],4), %eax
8191 ; LINUX-32-PIC-NEXT:    ret
8192
8193 ; LINUX-64-PIC: cam06:
8194 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
8195 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8196 ; LINUX-64-PIC-NEXT:    ret
8197
8198 ; DARWIN-32-STATIC: _cam06:
8199 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8200 ; DARWIN-32-STATIC-NEXT:        leal    _lsrc+262144(,[[EAX]],4), %eax
8201 ; DARWIN-32-STATIC-NEXT:        ret
8202
8203 ; DARWIN-32-DYNAMIC: _cam06:
8204 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8205 ; DARWIN-32-DYNAMIC-NEXT:       leal    _lsrc+262144(,[[EAX]],4), %eax
8206 ; DARWIN-32-DYNAMIC-NEXT:       ret
8207
8208 ; DARWIN-32-PIC: _cam06:
8209 ; DARWIN-32-PIC:        calll   L128$pb
8210 ; DARWIN-32-PIC-NEXT: L128$pb:
8211 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8212 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8213 ; DARWIN-32-PIC-NEXT:   leal    (_lsrc-L128$pb)+262144([[EAX]],[[ECX]],4), %eax
8214 ; DARWIN-32-PIC-NEXT:   ret
8215
8216 ; DARWIN-64-STATIC: _cam06:
8217 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
8218 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8219 ; DARWIN-64-STATIC-NEXT:        ret
8220
8221 ; DARWIN-64-DYNAMIC: _cam06:
8222 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
8223 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8224 ; DARWIN-64-DYNAMIC-NEXT:       ret
8225
8226 ; DARWIN-64-PIC: _cam06:
8227 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
8228 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8229 ; DARWIN-64-PIC-NEXT:   ret
8230 }
8231
8232 define i8* @cam07(i64 %i) nounwind {
8233 entry:
8234         %0 = add i64 %i, 65536
8235         %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
8236         %2 = bitcast i32* %1 to i8*
8237         ret i8* %2
8238 ; LINUX-64-STATIC: cam07:
8239 ; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), %rax
8240 ; LINUX-64-STATIC: ret
8241
8242 ; LINUX-32-STATIC: cam07:
8243 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8244 ; LINUX-32-STATIC-NEXT:         leal    ldst+262144(,[[EAX]],4), %eax
8245 ; LINUX-32-STATIC-NEXT:         ret
8246
8247 ; LINUX-32-PIC: cam07:
8248 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8249 ; LINUX-32-PIC-NEXT:    leal    ldst+262144(,[[EAX]],4), %eax
8250 ; LINUX-32-PIC-NEXT:    ret
8251
8252 ; LINUX-64-PIC: cam07:
8253 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
8254 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8255 ; LINUX-64-PIC-NEXT:    ret
8256
8257 ; DARWIN-32-STATIC: _cam07:
8258 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8259 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+262144(,[[EAX]],4), %eax
8260 ; DARWIN-32-STATIC-NEXT:        ret
8261
8262 ; DARWIN-32-DYNAMIC: _cam07:
8263 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8264 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+262144(,[[EAX]],4), %eax
8265 ; DARWIN-32-DYNAMIC-NEXT:       ret
8266
8267 ; DARWIN-32-PIC: _cam07:
8268 ; DARWIN-32-PIC:        calll   L129$pb
8269 ; DARWIN-32-PIC-NEXT: L129$pb:
8270 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8271 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8272 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L129$pb)+262144([[EAX]],[[ECX]],4), %eax
8273 ; DARWIN-32-PIC-NEXT:   ret
8274
8275 ; DARWIN-64-STATIC: _cam07:
8276 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
8277 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8278 ; DARWIN-64-STATIC-NEXT:        ret
8279
8280 ; DARWIN-64-DYNAMIC: _cam07:
8281 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
8282 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8283 ; DARWIN-64-DYNAMIC-NEXT:       ret
8284
8285 ; DARWIN-64-PIC: _cam07:
8286 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
8287 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8288 ; DARWIN-64-PIC-NEXT:   ret
8289 }
8290
8291 define i8* @cam08(i64 %i) nounwind {
8292 entry:
8293         %0 = load i32** @lptr, align 8
8294         %1 = add i64 %i, 65536
8295         %2 = getelementptr i32* %0, i64 %1
8296         %3 = bitcast i32* %2 to i8*
8297         ret i8* %3
8298 ; LINUX-64-STATIC: cam08:
8299 ; LINUX-64-STATIC: movq    lptr(%rip), [[RAX:%r.x]]
8300 ; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
8301 ; LINUX-64-STATIC: ret
8302
8303 ; LINUX-32-STATIC: cam08:
8304 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8305 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
8306 ; LINUX-32-STATIC-NEXT:         leal    262144([[ECX]],[[EAX]],4), %eax
8307 ; LINUX-32-STATIC-NEXT:         ret
8308
8309 ; LINUX-32-PIC: cam08:
8310 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8311 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
8312 ; LINUX-32-PIC-NEXT:    leal    262144([[ECX]],[[EAX]],4), %eax
8313 ; LINUX-32-PIC-NEXT:    ret
8314
8315 ; LINUX-64-PIC: cam08:
8316 ; LINUX-64-PIC:         movq    lptr(%rip), [[RAX:%r.x]]
8317 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8318 ; LINUX-64-PIC-NEXT:    ret
8319
8320 ; DARWIN-32-STATIC: _cam08:
8321 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8322 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
8323 ; DARWIN-32-STATIC-NEXT:        leal    262144([[ECX]],[[EAX]],4), %eax
8324 ; DARWIN-32-STATIC-NEXT:        ret
8325
8326 ; DARWIN-32-DYNAMIC: _cam08:
8327 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8328 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
8329 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
8330 ; DARWIN-32-DYNAMIC-NEXT:       ret
8331
8332 ; DARWIN-32-PIC: _cam08:
8333 ; DARWIN-32-PIC:        calll   L130$pb
8334 ; DARWIN-32-PIC-NEXT: L130$pb:
8335 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8336 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8337 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L130$pb([[EAX]]), [[EAX:%e.x]]
8338 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
8339 ; DARWIN-32-PIC-NEXT:   ret
8340
8341 ; DARWIN-64-STATIC: _cam08:
8342 ; DARWIN-64-STATIC:     movq    _lptr(%rip), [[RAX:%r.x]]
8343 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8344 ; DARWIN-64-STATIC-NEXT:        ret
8345
8346 ; DARWIN-64-DYNAMIC: _cam08:
8347 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), [[RAX:%r.x]]
8348 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8349 ; DARWIN-64-DYNAMIC-NEXT:       ret
8350
8351 ; DARWIN-64-PIC: _cam08:
8352 ; DARWIN-64-PIC:        movq    _lptr(%rip), [[RAX:%r.x]]
8353 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8354 ; DARWIN-64-PIC-NEXT:   ret
8355 }
8356
8357 define void @lcallee() nounwind {
8358 entry:
8359         call void @x() nounwind
8360         call void @x() nounwind
8361         call void @x() nounwind
8362         call void @x() nounwind
8363         call void @x() nounwind
8364         call void @x() nounwind
8365         call void @x() nounwind
8366         ret void
8367 ; LINUX-64-STATIC: lcallee:
8368 ; LINUX-64-STATIC: callq   x
8369 ; LINUX-64-STATIC: callq   x
8370 ; LINUX-64-STATIC: callq   x
8371 ; LINUX-64-STATIC: callq   x
8372 ; LINUX-64-STATIC: callq   x
8373 ; LINUX-64-STATIC: callq   x
8374 ; LINUX-64-STATIC: callq   x
8375 ; LINUX-64-STATIC: ret
8376
8377 ; LINUX-32-STATIC: lcallee:
8378 ; LINUX-32-STATIC:      subl
8379 ; LINUX-32-STATIC-NEXT:         calll   x
8380 ; LINUX-32-STATIC-NEXT:         calll   x
8381 ; LINUX-32-STATIC-NEXT:         calll   x
8382 ; LINUX-32-STATIC-NEXT:         calll   x
8383 ; LINUX-32-STATIC-NEXT:         calll   x
8384 ; LINUX-32-STATIC-NEXT:         calll   x
8385 ; LINUX-32-STATIC-NEXT:         calll   x
8386 ; LINUX-32-STATIC-NEXT:         addl
8387 ; LINUX-32-STATIC-NEXT:         ret
8388
8389 ; LINUX-32-PIC: lcallee:
8390 ; LINUX-32-PIC:         subl
8391 ; LINUX-32-PIC-NEXT:    calll   x
8392 ; LINUX-32-PIC-NEXT:    calll   x
8393 ; LINUX-32-PIC-NEXT:    calll   x
8394 ; LINUX-32-PIC-NEXT:    calll   x
8395 ; LINUX-32-PIC-NEXT:    calll   x
8396 ; LINUX-32-PIC-NEXT:    calll   x
8397 ; LINUX-32-PIC-NEXT:    calll   x
8398 ; LINUX-32-PIC-NEXT:    addl
8399
8400 ; LINUX-32-PIC-NEXT:    ret
8401
8402 ; LINUX-64-PIC: lcallee:
8403 ; LINUX-64-PIC:         pushq
8404 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8405 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8406 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8407 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8408 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8409 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8410 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8411 ; LINUX-64-PIC-NEXT:    popq
8412 ; LINUX-64-PIC-NEXT:    ret
8413
8414 ; DARWIN-32-STATIC: _lcallee:
8415 ; DARWIN-32-STATIC:     subl    $12, %esp
8416 ; DARWIN-32-STATIC-NEXT:        calll   _x
8417 ; DARWIN-32-STATIC-NEXT:        calll   _x
8418 ; DARWIN-32-STATIC-NEXT:        calll   _x
8419 ; DARWIN-32-STATIC-NEXT:        calll   _x
8420 ; DARWIN-32-STATIC-NEXT:        calll   _x
8421 ; DARWIN-32-STATIC-NEXT:        calll   _x
8422 ; DARWIN-32-STATIC-NEXT:        calll   _x
8423 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8424 ; DARWIN-32-STATIC-NEXT:        ret
8425
8426 ; DARWIN-32-DYNAMIC: _lcallee:
8427 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8428 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8429 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8430 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8431 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8432 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8433 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8434 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8435 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8436 ; DARWIN-32-DYNAMIC-NEXT:       ret
8437
8438 ; DARWIN-32-PIC: _lcallee:
8439 ; DARWIN-32-PIC:        subl    $12, %esp
8440 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8441 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8442 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8443 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8444 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8445 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8446 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8447 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8448 ; DARWIN-32-PIC-NEXT:   ret
8449
8450 ; DARWIN-64-STATIC: _lcallee:
8451 ; DARWIN-64-STATIC:     pushq
8452 ; DARWIN-64-STATIC-NEXT:        callq   _x
8453 ; DARWIN-64-STATIC-NEXT:        callq   _x
8454 ; DARWIN-64-STATIC-NEXT:        callq   _x
8455 ; DARWIN-64-STATIC-NEXT:        callq   _x
8456 ; DARWIN-64-STATIC-NEXT:        callq   _x
8457 ; DARWIN-64-STATIC-NEXT:        callq   _x
8458 ; DARWIN-64-STATIC-NEXT:        callq   _x
8459 ; DARWIN-64-STATIC-NEXT:        popq
8460 ; DARWIN-64-STATIC-NEXT:        ret
8461
8462 ; DARWIN-64-DYNAMIC: _lcallee:
8463 ; DARWIN-64-DYNAMIC:    pushq
8464 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8465 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8466 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8467 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8468 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8469 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8470 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8471 ; DARWIN-64-DYNAMIC-NEXT:       popq
8472 ; DARWIN-64-DYNAMIC-NEXT:       ret
8473
8474 ; DARWIN-64-PIC: _lcallee:
8475 ; DARWIN-64-PIC:        pushq
8476 ; DARWIN-64-PIC-NEXT:   callq   _x
8477 ; DARWIN-64-PIC-NEXT:   callq   _x
8478 ; DARWIN-64-PIC-NEXT:   callq   _x
8479 ; DARWIN-64-PIC-NEXT:   callq   _x
8480 ; DARWIN-64-PIC-NEXT:   callq   _x
8481 ; DARWIN-64-PIC-NEXT:   callq   _x
8482 ; DARWIN-64-PIC-NEXT:   callq   _x
8483 ; DARWIN-64-PIC-NEXT:   popq
8484 ; DARWIN-64-PIC-NEXT:   ret
8485 }
8486
8487 declare void @x()
8488
8489 define internal void @dcallee() nounwind {
8490 entry:
8491         call void @y() nounwind
8492         call void @y() nounwind
8493         call void @y() nounwind
8494         call void @y() nounwind
8495         call void @y() nounwind
8496         call void @y() nounwind
8497         call void @y() nounwind
8498         ret void
8499 ; LINUX-64-STATIC: dcallee:
8500 ; LINUX-64-STATIC: callq   y
8501 ; LINUX-64-STATIC: callq   y
8502 ; LINUX-64-STATIC: callq   y
8503 ; LINUX-64-STATIC: callq   y
8504 ; LINUX-64-STATIC: callq   y
8505 ; LINUX-64-STATIC: callq   y
8506 ; LINUX-64-STATIC: callq   y
8507 ; LINUX-64-STATIC: ret
8508
8509 ; LINUX-32-STATIC: dcallee:
8510 ; LINUX-32-STATIC:      subl
8511 ; LINUX-32-STATIC-NEXT:         calll   y
8512 ; LINUX-32-STATIC-NEXT:         calll   y
8513 ; LINUX-32-STATIC-NEXT:         calll   y
8514 ; LINUX-32-STATIC-NEXT:         calll   y
8515 ; LINUX-32-STATIC-NEXT:         calll   y
8516 ; LINUX-32-STATIC-NEXT:         calll   y
8517 ; LINUX-32-STATIC-NEXT:         calll   y
8518 ; LINUX-32-STATIC-NEXT:         addl
8519 ; LINUX-32-STATIC-NEXT:         ret
8520
8521 ; LINUX-32-PIC: dcallee:
8522 ; LINUX-32-PIC:         subl
8523 ; LINUX-32-PIC-NEXT:    calll   y
8524 ; LINUX-32-PIC-NEXT:    calll   y
8525 ; LINUX-32-PIC-NEXT:    calll   y
8526 ; LINUX-32-PIC-NEXT:    calll   y
8527 ; LINUX-32-PIC-NEXT:    calll   y
8528 ; LINUX-32-PIC-NEXT:    calll   y
8529 ; LINUX-32-PIC-NEXT:    calll   y
8530 ; LINUX-32-PIC-NEXT:    addl
8531
8532 ; LINUX-32-PIC-NEXT:    ret
8533
8534 ; LINUX-64-PIC: dcallee:
8535 ; LINUX-64-PIC:         pushq
8536 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8537 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8538 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8539 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8540 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8541 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8542 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8543 ; LINUX-64-PIC-NEXT:    popq
8544 ; LINUX-64-PIC-NEXT:    ret
8545
8546 ; DARWIN-32-STATIC: _dcallee:
8547 ; DARWIN-32-STATIC:     subl    $12, %esp
8548 ; DARWIN-32-STATIC-NEXT:        calll   _y
8549 ; DARWIN-32-STATIC-NEXT:        calll   _y
8550 ; DARWIN-32-STATIC-NEXT:        calll   _y
8551 ; DARWIN-32-STATIC-NEXT:        calll   _y
8552 ; DARWIN-32-STATIC-NEXT:        calll   _y
8553 ; DARWIN-32-STATIC-NEXT:        calll   _y
8554 ; DARWIN-32-STATIC-NEXT:        calll   _y
8555 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8556 ; DARWIN-32-STATIC-NEXT:        ret
8557
8558 ; DARWIN-32-DYNAMIC: _dcallee:
8559 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8560 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8561 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8562 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8563 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8564 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8565 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8566 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8567 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8568 ; DARWIN-32-DYNAMIC-NEXT:       ret
8569
8570 ; DARWIN-32-PIC: _dcallee:
8571 ; DARWIN-32-PIC:        subl    $12, %esp
8572 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8573 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8574 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8575 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8576 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8577 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8578 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8579 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8580 ; DARWIN-32-PIC-NEXT:   ret
8581
8582 ; DARWIN-64-STATIC: _dcallee:
8583 ; DARWIN-64-STATIC:     pushq
8584 ; DARWIN-64-STATIC-NEXT:        callq   _y
8585 ; DARWIN-64-STATIC-NEXT:        callq   _y
8586 ; DARWIN-64-STATIC-NEXT:        callq   _y
8587 ; DARWIN-64-STATIC-NEXT:        callq   _y
8588 ; DARWIN-64-STATIC-NEXT:        callq   _y
8589 ; DARWIN-64-STATIC-NEXT:        callq   _y
8590 ; DARWIN-64-STATIC-NEXT:        callq   _y
8591 ; DARWIN-64-STATIC-NEXT:        popq
8592 ; DARWIN-64-STATIC-NEXT:        ret
8593
8594 ; DARWIN-64-DYNAMIC: _dcallee:
8595 ; DARWIN-64-DYNAMIC:    pushq
8596 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8597 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8598 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8599 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8600 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8601 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8602 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8603 ; DARWIN-64-DYNAMIC-NEXT:       popq
8604 ; DARWIN-64-DYNAMIC-NEXT:       ret
8605
8606 ; DARWIN-64-PIC: _dcallee:
8607 ; DARWIN-64-PIC:        pushq
8608 ; DARWIN-64-PIC-NEXT:   callq   _y
8609 ; DARWIN-64-PIC-NEXT:   callq   _y
8610 ; DARWIN-64-PIC-NEXT:   callq   _y
8611 ; DARWIN-64-PIC-NEXT:   callq   _y
8612 ; DARWIN-64-PIC-NEXT:   callq   _y
8613 ; DARWIN-64-PIC-NEXT:   callq   _y
8614 ; DARWIN-64-PIC-NEXT:   callq   _y
8615 ; DARWIN-64-PIC-NEXT:   popq
8616 ; DARWIN-64-PIC-NEXT:   ret
8617 }
8618
8619 declare void @y()
8620
8621 define void ()* @address() nounwind {
8622 entry:
8623         ret void ()* @callee
8624 ; LINUX-64-STATIC: address:
8625 ; LINUX-64-STATIC: movl    $callee, %eax
8626 ; LINUX-64-STATIC: ret
8627
8628 ; LINUX-32-STATIC: address:
8629 ; LINUX-32-STATIC:      movl    $callee, %eax
8630 ; LINUX-32-STATIC-NEXT:         ret
8631
8632 ; LINUX-32-PIC: address:
8633 ; LINUX-32-PIC:         movl    $callee, %eax
8634 ; LINUX-32-PIC-NEXT:    ret
8635
8636 ; LINUX-64-PIC: address:
8637 ; LINUX-64-PIC:         movq    callee@GOTPCREL(%rip), %rax
8638 ; LINUX-64-PIC-NEXT:    ret
8639
8640 ; DARWIN-32-STATIC: _address:
8641 ; DARWIN-32-STATIC:     movl    $_callee, %eax
8642 ; DARWIN-32-STATIC-NEXT:        ret
8643
8644 ; DARWIN-32-DYNAMIC: _address:
8645 ; DARWIN-32-DYNAMIC:    movl    L_callee$non_lazy_ptr, %eax
8646 ; DARWIN-32-DYNAMIC-NEXT:       ret
8647
8648 ; DARWIN-32-PIC: _address:
8649 ; DARWIN-32-PIC:        calll   L133$pb
8650 ; DARWIN-32-PIC-NEXT: L133$pb:
8651 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8652 ; DARWIN-32-PIC-NEXT:   movl    L_callee$non_lazy_ptr-L133$pb([[EAX]]), %eax
8653 ; DARWIN-32-PIC-NEXT:   ret
8654
8655 ; DARWIN-64-STATIC: _address:
8656 ; DARWIN-64-STATIC:     movq    _callee@GOTPCREL(%rip), %rax
8657 ; DARWIN-64-STATIC-NEXT:        ret
8658
8659 ; DARWIN-64-DYNAMIC: _address:
8660 ; DARWIN-64-DYNAMIC:    movq    _callee@GOTPCREL(%rip), %rax
8661 ; DARWIN-64-DYNAMIC-NEXT:       ret
8662
8663 ; DARWIN-64-PIC: _address:
8664 ; DARWIN-64-PIC:        movq    _callee@GOTPCREL(%rip), %rax
8665 ; DARWIN-64-PIC-NEXT:   ret
8666 }
8667
8668 declare void @callee()
8669
8670 define void ()* @laddress() nounwind {
8671 entry:
8672         ret void ()* @lcallee
8673 ; LINUX-64-STATIC: laddress:
8674 ; LINUX-64-STATIC: movl    $lcallee, %eax
8675 ; LINUX-64-STATIC: ret
8676
8677 ; LINUX-32-STATIC: laddress:
8678 ; LINUX-32-STATIC:      movl    $lcallee, %eax
8679 ; LINUX-32-STATIC-NEXT:         ret
8680
8681 ; LINUX-32-PIC: laddress:
8682 ; LINUX-32-PIC:         movl    $lcallee, %eax
8683 ; LINUX-32-PIC-NEXT:    ret
8684
8685 ; LINUX-64-PIC: laddress:
8686 ; LINUX-64-PIC:         movq    lcallee@GOTPCREL(%rip), %rax
8687 ; LINUX-64-PIC-NEXT:    ret
8688
8689 ; DARWIN-32-STATIC: _laddress:
8690 ; DARWIN-32-STATIC:     movl    $_lcallee, %eax
8691 ; DARWIN-32-STATIC-NEXT:        ret
8692
8693 ; DARWIN-32-DYNAMIC: _laddress:
8694 ; DARWIN-32-DYNAMIC:    movl    $_lcallee, %eax
8695 ; DARWIN-32-DYNAMIC-NEXT:       ret
8696
8697 ; DARWIN-32-PIC: _laddress:
8698 ; DARWIN-32-PIC:        calll   L134$pb
8699 ; DARWIN-32-PIC-NEXT: L134$pb:
8700 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8701 ; DARWIN-32-PIC-NEXT:   leal    _lcallee-L134$pb([[EAX]]), %eax
8702 ; DARWIN-32-PIC-NEXT:   ret
8703
8704 ; DARWIN-64-STATIC: _laddress:
8705 ; DARWIN-64-STATIC:     leaq    _lcallee(%rip), %rax
8706 ; DARWIN-64-STATIC-NEXT:        ret
8707
8708 ; DARWIN-64-DYNAMIC: _laddress:
8709 ; DARWIN-64-DYNAMIC:    leaq    _lcallee(%rip), %rax
8710 ; DARWIN-64-DYNAMIC-NEXT:       ret
8711
8712 ; DARWIN-64-PIC: _laddress:
8713 ; DARWIN-64-PIC:        leaq    _lcallee(%rip), %rax
8714 ; DARWIN-64-PIC-NEXT:   ret
8715 }
8716
8717 define void ()* @daddress() nounwind {
8718 entry:
8719         ret void ()* @dcallee
8720 ; LINUX-64-STATIC: daddress:
8721 ; LINUX-64-STATIC: movl    $dcallee, %eax
8722 ; LINUX-64-STATIC: ret
8723
8724 ; LINUX-32-STATIC: daddress:
8725 ; LINUX-32-STATIC:      movl    $dcallee, %eax
8726 ; LINUX-32-STATIC-NEXT:         ret
8727
8728 ; LINUX-32-PIC: daddress:
8729 ; LINUX-32-PIC:         movl    $dcallee, %eax
8730 ; LINUX-32-PIC-NEXT:    ret
8731
8732 ; LINUX-64-PIC: daddress:
8733 ; LINUX-64-PIC:         leaq    dcallee(%rip), %rax
8734 ; LINUX-64-PIC-NEXT:    ret
8735
8736 ; DARWIN-32-STATIC: _daddress:
8737 ; DARWIN-32-STATIC:     movl    $_dcallee, %eax
8738 ; DARWIN-32-STATIC-NEXT:        ret
8739
8740 ; DARWIN-32-DYNAMIC: _daddress:
8741 ; DARWIN-32-DYNAMIC:    movl    $_dcallee, %eax
8742 ; DARWIN-32-DYNAMIC-NEXT:       ret
8743
8744 ; DARWIN-32-PIC: _daddress:
8745 ; DARWIN-32-PIC:        calll   L135$pb
8746 ; DARWIN-32-PIC-NEXT: L135$pb:
8747 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8748 ; DARWIN-32-PIC-NEXT:   leal    _dcallee-L135$pb([[EAX]]), %eax
8749 ; DARWIN-32-PIC-NEXT:   ret
8750
8751 ; DARWIN-64-STATIC: _daddress:
8752 ; DARWIN-64-STATIC:     leaq    _dcallee(%rip), %rax
8753 ; DARWIN-64-STATIC-NEXT:        ret
8754
8755 ; DARWIN-64-DYNAMIC: _daddress:
8756 ; DARWIN-64-DYNAMIC:    leaq    _dcallee(%rip), %rax
8757 ; DARWIN-64-DYNAMIC-NEXT:       ret
8758
8759 ; DARWIN-64-PIC: _daddress:
8760 ; DARWIN-64-PIC:        leaq    _dcallee(%rip), %rax
8761 ; DARWIN-64-PIC-NEXT:   ret
8762 }
8763
8764 define void @caller() nounwind {
8765 entry:
8766         call void @callee() nounwind
8767         call void @callee() nounwind
8768         ret void
8769 ; LINUX-64-STATIC: caller:
8770 ; LINUX-64-STATIC: callq   callee
8771 ; LINUX-64-STATIC: callq   callee
8772 ; LINUX-64-STATIC: ret
8773
8774 ; LINUX-32-STATIC: caller:
8775 ; LINUX-32-STATIC:      subl
8776 ; LINUX-32-STATIC-NEXT:         calll   callee
8777 ; LINUX-32-STATIC-NEXT:         calll   callee
8778 ; LINUX-32-STATIC-NEXT:         addl
8779 ; LINUX-32-STATIC-NEXT:         ret
8780
8781 ; LINUX-32-PIC: caller:
8782 ; LINUX-32-PIC:         subl
8783 ; LINUX-32-PIC-NEXT:    calll   callee
8784 ; LINUX-32-PIC-NEXT:    calll   callee
8785 ; LINUX-32-PIC-NEXT:    addl
8786
8787 ; LINUX-32-PIC-NEXT:    ret
8788
8789 ; LINUX-64-PIC: caller:
8790 ; LINUX-64-PIC:         pushq
8791 ; LINUX-64-PIC-NEXT:    callq   callee@PLT
8792 ; LINUX-64-PIC-NEXT:    callq   callee@PLT
8793 ; LINUX-64-PIC-NEXT:    popq
8794 ; LINUX-64-PIC-NEXT:    ret
8795
8796 ; DARWIN-32-STATIC: _caller:
8797 ; DARWIN-32-STATIC:     subl    $12, %esp
8798 ; DARWIN-32-STATIC-NEXT:        calll   _callee
8799 ; DARWIN-32-STATIC-NEXT:        calll   _callee
8800 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8801 ; DARWIN-32-STATIC-NEXT:        ret
8802
8803 ; DARWIN-32-DYNAMIC: _caller:
8804 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8805 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_callee$stub
8806 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_callee$stub
8807 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8808 ; DARWIN-32-DYNAMIC-NEXT:       ret
8809
8810 ; DARWIN-32-PIC: _caller:
8811 ; DARWIN-32-PIC:        subl    $12, %esp
8812 ; DARWIN-32-PIC-NEXT:   calll   L_callee$stub
8813 ; DARWIN-32-PIC-NEXT:   calll   L_callee$stub
8814 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8815 ; DARWIN-32-PIC-NEXT:   ret
8816
8817 ; DARWIN-64-STATIC: _caller:
8818 ; DARWIN-64-STATIC:     pushq
8819 ; DARWIN-64-STATIC-NEXT:        callq   _callee
8820 ; DARWIN-64-STATIC-NEXT:        callq   _callee
8821 ; DARWIN-64-STATIC-NEXT:        popq
8822 ; DARWIN-64-STATIC-NEXT:        ret
8823
8824 ; DARWIN-64-DYNAMIC: _caller:
8825 ; DARWIN-64-DYNAMIC:    pushq
8826 ; DARWIN-64-DYNAMIC-NEXT:       callq   _callee
8827 ; DARWIN-64-DYNAMIC-NEXT:       callq   _callee
8828 ; DARWIN-64-DYNAMIC-NEXT:       popq
8829 ; DARWIN-64-DYNAMIC-NEXT:       ret
8830
8831 ; DARWIN-64-PIC: _caller:
8832 ; DARWIN-64-PIC:        pushq
8833 ; DARWIN-64-PIC-NEXT:   callq   _callee
8834 ; DARWIN-64-PIC-NEXT:   callq   _callee
8835 ; DARWIN-64-PIC-NEXT:   popq
8836 ; DARWIN-64-PIC-NEXT:   ret
8837 }
8838
8839 define void @dcaller() nounwind {
8840 entry:
8841         call void @dcallee() nounwind
8842         call void @dcallee() nounwind
8843         ret void
8844 ; LINUX-64-STATIC: dcaller:
8845 ; LINUX-64-STATIC: callq   dcallee
8846 ; LINUX-64-STATIC: callq   dcallee
8847 ; LINUX-64-STATIC: ret
8848
8849 ; LINUX-32-STATIC: dcaller:
8850 ; LINUX-32-STATIC:      subl
8851 ; LINUX-32-STATIC-NEXT:         calll   dcallee
8852 ; LINUX-32-STATIC-NEXT:         calll   dcallee
8853 ; LINUX-32-STATIC-NEXT:         addl
8854 ; LINUX-32-STATIC-NEXT:         ret
8855
8856 ; LINUX-32-PIC: dcaller:
8857 ; LINUX-32-PIC:         subl
8858 ; LINUX-32-PIC-NEXT:    calll   dcallee
8859 ; LINUX-32-PIC-NEXT:    calll   dcallee
8860 ; LINUX-32-PIC-NEXT:    addl
8861
8862 ; LINUX-32-PIC-NEXT:    ret
8863
8864 ; LINUX-64-PIC: dcaller:
8865 ; LINUX-64-PIC:         pushq
8866 ; LINUX-64-PIC-NEXT:    callq   dcallee
8867 ; LINUX-64-PIC-NEXT:    callq   dcallee
8868 ; LINUX-64-PIC-NEXT:    popq
8869 ; LINUX-64-PIC-NEXT:    ret
8870
8871 ; DARWIN-32-STATIC: _dcaller:
8872 ; DARWIN-32-STATIC:     subl    $12, %esp
8873 ; DARWIN-32-STATIC-NEXT:        calll   _dcallee
8874 ; DARWIN-32-STATIC-NEXT:        calll   _dcallee
8875 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8876 ; DARWIN-32-STATIC-NEXT:        ret
8877
8878 ; DARWIN-32-DYNAMIC: _dcaller:
8879 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8880 ; DARWIN-32-DYNAMIC-NEXT:       calll   _dcallee
8881 ; DARWIN-32-DYNAMIC-NEXT:       calll   _dcallee
8882 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8883 ; DARWIN-32-DYNAMIC-NEXT:       ret
8884
8885 ; DARWIN-32-PIC: _dcaller:
8886 ; DARWIN-32-PIC:        subl    $12, %esp
8887 ; DARWIN-32-PIC-NEXT:   calll   _dcallee
8888 ; DARWIN-32-PIC-NEXT:   calll   _dcallee
8889 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8890 ; DARWIN-32-PIC-NEXT:   ret
8891
8892 ; DARWIN-64-STATIC: _dcaller:
8893 ; DARWIN-64-STATIC:     pushq
8894 ; DARWIN-64-STATIC-NEXT:        callq   _dcallee
8895 ; DARWIN-64-STATIC-NEXT:        callq   _dcallee
8896 ; DARWIN-64-STATIC-NEXT:        popq
8897 ; DARWIN-64-STATIC-NEXT:        ret
8898
8899 ; DARWIN-64-DYNAMIC: _dcaller:
8900 ; DARWIN-64-DYNAMIC:    pushq
8901 ; DARWIN-64-DYNAMIC-NEXT:       callq   _dcallee
8902 ; DARWIN-64-DYNAMIC-NEXT:       callq   _dcallee
8903 ; DARWIN-64-DYNAMIC-NEXT:       popq
8904 ; DARWIN-64-DYNAMIC-NEXT:       ret
8905
8906 ; DARWIN-64-PIC: _dcaller:
8907 ; DARWIN-64-PIC:        pushq
8908 ; DARWIN-64-PIC-NEXT:   callq   _dcallee
8909 ; DARWIN-64-PIC-NEXT:   callq   _dcallee
8910 ; DARWIN-64-PIC-NEXT:   popq
8911 ; DARWIN-64-PIC-NEXT:   ret
8912 }
8913
8914 define void @lcaller() nounwind {
8915 entry:
8916         call void @lcallee() nounwind
8917         call void @lcallee() nounwind
8918         ret void
8919 ; LINUX-64-STATIC: lcaller:
8920 ; LINUX-64-STATIC: callq   lcallee
8921 ; LINUX-64-STATIC: callq   lcallee
8922 ; LINUX-64-STATIC: ret
8923
8924 ; LINUX-32-STATIC: lcaller:
8925 ; LINUX-32-STATIC:      subl
8926 ; LINUX-32-STATIC-NEXT:         calll   lcallee
8927 ; LINUX-32-STATIC-NEXT:         calll   lcallee
8928 ; LINUX-32-STATIC-NEXT:         addl
8929 ; LINUX-32-STATIC-NEXT:         ret
8930
8931 ; LINUX-32-PIC: lcaller:
8932 ; LINUX-32-PIC:         subl
8933 ; LINUX-32-PIC-NEXT:    calll   lcallee
8934 ; LINUX-32-PIC-NEXT:    calll   lcallee
8935 ; LINUX-32-PIC-NEXT:    addl
8936
8937 ; LINUX-32-PIC-NEXT:    ret
8938
8939 ; LINUX-64-PIC: lcaller:
8940 ; LINUX-64-PIC:         pushq
8941 ; LINUX-64-PIC-NEXT:    callq   lcallee@PLT
8942 ; LINUX-64-PIC-NEXT:    callq   lcallee@PLT
8943 ; LINUX-64-PIC-NEXT:    popq
8944 ; LINUX-64-PIC-NEXT:    ret
8945
8946 ; DARWIN-32-STATIC: _lcaller:
8947 ; DARWIN-32-STATIC:     subl    $12, %esp
8948 ; DARWIN-32-STATIC-NEXT:        calll   _lcallee
8949 ; DARWIN-32-STATIC-NEXT:        calll   _lcallee
8950 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8951 ; DARWIN-32-STATIC-NEXT:        ret
8952
8953 ; DARWIN-32-DYNAMIC: _lcaller:
8954 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8955 ; DARWIN-32-DYNAMIC-NEXT:       calll   _lcallee
8956 ; DARWIN-32-DYNAMIC-NEXT:       calll   _lcallee
8957 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8958 ; DARWIN-32-DYNAMIC-NEXT:       ret
8959
8960 ; DARWIN-32-PIC: _lcaller:
8961 ; DARWIN-32-PIC:        subl    $12, %esp
8962 ; DARWIN-32-PIC-NEXT:   calll   _lcallee
8963 ; DARWIN-32-PIC-NEXT:   calll   _lcallee
8964 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8965 ; DARWIN-32-PIC-NEXT:   ret
8966
8967 ; DARWIN-64-STATIC: _lcaller:
8968 ; DARWIN-64-STATIC:     pushq
8969 ; DARWIN-64-STATIC-NEXT:        callq   _lcallee
8970 ; DARWIN-64-STATIC-NEXT:        callq   _lcallee
8971 ; DARWIN-64-STATIC-NEXT:        popq
8972 ; DARWIN-64-STATIC-NEXT:        ret
8973
8974 ; DARWIN-64-DYNAMIC: _lcaller:
8975 ; DARWIN-64-DYNAMIC:    pushq
8976 ; DARWIN-64-DYNAMIC-NEXT:       callq   _lcallee
8977 ; DARWIN-64-DYNAMIC-NEXT:       callq   _lcallee
8978 ; DARWIN-64-DYNAMIC-NEXT:       popq
8979 ; DARWIN-64-DYNAMIC-NEXT:       ret
8980
8981 ; DARWIN-64-PIC: _lcaller:
8982 ; DARWIN-64-PIC:        pushq
8983 ; DARWIN-64-PIC-NEXT:   callq   _lcallee
8984 ; DARWIN-64-PIC-NEXT:   callq   _lcallee
8985 ; DARWIN-64-PIC-NEXT:   popq
8986 ; DARWIN-64-PIC-NEXT:   ret
8987 }
8988
8989 define void @tailcaller() nounwind {
8990 entry:
8991         call void @callee() nounwind
8992         ret void
8993 ; LINUX-64-STATIC: tailcaller:
8994 ; LINUX-64-STATIC: callq   callee
8995 ; LINUX-64-STATIC: ret
8996
8997 ; LINUX-32-STATIC: tailcaller:
8998 ; LINUX-32-STATIC:      subl
8999 ; LINUX-32-STATIC-NEXT:         calll   callee
9000 ; LINUX-32-STATIC-NEXT:         addl
9001 ; LINUX-32-STATIC-NEXT:         ret
9002
9003 ; LINUX-32-PIC: tailcaller:
9004 ; LINUX-32-PIC:         subl
9005 ; LINUX-32-PIC-NEXT:    calll   callee
9006 ; LINUX-32-PIC-NEXT:    addl
9007
9008 ; LINUX-32-PIC-NEXT:    ret
9009
9010 ; LINUX-64-PIC: tailcaller:
9011 ; LINUX-64-PIC:         pushq
9012 ; LINUX-64-PIC-NEXT:    callq   callee@PLT
9013 ; LINUX-64-PIC-NEXT:    popq
9014 ; LINUX-64-PIC-NEXT:    ret
9015
9016 ; DARWIN-32-STATIC: _tailcaller:
9017 ; DARWIN-32-STATIC:     subl    $12, %esp
9018 ; DARWIN-32-STATIC-NEXT:        calll   _callee
9019 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9020 ; DARWIN-32-STATIC-NEXT:        ret
9021
9022 ; DARWIN-32-DYNAMIC: _tailcaller:
9023 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9024 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_callee$stub
9025 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9026 ; DARWIN-32-DYNAMIC-NEXT:       ret
9027
9028 ; DARWIN-32-PIC: _tailcaller:
9029 ; DARWIN-32-PIC:        subl    $12, %esp
9030 ; DARWIN-32-PIC-NEXT:   calll   L_callee$stub
9031 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9032 ; DARWIN-32-PIC-NEXT:   ret
9033
9034 ; DARWIN-64-STATIC: _tailcaller:
9035 ; DARWIN-64-STATIC:     pushq
9036 ; DARWIN-64-STATIC-NEXT:        callq   _callee
9037 ; DARWIN-64-STATIC-NEXT:        popq
9038 ; DARWIN-64-STATIC-NEXT:        ret
9039
9040 ; DARWIN-64-DYNAMIC: _tailcaller:
9041 ; DARWIN-64-DYNAMIC:    pushq
9042 ; DARWIN-64-DYNAMIC-NEXT:       callq   _callee
9043 ; DARWIN-64-DYNAMIC-NEXT:       popq
9044 ; DARWIN-64-DYNAMIC-NEXT:       ret
9045
9046 ; DARWIN-64-PIC: _tailcaller:
9047 ; DARWIN-64-PIC:        pushq
9048 ; DARWIN-64-PIC-NEXT:   callq   _callee
9049 ; DARWIN-64-PIC-NEXT:   popq
9050 ; DARWIN-64-PIC-NEXT:   ret
9051 }
9052
9053 define void @dtailcaller() nounwind {
9054 entry:
9055         call void @dcallee() nounwind
9056         ret void
9057 ; LINUX-64-STATIC: dtailcaller:
9058 ; LINUX-64-STATIC: callq   dcallee
9059 ; LINUX-64-STATIC: ret
9060
9061 ; LINUX-32-STATIC: dtailcaller:
9062 ; LINUX-32-STATIC:      subl
9063 ; LINUX-32-STATIC-NEXT:         calll   dcallee
9064 ; LINUX-32-STATIC-NEXT:         addl
9065 ; LINUX-32-STATIC-NEXT:         ret
9066
9067 ; LINUX-32-PIC: dtailcaller:
9068 ; LINUX-32-PIC:         subl
9069 ; LINUX-32-PIC-NEXT:    calll   dcallee
9070 ; LINUX-32-PIC-NEXT:    addl
9071
9072 ; LINUX-32-PIC-NEXT:    ret
9073
9074 ; LINUX-64-PIC: dtailcaller:
9075 ; LINUX-64-PIC:         pushq
9076 ; LINUX-64-PIC-NEXT:    callq   dcallee
9077 ; LINUX-64-PIC-NEXT:    popq
9078 ; LINUX-64-PIC-NEXT:    ret
9079
9080 ; DARWIN-32-STATIC: _dtailcaller:
9081 ; DARWIN-32-STATIC:     subl    $12, %esp
9082 ; DARWIN-32-STATIC-NEXT:        calll   _dcallee
9083 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9084 ; DARWIN-32-STATIC-NEXT:        ret
9085
9086 ; DARWIN-32-DYNAMIC: _dtailcaller:
9087 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9088 ; DARWIN-32-DYNAMIC-NEXT:       calll   _dcallee
9089 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9090 ; DARWIN-32-DYNAMIC-NEXT:       ret
9091
9092 ; DARWIN-32-PIC: _dtailcaller:
9093 ; DARWIN-32-PIC:        subl    $12, %esp
9094 ; DARWIN-32-PIC-NEXT:   calll   _dcallee
9095 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9096 ; DARWIN-32-PIC-NEXT:   ret
9097
9098 ; DARWIN-64-STATIC: _dtailcaller:
9099 ; DARWIN-64-STATIC:     pushq
9100 ; DARWIN-64-STATIC-NEXT:        callq   _dcallee
9101 ; DARWIN-64-STATIC-NEXT:        popq
9102 ; DARWIN-64-STATIC-NEXT:        ret
9103
9104 ; DARWIN-64-DYNAMIC: _dtailcaller:
9105 ; DARWIN-64-DYNAMIC:    pushq
9106 ; DARWIN-64-DYNAMIC-NEXT:       callq   _dcallee
9107 ; DARWIN-64-DYNAMIC-NEXT:       popq
9108 ; DARWIN-64-DYNAMIC-NEXT:       ret
9109
9110 ; DARWIN-64-PIC: _dtailcaller:
9111 ; DARWIN-64-PIC:        pushq
9112 ; DARWIN-64-PIC-NEXT:   callq   _dcallee
9113 ; DARWIN-64-PIC-NEXT:   popq
9114 ; DARWIN-64-PIC-NEXT:   ret
9115 }
9116
9117 define void @ltailcaller() nounwind {
9118 entry:
9119         call void @lcallee() nounwind
9120         ret void
9121 ; LINUX-64-STATIC: ltailcaller:
9122 ; LINUX-64-STATIC: callq   lcallee
9123 ; LINUX-64-STATIC: ret
9124
9125 ; LINUX-32-STATIC: ltailcaller:
9126 ; LINUX-32-STATIC:      subl
9127 ; LINUX-32-STATIC-NEXT:         calll   lcallee
9128 ; LINUX-32-STATIC-NEXT:         addl
9129 ; LINUX-32-STATIC-NEXT:         ret
9130
9131 ; LINUX-32-PIC: ltailcaller:
9132 ; LINUX-32-PIC:         subl
9133 ; LINUX-32-PIC-NEXT:    calll   lcallee
9134 ; LINUX-32-PIC-NEXT:    addl
9135
9136 ; LINUX-32-PIC-NEXT:    ret
9137
9138 ; LINUX-64-PIC: ltailcaller:
9139 ; LINUX-64-PIC:         pushq
9140 ; LINUX-64-PIC-NEXT:    callq   lcallee@PLT
9141 ; LINUX-64-PIC-NEXT:    popq
9142 ; LINUX-64-PIC-NEXT:    ret
9143
9144 ; DARWIN-32-STATIC: _ltailcaller:
9145 ; DARWIN-32-STATIC:     subl    $12, %esp
9146 ; DARWIN-32-STATIC-NEXT:        calll   _lcallee
9147 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9148 ; DARWIN-32-STATIC-NEXT:        ret
9149
9150 ; DARWIN-32-DYNAMIC: _ltailcaller:
9151 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9152 ; DARWIN-32-DYNAMIC-NEXT:       calll   _lcallee
9153 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9154 ; DARWIN-32-DYNAMIC-NEXT:       ret
9155
9156 ; DARWIN-32-PIC: _ltailcaller:
9157 ; DARWIN-32-PIC:        subl    $12, %esp
9158 ; DARWIN-32-PIC-NEXT:   calll   _lcallee
9159 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9160 ; DARWIN-32-PIC-NEXT:   ret
9161
9162 ; DARWIN-64-STATIC: _ltailcaller:
9163 ; DARWIN-64-STATIC:     pushq
9164 ; DARWIN-64-STATIC-NEXT:        callq   _lcallee
9165 ; DARWIN-64-STATIC-NEXT:        popq
9166 ; DARWIN-64-STATIC-NEXT:        ret
9167
9168 ; DARWIN-64-DYNAMIC: _ltailcaller:
9169 ; DARWIN-64-DYNAMIC:    pushq
9170 ; DARWIN-64-DYNAMIC-NEXT:       callq   _lcallee
9171 ; DARWIN-64-DYNAMIC-NEXT:       popq
9172 ; DARWIN-64-DYNAMIC-NEXT:       ret
9173
9174 ; DARWIN-64-PIC: _ltailcaller:
9175 ; DARWIN-64-PIC:        pushq
9176 ; DARWIN-64-PIC-NEXT:   callq   _lcallee
9177 ; DARWIN-64-PIC-NEXT:   popq
9178 ; DARWIN-64-PIC-NEXT:   ret
9179 }
9180
9181 define void @icaller() nounwind {
9182 entry:
9183         %0 = load void ()** @ifunc, align 8
9184         call void %0() nounwind
9185         %1 = load void ()** @ifunc, align 8
9186         call void %1() nounwind
9187         ret void
9188 ; LINUX-64-STATIC: icaller:
9189 ; LINUX-64-STATIC: callq   *ifunc
9190 ; LINUX-64-STATIC: callq   *ifunc
9191 ; LINUX-64-STATIC: ret
9192
9193 ; LINUX-32-STATIC: icaller:
9194 ; LINUX-32-STATIC:      subl
9195 ; LINUX-32-STATIC-NEXT:         calll   *ifunc
9196 ; LINUX-32-STATIC-NEXT:         calll   *ifunc
9197 ; LINUX-32-STATIC-NEXT:         addl
9198 ; LINUX-32-STATIC-NEXT:         ret
9199
9200 ; LINUX-32-PIC: icaller:
9201 ; LINUX-32-PIC:         subl
9202 ; LINUX-32-PIC-NEXT:    calll   *ifunc
9203 ; LINUX-32-PIC-NEXT:    calll   *ifunc
9204 ; LINUX-32-PIC-NEXT:    addl
9205
9206 ; LINUX-32-PIC-NEXT:    ret
9207
9208 ; LINUX-64-PIC: icaller:
9209 ; LINUX-64-PIC:         pushq   [[RBX:%r.x]]
9210 ; LINUX-64-PIC-NEXT:    movq    ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9211 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9212 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9213 ; LINUX-64-PIC-NEXT:    popq    [[RBX:%r.x]]
9214 ; LINUX-64-PIC-NEXT:    ret
9215
9216 ; DARWIN-32-STATIC: _icaller:
9217 ; DARWIN-32-STATIC:     subl    $12, %esp
9218 ; DARWIN-32-STATIC-NEXT:        calll   *_ifunc
9219 ; DARWIN-32-STATIC-NEXT:        calll   *_ifunc
9220 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9221 ; DARWIN-32-STATIC-NEXT:        ret
9222
9223 ; DARWIN-32-DYNAMIC: _icaller:
9224 ; DARWIN-32-DYNAMIC:    pushl   %esi
9225 ; DARWIN-32-DYNAMIC-NEXT:       subl    $8, %esp
9226 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ifunc$non_lazy_ptr, %esi
9227 ; DARWIN-32-DYNAMIC-NEXT:       calll   *(%esi)
9228 ; DARWIN-32-DYNAMIC-NEXT:       calll   *(%esi)
9229 ; DARWIN-32-DYNAMIC-NEXT:       addl    $8, %esp
9230 ; DARWIN-32-DYNAMIC-NEXT:       popl    %esi
9231 ; DARWIN-32-DYNAMIC-NEXT:       ret
9232
9233 ; DARWIN-32-PIC: _icaller:
9234 ; DARWIN-32-PIC:        pushl   %esi
9235 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9236 ; DARWIN-32-PIC-NEXT:   calll   L142$pb
9237 ; DARWIN-32-PIC-NEXT: L142$pb:
9238 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
9239 ; DARWIN-32-PIC-NEXT:   movl    L_ifunc$non_lazy_ptr-L142$pb([[EAX]]), %esi
9240 ; DARWIN-32-PIC-NEXT:   calll   *(%esi)
9241 ; DARWIN-32-PIC-NEXT:   calll   *(%esi)
9242 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9243 ; DARWIN-32-PIC-NEXT:   popl    %esi
9244 ; DARWIN-32-PIC-NEXT:   ret
9245
9246 ; DARWIN-64-STATIC: _icaller:
9247 ; DARWIN-64-STATIC:     pushq   [[RBX:%r.x]]
9248 ; DARWIN-64-STATIC-NEXT:        movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9249 ; DARWIN-64-STATIC-NEXT:        callq   *([[RBX]])
9250 ; DARWIN-64-STATIC-NEXT:        callq   *([[RBX]])
9251 ; DARWIN-64-STATIC-NEXT:        popq    [[RBX:%r.x]]
9252 ; DARWIN-64-STATIC-NEXT:        ret
9253
9254 ; DARWIN-64-DYNAMIC: _icaller:
9255 ; DARWIN-64-DYNAMIC:    pushq   [[RBX:%r.x]]
9256 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9257 ; DARWIN-64-DYNAMIC-NEXT:       callq   *([[RBX]])
9258 ; DARWIN-64-DYNAMIC-NEXT:       callq   *([[RBX]])
9259 ; DARWIN-64-DYNAMIC-NEXT:       popq    [[RBX:%r.x]]
9260 ; DARWIN-64-DYNAMIC-NEXT:       ret
9261
9262 ; DARWIN-64-PIC: _icaller:
9263 ; DARWIN-64-PIC:        pushq   [[RBX:%r.x]]
9264 ; DARWIN-64-PIC-NEXT:   movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9265 ; DARWIN-64-PIC-NEXT:   callq   *([[RBX]])
9266 ; DARWIN-64-PIC-NEXT:   callq   *([[RBX]])
9267 ; DARWIN-64-PIC-NEXT:   popq    [[RBX:%r.x]]
9268 ; DARWIN-64-PIC-NEXT:   ret
9269 }
9270
9271 define void @dicaller() nounwind {
9272 entry:
9273         %0 = load void ()** @difunc, align 8
9274         call void %0() nounwind
9275         %1 = load void ()** @difunc, align 8
9276         call void %1() nounwind
9277         ret void
9278 ; LINUX-64-STATIC: dicaller:
9279 ; LINUX-64-STATIC: callq   *difunc
9280 ; LINUX-64-STATIC: callq   *difunc
9281 ; LINUX-64-STATIC: ret
9282
9283 ; LINUX-32-STATIC: dicaller:
9284 ; LINUX-32-STATIC:      subl
9285 ; LINUX-32-STATIC-NEXT:         calll   *difunc
9286 ; LINUX-32-STATIC-NEXT:         calll   *difunc
9287 ; LINUX-32-STATIC-NEXT:         addl
9288 ; LINUX-32-STATIC-NEXT:         ret
9289
9290 ; LINUX-32-PIC: dicaller:
9291 ; LINUX-32-PIC:         subl
9292 ; LINUX-32-PIC-NEXT:    calll   *difunc
9293 ; LINUX-32-PIC-NEXT:    calll   *difunc
9294 ; LINUX-32-PIC-NEXT:    addl
9295
9296 ; LINUX-32-PIC-NEXT:    ret
9297
9298 ; LINUX-64-PIC: dicaller:
9299 ; LINUX-64-PIC:         pushq   [[RBX:%r.x]]
9300 ; LINUX-64-PIC-NEXT:    movq    difunc@GOTPCREL(%rip), [[RBX:%r.x]]
9301 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9302 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9303 ; LINUX-64-PIC-NEXT:    popq    [[RBX:%r.x]]
9304 ; LINUX-64-PIC-NEXT:    ret
9305
9306 ; DARWIN-32-STATIC: _dicaller:
9307 ; DARWIN-32-STATIC:     subl    $12, %esp
9308 ; DARWIN-32-STATIC-NEXT:        calll   *_difunc
9309 ; DARWIN-32-STATIC-NEXT:        calll   *_difunc
9310 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9311 ; DARWIN-32-STATIC-NEXT:        ret
9312
9313 ; DARWIN-32-DYNAMIC: _dicaller:
9314 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9315 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_difunc
9316 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_difunc
9317 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9318 ; DARWIN-32-DYNAMIC-NEXT:       ret
9319
9320 ; DARWIN-32-PIC: _dicaller:
9321 ; DARWIN-32-PIC:        pushl   %esi
9322 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9323 ; DARWIN-32-PIC-NEXT:   calll   L143$pb
9324 ; DARWIN-32-PIC-NEXT: L143$pb:
9325 ; DARWIN-32-PIC-NEXT:   popl    %esi
9326 ; DARWIN-32-PIC-NEXT:   calll   *_difunc-L143$pb(%esi)
9327 ; DARWIN-32-PIC-NEXT:   calll   *_difunc-L143$pb(%esi)
9328 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9329 ; DARWIN-32-PIC-NEXT:   popl    %esi
9330 ; DARWIN-32-PIC-NEXT:   ret
9331
9332 ; DARWIN-64-STATIC: _dicaller:
9333 ; DARWIN-64-STATIC:     pushq
9334 ; DARWIN-64-STATIC-NEXT:        callq   *_difunc(%rip)
9335 ; DARWIN-64-STATIC-NEXT:        callq   *_difunc(%rip)
9336 ; DARWIN-64-STATIC-NEXT:        popq
9337 ; DARWIN-64-STATIC-NEXT:        ret
9338
9339 ; DARWIN-64-DYNAMIC: _dicaller:
9340 ; DARWIN-64-DYNAMIC:    pushq
9341 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_difunc(%rip)
9342 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_difunc(%rip)
9343 ; DARWIN-64-DYNAMIC-NEXT:       popq
9344 ; DARWIN-64-DYNAMIC-NEXT:       ret
9345
9346 ; DARWIN-64-PIC: _dicaller:
9347 ; DARWIN-64-PIC:        pushq
9348 ; DARWIN-64-PIC-NEXT:   callq   *_difunc(%rip)
9349 ; DARWIN-64-PIC-NEXT:   callq   *_difunc(%rip)
9350 ; DARWIN-64-PIC-NEXT:   popq
9351 ; DARWIN-64-PIC-NEXT:   ret
9352 }
9353
9354 define void @licaller() nounwind {
9355 entry:
9356         %0 = load void ()** @lifunc, align 8
9357         call void %0() nounwind
9358         %1 = load void ()** @lifunc, align 8
9359         call void %1() nounwind
9360         ret void
9361 ; LINUX-64-STATIC: licaller:
9362 ; LINUX-64-STATIC: callq   *lifunc
9363 ; LINUX-64-STATIC: callq   *lifunc
9364 ; LINUX-64-STATIC: ret
9365
9366 ; LINUX-32-STATIC: licaller:
9367 ; LINUX-32-STATIC:      subl
9368 ; LINUX-32-STATIC-NEXT:         calll   *lifunc
9369 ; LINUX-32-STATIC-NEXT:         calll   *lifunc
9370 ; LINUX-32-STATIC-NEXT:         addl
9371 ; LINUX-32-STATIC-NEXT:         ret
9372
9373 ; LINUX-32-PIC: licaller:
9374 ; LINUX-32-PIC:         subl
9375 ; LINUX-32-PIC-NEXT:    calll   *lifunc
9376 ; LINUX-32-PIC-NEXT:    calll   *lifunc
9377 ; LINUX-32-PIC-NEXT:    addl
9378
9379 ; LINUX-32-PIC-NEXT:    ret
9380
9381 ; LINUX-64-PIC: licaller:
9382 ; LINUX-64-PIC:         pushq
9383 ; LINUX-64-PIC-NEXT:    callq   *lifunc(%rip)
9384 ; LINUX-64-PIC-NEXT:    callq   *lifunc(%rip)
9385 ; LINUX-64-PIC-NEXT:    popq
9386 ; LINUX-64-PIC-NEXT:    ret
9387
9388 ; DARWIN-32-STATIC: _licaller:
9389 ; DARWIN-32-STATIC:     subl    $12, %esp
9390 ; DARWIN-32-STATIC-NEXT:        calll   *_lifunc
9391 ; DARWIN-32-STATIC-NEXT:        calll   *_lifunc
9392 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9393 ; DARWIN-32-STATIC-NEXT:        ret
9394
9395 ; DARWIN-32-DYNAMIC: _licaller:
9396 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9397 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_lifunc
9398 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_lifunc
9399 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9400 ; DARWIN-32-DYNAMIC-NEXT:       ret
9401
9402 ; DARWIN-32-PIC: _licaller:
9403 ; DARWIN-32-PIC:        pushl   %esi
9404 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9405 ; DARWIN-32-PIC-NEXT:   calll   L144$pb
9406 ; DARWIN-32-PIC-NEXT: L144$pb:
9407 ; DARWIN-32-PIC-NEXT:   popl    %esi
9408 ; DARWIN-32-PIC-NEXT:   calll   *_lifunc-L144$pb(%esi)
9409 ; DARWIN-32-PIC-NEXT:   calll   *_lifunc-L144$pb(%esi)
9410 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9411 ; DARWIN-32-PIC-NEXT:   popl    %esi
9412 ; DARWIN-32-PIC-NEXT:   ret
9413
9414 ; DARWIN-64-STATIC: _licaller:
9415 ; DARWIN-64-STATIC:     pushq
9416 ; DARWIN-64-STATIC-NEXT:        callq   *_lifunc(%rip)
9417 ; DARWIN-64-STATIC-NEXT:        callq   *_lifunc(%rip)
9418 ; DARWIN-64-STATIC-NEXT:        popq
9419 ; DARWIN-64-STATIC-NEXT:        ret
9420
9421 ; DARWIN-64-DYNAMIC: _licaller:
9422 ; DARWIN-64-DYNAMIC:    pushq
9423 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_lifunc(%rip)
9424 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_lifunc(%rip)
9425 ; DARWIN-64-DYNAMIC-NEXT:       popq
9426 ; DARWIN-64-DYNAMIC-NEXT:       ret
9427
9428 ; DARWIN-64-PIC: _licaller:
9429 ; DARWIN-64-PIC:        pushq
9430 ; DARWIN-64-PIC-NEXT:   callq   *_lifunc(%rip)
9431 ; DARWIN-64-PIC-NEXT:   callq   *_lifunc(%rip)
9432 ; DARWIN-64-PIC-NEXT:   popq
9433 ; DARWIN-64-PIC-NEXT:   ret
9434 }
9435
9436 define void @itailcaller() nounwind {
9437 entry:
9438         %0 = load void ()** @ifunc, align 8
9439         call void %0() nounwind
9440         %1 = load void ()** @ifunc, align 8
9441         call void %1() nounwind
9442         ret void
9443 ; LINUX-64-STATIC: itailcaller:
9444 ; LINUX-64-STATIC: callq   *ifunc
9445 ; LINUX-64-STATIC: callq   *ifunc
9446 ; LINUX-64-STATIC: ret
9447
9448 ; LINUX-32-STATIC: itailcaller:
9449 ; LINUX-32-STATIC:      subl
9450 ; LINUX-32-STATIC-NEXT:         calll   *ifunc
9451 ; LINUX-32-STATIC-NEXT:         calll   *ifunc
9452 ; LINUX-32-STATIC-NEXT:         addl
9453 ; LINUX-32-STATIC-NEXT:         ret
9454
9455 ; LINUX-32-PIC: itailcaller:
9456 ; LINUX-32-PIC:         subl
9457 ; LINUX-32-PIC-NEXT:    calll   *ifunc
9458 ; LINUX-32-PIC-NEXT:    calll   *ifunc
9459 ; LINUX-32-PIC-NEXT:    addl
9460
9461 ; LINUX-32-PIC-NEXT:    ret
9462
9463 ; LINUX-64-PIC: itailcaller:
9464 ; LINUX-64-PIC:         pushq   [[RBX:%r.x]]
9465 ; LINUX-64-PIC-NEXT:    movq    ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9466 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9467 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9468 ; LINUX-64-PIC-NEXT:    popq    [[RBX:%r.x]]
9469 ; LINUX-64-PIC-NEXT:    ret
9470
9471 ; DARWIN-32-STATIC: _itailcaller:
9472 ; DARWIN-32-STATIC:     subl    $12, %esp
9473 ; DARWIN-32-STATIC-NEXT:        calll   *_ifunc
9474 ; DARWIN-32-STATIC-NEXT:        calll   *_ifunc
9475 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9476 ; DARWIN-32-STATIC-NEXT:        ret
9477
9478 ; DARWIN-32-DYNAMIC: _itailcaller:
9479 ; DARWIN-32-DYNAMIC:    pushl   %esi
9480 ; DARWIN-32-DYNAMIC-NEXT:       subl    $8, %esp
9481 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ifunc$non_lazy_ptr, %esi
9482 ; DARWIN-32-DYNAMIC-NEXT:       calll   *(%esi)
9483 ; DARWIN-32-DYNAMIC-NEXT:       calll   *(%esi)
9484 ; DARWIN-32-DYNAMIC-NEXT:       addl    $8, %esp
9485 ; DARWIN-32-DYNAMIC-NEXT:       popl    %esi
9486 ; DARWIN-32-DYNAMIC-NEXT:       ret
9487
9488 ; DARWIN-32-PIC: _itailcaller:
9489 ; DARWIN-32-PIC:        pushl   %esi
9490 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9491 ; DARWIN-32-PIC-NEXT:   calll   L145$pb
9492 ; DARWIN-32-PIC-NEXT: L145$pb:
9493 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
9494 ; DARWIN-32-PIC-NEXT:   movl    L_ifunc$non_lazy_ptr-L145$pb([[EAX]]), %esi
9495 ; DARWIN-32-PIC-NEXT:   calll   *(%esi)
9496 ; DARWIN-32-PIC-NEXT:   calll   *(%esi)
9497 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9498 ; DARWIN-32-PIC-NEXT:   popl    %esi
9499 ; DARWIN-32-PIC-NEXT:   ret
9500
9501 ; DARWIN-64-STATIC: _itailcaller:
9502 ; DARWIN-64-STATIC:     pushq   [[RBX:%r.x]]
9503 ; DARWIN-64-STATIC-NEXT:        movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9504 ; DARWIN-64-STATIC-NEXT:        callq   *([[RBX]])
9505 ; DARWIN-64-STATIC-NEXT:        callq   *([[RBX]])
9506 ; DARWIN-64-STATIC-NEXT:        popq    [[RBX:%r.x]]
9507 ; DARWIN-64-STATIC-NEXT:        ret
9508
9509 ; DARWIN-64-DYNAMIC: _itailcaller:
9510 ; DARWIN-64-DYNAMIC:    pushq   [[RBX:%r.x]]
9511 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9512 ; DARWIN-64-DYNAMIC-NEXT:       callq   *([[RBX]])
9513 ; DARWIN-64-DYNAMIC-NEXT:       callq   *([[RBX]])
9514 ; DARWIN-64-DYNAMIC-NEXT:       popq    [[RBX:%r.x]]
9515 ; DARWIN-64-DYNAMIC-NEXT:       ret
9516
9517 ; DARWIN-64-PIC: _itailcaller:
9518 ; DARWIN-64-PIC:        pushq   [[RBX:%r.x]]
9519 ; DARWIN-64-PIC-NEXT:   movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9520 ; DARWIN-64-PIC-NEXT:   callq   *([[RBX]])
9521 ; DARWIN-64-PIC-NEXT:   callq   *([[RBX]])
9522 ; DARWIN-64-PIC-NEXT:   popq    [[RBX:%r.x]]
9523 ; DARWIN-64-PIC-NEXT:   ret
9524 }
9525
9526 define void @ditailcaller() nounwind {
9527 entry:
9528         %0 = load void ()** @difunc, align 8
9529         call void %0() nounwind
9530         ret void
9531 ; LINUX-64-STATIC: ditailcaller:
9532 ; LINUX-64-STATIC: callq   *difunc
9533 ; LINUX-64-STATIC: ret
9534
9535 ; LINUX-32-STATIC: ditailcaller:
9536 ; LINUX-32-STATIC:      subl
9537 ; LINUX-32-STATIC-NEXT:         calll   *difunc
9538 ; LINUX-32-STATIC-NEXT:         addl
9539 ; LINUX-32-STATIC-NEXT:         ret
9540
9541 ; LINUX-32-PIC: ditailcaller:
9542 ; LINUX-32-PIC:         subl
9543 ; LINUX-32-PIC-NEXT:    calll   *difunc
9544 ; LINUX-32-PIC-NEXT:    addl
9545
9546 ; LINUX-32-PIC-NEXT:    ret
9547
9548 ; LINUX-64-PIC: ditailcaller:
9549 ; LINUX-64-PIC:         pushq
9550 ; LINUX-64-PIC-NEXT:    movq    difunc@GOTPCREL(%rip), [[RAX:%r.x]]
9551 ; LINUX-64-PIC-NEXT:    callq   *([[RAX]])
9552 ; LINUX-64-PIC-NEXT:    popq
9553 ; LINUX-64-PIC-NEXT:    ret
9554
9555 ; DARWIN-32-STATIC: _ditailcaller:
9556 ; DARWIN-32-STATIC:     subl    $12, %esp
9557 ; DARWIN-32-STATIC-NEXT:        calll   *_difunc
9558 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9559 ; DARWIN-32-STATIC-NEXT:        ret
9560
9561 ; DARWIN-32-DYNAMIC: _ditailcaller:
9562 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9563 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_difunc
9564 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9565 ; DARWIN-32-DYNAMIC-NEXT:       ret
9566
9567 ; DARWIN-32-PIC: _ditailcaller:
9568 ; DARWIN-32-PIC:        subl    $12, %esp
9569 ; DARWIN-32-PIC-NEXT:   calll   L146$pb
9570 ; DARWIN-32-PIC-NEXT: L146$pb:
9571 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
9572 ; DARWIN-32-PIC-NEXT:   calll   *_difunc-L146$pb([[EAX]])
9573 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9574 ; DARWIN-32-PIC-NEXT:   ret
9575
9576 ; DARWIN-64-STATIC: _ditailcaller:
9577 ; DARWIN-64-STATIC:     pushq
9578 ; DARWIN-64-STATIC-NEXT:        callq   *_difunc(%rip)
9579 ; DARWIN-64-STATIC-NEXT:        popq
9580 ; DARWIN-64-STATIC-NEXT:        ret
9581
9582 ; DARWIN-64-DYNAMIC: _ditailcaller:
9583 ; DARWIN-64-DYNAMIC:    pushq
9584 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_difunc(%rip)
9585 ; DARWIN-64-DYNAMIC-NEXT:       popq
9586 ; DARWIN-64-DYNAMIC-NEXT:       ret
9587
9588 ; DARWIN-64-PIC: _ditailcaller:
9589 ; DARWIN-64-PIC:        callq   *_difunc(%rip)
9590 ; DARWIN-64-PIC-NEXT:   popq
9591 ; DARWIN-64-PIC-NEXT:   ret
9592 }
9593
9594 define void @litailcaller() nounwind {
9595 entry:
9596         %0 = load void ()** @lifunc, align 8
9597         call void %0() nounwind
9598         ret void
9599 ; LINUX-64-STATIC: litailcaller:
9600 ; LINUX-64-STATIC: callq   *lifunc
9601 ; LINUX-64-STATIC: ret
9602
9603 ; LINUX-32-STATIC: litailcaller:
9604 ; LINUX-32-STATIC:      subl
9605 ; LINUX-32-STATIC-NEXT:         calll   *lifunc
9606 ; LINUX-32-STATIC-NEXT:         addl
9607 ; LINUX-32-STATIC-NEXT:         ret
9608
9609 ; LINUX-32-PIC: litailcaller:
9610 ; LINUX-32-PIC:         subl
9611 ; LINUX-32-PIC-NEXT:    calll   *lifunc
9612 ; LINUX-32-PIC-NEXT:    addl
9613
9614 ; LINUX-32-PIC-NEXT:    ret
9615
9616 ; LINUX-64-PIC: litailcaller:
9617 ; LINUX-64-PIC:         pushq
9618 ; LINUX-64-PIC-NEXT:    callq   *lifunc(%rip)
9619 ; LINUX-64-PIC-NEXT:    popq
9620 ; LINUX-64-PIC-NEXT:    ret
9621
9622 ; DARWIN-32-STATIC: _litailcaller:
9623 ; DARWIN-32-STATIC:     subl    $12, %esp
9624 ; DARWIN-32-STATIC-NEXT:        calll   *_lifunc
9625 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9626 ; DARWIN-32-STATIC-NEXT:        ret
9627
9628 ; DARWIN-32-DYNAMIC: _litailcaller:
9629 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9630 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_lifunc
9631 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9632 ; DARWIN-32-DYNAMIC-NEXT:       ret
9633
9634 ; DARWIN-32-PIC: _litailcaller:
9635 ; DARWIN-32-PIC:        subl    $12, %esp
9636 ; DARWIN-32-PIC-NEXT:   calll   L147$pb
9637 ; DARWIN-32-PIC-NEXT: L147$pb:
9638 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
9639 ; DARWIN-32-PIC-NEXT:   calll   *_lifunc-L147$pb([[EAX]])
9640 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9641 ; DARWIN-32-PIC-NEXT:   ret
9642
9643 ; DARWIN-64-STATIC: _litailcaller:
9644 ; DARWIN-64-STATIC:     pushq
9645 ; DARWIN-64-STATIC-NEXT:        callq   *_lifunc(%rip)
9646 ; DARWIN-64-STATIC-NEXT:        popq
9647 ; DARWIN-64-STATIC-NEXT:        ret
9648
9649 ; DARWIN-64-DYNAMIC: _litailcaller:
9650 ; DARWIN-64-DYNAMIC:    pushq
9651 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_lifunc(%rip)
9652 ; DARWIN-64-DYNAMIC-NEXT:       popq
9653 ; DARWIN-64-DYNAMIC-NEXT:       ret
9654
9655 ; DARWIN-64-PIC: _litailcaller:
9656 ; DARWIN-64-PIC:        pushq
9657 ; DARWIN-64-PIC-NEXT:   callq   *_lifunc(%rip)
9658 ; DARWIN-64-PIC-NEXT:   popq
9659 ; DARWIN-64-PIC-NEXT:   ret
9660 }