Fix one more batch of X86 tests to be register allocation dependent.
[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 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-STATIC
16 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-PIC
17 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-64-STATIC
18 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=LINUX-64-PIC
19 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-32-STATIC
20 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=i686-apple-darwin -march=x86 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC
21 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=i686-apple-darwin -march=x86 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-PIC
22 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-64-STATIC
23 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-DYNAMIC
24 ; RUN: llc < %s -asm-verbose=0 -regalloc=basic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-PIC
25
26 @src = external global [131072 x i32]
27 @dst = external global [131072 x i32]
28 @xsrc = external global [32 x i32]
29 @xdst = external global [32 x i32]
30 @ptr = external global i32*
31 @dsrc = global [131072 x i32] zeroinitializer, align 32
32 @ddst = global [131072 x i32] zeroinitializer, align 32
33 @dptr = global i32* null
34 @lsrc = internal global [131072 x i32] zeroinitializer
35 @ldst = internal global [131072 x i32] zeroinitializer
36 @lptr = internal global i32* null
37 @ifunc = external global void ()*
38 @difunc = global void ()* null
39 @lifunc = internal global void ()* null
40 @lxsrc = internal global [32 x i32] zeroinitializer, align 32
41 @lxdst = internal global [32 x i32] zeroinitializer, align 32
42 @dxsrc = global [32 x i32] zeroinitializer, align 32
43 @dxdst = global [32 x i32] zeroinitializer, align 32
44
45 define void @foo00() nounwind {
46 entry:
47         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
48         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4
49         ret void
50
51 ; LINUX-64-STATIC: foo00:
52 ; LINUX-64-STATIC: movl src(%rip), [[EAX:%e.x]]
53 ; LINUX-64-STATIC: movl [[EAX]], dst
54 ; LINUX-64-STATIC: ret
55
56 ; LINUX-32-STATIC: foo00:
57 ; LINUX-32-STATIC:      movl    src, [[EAX:%e.x]]
58 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dst
59 ; LINUX-32-STATIC-NEXT:         ret
60
61 ; LINUX-32-PIC: foo00:
62 ; LINUX-32-PIC:         movl    src, [[EAX:%e.x]]
63 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dst
64 ; LINUX-32-PIC-NEXT:    ret
65
66 ; LINUX-64-PIC: foo00:
67 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r..]]
68 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e..]]
69 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r..]]
70 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
71 ; LINUX-64-PIC-NEXT:    ret
72
73 ; DARWIN-32-STATIC: _foo00:
74 ; DARWIN-32-STATIC:     movl    _src, [[EAX:%e.x]]
75 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dst
76 ; DARWIN-32-STATIC-NEXT:        ret
77
78 ; DARWIN-32-DYNAMIC: _foo00:
79 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e..]]
80 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e..]]
81 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e..]]
82 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
83 ; DARWIN-32-DYNAMIC-NEXT:       ret
84
85 ; DARWIN-32-PIC: _foo00:
86 ; DARWIN-32-PIC:        calll   L0$pb
87 ; DARWIN-32-PIC-NEXT: L0$pb:
88 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e..]]
89 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L0$pb([[EAX]]), [[ECX:%e..]]
90 ; DARWIN-32-PIC-NEXT:   movl    ([[ECX]]), [[ECX:%e..]]
91 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L0$pb([[EAX]]), [[EAX:%e..]]
92 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
93 ; DARWIN-32-PIC-NEXT:   ret
94
95 ; DARWIN-64-STATIC: _foo00:
96 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r..]]
97 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]]), [[EAX:%e..]]
98 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r..]]
99 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
100 ; DARWIN-64-STATIC-NEXT:        ret
101
102 ; DARWIN-64-DYNAMIC: _foo00:
103 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r..]]
104 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]]), [[EAX:%e..]]
105 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r..]]
106 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
107 ; DARWIN-64-DYNAMIC-NEXT:       ret
108
109 ; DARWIN-64-PIC: _foo00:
110 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r..]]
111 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]]), [[EAX:%e..]]
112 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r..]]
113 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
114 ; DARWIN-64-PIC-NEXT:   ret
115 }
116
117 define void @fxo00() nounwind {
118 entry:
119         %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
120         store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4
121         ret void
122
123 ; LINUX-64-STATIC: fxo00:
124 ; LINUX-64-STATIC: movl xsrc(%rip), [[EAX:%e.x]]
125 ; LINUX-64-STATIC: movl [[EAX]], xdst
126 ; LINUX-64-STATIC: ret
127
128 ; LINUX-32-STATIC: fxo00:
129 ; LINUX-32-STATIC:      movl    xsrc, [[EAX:%e.x]]
130 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], xdst
131 ; LINUX-32-STATIC-NEXT:         ret
132
133 ; LINUX-32-PIC: fxo00:
134 ; LINUX-32-PIC:         movl    xsrc, [[EAX:%e.x]]
135 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], xdst
136 ; LINUX-32-PIC-NEXT:    ret
137
138 ; LINUX-64-PIC: fxo00:
139 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
140 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
141 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), [[RCX:%r.x]]
142 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
143 ; LINUX-64-PIC-NEXT:    ret
144
145 ; DARWIN-32-STATIC: _fxo00:
146 ; DARWIN-32-STATIC:     movl    _xsrc, [[EAX:%e.x]]
147 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _xdst
148 ; DARWIN-32-STATIC-NEXT:        ret
149
150 ; DARWIN-32-DYNAMIC: _fxo00:
151 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
152 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
153 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
154 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
155 ; DARWIN-32-DYNAMIC-NEXT:       ret
156
157 ; DARWIN-32-PIC: _fxo00:
158 ; DARWIN-32-PIC:        calll   L1$pb
159 ; DARWIN-32-PIC-NEXT: L1$pb:
160 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
161 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L1$pb([[EAX]]), [[ECX:%e.x]]
162 ; DARWIN-32-PIC-NEXT:   movl    ([[ECX]]), [[ECX:%e.x]]
163 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L1$pb([[EAX]]), [[EAX:%e.x]]
164 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
165 ; DARWIN-32-PIC-NEXT:   ret
166
167 ; DARWIN-64-STATIC: _fxo00:
168 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
169 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]]), [[EAX:%e.x]]
170 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
171 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
172 ; DARWIN-64-STATIC-NEXT:        ret
173
174 ; DARWIN-64-DYNAMIC: _fxo00:
175 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
176 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]]), [[EAX:%e.x]]
177 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
178 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
179 ; DARWIN-64-DYNAMIC-NEXT:       ret
180
181 ; DARWIN-64-PIC: _fxo00:
182 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
183 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]]), [[EAX:%e.x]]
184 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
185 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
186 ; DARWIN-64-PIC-NEXT:   ret
187 }
188
189 define void @foo01() nounwind {
190 entry:
191         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
192         ret void
193 ; LINUX-64-STATIC: foo01:
194 ; LINUX-64-STATIC: movq $dst, ptr
195 ; LINUX-64-STATIC: ret
196
197 ; LINUX-32-STATIC: foo01:
198 ; LINUX-32-STATIC:      movl    $dst, ptr
199 ; LINUX-32-STATIC-NEXT:         ret
200
201 ; LINUX-32-PIC: foo01:
202 ; LINUX-32-PIC:         movl    $dst, ptr
203 ; LINUX-32-PIC-NEXT:    ret
204
205 ; LINUX-64-PIC: foo01:
206 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
207 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
208 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
209 ; LINUX-64-PIC-NEXT:    ret
210
211 ; DARWIN-32-STATIC: _foo01:
212 ; DARWIN-32-STATIC:     movl    $_dst, _ptr
213 ; DARWIN-32-STATIC-NEXT:        ret
214
215 ; DARWIN-32-DYNAMIC: _foo01:
216 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, [[EAX:%e.x]]
217 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
218 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
219 ; DARWIN-32-DYNAMIC-NEXT:       ret
220
221 ; DARWIN-32-PIC: _foo01:
222 ; DARWIN-32-PIC:        calll   L2$pb
223 ; DARWIN-32-PIC-NEXT: L2$pb:
224 ; DARWIN-32-PIC-NEXT:   popl
225 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L2$pb(
226 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L2$pb(
227 ; DARWIN-32-PIC-NEXT:   movl
228 ; DARWIN-32-PIC-NEXT:   ret
229
230 ; DARWIN-64-STATIC: _foo01:
231 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
232 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
233 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
234 ; DARWIN-64-STATIC-NEXT:        ret
235
236 ; DARWIN-64-DYNAMIC: _foo01:
237 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
238 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
239 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
240 ; DARWIN-64-DYNAMIC-NEXT:       ret
241
242 ; DARWIN-64-PIC: _foo01:
243 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
244 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
245 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
246 ; DARWIN-64-PIC-NEXT:   ret
247 }
248
249 define void @fxo01() nounwind {
250 entry:
251         store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
252         ret void
253 ; LINUX-64-STATIC: fxo01:
254 ; LINUX-64-STATIC: movq $xdst, ptr
255 ; LINUX-64-STATIC: ret
256
257 ; LINUX-32-STATIC: fxo01:
258 ; LINUX-32-STATIC:      movl    $xdst, ptr
259 ; LINUX-32-STATIC-NEXT:         ret
260
261 ; LINUX-32-PIC: fxo01:
262 ; LINUX-32-PIC:         movl    $xdst, ptr
263 ; LINUX-32-PIC-NEXT:    ret
264
265 ; LINUX-64-PIC: fxo01:
266 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
267 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
268 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
269 ; LINUX-64-PIC-NEXT:    ret
270
271 ; DARWIN-32-STATIC: _fxo01:
272 ; DARWIN-32-STATIC:     movl    $_xdst, _ptr
273 ; DARWIN-32-STATIC-NEXT:        ret
274
275 ; DARWIN-32-DYNAMIC: _fxo01:
276 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, [[EAX:%e.x]]
277 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
278 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
279 ; DARWIN-32-DYNAMIC-NEXT:       ret
280
281 ; DARWIN-32-PIC: _fxo01:
282 ; DARWIN-32-PIC:        calll   L3$pb
283 ; DARWIN-32-PIC-NEXT: L3$pb:
284 ; DARWIN-32-PIC-NEXT:   popl    [[R0:%e..]]
285 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L3$pb([[R0]]), [[R1:%e..]]
286 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L3$pb([[R0]]), [[R2:%e..]]
287 ; DARWIN-32-PIC-NEXT:   movl    [[R1:%e..]], ([[R2]])
288 ; DARWIN-32-PIC-NEXT:   ret
289
290 ; DARWIN-64-STATIC: _fxo01:
291 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
292 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
293 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
294 ; DARWIN-64-STATIC-NEXT:        ret
295
296 ; DARWIN-64-DYNAMIC: _fxo01:
297 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
298 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
299 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
300 ; DARWIN-64-DYNAMIC-NEXT:       ret
301
302 ; DARWIN-64-PIC: _fxo01:
303 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
304 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
305 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
306 ; DARWIN-64-PIC-NEXT:   ret
307 }
308
309 define void @foo02() nounwind {
310 entry:
311         %0 = load i32** @ptr, align 8
312         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
313         store i32 %1, i32* %0, align 4
314         ret void
315 ; LINUX-64-STATIC: foo02:
316 ; LINUX-64-STATIC: movl    src(%rip), %
317 ; LINUX-64-STATIC: movq    ptr(%rip), %
318 ; LINUX-64-STATIC: movl
319 ; LINUX-64-STATIC: ret
320
321 ; LINUX-32-STATIC: foo02:
322 ; LINUX-32-STATIC:      movl    src, [[EAX:%e.x]]
323 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
324 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ([[ECX]])
325 ; LINUX-32-STATIC-NEXT:         ret
326
327 ; LINUX-32-PIC: foo02:
328 ; LINUX-32-PIC:         movl    src, [[EAX:%e.x]]
329 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
330 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ([[ECX]])
331 ; LINUX-32-PIC-NEXT:    ret
332
333 ; LINUX-64-PIC: foo02:
334 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
335 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
336 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
337 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
338 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
339 ; LINUX-64-PIC-NEXT:    ret
340
341 ; DARWIN-32-STATIC: _foo02:
342 ; DARWIN-32-STATIC:     movl    _src, [[EAX:%e.x]]
343 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
344 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], ([[ECX]])
345 ; DARWIN-32-STATIC-NEXT:        ret
346
347 ; DARWIN-32-DYNAMIC: _foo02:
348 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
349 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
350 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
351 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
352 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
353 ; DARWIN-32-DYNAMIC-NEXT:       ret
354
355 ; DARWIN-32-PIC: _foo02:
356 ; DARWIN-32-PIC:        calll   L4$pb
357 ; DARWIN-32-PIC-NEXT: L4$pb:
358 ; DARWIN-32-PIC-NEXT:   popl    [[R0:%e..]]
359 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L4$pb([[R0]]), [[R1:%e..]]
360 ; DARWIN-32-PIC-NEXT:   movl    ([[R1]]), [[R2:%e..]]
361 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L4$pb([[R0]]), [[R3:%e..]]
362 ; DARWIN-32-PIC-NEXT:   movl    ([[R3]]), [[R4:%e..]]
363 ; DARWIN-32-PIC-NEXT:   movl    [[R2]], ([[R4]])
364 ; DARWIN-32-PIC-NEXT:   ret
365
366 ; DARWIN-64-STATIC: _foo02:
367 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
368 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]]), [[EAX:%e.x]]
369 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
370 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
371 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
372 ; DARWIN-64-STATIC-NEXT:        ret
373
374 ; DARWIN-64-DYNAMIC: _foo02:
375 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
376 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]]), [[EAX:%e.x]]
377 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
378 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
379 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
380 ; DARWIN-64-DYNAMIC-NEXT:       ret
381
382 ; DARWIN-64-PIC: _foo02:
383 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
384 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]]), [[EAX:%e.x]]
385 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
386 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
387 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
388 ; DARWIN-64-PIC-NEXT:   ret
389 }
390
391 define void @fxo02() nounwind {
392 entry:
393         %0 = load i32** @ptr, align 8
394         %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
395         store i32 %1, i32* %0, align 4
396 ; LINUX-64-STATIC: fxo02:
397 ; LINUX-64-STATIC: movl    xsrc(%rip), %
398 ; LINUX-64-STATIC: movq    ptr(%rip), %
399 ; LINUX-64-STATIC: movl
400 ; LINUX-64-STATIC: ret
401
402 ; LINUX-32-STATIC: fxo02:
403 ; LINUX-32-STATIC:      movl    xsrc, [[EAX:%e.x]]
404 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
405 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ([[ECX]])
406 ; LINUX-32-STATIC-NEXT:         ret
407         ret void
408
409 ; LINUX-32-PIC: fxo02:
410 ; LINUX-32-PIC:         movl    xsrc, [[EAX:%e.x]]
411 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
412 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ([[ECX]])
413 ; LINUX-32-PIC-NEXT:    ret
414
415 ; LINUX-64-PIC: fxo02:
416 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
417 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
418 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
419 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
420 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
421 ; LINUX-64-PIC-NEXT:    ret
422
423 ; DARWIN-32-STATIC: _fxo02:
424 ; DARWIN-32-STATIC:     movl    _xsrc, [[EAX:%e.x]]
425 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
426 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], ([[ECX]])
427 ; DARWIN-32-STATIC-NEXT:        ret
428
429 ; DARWIN-32-DYNAMIC: _fxo02:
430 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
431 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
432 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
433 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
434 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
435 ; DARWIN-32-DYNAMIC-NEXT:       ret
436
437 ; DARWIN-32-PIC: _fxo02:
438 ; DARWIN-32-PIC:        calll   L5$pb
439 ; DARWIN-32-PIC-NEXT: L5$pb:
440 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
441 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L5$pb([[EAX]]), [[ECX:%e.x]]
442 ; DARWIN-32-PIC-NEXT:   movl    ([[ECX]]), [[ECX:%e.x]]
443 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L5$pb([[EAX]]), [[EAX:%e.x]]
444 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
445 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
446 ; DARWIN-32-PIC-NEXT:   ret
447
448 ; DARWIN-64-STATIC: _fxo02:
449 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
450 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]]), [[EAX:%e.x]]
451 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
452 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
453 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
454 ; DARWIN-64-STATIC-NEXT:        ret
455
456 ; DARWIN-64-DYNAMIC: _fxo02:
457 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
458 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]]), [[EAX:%e.x]]
459 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
460 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
461 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
462 ; DARWIN-64-DYNAMIC-NEXT:       ret
463
464 ; DARWIN-64-PIC: _fxo02:
465 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
466 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]]), [[EAX:%e.x]]
467 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
468 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
469 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
470 ; DARWIN-64-PIC-NEXT:   ret
471 }
472
473 define void @foo03() nounwind {
474 entry:
475         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
476         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32
477         ret void
478 ; LINUX-64-STATIC: foo03:
479 ; LINUX-64-STATIC: movl    dsrc(%rip), [[EAX:%e.x]]
480 ; LINUX-64-STATIC: movl    [[EAX]], ddst
481 ; LINUX-64-STATIC: ret
482
483 ; LINUX-32-STATIC: foo03:
484 ; LINUX-32-STATIC:      movl    dsrc, [[EAX:%e.x]]
485 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ddst
486 ; LINUX-32-STATIC-NEXT:         ret
487
488 ; LINUX-32-PIC: foo03:
489 ; LINUX-32-PIC:         movl    dsrc, [[EAX:%e.x]]
490 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ddst
491 ; LINUX-32-PIC-NEXT:    ret
492
493 ; LINUX-64-PIC: foo03:
494 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
495 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
496 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
497 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
498 ; LINUX-64-PIC-NEXT:    ret
499
500 ; DARWIN-32-STATIC: _foo03:
501 ; DARWIN-32-STATIC:     movl    _dsrc, [[EAX:%e.x]]
502 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ddst
503 ; DARWIN-32-STATIC-NEXT:        ret
504
505 ; DARWIN-32-DYNAMIC: _foo03:
506 ; DARWIN-32-DYNAMIC:    movl    _dsrc, [[EAX:%e.x]]
507 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ddst
508 ; DARWIN-32-DYNAMIC-NEXT:       ret
509
510 ; DARWIN-32-PIC: _foo03:
511 ; DARWIN-32-PIC:        calll   L6$pb
512 ; DARWIN-32-PIC-NEXT: L6$pb:
513 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
514 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-L6$pb([[EAX]]), [[ECX:%e.x]]
515 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _ddst-L6$pb([[EAX]])
516 ; DARWIN-32-PIC-NEXT:   ret
517
518 ; DARWIN-64-STATIC: _foo03:
519 ; DARWIN-64-STATIC:     movl    _dsrc(%rip), [[EAX:%e.x]]
520 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ddst(%rip)
521 ; DARWIN-64-STATIC-NEXT:        ret
522
523 ; DARWIN-64-DYNAMIC: _foo03:
524 ; DARWIN-64-DYNAMIC:    movl    _dsrc(%rip), [[EAX:%e.x]]
525 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ddst(%rip)
526 ; DARWIN-64-DYNAMIC-NEXT:       ret
527
528 ; DARWIN-64-PIC: _foo03:
529 ; DARWIN-64-PIC:        movl    _dsrc(%rip), [[EAX:%e.x]]
530 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ddst(%rip)
531 ; DARWIN-64-PIC-NEXT:   ret
532 }
533
534 define void @foo04() nounwind {
535 entry:
536         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
537         ret void
538 ; LINUX-64-STATIC: foo04:
539 ; LINUX-64-STATIC: movq    $ddst, dptr
540 ; LINUX-64-STATIC: ret
541
542 ; LINUX-32-STATIC: foo04:
543 ; LINUX-32-STATIC:      movl    $ddst, dptr
544 ; LINUX-32-STATIC-NEXT:         ret
545
546 ; LINUX-32-PIC: foo04:
547 ; LINUX-32-PIC:         movl    $ddst, dptr
548 ; LINUX-32-PIC-NEXT:    ret
549
550 ; LINUX-64-PIC: foo04:
551 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
552 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
553 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
554 ; LINUX-64-PIC-NEXT:    ret
555
556 ; DARWIN-32-STATIC: _foo04:
557 ; DARWIN-32-STATIC:     movl    $_ddst, _dptr
558 ; DARWIN-32-STATIC-NEXT:        ret
559
560 ; DARWIN-32-DYNAMIC: _foo04:
561 ; DARWIN-32-DYNAMIC:    movl    $_ddst, _dptr
562 ; DARWIN-32-DYNAMIC-NEXT:       ret
563
564 ; DARWIN-32-PIC: _foo04:
565 ; DARWIN-32-PIC:        calll   L7$pb
566 ; DARWIN-32-PIC-NEXT: L7$pb:
567 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
568 ; DARWIN-32-PIC-NEXT:   leal    _ddst-L7$pb([[EAX]]), [[ECX:%e.x]]
569 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L7$pb([[EAX]])
570 ; DARWIN-32-PIC-NEXT:   ret
571
572 ; DARWIN-64-STATIC: _foo04:
573 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
574 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
575 ; DARWIN-64-STATIC-NEXT:        ret
576
577 ; DARWIN-64-DYNAMIC: _foo04:
578 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
579 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
580 ; DARWIN-64-DYNAMIC-NEXT:       ret
581
582 ; DARWIN-64-PIC: _foo04:
583 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
584 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
585 ; DARWIN-64-PIC-NEXT:   ret
586 }
587
588 define void @foo05() nounwind {
589 entry:
590         %0 = load i32** @dptr, align 8
591         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
592         store i32 %1, i32* %0, align 4
593         ret void
594 ; LINUX-64-STATIC: foo05:
595 ; LINUX-64-STATIC: movl    dsrc(%rip), %
596 ; LINUX-64-STATIC: movq    dptr(%rip), %
597 ; LINUX-64-STATIC: movl
598 ; LINUX-64-STATIC: ret
599
600 ; LINUX-32-STATIC: foo05:
601 ; LINUX-32-STATIC:      movl    dsrc, [[EAX:%e.x]]
602 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
603 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ([[ECX]])
604 ; LINUX-32-STATIC-NEXT:         ret
605
606 ; LINUX-32-PIC: foo05:
607 ; LINUX-32-PIC:         movl    dsrc, [[EAX:%e.x]]
608 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
609 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ([[ECX]])
610 ; LINUX-32-PIC-NEXT:    ret
611
612 ; LINUX-64-PIC: foo05:
613 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
614 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]]), [[EAX:%e.x]]
615 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
616 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
617 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
618 ; LINUX-64-PIC-NEXT:    ret
619
620 ; DARWIN-32-STATIC: _foo05:
621 ; DARWIN-32-STATIC:     movl    _dsrc, [[EAX:%e.x]]
622 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
623 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], ([[ECX]])
624 ; DARWIN-32-STATIC-NEXT:        ret
625
626 ; DARWIN-32-DYNAMIC: _foo05:
627 ; DARWIN-32-DYNAMIC:    movl    _dsrc, [[EAX:%e.x]]
628 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
629 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
630 ; DARWIN-32-DYNAMIC-NEXT:       ret
631
632 ; DARWIN-32-PIC: _foo05:
633 ; DARWIN-32-PIC:        calll   L8$pb
634 ; DARWIN-32-PIC-NEXT: L8$pb:
635 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
636 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-L8$pb([[EAX]]), [[ECX:%e.x]]
637 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L8$pb([[EAX]]), [[EAX:%e.x]]
638 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
639 ; DARWIN-32-PIC-NEXT:   ret
640
641 ; DARWIN-64-STATIC: _foo05:
642 ; DARWIN-64-STATIC:     movl    _dsrc(%rip), [[EAX:%e.x]]
643 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
644 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
645 ; DARWIN-64-STATIC-NEXT:        ret
646
647 ; DARWIN-64-DYNAMIC: _foo05:
648 ; DARWIN-64-DYNAMIC:    movl    _dsrc(%rip), [[EAX:%e.x]]
649 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
650 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
651 ; DARWIN-64-DYNAMIC-NEXT:       ret
652
653 ; DARWIN-64-PIC: _foo05:
654 ; DARWIN-64-PIC:        movl    _dsrc(%rip), [[EAX:%e.x]]
655 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
656 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
657 ; DARWIN-64-PIC-NEXT:   ret
658 }
659
660 define void @foo06() nounwind {
661 entry:
662         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
663         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4
664         ret void
665 ; LINUX-64-STATIC: foo06:
666 ; LINUX-64-STATIC: movl    lsrc(%rip), [[EAX:%e.x]]
667 ; LINUX-64-STATIC: movl    [[EAX]], ldst(%rip)
668 ; LINUX-64-STATIC: ret
669
670 ; LINUX-32-STATIC: foo06:
671 ; LINUX-32-STATIC:      movl    lsrc, [[EAX:%e.x]]
672 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ldst
673 ; LINUX-32-STATIC-NEXT:         ret
674
675 ; LINUX-32-PIC: foo06:
676 ; LINUX-32-PIC:         movl    lsrc, [[EAX:%e.x]]
677 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ldst
678 ; LINUX-32-PIC-NEXT:    ret
679
680 ; LINUX-64-PIC: foo06:
681 ; LINUX-64-PIC:         movl    lsrc(%rip), [[EAX:%e.x]]
682 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ldst(%rip)
683 ; LINUX-64-PIC-NEXT:    ret
684
685 ; DARWIN-32-STATIC: _foo06:
686 ; DARWIN-32-STATIC:     movl    _lsrc, [[EAX:%e.x]]
687 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ldst
688 ; DARWIN-32-STATIC-NEXT:        ret
689
690 ; DARWIN-32-DYNAMIC: _foo06:
691 ; DARWIN-32-DYNAMIC:    movl    _lsrc, [[EAX:%e.x]]
692 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ldst
693 ; DARWIN-32-DYNAMIC-NEXT:       ret
694
695 ; DARWIN-32-PIC: _foo06:
696 ; DARWIN-32-PIC:        calll   L9$pb
697 ; DARWIN-32-PIC-NEXT: L9$pb:
698 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
699 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-L9$pb([[EAX]]), [[ECX:%e.x]]
700 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _ldst-L9$pb([[EAX]])
701 ; DARWIN-32-PIC-NEXT:   ret
702
703 ; DARWIN-64-STATIC: _foo06:
704 ; DARWIN-64-STATIC:     movl    _lsrc(%rip), [[EAX:%e.x]]
705 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ldst(%rip)
706 ; DARWIN-64-STATIC-NEXT:        ret
707
708 ; DARWIN-64-DYNAMIC: _foo06:
709 ; DARWIN-64-DYNAMIC:    movl    _lsrc(%rip), [[EAX:%e.x]]
710 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ldst(%rip)
711 ; DARWIN-64-DYNAMIC-NEXT:       ret
712
713 ; DARWIN-64-PIC: _foo06:
714 ; DARWIN-64-PIC:        movl    _lsrc(%rip), [[EAX:%e.x]]
715 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ldst(%rip)
716 ; DARWIN-64-PIC-NEXT:   ret
717 }
718
719 define void @foo07() nounwind {
720 entry:
721         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
722         ret void
723 ; LINUX-64-STATIC: foo07:
724 ; LINUX-64-STATIC: movq    $ldst, lptr
725 ; LINUX-64-STATIC: ret
726
727 ; LINUX-32-STATIC: foo07:
728 ; LINUX-32-STATIC:      movl    $ldst, lptr
729 ; LINUX-32-STATIC-NEXT:         ret
730
731 ; LINUX-32-PIC: foo07:
732 ; LINUX-32-PIC:         movl    $ldst, lptr
733 ; LINUX-32-PIC-NEXT:    ret
734
735 ; LINUX-64-PIC: foo07:
736 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
737 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
738 ; LINUX-64-PIC-NEXT:    ret
739
740 ; DARWIN-32-STATIC: _foo07:
741 ; DARWIN-32-STATIC:     movl    $_ldst, _lptr
742 ; DARWIN-32-STATIC-NEXT:        ret
743
744 ; DARWIN-32-DYNAMIC: _foo07:
745 ; DARWIN-32-DYNAMIC:    movl    $_ldst, _lptr
746 ; DARWIN-32-DYNAMIC-NEXT:       ret
747
748 ; DARWIN-32-PIC: _foo07:
749 ; DARWIN-32-PIC:        calll   L10$pb
750 ; DARWIN-32-PIC-NEXT: L10$pb:
751 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
752 ; DARWIN-32-PIC-NEXT:   leal    _ldst-L10$pb([[EAX]]), [[ECX:%e.x]]
753 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L10$pb([[EAX]])
754 ; DARWIN-32-PIC-NEXT:   ret
755
756 ; DARWIN-64-STATIC: _foo07:
757 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
758 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
759 ; DARWIN-64-STATIC-NEXT:        ret
760
761 ; DARWIN-64-DYNAMIC: _foo07:
762 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
763 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
764 ; DARWIN-64-DYNAMIC-NEXT:       ret
765
766 ; DARWIN-64-PIC: _foo07:
767 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
768 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
769 ; DARWIN-64-PIC-NEXT:   ret
770 }
771
772 define void @foo08() nounwind {
773 entry:
774         %0 = load i32** @lptr, align 8
775         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
776         store i32 %1, i32* %0, align 4
777         ret void
778 ; LINUX-64-STATIC: foo08:
779 ; LINUX-64-STATIC: movl    lsrc(%rip), %
780 ; LINUX-64-STATIC: movq    lptr(%rip), %
781 ; LINUX-64-STATIC: movl
782 ; LINUX-64-STATIC: ret
783
784 ; LINUX-32-STATIC: foo08:
785 ; LINUX-32-STATIC:      movl    lsrc, [[EAX:%e.x]]
786 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
787 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ([[ECX]])
788 ; LINUX-32-STATIC-NEXT:         ret
789
790 ; LINUX-32-PIC: foo08:
791 ; LINUX-32-PIC:         movl    lsrc, [[EAX:%e.x]]
792 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
793 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ([[ECX]])
794 ; LINUX-32-PIC-NEXT:    ret
795
796 ; LINUX-64-PIC: foo08:
797 ; LINUX-64-PIC:         movl    lsrc(%rip), [[EAX:%e.x]]
798 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
799 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]])
800 ; LINUX-64-PIC-NEXT:    ret
801
802 ; DARWIN-32-STATIC: _foo08:
803 ; DARWIN-32-STATIC:     movl    _lsrc, [[EAX:%e.x]]
804 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
805 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], ([[ECX]])
806 ; DARWIN-32-STATIC-NEXT:        ret
807
808 ; DARWIN-32-DYNAMIC: _foo08:
809 ; DARWIN-32-DYNAMIC:    movl    _lsrc, [[EAX:%e.x]]
810 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
811 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
812 ; DARWIN-32-DYNAMIC-NEXT:       ret
813
814 ; DARWIN-32-PIC: _foo08:
815 ; DARWIN-32-PIC:        calll   L11$pb
816 ; DARWIN-32-PIC-NEXT: L11$pb:
817 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
818 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-L11$pb([[EAX]]), [[ECX:%e.x]]
819 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L11$pb([[EAX]]), [[EAX:%e.x]]
820 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
821 ; DARWIN-32-PIC-NEXT:   ret
822
823 ; DARWIN-64-STATIC: _foo08:
824 ; DARWIN-64-STATIC:     movl    _lsrc(%rip), [[EAX:%e.x]]
825 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
826 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]])
827 ; DARWIN-64-STATIC-NEXT:        ret
828
829 ; DARWIN-64-DYNAMIC: _foo08:
830 ; DARWIN-64-DYNAMIC:    movl    _lsrc(%rip), [[EAX:%e.x]]
831 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
832 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]])
833 ; DARWIN-64-DYNAMIC-NEXT:       ret
834
835 ; DARWIN-64-PIC: _foo08:
836 ; DARWIN-64-PIC:        movl    _lsrc(%rip), [[EAX:%e.x]]
837 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
838 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]])
839 ; DARWIN-64-PIC-NEXT:   ret
840 }
841
842 define void @qux00() nounwind {
843 entry:
844         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
845         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4
846         ret void
847 ; LINUX-64-STATIC: qux00:
848 ; LINUX-64-STATIC: movl    src+64(%rip), [[EAX:%e.x]]
849 ; LINUX-64-STATIC: movl    [[EAX]], dst+64(%rip)
850 ; LINUX-64-STATIC: ret
851
852 ; LINUX-32-STATIC: qux00:
853 ; LINUX-32-STATIC:      movl    src+64, [[EAX:%e.x]]
854 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dst+64
855 ; LINUX-32-STATIC-NEXT:         ret
856
857 ; LINUX-32-PIC: qux00:
858 ; LINUX-32-PIC:         movl    src+64, [[EAX:%e.x]]
859 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dst+64
860 ; LINUX-32-PIC-NEXT:    ret
861
862 ; LINUX-64-PIC: qux00:
863 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
864 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
865 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
866 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
867 ; LINUX-64-PIC-NEXT:    ret
868
869 ; DARWIN-32-STATIC: _qux00:
870 ; DARWIN-32-STATIC:     movl    _src+64, [[EAX:%e.x]]
871 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dst+64
872 ; DARWIN-32-STATIC-NEXT:        ret
873
874 ; DARWIN-32-DYNAMIC: _qux00:
875 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
876 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[EAX]]), [[EAX:%e.x]]
877 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
878 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
879 ; DARWIN-32-DYNAMIC-NEXT:       ret
880
881 ; DARWIN-32-PIC: _qux00:
882 ; DARWIN-32-PIC:        calll   L12$pb
883 ; DARWIN-32-PIC-NEXT: L12$pb:
884 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
885 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L12$pb([[EAX]]), [[ECX:%e.x]]
886 ; DARWIN-32-PIC-NEXT:   movl    64([[ECX]]), [[ECX:%e.x]]
887 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L12$pb([[EAX]]), [[EAX:%e.x]]
888 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
889 ; DARWIN-32-PIC-NEXT:   ret
890
891 ; DARWIN-64-STATIC: _qux00:
892 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
893 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]]), [[EAX:%e.x]]
894 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
895 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
896 ; DARWIN-64-STATIC-NEXT:        ret
897
898 ; DARWIN-64-DYNAMIC: _qux00:
899 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
900 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]]), [[EAX:%e.x]]
901 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
902 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
903 ; DARWIN-64-DYNAMIC-NEXT:       ret
904
905 ; DARWIN-64-PIC: _qux00:
906 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
907 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]]), [[EAX:%e.x]]
908 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
909 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
910 ; DARWIN-64-PIC-NEXT:   ret
911 }
912
913 define void @qxx00() nounwind {
914 entry:
915         %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
916         store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4
917         ret void
918 ; LINUX-64-STATIC: qxx00:
919 ; LINUX-64-STATIC: movl    xsrc+64(%rip), [[EAX:%e.x]]
920 ; LINUX-64-STATIC: movl    [[EAX]], xdst+64(%rip)
921 ; LINUX-64-STATIC: ret
922
923 ; LINUX-32-STATIC: qxx00:
924 ; LINUX-32-STATIC:      movl    xsrc+64, [[EAX:%e.x]]
925 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], xdst+64
926 ; LINUX-32-STATIC-NEXT:         ret
927
928 ; LINUX-32-PIC: qxx00:
929 ; LINUX-32-PIC:         movl    xsrc+64, [[EAX:%e.x]]
930 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], xdst+64
931 ; LINUX-32-PIC-NEXT:    ret
932
933 ; LINUX-64-PIC: qxx00:
934 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
935 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
936 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), [[RCX:%r.x]]
937 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
938 ; LINUX-64-PIC-NEXT:    ret
939
940 ; DARWIN-32-STATIC: _qxx00:
941 ; DARWIN-32-STATIC:     movl    _xsrc+64, [[EAX:%e.x]]
942 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _xdst+64
943 ; DARWIN-32-STATIC-NEXT:        ret
944
945 ; DARWIN-32-DYNAMIC: _qxx00:
946 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
947 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[EAX]]), [[EAX:%e.x]]
948 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
949 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
950 ; DARWIN-32-DYNAMIC-NEXT:       ret
951
952 ; DARWIN-32-PIC: _qxx00:
953 ; DARWIN-32-PIC:        calll   L13$pb
954 ; DARWIN-32-PIC-NEXT: L13$pb:
955 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
956 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L13$pb([[EAX]]), [[ECX:%e.x]]
957 ; DARWIN-32-PIC-NEXT:   movl    64([[ECX]]), [[ECX:%e.x]]
958 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L13$pb([[EAX]]), [[EAX:%e.x]]
959 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
960 ; DARWIN-32-PIC-NEXT:   ret
961
962 ; DARWIN-64-STATIC: _qxx00:
963 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
964 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]]), [[EAX:%e.x]]
965 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
966 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
967 ; DARWIN-64-STATIC-NEXT:        ret
968
969 ; DARWIN-64-DYNAMIC: _qxx00:
970 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
971 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]]), [[EAX:%e.x]]
972 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
973 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
974 ; DARWIN-64-DYNAMIC-NEXT:       ret
975
976 ; DARWIN-64-PIC: _qxx00:
977 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
978 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]]), [[EAX:%e.x]]
979 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
980 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
981 ; DARWIN-64-PIC-NEXT:   ret
982 }
983
984 define void @qux01() nounwind {
985 entry:
986         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
987         ret void
988 ; LINUX-64-STATIC: qux01:
989 ; LINUX-64-STATIC: movq    $dst+64, ptr
990 ; LINUX-64-STATIC: ret
991
992 ; LINUX-32-STATIC: qux01:
993 ; LINUX-32-STATIC:      movl    $dst+64, ptr
994 ; LINUX-32-STATIC-NEXT:         ret
995
996 ; LINUX-32-PIC: qux01:
997 ; LINUX-32-PIC:         movl    $dst+64, ptr
998 ; LINUX-32-PIC-NEXT:    ret
999
1000 ; LINUX-64-PIC: qux01:
1001 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
1002 ; LINUX-64-PIC-NEXT:    addq    $64, [[RAX:%r.x]]
1003 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1004 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
1005 ; LINUX-64-PIC-NEXT:    ret
1006
1007 ; DARWIN-32-STATIC: _qux01:
1008 ; DARWIN-32-STATIC:     movl    $_dst+64, _ptr
1009 ; DARWIN-32-STATIC-NEXT:        ret
1010
1011 ; DARWIN-32-DYNAMIC: _qux01:
1012 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, [[EAX:%e.x]]
1013 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, [[EAX:%e.x]]
1014 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1015 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
1016 ; DARWIN-32-DYNAMIC-NEXT:       ret
1017
1018 ; DARWIN-32-PIC: _qux01:
1019 ; DARWIN-32-PIC:        calll   L14$pb
1020 ; DARWIN-32-PIC-NEXT: L14$pb:
1021 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1022 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L14$pb([[EAX]]), [[ECX:%e.x]]
1023 ; DARWIN-32-PIC-NEXT:   addl    $64, [[ECX:%e.x]]
1024 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L14$pb([[EAX]]), [[EAX:%e.x]]
1025 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
1026 ; DARWIN-32-PIC-NEXT:   ret
1027
1028 ; DARWIN-64-STATIC: _qux01:
1029 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1030 ; DARWIN-64-STATIC-NEXT:        addq    $64, [[RAX:%r.x]]
1031 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1032 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
1033 ; DARWIN-64-STATIC-NEXT:        ret
1034
1035 ; DARWIN-64-DYNAMIC: _qux01:
1036 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1037 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, [[RAX:%r.x]]
1038 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1039 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
1040 ; DARWIN-64-DYNAMIC-NEXT:       ret
1041
1042 ; DARWIN-64-PIC: _qux01:
1043 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1044 ; DARWIN-64-PIC-NEXT:   addq    $64, [[RAX:%r.x]]
1045 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1046 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
1047 ; DARWIN-64-PIC-NEXT:   ret
1048 }
1049
1050 define void @qxx01() nounwind {
1051 entry:
1052         store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1053         ret void
1054 ; LINUX-64-STATIC: qxx01:
1055 ; LINUX-64-STATIC: movq    $xdst+64, ptr
1056 ; LINUX-64-STATIC: ret
1057
1058 ; LINUX-32-STATIC: qxx01:
1059 ; LINUX-32-STATIC:      movl    $xdst+64, ptr
1060 ; LINUX-32-STATIC-NEXT:         ret
1061
1062 ; LINUX-32-PIC: qxx01:
1063 ; LINUX-32-PIC:         movl    $xdst+64, ptr
1064 ; LINUX-32-PIC-NEXT:    ret
1065
1066 ; LINUX-64-PIC: qxx01:
1067 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1068 ; LINUX-64-PIC-NEXT:    addq    $64, [[RAX:%r.x]]
1069 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1070 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
1071 ; LINUX-64-PIC-NEXT:    ret
1072
1073 ; DARWIN-32-STATIC: _qxx01:
1074 ; DARWIN-32-STATIC:     movl    $_xdst+64, _ptr
1075 ; DARWIN-32-STATIC-NEXT:        ret
1076
1077 ; DARWIN-32-DYNAMIC: _qxx01:
1078 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, [[EAX:%e.x]]
1079 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, [[EAX:%e.x]]
1080 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1081 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
1082 ; DARWIN-32-DYNAMIC-NEXT:       ret
1083
1084 ; DARWIN-32-PIC: _qxx01:
1085 ; DARWIN-32-PIC:        calll   L15$pb
1086 ; DARWIN-32-PIC-NEXT: L15$pb:
1087 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1088 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L15$pb([[EAX]]), [[ECX:%e.x]]
1089 ; DARWIN-32-PIC-NEXT:   addl    $64, [[ECX:%e.x]]
1090 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L15$pb([[EAX]]), [[EAX:%e.x]]
1091 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
1092 ; DARWIN-32-PIC-NEXT:   ret
1093
1094 ; DARWIN-64-STATIC: _qxx01:
1095 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1096 ; DARWIN-64-STATIC-NEXT:        addq    $64, [[RAX:%r.x]]
1097 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1098 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
1099 ; DARWIN-64-STATIC-NEXT:        ret
1100
1101 ; DARWIN-64-DYNAMIC: _qxx01:
1102 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1103 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, [[RAX:%r.x]]
1104 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1105 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
1106 ; DARWIN-64-DYNAMIC-NEXT:       ret
1107
1108 ; DARWIN-64-PIC: _qxx01:
1109 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1110 ; DARWIN-64-PIC-NEXT:   addq    $64, [[RAX:%r.x]]
1111 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1112 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
1113 ; DARWIN-64-PIC-NEXT:   ret
1114 }
1115
1116 define void @qux02() nounwind {
1117 entry:
1118         %0 = load i32** @ptr, align 8
1119         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
1120         %2 = getelementptr i32* %0, i64 16
1121         store i32 %1, i32* %2, align 4
1122 ; LINUX-64-STATIC: qux02:
1123 ; LINUX-64-STATIC: movl    src+64(%rip), [[EAX:%e.x]]
1124 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1125 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1126 ; LINUX-64-STATIC: ret
1127
1128 ; LINUX-32-STATIC: qux02:
1129 ; LINUX-32-STATIC:      movl    src+64, [[EAX:%e.x]]
1130 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
1131 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 64([[ECX]])
1132 ; LINUX-32-STATIC-NEXT:         ret
1133         ret void
1134
1135 ; LINUX-32-PIC: qux02:
1136 ; LINUX-32-PIC:         movl    src+64, [[EAX:%e.x]]
1137 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
1138 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 64([[ECX]])
1139 ; LINUX-32-PIC-NEXT:    ret
1140
1141 ; LINUX-64-PIC: qux02:
1142 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
1143 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
1144 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1145 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
1146 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1147 ; LINUX-64-PIC-NEXT:    ret
1148
1149 ; DARWIN-32-STATIC: _qux02:
1150 ; DARWIN-32-STATIC:     movl    _src+64, [[EAX:%e.x]]
1151 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
1152 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 64([[ECX]])
1153 ; DARWIN-32-STATIC-NEXT:        ret
1154
1155 ; DARWIN-32-DYNAMIC: _qux02:
1156 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
1157 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[EAX]]), [[EAX:%e.x]]
1158 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1159 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
1160 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
1161 ; DARWIN-32-DYNAMIC-NEXT:       ret
1162
1163 ; DARWIN-32-PIC: _qux02:
1164 ; DARWIN-32-PIC:        calll   L16$pb
1165 ; DARWIN-32-PIC-NEXT: L16$pb:
1166 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1167 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L16$pb([[EAX]]), [[ECX:%e.x]]
1168 ; DARWIN-32-PIC-NEXT:   movl    64([[ECX]]), [[ECX:%e.x]]
1169 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L16$pb([[EAX]]), [[EAX:%e.x]]
1170 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
1171 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
1172 ; DARWIN-32-PIC-NEXT:   ret
1173
1174 ; DARWIN-64-STATIC: _qux02:
1175 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1176 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]]), [[EAX:%e.x]]
1177 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1178 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
1179 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
1180 ; DARWIN-64-STATIC-NEXT:        ret
1181
1182 ; DARWIN-64-DYNAMIC: _qux02:
1183 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1184 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]]), [[EAX:%e.x]]
1185 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1186 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
1187 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
1188 ; DARWIN-64-DYNAMIC-NEXT:       ret
1189
1190 ; DARWIN-64-PIC: _qux02:
1191 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1192 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]]), [[EAX:%e.x]]
1193 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1194 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
1195 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
1196 ; DARWIN-64-PIC-NEXT:   ret
1197 }
1198
1199 define void @qxx02() nounwind {
1200 entry:
1201         %0 = load i32** @ptr, align 8
1202         %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
1203         %2 = getelementptr i32* %0, i64 16
1204         store i32 %1, i32* %2, align 4
1205 ; LINUX-64-STATIC: qxx02:
1206 ; LINUX-64-STATIC: movl    xsrc+64(%rip), [[EAX:%e.x]]
1207 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1208 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1209 ; LINUX-64-STATIC: ret
1210
1211 ; LINUX-32-STATIC: qxx02:
1212 ; LINUX-32-STATIC:      movl    xsrc+64, [[EAX:%e.x]]
1213 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
1214 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 64([[ECX]])
1215 ; LINUX-32-STATIC-NEXT:         ret
1216         ret void
1217
1218 ; LINUX-32-PIC: qxx02:
1219 ; LINUX-32-PIC:         movl    xsrc+64, [[EAX:%e.x]]
1220 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
1221 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 64([[ECX]])
1222 ; LINUX-32-PIC-NEXT:    ret
1223
1224 ; LINUX-64-PIC: qxx02:
1225 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1226 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
1227 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1228 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
1229 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1230 ; LINUX-64-PIC-NEXT:    ret
1231
1232 ; DARWIN-32-STATIC: _qxx02:
1233 ; DARWIN-32-STATIC:     movl    _xsrc+64, [[EAX:%e.x]]
1234 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
1235 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 64([[ECX]])
1236 ; DARWIN-32-STATIC-NEXT:        ret
1237
1238 ; DARWIN-32-DYNAMIC: _qxx02:
1239 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
1240 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[EAX]]), [[EAX:%e.x]]
1241 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1242 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
1243 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
1244 ; DARWIN-32-DYNAMIC-NEXT:       ret
1245
1246 ; DARWIN-32-PIC: _qxx02:
1247 ; DARWIN-32-PIC:        calll   L17$pb
1248 ; DARWIN-32-PIC-NEXT: L17$pb:
1249 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1250 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L17$pb([[EAX]]), [[ECX:%e.x]]
1251 ; DARWIN-32-PIC-NEXT:   movl    64([[ECX]]), [[ECX:%e.x]]
1252 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L17$pb([[EAX]]), [[EAX:%e.x]]
1253 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
1254 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
1255 ; DARWIN-32-PIC-NEXT:   ret
1256
1257 ; DARWIN-64-STATIC: _qxx02:
1258 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1259 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]]), [[EAX:%e.x]]
1260 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1261 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
1262 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
1263 ; DARWIN-64-STATIC-NEXT:        ret
1264
1265 ; DARWIN-64-DYNAMIC: _qxx02:
1266 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1267 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]]), [[EAX:%e.x]]
1268 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1269 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
1270 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
1271 ; DARWIN-64-DYNAMIC-NEXT:       ret
1272
1273 ; DARWIN-64-PIC: _qxx02:
1274 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1275 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]]), [[EAX:%e.x]]
1276 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1277 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
1278 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
1279 ; DARWIN-64-PIC-NEXT:   ret
1280 }
1281
1282 define void @qux03() nounwind {
1283 entry:
1284         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1285         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32
1286         ret void
1287 ; LINUX-64-STATIC: qux03:
1288 ; LINUX-64-STATIC: movl    dsrc+64(%rip), [[EAX:%e.x]]
1289 ; LINUX-64-STATIC: movl    [[EAX]], ddst+64(%rip)
1290 ; LINUX-64-STATIC: ret
1291
1292 ; LINUX-32-STATIC: qux03:
1293 ; LINUX-32-STATIC:      movl    dsrc+64, [[EAX:%e.x]]
1294 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ddst+64
1295 ; LINUX-32-STATIC-NEXT:         ret
1296
1297 ; LINUX-32-PIC: qux03:
1298 ; LINUX-32-PIC:         movl    dsrc+64, [[EAX:%e.x]]
1299 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ddst+64
1300 ; LINUX-32-PIC-NEXT:    ret
1301
1302 ; LINUX-64-PIC: qux03:
1303 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1304 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
1305 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
1306 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1307 ; LINUX-64-PIC-NEXT:    ret
1308
1309 ; DARWIN-32-STATIC: _qux03:
1310 ; DARWIN-32-STATIC:     movl    _dsrc+64, [[EAX:%e.x]]
1311 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ddst+64
1312 ; DARWIN-32-STATIC-NEXT:        ret
1313
1314 ; DARWIN-32-DYNAMIC: _qux03:
1315 ; DARWIN-32-DYNAMIC:    movl    _dsrc+64, [[EAX:%e.x]]
1316 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ddst+64
1317 ; DARWIN-32-DYNAMIC-NEXT:       ret
1318
1319 ; DARWIN-32-PIC: _qux03:
1320 ; DARWIN-32-PIC:        calll   L18$pb
1321 ; DARWIN-32-PIC-NEXT: L18$pb:
1322 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1323 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L18$pb)+64([[EAX]]), [[ECX:%e.x]]
1324 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], (_ddst-L18$pb)+64([[EAX]])
1325 ; DARWIN-32-PIC-NEXT:   ret
1326
1327 ; DARWIN-64-STATIC: _qux03:
1328 ; DARWIN-64-STATIC:     movl    _dsrc+64(%rip), [[EAX:%e.x]]
1329 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ddst+64(%rip)
1330 ; DARWIN-64-STATIC-NEXT:        ret
1331
1332 ; DARWIN-64-DYNAMIC: _qux03:
1333 ; DARWIN-64-DYNAMIC:    movl    _dsrc+64(%rip), [[EAX:%e.x]]
1334 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ddst+64(%rip)
1335 ; DARWIN-64-DYNAMIC-NEXT:       ret
1336
1337 ; DARWIN-64-PIC: _qux03:
1338 ; DARWIN-64-PIC:        movl    _dsrc+64(%rip), [[EAX:%e.x]]
1339 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ddst+64(%rip)
1340 ; DARWIN-64-PIC-NEXT:   ret
1341 }
1342
1343 define void @qux04() nounwind {
1344 entry:
1345         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1346         ret void
1347 ; LINUX-64-STATIC: qux04:
1348 ; LINUX-64-STATIC: movq    $ddst+64, dptr(%rip)
1349 ; LINUX-64-STATIC: ret
1350
1351 ; LINUX-32-STATIC: qux04:
1352 ; LINUX-32-STATIC:      movl    $ddst+64, dptr
1353 ; LINUX-32-STATIC-NEXT:         ret
1354
1355 ; LINUX-32-PIC: qux04:
1356 ; LINUX-32-PIC:         movl    $ddst+64, dptr
1357 ; LINUX-32-PIC-NEXT:    ret
1358
1359 ; LINUX-64-PIC: qux04:
1360 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
1361 ; LINUX-64-PIC-NEXT:    addq    $64, [[RAX:%r.x]]
1362 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
1363 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
1364 ; LINUX-64-PIC-NEXT:    ret
1365
1366 ; DARWIN-32-STATIC: _qux04:
1367 ; DARWIN-32-STATIC:     movl    $_ddst+64, _dptr
1368 ; DARWIN-32-STATIC-NEXT:        ret
1369
1370 ; DARWIN-32-DYNAMIC: _qux04:
1371 ; DARWIN-32-DYNAMIC:    movl    $_ddst+64, _dptr
1372 ; DARWIN-32-DYNAMIC-NEXT:       ret
1373
1374 ; DARWIN-32-PIC: _qux04:
1375 ; DARWIN-32-PIC:        calll   L19$pb
1376 ; DARWIN-32-PIC-NEXT: L19$pb:
1377 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1378 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L19$pb)+64([[EAX]]), [[ECX:%e.x]]
1379 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L19$pb([[EAX]])
1380 ; DARWIN-32-PIC-NEXT:   ret
1381
1382 ; DARWIN-64-STATIC: _qux04:
1383 ; DARWIN-64-STATIC:     leaq    _ddst+64(%rip), [[RAX:%r.x]]
1384 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
1385 ; DARWIN-64-STATIC-NEXT:        ret
1386
1387 ; DARWIN-64-DYNAMIC: _qux04:
1388 ; DARWIN-64-DYNAMIC:    leaq    _ddst+64(%rip), [[RAX:%r.x]]
1389 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
1390 ; DARWIN-64-DYNAMIC-NEXT:       ret
1391
1392 ; DARWIN-64-PIC: _qux04:
1393 ; DARWIN-64-PIC:        leaq    _ddst+64(%rip), [[RAX:%r.x]]
1394 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
1395 ; DARWIN-64-PIC-NEXT:   ret
1396 }
1397
1398 define void @qux05() nounwind {
1399 entry:
1400         %0 = load i32** @dptr, align 8
1401         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1402         %2 = getelementptr i32* %0, i64 16
1403         store i32 %1, i32* %2, align 4
1404 ; LINUX-64-STATIC: qux05:
1405 ; LINUX-64-STATIC: movl    dsrc+64(%rip), [[EAX:%e.x]]
1406 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
1407 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1408 ; LINUX-64-STATIC: ret
1409
1410 ; LINUX-32-STATIC: qux05:
1411 ; LINUX-32-STATIC:      movl    dsrc+64, [[EAX:%e.x]]
1412 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
1413 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 64([[ECX]])
1414 ; LINUX-32-STATIC-NEXT:         ret
1415         ret void
1416
1417 ; LINUX-32-PIC: qux05:
1418 ; LINUX-32-PIC:         movl    dsrc+64, [[EAX:%e.x]]
1419 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
1420 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 64([[ECX]])
1421 ; LINUX-32-PIC-NEXT:    ret
1422
1423 ; LINUX-64-PIC: qux05:
1424 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1425 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]]), [[EAX:%e.x]]
1426 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
1427 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
1428 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1429 ; LINUX-64-PIC-NEXT:    ret
1430
1431 ; DARWIN-32-STATIC: _qux05:
1432 ; DARWIN-32-STATIC:     movl    _dsrc+64, [[EAX:%e.x]]
1433 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
1434 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 64([[ECX]])
1435 ; DARWIN-32-STATIC-NEXT:        ret
1436
1437 ; DARWIN-32-DYNAMIC: _qux05:
1438 ; DARWIN-32-DYNAMIC:    movl    _dsrc+64, [[EAX:%e.x]]
1439 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
1440 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
1441 ; DARWIN-32-DYNAMIC-NEXT:       ret
1442
1443 ; DARWIN-32-PIC: _qux05:
1444 ; DARWIN-32-PIC:        calll   L20$pb
1445 ; DARWIN-32-PIC-NEXT: L20$pb:
1446 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1447 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L20$pb)+64([[EAX]]), [[ECX:%e.x]]
1448 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L20$pb([[EAX]]), [[EAX:%e.x]]
1449 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
1450 ; DARWIN-32-PIC-NEXT:   ret
1451
1452 ; DARWIN-64-STATIC: _qux05:
1453 ; DARWIN-64-STATIC:     movl    _dsrc+64(%rip), [[EAX:%e.x]]
1454 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
1455 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
1456 ; DARWIN-64-STATIC-NEXT:        ret
1457
1458 ; DARWIN-64-DYNAMIC: _qux05:
1459 ; DARWIN-64-DYNAMIC:    movl    _dsrc+64(%rip), [[EAX:%e.x]]
1460 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
1461 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
1462 ; DARWIN-64-DYNAMIC-NEXT:       ret
1463
1464 ; DARWIN-64-PIC: _qux05:
1465 ; DARWIN-64-PIC:        movl    _dsrc+64(%rip), [[EAX:%e.x]]
1466 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
1467 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
1468 ; DARWIN-64-PIC-NEXT:   ret
1469 }
1470
1471 define void @qux06() nounwind {
1472 entry:
1473         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1474         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4
1475         ret void
1476 ; LINUX-64-STATIC: qux06:
1477 ; LINUX-64-STATIC: movl    lsrc+64(%rip), [[EAX:%e.x]]
1478 ; LINUX-64-STATIC: movl    [[EAX]], ldst+64
1479 ; LINUX-64-STATIC: ret
1480
1481 ; LINUX-32-STATIC: qux06:
1482 ; LINUX-32-STATIC:      movl    lsrc+64, [[EAX:%e.x]]
1483 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ldst+64
1484 ; LINUX-32-STATIC-NEXT:         ret
1485
1486 ; LINUX-32-PIC: qux06:
1487 ; LINUX-32-PIC:         movl    lsrc+64, [[EAX:%e.x]]
1488 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ldst+64
1489 ; LINUX-32-PIC-NEXT:    ret
1490
1491 ; LINUX-64-PIC: qux06:
1492 ; LINUX-64-PIC:         movl    lsrc+64(%rip), [[EAX:%e.x]]
1493 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ldst+64(%rip)
1494 ; LINUX-64-PIC-NEXT:    ret
1495
1496 ; DARWIN-32-STATIC: _qux06:
1497 ; DARWIN-32-STATIC:     movl    _lsrc+64, [[EAX:%e.x]]
1498 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ldst+64
1499 ; DARWIN-32-STATIC-NEXT:        ret
1500
1501 ; DARWIN-32-DYNAMIC: _qux06:
1502 ; DARWIN-32-DYNAMIC:    movl    _lsrc+64, [[EAX:%e.x]]
1503 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ldst+64
1504 ; DARWIN-32-DYNAMIC-NEXT:       ret
1505
1506 ; DARWIN-32-PIC: _qux06:
1507 ; DARWIN-32-PIC:        calll   L21$pb
1508 ; DARWIN-32-PIC-NEXT: L21$pb:
1509 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1510 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L21$pb)+64([[EAX]]), [[ECX:%e.x]]
1511 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], (_ldst-L21$pb)+64([[EAX]])
1512 ; DARWIN-32-PIC-NEXT:   ret
1513
1514 ; DARWIN-64-STATIC: _qux06:
1515 ; DARWIN-64-STATIC:     movl    _lsrc+64(%rip), [[EAX:%e.x]]
1516 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ldst+64(%rip)
1517 ; DARWIN-64-STATIC-NEXT:        ret
1518
1519 ; DARWIN-64-DYNAMIC: _qux06:
1520 ; DARWIN-64-DYNAMIC:    movl    _lsrc+64(%rip), [[EAX:%e.x]]
1521 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ldst+64(%rip)
1522 ; DARWIN-64-DYNAMIC-NEXT:       ret
1523
1524 ; DARWIN-64-PIC: _qux06:
1525 ; DARWIN-64-PIC:        movl    _lsrc+64(%rip), [[EAX:%e.x]]
1526 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ldst+64(%rip)
1527 ; DARWIN-64-PIC-NEXT:   ret
1528 }
1529
1530 define void @qux07() nounwind {
1531 entry:
1532         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1533         ret void
1534 ; LINUX-64-STATIC: qux07:
1535 ; LINUX-64-STATIC: movq    $ldst+64, lptr
1536 ; LINUX-64-STATIC: ret
1537
1538 ; LINUX-32-STATIC: qux07:
1539 ; LINUX-32-STATIC:      movl    $ldst+64, lptr
1540 ; LINUX-32-STATIC-NEXT:         ret
1541
1542 ; LINUX-32-PIC: qux07:
1543 ; LINUX-32-PIC:         movl    $ldst+64, lptr
1544 ; LINUX-32-PIC-NEXT:    ret
1545
1546 ; LINUX-64-PIC: qux07:
1547 ; LINUX-64-PIC:         leaq    ldst+64(%rip), [[RAX:%r.x]]
1548 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
1549 ; LINUX-64-PIC-NEXT:    ret
1550
1551 ; DARWIN-32-STATIC: _qux07:
1552 ; DARWIN-32-STATIC:     movl    $_ldst+64, _lptr
1553 ; DARWIN-32-STATIC-NEXT:        ret
1554
1555 ; DARWIN-32-DYNAMIC: _qux07:
1556 ; DARWIN-32-DYNAMIC:    movl    $_ldst+64, _lptr
1557 ; DARWIN-32-DYNAMIC-NEXT:       ret
1558
1559 ; DARWIN-32-PIC: _qux07:
1560 ; DARWIN-32-PIC:        calll   L22$pb
1561 ; DARWIN-32-PIC-NEXT: L22$pb:
1562 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1563 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L22$pb)+64([[EAX]]), [[ECX:%e.x]]
1564 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L22$pb([[EAX]])
1565 ; DARWIN-32-PIC-NEXT:   ret
1566
1567 ; DARWIN-64-STATIC: _qux07:
1568 ; DARWIN-64-STATIC:     leaq    _ldst+64(%rip), [[RAX:%r.x]]
1569 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
1570 ; DARWIN-64-STATIC-NEXT:        ret
1571
1572 ; DARWIN-64-DYNAMIC: _qux07:
1573 ; DARWIN-64-DYNAMIC:    leaq    _ldst+64(%rip), [[RAX:%r.x]]
1574 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
1575 ; DARWIN-64-DYNAMIC-NEXT:       ret
1576
1577 ; DARWIN-64-PIC: _qux07:
1578 ; DARWIN-64-PIC:        leaq    _ldst+64(%rip), [[RAX:%r.x]]
1579 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
1580 ; DARWIN-64-PIC-NEXT:   ret
1581 }
1582
1583 define void @qux08() nounwind {
1584 entry:
1585         %0 = load i32** @lptr, align 8
1586         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1587         %2 = getelementptr i32* %0, i64 16
1588         store i32 %1, i32* %2, align 4
1589 ; LINUX-64-STATIC: qux08:
1590 ; LINUX-64-STATIC: movl    lsrc+64(%rip), [[EAX:%e.x]]
1591 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
1592 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]])
1593 ; LINUX-64-STATIC: ret
1594
1595 ; LINUX-32-STATIC: qux08:
1596 ; LINUX-32-STATIC:      movl    lsrc+64, [[EAX:%e.x]]
1597 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
1598 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 64([[ECX]])
1599 ; LINUX-32-STATIC-NEXT:         ret
1600         ret void
1601
1602 ; LINUX-32-PIC: qux08:
1603 ; LINUX-32-PIC:         movl    lsrc+64, [[EAX:%e.x]]
1604 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
1605 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 64([[ECX]])
1606 ; LINUX-32-PIC-NEXT:    ret
1607
1608 ; LINUX-64-PIC: qux08:
1609 ; LINUX-64-PIC:         movl    lsrc+64(%rip), [[EAX:%e.x]]
1610 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
1611 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]])
1612 ; LINUX-64-PIC-NEXT:    ret
1613
1614 ; DARWIN-32-STATIC: _qux08:
1615 ; DARWIN-32-STATIC:     movl    _lsrc+64, [[EAX:%e.x]]
1616 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
1617 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 64([[ECX]])
1618 ; DARWIN-32-STATIC-NEXT:        ret
1619
1620 ; DARWIN-32-DYNAMIC: _qux08:
1621 ; DARWIN-32-DYNAMIC:    movl    _lsrc+64, [[EAX:%e.x]]
1622 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
1623 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 64([[ECX]])
1624 ; DARWIN-32-DYNAMIC-NEXT:       ret
1625
1626 ; DARWIN-32-PIC: _qux08:
1627 ; DARWIN-32-PIC:        calll   L23$pb
1628 ; DARWIN-32-PIC-NEXT: L23$pb:
1629 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1630 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L23$pb)+64([[EAX]]), [[ECX:%e.x]]
1631 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L23$pb([[EAX]]), [[EAX:%e.x]]
1632 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 64([[EAX]])
1633 ; DARWIN-32-PIC-NEXT:   ret
1634
1635 ; DARWIN-64-STATIC: _qux08:
1636 ; DARWIN-64-STATIC:     movl    _lsrc+64(%rip), [[EAX:%e.x]]
1637 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
1638 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]])
1639 ; DARWIN-64-STATIC-NEXT:        ret
1640
1641 ; DARWIN-64-DYNAMIC: _qux08:
1642 ; DARWIN-64-DYNAMIC:    movl    _lsrc+64(%rip), [[EAX:%e.x]]
1643 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
1644 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]])
1645 ; DARWIN-64-DYNAMIC-NEXT:       ret
1646
1647 ; DARWIN-64-PIC: _qux08:
1648 ; DARWIN-64-PIC:        movl    _lsrc+64(%rip), [[EAX:%e.x]]
1649 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
1650 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]])
1651 ; DARWIN-64-PIC-NEXT:   ret
1652 }
1653
1654 define void @ind00(i64 %i) nounwind {
1655 entry:
1656         %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1657         %1 = load i32* %0, align 4
1658         %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1659         store i32 %1, i32* %2, align 4
1660         ret void
1661 ; LINUX-64-STATIC: ind00:
1662 ; LINUX-64-STATIC: movl    src(,%rdi,4), [[EAX:%e.x]]
1663 ; LINUX-64-STATIC: movl    [[EAX]], dst(,%rdi,4)
1664 ; LINUX-64-STATIC: ret
1665
1666 ; LINUX-32-STATIC: ind00:
1667 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1668 ; LINUX-32-STATIC-NEXT:         movl    src(,[[EAX]],4), [[ECX:%e.x]]
1669 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], dst(,[[EAX]],4)
1670 ; LINUX-32-STATIC-NEXT:         ret
1671
1672 ; LINUX-32-PIC: ind00:
1673 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1674 ; LINUX-32-PIC-NEXT:    movl    src(,[[EAX]],4), [[ECX:%e.x]]
1675 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], dst(,[[EAX]],4)
1676 ; LINUX-32-PIC-NEXT:    ret
1677
1678 ; LINUX-64-PIC: ind00:
1679 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
1680 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1681 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
1682 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
1683 ; LINUX-64-PIC-NEXT:    ret
1684
1685 ; DARWIN-32-STATIC: _ind00:
1686 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1687 ; DARWIN-32-STATIC-NEXT:        movl    _src(,[[EAX]],4), [[ECX:%e.x]]
1688 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _dst(,[[EAX]],4)
1689 ; DARWIN-32-STATIC-NEXT:        ret
1690
1691 ; DARWIN-32-DYNAMIC: _ind00:
1692 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1693 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
1694 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1695 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[EDX:%e.x]]
1696 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
1697 ; DARWIN-32-DYNAMIC-NEXT:       ret
1698
1699 ; DARWIN-32-PIC: _ind00:
1700 ; DARWIN-32-PIC:        calll   L24$pb
1701 ; DARWIN-32-PIC-NEXT: L24$pb:
1702 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1703 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
1704 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L24$pb([[EAX]]), [[EDX:%e.x]]
1705 ; DARWIN-32-PIC-NEXT:   movl    ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
1706 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L24$pb([[EAX]]), [[EAX:%e.x]]
1707 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
1708 ; DARWIN-32-PIC-NEXT:   ret
1709
1710 ; DARWIN-64-STATIC: _ind00:
1711 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1712 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1713 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1714 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
1715 ; DARWIN-64-STATIC-NEXT:        ret
1716
1717 ; DARWIN-64-DYNAMIC: _ind00:
1718 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1719 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1720 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1721 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
1722 ; DARWIN-64-DYNAMIC-NEXT:       ret
1723
1724 ; DARWIN-64-PIC: _ind00:
1725 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
1726 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1727 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1728 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
1729 ; DARWIN-64-PIC-NEXT:   ret
1730 }
1731
1732 define void @ixd00(i64 %i) nounwind {
1733 entry:
1734         %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
1735         %1 = load i32* %0, align 4
1736         %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1737         store i32 %1, i32* %2, align 4
1738         ret void
1739 ; LINUX-64-STATIC: ixd00:
1740 ; LINUX-64-STATIC: movl    xsrc(,%rdi,4), [[EAX:%e.x]]
1741 ; LINUX-64-STATIC: movl    [[EAX]], xdst(,%rdi,4)
1742 ; LINUX-64-STATIC: ret
1743
1744 ; LINUX-32-STATIC: ixd00:
1745 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1746 ; LINUX-32-STATIC-NEXT:         movl    xsrc(,[[EAX]],4), [[ECX:%e.x]]
1747 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], xdst(,[[EAX]],4)
1748 ; LINUX-32-STATIC-NEXT:         ret
1749
1750 ; LINUX-32-PIC: ixd00:
1751 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1752 ; LINUX-32-PIC-NEXT:    movl    xsrc(,[[EAX]],4), [[ECX:%e.x]]
1753 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], xdst(,[[EAX]],4)
1754 ; LINUX-32-PIC-NEXT:    ret
1755
1756 ; LINUX-64-PIC: ixd00:
1757 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1758 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1759 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1760 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
1761 ; LINUX-64-PIC-NEXT:    ret
1762
1763 ; DARWIN-32-STATIC: _ixd00:
1764 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1765 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc(,[[EAX]],4), [[ECX:%e.x]]
1766 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _xdst(,[[EAX]],4)
1767 ; DARWIN-32-STATIC-NEXT:        ret
1768
1769 ; DARWIN-32-DYNAMIC: _ixd00:
1770 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1771 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
1772 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1773 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[EDX:%e.x]]
1774 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
1775 ; DARWIN-32-DYNAMIC-NEXT:       ret
1776
1777 ; DARWIN-32-PIC: _ixd00:
1778 ; DARWIN-32-PIC:        calll   L25$pb
1779 ; DARWIN-32-PIC-NEXT: L25$pb:
1780 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1781 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
1782 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L25$pb([[EAX]]), [[EDX:%e.x]]
1783 ; DARWIN-32-PIC-NEXT:   movl    ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
1784 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L25$pb([[EAX]]), [[EAX:%e.x]]
1785 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
1786 ; DARWIN-32-PIC-NEXT:   ret
1787
1788 ; DARWIN-64-STATIC: _ixd00:
1789 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1790 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1791 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1792 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
1793 ; DARWIN-64-STATIC-NEXT:        ret
1794
1795 ; DARWIN-64-DYNAMIC: _ixd00:
1796 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1797 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1798 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1799 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
1800 ; DARWIN-64-DYNAMIC-NEXT:       ret
1801
1802 ; DARWIN-64-PIC: _ixd00:
1803 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1804 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1805 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1806 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
1807 ; DARWIN-64-PIC-NEXT:   ret
1808 }
1809
1810 define void @ind01(i64 %i) nounwind {
1811 entry:
1812         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1813         store i32* %0, i32** @ptr, align 8
1814         ret void
1815 ; LINUX-64-STATIC: ind01:
1816 ; LINUX-64-STATIC: leaq    dst(,%rdi,4), [[RAX:%r.x]]
1817 ; LINUX-64-STATIC: movq    [[RAX]], ptr
1818 ; LINUX-64-STATIC: ret
1819
1820 ; LINUX-32-STATIC: ind01:
1821 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1822 ; LINUX-32-STATIC-NEXT:         leal    dst(,[[EAX]],4), [[EAX:%e.x]]
1823 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
1824 ; LINUX-32-STATIC-NEXT:         ret
1825
1826 ; LINUX-32-PIC: ind01:
1827 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1828 ; LINUX-32-PIC-NEXT:    leal    dst(,[[EAX]],4), [[EAX:%e.x]]
1829 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
1830 ; LINUX-32-PIC-NEXT:    ret
1831
1832 ; LINUX-64-PIC: ind01:
1833 ; LINUX-64-PIC:         shlq    $2, %rdi
1834 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), %rdi
1835 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1836 ; LINUX-64-PIC-NEXT:    movq    %rdi, ([[RAX]])
1837 ; LINUX-64-PIC-NEXT:    ret
1838
1839 ; DARWIN-32-STATIC: _ind01:
1840 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1841 ; DARWIN-32-STATIC-NEXT:        leal    _dst(,[[EAX]],4), [[EAX:%e.x]]
1842 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
1843 ; DARWIN-32-STATIC-NEXT:        ret
1844
1845 ; DARWIN-32-DYNAMIC: _ind01:
1846 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1847 ; DARWIN-32-DYNAMIC-NEXT:       shll    $2, [[EAX:%e.x]]
1848 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, [[EAX:%e.x]]
1849 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1850 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
1851 ; DARWIN-32-DYNAMIC-NEXT:       ret
1852
1853 ; DARWIN-32-PIC: _ind01:
1854 ; DARWIN-32-PIC:        calll   L26$pb
1855 ; DARWIN-32-PIC-NEXT: L26$pb:
1856 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1857 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
1858 ; DARWIN-32-PIC-NEXT:   shll    $2, [[ECX:%e.x]]
1859 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-L26$pb([[EAX]]), [[ECX:%e.x]]
1860 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L26$pb([[EAX]]), [[EAX:%e.x]]
1861 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
1862 ; DARWIN-32-PIC-NEXT:   ret
1863
1864 ; DARWIN-64-STATIC: _ind01:
1865 ; DARWIN-64-STATIC:     shlq    $2, %rdi
1866 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), %rdi
1867 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1868 ; DARWIN-64-STATIC-NEXT:        movq    %rdi, ([[RAX]])
1869 ; DARWIN-64-STATIC-NEXT:        ret
1870
1871 ; DARWIN-64-DYNAMIC: _ind01:
1872 ; DARWIN-64-DYNAMIC:    shlq    $2, %rdi
1873 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), %rdi
1874 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1875 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rdi, ([[RAX]])
1876 ; DARWIN-64-DYNAMIC-NEXT:       ret
1877
1878 ; DARWIN-64-PIC: _ind01:
1879 ; DARWIN-64-PIC:        shlq    $2, %rdi
1880 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), %rdi
1881 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1882 ; DARWIN-64-PIC-NEXT:   movq    %rdi, ([[RAX]])
1883 ; DARWIN-64-PIC-NEXT:   ret
1884 }
1885
1886 define void @ixd01(i64 %i) nounwind {
1887 entry:
1888         %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1889         store i32* %0, i32** @ptr, align 8
1890         ret void
1891 ; LINUX-64-STATIC: ixd01:
1892 ; LINUX-64-STATIC: leaq    xdst(,%rdi,4), [[RAX:%r.x]]
1893 ; LINUX-64-STATIC: movq    [[RAX]], ptr
1894 ; LINUX-64-STATIC: ret
1895
1896 ; LINUX-32-STATIC: ixd01:
1897 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1898 ; LINUX-32-STATIC-NEXT:         leal    xdst(,[[EAX]],4), [[EAX:%e.x]]
1899 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
1900 ; LINUX-32-STATIC-NEXT:         ret
1901
1902 ; LINUX-32-PIC: ixd01:
1903 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1904 ; LINUX-32-PIC-NEXT:    leal    xdst(,[[EAX]],4), [[EAX:%e.x]]
1905 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
1906 ; LINUX-32-PIC-NEXT:    ret
1907
1908 ; LINUX-64-PIC: ixd01:
1909 ; LINUX-64-PIC:         shlq    $2, %rdi
1910 ; LINUX-64-PIC-NEXT:    addq    xdst@GOTPCREL(%rip), %rdi
1911 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1912 ; LINUX-64-PIC-NEXT:    movq    %rdi, ([[RAX]])
1913 ; LINUX-64-PIC-NEXT:    ret
1914
1915 ; DARWIN-32-STATIC: _ixd01:
1916 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
1917 ; DARWIN-32-STATIC-NEXT:        leal    _xdst(,[[EAX]],4), [[EAX:%e.x]]
1918 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
1919 ; DARWIN-32-STATIC-NEXT:        ret
1920
1921 ; DARWIN-32-DYNAMIC: _ixd01:
1922 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
1923 ; DARWIN-32-DYNAMIC-NEXT:       shll    $2, [[EAX:%e.x]]
1924 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_xdst$non_lazy_ptr, [[EAX:%e.x]]
1925 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1926 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
1927 ; DARWIN-32-DYNAMIC-NEXT:       ret
1928
1929 ; DARWIN-32-PIC: _ixd01:
1930 ; DARWIN-32-PIC:        calll   L27$pb
1931 ; DARWIN-32-PIC-NEXT: L27$pb:
1932 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
1933 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
1934 ; DARWIN-32-PIC-NEXT:   shll    $2, [[ECX:%e.x]]
1935 ; DARWIN-32-PIC-NEXT:   addl    L_xdst$non_lazy_ptr-L27$pb([[EAX]]), [[ECX:%e.x]]
1936 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L27$pb([[EAX]]), [[EAX:%e.x]]
1937 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
1938 ; DARWIN-32-PIC-NEXT:   ret
1939
1940 ; DARWIN-64-STATIC: _ixd01:
1941 ; DARWIN-64-STATIC:     shlq    $2, %rdi
1942 ; DARWIN-64-STATIC-NEXT:        addq    _xdst@GOTPCREL(%rip), %rdi
1943 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1944 ; DARWIN-64-STATIC-NEXT:        movq    %rdi, ([[RAX]])
1945 ; DARWIN-64-STATIC-NEXT:        ret
1946
1947 ; DARWIN-64-DYNAMIC: _ixd01:
1948 ; DARWIN-64-DYNAMIC:    shlq    $2, %rdi
1949 ; DARWIN-64-DYNAMIC-NEXT:       addq    _xdst@GOTPCREL(%rip), %rdi
1950 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1951 ; DARWIN-64-DYNAMIC-NEXT:       movq    %rdi, ([[RAX]])
1952 ; DARWIN-64-DYNAMIC-NEXT:       ret
1953
1954 ; DARWIN-64-PIC: _ixd01:
1955 ; DARWIN-64-PIC:        shlq    $2, %rdi
1956 ; DARWIN-64-PIC-NEXT:   addq    _xdst@GOTPCREL(%rip), %rdi
1957 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1958 ; DARWIN-64-PIC-NEXT:   movq    %rdi, ([[RAX]])
1959 ; DARWIN-64-PIC-NEXT:   ret
1960 }
1961
1962 define void @ind02(i64 %i) nounwind {
1963 entry:
1964         %0 = load i32** @ptr, align 8
1965         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1966         %2 = load i32* %1, align 4
1967         %3 = getelementptr i32* %0, i64 %i
1968         store i32 %2, i32* %3, align 4
1969         ret void
1970 ; LINUX-64-STATIC: ind02:
1971 ; LINUX-64-STATIC: movl    src(,%rdi,4), [[EAX:%e.x]]
1972 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
1973 ; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
1974 ; LINUX-64-STATIC: ret
1975
1976 ; LINUX-32-STATIC: ind02:
1977 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
1978 ; LINUX-32-STATIC-NEXT:         movl    src(,[[EAX]],4), [[ECX:%e.x]]
1979 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
1980 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ([[EDX]],[[EAX]],4)
1981 ; LINUX-32-STATIC-NEXT:         ret
1982
1983 ; LINUX-32-PIC: ind02:
1984 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
1985 ; LINUX-32-PIC-NEXT:    movl    src(,[[EAX]],4), [[ECX:%e.x]]
1986 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
1987 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ([[EDX]],[[EAX]],4)
1988 ; LINUX-32-PIC-NEXT:    ret
1989
1990 ; LINUX-64-PIC: ind02:
1991 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
1992 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
1993 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1994 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
1995 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
1996 ; LINUX-64-PIC-NEXT:    ret
1997
1998 ; DARWIN-32-STATIC: _ind02:
1999 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2000 ; DARWIN-32-STATIC-NEXT:        movl    _src(,[[EAX]],4), [[ECX:%e.x]]
2001 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
2002 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], ([[EDX]],[[EAX]],4)
2003 ; DARWIN-32-STATIC-NEXT:        ret
2004
2005 ; DARWIN-32-DYNAMIC: _ind02:
2006 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2007 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
2008 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2009 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2010 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
2011 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
2012 ; DARWIN-32-DYNAMIC-NEXT:       ret
2013
2014 ; DARWIN-32-PIC: _ind02:
2015 ; DARWIN-32-PIC:        calll   L28$pb
2016 ; DARWIN-32-PIC-NEXT: L28$pb:
2017 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2018 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2019 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L28$pb([[EAX]]), [[EDX:%e.x]]
2020 ; DARWIN-32-PIC-NEXT:   movl    ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2021 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L28$pb([[EAX]]), [[EAX:%e.x]]
2022 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
2023 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
2024 ; DARWIN-32-PIC-NEXT:   ret
2025
2026 ; DARWIN-64-STATIC: _ind02:
2027 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2028 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2029 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2030 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
2031 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2032 ; DARWIN-64-STATIC-NEXT:        ret
2033
2034 ; DARWIN-64-DYNAMIC: _ind02:
2035 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2036 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2037 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2038 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
2039 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2040 ; DARWIN-64-DYNAMIC-NEXT:       ret
2041
2042 ; DARWIN-64-PIC: _ind02:
2043 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2044 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2045 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2046 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
2047 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2048 ; DARWIN-64-PIC-NEXT:   ret
2049 }
2050
2051 define void @ixd02(i64 %i) nounwind {
2052 entry:
2053         %0 = load i32** @ptr, align 8
2054         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
2055         %2 = load i32* %1, align 4
2056         %3 = getelementptr i32* %0, i64 %i
2057         store i32 %2, i32* %3, align 4
2058         ret void
2059 ; LINUX-64-STATIC: ixd02:
2060 ; LINUX-64-STATIC: movl    xsrc(,%rdi,4), [[EAX:%e.x]]
2061 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
2062 ; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2063 ; LINUX-64-STATIC: ret
2064
2065 ; LINUX-32-STATIC: ixd02:
2066 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2067 ; LINUX-32-STATIC-NEXT:         movl    xsrc(,[[EAX]],4), [[ECX:%e.x]]
2068 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
2069 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ([[EDX]],[[EAX]],4)
2070 ; LINUX-32-STATIC-NEXT:         ret
2071
2072 ; LINUX-32-PIC: ixd02:
2073 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2074 ; LINUX-32-PIC-NEXT:    movl    xsrc(,[[EAX]],4), [[ECX:%e.x]]
2075 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
2076 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ([[EDX]],[[EAX]],4)
2077 ; LINUX-32-PIC-NEXT:    ret
2078
2079 ; LINUX-64-PIC: ixd02:
2080 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2081 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2082 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2083 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
2084 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2085 ; LINUX-64-PIC-NEXT:    ret
2086
2087 ; DARWIN-32-STATIC: _ixd02:
2088 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2089 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc(,[[EAX]],4), [[ECX:%e.x]]
2090 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
2091 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], ([[EDX]],[[EAX]],4)
2092 ; DARWIN-32-STATIC-NEXT:        ret
2093
2094 ; DARWIN-32-DYNAMIC: _ixd02:
2095 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2096 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
2097 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2098 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2099 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
2100 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
2101 ; DARWIN-32-DYNAMIC-NEXT:       ret
2102
2103 ; DARWIN-32-PIC: _ixd02:
2104 ; DARWIN-32-PIC:        calll   L29$pb
2105 ; DARWIN-32-PIC-NEXT: L29$pb:
2106 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2107 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2108 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L29$pb([[EAX]]), [[EDX:%e.x]]
2109 ; DARWIN-32-PIC-NEXT:   movl    ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2110 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L29$pb([[EAX]]), [[EAX:%e.x]]
2111 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
2112 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
2113 ; DARWIN-32-PIC-NEXT:   ret
2114
2115 ; DARWIN-64-STATIC: _ixd02:
2116 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2117 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2118 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2119 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
2120 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2121 ; DARWIN-64-STATIC-NEXT:        ret
2122
2123 ; DARWIN-64-DYNAMIC: _ixd02:
2124 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2125 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2126 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2127 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
2128 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2129 ; DARWIN-64-DYNAMIC-NEXT:       ret
2130
2131 ; DARWIN-64-PIC: _ixd02:
2132 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2133 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2134 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2135 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
2136 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2137 ; DARWIN-64-PIC-NEXT:   ret
2138 }
2139
2140 define void @ind03(i64 %i) nounwind {
2141 entry:
2142         %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2143         %1 = load i32* %0, align 4
2144         %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2145         store i32 %1, i32* %2, align 4
2146         ret void
2147 ; LINUX-64-STATIC: ind03:
2148 ; LINUX-64-STATIC: movl    dsrc(,%rdi,4), [[EAX:%e.x]]
2149 ; LINUX-64-STATIC: movl    [[EAX]], ddst(,%rdi,4)
2150 ; LINUX-64-STATIC: ret
2151
2152 ; LINUX-32-STATIC: ind03:
2153 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2154 ; LINUX-32-STATIC-NEXT:         movl    dsrc(,[[EAX]],4), [[ECX:%e.x]]
2155 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ddst(,[[EAX]],4)
2156 ; LINUX-32-STATIC-NEXT:         ret
2157
2158 ; LINUX-32-PIC: ind03:
2159 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2160 ; LINUX-32-PIC-NEXT:    movl    dsrc(,[[EAX]],4), [[ECX:%e.x]]
2161 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ddst(,[[EAX]],4)
2162 ; LINUX-32-PIC-NEXT:    ret
2163
2164 ; LINUX-64-PIC: ind03:
2165 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2166 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2167 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
2168 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2169 ; LINUX-64-PIC-NEXT:    ret
2170
2171 ; DARWIN-32-STATIC: _ind03:
2172 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2173 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2174 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ddst(,[[EAX]],4)
2175 ; DARWIN-32-STATIC-NEXT:        ret
2176
2177 ; DARWIN-32-DYNAMIC: _ind03:
2178 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2179 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2180 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ddst(,[[EAX]],4)
2181 ; DARWIN-32-DYNAMIC-NEXT:       ret
2182
2183 ; DARWIN-32-PIC: _ind03:
2184 ; DARWIN-32-PIC:        calll   L30$pb
2185 ; DARWIN-32-PIC-NEXT: L30$pb:
2186 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2187 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2188 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-L30$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2189 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], _ddst-L30$pb([[EAX]],[[ECX]],4)
2190 ; DARWIN-32-PIC-NEXT:   ret
2191
2192 ; DARWIN-64-STATIC: _ind03:
2193 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
2194 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2195 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), [[RCX:%r.x]]
2196 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2197 ; DARWIN-64-STATIC-NEXT:        ret
2198
2199 ; DARWIN-64-DYNAMIC: _ind03:
2200 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
2201 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2202 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), [[RCX:%r.x]]
2203 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2204 ; DARWIN-64-DYNAMIC-NEXT:       ret
2205
2206 ; DARWIN-64-PIC: _ind03:
2207 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
2208 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2209 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), [[RCX:%r.x]]
2210 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2211 ; DARWIN-64-PIC-NEXT:   ret
2212 }
2213
2214 define void @ind04(i64 %i) nounwind {
2215 entry:
2216         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2217         store i32* %0, i32** @dptr, align 8
2218         ret void
2219 ; LINUX-64-STATIC: ind04:
2220 ; LINUX-64-STATIC: leaq    ddst(,%rdi,4), [[RAX:%r.x]]
2221 ; LINUX-64-STATIC: movq    [[RAX]], dptr
2222 ; LINUX-64-STATIC: ret
2223
2224 ; LINUX-32-STATIC: ind04:
2225 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2226 ; LINUX-32-STATIC-NEXT:         leal    ddst(,[[EAX]],4), [[EAX:%e.x]]
2227 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dptr
2228 ; LINUX-32-STATIC-NEXT:         ret
2229
2230 ; LINUX-32-PIC: ind04:
2231 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2232 ; LINUX-32-PIC-NEXT:    leal    ddst(,[[EAX]],4), [[EAX:%e.x]]
2233 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dptr
2234 ; LINUX-32-PIC-NEXT:    ret
2235
2236 ; LINUX-64-PIC: ind04:
2237 ; LINUX-64-PIC:         shlq    $2, %rdi
2238 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), %rdi
2239 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
2240 ; LINUX-64-PIC-NEXT:    movq    %rdi, ([[RAX]])
2241 ; LINUX-64-PIC-NEXT:    ret
2242
2243 ; DARWIN-32-STATIC: _ind04:
2244 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2245 ; DARWIN-32-STATIC-NEXT:        leal    _ddst(,[[EAX]],4), [[EAX:%e.x]]
2246 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dptr
2247 ; DARWIN-32-STATIC-NEXT:        ret
2248
2249 ; DARWIN-32-DYNAMIC: _ind04:
2250 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2251 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst(,[[EAX]],4), [[EAX:%e.x]]
2252 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _dptr
2253 ; DARWIN-32-DYNAMIC-NEXT:       ret
2254
2255 ; DARWIN-32-PIC: _ind04:
2256 ; DARWIN-32-PIC:        calll   L31$pb
2257 ; DARWIN-32-PIC-NEXT: L31$pb:
2258 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2259 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2260 ; DARWIN-32-PIC-NEXT:   leal    _ddst-L31$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]]
2261 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L31$pb([[EAX]])
2262 ; DARWIN-32-PIC-NEXT:   ret
2263
2264 ; DARWIN-64-STATIC: _ind04:
2265 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
2266 ; DARWIN-64-STATIC-NEXT:        leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2267 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
2268 ; DARWIN-64-STATIC-NEXT:        ret
2269
2270 ; DARWIN-64-DYNAMIC: _ind04:
2271 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
2272 ; DARWIN-64-DYNAMIC-NEXT:       leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2273 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
2274 ; DARWIN-64-DYNAMIC-NEXT:       ret
2275
2276 ; DARWIN-64-PIC: _ind04:
2277 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
2278 ; DARWIN-64-PIC-NEXT:   leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2279 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
2280 ; DARWIN-64-PIC-NEXT:   ret
2281 }
2282
2283 define void @ind05(i64 %i) nounwind {
2284 entry:
2285         %0 = load i32** @dptr, align 8
2286         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2287         %2 = load i32* %1, align 4
2288         %3 = getelementptr i32* %0, i64 %i
2289         store i32 %2, i32* %3, align 4
2290         ret void
2291 ; LINUX-64-STATIC: ind05:
2292 ; LINUX-64-STATIC: movl    dsrc(,%rdi,4), [[EAX:%e.x]]
2293 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
2294 ; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2295 ; LINUX-64-STATIC: ret
2296
2297 ; LINUX-32-STATIC: ind05:
2298 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2299 ; LINUX-32-STATIC-NEXT:         movl    dsrc(,[[EAX]],4), [[ECX:%e.x]]
2300 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[EDX:%e.x]]
2301 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ([[EDX]],[[EAX]],4)
2302 ; LINUX-32-STATIC-NEXT:         ret
2303
2304 ; LINUX-32-PIC: ind05:
2305 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2306 ; LINUX-32-PIC-NEXT:    movl    dsrc(,[[EAX]],4), [[ECX:%e.x]]
2307 ; LINUX-32-PIC-NEXT:    movl    dptr, [[EDX:%e.x]]
2308 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ([[EDX]],[[EAX]],4)
2309 ; LINUX-32-PIC-NEXT:    ret
2310
2311 ; LINUX-64-PIC: ind05:
2312 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2313 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2314 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
2315 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
2316 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2317 ; LINUX-64-PIC-NEXT:    ret
2318
2319 ; DARWIN-32-STATIC: _ind05:
2320 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2321 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2322 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[EDX:%e.x]]
2323 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], ([[EDX]],[[EAX]],4)
2324 ; DARWIN-32-STATIC-NEXT:        ret
2325
2326 ; DARWIN-32-DYNAMIC: _ind05:
2327 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2328 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2329 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[EDX:%e.x]]
2330 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
2331 ; DARWIN-32-DYNAMIC-NEXT:       ret
2332
2333 ; DARWIN-32-PIC: _ind05:
2334 ; DARWIN-32-PIC:        calll   L32$pb
2335 ; DARWIN-32-PIC-NEXT: L32$pb:
2336 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2337 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2338 ; DARWIN-32-PIC-NEXT:   movl    _dsrc-L32$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2339 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L32$pb([[EAX]]), [[EAX:%e.x]]
2340 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
2341 ; DARWIN-32-PIC-NEXT:   ret
2342
2343 ; DARWIN-64-STATIC: _ind05:
2344 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
2345 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2346 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
2347 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2348 ; DARWIN-64-STATIC-NEXT:        ret
2349
2350 ; DARWIN-64-DYNAMIC: _ind05:
2351 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
2352 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2353 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
2354 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2355 ; DARWIN-64-DYNAMIC-NEXT:       ret
2356
2357 ; DARWIN-64-PIC: _ind05:
2358 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
2359 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2360 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
2361 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2362 ; DARWIN-64-PIC-NEXT:   ret
2363 }
2364
2365 define void @ind06(i64 %i) nounwind {
2366 entry:
2367         %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2368         %1 = load i32* %0, align 4
2369         %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2370         store i32 %1, i32* %2, align 4
2371         ret void
2372 ; LINUX-64-STATIC: ind06:
2373 ; LINUX-64-STATIC: movl    lsrc(,%rdi,4), [[EAX:%e.x]]
2374 ; LINUX-64-STATIC: movl    [[EAX]], ldst(,%rdi,4)
2375 ; LINUX-64-STATIC: ret
2376
2377 ; LINUX-32-STATIC: ind06:
2378 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2379 ; LINUX-32-STATIC-NEXT:         movl    lsrc(,[[EAX]],4), [[ECX:%e.x]]
2380 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ldst(,[[EAX]],4)
2381 ; LINUX-32-STATIC-NEXT:         ret
2382
2383 ; LINUX-32-PIC: ind06:
2384 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2385 ; LINUX-32-PIC-NEXT:    movl    lsrc(,[[EAX]],4), [[ECX:%e.x]]
2386 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ldst(,[[EAX]],4)
2387 ; LINUX-32-PIC-NEXT:    ret
2388
2389 ; LINUX-64-PIC: ind06:
2390 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
2391 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2392 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), [[RCX:%r.x]]
2393 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2394 ; LINUX-64-PIC-NEXT:    ret
2395
2396 ; DARWIN-32-STATIC: _ind06:
2397 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2398 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2399 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ldst(,[[EAX]],4)
2400 ; DARWIN-32-STATIC-NEXT:        ret
2401
2402 ; DARWIN-32-DYNAMIC: _ind06:
2403 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2404 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2405 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ldst(,[[EAX]],4)
2406 ; DARWIN-32-DYNAMIC-NEXT:       ret
2407
2408 ; DARWIN-32-PIC: _ind06:
2409 ; DARWIN-32-PIC:        calll   L33$pb
2410 ; DARWIN-32-PIC-NEXT: L33$pb:
2411 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2412 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2413 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-L33$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2414 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], _ldst-L33$pb([[EAX]],[[ECX]],4)
2415 ; DARWIN-32-PIC-NEXT:   ret
2416
2417 ; DARWIN-64-STATIC: _ind06:
2418 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
2419 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2420 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), [[RCX:%r.x]]
2421 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2422 ; DARWIN-64-STATIC-NEXT:        ret
2423
2424 ; DARWIN-64-DYNAMIC: _ind06:
2425 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
2426 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2427 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), [[RCX:%r.x]]
2428 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2429 ; DARWIN-64-DYNAMIC-NEXT:       ret
2430
2431 ; DARWIN-64-PIC: _ind06:
2432 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
2433 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2434 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), [[RCX:%r.x]]
2435 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2436 ; DARWIN-64-PIC-NEXT:   ret
2437 }
2438
2439 define void @ind07(i64 %i) nounwind {
2440 entry:
2441         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2442         store i32* %0, i32** @lptr, align 8
2443         ret void
2444 ; LINUX-64-STATIC: ind07:
2445 ; LINUX-64-STATIC: leaq    ldst(,%rdi,4), [[RAX:%r.x]]
2446 ; LINUX-64-STATIC: movq    [[RAX]], lptr
2447 ; LINUX-64-STATIC: ret
2448
2449 ; LINUX-32-STATIC: ind07:
2450 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2451 ; LINUX-32-STATIC-NEXT:         leal    ldst(,[[EAX]],4), [[EAX:%e.x]]
2452 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], lptr
2453 ; LINUX-32-STATIC-NEXT:         ret
2454
2455 ; LINUX-32-PIC: ind07:
2456 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2457 ; LINUX-32-PIC-NEXT:    leal    ldst(,[[EAX]],4), [[EAX:%e.x]]
2458 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], lptr
2459 ; LINUX-32-PIC-NEXT:    ret
2460
2461 ; LINUX-64-PIC: ind07:
2462 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
2463 ; LINUX-64-PIC-NEXT:    leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2464 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
2465 ; LINUX-64-PIC-NEXT:    ret
2466
2467 ; DARWIN-32-STATIC: _ind07:
2468 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2469 ; DARWIN-32-STATIC-NEXT:        leal    _ldst(,[[EAX]],4), [[EAX:%e.x]]
2470 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _lptr
2471 ; DARWIN-32-STATIC-NEXT:        ret
2472
2473 ; DARWIN-32-DYNAMIC: _ind07:
2474 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2475 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst(,[[EAX]],4), [[EAX:%e.x]]
2476 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _lptr
2477 ; DARWIN-32-DYNAMIC-NEXT:       ret
2478
2479 ; DARWIN-32-PIC: _ind07:
2480 ; DARWIN-32-PIC:        calll   L34$pb
2481 ; DARWIN-32-PIC-NEXT: L34$pb:
2482 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2483 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2484 ; DARWIN-32-PIC-NEXT:   leal    _ldst-L34$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]]
2485 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L34$pb([[EAX]])
2486 ; DARWIN-32-PIC-NEXT:   ret
2487
2488 ; DARWIN-64-STATIC: _ind07:
2489 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
2490 ; DARWIN-64-STATIC-NEXT:        leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2491 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
2492 ; DARWIN-64-STATIC-NEXT:        ret
2493
2494 ; DARWIN-64-DYNAMIC: _ind07:
2495 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
2496 ; DARWIN-64-DYNAMIC-NEXT:       leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2497 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
2498 ; DARWIN-64-DYNAMIC-NEXT:       ret
2499
2500 ; DARWIN-64-PIC: _ind07:
2501 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
2502 ; DARWIN-64-PIC-NEXT:   leaq    ([[RAX]],%rdi,4), [[RAX:%r.x]]
2503 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
2504 ; DARWIN-64-PIC-NEXT:   ret
2505 }
2506
2507 define void @ind08(i64 %i) nounwind {
2508 entry:
2509         %0 = load i32** @lptr, align 8
2510         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2511         %2 = load i32* %1, align 4
2512         %3 = getelementptr i32* %0, i64 %i
2513         store i32 %2, i32* %3, align 4
2514         ret void
2515 ; LINUX-64-STATIC: ind08:
2516 ; LINUX-64-STATIC: movl    lsrc(,%rdi,4), [[EAX:%e.x]]
2517 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
2518 ; LINUX-64-STATIC: movl    [[EAX]], ([[RCX]],%rdi,4)
2519 ; LINUX-64-STATIC: ret
2520
2521 ; LINUX-32-STATIC: ind08:
2522 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2523 ; LINUX-32-STATIC-NEXT:         movl    lsrc(,[[EAX]],4), [[ECX:%e.x]]
2524 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[EDX:%e.x]]
2525 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ([[EDX]],[[EAX]],4)
2526 ; LINUX-32-STATIC-NEXT:         ret
2527
2528 ; LINUX-32-PIC: ind08:
2529 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2530 ; LINUX-32-PIC-NEXT:    movl    lsrc(,[[EAX]],4), [[ECX:%e.x]]
2531 ; LINUX-32-PIC-NEXT:    movl    lptr, [[EDX:%e.x]]
2532 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ([[EDX]],[[EAX]],4)
2533 ; LINUX-32-PIC-NEXT:    ret
2534
2535 ; LINUX-64-PIC: ind08:
2536 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
2537 ; LINUX-64-PIC-NEXT:    movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2538 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
2539 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ([[RCX]],%rdi,4)
2540 ; LINUX-64-PIC-NEXT:    ret
2541
2542 ; DARWIN-32-STATIC: _ind08:
2543 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2544 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2545 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[EDX:%e.x]]
2546 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], ([[EDX]],[[EAX]],4)
2547 ; DARWIN-32-STATIC-NEXT:        ret
2548
2549 ; DARWIN-32-DYNAMIC: _ind08:
2550 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2551 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2552 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[EDX:%e.x]]
2553 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], ([[EDX]],[[EAX]],4)
2554 ; DARWIN-32-DYNAMIC-NEXT:       ret
2555
2556 ; DARWIN-32-PIC: _ind08:
2557 ; DARWIN-32-PIC:        calll   L35$pb
2558 ; DARWIN-32-PIC-NEXT: L35$pb:
2559 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2560 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2561 ; DARWIN-32-PIC-NEXT:   movl    _lsrc-L35$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2562 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L35$pb([[EAX]]), [[EAX:%e.x]]
2563 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], ([[EAX]],[[ECX]],4)
2564 ; DARWIN-32-PIC-NEXT:   ret
2565
2566 ; DARWIN-64-STATIC: _ind08:
2567 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
2568 ; DARWIN-64-STATIC-NEXT:        movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2569 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
2570 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], ([[RCX]],%rdi,4)
2571 ; DARWIN-64-STATIC-NEXT:        ret
2572
2573 ; DARWIN-64-DYNAMIC: _ind08:
2574 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
2575 ; DARWIN-64-DYNAMIC-NEXT:       movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2576 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
2577 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], ([[RCX]],%rdi,4)
2578 ; DARWIN-64-DYNAMIC-NEXT:       ret
2579
2580 ; DARWIN-64-PIC: _ind08:
2581 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
2582 ; DARWIN-64-PIC-NEXT:   movl    ([[RAX]],%rdi,4), [[EAX:%e.x]]
2583 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
2584 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], ([[RCX]],%rdi,4)
2585 ; DARWIN-64-PIC-NEXT:   ret
2586 }
2587
2588 define void @off00(i64 %i) nounwind {
2589 entry:
2590         %0 = add i64 %i, 16
2591         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
2592         %2 = load i32* %1, align 4
2593         %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
2594         store i32 %2, i32* %3, align 4
2595         ret void
2596 ; LINUX-64-STATIC: off00:
2597 ; LINUX-64-STATIC: movl    src+64(,%rdi,4), [[EAX:%e.x]]
2598 ; LINUX-64-STATIC: movl    [[EAX]], dst+64(,%rdi,4)
2599 ; LINUX-64-STATIC: ret
2600
2601 ; LINUX-32-STATIC: off00:
2602 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2603 ; LINUX-32-STATIC-NEXT:         movl    src+64(,[[EAX]],4), [[ECX:%e.x]]
2604 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], dst+64(,[[EAX]],4)
2605 ; LINUX-32-STATIC-NEXT:         ret
2606
2607 ; LINUX-32-PIC: off00:
2608 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2609 ; LINUX-32-PIC-NEXT:    movl    src+64(,[[EAX]],4), [[ECX:%e.x]]
2610 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], dst+64(,[[EAX]],4)
2611 ; LINUX-32-PIC-NEXT:    ret
2612
2613 ; LINUX-64-PIC: off00:
2614 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
2615 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2616 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
2617 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
2618 ; LINUX-64-PIC-NEXT:    ret
2619
2620 ; DARWIN-32-STATIC: _off00:
2621 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2622 ; DARWIN-32-STATIC-NEXT:        movl    _src+64(,[[EAX]],4), [[ECX:%e.x]]
2623 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _dst+64(,[[EAX]],4)
2624 ; DARWIN-32-STATIC-NEXT:        ret
2625
2626 ; DARWIN-32-DYNAMIC: _off00:
2627 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2628 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
2629 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2630 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[EDX:%e.x]]
2631 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2632 ; DARWIN-32-DYNAMIC-NEXT:       ret
2633
2634 ; DARWIN-32-PIC: _off00:
2635 ; DARWIN-32-PIC:        calll   L36$pb
2636 ; DARWIN-32-PIC-NEXT: L36$pb:
2637 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2638 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2639 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L36$pb([[EAX]]), [[EDX:%e.x]]
2640 ; DARWIN-32-PIC-NEXT:   movl    64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2641 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L36$pb([[EAX]]), [[EAX:%e.x]]
2642 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
2643 ; DARWIN-32-PIC-NEXT:   ret
2644
2645 ; DARWIN-64-STATIC: _off00:
2646 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2647 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2648 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2649 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
2650 ; DARWIN-64-STATIC-NEXT:        ret
2651
2652 ; DARWIN-64-DYNAMIC: _off00:
2653 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2654 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2655 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2656 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
2657 ; DARWIN-64-DYNAMIC-NEXT:       ret
2658
2659 ; DARWIN-64-PIC: _off00:
2660 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2661 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2662 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2663 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
2664 ; DARWIN-64-PIC-NEXT:   ret
2665 }
2666
2667 define void @oxf00(i64 %i) nounwind {
2668 entry:
2669         %0 = add i64 %i, 16
2670         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
2671         %2 = load i32* %1, align 4
2672         %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
2673         store i32 %2, i32* %3, align 4
2674         ret void
2675 ; LINUX-64-STATIC: oxf00:
2676 ; LINUX-64-STATIC: movl    xsrc+64(,%rdi,4), [[EAX:%e.x]]
2677 ; LINUX-64-STATIC: movl    [[EAX]], xdst+64(,%rdi,4)
2678 ; LINUX-64-STATIC: ret
2679
2680 ; LINUX-32-STATIC: oxf00:
2681 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2682 ; LINUX-32-STATIC-NEXT:         movl    xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2683 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], xdst+64(,[[EAX]],4)
2684 ; LINUX-32-STATIC-NEXT:         ret
2685
2686 ; LINUX-32-PIC: oxf00:
2687 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2688 ; LINUX-32-PIC-NEXT:    movl    xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2689 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], xdst+64(,[[EAX]],4)
2690 ; LINUX-32-PIC-NEXT:    ret
2691
2692 ; LINUX-64-PIC: oxf00:
2693 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2694 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2695 ; LINUX-64-PIC-NEXT:    movq    xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2696 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
2697 ; LINUX-64-PIC-NEXT:    ret
2698
2699 ; DARWIN-32-STATIC: _oxf00:
2700 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2701 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2702 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _xdst+64(,[[EAX]],4)
2703 ; DARWIN-32-STATIC-NEXT:        ret
2704
2705 ; DARWIN-32-DYNAMIC: _oxf00:
2706 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2707 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
2708 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2709 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[EDX:%e.x]]
2710 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2711 ; DARWIN-32-DYNAMIC-NEXT:       ret
2712
2713 ; DARWIN-32-PIC: _oxf00:
2714 ; DARWIN-32-PIC:        calll   L37$pb
2715 ; DARWIN-32-PIC-NEXT: L37$pb:
2716 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2717 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2718 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L37$pb([[EAX]]), [[EDX:%e.x]]
2719 ; DARWIN-32-PIC-NEXT:   movl    64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2720 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L37$pb([[EAX]]), [[EAX:%e.x]]
2721 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
2722 ; DARWIN-32-PIC-NEXT:   ret
2723
2724 ; DARWIN-64-STATIC: _oxf00:
2725 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2726 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2727 ; DARWIN-64-STATIC-NEXT:        movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2728 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
2729 ; DARWIN-64-STATIC-NEXT:        ret
2730
2731 ; DARWIN-64-DYNAMIC: _oxf00:
2732 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2733 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2734 ; DARWIN-64-DYNAMIC-NEXT:       movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2735 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
2736 ; DARWIN-64-DYNAMIC-NEXT:       ret
2737
2738 ; DARWIN-64-PIC: _oxf00:
2739 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2740 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2741 ; DARWIN-64-PIC-NEXT:   movq    _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2742 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
2743 ; DARWIN-64-PIC-NEXT:   ret
2744 }
2745
2746 define void @off01(i64 %i) nounwind {
2747 entry:
2748         %.sum = add i64 %i, 16
2749         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
2750         store i32* %0, i32** @ptr, align 8
2751         ret void
2752 ; LINUX-64-STATIC: off01:
2753 ; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), [[RAX:%r.x]]
2754 ; LINUX-64-STATIC: movq    [[RAX]], ptr
2755 ; LINUX-64-STATIC: ret
2756
2757 ; LINUX-32-STATIC: off01:
2758 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2759 ; LINUX-32-STATIC-NEXT:         leal    dst+64(,[[EAX]],4), [[EAX:%e.x]]
2760 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
2761 ; LINUX-32-STATIC-NEXT:         ret
2762
2763 ; LINUX-32-PIC: off01:
2764 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2765 ; LINUX-32-PIC-NEXT:    leal    dst+64(,[[EAX]],4), [[EAX:%e.x]]
2766 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
2767 ; LINUX-32-PIC-NEXT:    ret
2768
2769 ; LINUX-64-PIC: off01:
2770 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
2771 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2772 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2773 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
2774 ; LINUX-64-PIC-NEXT:    ret
2775
2776 ; DARWIN-32-STATIC: _off01:
2777 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2778 ; DARWIN-32-STATIC-NEXT:        leal    _dst+64(,[[EAX]],4), [[EAX:%e.x]]
2779 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
2780 ; DARWIN-32-STATIC-NEXT:        ret
2781
2782 ; DARWIN-32-DYNAMIC: _off01:
2783 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2784 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
2785 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), [[EAX:%e.x]]
2786 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
2787 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
2788 ; DARWIN-32-DYNAMIC-NEXT:       ret
2789
2790 ; DARWIN-32-PIC: _off01:
2791 ; DARWIN-32-PIC:        calll   L38$pb
2792 ; DARWIN-32-PIC-NEXT: L38$pb:
2793 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2794 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2795 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L38$pb([[EAX]]), [[EDX:%e.x]]
2796 ; DARWIN-32-PIC-NEXT:   leal    64([[EDX]],[[ECX]],4), [[ECX:%e.x]]
2797 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L38$pb([[EAX]]), [[EAX:%e.x]]
2798 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
2799 ; DARWIN-32-PIC-NEXT:   ret
2800
2801 ; DARWIN-64-STATIC: _off01:
2802 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2803 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2804 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2805 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
2806 ; DARWIN-64-STATIC-NEXT:        ret
2807
2808 ; DARWIN-64-DYNAMIC: _off01:
2809 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2810 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2811 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2812 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
2813 ; DARWIN-64-DYNAMIC-NEXT:       ret
2814
2815 ; DARWIN-64-PIC: _off01:
2816 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2817 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2818 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2819 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
2820 ; DARWIN-64-PIC-NEXT:   ret
2821 }
2822
2823 define void @oxf01(i64 %i) nounwind {
2824 entry:
2825         %.sum = add i64 %i, 16
2826         %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum
2827         store i32* %0, i32** @ptr, align 8
2828         ret void
2829 ; LINUX-64-STATIC: oxf01:
2830 ; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), [[RAX:%r.x]]
2831 ; LINUX-64-STATIC: movq    [[RAX]], ptr
2832 ; LINUX-64-STATIC: ret
2833
2834 ; LINUX-32-STATIC: oxf01:
2835 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2836 ; LINUX-32-STATIC-NEXT:         leal    xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2837 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
2838 ; LINUX-32-STATIC-NEXT:         ret
2839
2840 ; LINUX-32-PIC: oxf01:
2841 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2842 ; LINUX-32-PIC-NEXT:    leal    xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2843 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
2844 ; LINUX-32-PIC-NEXT:    ret
2845
2846 ; LINUX-64-PIC: oxf01:
2847 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2848 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2849 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2850 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
2851 ; LINUX-64-PIC-NEXT:    ret
2852
2853 ; DARWIN-32-STATIC: _oxf01:
2854 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2855 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2856 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
2857 ; DARWIN-32-STATIC-NEXT:        ret
2858
2859 ; DARWIN-32-DYNAMIC: _oxf01:
2860 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2861 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
2862 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), [[EAX:%e.x]]
2863 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
2864 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
2865 ; DARWIN-32-DYNAMIC-NEXT:       ret
2866
2867 ; DARWIN-32-PIC: _oxf01:
2868 ; DARWIN-32-PIC:        calll   L39$pb
2869 ; DARWIN-32-PIC-NEXT: L39$pb:
2870 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2871 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2872 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L39$pb([[EAX]]), [[EDX:%e.x]]
2873 ; DARWIN-32-PIC-NEXT:   leal    64([[EDX]],[[ECX]],4), [[ECX:%e.x]]
2874 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L39$pb([[EAX]]), [[EAX:%e.x]]
2875 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
2876 ; DARWIN-32-PIC-NEXT:   ret
2877
2878 ; DARWIN-64-STATIC: _oxf01:
2879 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2880 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2881 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2882 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
2883 ; DARWIN-64-STATIC-NEXT:        ret
2884
2885 ; DARWIN-64-DYNAMIC: _oxf01:
2886 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2887 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2888 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2889 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
2890 ; DARWIN-64-DYNAMIC-NEXT:       ret
2891
2892 ; DARWIN-64-PIC: _oxf01:
2893 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2894 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
2895 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2896 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
2897 ; DARWIN-64-PIC-NEXT:   ret
2898 }
2899
2900 define void @off02(i64 %i) nounwind {
2901 entry:
2902         %0 = load i32** @ptr, align 8
2903         %1 = add i64 %i, 16
2904         %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
2905         %3 = load i32* %2, align 4
2906         %4 = getelementptr i32* %0, i64 %1
2907         store i32 %3, i32* %4, align 4
2908         ret void
2909 ; LINUX-64-STATIC: off02:
2910 ; LINUX-64-STATIC: movl    src+64(,%rdi,4), [[EAX:%e.x]]
2911 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
2912 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
2913 ; LINUX-64-STATIC: ret
2914
2915 ; LINUX-32-STATIC: off02:
2916 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
2917 ; LINUX-32-STATIC-NEXT:         movl    src+64(,[[EAX]],4), [[ECX:%e.x]]
2918 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
2919 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2920 ; LINUX-32-STATIC-NEXT:         ret
2921
2922 ; LINUX-32-PIC: off02:
2923 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
2924 ; LINUX-32-PIC-NEXT:    movl    src+64(,[[EAX]],4), [[ECX:%e.x]]
2925 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
2926 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2927 ; LINUX-32-PIC-NEXT:    ret
2928
2929 ; LINUX-64-PIC: off02:
2930 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
2931 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2932 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2933 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
2934 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
2935 ; LINUX-64-PIC-NEXT:    ret
2936
2937 ; DARWIN-32-STATIC: _off02:
2938 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
2939 ; DARWIN-32-STATIC-NEXT:        movl    _src+64(,[[EAX]],4), [[ECX:%e.x]]
2940 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
2941 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2942 ; DARWIN-32-STATIC-NEXT:        ret
2943
2944 ; DARWIN-32-DYNAMIC: _off02:
2945 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
2946 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
2947 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2948 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2949 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
2950 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
2951 ; DARWIN-32-DYNAMIC-NEXT:       ret
2952
2953 ; DARWIN-32-PIC: _off02:
2954 ; DARWIN-32-PIC:        calll   L40$pb
2955 ; DARWIN-32-PIC-NEXT: L40$pb:
2956 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
2957 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
2958 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L40$pb([[EAX]]), [[EDX:%e.x]]
2959 ; DARWIN-32-PIC-NEXT:   movl    64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2960 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L40$pb([[EAX]]), [[EAX:%e.x]]
2961 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
2962 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
2963 ; DARWIN-32-PIC-NEXT:   ret
2964
2965 ; DARWIN-64-STATIC: _off02:
2966 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2967 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2968 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2969 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
2970 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
2971 ; DARWIN-64-STATIC-NEXT:        ret
2972
2973 ; DARWIN-64-DYNAMIC: _off02:
2974 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2975 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2976 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2977 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
2978 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
2979 ; DARWIN-64-DYNAMIC-NEXT:       ret
2980
2981 ; DARWIN-64-PIC: _off02:
2982 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
2983 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
2984 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2985 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
2986 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
2987 ; DARWIN-64-PIC-NEXT:   ret
2988 }
2989
2990 define void @oxf02(i64 %i) nounwind {
2991 entry:
2992         %0 = load i32** @ptr, align 8
2993         %1 = add i64 %i, 16
2994         %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1
2995         %3 = load i32* %2, align 4
2996         %4 = getelementptr i32* %0, i64 %1
2997         store i32 %3, i32* %4, align 4
2998         ret void
2999 ; LINUX-64-STATIC: oxf02:
3000 ; LINUX-64-STATIC: movl    xsrc+64(,%rdi,4), [[EAX:%e.x]]
3001 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
3002 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
3003 ; LINUX-64-STATIC: ret
3004
3005 ; LINUX-32-STATIC: oxf02:
3006 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3007 ; LINUX-32-STATIC-NEXT:         movl    xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3008 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
3009 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3010 ; LINUX-32-STATIC-NEXT:         ret
3011
3012 ; LINUX-32-PIC: oxf02:
3013 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3014 ; LINUX-32-PIC-NEXT:    movl    xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3015 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
3016 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3017 ; LINUX-32-PIC-NEXT:    ret
3018
3019 ; LINUX-64-PIC: oxf02:
3020 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3021 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3022 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3023 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
3024 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3025 ; LINUX-64-PIC-NEXT:    ret
3026
3027 ; DARWIN-32-STATIC: _oxf02:
3028 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3029 ; DARWIN-32-STATIC-NEXT:        movl    _xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3030 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
3031 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3032 ; DARWIN-32-STATIC-NEXT:        ret
3033
3034 ; DARWIN-32-DYNAMIC: _oxf02:
3035 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3036 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
3037 ; DARWIN-32-DYNAMIC-NEXT:       movl    64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
3038 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
3039 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
3040 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3041 ; DARWIN-32-DYNAMIC-NEXT:       ret
3042
3043 ; DARWIN-32-PIC: _oxf02:
3044 ; DARWIN-32-PIC:        calll   L41$pb
3045 ; DARWIN-32-PIC-NEXT: L41$pb:
3046 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3047 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3048 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L41$pb([[EAX]]), [[EDX:%e.x]]
3049 ; DARWIN-32-PIC-NEXT:   movl    64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
3050 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L41$pb([[EAX]]), [[EAX:%e.x]]
3051 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
3052 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
3053 ; DARWIN-32-PIC-NEXT:   ret
3054
3055 ; DARWIN-64-STATIC: _oxf02:
3056 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3057 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3058 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3059 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
3060 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3061 ; DARWIN-64-STATIC-NEXT:        ret
3062
3063 ; DARWIN-64-DYNAMIC: _oxf02:
3064 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3065 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3066 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3067 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
3068 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3069 ; DARWIN-64-DYNAMIC-NEXT:       ret
3070
3071 ; DARWIN-64-PIC: _oxf02:
3072 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3073 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3074 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3075 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
3076 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3077 ; DARWIN-64-PIC-NEXT:   ret
3078 }
3079
3080 define void @off03(i64 %i) nounwind {
3081 entry:
3082         %0 = add i64 %i, 16
3083         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
3084         %2 = load i32* %1, align 4
3085         %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
3086         store i32 %2, i32* %3, align 4
3087         ret void
3088 ; LINUX-64-STATIC: off03:
3089 ; LINUX-64-STATIC: movl    dsrc+64(,%rdi,4), [[EAX:%e.x]]
3090 ; LINUX-64-STATIC: movl    [[EAX]], ddst+64(,%rdi,4)
3091 ; LINUX-64-STATIC: ret
3092
3093 ; LINUX-32-STATIC: off03:
3094 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3095 ; LINUX-32-STATIC-NEXT:         movl    dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3096 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ddst+64(,[[EAX]],4)
3097 ; LINUX-32-STATIC-NEXT:         ret
3098
3099 ; LINUX-32-PIC: off03:
3100 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3101 ; LINUX-32-PIC-NEXT:    movl    dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3102 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ddst+64(,[[EAX]],4)
3103 ; LINUX-32-PIC-NEXT:    ret
3104
3105 ; LINUX-64-PIC: off03:
3106 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3107 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3108 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
3109 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3110 ; LINUX-64-PIC-NEXT:    ret
3111
3112 ; DARWIN-32-STATIC: _off03:
3113 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3114 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3115 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ddst+64(,[[EAX]],4)
3116 ; DARWIN-32-STATIC-NEXT:        ret
3117
3118 ; DARWIN-32-DYNAMIC: _off03:
3119 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3120 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3121 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ddst+64(,[[EAX]],4)
3122 ; DARWIN-32-DYNAMIC-NEXT:       ret
3123
3124 ; DARWIN-32-PIC: _off03:
3125 ; DARWIN-32-PIC:        calll   L42$pb
3126 ; DARWIN-32-PIC-NEXT: L42$pb:
3127 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3128 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3129 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L42$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3130 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], (_ddst-L42$pb)+64([[EAX]],[[ECX]],4)
3131 ; DARWIN-32-PIC-NEXT:   ret
3132
3133 ; DARWIN-64-STATIC: _off03:
3134 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
3135 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3136 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), [[RCX:%r.x]]
3137 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3138 ; DARWIN-64-STATIC-NEXT:        ret
3139
3140 ; DARWIN-64-DYNAMIC: _off03:
3141 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
3142 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3143 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), [[RCX:%r.x]]
3144 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3145 ; DARWIN-64-DYNAMIC-NEXT:       ret
3146
3147 ; DARWIN-64-PIC: _off03:
3148 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
3149 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3150 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), [[RCX:%r.x]]
3151 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3152 ; DARWIN-64-PIC-NEXT:   ret
3153 }
3154
3155 define void @off04(i64 %i) nounwind {
3156 entry:
3157         %.sum = add i64 %i, 16
3158         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
3159         store i32* %0, i32** @dptr, align 8
3160         ret void
3161 ; LINUX-64-STATIC: off04:
3162 ; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), [[RAX:%r.x]]
3163 ; LINUX-64-STATIC: movq    [[RAX]], dptr
3164 ; LINUX-64-STATIC: ret
3165
3166 ; LINUX-32-STATIC: off04:
3167 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3168 ; LINUX-32-STATIC-NEXT:         leal    ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3169 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dptr
3170 ; LINUX-32-STATIC-NEXT:         ret
3171
3172 ; LINUX-32-PIC: off04:
3173 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3174 ; LINUX-32-PIC-NEXT:    leal    ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3175 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dptr
3176 ; LINUX-32-PIC-NEXT:    ret
3177
3178 ; LINUX-64-PIC: off04:
3179 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
3180 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3181 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3182 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
3183 ; LINUX-64-PIC-NEXT:    ret
3184
3185 ; DARWIN-32-STATIC: _off04:
3186 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3187 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3188 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dptr
3189 ; DARWIN-32-STATIC-NEXT:        ret
3190
3191 ; DARWIN-32-DYNAMIC: _off04:
3192 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3193 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3194 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _dptr
3195 ; DARWIN-32-DYNAMIC-NEXT:       ret
3196
3197 ; DARWIN-32-PIC: _off04:
3198 ; DARWIN-32-PIC:        calll   L43$pb
3199 ; DARWIN-32-PIC-NEXT: L43$pb:
3200 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3201 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3202 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L43$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]]
3203 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L43$pb([[EAX]])
3204 ; DARWIN-32-PIC-NEXT:   ret
3205
3206 ; DARWIN-64-STATIC: _off04:
3207 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
3208 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3209 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
3210 ; DARWIN-64-STATIC-NEXT:        ret
3211
3212 ; DARWIN-64-DYNAMIC: _off04:
3213 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
3214 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3215 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
3216 ; DARWIN-64-DYNAMIC-NEXT:       ret
3217
3218 ; DARWIN-64-PIC: _off04:
3219 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
3220 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3221 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
3222 ; DARWIN-64-PIC-NEXT:   ret
3223 }
3224
3225 define void @off05(i64 %i) nounwind {
3226 entry:
3227         %0 = load i32** @dptr, align 8
3228         %1 = add i64 %i, 16
3229         %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
3230         %3 = load i32* %2, align 4
3231         %4 = getelementptr i32* %0, i64 %1
3232         store i32 %3, i32* %4, align 4
3233         ret void
3234 ; LINUX-64-STATIC: off05:
3235 ; LINUX-64-STATIC: movl    dsrc+64(,%rdi,4), [[EAX:%e.x]]
3236 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
3237 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
3238 ; LINUX-64-STATIC: ret
3239
3240 ; LINUX-32-STATIC: off05:
3241 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3242 ; LINUX-32-STATIC-NEXT:         movl    dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3243 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[EDX:%e.x]]
3244 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3245 ; LINUX-32-STATIC-NEXT:         ret
3246
3247 ; LINUX-32-PIC: off05:
3248 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3249 ; LINUX-32-PIC-NEXT:    movl    dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3250 ; LINUX-32-PIC-NEXT:    movl    dptr, [[EDX:%e.x]]
3251 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3252 ; LINUX-32-PIC-NEXT:    ret
3253
3254 ; LINUX-64-PIC: off05:
3255 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3256 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3257 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3258 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
3259 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3260 ; LINUX-64-PIC-NEXT:    ret
3261
3262 ; DARWIN-32-STATIC: _off05:
3263 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3264 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3265 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[EDX:%e.x]]
3266 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3267 ; DARWIN-32-STATIC-NEXT:        ret
3268
3269 ; DARWIN-32-DYNAMIC: _off05:
3270 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3271 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3272 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[EDX:%e.x]]
3273 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3274 ; DARWIN-32-DYNAMIC-NEXT:       ret
3275
3276 ; DARWIN-32-PIC: _off05:
3277 ; DARWIN-32-PIC:        calll   L44$pb
3278 ; DARWIN-32-PIC-NEXT: L44$pb:
3279 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3280 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3281 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L44$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3282 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L44$pb([[EAX]]), [[EAX:%e.x]]
3283 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
3284 ; DARWIN-32-PIC-NEXT:   ret
3285
3286 ; DARWIN-64-STATIC: _off05:
3287 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
3288 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3289 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
3290 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3291 ; DARWIN-64-STATIC-NEXT:        ret
3292
3293 ; DARWIN-64-DYNAMIC: _off05:
3294 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
3295 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3296 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
3297 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3298 ; DARWIN-64-DYNAMIC-NEXT:       ret
3299
3300 ; DARWIN-64-PIC: _off05:
3301 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
3302 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3303 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
3304 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3305 ; DARWIN-64-PIC-NEXT:   ret
3306 }
3307
3308 define void @off06(i64 %i) nounwind {
3309 entry:
3310         %0 = add i64 %i, 16
3311         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
3312         %2 = load i32* %1, align 4
3313         %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
3314         store i32 %2, i32* %3, align 4
3315         ret void
3316 ; LINUX-64-STATIC: off06:
3317 ; LINUX-64-STATIC: movl    lsrc+64(,%rdi,4), [[EAX:%e.x]]
3318 ; LINUX-64-STATIC: movl    [[EAX]], ldst+64(,%rdi,4)
3319 ; LINUX-64-STATIC: ret
3320
3321 ; LINUX-32-STATIC: off06:
3322 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3323 ; LINUX-32-STATIC-NEXT:         movl    lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3324 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ldst+64(,[[EAX]],4)
3325 ; LINUX-32-STATIC-NEXT:         ret
3326
3327 ; LINUX-32-PIC: off06:
3328 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3329 ; LINUX-32-PIC-NEXT:    movl    lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3330 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ldst+64(,[[EAX]],4)
3331 ; LINUX-32-PIC-NEXT:    ret
3332
3333 ; LINUX-64-PIC: off06:
3334 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
3335 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3336 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), [[RCX:%r.x]]
3337 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3338 ; LINUX-64-PIC-NEXT:    ret
3339
3340 ; DARWIN-32-STATIC: _off06:
3341 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3342 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3343 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ldst+64(,[[EAX]],4)
3344 ; DARWIN-32-STATIC-NEXT:        ret
3345
3346 ; DARWIN-32-DYNAMIC: _off06:
3347 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3348 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3349 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ldst+64(,[[EAX]],4)
3350 ; DARWIN-32-DYNAMIC-NEXT:       ret
3351
3352 ; DARWIN-32-PIC: _off06:
3353 ; DARWIN-32-PIC:        calll   L45$pb
3354 ; DARWIN-32-PIC-NEXT: L45$pb:
3355 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3356 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3357 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L45$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3358 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], (_ldst-L45$pb)+64([[EAX]],[[ECX]],4)
3359 ; DARWIN-32-PIC-NEXT:   ret
3360
3361 ; DARWIN-64-STATIC: _off06:
3362 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
3363 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3364 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), [[RCX:%r.x]]
3365 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3366 ; DARWIN-64-STATIC-NEXT:        ret
3367
3368 ; DARWIN-64-DYNAMIC: _off06:
3369 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
3370 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3371 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), [[RCX:%r.x]]
3372 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3373 ; DARWIN-64-DYNAMIC-NEXT:       ret
3374
3375 ; DARWIN-64-PIC: _off06:
3376 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
3377 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3378 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), [[RCX:%r.x]]
3379 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3380 ; DARWIN-64-PIC-NEXT:   ret
3381 }
3382
3383 define void @off07(i64 %i) nounwind {
3384 entry:
3385         %.sum = add i64 %i, 16
3386         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
3387         store i32* %0, i32** @lptr, align 8
3388         ret void
3389 ; LINUX-64-STATIC: off07:
3390 ; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), [[RAX:%r.x]]
3391 ; LINUX-64-STATIC: movq    [[RAX]], lptr
3392 ; LINUX-64-STATIC: ret
3393
3394 ; LINUX-32-STATIC: off07:
3395 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3396 ; LINUX-32-STATIC-NEXT:         leal    ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3397 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], lptr
3398 ; LINUX-32-STATIC-NEXT:         ret
3399
3400 ; LINUX-32-PIC: off07:
3401 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3402 ; LINUX-32-PIC-NEXT:    leal    ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3403 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], lptr
3404 ; LINUX-32-PIC-NEXT:    ret
3405
3406 ; LINUX-64-PIC: off07:
3407 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
3408 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3409 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
3410 ; LINUX-64-PIC-NEXT:    ret
3411
3412 ; DARWIN-32-STATIC: _off07:
3413 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3414 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3415 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _lptr
3416 ; DARWIN-32-STATIC-NEXT:        ret
3417
3418 ; DARWIN-32-DYNAMIC: _off07:
3419 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3420 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3421 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _lptr
3422 ; DARWIN-32-DYNAMIC-NEXT:       ret
3423
3424 ; DARWIN-32-PIC: _off07:
3425 ; DARWIN-32-PIC:        calll   L46$pb
3426 ; DARWIN-32-PIC-NEXT: L46$pb:
3427 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3428 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3429 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L46$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]]
3430 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L46$pb([[EAX]])
3431 ; DARWIN-32-PIC-NEXT:   ret
3432
3433 ; DARWIN-64-STATIC: _off07:
3434 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
3435 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3436 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
3437 ; DARWIN-64-STATIC-NEXT:        ret
3438
3439 ; DARWIN-64-DYNAMIC: _off07:
3440 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
3441 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3442 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
3443 ; DARWIN-64-DYNAMIC-NEXT:       ret
3444
3445 ; DARWIN-64-PIC: _off07:
3446 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
3447 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), [[RAX:%r.x]]
3448 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
3449 ; DARWIN-64-PIC-NEXT:   ret
3450 }
3451
3452 define void @off08(i64 %i) nounwind {
3453 entry:
3454         %0 = load i32** @lptr, align 8
3455         %1 = add i64 %i, 16
3456         %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
3457         %3 = load i32* %2, align 4
3458         %4 = getelementptr i32* %0, i64 %1
3459         store i32 %3, i32* %4, align 4
3460         ret void
3461 ; LINUX-64-STATIC: off08:
3462 ; LINUX-64-STATIC: movl    lsrc+64(,%rdi,4), [[EAX:%e.x]]
3463 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
3464 ; LINUX-64-STATIC: movl    [[EAX]], 64([[RCX]],%rdi,4)
3465 ; LINUX-64-STATIC: ret
3466
3467 ; LINUX-32-STATIC: off08:
3468 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
3469 ; LINUX-32-STATIC-NEXT:         movl    lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3470 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[EDX:%e.x]]
3471 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3472 ; LINUX-32-STATIC-NEXT:         ret
3473
3474 ; LINUX-32-PIC: off08:
3475 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
3476 ; LINUX-32-PIC-NEXT:    movl    lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3477 ; LINUX-32-PIC-NEXT:    movl    lptr, [[EDX:%e.x]]
3478 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3479 ; LINUX-32-PIC-NEXT:    ret
3480
3481 ; LINUX-64-PIC: off08:
3482 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
3483 ; LINUX-64-PIC-NEXT:    movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3484 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
3485 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 64([[RCX]],%rdi,4)
3486 ; LINUX-64-PIC-NEXT:    ret
3487
3488 ; DARWIN-32-STATIC: _off08:
3489 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
3490 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3491 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[EDX:%e.x]]
3492 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3493 ; DARWIN-32-STATIC-NEXT:        ret
3494
3495 ; DARWIN-32-DYNAMIC: _off08:
3496 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
3497 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3498 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[EDX:%e.x]]
3499 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 64([[EDX]],[[EAX]],4)
3500 ; DARWIN-32-DYNAMIC-NEXT:       ret
3501
3502 ; DARWIN-32-PIC: _off08:
3503 ; DARWIN-32-PIC:        calll   L47$pb
3504 ; DARWIN-32-PIC-NEXT: L47$pb:
3505 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3506 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
3507 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L47$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3508 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L47$pb([[EAX]]), [[EAX:%e.x]]
3509 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 64([[EAX]],[[ECX]],4)
3510 ; DARWIN-32-PIC-NEXT:   ret
3511
3512 ; DARWIN-64-STATIC: _off08:
3513 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
3514 ; DARWIN-64-STATIC-NEXT:        movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3515 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
3516 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 64([[RCX]],%rdi,4)
3517 ; DARWIN-64-STATIC-NEXT:        ret
3518
3519 ; DARWIN-64-DYNAMIC: _off08:
3520 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
3521 ; DARWIN-64-DYNAMIC-NEXT:       movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3522 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
3523 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 64([[RCX]],%rdi,4)
3524 ; DARWIN-64-DYNAMIC-NEXT:       ret
3525
3526 ; DARWIN-64-PIC: _off08:
3527 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
3528 ; DARWIN-64-PIC-NEXT:   movl    64([[RAX]],%rdi,4), [[EAX:%e.x]]
3529 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
3530 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 64([[RCX]],%rdi,4)
3531 ; DARWIN-64-PIC-NEXT:   ret
3532 }
3533
3534 define void @moo00(i64 %i) nounwind {
3535 entry:
3536         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3537         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4
3538         ret void
3539 ; LINUX-64-STATIC: moo00:
3540 ; LINUX-64-STATIC: movl    src+262144(%rip), [[EAX:%e.x]]
3541 ; LINUX-64-STATIC: movl    [[EAX]], dst+262144(%rip)
3542 ; LINUX-64-STATIC: ret
3543
3544 ; LINUX-32-STATIC: moo00:
3545 ; LINUX-32-STATIC:      movl    src+262144, [[EAX:%e.x]]
3546 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dst+262144
3547 ; LINUX-32-STATIC-NEXT:         ret
3548
3549 ; LINUX-32-PIC: moo00:
3550 ; LINUX-32-PIC:         movl    src+262144, [[EAX:%e.x]]
3551 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dst+262144
3552 ; LINUX-32-PIC-NEXT:    ret
3553
3554 ; LINUX-64-PIC: moo00:
3555 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
3556 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]]), [[EAX:%e.x]]
3557 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
3558 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
3559 ; LINUX-64-PIC-NEXT:    ret
3560
3561 ; DARWIN-32-STATIC: _moo00:
3562 ; DARWIN-32-STATIC:     movl    _src+262144, [[EAX:%e.x]]
3563 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dst+262144
3564 ; DARWIN-32-STATIC-NEXT:        ret
3565
3566 ; DARWIN-32-DYNAMIC: _moo00:
3567 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
3568 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144([[EAX]]), [[EAX:%e.x]]
3569 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
3570 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[ECX]])
3571 ; DARWIN-32-DYNAMIC-NEXT:       ret
3572
3573 ; DARWIN-32-PIC: _moo00:
3574 ; DARWIN-32-PIC:        calll   L48$pb
3575 ; DARWIN-32-PIC-NEXT: L48$pb:
3576 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3577 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L48$pb([[EAX]]), [[ECX:%e.x]]
3578 ; DARWIN-32-PIC-NEXT:   movl    262144([[ECX]]), [[ECX:%e.x]]
3579 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L48$pb([[EAX]]), [[EAX:%e.x]]
3580 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 262144([[EAX]])
3581 ; DARWIN-32-PIC-NEXT:   ret
3582
3583 ; DARWIN-64-STATIC: _moo00:
3584 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3585 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]]), [[EAX:%e.x]]
3586 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3587 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]])
3588 ; DARWIN-64-STATIC-NEXT:        ret
3589
3590 ; DARWIN-64-DYNAMIC: _moo00:
3591 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3592 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]]), [[EAX:%e.x]]
3593 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3594 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]])
3595 ; DARWIN-64-DYNAMIC-NEXT:       ret
3596
3597 ; DARWIN-64-PIC: _moo00:
3598 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3599 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]]), [[EAX:%e.x]]
3600 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3601 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]])
3602 ; DARWIN-64-PIC-NEXT:   ret
3603 }
3604
3605 define void @moo01(i64 %i) nounwind {
3606 entry:
3607         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
3608         ret void
3609 ; LINUX-64-STATIC: moo01:
3610 ; LINUX-64-STATIC: movq    $dst+262144, ptr(%rip)
3611 ; LINUX-64-STATIC: ret
3612
3613 ; LINUX-32-STATIC: moo01:
3614 ; LINUX-32-STATIC:      movl    $dst+262144, ptr
3615 ; LINUX-32-STATIC-NEXT:         ret
3616
3617 ; LINUX-32-PIC: moo01:
3618 ; LINUX-32-PIC:         movl    $dst+262144, ptr
3619 ; LINUX-32-PIC-NEXT:    ret
3620
3621 ; LINUX-64-PIC: moo01:
3622 ; LINUX-64-PIC:         movl    $262144, [[EAX:%e.x]]
3623 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
3624 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3625 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
3626 ; LINUX-64-PIC-NEXT:    ret
3627
3628 ; DARWIN-32-STATIC: _moo01:
3629 ; DARWIN-32-STATIC:     movl    $_dst+262144, _ptr
3630 ; DARWIN-32-STATIC-NEXT:        ret
3631
3632 ; DARWIN-32-DYNAMIC: _moo01:
3633 ; DARWIN-32-DYNAMIC:    movl    $262144, [[EAX:%e.x]]
3634 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, [[EAX:%e.x]]
3635 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
3636 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
3637 ; DARWIN-32-DYNAMIC-NEXT:       ret
3638
3639 ; DARWIN-32-PIC: _moo01:
3640 ; DARWIN-32-PIC:        calll   L49$pb
3641 ; DARWIN-32-PIC-NEXT: L49$pb:
3642 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3643 ; DARWIN-32-PIC-NEXT:   movl    $262144, [[ECX:%e.x]]
3644 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-L49$pb([[EAX]]), [[ECX:%e.x]]
3645 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L49$pb([[EAX]]), [[EAX:%e.x]]
3646 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
3647 ; DARWIN-32-PIC-NEXT:   ret
3648
3649 ; DARWIN-64-STATIC: _moo01:
3650 ; DARWIN-64-STATIC:     movl    $262144, [[EAX:%e.x]]
3651 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3652 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3653 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
3654 ; DARWIN-64-STATIC-NEXT:        ret
3655
3656 ; DARWIN-64-DYNAMIC: _moo01:
3657 ; DARWIN-64-DYNAMIC:    movl    $262144, [[EAX:%e.x]]
3658 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3659 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3660 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
3661 ; DARWIN-64-DYNAMIC-NEXT:       ret
3662
3663 ; DARWIN-64-PIC: _moo01:
3664 ; DARWIN-64-PIC:        movl    $262144, [[EAX:%e.x]]
3665 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3666 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3667 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
3668 ; DARWIN-64-PIC-NEXT:   ret
3669 }
3670
3671 define void @moo02(i64 %i) nounwind {
3672 entry:
3673         %0 = load i32** @ptr, align 8
3674         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3675         %2 = getelementptr i32* %0, i64 65536
3676         store i32 %1, i32* %2, align 4
3677         ret void
3678 ; LINUX-64-STATIC: moo02:
3679 ; LINUX-64-STATIC: movl    src+262144(%rip), [[EAX:%e.x]]
3680 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
3681 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
3682 ; LINUX-64-STATIC: ret
3683
3684 ; LINUX-32-STATIC: moo02:
3685 ; LINUX-32-STATIC:      movl    src+262144, [[EAX:%e.x]]
3686 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
3687 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 262144([[ECX]])
3688 ; LINUX-32-STATIC-NEXT:         ret
3689
3690 ; LINUX-32-PIC: moo02:
3691 ; LINUX-32-PIC:         movl    src+262144, [[EAX:%e.x]]
3692 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
3693 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 262144([[ECX]])
3694 ; LINUX-32-PIC-NEXT:    ret
3695
3696 ; LINUX-64-PIC: moo02:
3697 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
3698 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]]), [[EAX:%e.x]]
3699 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3700 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
3701 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
3702 ; LINUX-64-PIC-NEXT:    ret
3703
3704 ; DARWIN-32-STATIC: _moo02:
3705 ; DARWIN-32-STATIC:     movl    _src+262144, [[EAX:%e.x]]
3706 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
3707 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 262144([[ECX]])
3708 ; DARWIN-32-STATIC-NEXT:        ret
3709
3710 ; DARWIN-32-DYNAMIC: _moo02:
3711 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, [[EAX:%e.x]]
3712 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144([[EAX]]), [[EAX:%e.x]]
3713 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
3714 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[ECX]]), [[ECX:%e.x]]
3715 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[ECX]])
3716 ; DARWIN-32-DYNAMIC-NEXT:       ret
3717
3718 ; DARWIN-32-PIC: _moo02:
3719 ; DARWIN-32-PIC:        calll   L50$pb
3720 ; DARWIN-32-PIC-NEXT: L50$pb:
3721 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3722 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L50$pb([[EAX]]), [[ECX:%e.x]]
3723 ; DARWIN-32-PIC-NEXT:   movl    262144([[ECX]]), [[ECX:%e.x]]
3724 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L50$pb([[EAX]]), [[EAX:%e.x]]
3725 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
3726 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 262144([[EAX]])
3727 ; DARWIN-32-PIC-NEXT:   ret
3728
3729 ; DARWIN-64-STATIC: _moo02:
3730 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3731 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]]), [[EAX:%e.x]]
3732 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3733 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
3734 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]])
3735 ; DARWIN-64-STATIC-NEXT:        ret
3736
3737 ; DARWIN-64-DYNAMIC: _moo02:
3738 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3739 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]]), [[EAX:%e.x]]
3740 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3741 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
3742 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]])
3743 ; DARWIN-64-DYNAMIC-NEXT:       ret
3744
3745 ; DARWIN-64-PIC: _moo02:
3746 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
3747 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]]), [[EAX:%e.x]]
3748 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3749 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
3750 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]])
3751 ; DARWIN-64-PIC-NEXT:   ret
3752 }
3753
3754 define void @moo03(i64 %i) nounwind {
3755 entry:
3756         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3757         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32
3758         ret void
3759 ; LINUX-64-STATIC: moo03:
3760 ; LINUX-64-STATIC: movl    dsrc+262144(%rip), [[EAX:%e.x]]
3761 ; LINUX-64-STATIC: movl    [[EAX]], ddst+262144(%rip)
3762 ; LINUX-64-STATIC: ret
3763
3764 ; LINUX-32-STATIC: moo03:
3765 ; LINUX-32-STATIC:      movl    dsrc+262144, [[EAX:%e.x]]
3766 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ddst+262144
3767 ; LINUX-32-STATIC-NEXT:         ret
3768
3769 ; LINUX-32-PIC: moo03:
3770 ; LINUX-32-PIC:         movl    dsrc+262144, [[EAX:%e.x]]
3771 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ddst+262144
3772 ; LINUX-32-PIC-NEXT:    ret
3773
3774 ; LINUX-64-PIC: moo03:
3775 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3776 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]]), [[EAX:%e.x]]
3777 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
3778 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
3779 ; LINUX-64-PIC-NEXT:    ret
3780
3781 ; DARWIN-32-STATIC: _moo03:
3782 ; DARWIN-32-STATIC:     movl    _dsrc+262144, [[EAX:%e.x]]
3783 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ddst+262144
3784 ; DARWIN-32-STATIC-NEXT:        ret
3785
3786 ; DARWIN-32-DYNAMIC: _moo03:
3787 ; DARWIN-32-DYNAMIC:    movl    _dsrc+262144, [[EAX:%e.x]]
3788 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ddst+262144
3789 ; DARWIN-32-DYNAMIC-NEXT:       ret
3790
3791 ; DARWIN-32-PIC: _moo03:
3792 ; DARWIN-32-PIC:        calll   L51$pb
3793 ; DARWIN-32-PIC-NEXT: L51$pb:
3794 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3795 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L51$pb)+262144([[EAX]]), [[ECX:%e.x]]
3796 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], (_ddst-L51$pb)+262144([[EAX]])
3797 ; DARWIN-32-PIC-NEXT:   ret
3798
3799 ; DARWIN-64-STATIC: _moo03:
3800 ; DARWIN-64-STATIC:     movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3801 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ddst+262144(%rip)
3802 ; DARWIN-64-STATIC-NEXT:        ret
3803
3804 ; DARWIN-64-DYNAMIC: _moo03:
3805 ; DARWIN-64-DYNAMIC:    movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3806 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ddst+262144(%rip)
3807 ; DARWIN-64-DYNAMIC-NEXT:       ret
3808
3809 ; DARWIN-64-PIC: _moo03:
3810 ; DARWIN-64-PIC:        movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3811 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ddst+262144(%rip)
3812 ; DARWIN-64-PIC-NEXT:   ret
3813 }
3814
3815 define void @moo04(i64 %i) nounwind {
3816 entry:
3817         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
3818         ret void
3819 ; LINUX-64-STATIC: moo04:
3820 ; LINUX-64-STATIC: movq    $ddst+262144, dptr
3821 ; LINUX-64-STATIC: ret
3822
3823 ; LINUX-32-STATIC: moo04:
3824 ; LINUX-32-STATIC:      movl    $ddst+262144, dptr
3825 ; LINUX-32-STATIC-NEXT:         ret
3826
3827 ; LINUX-32-PIC: moo04:
3828 ; LINUX-32-PIC:         movl    $ddst+262144, dptr
3829 ; LINUX-32-PIC-NEXT:    ret
3830
3831 ; LINUX-64-PIC: moo04:
3832 ; LINUX-64-PIC:         movl    $262144, [[EAX:%e.x]]
3833 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
3834 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3835 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
3836 ; LINUX-64-PIC-NEXT:    ret
3837
3838 ; DARWIN-32-STATIC: _moo04:
3839 ; DARWIN-32-STATIC:     movl    $_ddst+262144, _dptr
3840 ; DARWIN-32-STATIC-NEXT:        ret
3841
3842 ; DARWIN-32-DYNAMIC: _moo04:
3843 ; DARWIN-32-DYNAMIC:    movl    $_ddst+262144, _dptr
3844 ; DARWIN-32-DYNAMIC-NEXT:       ret
3845
3846 ; DARWIN-32-PIC: _moo04:
3847 ; DARWIN-32-PIC:        calll   L52$pb
3848 ; DARWIN-32-PIC-NEXT: L52$pb:
3849 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3850 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L52$pb)+262144([[EAX]]), [[ECX:%e.x]]
3851 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L52$pb([[EAX]])
3852 ; DARWIN-32-PIC-NEXT:   ret
3853
3854 ; DARWIN-64-STATIC: _moo04:
3855 ; DARWIN-64-STATIC:     leaq    _ddst+262144(%rip), [[RAX:%r.x]]
3856 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
3857 ; DARWIN-64-STATIC-NEXT:        ret
3858
3859 ; DARWIN-64-DYNAMIC: _moo04:
3860 ; DARWIN-64-DYNAMIC:    leaq    _ddst+262144(%rip), [[RAX:%r.x]]
3861 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
3862 ; DARWIN-64-DYNAMIC-NEXT:       ret
3863
3864 ; DARWIN-64-PIC: _moo04:
3865 ; DARWIN-64-PIC:        leaq    _ddst+262144(%rip), [[RAX:%r.x]]
3866 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
3867 ; DARWIN-64-PIC-NEXT:   ret
3868 }
3869
3870 define void @moo05(i64 %i) nounwind {
3871 entry:
3872         %0 = load i32** @dptr, align 8
3873         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3874         %2 = getelementptr i32* %0, i64 65536
3875         store i32 %1, i32* %2, align 4
3876         ret void
3877 ; LINUX-64-STATIC: moo05:
3878 ; LINUX-64-STATIC: movl    dsrc+262144(%rip), [[EAX:%e.x]]
3879 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
3880 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
3881 ; LINUX-64-STATIC: ret
3882
3883 ; LINUX-32-STATIC: moo05:
3884 ; LINUX-32-STATIC:      movl    dsrc+262144, [[EAX:%e.x]]
3885 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
3886 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 262144([[ECX]])
3887 ; LINUX-32-STATIC-NEXT:         ret
3888
3889 ; LINUX-32-PIC: moo05:
3890 ; LINUX-32-PIC:         movl    dsrc+262144, [[EAX:%e.x]]
3891 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
3892 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 262144([[ECX]])
3893 ; LINUX-32-PIC-NEXT:    ret
3894
3895 ; LINUX-64-PIC: moo05:
3896 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3897 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]]), [[EAX:%e.x]]
3898 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3899 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
3900 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
3901 ; LINUX-64-PIC-NEXT:    ret
3902
3903 ; DARWIN-32-STATIC: _moo05:
3904 ; DARWIN-32-STATIC:     movl    _dsrc+262144, [[EAX:%e.x]]
3905 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
3906 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 262144([[ECX]])
3907 ; DARWIN-32-STATIC-NEXT:        ret
3908
3909 ; DARWIN-32-DYNAMIC: _moo05:
3910 ; DARWIN-32-DYNAMIC:    movl    _dsrc+262144, [[EAX:%e.x]]
3911 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
3912 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[ECX]])
3913 ; DARWIN-32-DYNAMIC-NEXT:       ret
3914
3915 ; DARWIN-32-PIC: _moo05:
3916 ; DARWIN-32-PIC:        calll   L53$pb
3917 ; DARWIN-32-PIC-NEXT: L53$pb:
3918 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3919 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L53$pb)+262144([[EAX]]), [[ECX:%e.x]]
3920 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L53$pb([[EAX]]), [[EAX:%e.x]]
3921 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 262144([[EAX]])
3922 ; DARWIN-32-PIC-NEXT:   ret
3923
3924 ; DARWIN-64-STATIC: _moo05:
3925 ; DARWIN-64-STATIC:     movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3926 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
3927 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]])
3928 ; DARWIN-64-STATIC-NEXT:        ret
3929
3930 ; DARWIN-64-DYNAMIC: _moo05:
3931 ; DARWIN-64-DYNAMIC:    movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3932 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
3933 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]])
3934 ; DARWIN-64-DYNAMIC-NEXT:       ret
3935
3936 ; DARWIN-64-PIC: _moo05:
3937 ; DARWIN-64-PIC:        movl    _dsrc+262144(%rip), [[EAX:%e.x]]
3938 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
3939 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]])
3940 ; DARWIN-64-PIC-NEXT:   ret
3941 }
3942
3943 define void @moo06(i64 %i) nounwind {
3944 entry:
3945         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
3946         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4
3947         ret void
3948 ; LINUX-64-STATIC: moo06:
3949 ; LINUX-64-STATIC: movl    lsrc+262144(%rip), [[EAX:%e.x]]
3950 ; LINUX-64-STATIC: movl    [[EAX]], ldst+262144(%rip)
3951 ; LINUX-64-STATIC: ret
3952
3953 ; LINUX-32-STATIC: moo06:
3954 ; LINUX-32-STATIC:      movl    lsrc+262144, [[EAX:%e.x]]
3955 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ldst+262144
3956 ; LINUX-32-STATIC-NEXT:         ret
3957
3958 ; LINUX-32-PIC: moo06:
3959 ; LINUX-32-PIC:         movl    lsrc+262144, [[EAX:%e.x]]
3960 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ldst+262144
3961 ; LINUX-32-PIC-NEXT:    ret
3962
3963 ; LINUX-64-PIC: moo06:
3964 ; LINUX-64-PIC:         movl    lsrc+262144(%rip), [[EAX:%e.x]]
3965 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], ldst+262144(%rip)
3966 ; LINUX-64-PIC-NEXT:    ret
3967
3968 ; DARWIN-32-STATIC: _moo06:
3969 ; DARWIN-32-STATIC:     movl    _lsrc+262144, [[EAX:%e.x]]
3970 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ldst+262144
3971 ; DARWIN-32-STATIC-NEXT:        ret
3972
3973 ; DARWIN-32-DYNAMIC: _moo06:
3974 ; DARWIN-32-DYNAMIC:    movl    _lsrc+262144, [[EAX:%e.x]]
3975 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _ldst+262144
3976 ; DARWIN-32-DYNAMIC-NEXT:       ret
3977
3978 ; DARWIN-32-PIC: _moo06:
3979 ; DARWIN-32-PIC:        calll   L54$pb
3980 ; DARWIN-32-PIC-NEXT: L54$pb:
3981 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
3982 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L54$pb)+262144([[EAX]]), [[ECX:%e.x]]
3983 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], (_ldst-L54$pb)+262144([[EAX]])
3984 ; DARWIN-32-PIC-NEXT:   ret
3985
3986 ; DARWIN-64-STATIC: _moo06:
3987 ; DARWIN-64-STATIC:     movl    _lsrc+262144(%rip), [[EAX:%e.x]]
3988 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], _ldst+262144(%rip)
3989 ; DARWIN-64-STATIC-NEXT:        ret
3990
3991 ; DARWIN-64-DYNAMIC: _moo06:
3992 ; DARWIN-64-DYNAMIC:    movl    _lsrc+262144(%rip), [[EAX:%e.x]]
3993 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], _ldst+262144(%rip)
3994 ; DARWIN-64-DYNAMIC-NEXT:       ret
3995
3996 ; DARWIN-64-PIC: _moo06:
3997 ; DARWIN-64-PIC:        movl    _lsrc+262144(%rip), [[EAX:%e.x]]
3998 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], _ldst+262144(%rip)
3999 ; DARWIN-64-PIC-NEXT:   ret
4000 }
4001
4002 define void @moo07(i64 %i) nounwind {
4003 entry:
4004         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
4005         ret void
4006 ; LINUX-64-STATIC: moo07:
4007 ; LINUX-64-STATIC: movq    $ldst+262144, lptr
4008 ; LINUX-64-STATIC: ret
4009
4010 ; LINUX-32-STATIC: moo07:
4011 ; LINUX-32-STATIC:      movl    $ldst+262144, lptr
4012 ; LINUX-32-STATIC-NEXT:         ret
4013
4014 ; LINUX-32-PIC: moo07:
4015 ; LINUX-32-PIC:         movl    $ldst+262144, lptr
4016 ; LINUX-32-PIC-NEXT:    ret
4017
4018 ; LINUX-64-PIC: moo07:
4019 ; LINUX-64-PIC:         leaq    ldst+262144(%rip), [[RAX:%r.x]]
4020 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
4021 ; LINUX-64-PIC-NEXT:    ret
4022
4023 ; DARWIN-32-STATIC: _moo07:
4024 ; DARWIN-32-STATIC:     movl    $_ldst+262144, _lptr
4025 ; DARWIN-32-STATIC-NEXT:        ret
4026
4027 ; DARWIN-32-DYNAMIC: _moo07:
4028 ; DARWIN-32-DYNAMIC:    movl    $_ldst+262144, _lptr
4029 ; DARWIN-32-DYNAMIC-NEXT:       ret
4030
4031 ; DARWIN-32-PIC: _moo07:
4032 ; DARWIN-32-PIC:        calll   L55$pb
4033 ; DARWIN-32-PIC-NEXT: L55$pb:
4034 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4035 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L55$pb)+262144([[EAX]]), [[ECX:%e.x]]
4036 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L55$pb([[EAX]])
4037 ; DARWIN-32-PIC-NEXT:   ret
4038
4039 ; DARWIN-64-STATIC: _moo07:
4040 ; DARWIN-64-STATIC:     leaq    _ldst+262144(%rip), [[RAX:%r.x]]
4041 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
4042 ; DARWIN-64-STATIC-NEXT:        ret
4043
4044 ; DARWIN-64-DYNAMIC: _moo07:
4045 ; DARWIN-64-DYNAMIC:    leaq    _ldst+262144(%rip), [[RAX:%r.x]]
4046 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
4047 ; DARWIN-64-DYNAMIC-NEXT:       ret
4048
4049 ; DARWIN-64-PIC: _moo07:
4050 ; DARWIN-64-PIC:        leaq    _ldst+262144(%rip), [[RAX:%r.x]]
4051 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
4052 ; DARWIN-64-PIC-NEXT:   ret
4053 }
4054
4055 define void @moo08(i64 %i) nounwind {
4056 entry:
4057         %0 = load i32** @lptr, align 8
4058         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4059         %2 = getelementptr i32* %0, i64 65536
4060         store i32 %1, i32* %2, align 4
4061         ret void
4062 ; LINUX-64-STATIC: moo08:
4063 ; LINUX-64-STATIC: movl    lsrc+262144(%rip), [[EAX:%e.x]]
4064 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
4065 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]])
4066 ; LINUX-64-STATIC: ret
4067
4068 ; LINUX-32-STATIC: moo08:
4069 ; LINUX-32-STATIC:      movl    lsrc+262144, [[EAX:%e.x]]
4070 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
4071 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], 262144([[ECX]])
4072 ; LINUX-32-STATIC-NEXT:         ret
4073
4074 ; LINUX-32-PIC: moo08:
4075 ; LINUX-32-PIC:         movl    lsrc+262144, [[EAX:%e.x]]
4076 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
4077 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], 262144([[ECX]])
4078 ; LINUX-32-PIC-NEXT:    ret
4079
4080 ; LINUX-64-PIC: moo08:
4081 ; LINUX-64-PIC:         movl    lsrc+262144(%rip), [[EAX:%e.x]]
4082 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
4083 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]])
4084 ; LINUX-64-PIC-NEXT:    ret
4085
4086 ; DARWIN-32-STATIC: _moo08:
4087 ; DARWIN-32-STATIC:     movl    _lsrc+262144, [[EAX:%e.x]]
4088 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
4089 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], 262144([[ECX]])
4090 ; DARWIN-32-STATIC-NEXT:        ret
4091
4092 ; DARWIN-32-DYNAMIC: _moo08:
4093 ; DARWIN-32-DYNAMIC:    movl    _lsrc+262144, [[EAX:%e.x]]
4094 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
4095 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[ECX]])
4096 ; DARWIN-32-DYNAMIC-NEXT:       ret
4097
4098 ; DARWIN-32-PIC: _moo08:
4099 ; DARWIN-32-PIC:        calll   L56$pb
4100 ; DARWIN-32-PIC-NEXT: L56$pb:
4101 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4102 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L56$pb)+262144([[EAX]]), [[ECX:%e.x]]
4103 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L56$pb([[EAX]]), [[EAX:%e.x]]
4104 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], 262144([[EAX]])
4105 ; DARWIN-32-PIC-NEXT:   ret
4106
4107 ; DARWIN-64-STATIC: _moo08:
4108 ; DARWIN-64-STATIC:     movl    _lsrc+262144(%rip), [[EAX:%e.x]]
4109 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
4110 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]])
4111 ; DARWIN-64-STATIC-NEXT:        ret
4112
4113 ; DARWIN-64-DYNAMIC: _moo08:
4114 ; DARWIN-64-DYNAMIC:    movl    _lsrc+262144(%rip), [[EAX:%e.x]]
4115 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
4116 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]])
4117 ; DARWIN-64-DYNAMIC-NEXT:       ret
4118
4119 ; DARWIN-64-PIC: _moo08:
4120 ; DARWIN-64-PIC:        movl    _lsrc+262144(%rip), [[EAX:%e.x]]
4121 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
4122 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]])
4123 ; DARWIN-64-PIC-NEXT:   ret
4124 }
4125
4126 define void @big00(i64 %i) nounwind {
4127 entry:
4128         %0 = add i64 %i, 65536
4129         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
4130         %2 = load i32* %1, align 4
4131         %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
4132         store i32 %2, i32* %3, align 4
4133         ret void
4134 ; LINUX-64-STATIC: big00:
4135 ; LINUX-64-STATIC: movl    src+262144(,%rdi,4), [[EAX:%e.x]]
4136 ; LINUX-64-STATIC: movl    [[EAX]], dst+262144(,%rdi,4)
4137 ; LINUX-64-STATIC: ret
4138
4139 ; LINUX-32-STATIC: big00:
4140 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4141 ; LINUX-32-STATIC-NEXT:         movl    src+262144(,[[EAX]],4), [[ECX:%e.x]]
4142 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], dst+262144(,[[EAX]],4)
4143 ; LINUX-32-STATIC-NEXT:         ret
4144
4145 ; LINUX-32-PIC: big00:
4146 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4147 ; LINUX-32-PIC-NEXT:    movl    src+262144(,[[EAX]],4), [[ECX:%e.x]]
4148 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], dst+262144(,[[EAX]],4)
4149 ; LINUX-32-PIC-NEXT:    ret
4150
4151 ; LINUX-64-PIC: big00:
4152 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
4153 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4154 ; LINUX-64-PIC-NEXT:    movq    dst@GOTPCREL(%rip), [[RCX:%r.x]]
4155 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4156 ; LINUX-64-PIC-NEXT:    ret
4157
4158 ; DARWIN-32-STATIC: _big00:
4159 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4160 ; DARWIN-32-STATIC-NEXT:        movl    _src+262144(,[[EAX]],4), [[ECX:%e.x]]
4161 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _dst+262144(,[[EAX]],4)
4162 ; DARWIN-32-STATIC-NEXT:        ret
4163
4164 ; DARWIN-32-DYNAMIC: _big00:
4165 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4166 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
4167 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144([[ECX]],[[EAX]],4), [[ECX:%e.x]]
4168 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[EDX:%e.x]]
4169 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4170 ; DARWIN-32-DYNAMIC-NEXT:       ret
4171
4172 ; DARWIN-32-PIC: _big00:
4173 ; DARWIN-32-PIC:        calll   L57$pb
4174 ; DARWIN-32-PIC-NEXT: L57$pb:
4175 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4176 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4177 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L57$pb([[EAX]]), [[EDX:%e.x]]
4178 ; DARWIN-32-PIC-NEXT:   movl    262144([[EDX]],[[ECX]],4), [[EDX:%e.x]]
4179 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L57$pb([[EAX]]), [[EAX:%e.x]]
4180 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 262144([[EAX]],[[ECX]],4)
4181 ; DARWIN-32-PIC-NEXT:   ret
4182
4183 ; DARWIN-64-STATIC: _big00:
4184 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4185 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4186 ; DARWIN-64-STATIC-NEXT:        movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4187 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4188 ; DARWIN-64-STATIC-NEXT:        ret
4189
4190 ; DARWIN-64-DYNAMIC: _big00:
4191 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4192 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4193 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4194 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4195 ; DARWIN-64-DYNAMIC-NEXT:       ret
4196
4197 ; DARWIN-64-PIC: _big00:
4198 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4199 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4200 ; DARWIN-64-PIC-NEXT:   movq    _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4201 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4202 ; DARWIN-64-PIC-NEXT:   ret
4203 }
4204
4205 define void @big01(i64 %i) nounwind {
4206 entry:
4207         %.sum = add i64 %i, 65536
4208         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
4209         store i32* %0, i32** @ptr, align 8
4210         ret void
4211 ; LINUX-64-STATIC: big01:
4212 ; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), [[RAX:%r.x]]
4213 ; LINUX-64-STATIC: movq    [[RAX]], ptr(%rip)
4214 ; LINUX-64-STATIC: ret
4215
4216 ; LINUX-32-STATIC: big01:
4217 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4218 ; LINUX-32-STATIC-NEXT:         leal    dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4219 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], ptr
4220 ; LINUX-32-STATIC-NEXT:         ret
4221
4222 ; LINUX-32-PIC: big01:
4223 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4224 ; LINUX-32-PIC-NEXT:    leal    dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4225 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], ptr
4226 ; LINUX-32-PIC-NEXT:    ret
4227
4228 ; LINUX-64-PIC: big01:
4229 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
4230 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4231 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4232 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
4233 ; LINUX-64-PIC-NEXT:    ret
4234
4235 ; DARWIN-32-STATIC: _big01:
4236 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4237 ; DARWIN-32-STATIC-NEXT:        leal    _dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4238 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _ptr
4239 ; DARWIN-32-STATIC-NEXT:        ret
4240
4241 ; DARWIN-32-DYNAMIC: _big01:
4242 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4243 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
4244 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), [[EAX:%e.x]]
4245 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
4246 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], ([[ECX]])
4247 ; DARWIN-32-DYNAMIC-NEXT:       ret
4248
4249 ; DARWIN-32-PIC: _big01:
4250 ; DARWIN-32-PIC:        calll   L58$pb
4251 ; DARWIN-32-PIC-NEXT: L58$pb:
4252 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4253 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4254 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L58$pb([[EAX]]), [[EDX:%e.x]]
4255 ; DARWIN-32-PIC-NEXT:   leal    262144([[EDX]],[[ECX]],4), [[ECX:%e.x]]
4256 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L58$pb([[EAX]]), [[EAX:%e.x]]
4257 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], ([[EAX]])
4258 ; DARWIN-32-PIC-NEXT:   ret
4259
4260 ; DARWIN-64-STATIC: _big01:
4261 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4262 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4263 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4264 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], ([[RCX]])
4265 ; DARWIN-64-STATIC-NEXT:        ret
4266
4267 ; DARWIN-64-DYNAMIC: _big01:
4268 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4269 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4270 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4271 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], ([[RCX]])
4272 ; DARWIN-64-DYNAMIC-NEXT:       ret
4273
4274 ; DARWIN-64-PIC: _big01:
4275 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4276 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4277 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4278 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], ([[RCX]])
4279 ; DARWIN-64-PIC-NEXT:   ret
4280 }
4281
4282 define void @big02(i64 %i) nounwind {
4283 entry:
4284         %0 = load i32** @ptr, align 8
4285         %1 = add i64 %i, 65536
4286         %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
4287         %3 = load i32* %2, align 4
4288         %4 = getelementptr i32* %0, i64 %1
4289         store i32 %3, i32* %4, align 4
4290         ret void
4291 ; LINUX-64-STATIC: big02:
4292 ; LINUX-64-STATIC: movl    src+262144(,%rdi,4), [[EAX:%e.x]]
4293 ; LINUX-64-STATIC: movq    ptr(%rip), [[RCX:%r.x]]
4294 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4295 ; LINUX-64-STATIC: ret
4296
4297 ; LINUX-32-STATIC: big02:
4298 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4299 ; LINUX-32-STATIC-NEXT:         movl    src+262144(,[[EAX]],4), [[ECX:%e.x]]
4300 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[EDX:%e.x]]
4301 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4302 ; LINUX-32-STATIC-NEXT:         ret
4303
4304 ; LINUX-32-PIC: big02:
4305 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4306 ; LINUX-32-PIC-NEXT:    movl    src+262144(,[[EAX]],4), [[ECX:%e.x]]
4307 ; LINUX-32-PIC-NEXT:    movl    ptr, [[EDX:%e.x]]
4308 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4309 ; LINUX-32-PIC-NEXT:    ret
4310
4311 ; LINUX-64-PIC: big02:
4312 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
4313 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4314 ; LINUX-64-PIC-NEXT:    movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4315 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
4316 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4317 ; LINUX-64-PIC-NEXT:    ret
4318
4319 ; DARWIN-32-STATIC: _big02:
4320 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4321 ; DARWIN-32-STATIC-NEXT:        movl    _src+262144(,[[EAX]],4), [[ECX:%e.x]]
4322 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[EDX:%e.x]]
4323 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4324 ; DARWIN-32-STATIC-NEXT:        ret
4325
4326 ; DARWIN-32-DYNAMIC: _big02:
4327 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4328 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
4329 ; DARWIN-32-DYNAMIC-NEXT:       movl    262144([[ECX]],[[EAX]],4), [[ECX:%e.x]]
4330 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ptr$non_lazy_ptr, [[EDX:%e.x]]
4331 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EDX]]), [[EDX:%e.x]]
4332 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4333 ; DARWIN-32-DYNAMIC-NEXT:       ret
4334
4335 ; DARWIN-32-PIC: _big02:
4336 ; DARWIN-32-PIC:        calll   L59$pb
4337 ; DARWIN-32-PIC-NEXT: L59$pb:
4338 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4339 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4340 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L59$pb([[EAX]]), [[EDX:%e.x]]
4341 ; DARWIN-32-PIC-NEXT:   movl    262144([[EDX]],[[ECX]],4), [[EDX:%e.x]]
4342 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L59$pb([[EAX]]), [[EAX:%e.x]]
4343 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
4344 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 262144([[EAX]],[[ECX]],4)
4345 ; DARWIN-32-PIC-NEXT:   ret
4346
4347 ; DARWIN-64-STATIC: _big02:
4348 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4349 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4350 ; DARWIN-64-STATIC-NEXT:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4351 ; DARWIN-64-STATIC-NEXT:        movq    ([[RCX]]), [[RCX:%r.x]]
4352 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4353 ; DARWIN-64-STATIC-NEXT:        ret
4354
4355 ; DARWIN-64-DYNAMIC: _big02:
4356 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4357 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4358 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4359 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RCX]]), [[RCX:%r.x]]
4360 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4361 ; DARWIN-64-DYNAMIC-NEXT:       ret
4362
4363 ; DARWIN-64-PIC: _big02:
4364 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
4365 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4366 ; DARWIN-64-PIC-NEXT:   movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4367 ; DARWIN-64-PIC-NEXT:   movq    ([[RCX]]), [[RCX:%r.x]]
4368 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4369 ; DARWIN-64-PIC-NEXT:   ret
4370 }
4371
4372 define void @big03(i64 %i) nounwind {
4373 entry:
4374         %0 = add i64 %i, 65536
4375         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
4376         %2 = load i32* %1, align 4
4377         %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
4378         store i32 %2, i32* %3, align 4
4379         ret void
4380 ; LINUX-64-STATIC: big03:
4381 ; LINUX-64-STATIC: movl    dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4382 ; LINUX-64-STATIC: movl    [[EAX]], ddst+262144(,%rdi,4)
4383 ; LINUX-64-STATIC: ret
4384
4385 ; LINUX-32-STATIC: big03:
4386 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4387 ; LINUX-32-STATIC-NEXT:         movl    dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4388 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ddst+262144(,[[EAX]],4)
4389 ; LINUX-32-STATIC-NEXT:         ret
4390
4391 ; LINUX-32-PIC: big03:
4392 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4393 ; LINUX-32-PIC-NEXT:    movl    dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4394 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ddst+262144(,[[EAX]],4)
4395 ; LINUX-32-PIC-NEXT:    ret
4396
4397 ; LINUX-64-PIC: big03:
4398 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
4399 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4400 ; LINUX-64-PIC-NEXT:    movq    ddst@GOTPCREL(%rip), [[RCX:%r.x]]
4401 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4402 ; LINUX-64-PIC-NEXT:    ret
4403
4404 ; DARWIN-32-STATIC: _big03:
4405 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4406 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4407 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ddst+262144(,[[EAX]],4)
4408 ; DARWIN-32-STATIC-NEXT:        ret
4409
4410 ; DARWIN-32-DYNAMIC: _big03:
4411 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4412 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4413 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ddst+262144(,[[EAX]],4)
4414 ; DARWIN-32-DYNAMIC-NEXT:       ret
4415
4416 ; DARWIN-32-PIC: _big03:
4417 ; DARWIN-32-PIC:        calll   L60$pb
4418 ; DARWIN-32-PIC-NEXT: L60$pb:
4419 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4420 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4421 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L60$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4422 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], (_ddst-L60$pb)+262144([[EAX]],[[ECX]],4)
4423 ; DARWIN-32-PIC-NEXT:   ret
4424
4425 ; DARWIN-64-STATIC: _big03:
4426 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
4427 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4428 ; DARWIN-64-STATIC-NEXT:        leaq    _ddst(%rip), [[RCX:%r.x]]
4429 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4430 ; DARWIN-64-STATIC-NEXT:        ret
4431
4432 ; DARWIN-64-DYNAMIC: _big03:
4433 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
4434 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4435 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ddst(%rip), [[RCX:%r.x]]
4436 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4437 ; DARWIN-64-DYNAMIC-NEXT:       ret
4438
4439 ; DARWIN-64-PIC: _big03:
4440 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
4441 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4442 ; DARWIN-64-PIC-NEXT:   leaq    _ddst(%rip), [[RCX:%r.x]]
4443 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4444 ; DARWIN-64-PIC-NEXT:   ret
4445 }
4446
4447 define void @big04(i64 %i) nounwind {
4448 entry:
4449         %.sum = add i64 %i, 65536
4450         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
4451         store i32* %0, i32** @dptr, align 8
4452         ret void
4453 ; LINUX-64-STATIC: big04:
4454 ; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), [[RAX:%r.x]]
4455 ; LINUX-64-STATIC: movq    [[RAX]], dptr
4456 ; LINUX-64-STATIC: ret
4457
4458 ; LINUX-32-STATIC: big04:
4459 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4460 ; LINUX-32-STATIC-NEXT:         leal    ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4461 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], dptr
4462 ; LINUX-32-STATIC-NEXT:         ret
4463
4464 ; LINUX-32-PIC: big04:
4465 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4466 ; LINUX-32-PIC-NEXT:    leal    ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4467 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], dptr
4468 ; LINUX-32-PIC-NEXT:    ret
4469
4470 ; LINUX-64-PIC: big04:
4471 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
4472 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4473 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
4474 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], ([[RCX]])
4475 ; LINUX-64-PIC-NEXT:    ret
4476
4477 ; DARWIN-32-STATIC: _big04:
4478 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4479 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4480 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _dptr
4481 ; DARWIN-32-STATIC-NEXT:        ret
4482
4483 ; DARWIN-32-DYNAMIC: _big04:
4484 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4485 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4486 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _dptr
4487 ; DARWIN-32-DYNAMIC-NEXT:       ret
4488
4489 ; DARWIN-32-PIC: _big04:
4490 ; DARWIN-32-PIC:        calll   L61$pb
4491 ; DARWIN-32-PIC-NEXT: L61$pb:
4492 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4493 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4494 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L61$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]]
4495 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _dptr-L61$pb([[EAX]])
4496 ; DARWIN-32-PIC-NEXT:   ret
4497
4498 ; DARWIN-64-STATIC: _big04:
4499 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
4500 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4501 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _dptr(%rip)
4502 ; DARWIN-64-STATIC-NEXT:        ret
4503
4504 ; DARWIN-64-DYNAMIC: _big04:
4505 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
4506 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4507 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _dptr(%rip)
4508 ; DARWIN-64-DYNAMIC-NEXT:       ret
4509
4510 ; DARWIN-64-PIC: _big04:
4511 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
4512 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4513 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _dptr(%rip)
4514 ; DARWIN-64-PIC-NEXT:   ret
4515 }
4516
4517 define void @big05(i64 %i) nounwind {
4518 entry:
4519         %0 = load i32** @dptr, align 8
4520         %1 = add i64 %i, 65536
4521         %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
4522         %3 = load i32* %2, align 4
4523         %4 = getelementptr i32* %0, i64 %1
4524         store i32 %3, i32* %4, align 4
4525         ret void
4526 ; LINUX-64-STATIC: big05:
4527 ; LINUX-64-STATIC: movl    dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4528 ; LINUX-64-STATIC: movq    dptr(%rip), [[RCX:%r.x]]
4529 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4530 ; LINUX-64-STATIC: ret
4531
4532 ; LINUX-32-STATIC: big05:
4533 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4534 ; LINUX-32-STATIC-NEXT:         movl    dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4535 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[EDX:%e.x]]
4536 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4537 ; LINUX-32-STATIC-NEXT:         ret
4538
4539 ; LINUX-32-PIC: big05:
4540 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4541 ; LINUX-32-PIC-NEXT:    movl    dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4542 ; LINUX-32-PIC-NEXT:    movl    dptr, [[EDX:%e.x]]
4543 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4544 ; LINUX-32-PIC-NEXT:    ret
4545
4546 ; LINUX-64-PIC: big05:
4547 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
4548 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4549 ; LINUX-64-PIC-NEXT:    movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
4550 ; LINUX-64-PIC-NEXT:    movq    ([[RCX]]), [[RCX:%r.x]]
4551 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4552 ; LINUX-64-PIC-NEXT:    ret
4553
4554 ; DARWIN-32-STATIC: _big05:
4555 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4556 ; DARWIN-32-STATIC-NEXT:        movl    _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4557 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[EDX:%e.x]]
4558 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4559 ; DARWIN-32-STATIC-NEXT:        ret
4560
4561 ; DARWIN-32-DYNAMIC: _big05:
4562 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4563 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4564 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[EDX:%e.x]]
4565 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4566 ; DARWIN-32-DYNAMIC-NEXT:       ret
4567
4568 ; DARWIN-32-PIC: _big05:
4569 ; DARWIN-32-PIC:        calll   L62$pb
4570 ; DARWIN-32-PIC-NEXT: L62$pb:
4571 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4572 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4573 ; DARWIN-32-PIC-NEXT:   movl    (_dsrc-L62$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4574 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L62$pb([[EAX]]), [[EAX:%e.x]]
4575 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 262144([[EAX]],[[ECX]],4)
4576 ; DARWIN-32-PIC-NEXT:   ret
4577
4578 ; DARWIN-64-STATIC: _big05:
4579 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
4580 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4581 ; DARWIN-64-STATIC-NEXT:        movq    _dptr(%rip), [[RCX:%r.x]]
4582 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4583 ; DARWIN-64-STATIC-NEXT:        ret
4584
4585 ; DARWIN-64-DYNAMIC: _big05:
4586 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
4587 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4588 ; DARWIN-64-DYNAMIC-NEXT:       movq    _dptr(%rip), [[RCX:%r.x]]
4589 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4590 ; DARWIN-64-DYNAMIC-NEXT:       ret
4591
4592 ; DARWIN-64-PIC: _big05:
4593 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
4594 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4595 ; DARWIN-64-PIC-NEXT:   movq    _dptr(%rip), [[RCX:%r.x]]
4596 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4597 ; DARWIN-64-PIC-NEXT:   ret
4598 }
4599
4600 define void @big06(i64 %i) nounwind {
4601 entry:
4602         %0 = add i64 %i, 65536
4603         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
4604         %2 = load i32* %1, align 4
4605         %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
4606         store i32 %2, i32* %3, align 4
4607         ret void
4608 ; LINUX-64-STATIC: big06:
4609 ; LINUX-64-STATIC: movl    lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4610 ; LINUX-64-STATIC: movl    [[EAX]], ldst+262144(,%rdi,4)
4611 ; LINUX-64-STATIC: ret
4612
4613 ; LINUX-32-STATIC: big06:
4614 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4615 ; LINUX-32-STATIC-NEXT:         movl    lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4616 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], ldst+262144(,[[EAX]],4)
4617 ; LINUX-32-STATIC-NEXT:         ret
4618
4619 ; LINUX-32-PIC: big06:
4620 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4621 ; LINUX-32-PIC-NEXT:    movl    lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4622 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], ldst+262144(,[[EAX]],4)
4623 ; LINUX-32-PIC-NEXT:    ret
4624
4625 ; LINUX-64-PIC: big06:
4626 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
4627 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4628 ; LINUX-64-PIC-NEXT:    leaq    ldst(%rip), [[RCX:%r.x]]
4629 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4630 ; LINUX-64-PIC-NEXT:    ret
4631
4632 ; DARWIN-32-STATIC: _big06:
4633 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4634 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4635 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], _ldst+262144(,[[EAX]],4)
4636 ; DARWIN-32-STATIC-NEXT:        ret
4637
4638 ; DARWIN-32-DYNAMIC: _big06:
4639 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4640 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4641 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], _ldst+262144(,[[EAX]],4)
4642 ; DARWIN-32-DYNAMIC-NEXT:       ret
4643
4644 ; DARWIN-32-PIC: _big06:
4645 ; DARWIN-32-PIC:        calll   L63$pb
4646 ; DARWIN-32-PIC-NEXT: L63$pb:
4647 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4648 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4649 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L63$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4650 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], (_ldst-L63$pb)+262144([[EAX]],[[ECX]],4)
4651 ; DARWIN-32-PIC-NEXT:   ret
4652
4653 ; DARWIN-64-STATIC: _big06:
4654 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
4655 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4656 ; DARWIN-64-STATIC-NEXT:        leaq    _ldst(%rip), [[RCX:%r.x]]
4657 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4658 ; DARWIN-64-STATIC-NEXT:        ret
4659
4660 ; DARWIN-64-DYNAMIC: _big06:
4661 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
4662 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4663 ; DARWIN-64-DYNAMIC-NEXT:       leaq    _ldst(%rip), [[RCX:%r.x]]
4664 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4665 ; DARWIN-64-DYNAMIC-NEXT:       ret
4666
4667 ; DARWIN-64-PIC: _big06:
4668 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
4669 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4670 ; DARWIN-64-PIC-NEXT:   leaq    _ldst(%rip), [[RCX:%r.x]]
4671 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4672 ; DARWIN-64-PIC-NEXT:   ret
4673 }
4674
4675 define void @big07(i64 %i) nounwind {
4676 entry:
4677         %.sum = add i64 %i, 65536
4678         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
4679         store i32* %0, i32** @lptr, align 8
4680         ret void
4681 ; LINUX-64-STATIC: big07:
4682 ; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), [[RAX:%r.x]]
4683 ; LINUX-64-STATIC: movq    [[RAX]], lptr
4684 ; LINUX-64-STATIC: ret
4685
4686 ; LINUX-32-STATIC: big07:
4687 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4688 ; LINUX-32-STATIC-NEXT:         leal    ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4689 ; LINUX-32-STATIC-NEXT:         movl    [[EAX]], lptr
4690 ; LINUX-32-STATIC-NEXT:         ret
4691
4692 ; LINUX-32-PIC: big07:
4693 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4694 ; LINUX-32-PIC-NEXT:    leal    ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4695 ; LINUX-32-PIC-NEXT:    movl    [[EAX]], lptr
4696 ; LINUX-32-PIC-NEXT:    ret
4697
4698 ; LINUX-64-PIC: big07:
4699 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
4700 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4701 ; LINUX-64-PIC-NEXT:    movq    [[RAX]], lptr(%rip)
4702 ; LINUX-64-PIC-NEXT:    ret
4703
4704 ; DARWIN-32-STATIC: _big07:
4705 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4706 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4707 ; DARWIN-32-STATIC-NEXT:        movl    [[EAX]], _lptr
4708 ; DARWIN-32-STATIC-NEXT:        ret
4709
4710 ; DARWIN-32-DYNAMIC: _big07:
4711 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4712 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4713 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[EAX]], _lptr
4714 ; DARWIN-32-DYNAMIC-NEXT:       ret
4715
4716 ; DARWIN-32-PIC: _big07:
4717 ; DARWIN-32-PIC:        calll   L64$pb
4718 ; DARWIN-32-PIC-NEXT: L64$pb:
4719 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4720 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4721 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L64$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]]
4722 ; DARWIN-32-PIC-NEXT:   movl    [[ECX]], _lptr-L64$pb([[EAX]])
4723 ; DARWIN-32-PIC-NEXT:   ret
4724
4725 ; DARWIN-64-STATIC: _big07:
4726 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
4727 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4728 ; DARWIN-64-STATIC-NEXT:        movq    [[RAX]], _lptr(%rip)
4729 ; DARWIN-64-STATIC-NEXT:        ret
4730
4731 ; DARWIN-64-DYNAMIC: _big07:
4732 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
4733 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4734 ; DARWIN-64-DYNAMIC-NEXT:       movq    [[RAX]], _lptr(%rip)
4735 ; DARWIN-64-DYNAMIC-NEXT:       ret
4736
4737 ; DARWIN-64-PIC: _big07:
4738 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
4739 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4740 ; DARWIN-64-PIC-NEXT:   movq    [[RAX]], _lptr(%rip)
4741 ; DARWIN-64-PIC-NEXT:   ret
4742 }
4743
4744 define void @big08(i64 %i) nounwind {
4745 entry:
4746         %0 = load i32** @lptr, align 8
4747         %1 = add i64 %i, 65536
4748         %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
4749         %3 = load i32* %2, align 4
4750         %4 = getelementptr i32* %0, i64 %1
4751         store i32 %3, i32* %4, align 4
4752         ret void
4753 ; LINUX-64-STATIC: big08:
4754 ; LINUX-64-STATIC: movl    lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4755 ; LINUX-64-STATIC: movq    lptr(%rip), [[RCX:%r.x]]
4756 ; LINUX-64-STATIC: movl    [[EAX]], 262144([[RCX]],%rdi,4)
4757 ; LINUX-64-STATIC: ret
4758
4759 ; LINUX-32-STATIC: big08:
4760 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
4761 ; LINUX-32-STATIC-NEXT:         movl    lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4762 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[EDX:%e.x]]
4763 ; LINUX-32-STATIC-NEXT:         movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4764 ; LINUX-32-STATIC-NEXT:         ret
4765
4766 ; LINUX-32-PIC: big08:
4767 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
4768 ; LINUX-32-PIC-NEXT:    movl    lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4769 ; LINUX-32-PIC-NEXT:    movl    lptr, [[EDX:%e.x]]
4770 ; LINUX-32-PIC-NEXT:    movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4771 ; LINUX-32-PIC-NEXT:    ret
4772
4773 ; LINUX-64-PIC: big08:
4774 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
4775 ; LINUX-64-PIC-NEXT:    movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4776 ; LINUX-64-PIC-NEXT:    movq    lptr(%rip), [[RCX:%r.x]]
4777 ; LINUX-64-PIC-NEXT:    movl    [[EAX]], 262144([[RCX]],%rdi,4)
4778 ; LINUX-64-PIC-NEXT:    ret
4779
4780 ; DARWIN-32-STATIC: _big08:
4781 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
4782 ; DARWIN-32-STATIC-NEXT:        movl    _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4783 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[EDX:%e.x]]
4784 ; DARWIN-32-STATIC-NEXT:        movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4785 ; DARWIN-32-STATIC-NEXT:        ret
4786
4787 ; DARWIN-32-DYNAMIC: _big08:
4788 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
4789 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4790 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[EDX:%e.x]]
4791 ; DARWIN-32-DYNAMIC-NEXT:       movl    [[ECX]], 262144([[EDX]],[[EAX]],4)
4792 ; DARWIN-32-DYNAMIC-NEXT:       ret
4793
4794 ; DARWIN-32-PIC: _big08:
4795 ; DARWIN-32-PIC:        calll   L65$pb
4796 ; DARWIN-32-PIC-NEXT: L65$pb:
4797 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4798 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
4799 ; DARWIN-32-PIC-NEXT:   movl    (_lsrc-L65$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4800 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L65$pb([[EAX]]), [[EAX:%e.x]]
4801 ; DARWIN-32-PIC-NEXT:   movl    [[EDX]], 262144([[EAX]],[[ECX]],4)
4802 ; DARWIN-32-PIC-NEXT:   ret
4803
4804 ; DARWIN-64-STATIC: _big08:
4805 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
4806 ; DARWIN-64-STATIC-NEXT:        movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4807 ; DARWIN-64-STATIC-NEXT:        movq    _lptr(%rip), [[RCX:%r.x]]
4808 ; DARWIN-64-STATIC-NEXT:        movl    [[EAX]], 262144([[RCX]],%rdi,4)
4809 ; DARWIN-64-STATIC-NEXT:        ret
4810
4811 ; DARWIN-64-DYNAMIC: _big08:
4812 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
4813 ; DARWIN-64-DYNAMIC-NEXT:       movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4814 ; DARWIN-64-DYNAMIC-NEXT:       movq    _lptr(%rip), [[RCX:%r.x]]
4815 ; DARWIN-64-DYNAMIC-NEXT:       movl    [[EAX]], 262144([[RCX]],%rdi,4)
4816 ; DARWIN-64-DYNAMIC-NEXT:       ret
4817
4818 ; DARWIN-64-PIC: _big08:
4819 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
4820 ; DARWIN-64-PIC-NEXT:   movl    262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4821 ; DARWIN-64-PIC-NEXT:   movq    _lptr(%rip), [[RCX:%r.x]]
4822 ; DARWIN-64-PIC-NEXT:   movl    [[EAX]], 262144([[RCX]],%rdi,4)
4823 ; DARWIN-64-PIC-NEXT:   ret
4824 }
4825
4826 define i8* @bar00() nounwind {
4827 entry:
4828         ret i8* bitcast ([131072 x i32]* @src to i8*)
4829 ; LINUX-64-STATIC: bar00:
4830 ; LINUX-64-STATIC: movl    $src, %eax
4831 ; LINUX-64-STATIC: ret
4832
4833 ; LINUX-32-STATIC: bar00:
4834 ; LINUX-32-STATIC:      movl    $src, %eax
4835 ; LINUX-32-STATIC-NEXT:         ret
4836
4837 ; LINUX-32-PIC: bar00:
4838 ; LINUX-32-PIC:         movl    $src, %eax
4839 ; LINUX-32-PIC-NEXT:    ret
4840
4841 ; LINUX-64-PIC: bar00:
4842 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
4843 ; LINUX-64-PIC-NEXT:    ret
4844
4845 ; DARWIN-32-STATIC: _bar00:
4846 ; DARWIN-32-STATIC:     movl    $_src, %eax
4847 ; DARWIN-32-STATIC-NEXT:        ret
4848
4849 ; DARWIN-32-DYNAMIC: _bar00:
4850 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
4851 ; DARWIN-32-DYNAMIC-NEXT:       ret
4852
4853 ; DARWIN-32-PIC: _bar00:
4854 ; DARWIN-32-PIC:        calll   L66$pb
4855 ; DARWIN-32-PIC-NEXT: L66$pb:
4856 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4857 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L66$pb([[EAX]]), %eax
4858 ; DARWIN-32-PIC-NEXT:   ret
4859
4860 ; DARWIN-64-STATIC: _bar00:
4861 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
4862 ; DARWIN-64-STATIC-NEXT:        ret
4863
4864 ; DARWIN-64-DYNAMIC: _bar00:
4865 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
4866 ; DARWIN-64-DYNAMIC-NEXT:       ret
4867
4868 ; DARWIN-64-PIC: _bar00:
4869 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
4870 ; DARWIN-64-PIC-NEXT:   ret
4871 }
4872
4873 define i8* @bxr00() nounwind {
4874 entry:
4875         ret i8* bitcast ([32 x i32]* @xsrc to i8*)
4876 ; LINUX-64-STATIC: bxr00:
4877 ; LINUX-64-STATIC: movl    $xsrc, %eax
4878 ; LINUX-64-STATIC: ret
4879
4880 ; LINUX-32-STATIC: bxr00:
4881 ; LINUX-32-STATIC:      movl    $xsrc, %eax
4882 ; LINUX-32-STATIC-NEXT:         ret
4883
4884 ; LINUX-32-PIC: bxr00:
4885 ; LINUX-32-PIC:         movl    $xsrc, %eax
4886 ; LINUX-32-PIC-NEXT:    ret
4887
4888 ; LINUX-64-PIC: bxr00:
4889 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
4890 ; LINUX-64-PIC-NEXT:    ret
4891
4892 ; DARWIN-32-STATIC: _bxr00:
4893 ; DARWIN-32-STATIC:     movl    $_xsrc, %eax
4894 ; DARWIN-32-STATIC-NEXT:        ret
4895
4896 ; DARWIN-32-DYNAMIC: _bxr00:
4897 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
4898 ; DARWIN-32-DYNAMIC-NEXT:       ret
4899
4900 ; DARWIN-32-PIC: _bxr00:
4901 ; DARWIN-32-PIC:        calll   L67$pb
4902 ; DARWIN-32-PIC-NEXT: L67$pb:
4903 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4904 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L67$pb([[EAX]]), %eax
4905 ; DARWIN-32-PIC-NEXT:   ret
4906
4907 ; DARWIN-64-STATIC: _bxr00:
4908 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
4909 ; DARWIN-64-STATIC-NEXT:        ret
4910
4911 ; DARWIN-64-DYNAMIC: _bxr00:
4912 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
4913 ; DARWIN-64-DYNAMIC-NEXT:       ret
4914
4915 ; DARWIN-64-PIC: _bxr00:
4916 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
4917 ; DARWIN-64-PIC-NEXT:   ret
4918 }
4919
4920 define i8* @bar01() nounwind {
4921 entry:
4922         ret i8* bitcast ([131072 x i32]* @dst to i8*)
4923 ; LINUX-64-STATIC: bar01:
4924 ; LINUX-64-STATIC: movl    $dst, %eax
4925 ; LINUX-64-STATIC: ret
4926
4927 ; LINUX-32-STATIC: bar01:
4928 ; LINUX-32-STATIC:      movl    $dst, %eax
4929 ; LINUX-32-STATIC-NEXT:         ret
4930
4931 ; LINUX-32-PIC: bar01:
4932 ; LINUX-32-PIC:         movl    $dst, %eax
4933 ; LINUX-32-PIC-NEXT:    ret
4934
4935 ; LINUX-64-PIC: bar01:
4936 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
4937 ; LINUX-64-PIC-NEXT:    ret
4938
4939 ; DARWIN-32-STATIC: _bar01:
4940 ; DARWIN-32-STATIC:     movl    $_dst, %eax
4941 ; DARWIN-32-STATIC-NEXT:        ret
4942
4943 ; DARWIN-32-DYNAMIC: _bar01:
4944 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
4945 ; DARWIN-32-DYNAMIC-NEXT:       ret
4946
4947 ; DARWIN-32-PIC: _bar01:
4948 ; DARWIN-32-PIC:        calll   L68$pb
4949 ; DARWIN-32-PIC-NEXT: L68$pb:
4950 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4951 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L68$pb([[EAX]]), %eax
4952 ; DARWIN-32-PIC-NEXT:   ret
4953
4954 ; DARWIN-64-STATIC: _bar01:
4955 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
4956 ; DARWIN-64-STATIC-NEXT:        ret
4957
4958 ; DARWIN-64-DYNAMIC: _bar01:
4959 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
4960 ; DARWIN-64-DYNAMIC-NEXT:       ret
4961
4962 ; DARWIN-64-PIC: _bar01:
4963 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
4964 ; DARWIN-64-PIC-NEXT:   ret
4965 }
4966
4967 define i8* @bxr01() nounwind {
4968 entry:
4969         ret i8* bitcast ([32 x i32]* @xdst to i8*)
4970 ; LINUX-64-STATIC: bxr01:
4971 ; LINUX-64-STATIC: movl    $xdst, %eax
4972 ; LINUX-64-STATIC: ret
4973
4974 ; LINUX-32-STATIC: bxr01:
4975 ; LINUX-32-STATIC:      movl    $xdst, %eax
4976 ; LINUX-32-STATIC-NEXT:         ret
4977
4978 ; LINUX-32-PIC: bxr01:
4979 ; LINUX-32-PIC:         movl    $xdst, %eax
4980 ; LINUX-32-PIC-NEXT:    ret
4981
4982 ; LINUX-64-PIC: bxr01:
4983 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
4984 ; LINUX-64-PIC-NEXT:    ret
4985
4986 ; DARWIN-32-STATIC: _bxr01:
4987 ; DARWIN-32-STATIC:     movl    $_xdst, %eax
4988 ; DARWIN-32-STATIC-NEXT:        ret
4989
4990 ; DARWIN-32-DYNAMIC: _bxr01:
4991 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
4992 ; DARWIN-32-DYNAMIC-NEXT:       ret
4993
4994 ; DARWIN-32-PIC: _bxr01:
4995 ; DARWIN-32-PIC:        calll   L69$pb
4996 ; DARWIN-32-PIC-NEXT: L69$pb:
4997 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
4998 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L69$pb([[EAX]]), %eax
4999 ; DARWIN-32-PIC-NEXT:   ret
5000
5001 ; DARWIN-64-STATIC: _bxr01:
5002 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
5003 ; DARWIN-64-STATIC-NEXT:        ret
5004
5005 ; DARWIN-64-DYNAMIC: _bxr01:
5006 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
5007 ; DARWIN-64-DYNAMIC-NEXT:       ret
5008
5009 ; DARWIN-64-PIC: _bxr01:
5010 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
5011 ; DARWIN-64-PIC-NEXT:   ret
5012 }
5013
5014 define i8* @bar02() nounwind {
5015 entry:
5016         ret i8* bitcast (i32** @ptr to i8*)
5017 ; LINUX-64-STATIC: bar02:
5018 ; LINUX-64-STATIC: movl    $ptr, %eax
5019 ; LINUX-64-STATIC: ret
5020
5021 ; LINUX-32-STATIC: bar02:
5022 ; LINUX-32-STATIC:      movl    $ptr, %eax
5023 ; LINUX-32-STATIC-NEXT:         ret
5024
5025 ; LINUX-32-PIC: bar02:
5026 ; LINUX-32-PIC:         movl    $ptr, %eax
5027 ; LINUX-32-PIC-NEXT:    ret
5028
5029 ; LINUX-64-PIC: bar02:
5030 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), %rax
5031 ; LINUX-64-PIC-NEXT:    ret
5032
5033 ; DARWIN-32-STATIC: _bar02:
5034 ; DARWIN-32-STATIC:     movl    $_ptr, %eax
5035 ; DARWIN-32-STATIC-NEXT:        ret
5036
5037 ; DARWIN-32-DYNAMIC: _bar02:
5038 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, %eax
5039 ; DARWIN-32-DYNAMIC-NEXT:       ret
5040
5041 ; DARWIN-32-PIC: _bar02:
5042 ; DARWIN-32-PIC:        calll   L70$pb
5043 ; DARWIN-32-PIC-NEXT: L70$pb:
5044 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5045 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L70$pb([[EAX]]), %eax
5046 ; DARWIN-32-PIC-NEXT:   ret
5047
5048 ; DARWIN-64-STATIC: _bar02:
5049 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), %rax
5050 ; DARWIN-64-STATIC-NEXT:        ret
5051
5052 ; DARWIN-64-DYNAMIC: _bar02:
5053 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), %rax
5054 ; DARWIN-64-DYNAMIC-NEXT:       ret
5055
5056 ; DARWIN-64-PIC: _bar02:
5057 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), %rax
5058 ; DARWIN-64-PIC-NEXT:   ret
5059 }
5060
5061 define i8* @bar03() nounwind {
5062 entry:
5063         ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
5064 ; LINUX-64-STATIC: bar03:
5065 ; LINUX-64-STATIC: movl    $dsrc, %eax
5066 ; LINUX-64-STATIC: ret
5067
5068 ; LINUX-32-STATIC: bar03:
5069 ; LINUX-32-STATIC:      movl    $dsrc, %eax
5070 ; LINUX-32-STATIC-NEXT:         ret
5071
5072 ; LINUX-32-PIC: bar03:
5073 ; LINUX-32-PIC:         movl    $dsrc, %eax
5074 ; LINUX-32-PIC-NEXT:    ret
5075
5076 ; LINUX-64-PIC: bar03:
5077 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
5078 ; LINUX-64-PIC-NEXT:    ret
5079
5080 ; DARWIN-32-STATIC: _bar03:
5081 ; DARWIN-32-STATIC:     movl    $_dsrc, %eax
5082 ; DARWIN-32-STATIC-NEXT:        ret
5083
5084 ; DARWIN-32-DYNAMIC: _bar03:
5085 ; DARWIN-32-DYNAMIC:    movl    $_dsrc, %eax
5086 ; DARWIN-32-DYNAMIC-NEXT:       ret
5087
5088 ; DARWIN-32-PIC: _bar03:
5089 ; DARWIN-32-PIC:        calll   L71$pb
5090 ; DARWIN-32-PIC-NEXT: L71$pb:
5091 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5092 ; DARWIN-32-PIC-NEXT:   leal    _dsrc-L71$pb([[EAX]]), %eax
5093 ; DARWIN-32-PIC-NEXT:   ret
5094
5095 ; DARWIN-64-STATIC: _bar03:
5096 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
5097 ; DARWIN-64-STATIC-NEXT:        ret
5098
5099 ; DARWIN-64-DYNAMIC: _bar03:
5100 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
5101 ; DARWIN-64-DYNAMIC-NEXT:       ret
5102
5103 ; DARWIN-64-PIC: _bar03:
5104 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
5105 ; DARWIN-64-PIC-NEXT:   ret
5106 }
5107
5108 define i8* @bar04() nounwind {
5109 entry:
5110         ret i8* bitcast ([131072 x i32]* @ddst to i8*)
5111 ; LINUX-64-STATIC: bar04:
5112 ; LINUX-64-STATIC: movl    $ddst, %eax
5113 ; LINUX-64-STATIC: ret
5114
5115 ; LINUX-32-STATIC: bar04:
5116 ; LINUX-32-STATIC:      movl    $ddst, %eax
5117 ; LINUX-32-STATIC-NEXT:         ret
5118
5119 ; LINUX-32-PIC: bar04:
5120 ; LINUX-32-PIC:         movl    $ddst, %eax
5121 ; LINUX-32-PIC-NEXT:    ret
5122
5123 ; LINUX-64-PIC: bar04:
5124 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
5125 ; LINUX-64-PIC-NEXT:    ret
5126
5127 ; DARWIN-32-STATIC: _bar04:
5128 ; DARWIN-32-STATIC:     movl    $_ddst, %eax
5129 ; DARWIN-32-STATIC-NEXT:        ret
5130
5131 ; DARWIN-32-DYNAMIC: _bar04:
5132 ; DARWIN-32-DYNAMIC:    movl    $_ddst, %eax
5133 ; DARWIN-32-DYNAMIC-NEXT:       ret
5134
5135 ; DARWIN-32-PIC: _bar04:
5136 ; DARWIN-32-PIC:        calll   L72$pb
5137 ; DARWIN-32-PIC-NEXT: L72$pb:
5138 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5139 ; DARWIN-32-PIC-NEXT:   leal    _ddst-L72$pb([[EAX]]), %eax
5140 ; DARWIN-32-PIC-NEXT:   ret
5141
5142 ; DARWIN-64-STATIC: _bar04:
5143 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
5144 ; DARWIN-64-STATIC-NEXT:        ret
5145
5146 ; DARWIN-64-DYNAMIC: _bar04:
5147 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
5148 ; DARWIN-64-DYNAMIC-NEXT:       ret
5149
5150 ; DARWIN-64-PIC: _bar04:
5151 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
5152 ; DARWIN-64-PIC-NEXT:   ret
5153 }
5154
5155 define i8* @bar05() nounwind {
5156 entry:
5157         ret i8* bitcast (i32** @dptr to i8*)
5158 ; LINUX-64-STATIC: bar05:
5159 ; LINUX-64-STATIC: movl    $dptr, %eax
5160 ; LINUX-64-STATIC: ret
5161
5162 ; LINUX-32-STATIC: bar05:
5163 ; LINUX-32-STATIC:      movl    $dptr, %eax
5164 ; LINUX-32-STATIC-NEXT:         ret
5165
5166 ; LINUX-32-PIC: bar05:
5167 ; LINUX-32-PIC:         movl    $dptr, %eax
5168 ; LINUX-32-PIC-NEXT:    ret
5169
5170 ; LINUX-64-PIC: bar05:
5171 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), %rax
5172 ; LINUX-64-PIC-NEXT:    ret
5173
5174 ; DARWIN-32-STATIC: _bar05:
5175 ; DARWIN-32-STATIC:     movl    $_dptr, %eax
5176 ; DARWIN-32-STATIC-NEXT:        ret
5177
5178 ; DARWIN-32-DYNAMIC: _bar05:
5179 ; DARWIN-32-DYNAMIC:    movl    $_dptr, %eax
5180 ; DARWIN-32-DYNAMIC-NEXT:       ret
5181
5182 ; DARWIN-32-PIC: _bar05:
5183 ; DARWIN-32-PIC:        calll   L73$pb
5184 ; DARWIN-32-PIC-NEXT: L73$pb:
5185 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5186 ; DARWIN-32-PIC-NEXT:   leal    _dptr-L73$pb([[EAX]]), %eax
5187 ; DARWIN-32-PIC-NEXT:   ret
5188
5189 ; DARWIN-64-STATIC: _bar05:
5190 ; DARWIN-64-STATIC:     leaq    _dptr(%rip), %rax
5191 ; DARWIN-64-STATIC-NEXT:        ret
5192
5193 ; DARWIN-64-DYNAMIC: _bar05:
5194 ; DARWIN-64-DYNAMIC:    leaq    _dptr(%rip), %rax
5195 ; DARWIN-64-DYNAMIC-NEXT:       ret
5196
5197 ; DARWIN-64-PIC: _bar05:
5198 ; DARWIN-64-PIC:        leaq    _dptr(%rip), %rax
5199 ; DARWIN-64-PIC-NEXT:   ret
5200 }
5201
5202 define i8* @bar06() nounwind {
5203 entry:
5204         ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
5205 ; LINUX-64-STATIC: bar06:
5206 ; LINUX-64-STATIC: movl    $lsrc, %eax
5207 ; LINUX-64-STATIC: ret
5208
5209 ; LINUX-32-STATIC: bar06:
5210 ; LINUX-32-STATIC:      movl    $lsrc, %eax
5211 ; LINUX-32-STATIC-NEXT:         ret
5212
5213 ; LINUX-32-PIC: bar06:
5214 ; LINUX-32-PIC:         movl    $lsrc, %eax
5215 ; LINUX-32-PIC-NEXT:    ret
5216
5217 ; LINUX-64-PIC: bar06:
5218 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
5219 ; LINUX-64-PIC-NEXT:    ret
5220
5221 ; DARWIN-32-STATIC: _bar06:
5222 ; DARWIN-32-STATIC:     movl    $_lsrc, %eax
5223 ; DARWIN-32-STATIC-NEXT:        ret
5224
5225 ; DARWIN-32-DYNAMIC: _bar06:
5226 ; DARWIN-32-DYNAMIC:    movl    $_lsrc, %eax
5227 ; DARWIN-32-DYNAMIC-NEXT:       ret
5228
5229 ; DARWIN-32-PIC: _bar06:
5230 ; DARWIN-32-PIC:        calll   L74$pb
5231 ; DARWIN-32-PIC-NEXT: L74$pb:
5232 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5233 ; DARWIN-32-PIC-NEXT:   leal    _lsrc-L74$pb([[EAX]]), %eax
5234 ; DARWIN-32-PIC-NEXT:   ret
5235
5236 ; DARWIN-64-STATIC: _bar06:
5237 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
5238 ; DARWIN-64-STATIC-NEXT:        ret
5239
5240 ; DARWIN-64-DYNAMIC: _bar06:
5241 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
5242 ; DARWIN-64-DYNAMIC-NEXT:       ret
5243
5244 ; DARWIN-64-PIC: _bar06:
5245 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
5246 ; DARWIN-64-PIC-NEXT:   ret
5247 }
5248
5249 define i8* @bar07() nounwind {
5250 entry:
5251         ret i8* bitcast ([131072 x i32]* @ldst to i8*)
5252 ; LINUX-64-STATIC: bar07:
5253 ; LINUX-64-STATIC: movl    $ldst, %eax
5254 ; LINUX-64-STATIC: ret
5255
5256 ; LINUX-32-STATIC: bar07:
5257 ; LINUX-32-STATIC:      movl    $ldst, %eax
5258 ; LINUX-32-STATIC-NEXT:         ret
5259
5260 ; LINUX-32-PIC: bar07:
5261 ; LINUX-32-PIC:         movl    $ldst, %eax
5262 ; LINUX-32-PIC-NEXT:    ret
5263
5264 ; LINUX-64-PIC: bar07:
5265 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
5266 ; LINUX-64-PIC-NEXT:    ret
5267
5268 ; DARWIN-32-STATIC: _bar07:
5269 ; DARWIN-32-STATIC:     movl    $_ldst, %eax
5270 ; DARWIN-32-STATIC-NEXT:        ret
5271
5272 ; DARWIN-32-DYNAMIC: _bar07:
5273 ; DARWIN-32-DYNAMIC:    movl    $_ldst, %eax
5274 ; DARWIN-32-DYNAMIC-NEXT:       ret
5275
5276 ; DARWIN-32-PIC: _bar07:
5277 ; DARWIN-32-PIC:        calll   L75$pb
5278 ; DARWIN-32-PIC-NEXT: L75$pb:
5279 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5280 ; DARWIN-32-PIC-NEXT:   leal    _ldst-L75$pb([[EAX]]), %eax
5281 ; DARWIN-32-PIC-NEXT:   ret
5282
5283 ; DARWIN-64-STATIC: _bar07:
5284 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
5285 ; DARWIN-64-STATIC-NEXT:        ret
5286
5287 ; DARWIN-64-DYNAMIC: _bar07:
5288 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
5289 ; DARWIN-64-DYNAMIC-NEXT:       ret
5290
5291 ; DARWIN-64-PIC: _bar07:
5292 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
5293 ; DARWIN-64-PIC-NEXT:   ret
5294 }
5295
5296 define i8* @bar08() nounwind {
5297 entry:
5298         ret i8* bitcast (i32** @lptr to i8*)
5299 ; LINUX-64-STATIC: bar08:
5300 ; LINUX-64-STATIC: movl    $lptr, %eax
5301 ; LINUX-64-STATIC: ret
5302
5303 ; LINUX-32-STATIC: bar08:
5304 ; LINUX-32-STATIC:      movl    $lptr, %eax
5305 ; LINUX-32-STATIC-NEXT:         ret
5306
5307 ; LINUX-32-PIC: bar08:
5308 ; LINUX-32-PIC:         movl    $lptr, %eax
5309 ; LINUX-32-PIC-NEXT:    ret
5310
5311 ; LINUX-64-PIC: bar08:
5312 ; LINUX-64-PIC:         leaq    lptr(%rip), %rax
5313 ; LINUX-64-PIC-NEXT:    ret
5314
5315 ; DARWIN-32-STATIC: _bar08:
5316 ; DARWIN-32-STATIC:     movl    $_lptr, %eax
5317 ; DARWIN-32-STATIC-NEXT:        ret
5318
5319 ; DARWIN-32-DYNAMIC: _bar08:
5320 ; DARWIN-32-DYNAMIC:    movl    $_lptr, %eax
5321 ; DARWIN-32-DYNAMIC-NEXT:       ret
5322
5323 ; DARWIN-32-PIC: _bar08:
5324 ; DARWIN-32-PIC:        calll   L76$pb
5325 ; DARWIN-32-PIC-NEXT: L76$pb:
5326 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5327 ; DARWIN-32-PIC-NEXT:   leal    _lptr-L76$pb([[EAX]]), %eax
5328 ; DARWIN-32-PIC-NEXT:   ret
5329
5330 ; DARWIN-64-STATIC: _bar08:
5331 ; DARWIN-64-STATIC:     leaq    _lptr(%rip), %rax
5332 ; DARWIN-64-STATIC-NEXT:        ret
5333
5334 ; DARWIN-64-DYNAMIC: _bar08:
5335 ; DARWIN-64-DYNAMIC:    leaq    _lptr(%rip), %rax
5336 ; DARWIN-64-DYNAMIC-NEXT:       ret
5337
5338 ; DARWIN-64-PIC: _bar08:
5339 ; DARWIN-64-PIC:        leaq    _lptr(%rip), %rax
5340 ; DARWIN-64-PIC-NEXT:   ret
5341 }
5342
5343 define i8* @har00() nounwind {
5344 entry:
5345         ret i8* bitcast ([131072 x i32]* @src to i8*)
5346 ; LINUX-64-STATIC: har00:
5347 ; LINUX-64-STATIC: movl    $src, %eax
5348 ; LINUX-64-STATIC: ret
5349
5350 ; LINUX-32-STATIC: har00:
5351 ; LINUX-32-STATIC:      movl    $src, %eax
5352 ; LINUX-32-STATIC-NEXT:         ret
5353
5354 ; LINUX-32-PIC: har00:
5355 ; LINUX-32-PIC:         movl    $src, %eax
5356 ; LINUX-32-PIC-NEXT:    ret
5357
5358 ; LINUX-64-PIC: har00:
5359 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
5360 ; LINUX-64-PIC-NEXT:    ret
5361
5362 ; DARWIN-32-STATIC: _har00:
5363 ; DARWIN-32-STATIC:     movl    $_src, %eax
5364 ; DARWIN-32-STATIC-NEXT:        ret
5365
5366 ; DARWIN-32-DYNAMIC: _har00:
5367 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
5368 ; DARWIN-32-DYNAMIC-NEXT:       ret
5369
5370 ; DARWIN-32-PIC: _har00:
5371 ; DARWIN-32-PIC:        calll   L77$pb
5372 ; DARWIN-32-PIC-NEXT: L77$pb:
5373 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5374 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L77$pb([[EAX]]), %eax
5375 ; DARWIN-32-PIC-NEXT:   ret
5376
5377 ; DARWIN-64-STATIC: _har00:
5378 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
5379 ; DARWIN-64-STATIC-NEXT:        ret
5380
5381 ; DARWIN-64-DYNAMIC: _har00:
5382 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
5383 ; DARWIN-64-DYNAMIC-NEXT:       ret
5384
5385 ; DARWIN-64-PIC: _har00:
5386 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
5387 ; DARWIN-64-PIC-NEXT:   ret
5388 }
5389
5390 define i8* @hxr00() nounwind {
5391 entry:
5392         ret i8* bitcast ([32 x i32]* @xsrc to i8*)
5393 ; LINUX-64-STATIC: hxr00:
5394 ; LINUX-64-STATIC: movl    $xsrc, %eax
5395 ; LINUX-64-STATIC: ret
5396
5397 ; LINUX-32-STATIC: hxr00:
5398 ; LINUX-32-STATIC:      movl    $xsrc, %eax
5399 ; LINUX-32-STATIC-NEXT:         ret
5400
5401 ; LINUX-32-PIC: hxr00:
5402 ; LINUX-32-PIC:         movl    $xsrc, %eax
5403 ; LINUX-32-PIC-NEXT:    ret
5404
5405 ; LINUX-64-PIC: hxr00:
5406 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
5407 ; LINUX-64-PIC-NEXT:    ret
5408
5409 ; DARWIN-32-STATIC: _hxr00:
5410 ; DARWIN-32-STATIC:     movl    $_xsrc, %eax
5411 ; DARWIN-32-STATIC-NEXT:        ret
5412
5413 ; DARWIN-32-DYNAMIC: _hxr00:
5414 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
5415 ; DARWIN-32-DYNAMIC-NEXT:       ret
5416
5417 ; DARWIN-32-PIC: _hxr00:
5418 ; DARWIN-32-PIC:        calll   L78$pb
5419 ; DARWIN-32-PIC-NEXT: L78$pb:
5420 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5421 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L78$pb([[EAX]]), %eax
5422 ; DARWIN-32-PIC-NEXT:   ret
5423
5424 ; DARWIN-64-STATIC: _hxr00:
5425 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
5426 ; DARWIN-64-STATIC-NEXT:        ret
5427
5428 ; DARWIN-64-DYNAMIC: _hxr00:
5429 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
5430 ; DARWIN-64-DYNAMIC-NEXT:       ret
5431
5432 ; DARWIN-64-PIC: _hxr00:
5433 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
5434 ; DARWIN-64-PIC-NEXT:   ret
5435 }
5436
5437 define i8* @har01() nounwind {
5438 entry:
5439         ret i8* bitcast ([131072 x i32]* @dst to i8*)
5440 ; LINUX-64-STATIC: har01:
5441 ; LINUX-64-STATIC: movl    $dst, %eax
5442 ; LINUX-64-STATIC: ret
5443
5444 ; LINUX-32-STATIC: har01:
5445 ; LINUX-32-STATIC:      movl    $dst, %eax
5446 ; LINUX-32-STATIC-NEXT:         ret
5447
5448 ; LINUX-32-PIC: har01:
5449 ; LINUX-32-PIC:         movl    $dst, %eax
5450 ; LINUX-32-PIC-NEXT:    ret
5451
5452 ; LINUX-64-PIC: har01:
5453 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
5454 ; LINUX-64-PIC-NEXT:    ret
5455
5456 ; DARWIN-32-STATIC: _har01:
5457 ; DARWIN-32-STATIC:     movl    $_dst, %eax
5458 ; DARWIN-32-STATIC-NEXT:        ret
5459
5460 ; DARWIN-32-DYNAMIC: _har01:
5461 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
5462 ; DARWIN-32-DYNAMIC-NEXT:       ret
5463
5464 ; DARWIN-32-PIC: _har01:
5465 ; DARWIN-32-PIC:        calll   L79$pb
5466 ; DARWIN-32-PIC-NEXT: L79$pb:
5467 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5468 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L79$pb([[EAX]]), %eax
5469 ; DARWIN-32-PIC-NEXT:   ret
5470
5471 ; DARWIN-64-STATIC: _har01:
5472 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
5473 ; DARWIN-64-STATIC-NEXT:        ret
5474
5475 ; DARWIN-64-DYNAMIC: _har01:
5476 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
5477 ; DARWIN-64-DYNAMIC-NEXT:       ret
5478
5479 ; DARWIN-64-PIC: _har01:
5480 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
5481 ; DARWIN-64-PIC-NEXT:   ret
5482 }
5483
5484 define i8* @hxr01() nounwind {
5485 entry:
5486         ret i8* bitcast ([32 x i32]* @xdst to i8*)
5487 ; LINUX-64-STATIC: hxr01:
5488 ; LINUX-64-STATIC: movl    $xdst, %eax
5489 ; LINUX-64-STATIC: ret
5490
5491 ; LINUX-32-STATIC: hxr01:
5492 ; LINUX-32-STATIC:      movl    $xdst, %eax
5493 ; LINUX-32-STATIC-NEXT:         ret
5494
5495 ; LINUX-32-PIC: hxr01:
5496 ; LINUX-32-PIC:         movl    $xdst, %eax
5497 ; LINUX-32-PIC-NEXT:    ret
5498
5499 ; LINUX-64-PIC: hxr01:
5500 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
5501 ; LINUX-64-PIC-NEXT:    ret
5502
5503 ; DARWIN-32-STATIC: _hxr01:
5504 ; DARWIN-32-STATIC:     movl    $_xdst, %eax
5505 ; DARWIN-32-STATIC-NEXT:        ret
5506
5507 ; DARWIN-32-DYNAMIC: _hxr01:
5508 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
5509 ; DARWIN-32-DYNAMIC-NEXT:       ret
5510
5511 ; DARWIN-32-PIC: _hxr01:
5512 ; DARWIN-32-PIC:        calll   L80$pb
5513 ; DARWIN-32-PIC-NEXT: L80$pb:
5514 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5515 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L80$pb([[EAX]]), %eax
5516 ; DARWIN-32-PIC-NEXT:   ret
5517
5518 ; DARWIN-64-STATIC: _hxr01:
5519 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
5520 ; DARWIN-64-STATIC-NEXT:        ret
5521
5522 ; DARWIN-64-DYNAMIC: _hxr01:
5523 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
5524 ; DARWIN-64-DYNAMIC-NEXT:       ret
5525
5526 ; DARWIN-64-PIC: _hxr01:
5527 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
5528 ; DARWIN-64-PIC-NEXT:   ret
5529 }
5530
5531 define i8* @har02() nounwind {
5532 entry:
5533         %0 = load i32** @ptr, align 8
5534         %1 = bitcast i32* %0 to i8*
5535         ret i8* %1
5536 ; LINUX-64-STATIC: har02:
5537 ; LINUX-64-STATIC: movq    ptr(%rip), %rax
5538 ; LINUX-64-STATIC: ret
5539
5540 ; LINUX-32-STATIC: har02:
5541 ; LINUX-32-STATIC:      movl    ptr, %eax
5542 ; LINUX-32-STATIC-NEXT:         ret
5543
5544 ; LINUX-32-PIC: har02:
5545 ; LINUX-32-PIC:         movl    ptr, %eax
5546 ; LINUX-32-PIC-NEXT:    ret
5547
5548 ; LINUX-64-PIC: har02:
5549 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5550 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), %rax
5551 ; LINUX-64-PIC-NEXT:    ret
5552
5553 ; DARWIN-32-STATIC: _har02:
5554 ; DARWIN-32-STATIC:     movl    _ptr, %eax
5555 ; DARWIN-32-STATIC-NEXT:        ret
5556
5557 ; DARWIN-32-DYNAMIC: _har02:
5558 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[EAX:%e.x]]
5559 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), %eax
5560 ; DARWIN-32-DYNAMIC-NEXT:       ret
5561
5562 ; DARWIN-32-PIC: _har02:
5563 ; DARWIN-32-PIC:        calll   L81$pb
5564 ; DARWIN-32-PIC-NEXT: L81$pb:
5565 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5566 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L81$pb([[EAX]]), [[EAX:%e.x]]
5567 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), %eax
5568 ; DARWIN-32-PIC-NEXT:   ret
5569
5570 ; DARWIN-64-STATIC: _har02:
5571 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5572 ; DARWIN-64-STATIC-NEXT:        movq    ([[RAX]]), %rax
5573 ; DARWIN-64-STATIC-NEXT:        ret
5574
5575 ; DARWIN-64-DYNAMIC: _har02:
5576 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5577 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RAX]]), %rax
5578 ; DARWIN-64-DYNAMIC-NEXT:       ret
5579
5580 ; DARWIN-64-PIC: _har02:
5581 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5582 ; DARWIN-64-PIC-NEXT:   movq    ([[RAX]]), %rax
5583 ; DARWIN-64-PIC-NEXT:   ret
5584 }
5585
5586 define i8* @har03() nounwind {
5587 entry:
5588         ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
5589 ; LINUX-64-STATIC: har03:
5590 ; LINUX-64-STATIC: movl    $dsrc, %eax
5591 ; LINUX-64-STATIC: ret
5592
5593 ; LINUX-32-STATIC: har03:
5594 ; LINUX-32-STATIC:      movl    $dsrc, %eax
5595 ; LINUX-32-STATIC-NEXT:         ret
5596
5597 ; LINUX-32-PIC: har03:
5598 ; LINUX-32-PIC:         movl    $dsrc, %eax
5599 ; LINUX-32-PIC-NEXT:    ret
5600
5601 ; LINUX-64-PIC: har03:
5602 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
5603 ; LINUX-64-PIC-NEXT:    ret
5604
5605 ; DARWIN-32-STATIC: _har03:
5606 ; DARWIN-32-STATIC:     movl    $_dsrc, %eax
5607 ; DARWIN-32-STATIC-NEXT:        ret
5608
5609 ; DARWIN-32-DYNAMIC: _har03:
5610 ; DARWIN-32-DYNAMIC:    movl    $_dsrc, %eax
5611 ; DARWIN-32-DYNAMIC-NEXT:       ret
5612
5613 ; DARWIN-32-PIC: _har03:
5614 ; DARWIN-32-PIC:        calll   L82$pb
5615 ; DARWIN-32-PIC-NEXT: L82$pb:
5616 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5617 ; DARWIN-32-PIC-NEXT:   leal    _dsrc-L82$pb([[EAX]]), %eax
5618 ; DARWIN-32-PIC-NEXT:   ret
5619
5620 ; DARWIN-64-STATIC: _har03:
5621 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), %rax
5622 ; DARWIN-64-STATIC-NEXT:        ret
5623
5624 ; DARWIN-64-DYNAMIC: _har03:
5625 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), %rax
5626 ; DARWIN-64-DYNAMIC-NEXT:       ret
5627
5628 ; DARWIN-64-PIC: _har03:
5629 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), %rax
5630 ; DARWIN-64-PIC-NEXT:   ret
5631 }
5632
5633 define i8* @har04() nounwind {
5634 entry:
5635         ret i8* bitcast ([131072 x i32]* @ddst to i8*)
5636 ; LINUX-64-STATIC: har04:
5637 ; LINUX-64-STATIC: movl    $ddst, %eax
5638 ; LINUX-64-STATIC: ret
5639
5640 ; LINUX-32-STATIC: har04:
5641 ; LINUX-32-STATIC:      movl    $ddst, %eax
5642 ; LINUX-32-STATIC-NEXT:         ret
5643
5644 ; LINUX-32-PIC: har04:
5645 ; LINUX-32-PIC:         movl    $ddst, %eax
5646 ; LINUX-32-PIC-NEXT:    ret
5647
5648 ; LINUX-64-PIC: har04:
5649 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
5650 ; LINUX-64-PIC-NEXT:    ret
5651
5652 ; DARWIN-32-STATIC: _har04:
5653 ; DARWIN-32-STATIC:     movl    $_ddst, %eax
5654 ; DARWIN-32-STATIC-NEXT:        ret
5655
5656 ; DARWIN-32-DYNAMIC: _har04:
5657 ; DARWIN-32-DYNAMIC:    movl    $_ddst, %eax
5658 ; DARWIN-32-DYNAMIC-NEXT:       ret
5659
5660 ; DARWIN-32-PIC: _har04:
5661 ; DARWIN-32-PIC:        calll   L83$pb
5662 ; DARWIN-32-PIC-NEXT: L83$pb:
5663 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5664 ; DARWIN-32-PIC-NEXT:   leal    _ddst-L83$pb([[EAX]]), %eax
5665 ; DARWIN-32-PIC-NEXT:   ret
5666
5667 ; DARWIN-64-STATIC: _har04:
5668 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), %rax
5669 ; DARWIN-64-STATIC-NEXT:        ret
5670
5671 ; DARWIN-64-DYNAMIC: _har04:
5672 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), %rax
5673 ; DARWIN-64-DYNAMIC-NEXT:       ret
5674
5675 ; DARWIN-64-PIC: _har04:
5676 ; DARWIN-64-PIC:        leaq    _ddst(%rip), %rax
5677 ; DARWIN-64-PIC-NEXT:   ret
5678 }
5679
5680 define i8* @har05() nounwind {
5681 entry:
5682         %0 = load i32** @dptr, align 8
5683         %1 = bitcast i32* %0 to i8*
5684         ret i8* %1
5685 ; LINUX-64-STATIC: har05:
5686 ; LINUX-64-STATIC: movq    dptr(%rip), %rax
5687 ; LINUX-64-STATIC: ret
5688
5689 ; LINUX-32-STATIC: har05:
5690 ; LINUX-32-STATIC:      movl    dptr, %eax
5691 ; LINUX-32-STATIC-NEXT:         ret
5692
5693 ; LINUX-32-PIC: har05:
5694 ; LINUX-32-PIC:         movl    dptr, %eax
5695 ; LINUX-32-PIC-NEXT:    ret
5696
5697 ; LINUX-64-PIC: har05:
5698 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
5699 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), %rax
5700 ; LINUX-64-PIC-NEXT:    ret
5701
5702 ; DARWIN-32-STATIC: _har05:
5703 ; DARWIN-32-STATIC:     movl    _dptr, %eax
5704 ; DARWIN-32-STATIC-NEXT:        ret
5705
5706 ; DARWIN-32-DYNAMIC: _har05:
5707 ; DARWIN-32-DYNAMIC:    movl    _dptr, %eax
5708 ; DARWIN-32-DYNAMIC-NEXT:       ret
5709
5710 ; DARWIN-32-PIC: _har05:
5711 ; DARWIN-32-PIC:        calll   L84$pb
5712 ; DARWIN-32-PIC-NEXT: L84$pb:
5713 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5714 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L84$pb([[EAX]]), %eax
5715 ; DARWIN-32-PIC-NEXT:   ret
5716
5717 ; DARWIN-64-STATIC: _har05:
5718 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
5719 ; DARWIN-64-STATIC-NEXT:        ret
5720
5721 ; DARWIN-64-DYNAMIC: _har05:
5722 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
5723 ; DARWIN-64-DYNAMIC-NEXT:       ret
5724
5725 ; DARWIN-64-PIC: _har05:
5726 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
5727 ; DARWIN-64-PIC-NEXT:   ret
5728 }
5729
5730 define i8* @har06() nounwind {
5731 entry:
5732         ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
5733 ; LINUX-64-STATIC: har06:
5734 ; LINUX-64-STATIC: movl    $lsrc, %eax
5735 ; LINUX-64-STATIC: ret
5736
5737 ; LINUX-32-STATIC: har06:
5738 ; LINUX-32-STATIC:      movl    $lsrc, %eax
5739 ; LINUX-32-STATIC-NEXT:         ret
5740
5741 ; LINUX-32-PIC: har06:
5742 ; LINUX-32-PIC:         movl    $lsrc, %eax
5743 ; LINUX-32-PIC-NEXT:    ret
5744
5745 ; LINUX-64-PIC: har06:
5746 ; LINUX-64-PIC:         leaq    lsrc(%rip), %rax
5747 ; LINUX-64-PIC-NEXT:    ret
5748
5749 ; DARWIN-32-STATIC: _har06:
5750 ; DARWIN-32-STATIC:     movl    $_lsrc, %eax
5751 ; DARWIN-32-STATIC-NEXT:        ret
5752
5753 ; DARWIN-32-DYNAMIC: _har06:
5754 ; DARWIN-32-DYNAMIC:    movl    $_lsrc, %eax
5755 ; DARWIN-32-DYNAMIC-NEXT:       ret
5756
5757 ; DARWIN-32-PIC: _har06:
5758 ; DARWIN-32-PIC:        calll   L85$pb
5759 ; DARWIN-32-PIC-NEXT: L85$pb:
5760 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5761 ; DARWIN-32-PIC-NEXT:   leal    _lsrc-L85$pb([[EAX]]), %eax
5762 ; DARWIN-32-PIC-NEXT:   ret
5763
5764 ; DARWIN-64-STATIC: _har06:
5765 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), %rax
5766 ; DARWIN-64-STATIC-NEXT:        ret
5767
5768 ; DARWIN-64-DYNAMIC: _har06:
5769 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), %rax
5770 ; DARWIN-64-DYNAMIC-NEXT:       ret
5771
5772 ; DARWIN-64-PIC: _har06:
5773 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), %rax
5774 ; DARWIN-64-PIC-NEXT:   ret
5775 }
5776
5777 define i8* @har07() nounwind {
5778 entry:
5779         ret i8* bitcast ([131072 x i32]* @ldst to i8*)
5780 ; LINUX-64-STATIC: har07:
5781 ; LINUX-64-STATIC: movl    $ldst, %eax
5782 ; LINUX-64-STATIC: ret
5783
5784 ; LINUX-32-STATIC: har07:
5785 ; LINUX-32-STATIC:      movl    $ldst, %eax
5786 ; LINUX-32-STATIC-NEXT:         ret
5787
5788 ; LINUX-32-PIC: har07:
5789 ; LINUX-32-PIC:         movl    $ldst, %eax
5790 ; LINUX-32-PIC-NEXT:    ret
5791
5792 ; LINUX-64-PIC: har07:
5793 ; LINUX-64-PIC:         leaq    ldst(%rip), %rax
5794 ; LINUX-64-PIC-NEXT:    ret
5795
5796 ; DARWIN-32-STATIC: _har07:
5797 ; DARWIN-32-STATIC:     movl    $_ldst, %eax
5798 ; DARWIN-32-STATIC-NEXT:        ret
5799
5800 ; DARWIN-32-DYNAMIC: _har07:
5801 ; DARWIN-32-DYNAMIC:    movl    $_ldst, %eax
5802 ; DARWIN-32-DYNAMIC-NEXT:       ret
5803
5804 ; DARWIN-32-PIC: _har07:
5805 ; DARWIN-32-PIC:        calll   L86$pb
5806 ; DARWIN-32-PIC-NEXT: L86$pb:
5807 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5808 ; DARWIN-32-PIC-NEXT:   leal    _ldst-L86$pb([[EAX]]), %eax
5809 ; DARWIN-32-PIC-NEXT:   ret
5810
5811 ; DARWIN-64-STATIC: _har07:
5812 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), %rax
5813 ; DARWIN-64-STATIC-NEXT:        ret
5814
5815 ; DARWIN-64-DYNAMIC: _har07:
5816 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), %rax
5817 ; DARWIN-64-DYNAMIC-NEXT:       ret
5818
5819 ; DARWIN-64-PIC: _har07:
5820 ; DARWIN-64-PIC:        leaq    _ldst(%rip), %rax
5821 ; DARWIN-64-PIC-NEXT:   ret
5822 }
5823
5824 define i8* @har08() nounwind {
5825 entry:
5826         %0 = load i32** @lptr, align 8
5827         %1 = bitcast i32* %0 to i8*
5828         ret i8* %1
5829 ; LINUX-64-STATIC: har08:
5830 ; LINUX-64-STATIC: movq    lptr(%rip), %rax
5831 ; LINUX-64-STATIC: ret
5832
5833 ; LINUX-32-STATIC: har08:
5834 ; LINUX-32-STATIC:      movl    lptr, %eax
5835 ; LINUX-32-STATIC-NEXT:         ret
5836
5837 ; LINUX-32-PIC: har08:
5838 ; LINUX-32-PIC:         movl    lptr, %eax
5839 ; LINUX-32-PIC-NEXT:    ret
5840
5841 ; LINUX-64-PIC: har08:
5842 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
5843 ; LINUX-64-PIC-NEXT:    ret
5844
5845 ; DARWIN-32-STATIC: _har08:
5846 ; DARWIN-32-STATIC:     movl    _lptr, %eax
5847 ; DARWIN-32-STATIC-NEXT:        ret
5848
5849 ; DARWIN-32-DYNAMIC: _har08:
5850 ; DARWIN-32-DYNAMIC:    movl    _lptr, %eax
5851 ; DARWIN-32-DYNAMIC-NEXT:       ret
5852
5853 ; DARWIN-32-PIC: _har08:
5854 ; DARWIN-32-PIC:        calll   L87$pb
5855 ; DARWIN-32-PIC-NEXT: L87$pb:
5856 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5857 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L87$pb([[EAX]]), %eax
5858 ; DARWIN-32-PIC-NEXT:   ret
5859
5860 ; DARWIN-64-STATIC: _har08:
5861 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
5862 ; DARWIN-64-STATIC-NEXT:        ret
5863
5864 ; DARWIN-64-DYNAMIC: _har08:
5865 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
5866 ; DARWIN-64-DYNAMIC-NEXT:       ret
5867
5868 ; DARWIN-64-PIC: _har08:
5869 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
5870 ; DARWIN-64-PIC-NEXT:   ret
5871 }
5872
5873 define i8* @bat00() nounwind {
5874 entry:
5875         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
5876 ; LINUX-64-STATIC: bat00:
5877 ; LINUX-64-STATIC: movl    $src+64, %eax
5878 ; LINUX-64-STATIC: ret
5879
5880 ; LINUX-32-STATIC: bat00:
5881 ; LINUX-32-STATIC:      movl    $src+64, %eax
5882 ; LINUX-32-STATIC-NEXT:         ret
5883
5884 ; LINUX-32-PIC: bat00:
5885 ; LINUX-32-PIC:         movl    $src+64, %eax
5886 ; LINUX-32-PIC-NEXT:    ret
5887
5888 ; LINUX-64-PIC: bat00:
5889 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), %rax
5890 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5891 ; LINUX-64-PIC-NEXT:    ret
5892
5893 ; DARWIN-32-STATIC: _bat00:
5894 ; DARWIN-32-STATIC:     movl    $_src+64, %eax
5895 ; DARWIN-32-STATIC-NEXT:        ret
5896
5897 ; DARWIN-32-DYNAMIC: _bat00:
5898 ; DARWIN-32-DYNAMIC:    movl    L_src$non_lazy_ptr, %eax
5899 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
5900 ; DARWIN-32-DYNAMIC-NEXT:       ret
5901
5902 ; DARWIN-32-PIC: _bat00:
5903 ; DARWIN-32-PIC:        calll   L88$pb
5904 ; DARWIN-32-PIC-NEXT: L88$pb:
5905 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5906 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L88$pb([[EAX]]), %eax
5907 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
5908 ; DARWIN-32-PIC-NEXT:   ret
5909
5910 ; DARWIN-64-STATIC: _bat00:
5911 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), %rax
5912 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
5913 ; DARWIN-64-STATIC-NEXT:        ret
5914
5915 ; DARWIN-64-DYNAMIC: _bat00:
5916 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), %rax
5917 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
5918 ; DARWIN-64-DYNAMIC-NEXT:       ret
5919
5920 ; DARWIN-64-PIC: _bat00:
5921 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), %rax
5922 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
5923 ; DARWIN-64-PIC-NEXT:   ret
5924 }
5925
5926 define i8* @bxt00() nounwind {
5927 entry:
5928         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
5929 ; LINUX-64-STATIC: bxt00:
5930 ; LINUX-64-STATIC: movl    $xsrc+64, %eax
5931 ; LINUX-64-STATIC: ret
5932
5933 ; LINUX-32-STATIC: bxt00:
5934 ; LINUX-32-STATIC:      movl    $xsrc+64, %eax
5935 ; LINUX-32-STATIC-NEXT:         ret
5936
5937 ; LINUX-32-PIC: bxt00:
5938 ; LINUX-32-PIC:         movl    $xsrc+64, %eax
5939 ; LINUX-32-PIC-NEXT:    ret
5940
5941 ; LINUX-64-PIC: bxt00:
5942 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), %rax
5943 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5944 ; LINUX-64-PIC-NEXT:    ret
5945
5946 ; DARWIN-32-STATIC: _bxt00:
5947 ; DARWIN-32-STATIC:     movl    $_xsrc+64, %eax
5948 ; DARWIN-32-STATIC-NEXT:        ret
5949
5950 ; DARWIN-32-DYNAMIC: _bxt00:
5951 ; DARWIN-32-DYNAMIC:    movl    L_xsrc$non_lazy_ptr, %eax
5952 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
5953 ; DARWIN-32-DYNAMIC-NEXT:       ret
5954
5955 ; DARWIN-32-PIC: _bxt00:
5956 ; DARWIN-32-PIC:        calll   L89$pb
5957 ; DARWIN-32-PIC-NEXT: L89$pb:
5958 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
5959 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L89$pb([[EAX]]), %eax
5960 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
5961 ; DARWIN-32-PIC-NEXT:   ret
5962
5963 ; DARWIN-64-STATIC: _bxt00:
5964 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), %rax
5965 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
5966 ; DARWIN-64-STATIC-NEXT:        ret
5967
5968 ; DARWIN-64-DYNAMIC: _bxt00:
5969 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), %rax
5970 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
5971 ; DARWIN-64-DYNAMIC-NEXT:       ret
5972
5973 ; DARWIN-64-PIC: _bxt00:
5974 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), %rax
5975 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
5976 ; DARWIN-64-PIC-NEXT:   ret
5977 }
5978
5979 define i8* @bat01() nounwind {
5980 entry:
5981         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
5982 ; LINUX-64-STATIC: bat01:
5983 ; LINUX-64-STATIC: movl    $dst+64, %eax
5984 ; LINUX-64-STATIC: ret
5985
5986 ; LINUX-32-STATIC: bat01:
5987 ; LINUX-32-STATIC:      movl    $dst+64, %eax
5988 ; LINUX-32-STATIC-NEXT:         ret
5989
5990 ; LINUX-32-PIC: bat01:
5991 ; LINUX-32-PIC:         movl    $dst+64, %eax
5992 ; LINUX-32-PIC-NEXT:    ret
5993
5994 ; LINUX-64-PIC: bat01:
5995 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), %rax
5996 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
5997 ; LINUX-64-PIC-NEXT:    ret
5998
5999 ; DARWIN-32-STATIC: _bat01:
6000 ; DARWIN-32-STATIC:     movl    $_dst+64, %eax
6001 ; DARWIN-32-STATIC-NEXT:        ret
6002
6003 ; DARWIN-32-DYNAMIC: _bat01:
6004 ; DARWIN-32-DYNAMIC:    movl    L_dst$non_lazy_ptr, %eax
6005 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6006 ; DARWIN-32-DYNAMIC-NEXT:       ret
6007
6008 ; DARWIN-32-PIC: _bat01:
6009 ; DARWIN-32-PIC:        calll   L90$pb
6010 ; DARWIN-32-PIC-NEXT: L90$pb:
6011 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6012 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L90$pb([[EAX]]), %eax
6013 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6014 ; DARWIN-32-PIC-NEXT:   ret
6015
6016 ; DARWIN-64-STATIC: _bat01:
6017 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), %rax
6018 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6019 ; DARWIN-64-STATIC-NEXT:        ret
6020
6021 ; DARWIN-64-DYNAMIC: _bat01:
6022 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), %rax
6023 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6024 ; DARWIN-64-DYNAMIC-NEXT:       ret
6025
6026 ; DARWIN-64-PIC: _bat01:
6027 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), %rax
6028 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6029 ; DARWIN-64-PIC-NEXT:   ret
6030 }
6031
6032 define i8* @bxt01() nounwind {
6033 entry:
6034         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
6035 ; LINUX-64-STATIC: bxt01:
6036 ; LINUX-64-STATIC: movl    $xdst+64, %eax
6037 ; LINUX-64-STATIC: ret
6038
6039 ; LINUX-32-STATIC: bxt01:
6040 ; LINUX-32-STATIC:      movl    $xdst+64, %eax
6041 ; LINUX-32-STATIC-NEXT:         ret
6042
6043 ; LINUX-32-PIC: bxt01:
6044 ; LINUX-32-PIC:         movl    $xdst+64, %eax
6045 ; LINUX-32-PIC-NEXT:    ret
6046
6047 ; LINUX-64-PIC: bxt01:
6048 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), %rax
6049 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6050 ; LINUX-64-PIC-NEXT:    ret
6051
6052 ; DARWIN-32-STATIC: _bxt01:
6053 ; DARWIN-32-STATIC:     movl    $_xdst+64, %eax
6054 ; DARWIN-32-STATIC-NEXT:        ret
6055
6056 ; DARWIN-32-DYNAMIC: _bxt01:
6057 ; DARWIN-32-DYNAMIC:    movl    L_xdst$non_lazy_ptr, %eax
6058 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6059 ; DARWIN-32-DYNAMIC-NEXT:       ret
6060
6061 ; DARWIN-32-PIC: _bxt01:
6062 ; DARWIN-32-PIC:        calll   L91$pb
6063 ; DARWIN-32-PIC-NEXT: L91$pb:
6064 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6065 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L91$pb([[EAX]]), %eax
6066 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6067 ; DARWIN-32-PIC-NEXT:   ret
6068
6069 ; DARWIN-64-STATIC: _bxt01:
6070 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), %rax
6071 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6072 ; DARWIN-64-STATIC-NEXT:        ret
6073
6074 ; DARWIN-64-DYNAMIC: _bxt01:
6075 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), %rax
6076 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6077 ; DARWIN-64-DYNAMIC-NEXT:       ret
6078
6079 ; DARWIN-64-PIC: _bxt01:
6080 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), %rax
6081 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6082 ; DARWIN-64-PIC-NEXT:   ret
6083 }
6084
6085 define i8* @bat02() nounwind {
6086 entry:
6087         %0 = load i32** @ptr, align 8
6088         %1 = getelementptr i32* %0, i64 16
6089         %2 = bitcast i32* %1 to i8*
6090         ret i8* %2
6091 ; LINUX-64-STATIC: bat02:
6092 ; LINUX-64-STATIC: movq    ptr(%rip), %rax
6093 ; LINUX-64-STATIC: addq    $64, %rax
6094 ; LINUX-64-STATIC: ret
6095
6096 ; LINUX-32-STATIC: bat02:
6097 ; LINUX-32-STATIC:      movl    ptr, %eax
6098 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6099 ; LINUX-32-STATIC-NEXT:         ret
6100
6101 ; LINUX-32-PIC: bat02:
6102 ; LINUX-32-PIC:         movl    ptr, %eax
6103 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6104 ; LINUX-32-PIC-NEXT:    ret
6105
6106 ; LINUX-64-PIC: bat02:
6107 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6108 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), %rax
6109 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6110 ; LINUX-64-PIC-NEXT:    ret
6111
6112 ; DARWIN-32-STATIC: _bat02:
6113 ; DARWIN-32-STATIC:     movl    _ptr, %eax
6114 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6115 ; DARWIN-32-STATIC-NEXT:        ret
6116
6117 ; DARWIN-32-DYNAMIC: _bat02:
6118 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[EAX:%e.x]]
6119 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
6120 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6121 ; DARWIN-32-DYNAMIC-NEXT:       ret
6122
6123 ; DARWIN-32-PIC: _bat02:
6124 ; DARWIN-32-PIC:        calll   L92$pb
6125 ; DARWIN-32-PIC-NEXT: L92$pb:
6126 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6127 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L92$pb([[EAX]]), [[EAX:%e.x]]
6128 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), %eax
6129 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6130 ; DARWIN-32-PIC-NEXT:   ret
6131
6132 ; DARWIN-64-STATIC: _bat02:
6133 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6134 ; DARWIN-64-STATIC-NEXT:        movq    ([[RAX]]), %rax
6135 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6136 ; DARWIN-64-STATIC-NEXT:        ret
6137
6138 ; DARWIN-64-DYNAMIC: _bat02:
6139 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6140 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RAX]]), [[RAX:%r.x]]
6141 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6142 ; DARWIN-64-DYNAMIC-NEXT:       ret
6143
6144 ; DARWIN-64-PIC: _bat02:
6145 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6146 ; DARWIN-64-PIC-NEXT:   movq    ([[RAX]]), %rax
6147 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6148 ; DARWIN-64-PIC-NEXT:   ret
6149 }
6150
6151 define i8* @bat03() nounwind {
6152 entry:
6153         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
6154 ; LINUX-64-STATIC: bat03:
6155 ; LINUX-64-STATIC: movl    $dsrc+64, %eax
6156 ; LINUX-64-STATIC: ret
6157
6158 ; LINUX-32-STATIC: bat03:
6159 ; LINUX-32-STATIC:      movl    $dsrc+64, %eax
6160 ; LINUX-32-STATIC-NEXT:         ret
6161
6162 ; LINUX-32-PIC: bat03:
6163 ; LINUX-32-PIC:         movl    $dsrc+64, %eax
6164 ; LINUX-32-PIC-NEXT:    ret
6165
6166 ; LINUX-64-PIC: bat03:
6167 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), %rax
6168 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6169 ; LINUX-64-PIC-NEXT:    ret
6170
6171 ; DARWIN-32-STATIC: _bat03:
6172 ; DARWIN-32-STATIC:     movl    $_dsrc+64, %eax
6173 ; DARWIN-32-STATIC-NEXT:        ret
6174
6175 ; DARWIN-32-DYNAMIC: _bat03:
6176 ; DARWIN-32-DYNAMIC:    movl    $_dsrc+64, %eax
6177 ; DARWIN-32-DYNAMIC-NEXT:       ret
6178
6179 ; DARWIN-32-PIC: _bat03:
6180 ; DARWIN-32-PIC:        calll   L93$pb
6181 ; DARWIN-32-PIC-NEXT: L93$pb:
6182 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6183 ; DARWIN-32-PIC-NEXT:   leal    (_dsrc-L93$pb)+64([[EAX]]), %eax
6184 ; DARWIN-32-PIC-NEXT:   ret
6185
6186 ; DARWIN-64-STATIC: _bat03:
6187 ; DARWIN-64-STATIC:     leaq    _dsrc+64(%rip), %rax
6188 ; DARWIN-64-STATIC-NEXT:        ret
6189
6190 ; DARWIN-64-DYNAMIC: _bat03:
6191 ; DARWIN-64-DYNAMIC:    leaq    _dsrc+64(%rip), %rax
6192 ; DARWIN-64-DYNAMIC-NEXT:       ret
6193
6194 ; DARWIN-64-PIC: _bat03:
6195 ; DARWIN-64-PIC:        leaq    _dsrc+64(%rip), %rax
6196 ; DARWIN-64-PIC-NEXT:   ret
6197 }
6198
6199 define i8* @bat04() nounwind {
6200 entry:
6201         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
6202 ; LINUX-64-STATIC: bat04:
6203 ; LINUX-64-STATIC: movl    $ddst+64, %eax
6204 ; LINUX-64-STATIC: ret
6205
6206 ; LINUX-32-STATIC: bat04:
6207 ; LINUX-32-STATIC:      movl    $ddst+64, %eax
6208 ; LINUX-32-STATIC-NEXT:         ret
6209
6210 ; LINUX-32-PIC: bat04:
6211 ; LINUX-32-PIC:         movl    $ddst+64, %eax
6212 ; LINUX-32-PIC-NEXT:    ret
6213
6214 ; LINUX-64-PIC: bat04:
6215 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), %rax
6216 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6217 ; LINUX-64-PIC-NEXT:    ret
6218
6219 ; DARWIN-32-STATIC: _bat04:
6220 ; DARWIN-32-STATIC:     movl    $_ddst+64, %eax
6221 ; DARWIN-32-STATIC-NEXT:        ret
6222
6223 ; DARWIN-32-DYNAMIC: _bat04:
6224 ; DARWIN-32-DYNAMIC:    movl    $_ddst+64, %eax
6225 ; DARWIN-32-DYNAMIC-NEXT:       ret
6226
6227 ; DARWIN-32-PIC: _bat04:
6228 ; DARWIN-32-PIC:        calll   L94$pb
6229 ; DARWIN-32-PIC-NEXT: L94$pb:
6230 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6231 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L94$pb)+64([[EAX]]), %eax
6232 ; DARWIN-32-PIC-NEXT:   ret
6233
6234 ; DARWIN-64-STATIC: _bat04:
6235 ; DARWIN-64-STATIC:     leaq    _ddst+64(%rip), %rax
6236 ; DARWIN-64-STATIC-NEXT:        ret
6237
6238 ; DARWIN-64-DYNAMIC: _bat04:
6239 ; DARWIN-64-DYNAMIC:    leaq    _ddst+64(%rip), %rax
6240 ; DARWIN-64-DYNAMIC-NEXT:       ret
6241
6242 ; DARWIN-64-PIC: _bat04:
6243 ; DARWIN-64-PIC:        leaq    _ddst+64(%rip), %rax
6244 ; DARWIN-64-PIC-NEXT:   ret
6245 }
6246
6247 define i8* @bat05() nounwind {
6248 entry:
6249         %0 = load i32** @dptr, align 8
6250         %1 = getelementptr i32* %0, i64 16
6251         %2 = bitcast i32* %1 to i8*
6252         ret i8* %2
6253 ; LINUX-64-STATIC: bat05:
6254 ; LINUX-64-STATIC: movq    dptr(%rip), %rax
6255 ; LINUX-64-STATIC: addq    $64, %rax
6256 ; LINUX-64-STATIC: ret
6257
6258 ; LINUX-32-STATIC: bat05:
6259 ; LINUX-32-STATIC:      movl    dptr, %eax
6260 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6261 ; LINUX-32-STATIC-NEXT:         ret
6262
6263 ; LINUX-32-PIC: bat05:
6264 ; LINUX-32-PIC:         movl    dptr, %eax
6265 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6266 ; LINUX-32-PIC-NEXT:    ret
6267
6268 ; LINUX-64-PIC: bat05:
6269 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
6270 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), %rax
6271 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6272 ; LINUX-64-PIC-NEXT:    ret
6273
6274 ; DARWIN-32-STATIC: _bat05:
6275 ; DARWIN-32-STATIC:     movl    _dptr, %eax
6276 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6277 ; DARWIN-32-STATIC-NEXT:        ret
6278
6279 ; DARWIN-32-DYNAMIC: _bat05:
6280 ; DARWIN-32-DYNAMIC:    movl    _dptr, %eax
6281 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6282 ; DARWIN-32-DYNAMIC-NEXT:       ret
6283
6284 ; DARWIN-32-PIC: _bat05:
6285 ; DARWIN-32-PIC:        calll   L95$pb
6286 ; DARWIN-32-PIC-NEXT: L95$pb:
6287 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6288 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L95$pb([[EAX]]), %eax
6289 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6290 ; DARWIN-32-PIC-NEXT:   ret
6291
6292 ; DARWIN-64-STATIC: _bat05:
6293 ; DARWIN-64-STATIC:     movq    _dptr(%rip), %rax
6294 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6295 ; DARWIN-64-STATIC-NEXT:        ret
6296
6297 ; DARWIN-64-DYNAMIC: _bat05:
6298 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), %rax
6299 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6300 ; DARWIN-64-DYNAMIC-NEXT:       ret
6301
6302 ; DARWIN-64-PIC: _bat05:
6303 ; DARWIN-64-PIC:        movq    _dptr(%rip), %rax
6304 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6305 ; DARWIN-64-PIC-NEXT:   ret
6306 }
6307
6308 define i8* @bat06() nounwind {
6309 entry:
6310         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
6311 ; LINUX-64-STATIC: bat06:
6312 ; LINUX-64-STATIC: movl    $lsrc+64, %eax
6313 ; LINUX-64-STATIC: ret
6314
6315 ; LINUX-32-STATIC: bat06:
6316 ; LINUX-32-STATIC:      movl    $lsrc+64, %eax
6317 ; LINUX-32-STATIC-NEXT:         ret
6318
6319 ; LINUX-32-PIC: bat06:
6320 ; LINUX-32-PIC:         movl    $lsrc+64, %eax
6321 ; LINUX-32-PIC-NEXT:    ret
6322
6323 ; LINUX-64-PIC: bat06:
6324 ; LINUX-64-PIC:         leaq    lsrc+64(%rip), %rax
6325 ; LINUX-64-PIC-NEXT:    ret
6326
6327 ; DARWIN-32-STATIC: _bat06:
6328 ; DARWIN-32-STATIC:     movl    $_lsrc+64, %eax
6329 ; DARWIN-32-STATIC-NEXT:        ret
6330
6331 ; DARWIN-32-DYNAMIC: _bat06:
6332 ; DARWIN-32-DYNAMIC:    movl    $_lsrc+64, %eax
6333 ; DARWIN-32-DYNAMIC-NEXT:       ret
6334
6335 ; DARWIN-32-PIC: _bat06:
6336 ; DARWIN-32-PIC:        calll   L96$pb
6337 ; DARWIN-32-PIC-NEXT: L96$pb:
6338 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6339 ; DARWIN-32-PIC-NEXT:   leal    (_lsrc-L96$pb)+64([[EAX]]), %eax
6340 ; DARWIN-32-PIC-NEXT:   ret
6341
6342 ; DARWIN-64-STATIC: _bat06:
6343 ; DARWIN-64-STATIC:     leaq    _lsrc+64(%rip), %rax
6344 ; DARWIN-64-STATIC-NEXT:        ret
6345
6346 ; DARWIN-64-DYNAMIC: _bat06:
6347 ; DARWIN-64-DYNAMIC:    leaq    _lsrc+64(%rip), %rax
6348 ; DARWIN-64-DYNAMIC-NEXT:       ret
6349
6350 ; DARWIN-64-PIC: _bat06:
6351 ; DARWIN-64-PIC:        leaq    _lsrc+64(%rip), %rax
6352 ; DARWIN-64-PIC-NEXT:   ret
6353 }
6354
6355 define i8* @bat07() nounwind {
6356 entry:
6357         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
6358 ; LINUX-64-STATIC: bat07:
6359 ; LINUX-64-STATIC: movl    $ldst+64, %eax
6360 ; LINUX-64-STATIC: ret
6361
6362 ; LINUX-32-STATIC: bat07:
6363 ; LINUX-32-STATIC:      movl    $ldst+64, %eax
6364 ; LINUX-32-STATIC-NEXT:         ret
6365
6366 ; LINUX-32-PIC: bat07:
6367 ; LINUX-32-PIC:         movl    $ldst+64, %eax
6368 ; LINUX-32-PIC-NEXT:    ret
6369
6370 ; LINUX-64-PIC: bat07:
6371 ; LINUX-64-PIC:         leaq    ldst+64(%rip), %rax
6372 ; LINUX-64-PIC-NEXT:    ret
6373
6374 ; DARWIN-32-STATIC: _bat07:
6375 ; DARWIN-32-STATIC:     movl    $_ldst+64, %eax
6376 ; DARWIN-32-STATIC-NEXT:        ret
6377
6378 ; DARWIN-32-DYNAMIC: _bat07:
6379 ; DARWIN-32-DYNAMIC:    movl    $_ldst+64, %eax
6380 ; DARWIN-32-DYNAMIC-NEXT:       ret
6381
6382 ; DARWIN-32-PIC: _bat07:
6383 ; DARWIN-32-PIC:        calll   L97$pb
6384 ; DARWIN-32-PIC-NEXT: L97$pb:
6385 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6386 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L97$pb)+64([[EAX]]), %eax
6387 ; DARWIN-32-PIC-NEXT:   ret
6388
6389 ; DARWIN-64-STATIC: _bat07:
6390 ; DARWIN-64-STATIC:     leaq    _ldst+64(%rip), %rax
6391 ; DARWIN-64-STATIC-NEXT:        ret
6392
6393 ; DARWIN-64-DYNAMIC: _bat07:
6394 ; DARWIN-64-DYNAMIC:    leaq    _ldst+64(%rip), %rax
6395 ; DARWIN-64-DYNAMIC-NEXT:       ret
6396
6397 ; DARWIN-64-PIC: _bat07:
6398 ; DARWIN-64-PIC:        leaq    _ldst+64(%rip), %rax
6399 ; DARWIN-64-PIC-NEXT:   ret
6400 }
6401
6402 define i8* @bat08() nounwind {
6403 entry:
6404         %0 = load i32** @lptr, align 8
6405         %1 = getelementptr i32* %0, i64 16
6406         %2 = bitcast i32* %1 to i8*
6407         ret i8* %2
6408 ; LINUX-64-STATIC: bat08:
6409 ; LINUX-64-STATIC: movq    lptr(%rip), %rax
6410 ; LINUX-64-STATIC: addq    $64, %rax
6411 ; LINUX-64-STATIC: ret
6412
6413 ; LINUX-32-STATIC: bat08:
6414 ; LINUX-32-STATIC:      movl    lptr, %eax
6415 ; LINUX-32-STATIC-NEXT:         addl    $64, %eax
6416 ; LINUX-32-STATIC-NEXT:         ret
6417
6418 ; LINUX-32-PIC: bat08:
6419 ; LINUX-32-PIC:         movl    lptr, %eax
6420 ; LINUX-32-PIC-NEXT:    addl    $64, %eax
6421 ; LINUX-32-PIC-NEXT:    ret
6422
6423 ; LINUX-64-PIC: bat08:
6424 ; LINUX-64-PIC:         movq    lptr(%rip), %rax
6425 ; LINUX-64-PIC-NEXT:    addq    $64, %rax
6426 ; LINUX-64-PIC-NEXT:    ret
6427
6428 ; DARWIN-32-STATIC: _bat08:
6429 ; DARWIN-32-STATIC:     movl    _lptr, %eax
6430 ; DARWIN-32-STATIC-NEXT:        addl    $64, %eax
6431 ; DARWIN-32-STATIC-NEXT:        ret
6432
6433 ; DARWIN-32-DYNAMIC: _bat08:
6434 ; DARWIN-32-DYNAMIC:    movl    _lptr, %eax
6435 ; DARWIN-32-DYNAMIC-NEXT:       addl    $64, %eax
6436 ; DARWIN-32-DYNAMIC-NEXT:       ret
6437
6438 ; DARWIN-32-PIC: _bat08:
6439 ; DARWIN-32-PIC:        calll   L98$pb
6440 ; DARWIN-32-PIC-NEXT: L98$pb:
6441 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6442 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L98$pb([[EAX]]), %eax
6443 ; DARWIN-32-PIC-NEXT:   addl    $64, %eax
6444 ; DARWIN-32-PIC-NEXT:   ret
6445
6446 ; DARWIN-64-STATIC: _bat08:
6447 ; DARWIN-64-STATIC:     movq    _lptr(%rip), %rax
6448 ; DARWIN-64-STATIC-NEXT:        addq    $64, %rax
6449 ; DARWIN-64-STATIC-NEXT:        ret
6450
6451 ; DARWIN-64-DYNAMIC: _bat08:
6452 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), %rax
6453 ; DARWIN-64-DYNAMIC-NEXT:       addq    $64, %rax
6454 ; DARWIN-64-DYNAMIC-NEXT:       ret
6455
6456 ; DARWIN-64-PIC: _bat08:
6457 ; DARWIN-64-PIC:        movq    _lptr(%rip), %rax
6458 ; DARWIN-64-PIC-NEXT:   addq    $64, %rax
6459 ; DARWIN-64-PIC-NEXT:   ret
6460 }
6461
6462 define i8* @bam00() nounwind {
6463 entry:
6464         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
6465 ; LINUX-64-STATIC: bam00:
6466 ; LINUX-64-STATIC: movl    $src+262144, %eax
6467 ; LINUX-64-STATIC: ret
6468
6469 ; LINUX-32-STATIC: bam00:
6470 ; LINUX-32-STATIC:      movl    $src+262144, %eax
6471 ; LINUX-32-STATIC-NEXT:         ret
6472
6473 ; LINUX-32-PIC: bam00:
6474 ; LINUX-32-PIC:         movl    $src+262144, %eax
6475 ; LINUX-32-PIC-NEXT:    ret
6476
6477 ; LINUX-64-PIC: bam00:
6478 ; LINUX-64-PIC:         movl    $262144, %eax
6479 ; LINUX-64-PIC-NEXT:    addq    src@GOTPCREL(%rip), %rax
6480 ; LINUX-64-PIC-NEXT:    ret
6481
6482 ; DARWIN-32-STATIC: _bam00:
6483 ; DARWIN-32-STATIC:     movl    $_src+262144, %eax
6484 ; DARWIN-32-STATIC-NEXT:        ret
6485
6486 ; DARWIN-32-DYNAMIC: _bam00:
6487 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6488 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_src$non_lazy_ptr, %eax
6489 ; DARWIN-32-DYNAMIC-NEXT:       ret
6490
6491 ; DARWIN-32-PIC: _bam00:
6492 ; DARWIN-32-PIC:        calll   L99$pb
6493 ; DARWIN-32-PIC-NEXT: L99$pb:
6494 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6495 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6496 ; DARWIN-32-PIC-NEXT:   addl    L_src$non_lazy_ptr-L99$pb([[ECX]]), %eax
6497 ; DARWIN-32-PIC-NEXT:   ret
6498
6499 ; DARWIN-64-STATIC: _bam00:
6500 ; DARWIN-64-STATIC:     movl    $262144, %eax
6501 ; DARWIN-64-STATIC-NEXT:        addq    _src@GOTPCREL(%rip), %rax
6502 ; DARWIN-64-STATIC-NEXT:        ret
6503
6504 ; DARWIN-64-DYNAMIC: _bam00:
6505 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6506 ; DARWIN-64-DYNAMIC-NEXT:       addq    _src@GOTPCREL(%rip), %rax
6507 ; DARWIN-64-DYNAMIC-NEXT:       ret
6508
6509 ; DARWIN-64-PIC: _bam00:
6510 ; DARWIN-64-PIC:        movl    $262144, %eax
6511 ; DARWIN-64-PIC-NEXT:   addq    _src@GOTPCREL(%rip), %rax
6512 ; DARWIN-64-PIC-NEXT:   ret
6513 }
6514
6515 define i8* @bam01() nounwind {
6516 entry:
6517         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
6518 ; LINUX-64-STATIC: bam01:
6519 ; LINUX-64-STATIC: movl    $dst+262144, %eax
6520 ; LINUX-64-STATIC: ret
6521
6522 ; LINUX-32-STATIC: bam01:
6523 ; LINUX-32-STATIC:      movl    $dst+262144, %eax
6524 ; LINUX-32-STATIC-NEXT:         ret
6525
6526 ; LINUX-32-PIC: bam01:
6527 ; LINUX-32-PIC:         movl    $dst+262144, %eax
6528 ; LINUX-32-PIC-NEXT:    ret
6529
6530 ; LINUX-64-PIC: bam01:
6531 ; LINUX-64-PIC:         movl    $262144, %eax
6532 ; LINUX-64-PIC-NEXT:    addq    dst@GOTPCREL(%rip), %rax
6533 ; LINUX-64-PIC-NEXT:    ret
6534
6535 ; DARWIN-32-STATIC: _bam01:
6536 ; DARWIN-32-STATIC:     movl    $_dst+262144, %eax
6537 ; DARWIN-32-STATIC-NEXT:        ret
6538
6539 ; DARWIN-32-DYNAMIC: _bam01:
6540 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6541 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_dst$non_lazy_ptr, %eax
6542 ; DARWIN-32-DYNAMIC-NEXT:       ret
6543
6544 ; DARWIN-32-PIC: _bam01:
6545 ; DARWIN-32-PIC:        calll   L100$pb
6546 ; DARWIN-32-PIC-NEXT: L100$pb:
6547 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6548 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6549 ; DARWIN-32-PIC-NEXT:   addl    L_dst$non_lazy_ptr-L100$pb([[ECX]]), %eax
6550 ; DARWIN-32-PIC-NEXT:   ret
6551
6552 ; DARWIN-64-STATIC: _bam01:
6553 ; DARWIN-64-STATIC:     movl    $262144, %eax
6554 ; DARWIN-64-STATIC-NEXT:        addq    _dst@GOTPCREL(%rip), %rax
6555 ; DARWIN-64-STATIC-NEXT:        ret
6556
6557 ; DARWIN-64-DYNAMIC: _bam01:
6558 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6559 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dst@GOTPCREL(%rip), %rax
6560 ; DARWIN-64-DYNAMIC-NEXT:       ret
6561
6562 ; DARWIN-64-PIC: _bam01:
6563 ; DARWIN-64-PIC:        movl    $262144, %eax
6564 ; DARWIN-64-PIC-NEXT:   addq    _dst@GOTPCREL(%rip), %rax
6565 ; DARWIN-64-PIC-NEXT:   ret
6566 }
6567
6568 define i8* @bxm01() nounwind {
6569 entry:
6570         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
6571 ; LINUX-64-STATIC: bxm01:
6572 ; LINUX-64-STATIC: movl    $xdst+262144, %eax
6573 ; LINUX-64-STATIC: ret
6574
6575 ; LINUX-32-STATIC: bxm01:
6576 ; LINUX-32-STATIC:      movl    $xdst+262144, %eax
6577 ; LINUX-32-STATIC-NEXT:         ret
6578
6579 ; LINUX-32-PIC: bxm01:
6580 ; LINUX-32-PIC:         movl    $xdst+262144, %eax
6581 ; LINUX-32-PIC-NEXT:    ret
6582
6583 ; LINUX-64-PIC: bxm01:
6584 ; LINUX-64-PIC:         movl    $262144, %eax
6585 ; LINUX-64-PIC-NEXT:    addq    xdst@GOTPCREL(%rip), %rax
6586 ; LINUX-64-PIC-NEXT:    ret
6587
6588 ; DARWIN-32-STATIC: _bxm01:
6589 ; DARWIN-32-STATIC:     movl    $_xdst+262144, %eax
6590 ; DARWIN-32-STATIC-NEXT:        ret
6591
6592 ; DARWIN-32-DYNAMIC: _bxm01:
6593 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6594 ; DARWIN-32-DYNAMIC-NEXT:       addl    L_xdst$non_lazy_ptr, %eax
6595 ; DARWIN-32-DYNAMIC-NEXT:       ret
6596
6597 ; DARWIN-32-PIC: _bxm01:
6598 ; DARWIN-32-PIC:        calll   L101$pb
6599 ; DARWIN-32-PIC-NEXT: L101$pb:
6600 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6601 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6602 ; DARWIN-32-PIC-NEXT:   addl    L_xdst$non_lazy_ptr-L101$pb([[ECX]]), %eax
6603 ; DARWIN-32-PIC-NEXT:   ret
6604
6605 ; DARWIN-64-STATIC: _bxm01:
6606 ; DARWIN-64-STATIC:     movl    $262144, %eax
6607 ; DARWIN-64-STATIC-NEXT:        addq    _xdst@GOTPCREL(%rip), %rax
6608 ; DARWIN-64-STATIC-NEXT:        ret
6609
6610 ; DARWIN-64-DYNAMIC: _bxm01:
6611 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6612 ; DARWIN-64-DYNAMIC-NEXT:       addq    _xdst@GOTPCREL(%rip), %rax
6613 ; DARWIN-64-DYNAMIC-NEXT:       ret
6614
6615 ; DARWIN-64-PIC: _bxm01:
6616 ; DARWIN-64-PIC:        movl    $262144, %eax
6617 ; DARWIN-64-PIC-NEXT:   addq    _xdst@GOTPCREL(%rip), %rax
6618 ; DARWIN-64-PIC-NEXT:   ret
6619 }
6620
6621 define i8* @bam02() nounwind {
6622 entry:
6623         %0 = load i32** @ptr, align 8
6624         %1 = getelementptr i32* %0, i64 65536
6625         %2 = bitcast i32* %1 to i8*
6626         ret i8* %2
6627 ; LINUX-64-STATIC: bam02:
6628 ; LINUX-64-STATIC: movl    $262144, %eax
6629 ; LINUX-64-STATIC: addq    ptr(%rip), %rax
6630 ; LINUX-64-STATIC: ret
6631
6632 ; LINUX-32-STATIC: bam02:
6633 ; LINUX-32-STATIC:      movl    $262144, %eax
6634 ; LINUX-32-STATIC-NEXT:         addl    ptr, %eax
6635 ; LINUX-32-STATIC-NEXT:         ret
6636
6637 ; LINUX-32-PIC: bam02:
6638 ; LINUX-32-PIC:         movl    $262144, %eax
6639 ; LINUX-32-PIC-NEXT:    addl    ptr, %eax
6640 ; LINUX-32-PIC-NEXT:    ret
6641
6642 ; LINUX-64-PIC: bam02:
6643 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6644 ; LINUX-64-PIC-NEXT:    movl    $262144, %eax
6645 ; LINUX-64-PIC-NEXT:    addq    ([[RCX]]), %rax
6646 ; LINUX-64-PIC-NEXT:    ret
6647
6648 ; DARWIN-32-STATIC: _bam02:
6649 ; DARWIN-32-STATIC:     movl    $262144, %eax
6650 ; DARWIN-32-STATIC-NEXT:        addl    _ptr, %eax
6651 ; DARWIN-32-STATIC-NEXT:        ret
6652
6653 ; DARWIN-32-DYNAMIC: _bam02:
6654 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[ECX:%e.x]]
6655 ; DARWIN-32-DYNAMIC-NEXT:       movl    $262144, %eax
6656 ; DARWIN-32-DYNAMIC-NEXT:       addl    ([[ECX]]), %eax
6657 ; DARWIN-32-DYNAMIC-NEXT:       ret
6658
6659 ; DARWIN-32-PIC: _bam02:
6660 ; DARWIN-32-PIC:        calll   L102$pb
6661 ; DARWIN-32-PIC-NEXT: L102$pb:
6662 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6663 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L102$pb([[EAX]]), [[ECX:%e.x]]
6664 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6665 ; DARWIN-32-PIC-NEXT:   addl    ([[ECX]]), %eax
6666 ; DARWIN-32-PIC-NEXT:   ret
6667
6668 ; DARWIN-64-STATIC: _bam02:
6669 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6670 ; DARWIN-64-STATIC-NEXT:        movl    $262144, %eax
6671 ; DARWIN-64-STATIC-NEXT:        addq    ([[RCX]]), %rax
6672 ; DARWIN-64-STATIC-NEXT:        ret
6673
6674 ; DARWIN-64-DYNAMIC: _bam02:
6675 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6676 ; DARWIN-64-DYNAMIC-NEXT:       movl    $262144, %eax
6677 ; DARWIN-64-DYNAMIC-NEXT:       addq    ([[RCX]]), %rax
6678 ; DARWIN-64-DYNAMIC-NEXT:       ret
6679
6680 ; DARWIN-64-PIC: _bam02:
6681 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
6682 ; DARWIN-64-PIC-NEXT:   movl    $262144, %eax
6683 ; DARWIN-64-PIC-NEXT:   addq    ([[RCX]]), %rax
6684 ; DARWIN-64-PIC-NEXT:   ret
6685 }
6686
6687 define i8* @bam03() nounwind {
6688 entry:
6689         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
6690 ; LINUX-64-STATIC: bam03:
6691 ; LINUX-64-STATIC: movl    $dsrc+262144, %eax
6692 ; LINUX-64-STATIC: ret
6693
6694 ; LINUX-32-STATIC: bam03:
6695 ; LINUX-32-STATIC:      movl    $dsrc+262144, %eax
6696 ; LINUX-32-STATIC-NEXT:         ret
6697
6698 ; LINUX-32-PIC: bam03:
6699 ; LINUX-32-PIC:         movl    $dsrc+262144, %eax
6700 ; LINUX-32-PIC-NEXT:    ret
6701
6702 ; LINUX-64-PIC: bam03:
6703 ; LINUX-64-PIC:         movl    $262144, %eax
6704 ; LINUX-64-PIC-NEXT:    addq    dsrc@GOTPCREL(%rip), %rax
6705 ; LINUX-64-PIC-NEXT:    ret
6706
6707 ; DARWIN-32-STATIC: _bam03:
6708 ; DARWIN-32-STATIC:     movl    $_dsrc+262144, %eax
6709 ; DARWIN-32-STATIC-NEXT:        ret
6710
6711 ; DARWIN-32-DYNAMIC: _bam03:
6712 ; DARWIN-32-DYNAMIC:    movl    $_dsrc+262144, %eax
6713 ; DARWIN-32-DYNAMIC-NEXT:       ret
6714
6715 ; DARWIN-32-PIC: _bam03:
6716 ; DARWIN-32-PIC:        calll   L103$pb
6717 ; DARWIN-32-PIC-NEXT: L103$pb:
6718 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6719 ; DARWIN-32-PIC-NEXT:   leal    (_dsrc-L103$pb)+262144([[EAX]]), %eax
6720 ; DARWIN-32-PIC-NEXT:   ret
6721
6722 ; DARWIN-64-STATIC: _bam03:
6723 ; DARWIN-64-STATIC:     leaq    _dsrc+262144(%rip), %rax
6724 ; DARWIN-64-STATIC-NEXT:        ret
6725
6726 ; DARWIN-64-DYNAMIC: _bam03:
6727 ; DARWIN-64-DYNAMIC:    leaq    _dsrc+262144(%rip), %rax
6728 ; DARWIN-64-DYNAMIC-NEXT:       ret
6729
6730 ; DARWIN-64-PIC: _bam03:
6731 ; DARWIN-64-PIC:        leaq    _dsrc+262144(%rip), %rax
6732 ; DARWIN-64-PIC-NEXT:   ret
6733 }
6734
6735 define i8* @bam04() nounwind {
6736 entry:
6737         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
6738 ; LINUX-64-STATIC: bam04:
6739 ; LINUX-64-STATIC: movl    $ddst+262144, %eax
6740 ; LINUX-64-STATIC: ret
6741
6742 ; LINUX-32-STATIC: bam04:
6743 ; LINUX-32-STATIC:      movl    $ddst+262144, %eax
6744 ; LINUX-32-STATIC-NEXT:         ret
6745
6746 ; LINUX-32-PIC: bam04:
6747 ; LINUX-32-PIC:         movl    $ddst+262144, %eax
6748 ; LINUX-32-PIC-NEXT:    ret
6749
6750 ; LINUX-64-PIC: bam04:
6751 ; LINUX-64-PIC:         movl    $262144, %eax
6752 ; LINUX-64-PIC-NEXT:    addq    ddst@GOTPCREL(%rip), %rax
6753 ; LINUX-64-PIC-NEXT:    ret
6754
6755 ; DARWIN-32-STATIC: _bam04:
6756 ; DARWIN-32-STATIC:     movl    $_ddst+262144, %eax
6757 ; DARWIN-32-STATIC-NEXT:        ret
6758
6759 ; DARWIN-32-DYNAMIC: _bam04:
6760 ; DARWIN-32-DYNAMIC:    movl    $_ddst+262144, %eax
6761 ; DARWIN-32-DYNAMIC-NEXT:       ret
6762
6763 ; DARWIN-32-PIC: _bam04:
6764 ; DARWIN-32-PIC:        calll   L104$pb
6765 ; DARWIN-32-PIC-NEXT: L104$pb:
6766 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6767 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L104$pb)+262144([[EAX]]), %eax
6768 ; DARWIN-32-PIC-NEXT:   ret
6769
6770 ; DARWIN-64-STATIC: _bam04:
6771 ; DARWIN-64-STATIC:     leaq    _ddst+262144(%rip), %rax
6772 ; DARWIN-64-STATIC-NEXT:        ret
6773
6774 ; DARWIN-64-DYNAMIC: _bam04:
6775 ; DARWIN-64-DYNAMIC:    leaq    _ddst+262144(%rip), %rax
6776 ; DARWIN-64-DYNAMIC-NEXT:       ret
6777
6778 ; DARWIN-64-PIC: _bam04:
6779 ; DARWIN-64-PIC:        leaq    _ddst+262144(%rip), %rax
6780 ; DARWIN-64-PIC-NEXT:   ret
6781 }
6782
6783 define i8* @bam05() nounwind {
6784 entry:
6785         %0 = load i32** @dptr, align 8
6786         %1 = getelementptr i32* %0, i64 65536
6787         %2 = bitcast i32* %1 to i8*
6788         ret i8* %2
6789 ; LINUX-64-STATIC: bam05:
6790 ; LINUX-64-STATIC: movl    $262144, %eax
6791 ; LINUX-64-STATIC: addq    dptr(%rip), %rax
6792 ; LINUX-64-STATIC: ret
6793
6794 ; LINUX-32-STATIC: bam05:
6795 ; LINUX-32-STATIC:      movl    $262144, %eax
6796 ; LINUX-32-STATIC-NEXT:         addl    dptr, %eax
6797 ; LINUX-32-STATIC-NEXT:         ret
6798
6799 ; LINUX-32-PIC: bam05:
6800 ; LINUX-32-PIC:         movl    $262144, %eax
6801 ; LINUX-32-PIC-NEXT:    addl    dptr, %eax
6802 ; LINUX-32-PIC-NEXT:    ret
6803
6804 ; LINUX-64-PIC: bam05:
6805 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RCX:%r.x]]
6806 ; LINUX-64-PIC-NEXT:    movl    $262144, %eax
6807 ; LINUX-64-PIC-NEXT:    addq    ([[RCX]]), %rax
6808 ; LINUX-64-PIC-NEXT:    ret
6809
6810 ; DARWIN-32-STATIC: _bam05:
6811 ; DARWIN-32-STATIC:     movl    $262144, %eax
6812 ; DARWIN-32-STATIC-NEXT:        addl    _dptr, %eax
6813 ; DARWIN-32-STATIC-NEXT:        ret
6814
6815 ; DARWIN-32-DYNAMIC: _bam05:
6816 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6817 ; DARWIN-32-DYNAMIC-NEXT:       addl    _dptr, %eax
6818 ; DARWIN-32-DYNAMIC-NEXT:       ret
6819
6820 ; DARWIN-32-PIC: _bam05:
6821 ; DARWIN-32-PIC:        calll   L105$pb
6822 ; DARWIN-32-PIC-NEXT: L105$pb:
6823 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6824 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6825 ; DARWIN-32-PIC-NEXT:   addl    _dptr-L105$pb([[ECX]]), %eax
6826 ; DARWIN-32-PIC-NEXT:   ret
6827
6828 ; DARWIN-64-STATIC: _bam05:
6829 ; DARWIN-64-STATIC:     movl    $262144, %eax
6830 ; DARWIN-64-STATIC-NEXT:        addq    _dptr(%rip), %rax
6831 ; DARWIN-64-STATIC-NEXT:        ret
6832
6833 ; DARWIN-64-DYNAMIC: _bam05:
6834 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6835 ; DARWIN-64-DYNAMIC-NEXT:       addq    _dptr(%rip), %rax
6836 ; DARWIN-64-DYNAMIC-NEXT:       ret
6837
6838 ; DARWIN-64-PIC: _bam05:
6839 ; DARWIN-64-PIC:        movl    $262144, %eax
6840 ; DARWIN-64-PIC-NEXT:   addq    _dptr(%rip), %rax
6841 ; DARWIN-64-PIC-NEXT:   ret
6842 }
6843
6844 define i8* @bam06() nounwind {
6845 entry:
6846         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
6847 ; LINUX-64-STATIC: bam06:
6848 ; LINUX-64-STATIC: movl    $lsrc+262144, %eax
6849 ; LINUX-64-STATIC: ret
6850
6851 ; LINUX-32-STATIC: bam06:
6852 ; LINUX-32-STATIC:      movl    $lsrc+262144, %eax
6853 ; LINUX-32-STATIC-NEXT:         ret
6854
6855 ; LINUX-32-PIC: bam06:
6856 ; LINUX-32-PIC:         movl    $lsrc+262144, %eax
6857 ; LINUX-32-PIC-NEXT:    ret
6858
6859 ; LINUX-64-PIC: bam06:
6860 ; LINUX-64-PIC:         leaq    lsrc+262144(%rip), %rax
6861 ; LINUX-64-PIC-NEXT:    ret
6862
6863 ; DARWIN-32-STATIC: _bam06:
6864 ; DARWIN-32-STATIC:     movl    $_lsrc+262144, %eax
6865 ; DARWIN-32-STATIC-NEXT:        ret
6866
6867 ; DARWIN-32-DYNAMIC: _bam06:
6868 ; DARWIN-32-DYNAMIC:    movl    $_lsrc+262144, %eax
6869 ; DARWIN-32-DYNAMIC-NEXT:       ret
6870
6871 ; DARWIN-32-PIC: _bam06:
6872 ; DARWIN-32-PIC:        calll   L106$pb
6873 ; DARWIN-32-PIC-NEXT: L106$pb:
6874 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
6875 ; DARWIN-32-PIC-NEXT:   leal    (_lsrc-L106$pb)+262144([[EAX]]), %eax
6876 ; DARWIN-32-PIC-NEXT:   ret
6877
6878 ; DARWIN-64-STATIC: _bam06:
6879 ; DARWIN-64-STATIC:     leaq    _lsrc+262144(%rip), %rax
6880 ; DARWIN-64-STATIC-NEXT:        ret
6881
6882 ; DARWIN-64-DYNAMIC: _bam06:
6883 ; DARWIN-64-DYNAMIC:    leaq    _lsrc+262144(%rip), %rax
6884 ; DARWIN-64-DYNAMIC-NEXT:       ret
6885
6886 ; DARWIN-64-PIC: _bam06:
6887 ; DARWIN-64-PIC:        leaq    _lsrc+262144(%rip), %rax
6888 ; DARWIN-64-PIC-NEXT:   ret
6889 }
6890
6891 define i8* @bam07() nounwind {
6892 entry:
6893         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
6894 ; LINUX-64-STATIC: bam07:
6895 ; LINUX-64-STATIC: movl    $ldst+262144, %eax
6896 ; LINUX-64-STATIC: ret
6897
6898 ; LINUX-32-STATIC: bam07:
6899 ; LINUX-32-STATIC:      movl    $ldst+262144, %eax
6900 ; LINUX-32-STATIC-NEXT:         ret
6901
6902 ; LINUX-32-PIC: bam07:
6903 ; LINUX-32-PIC:         movl    $ldst+262144, %eax
6904 ; LINUX-32-PIC-NEXT:    ret
6905
6906 ; LINUX-64-PIC: bam07:
6907 ; LINUX-64-PIC:         leaq    ldst+262144(%rip), %rax
6908 ; LINUX-64-PIC-NEXT:    ret
6909
6910 ; DARWIN-32-STATIC: _bam07:
6911 ; DARWIN-32-STATIC:     movl    $_ldst+262144, %eax
6912 ; DARWIN-32-STATIC-NEXT:        ret
6913
6914 ; DARWIN-32-DYNAMIC: _bam07:
6915 ; DARWIN-32-DYNAMIC:    movl    $_ldst+262144, %eax
6916 ; DARWIN-32-DYNAMIC-NEXT:       ret
6917
6918 ; DARWIN-32-PIC: _bam07:
6919 ; DARWIN-32-PIC:        calll   L107$pb
6920 ; DARWIN-32-PIC-NEXT: L107$pb:
6921 ; DARWIN-32-PIC-NEXT:   popl    %eax
6922 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L107$pb)+262144([[EAX]]), %eax
6923 ; DARWIN-32-PIC-NEXT:   ret
6924
6925 ; DARWIN-64-STATIC: _bam07:
6926 ; DARWIN-64-STATIC:     leaq    _ldst+262144(%rip), %rax
6927 ; DARWIN-64-STATIC-NEXT:        ret
6928
6929 ; DARWIN-64-DYNAMIC: _bam07:
6930 ; DARWIN-64-DYNAMIC:    leaq    _ldst+262144(%rip), %rax
6931 ; DARWIN-64-DYNAMIC-NEXT:       ret
6932
6933 ; DARWIN-64-PIC: _bam07:
6934 ; DARWIN-64-PIC:        leaq    _ldst+262144(%rip), %rax
6935 ; DARWIN-64-PIC-NEXT:   ret
6936 }
6937
6938 define i8* @bam08() nounwind {
6939 entry:
6940         %0 = load i32** @lptr, align 8
6941         %1 = getelementptr i32* %0, i64 65536
6942         %2 = bitcast i32* %1 to i8*
6943         ret i8* %2
6944 ; LINUX-64-STATIC: bam08:
6945 ; LINUX-64-STATIC: movl    $262144, %eax
6946 ; LINUX-64-STATIC: addq    lptr(%rip), %rax
6947 ; LINUX-64-STATIC: ret
6948
6949 ; LINUX-32-STATIC: bam08:
6950 ; LINUX-32-STATIC:      movl    $262144, %eax
6951 ; LINUX-32-STATIC-NEXT:         addl    lptr, %eax
6952 ; LINUX-32-STATIC-NEXT:         ret
6953
6954 ; LINUX-32-PIC: bam08:
6955 ; LINUX-32-PIC:         movl    $262144, %eax
6956 ; LINUX-32-PIC-NEXT:    addl    lptr, %eax
6957 ; LINUX-32-PIC-NEXT:    ret
6958
6959 ; LINUX-64-PIC: bam08:
6960 ; LINUX-64-PIC:         movl    $262144, %eax
6961 ; LINUX-64-PIC-NEXT:    addq    lptr(%rip), %rax
6962 ; LINUX-64-PIC-NEXT:    ret
6963
6964 ; DARWIN-32-STATIC: _bam08:
6965 ; DARWIN-32-STATIC:     movl    $262144, %eax
6966 ; DARWIN-32-STATIC-NEXT:        addl    _lptr, %eax
6967 ; DARWIN-32-STATIC-NEXT:        ret
6968
6969 ; DARWIN-32-DYNAMIC: _bam08:
6970 ; DARWIN-32-DYNAMIC:    movl    $262144, %eax
6971 ; DARWIN-32-DYNAMIC-NEXT:       addl    _lptr, %eax
6972 ; DARWIN-32-DYNAMIC-NEXT:       ret
6973
6974 ; DARWIN-32-PIC: _bam08:
6975 ; DARWIN-32-PIC:        calll   L108$pb
6976 ; DARWIN-32-PIC-NEXT: L108$pb:
6977 ; DARWIN-32-PIC-NEXT:   popl    [[ECX:%e.x]]
6978 ; DARWIN-32-PIC-NEXT:   movl    $262144, %eax
6979 ; DARWIN-32-PIC-NEXT:   addl    _lptr-L108$pb([[ECX]]), %eax
6980 ; DARWIN-32-PIC-NEXT:   ret
6981
6982 ; DARWIN-64-STATIC: _bam08:
6983 ; DARWIN-64-STATIC:     movl    $262144, %eax
6984 ; DARWIN-64-STATIC-NEXT:        addq    _lptr(%rip), %rax
6985 ; DARWIN-64-STATIC-NEXT:        ret
6986
6987 ; DARWIN-64-DYNAMIC: _bam08:
6988 ; DARWIN-64-DYNAMIC:    movl    $262144, %eax
6989 ; DARWIN-64-DYNAMIC-NEXT:       addq    _lptr(%rip), %rax
6990 ; DARWIN-64-DYNAMIC-NEXT:       ret
6991
6992 ; DARWIN-64-PIC: _bam08:
6993 ; DARWIN-64-PIC:        movl    $262144, %eax
6994 ; DARWIN-64-PIC-NEXT:   addq    _lptr(%rip), %rax
6995 ; DARWIN-64-PIC-NEXT:   ret
6996 }
6997
6998 define i8* @cat00(i64 %i) nounwind {
6999 entry:
7000         %0 = add i64 %i, 16
7001         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
7002         %2 = bitcast i32* %1 to i8*
7003         ret i8* %2
7004 ; LINUX-64-STATIC: cat00:
7005 ; LINUX-64-STATIC: leaq    src+64(,%rdi,4), %rax
7006 ; LINUX-64-STATIC: ret
7007
7008 ; LINUX-32-STATIC: cat00:
7009 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7010 ; LINUX-32-STATIC-NEXT:         leal    src+64(,[[EAX]],4), %eax
7011 ; LINUX-32-STATIC-NEXT:         ret
7012
7013 ; LINUX-32-PIC: cat00:
7014 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7015 ; LINUX-32-PIC-NEXT:    leal    src+64(,[[EAX]],4), %eax
7016 ; LINUX-32-PIC-NEXT:    ret
7017
7018 ; LINUX-64-PIC: cat00:
7019 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
7020 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7021 ; LINUX-64-PIC-NEXT:    ret
7022
7023 ; DARWIN-32-STATIC: _cat00:
7024 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7025 ; DARWIN-32-STATIC-NEXT:        leal    _src+64(,[[EAX]],4), %eax
7026 ; DARWIN-32-STATIC-NEXT:        ret
7027
7028 ; DARWIN-32-DYNAMIC: _cat00:
7029 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7030 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
7031 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7032 ; DARWIN-32-DYNAMIC-NEXT:       ret
7033
7034 ; DARWIN-32-PIC: _cat00:
7035 ; DARWIN-32-PIC:        calll   L109$pb
7036 ; DARWIN-32-PIC-NEXT: L109$pb:
7037 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7038 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7039 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L109$pb([[EAX]]), [[EAX:%e.x]]
7040 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7041 ; DARWIN-32-PIC-NEXT:   ret
7042
7043 ; DARWIN-64-STATIC: _cat00:
7044 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7045 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7046 ; DARWIN-64-STATIC-NEXT:        ret
7047
7048 ; DARWIN-64-DYNAMIC: _cat00:
7049 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7050 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7051 ; DARWIN-64-DYNAMIC-NEXT:       ret
7052
7053 ; DARWIN-64-PIC: _cat00:
7054 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7055 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7056 ; DARWIN-64-PIC-NEXT:   ret
7057 }
7058
7059 define i8* @cxt00(i64 %i) nounwind {
7060 entry:
7061         %0 = add i64 %i, 16
7062         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7063         %2 = bitcast i32* %1 to i8*
7064         ret i8* %2
7065 ; LINUX-64-STATIC: cxt00:
7066 ; LINUX-64-STATIC: leaq    xsrc+64(,%rdi,4), %rax
7067 ; LINUX-64-STATIC: ret
7068
7069 ; LINUX-32-STATIC: cxt00:
7070 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7071 ; LINUX-32-STATIC-NEXT:         leal    xsrc+64(,[[EAX]],4), %eax
7072 ; LINUX-32-STATIC-NEXT:         ret
7073
7074 ; LINUX-32-PIC: cxt00:
7075 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7076 ; LINUX-32-PIC-NEXT:    leal    xsrc+64(,[[EAX]],4), %eax
7077 ; LINUX-32-PIC-NEXT:    ret
7078
7079 ; LINUX-64-PIC: cxt00:
7080 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7081 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7082 ; LINUX-64-PIC-NEXT:    ret
7083
7084 ; DARWIN-32-STATIC: _cxt00:
7085 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7086 ; DARWIN-32-STATIC-NEXT:        leal    _xsrc+64(,[[EAX]],4), %eax
7087 ; DARWIN-32-STATIC-NEXT:        ret
7088
7089 ; DARWIN-32-DYNAMIC: _cxt00:
7090 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7091 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
7092 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7093 ; DARWIN-32-DYNAMIC-NEXT:       ret
7094
7095 ; DARWIN-32-PIC: _cxt00:
7096 ; DARWIN-32-PIC:        calll   L110$pb
7097 ; DARWIN-32-PIC-NEXT: L110$pb:
7098 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7099 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7100 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L110$pb([[EAX]]), [[EAX:%e.x]]
7101 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7102 ; DARWIN-32-PIC-NEXT:   ret
7103
7104 ; DARWIN-64-STATIC: _cxt00:
7105 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7106 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7107 ; DARWIN-64-STATIC-NEXT:        ret
7108
7109 ; DARWIN-64-DYNAMIC: _cxt00:
7110 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7111 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7112 ; DARWIN-64-DYNAMIC-NEXT:       ret
7113
7114 ; DARWIN-64-PIC: _cxt00:
7115 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7116 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7117 ; DARWIN-64-PIC-NEXT:   ret
7118 }
7119
7120 define i8* @cat01(i64 %i) nounwind {
7121 entry:
7122         %0 = add i64 %i, 16
7123         %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7124         %2 = bitcast i32* %1 to i8*
7125         ret i8* %2
7126 ; LINUX-64-STATIC: cat01:
7127 ; LINUX-64-STATIC: leaq    dst+64(,%rdi,4), %rax
7128 ; LINUX-64-STATIC: ret
7129
7130 ; LINUX-32-STATIC: cat01:
7131 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7132 ; LINUX-32-STATIC-NEXT:         leal    dst+64(,[[EAX]],4), %eax
7133 ; LINUX-32-STATIC-NEXT:         ret
7134
7135 ; LINUX-32-PIC: cat01:
7136 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7137 ; LINUX-32-PIC-NEXT:    leal    dst+64(,[[EAX]],4), %eax
7138 ; LINUX-32-PIC-NEXT:    ret
7139
7140 ; LINUX-64-PIC: cat01:
7141 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
7142 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7143 ; LINUX-64-PIC-NEXT:    ret
7144
7145 ; DARWIN-32-STATIC: _cat01:
7146 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7147 ; DARWIN-32-STATIC-NEXT:        leal    _dst+64(,[[EAX]],4), %eax
7148 ; DARWIN-32-STATIC-NEXT:        ret
7149
7150 ; DARWIN-32-DYNAMIC: _cat01:
7151 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7152 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
7153 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7154 ; DARWIN-32-DYNAMIC-NEXT:       ret
7155
7156 ; DARWIN-32-PIC: _cat01:
7157 ; DARWIN-32-PIC:        calll   L111$pb
7158 ; DARWIN-32-PIC-NEXT: L111$pb:
7159 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7160 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7161 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L111$pb([[EAX]]), [[EAX:%e.x]]
7162 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7163 ; DARWIN-32-PIC-NEXT:   ret
7164
7165 ; DARWIN-64-STATIC: _cat01:
7166 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7167 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7168 ; DARWIN-64-STATIC-NEXT:        ret
7169
7170 ; DARWIN-64-DYNAMIC: _cat01:
7171 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7172 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7173 ; DARWIN-64-DYNAMIC-NEXT:       ret
7174
7175 ; DARWIN-64-PIC: _cat01:
7176 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7177 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7178 ; DARWIN-64-PIC-NEXT:   ret
7179 }
7180
7181 define i8* @cxt01(i64 %i) nounwind {
7182 entry:
7183         %0 = add i64 %i, 16
7184         %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7185         %2 = bitcast i32* %1 to i8*
7186         ret i8* %2
7187 ; LINUX-64-STATIC: cxt01:
7188 ; LINUX-64-STATIC: leaq    xdst+64(,%rdi,4), %rax
7189 ; LINUX-64-STATIC: ret
7190
7191 ; LINUX-32-STATIC: cxt01:
7192 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7193 ; LINUX-32-STATIC-NEXT:         leal    xdst+64(,[[EAX]],4), %eax
7194 ; LINUX-32-STATIC-NEXT:         ret
7195
7196 ; LINUX-32-PIC: cxt01:
7197 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7198 ; LINUX-32-PIC-NEXT:    leal    xdst+64(,[[EAX]],4), %eax
7199 ; LINUX-32-PIC-NEXT:    ret
7200
7201 ; LINUX-64-PIC: cxt01:
7202 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7203 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7204 ; LINUX-64-PIC-NEXT:    ret
7205
7206 ; DARWIN-32-STATIC: _cxt01:
7207 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7208 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+64(,[[EAX]],4), %eax
7209 ; DARWIN-32-STATIC-NEXT:        ret
7210
7211 ; DARWIN-32-DYNAMIC: _cxt01:
7212 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7213 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
7214 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7215 ; DARWIN-32-DYNAMIC-NEXT:       ret
7216
7217 ; DARWIN-32-PIC: _cxt01:
7218 ; DARWIN-32-PIC:        calll   L112$pb
7219 ; DARWIN-32-PIC-NEXT: L112$pb:
7220 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7221 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7222 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L112$pb([[EAX]]), [[EAX:%e.x]]
7223 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7224 ; DARWIN-32-PIC-NEXT:   ret
7225
7226 ; DARWIN-64-STATIC: _cxt01:
7227 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7228 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7229 ; DARWIN-64-STATIC-NEXT:        ret
7230
7231 ; DARWIN-64-DYNAMIC: _cxt01:
7232 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7233 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7234 ; DARWIN-64-DYNAMIC-NEXT:       ret
7235
7236 ; DARWIN-64-PIC: _cxt01:
7237 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7238 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7239 ; DARWIN-64-PIC-NEXT:   ret
7240 }
7241
7242 define i8* @cat02(i64 %i) nounwind {
7243 entry:
7244         %0 = load i32** @ptr, align 8
7245         %1 = add i64 %i, 16
7246         %2 = getelementptr i32* %0, i64 %1
7247         %3 = bitcast i32* %2 to i8*
7248         ret i8* %3
7249 ; LINUX-64-STATIC: cat02:
7250 ; LINUX-64-STATIC: movq    ptr(%rip), [[RAX:%r.x]]
7251 ; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7252 ; LINUX-64-STATIC: ret
7253
7254 ; LINUX-32-STATIC: cat02:
7255 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7256 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
7257 ; LINUX-32-STATIC-NEXT:         leal    64([[ECX]],[[EAX]],4), %eax
7258 ; LINUX-32-STATIC-NEXT:         ret
7259
7260 ; LINUX-32-PIC: cat02:
7261 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7262 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
7263 ; LINUX-32-PIC-NEXT:    leal    64([[ECX]],[[EAX]],4), %eax
7264 ; LINUX-32-PIC-NEXT:    ret
7265
7266 ; LINUX-64-PIC: cat02:
7267 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7268 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), [[RAX:%r.x]]
7269 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7270 ; LINUX-64-PIC-NEXT:    ret
7271
7272 ; DARWIN-32-STATIC: _cat02:
7273 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7274 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
7275 ; DARWIN-32-STATIC-NEXT:        leal    64([[ECX]],[[EAX]],4), %eax
7276 ; DARWIN-32-STATIC-NEXT:        ret
7277
7278 ; DARWIN-32-DYNAMIC: _cat02:
7279 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[EAX:%e.x]]
7280 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
7281 ; DARWIN-32-DYNAMIC-NEXT:       movl    4(%esp), [[ECX:%e.x]]
7282 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[EAX]],[[ECX]],4), %eax
7283 ; DARWIN-32-DYNAMIC-NEXT:       ret
7284
7285 ; DARWIN-32-PIC: _cat02:
7286 ; DARWIN-32-PIC:        calll   L113$pb
7287 ; DARWIN-32-PIC-NEXT: L113$pb:
7288 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7289 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L113$pb([[EAX]]), [[EAX:%e.x]]
7290 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
7291 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7292 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7293 ; DARWIN-32-PIC-NEXT:   ret
7294
7295 ; DARWIN-64-STATIC: _cat02:
7296 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7297 ; DARWIN-64-STATIC-NEXT:        movq    ([[RAX]]), [[RAX:%r.x]]
7298 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7299 ; DARWIN-64-STATIC-NEXT:        ret
7300
7301 ; DARWIN-64-DYNAMIC: _cat02:
7302 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7303 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RAX]]), [[RAX:%r.x]]
7304 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7305 ; DARWIN-64-DYNAMIC-NEXT:       ret
7306
7307 ; DARWIN-64-PIC: _cat02:
7308 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7309 ; DARWIN-64-PIC-NEXT:   movq    ([[RAX]]), [[RAX:%r.x]]
7310 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7311 ; DARWIN-64-PIC-NEXT:   ret
7312 }
7313
7314 define i8* @cat03(i64 %i) nounwind {
7315 entry:
7316         %0 = add i64 %i, 16
7317         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7318         %2 = bitcast i32* %1 to i8*
7319         ret i8* %2
7320 ; LINUX-64-STATIC: cat03:
7321 ; LINUX-64-STATIC: leaq    dsrc+64(,%rdi,4), %rax
7322 ; LINUX-64-STATIC: ret
7323
7324 ; LINUX-32-STATIC: cat03:
7325 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7326 ; LINUX-32-STATIC-NEXT:         leal    dsrc+64(,[[EAX]],4), %eax
7327 ; LINUX-32-STATIC-NEXT:         ret
7328
7329 ; LINUX-32-PIC: cat03:
7330 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7331 ; LINUX-32-PIC-NEXT:    leal    dsrc+64(,[[EAX]],4), %eax
7332 ; LINUX-32-PIC-NEXT:    ret
7333
7334 ; LINUX-64-PIC: cat03:
7335 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7336 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7337 ; LINUX-64-PIC-NEXT:    ret
7338
7339 ; DARWIN-32-STATIC: _cat03:
7340 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7341 ; DARWIN-32-STATIC-NEXT:        leal    _dsrc+64(,[[EAX]],4), %eax
7342 ; DARWIN-32-STATIC-NEXT:        ret
7343
7344 ; DARWIN-32-DYNAMIC: _cat03:
7345 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7346 ; DARWIN-32-DYNAMIC-NEXT:       leal    _dsrc+64(,[[EAX]],4), %eax
7347 ; DARWIN-32-DYNAMIC-NEXT:       ret
7348
7349 ; DARWIN-32-PIC: _cat03:
7350 ; DARWIN-32-PIC:        calll   L114$pb
7351 ; DARWIN-32-PIC-NEXT: L114$pb:
7352 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7353 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7354 ; DARWIN-32-PIC-NEXT:   leal    (_dsrc-L114$pb)+64([[EAX]],[[ECX]],4), %eax
7355 ; DARWIN-32-PIC-NEXT:   ret
7356
7357 ; DARWIN-64-STATIC: _cat03:
7358 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
7359 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7360 ; DARWIN-64-STATIC-NEXT:        ret
7361
7362 ; DARWIN-64-DYNAMIC: _cat03:
7363 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
7364 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7365 ; DARWIN-64-DYNAMIC-NEXT:       ret
7366
7367 ; DARWIN-64-PIC: _cat03:
7368 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
7369 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7370 ; DARWIN-64-PIC-NEXT:   ret
7371 }
7372
7373 define i8* @cat04(i64 %i) nounwind {
7374 entry:
7375         %0 = add i64 %i, 16
7376         %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
7377         %2 = bitcast i32* %1 to i8*
7378         ret i8* %2
7379 ; LINUX-64-STATIC: cat04:
7380 ; LINUX-64-STATIC: leaq    ddst+64(,%rdi,4), %rax
7381 ; LINUX-64-STATIC: ret
7382
7383 ; LINUX-32-STATIC: cat04:
7384 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7385 ; LINUX-32-STATIC-NEXT:         leal    ddst+64(,[[EAX]],4), %eax
7386 ; LINUX-32-STATIC-NEXT:         ret
7387
7388 ; LINUX-32-PIC: cat04:
7389 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7390 ; LINUX-32-PIC-NEXT:    leal    ddst+64(,[[EAX]],4), %eax
7391 ; LINUX-32-PIC-NEXT:    ret
7392
7393 ; LINUX-64-PIC: cat04:
7394 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
7395 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7396 ; LINUX-64-PIC-NEXT:    ret
7397
7398 ; DARWIN-32-STATIC: _cat04:
7399 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7400 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+64(,[[EAX]],4), %eax
7401 ; DARWIN-32-STATIC-NEXT:        ret
7402
7403 ; DARWIN-32-DYNAMIC: _cat04:
7404 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7405 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+64(,[[EAX]],4), %eax
7406 ; DARWIN-32-DYNAMIC-NEXT:       ret
7407
7408 ; DARWIN-32-PIC: _cat04:
7409 ; DARWIN-32-PIC:        calll   L115$pb
7410 ; DARWIN-32-PIC-NEXT: L115$pb:
7411 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7412 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7413 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L115$pb)+64([[EAX]],[[ECX]],4), %eax
7414 ; DARWIN-32-PIC-NEXT:   ret
7415
7416 ; DARWIN-64-STATIC: _cat04:
7417 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
7418 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7419 ; DARWIN-64-STATIC-NEXT:        ret
7420
7421 ; DARWIN-64-DYNAMIC: _cat04:
7422 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
7423 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7424 ; DARWIN-64-DYNAMIC-NEXT:       ret
7425
7426 ; DARWIN-64-PIC: _cat04:
7427 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
7428 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7429 ; DARWIN-64-PIC-NEXT:   ret
7430 }
7431
7432 define i8* @cat05(i64 %i) nounwind {
7433 entry:
7434         %0 = load i32** @dptr, align 8
7435         %1 = add i64 %i, 16
7436         %2 = getelementptr i32* %0, i64 %1
7437         %3 = bitcast i32* %2 to i8*
7438         ret i8* %3
7439 ; LINUX-64-STATIC: cat05:
7440 ; LINUX-64-STATIC: movq    dptr(%rip), [[RAX:%r.x]]
7441 ; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7442 ; LINUX-64-STATIC: ret
7443
7444 ; LINUX-32-STATIC: cat05:
7445 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7446 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
7447 ; LINUX-32-STATIC-NEXT:         leal    64([[ECX]],[[EAX]],4), %eax
7448 ; LINUX-32-STATIC-NEXT:         ret
7449
7450 ; LINUX-32-PIC: cat05:
7451 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7452 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
7453 ; LINUX-32-PIC-NEXT:    leal    64([[ECX]],[[EAX]],4), %eax
7454 ; LINUX-32-PIC-NEXT:    ret
7455
7456 ; LINUX-64-PIC: cat05:
7457 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
7458 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), [[RAX:%r.x]]
7459 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7460 ; LINUX-64-PIC-NEXT:    ret
7461
7462 ; DARWIN-32-STATIC: _cat05:
7463 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7464 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
7465 ; DARWIN-32-STATIC-NEXT:        leal    64([[ECX]],[[EAX]],4), %eax
7466 ; DARWIN-32-STATIC-NEXT:        ret
7467
7468 ; DARWIN-32-DYNAMIC: _cat05:
7469 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7470 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
7471 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7472 ; DARWIN-32-DYNAMIC-NEXT:       ret
7473
7474 ; DARWIN-32-PIC: _cat05:
7475 ; DARWIN-32-PIC:        calll   L116$pb
7476 ; DARWIN-32-PIC-NEXT: L116$pb:
7477 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7478 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7479 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L116$pb([[EAX]]), [[EAX:%e.x]]
7480 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7481 ; DARWIN-32-PIC-NEXT:   ret
7482
7483 ; DARWIN-64-STATIC: _cat05:
7484 ; DARWIN-64-STATIC:     movq    _dptr(%rip), [[RAX:%r.x]]
7485 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7486 ; DARWIN-64-STATIC-NEXT:        ret
7487
7488 ; DARWIN-64-DYNAMIC: _cat05:
7489 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), [[RAX:%r.x]]
7490 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7491 ; DARWIN-64-DYNAMIC-NEXT:       ret
7492
7493 ; DARWIN-64-PIC: _cat05:
7494 ; DARWIN-64-PIC:        movq    _dptr(%rip), [[RAX:%r.x]]
7495 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7496 ; DARWIN-64-PIC-NEXT:   ret
7497 }
7498
7499 define i8* @cat06(i64 %i) nounwind {
7500 entry:
7501         %0 = add i64 %i, 16
7502         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
7503         %2 = bitcast i32* %1 to i8*
7504         ret i8* %2
7505 ; LINUX-64-STATIC: cat06:
7506 ; LINUX-64-STATIC: leaq    lsrc+64(,%rdi,4), %rax
7507 ; LINUX-64-STATIC: ret
7508
7509 ; LINUX-32-STATIC: cat06:
7510 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7511 ; LINUX-32-STATIC-NEXT:         leal    lsrc+64(,[[EAX]],4), %eax
7512 ; LINUX-32-STATIC-NEXT:         ret
7513
7514 ; LINUX-32-PIC: cat06:
7515 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7516 ; LINUX-32-PIC-NEXT:    leal    lsrc+64(,[[EAX]],4), %eax
7517 ; LINUX-32-PIC-NEXT:    ret
7518
7519 ; LINUX-64-PIC: cat06:
7520 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
7521 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7522 ; LINUX-64-PIC-NEXT:    ret
7523
7524 ; DARWIN-32-STATIC: _cat06:
7525 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7526 ; DARWIN-32-STATIC-NEXT:        leal    _lsrc+64(,[[EAX]],4), %eax
7527 ; DARWIN-32-STATIC-NEXT:        ret
7528
7529 ; DARWIN-32-DYNAMIC: _cat06:
7530 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7531 ; DARWIN-32-DYNAMIC-NEXT:       leal    _lsrc+64(,[[EAX]],4), %eax
7532 ; DARWIN-32-DYNAMIC-NEXT:       ret
7533
7534 ; DARWIN-32-PIC: _cat06:
7535 ; DARWIN-32-PIC:        calll   L117$pb
7536 ; DARWIN-32-PIC-NEXT: L117$pb:
7537 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7538 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7539 ; DARWIN-32-PIC-NEXT:   leal    (_lsrc-L117$pb)+64([[EAX]],[[ECX]],4), %eax
7540 ; DARWIN-32-PIC-NEXT:   ret
7541
7542 ; DARWIN-64-STATIC: _cat06:
7543 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
7544 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7545 ; DARWIN-64-STATIC-NEXT:        ret
7546
7547 ; DARWIN-64-DYNAMIC: _cat06:
7548 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
7549 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7550 ; DARWIN-64-DYNAMIC-NEXT:       ret
7551
7552 ; DARWIN-64-PIC: _cat06:
7553 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
7554 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7555 ; DARWIN-64-PIC-NEXT:   ret
7556 }
7557
7558 define i8* @cat07(i64 %i) nounwind {
7559 entry:
7560         %0 = add i64 %i, 16
7561         %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
7562         %2 = bitcast i32* %1 to i8*
7563         ret i8* %2
7564 ; LINUX-64-STATIC: cat07:
7565 ; LINUX-64-STATIC: leaq    ldst+64(,%rdi,4), %rax
7566 ; LINUX-64-STATIC: ret
7567
7568 ; LINUX-32-STATIC: cat07:
7569 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7570 ; LINUX-32-STATIC-NEXT:         leal    ldst+64(,[[EAX]],4), %eax
7571 ; LINUX-32-STATIC-NEXT:         ret
7572
7573 ; LINUX-32-PIC: cat07:
7574 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7575 ; LINUX-32-PIC-NEXT:    leal    ldst+64(,[[EAX]],4), %eax
7576 ; LINUX-32-PIC-NEXT:    ret
7577
7578 ; LINUX-64-PIC: cat07:
7579 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
7580 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7581 ; LINUX-64-PIC-NEXT:    ret
7582
7583 ; DARWIN-32-STATIC: _cat07:
7584 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7585 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+64(,[[EAX]],4), %eax
7586 ; DARWIN-32-STATIC-NEXT:        ret
7587
7588 ; DARWIN-32-DYNAMIC: _cat07:
7589 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7590 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+64(,[[EAX]],4), %eax
7591 ; DARWIN-32-DYNAMIC-NEXT:       ret
7592
7593 ; DARWIN-32-PIC: _cat07:
7594 ; DARWIN-32-PIC:        calll   L118$pb
7595 ; DARWIN-32-PIC-NEXT: L118$pb:
7596 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7597 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7598 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L118$pb)+64([[EAX]],[[ECX]],4), %eax
7599 ; DARWIN-32-PIC-NEXT:   ret
7600
7601 ; DARWIN-64-STATIC: _cat07:
7602 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
7603 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7604 ; DARWIN-64-STATIC-NEXT:        ret
7605
7606 ; DARWIN-64-DYNAMIC: _cat07:
7607 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
7608 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7609 ; DARWIN-64-DYNAMIC-NEXT:       ret
7610
7611 ; DARWIN-64-PIC: _cat07:
7612 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
7613 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7614 ; DARWIN-64-PIC-NEXT:   ret
7615 }
7616
7617 define i8* @cat08(i64 %i) nounwind {
7618 entry:
7619         %0 = load i32** @lptr, align 8
7620         %1 = add i64 %i, 16
7621         %2 = getelementptr i32* %0, i64 %1
7622         %3 = bitcast i32* %2 to i8*
7623         ret i8* %3
7624 ; LINUX-64-STATIC: cat08:
7625 ; LINUX-64-STATIC: movq    lptr(%rip), [[RAX:%r.x]]
7626 ; LINUX-64-STATIC: leaq    64([[RAX]],%rdi,4), %rax
7627 ; LINUX-64-STATIC: ret
7628
7629 ; LINUX-32-STATIC: cat08:
7630 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7631 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
7632 ; LINUX-32-STATIC-NEXT:         leal    64([[ECX]],[[EAX]],4), %eax
7633 ; LINUX-32-STATIC-NEXT:         ret
7634
7635 ; LINUX-32-PIC: cat08:
7636 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7637 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
7638 ; LINUX-32-PIC-NEXT:    leal    64([[ECX]],[[EAX]],4), %eax
7639 ; LINUX-32-PIC-NEXT:    ret
7640
7641 ; LINUX-64-PIC: cat08:
7642 ; LINUX-64-PIC:         movq    lptr(%rip), [[RAX:%r.x]]
7643 ; LINUX-64-PIC-NEXT:    leaq    64([[RAX]],%rdi,4), %rax
7644 ; LINUX-64-PIC-NEXT:    ret
7645
7646 ; DARWIN-32-STATIC: _cat08:
7647 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7648 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
7649 ; DARWIN-32-STATIC-NEXT:        leal    64([[ECX]],[[EAX]],4), %eax
7650 ; DARWIN-32-STATIC-NEXT:        ret
7651
7652 ; DARWIN-32-DYNAMIC: _cat08:
7653 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7654 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
7655 ; DARWIN-32-DYNAMIC-NEXT:       leal    64([[ECX]],[[EAX]],4), %eax
7656 ; DARWIN-32-DYNAMIC-NEXT:       ret
7657
7658 ; DARWIN-32-PIC: _cat08:
7659 ; DARWIN-32-PIC:        calll   L119$pb
7660 ; DARWIN-32-PIC-NEXT: L119$pb:
7661 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7662 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7663 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L119$pb([[EAX]]), [[EAX:%e.x]]
7664 ; DARWIN-32-PIC-NEXT:   leal    64([[EAX]],[[ECX]],4), %eax
7665 ; DARWIN-32-PIC-NEXT:   ret
7666
7667 ; DARWIN-64-STATIC: _cat08:
7668 ; DARWIN-64-STATIC:     movq    _lptr(%rip), [[RAX:%r.x]]
7669 ; DARWIN-64-STATIC-NEXT:        leaq    64([[RAX]],%rdi,4), %rax
7670 ; DARWIN-64-STATIC-NEXT:        ret
7671
7672 ; DARWIN-64-DYNAMIC: _cat08:
7673 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), [[RAX:%r.x]]
7674 ; DARWIN-64-DYNAMIC-NEXT:       leaq    64([[RAX]],%rdi,4), %rax
7675 ; DARWIN-64-DYNAMIC-NEXT:       ret
7676
7677 ; DARWIN-64-PIC: _cat08:
7678 ; DARWIN-64-PIC:        movq    _lptr(%rip), [[RAX:%r.x]]
7679 ; DARWIN-64-PIC-NEXT:   leaq    64([[RAX]],%rdi,4), %rax
7680 ; DARWIN-64-PIC-NEXT:   ret
7681 }
7682
7683 define i8* @cam00(i64 %i) nounwind {
7684 entry:
7685         %0 = add i64 %i, 65536
7686         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
7687         %2 = bitcast i32* %1 to i8*
7688         ret i8* %2
7689 ; LINUX-64-STATIC: cam00:
7690 ; LINUX-64-STATIC: leaq    src+262144(,%rdi,4), %rax
7691 ; LINUX-64-STATIC: ret
7692
7693 ; LINUX-32-STATIC: cam00:
7694 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7695 ; LINUX-32-STATIC-NEXT:         leal    src+262144(,[[EAX]],4), %eax
7696 ; LINUX-32-STATIC-NEXT:         ret
7697
7698 ; LINUX-32-PIC: cam00:
7699 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7700 ; LINUX-32-PIC-NEXT:    leal    src+262144(,[[EAX]],4), %eax
7701 ; LINUX-32-PIC-NEXT:    ret
7702
7703 ; LINUX-64-PIC: cam00:
7704 ; LINUX-64-PIC:         movq    src@GOTPCREL(%rip), [[RAX:%r.x]]
7705 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7706 ; LINUX-64-PIC-NEXT:    ret
7707
7708 ; DARWIN-32-STATIC: _cam00:
7709 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7710 ; DARWIN-32-STATIC-NEXT:        leal    _src+262144(,[[EAX]],4), %eax
7711 ; DARWIN-32-STATIC-NEXT:        ret
7712
7713 ; DARWIN-32-DYNAMIC: _cam00:
7714 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7715 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_src$non_lazy_ptr, [[ECX:%e.x]]
7716 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
7717 ; DARWIN-32-DYNAMIC-NEXT:       ret
7718
7719 ; DARWIN-32-PIC: _cam00:
7720 ; DARWIN-32-PIC:        calll   L120$pb
7721 ; DARWIN-32-PIC-NEXT: L120$pb:
7722 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7723 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7724 ; DARWIN-32-PIC-NEXT:   movl    L_src$non_lazy_ptr-L120$pb([[EAX]]), [[EAX:%e.x]]
7725 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7726 ; DARWIN-32-PIC-NEXT:   ret
7727
7728 ; DARWIN-64-STATIC: _cam00:
7729 ; DARWIN-64-STATIC:     movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7730 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7731 ; DARWIN-64-STATIC-NEXT:        ret
7732
7733 ; DARWIN-64-DYNAMIC: _cam00:
7734 ; DARWIN-64-DYNAMIC:    movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7735 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7736 ; DARWIN-64-DYNAMIC-NEXT:       ret
7737
7738 ; DARWIN-64-PIC: _cam00:
7739 ; DARWIN-64-PIC:        movq    _src@GOTPCREL(%rip), [[RAX:%r.x]]
7740 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7741 ; DARWIN-64-PIC-NEXT:   ret
7742 }
7743
7744 define i8* @cxm00(i64 %i) nounwind {
7745 entry:
7746         %0 = add i64 %i, 65536
7747         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7748         %2 = bitcast i32* %1 to i8*
7749         ret i8* %2
7750 ; LINUX-64-STATIC: cxm00:
7751 ; LINUX-64-STATIC: leaq    xsrc+262144(,%rdi,4), %rax
7752 ; LINUX-64-STATIC: ret
7753
7754 ; LINUX-32-STATIC: cxm00:
7755 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7756 ; LINUX-32-STATIC-NEXT:         leal    xsrc+262144(,[[EAX]],4), %eax
7757 ; LINUX-32-STATIC-NEXT:         ret
7758
7759 ; LINUX-32-PIC: cxm00:
7760 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7761 ; LINUX-32-PIC-NEXT:    leal    xsrc+262144(,[[EAX]],4), %eax
7762 ; LINUX-32-PIC-NEXT:    ret
7763
7764 ; LINUX-64-PIC: cxm00:
7765 ; LINUX-64-PIC:         movq    xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7766 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7767 ; LINUX-64-PIC-NEXT:    ret
7768
7769 ; DARWIN-32-STATIC: _cxm00:
7770 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7771 ; DARWIN-32-STATIC-NEXT:        leal    _xsrc+262144(,[[EAX]],4), %eax
7772 ; DARWIN-32-STATIC-NEXT:        ret
7773
7774 ; DARWIN-32-DYNAMIC: _cxm00:
7775 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7776 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
7777 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
7778 ; DARWIN-32-DYNAMIC-NEXT:       ret
7779
7780 ; DARWIN-32-PIC: _cxm00:
7781 ; DARWIN-32-PIC:        calll   L121$pb
7782 ; DARWIN-32-PIC-NEXT: L121$pb:
7783 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7784 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7785 ; DARWIN-32-PIC-NEXT:   movl    L_xsrc$non_lazy_ptr-L121$pb([[EAX]]), [[EAX:%e.x]]
7786 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7787 ; DARWIN-32-PIC-NEXT:   ret
7788
7789 ; DARWIN-64-STATIC: _cxm00:
7790 ; DARWIN-64-STATIC:     movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7791 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7792 ; DARWIN-64-STATIC-NEXT:        ret
7793
7794 ; DARWIN-64-DYNAMIC: _cxm00:
7795 ; DARWIN-64-DYNAMIC:    movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7796 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7797 ; DARWIN-64-DYNAMIC-NEXT:       ret
7798
7799 ; DARWIN-64-PIC: _cxm00:
7800 ; DARWIN-64-PIC:        movq    _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7801 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7802 ; DARWIN-64-PIC-NEXT:   ret
7803 }
7804
7805 define i8* @cam01(i64 %i) nounwind {
7806 entry:
7807         %0 = add i64 %i, 65536
7808         %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7809         %2 = bitcast i32* %1 to i8*
7810         ret i8* %2
7811 ; LINUX-64-STATIC: cam01:
7812 ; LINUX-64-STATIC: leaq    dst+262144(,%rdi,4), %rax
7813 ; LINUX-64-STATIC: ret
7814
7815 ; LINUX-32-STATIC: cam01:
7816 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7817 ; LINUX-32-STATIC-NEXT:         leal    dst+262144(,[[EAX]],4), %eax
7818 ; LINUX-32-STATIC-NEXT:         ret
7819
7820 ; LINUX-32-PIC: cam01:
7821 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7822 ; LINUX-32-PIC-NEXT:    leal    dst+262144(,[[EAX]],4), %eax
7823 ; LINUX-32-PIC-NEXT:    ret
7824
7825 ; LINUX-64-PIC: cam01:
7826 ; LINUX-64-PIC:         movq    dst@GOTPCREL(%rip), [[RAX:%r.x]]
7827 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7828 ; LINUX-64-PIC-NEXT:    ret
7829
7830 ; DARWIN-32-STATIC: _cam01:
7831 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7832 ; DARWIN-32-STATIC-NEXT:        leal    _dst+262144(,[[EAX]],4), %eax
7833 ; DARWIN-32-STATIC-NEXT:        ret
7834
7835 ; DARWIN-32-DYNAMIC: _cam01:
7836 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7837 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_dst$non_lazy_ptr, [[ECX:%e.x]]
7838 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
7839 ; DARWIN-32-DYNAMIC-NEXT:       ret
7840
7841 ; DARWIN-32-PIC: _cam01:
7842 ; DARWIN-32-PIC:        calll   L122$pb
7843 ; DARWIN-32-PIC-NEXT: L122$pb:
7844 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7845 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7846 ; DARWIN-32-PIC-NEXT:   movl    L_dst$non_lazy_ptr-L122$pb([[EAX]]), [[EAX:%e.x]]
7847 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7848 ; DARWIN-32-PIC-NEXT:   ret
7849
7850 ; DARWIN-64-STATIC: _cam01:
7851 ; DARWIN-64-STATIC:     movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7852 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7853 ; DARWIN-64-STATIC-NEXT:        ret
7854
7855 ; DARWIN-64-DYNAMIC: _cam01:
7856 ; DARWIN-64-DYNAMIC:    movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7857 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7858 ; DARWIN-64-DYNAMIC-NEXT:       ret
7859
7860 ; DARWIN-64-PIC: _cam01:
7861 ; DARWIN-64-PIC:        movq    _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7862 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7863 ; DARWIN-64-PIC-NEXT:   ret
7864 }
7865
7866 define i8* @cxm01(i64 %i) nounwind {
7867 entry:
7868         %0 = add i64 %i, 65536
7869         %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7870         %2 = bitcast i32* %1 to i8*
7871         ret i8* %2
7872 ; LINUX-64-STATIC: cxm01:
7873 ; LINUX-64-STATIC: leaq    xdst+262144(,%rdi,4), %rax
7874 ; LINUX-64-STATIC: ret
7875
7876 ; LINUX-32-STATIC: cxm01:
7877 ; LINUX-32-STATIC:      movl    4(%esp), %eax
7878 ; LINUX-32-STATIC-NEXT:         leal    xdst+262144(,[[EAX]],4), %eax
7879 ; LINUX-32-STATIC-NEXT:         ret
7880
7881 ; LINUX-32-PIC: cxm01:
7882 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7883 ; LINUX-32-PIC-NEXT:    leal    xdst+262144(,[[EAX]],4), %eax
7884 ; LINUX-32-PIC-NEXT:    ret
7885
7886 ; LINUX-64-PIC: cxm01:
7887 ; LINUX-64-PIC:         movq    xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7888 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7889 ; LINUX-64-PIC-NEXT:    ret
7890
7891 ; DARWIN-32-STATIC: _cxm01:
7892 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7893 ; DARWIN-32-STATIC-NEXT:        leal    _xdst+262144(,[[EAX]],4), %eax
7894 ; DARWIN-32-STATIC-NEXT:        ret
7895
7896 ; DARWIN-32-DYNAMIC: _cxm01:
7897 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
7898 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_xdst$non_lazy_ptr, [[ECX:%e.x]]
7899 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
7900 ; DARWIN-32-DYNAMIC-NEXT:       ret
7901
7902 ; DARWIN-32-PIC: _cxm01:
7903 ; DARWIN-32-PIC:        calll   L123$pb
7904 ; DARWIN-32-PIC-NEXT: L123$pb:
7905 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7906 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7907 ; DARWIN-32-PIC-NEXT:   movl    L_xdst$non_lazy_ptr-L123$pb([[EAX]]), [[EAX:%e.x]]
7908 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7909 ; DARWIN-32-PIC-NEXT:   ret
7910
7911 ; DARWIN-64-STATIC: _cxm01:
7912 ; DARWIN-64-STATIC:     movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7913 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7914 ; DARWIN-64-STATIC-NEXT:        ret
7915
7916 ; DARWIN-64-DYNAMIC: _cxm01:
7917 ; DARWIN-64-DYNAMIC:    movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7918 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7919 ; DARWIN-64-DYNAMIC-NEXT:       ret
7920
7921 ; DARWIN-64-PIC: _cxm01:
7922 ; DARWIN-64-PIC:        movq    _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7923 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7924 ; DARWIN-64-PIC-NEXT:   ret
7925 }
7926
7927 define i8* @cam02(i64 %i) nounwind {
7928 entry:
7929         %0 = load i32** @ptr, align 8
7930         %1 = add i64 %i, 65536
7931         %2 = getelementptr i32* %0, i64 %1
7932         %3 = bitcast i32* %2 to i8*
7933         ret i8* %3
7934 ; LINUX-64-STATIC: cam02:
7935 ; LINUX-64-STATIC: movq    ptr(%rip), [[RAX:%r.x]]
7936 ; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
7937 ; LINUX-64-STATIC: ret
7938
7939 ; LINUX-32-STATIC: cam02:
7940 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
7941 ; LINUX-32-STATIC-NEXT:         movl    ptr, [[ECX:%e.x]]
7942 ; LINUX-32-STATIC-NEXT:         leal    262144([[ECX]],[[EAX]],4), %eax
7943 ; LINUX-32-STATIC-NEXT:         ret
7944
7945 ; LINUX-32-PIC: cam02:
7946 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
7947 ; LINUX-32-PIC-NEXT:    movl    ptr, [[ECX:%e.x]]
7948 ; LINUX-32-PIC-NEXT:    leal    262144([[ECX]],[[EAX]],4), %eax
7949 ; LINUX-32-PIC-NEXT:    ret
7950
7951 ; LINUX-64-PIC: cam02:
7952 ; LINUX-64-PIC:         movq    ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7953 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), [[RAX:%r.x]]
7954 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
7955 ; LINUX-64-PIC-NEXT:    ret
7956
7957 ; DARWIN-32-STATIC: _cam02:
7958 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
7959 ; DARWIN-32-STATIC-NEXT:        movl    _ptr, [[ECX:%e.x]]
7960 ; DARWIN-32-STATIC-NEXT:        leal    262144([[ECX]],[[EAX]],4), %eax
7961 ; DARWIN-32-STATIC-NEXT:        ret
7962
7963 ; DARWIN-32-DYNAMIC: _cam02:
7964 ; DARWIN-32-DYNAMIC:    movl    L_ptr$non_lazy_ptr, [[EAX:%e.x]]
7965 ; DARWIN-32-DYNAMIC-NEXT:       movl    ([[EAX]]), [[EAX:%e.x]]
7966 ; DARWIN-32-DYNAMIC-NEXT:       movl    4(%esp), [[ECX:%e.x]]
7967 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[EAX]],[[ECX]],4), %eax
7968 ; DARWIN-32-DYNAMIC-NEXT:       ret
7969
7970 ; DARWIN-32-PIC: _cam02:
7971 ; DARWIN-32-PIC:        calll   L124$pb
7972 ; DARWIN-32-PIC-NEXT: L124$pb:
7973 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
7974 ; DARWIN-32-PIC-NEXT:   movl    L_ptr$non_lazy_ptr-L124$pb([[EAX]]), [[EAX:%e.x]]
7975 ; DARWIN-32-PIC-NEXT:   movl    ([[EAX]]), [[EAX:%e.x]]
7976 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
7977 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
7978 ; DARWIN-32-PIC-NEXT:   ret
7979
7980 ; DARWIN-64-STATIC: _cam02:
7981 ; DARWIN-64-STATIC:     movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7982 ; DARWIN-64-STATIC-NEXT:        movq    ([[RAX]]), [[RAX:%r.x]]
7983 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
7984 ; DARWIN-64-STATIC-NEXT:        ret
7985
7986 ; DARWIN-64-DYNAMIC: _cam02:
7987 ; DARWIN-64-DYNAMIC:    movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7988 ; DARWIN-64-DYNAMIC-NEXT:       movq    ([[RAX]]), [[RAX:%r.x]]
7989 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
7990 ; DARWIN-64-DYNAMIC-NEXT:       ret
7991
7992 ; DARWIN-64-PIC: _cam02:
7993 ; DARWIN-64-PIC:        movq    _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7994 ; DARWIN-64-PIC-NEXT:   movq    ([[RAX]]), [[RAX:%r.x]]
7995 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
7996 ; DARWIN-64-PIC-NEXT:   ret
7997 }
7998
7999 define i8* @cam03(i64 %i) nounwind {
8000 entry:
8001         %0 = add i64 %i, 65536
8002         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
8003         %2 = bitcast i32* %1 to i8*
8004         ret i8* %2
8005 ; LINUX-64-STATIC: cam03:
8006 ; LINUX-64-STATIC: leaq    dsrc+262144(,%rdi,4), %rax
8007 ; LINUX-64-STATIC: ret
8008
8009 ; LINUX-32-STATIC: cam03:
8010 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8011 ; LINUX-32-STATIC-NEXT:         leal    dsrc+262144(,[[EAX]],4), %eax
8012 ; LINUX-32-STATIC-NEXT:         ret
8013
8014 ; LINUX-32-PIC: cam03:
8015 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8016 ; LINUX-32-PIC-NEXT:    leal    dsrc+262144(,[[EAX]],4), %eax
8017 ; LINUX-32-PIC-NEXT:    ret
8018
8019 ; LINUX-64-PIC: cam03:
8020 ; LINUX-64-PIC:         movq    dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
8021 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8022 ; LINUX-64-PIC-NEXT:    ret
8023
8024 ; DARWIN-32-STATIC: _cam03:
8025 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8026 ; DARWIN-32-STATIC-NEXT:        leal    _dsrc+262144(,[[EAX]],4), %eax
8027 ; DARWIN-32-STATIC-NEXT:        ret
8028
8029 ; DARWIN-32-DYNAMIC: _cam03:
8030 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8031 ; DARWIN-32-DYNAMIC-NEXT:       leal    _dsrc+262144(,[[EAX]],4), %eax
8032 ; DARWIN-32-DYNAMIC-NEXT:       ret
8033
8034 ; DARWIN-32-PIC: _cam03:
8035 ; DARWIN-32-PIC:        calll   L125$pb
8036 ; DARWIN-32-PIC-NEXT: L125$pb:
8037 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8038 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8039 ; DARWIN-32-PIC-NEXT:   leal    (_dsrc-L125$pb)+262144([[EAX]],[[ECX]],4), %eax
8040 ; DARWIN-32-PIC-NEXT:   ret
8041
8042 ; DARWIN-64-STATIC: _cam03:
8043 ; DARWIN-64-STATIC:     leaq    _dsrc(%rip), [[RAX:%r.x]]
8044 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8045 ; DARWIN-64-STATIC-NEXT:        ret
8046
8047 ; DARWIN-64-DYNAMIC: _cam03:
8048 ; DARWIN-64-DYNAMIC:    leaq    _dsrc(%rip), [[RAX:%r.x]]
8049 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8050 ; DARWIN-64-DYNAMIC-NEXT:       ret
8051
8052 ; DARWIN-64-PIC: _cam03:
8053 ; DARWIN-64-PIC:        leaq    _dsrc(%rip), [[RAX:%r.x]]
8054 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8055 ; DARWIN-64-PIC-NEXT:   ret
8056 }
8057
8058 define i8* @cam04(i64 %i) nounwind {
8059 entry:
8060         %0 = add i64 %i, 65536
8061         %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
8062         %2 = bitcast i32* %1 to i8*
8063         ret i8* %2
8064 ; LINUX-64-STATIC: cam04:
8065 ; LINUX-64-STATIC: leaq    ddst+262144(,%rdi,4), %rax
8066 ; LINUX-64-STATIC: ret
8067
8068 ; LINUX-32-STATIC: cam04:
8069 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8070 ; LINUX-32-STATIC-NEXT:         leal    ddst+262144(,[[EAX]],4), %eax
8071 ; LINUX-32-STATIC-NEXT:         ret
8072
8073 ; LINUX-32-PIC: cam04:
8074 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8075 ; LINUX-32-PIC-NEXT:    leal    ddst+262144(,[[EAX]],4), %eax
8076 ; LINUX-32-PIC-NEXT:    ret
8077
8078 ; LINUX-64-PIC: cam04:
8079 ; LINUX-64-PIC:         movq    ddst@GOTPCREL(%rip), [[RAX:%r.x]]
8080 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8081 ; LINUX-64-PIC-NEXT:    ret
8082
8083 ; DARWIN-32-STATIC: _cam04:
8084 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8085 ; DARWIN-32-STATIC-NEXT:        leal    _ddst+262144(,[[EAX]],4), %eax
8086 ; DARWIN-32-STATIC-NEXT:        ret
8087
8088 ; DARWIN-32-DYNAMIC: _cam04:
8089 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8090 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ddst+262144(,[[EAX]],4), %eax
8091 ; DARWIN-32-DYNAMIC-NEXT:       ret
8092
8093 ; DARWIN-32-PIC: _cam04:
8094 ; DARWIN-32-PIC:        calll   L126$pb
8095 ; DARWIN-32-PIC-NEXT: L126$pb:
8096 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8097 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8098 ; DARWIN-32-PIC-NEXT:   leal    (_ddst-L126$pb)+262144([[EAX]],[[ECX]],4), %eax
8099 ; DARWIN-32-PIC-NEXT:   ret
8100
8101 ; DARWIN-64-STATIC: _cam04:
8102 ; DARWIN-64-STATIC:     leaq    _ddst(%rip), [[RAX:%r.x]]
8103 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8104 ; DARWIN-64-STATIC-NEXT:        ret
8105
8106 ; DARWIN-64-DYNAMIC: _cam04:
8107 ; DARWIN-64-DYNAMIC:    leaq    _ddst(%rip), [[RAX:%r.x]]
8108 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8109 ; DARWIN-64-DYNAMIC-NEXT:       ret
8110
8111 ; DARWIN-64-PIC: _cam04:
8112 ; DARWIN-64-PIC:        leaq    _ddst(%rip), [[RAX:%r.x]]
8113 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8114 ; DARWIN-64-PIC-NEXT:   ret
8115 }
8116
8117 define i8* @cam05(i64 %i) nounwind {
8118 entry:
8119         %0 = load i32** @dptr, align 8
8120         %1 = add i64 %i, 65536
8121         %2 = getelementptr i32* %0, i64 %1
8122         %3 = bitcast i32* %2 to i8*
8123         ret i8* %3
8124 ; LINUX-64-STATIC: cam05:
8125 ; LINUX-64-STATIC: movq    dptr(%rip), [[RAX:%r.x]]
8126 ; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
8127 ; LINUX-64-STATIC: ret
8128
8129 ; LINUX-32-STATIC: cam05:
8130 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8131 ; LINUX-32-STATIC-NEXT:         movl    dptr, [[ECX:%e.x]]
8132 ; LINUX-32-STATIC-NEXT:         leal    262144([[ECX]],[[EAX]],4), %eax
8133 ; LINUX-32-STATIC-NEXT:         ret
8134
8135 ; LINUX-32-PIC: cam05:
8136 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8137 ; LINUX-32-PIC-NEXT:    movl    dptr, [[ECX:%e.x]]
8138 ; LINUX-32-PIC-NEXT:    leal    262144([[ECX]],[[EAX]],4), %eax
8139 ; LINUX-32-PIC-NEXT:    ret
8140
8141 ; LINUX-64-PIC: cam05:
8142 ; LINUX-64-PIC:         movq    dptr@GOTPCREL(%rip), [[RAX:%r.x]]
8143 ; LINUX-64-PIC-NEXT:    movq    ([[RAX]]), [[RAX:%r.x]]
8144 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8145 ; LINUX-64-PIC-NEXT:    ret
8146
8147 ; DARWIN-32-STATIC: _cam05:
8148 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8149 ; DARWIN-32-STATIC-NEXT:        movl    _dptr, [[ECX:%e.x]]
8150 ; DARWIN-32-STATIC-NEXT:        leal    262144([[ECX]],[[EAX]],4), %eax
8151 ; DARWIN-32-STATIC-NEXT:        ret
8152
8153 ; DARWIN-32-DYNAMIC: _cam05:
8154 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8155 ; DARWIN-32-DYNAMIC-NEXT:       movl    _dptr, [[ECX:%e.x]]
8156 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
8157 ; DARWIN-32-DYNAMIC-NEXT:       ret
8158
8159 ; DARWIN-32-PIC: _cam05:
8160 ; DARWIN-32-PIC:        calll   L127$pb
8161 ; DARWIN-32-PIC-NEXT: L127$pb:
8162 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8163 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8164 ; DARWIN-32-PIC-NEXT:   movl    _dptr-L127$pb([[EAX]]), [[EAX:%e.x]]
8165 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
8166 ; DARWIN-32-PIC-NEXT:   ret
8167
8168 ; DARWIN-64-STATIC: _cam05:
8169 ; DARWIN-64-STATIC:     movq    _dptr(%rip), [[RAX:%r.x]]
8170 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8171 ; DARWIN-64-STATIC-NEXT:        ret
8172
8173 ; DARWIN-64-DYNAMIC: _cam05:
8174 ; DARWIN-64-DYNAMIC:    movq    _dptr(%rip), [[RAX:%r.x]]
8175 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8176 ; DARWIN-64-DYNAMIC-NEXT:       ret
8177
8178 ; DARWIN-64-PIC: _cam05:
8179 ; DARWIN-64-PIC:        movq    _dptr(%rip), [[RAX:%r.x]]
8180 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8181 ; DARWIN-64-PIC-NEXT:   ret
8182 }
8183
8184 define i8* @cam06(i64 %i) nounwind {
8185 entry:
8186         %0 = add i64 %i, 65536
8187         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
8188         %2 = bitcast i32* %1 to i8*
8189         ret i8* %2
8190 ; LINUX-64-STATIC: cam06:
8191 ; LINUX-64-STATIC: leaq    lsrc+262144(,%rdi,4), %rax
8192 ; LINUX-64-STATIC: ret
8193
8194 ; LINUX-32-STATIC: cam06:
8195 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8196 ; LINUX-32-STATIC-NEXT:         leal    lsrc+262144(,[[EAX]],4), %eax
8197 ; LINUX-32-STATIC-NEXT:         ret
8198
8199 ; LINUX-32-PIC: cam06:
8200 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8201 ; LINUX-32-PIC-NEXT:    leal    lsrc+262144(,[[EAX]],4), %eax
8202 ; LINUX-32-PIC-NEXT:    ret
8203
8204 ; LINUX-64-PIC: cam06:
8205 ; LINUX-64-PIC:         leaq    lsrc(%rip), [[RAX:%r.x]]
8206 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8207 ; LINUX-64-PIC-NEXT:    ret
8208
8209 ; DARWIN-32-STATIC: _cam06:
8210 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8211 ; DARWIN-32-STATIC-NEXT:        leal    _lsrc+262144(,[[EAX]],4), %eax
8212 ; DARWIN-32-STATIC-NEXT:        ret
8213
8214 ; DARWIN-32-DYNAMIC: _cam06:
8215 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8216 ; DARWIN-32-DYNAMIC-NEXT:       leal    _lsrc+262144(,[[EAX]],4), %eax
8217 ; DARWIN-32-DYNAMIC-NEXT:       ret
8218
8219 ; DARWIN-32-PIC: _cam06:
8220 ; DARWIN-32-PIC:        calll   L128$pb
8221 ; DARWIN-32-PIC-NEXT: L128$pb:
8222 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8223 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8224 ; DARWIN-32-PIC-NEXT:   leal    (_lsrc-L128$pb)+262144([[EAX]],[[ECX]],4), %eax
8225 ; DARWIN-32-PIC-NEXT:   ret
8226
8227 ; DARWIN-64-STATIC: _cam06:
8228 ; DARWIN-64-STATIC:     leaq    _lsrc(%rip), [[RAX:%r.x]]
8229 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8230 ; DARWIN-64-STATIC-NEXT:        ret
8231
8232 ; DARWIN-64-DYNAMIC: _cam06:
8233 ; DARWIN-64-DYNAMIC:    leaq    _lsrc(%rip), [[RAX:%r.x]]
8234 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8235 ; DARWIN-64-DYNAMIC-NEXT:       ret
8236
8237 ; DARWIN-64-PIC: _cam06:
8238 ; DARWIN-64-PIC:        leaq    _lsrc(%rip), [[RAX:%r.x]]
8239 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8240 ; DARWIN-64-PIC-NEXT:   ret
8241 }
8242
8243 define i8* @cam07(i64 %i) nounwind {
8244 entry:
8245         %0 = add i64 %i, 65536
8246         %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
8247         %2 = bitcast i32* %1 to i8*
8248         ret i8* %2
8249 ; LINUX-64-STATIC: cam07:
8250 ; LINUX-64-STATIC: leaq    ldst+262144(,%rdi,4), %rax
8251 ; LINUX-64-STATIC: ret
8252
8253 ; LINUX-32-STATIC: cam07:
8254 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8255 ; LINUX-32-STATIC-NEXT:         leal    ldst+262144(,[[EAX]],4), %eax
8256 ; LINUX-32-STATIC-NEXT:         ret
8257
8258 ; LINUX-32-PIC: cam07:
8259 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8260 ; LINUX-32-PIC-NEXT:    leal    ldst+262144(,[[EAX]],4), %eax
8261 ; LINUX-32-PIC-NEXT:    ret
8262
8263 ; LINUX-64-PIC: cam07:
8264 ; LINUX-64-PIC:         leaq    ldst(%rip), [[RAX:%r.x]]
8265 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8266 ; LINUX-64-PIC-NEXT:    ret
8267
8268 ; DARWIN-32-STATIC: _cam07:
8269 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8270 ; DARWIN-32-STATIC-NEXT:        leal    _ldst+262144(,[[EAX]],4), %eax
8271 ; DARWIN-32-STATIC-NEXT:        ret
8272
8273 ; DARWIN-32-DYNAMIC: _cam07:
8274 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8275 ; DARWIN-32-DYNAMIC-NEXT:       leal    _ldst+262144(,[[EAX]],4), %eax
8276 ; DARWIN-32-DYNAMIC-NEXT:       ret
8277
8278 ; DARWIN-32-PIC: _cam07:
8279 ; DARWIN-32-PIC:        calll   L129$pb
8280 ; DARWIN-32-PIC-NEXT: L129$pb:
8281 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8282 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8283 ; DARWIN-32-PIC-NEXT:   leal    (_ldst-L129$pb)+262144([[EAX]],[[ECX]],4), %eax
8284 ; DARWIN-32-PIC-NEXT:   ret
8285
8286 ; DARWIN-64-STATIC: _cam07:
8287 ; DARWIN-64-STATIC:     leaq    _ldst(%rip), [[RAX:%r.x]]
8288 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8289 ; DARWIN-64-STATIC-NEXT:        ret
8290
8291 ; DARWIN-64-DYNAMIC: _cam07:
8292 ; DARWIN-64-DYNAMIC:    leaq    _ldst(%rip), [[RAX:%r.x]]
8293 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8294 ; DARWIN-64-DYNAMIC-NEXT:       ret
8295
8296 ; DARWIN-64-PIC: _cam07:
8297 ; DARWIN-64-PIC:        leaq    _ldst(%rip), [[RAX:%r.x]]
8298 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8299 ; DARWIN-64-PIC-NEXT:   ret
8300 }
8301
8302 define i8* @cam08(i64 %i) nounwind {
8303 entry:
8304         %0 = load i32** @lptr, align 8
8305         %1 = add i64 %i, 65536
8306         %2 = getelementptr i32* %0, i64 %1
8307         %3 = bitcast i32* %2 to i8*
8308         ret i8* %3
8309 ; LINUX-64-STATIC: cam08:
8310 ; LINUX-64-STATIC: movq    lptr(%rip), [[RAX:%r.x]]
8311 ; LINUX-64-STATIC: leaq    262144([[RAX]],%rdi,4), %rax
8312 ; LINUX-64-STATIC: ret
8313
8314 ; LINUX-32-STATIC: cam08:
8315 ; LINUX-32-STATIC:      movl    4(%esp), [[EAX:%e.x]]
8316 ; LINUX-32-STATIC-NEXT:         movl    lptr, [[ECX:%e.x]]
8317 ; LINUX-32-STATIC-NEXT:         leal    262144([[ECX]],[[EAX]],4), %eax
8318 ; LINUX-32-STATIC-NEXT:         ret
8319
8320 ; LINUX-32-PIC: cam08:
8321 ; LINUX-32-PIC:         movl    4(%esp), [[EAX:%e.x]]
8322 ; LINUX-32-PIC-NEXT:    movl    lptr, [[ECX:%e.x]]
8323 ; LINUX-32-PIC-NEXT:    leal    262144([[ECX]],[[EAX]],4), %eax
8324 ; LINUX-32-PIC-NEXT:    ret
8325
8326 ; LINUX-64-PIC: cam08:
8327 ; LINUX-64-PIC:         movq    lptr(%rip), [[RAX:%r.x]]
8328 ; LINUX-64-PIC-NEXT:    leaq    262144([[RAX]],%rdi,4), %rax
8329 ; LINUX-64-PIC-NEXT:    ret
8330
8331 ; DARWIN-32-STATIC: _cam08:
8332 ; DARWIN-32-STATIC:     movl    4(%esp), [[EAX:%e.x]]
8333 ; DARWIN-32-STATIC-NEXT:        movl    _lptr, [[ECX:%e.x]]
8334 ; DARWIN-32-STATIC-NEXT:        leal    262144([[ECX]],[[EAX]],4), %eax
8335 ; DARWIN-32-STATIC-NEXT:        ret
8336
8337 ; DARWIN-32-DYNAMIC: _cam08:
8338 ; DARWIN-32-DYNAMIC:    movl    4(%esp), [[EAX:%e.x]]
8339 ; DARWIN-32-DYNAMIC-NEXT:       movl    _lptr, [[ECX:%e.x]]
8340 ; DARWIN-32-DYNAMIC-NEXT:       leal    262144([[ECX]],[[EAX]],4), %eax
8341 ; DARWIN-32-DYNAMIC-NEXT:       ret
8342
8343 ; DARWIN-32-PIC: _cam08:
8344 ; DARWIN-32-PIC:        calll   L130$pb
8345 ; DARWIN-32-PIC-NEXT: L130$pb:
8346 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8347 ; DARWIN-32-PIC-NEXT:   movl    4(%esp), [[ECX:%e.x]]
8348 ; DARWIN-32-PIC-NEXT:   movl    _lptr-L130$pb([[EAX]]), [[EAX:%e.x]]
8349 ; DARWIN-32-PIC-NEXT:   leal    262144([[EAX]],[[ECX]],4), %eax
8350 ; DARWIN-32-PIC-NEXT:   ret
8351
8352 ; DARWIN-64-STATIC: _cam08:
8353 ; DARWIN-64-STATIC:     movq    _lptr(%rip), [[RAX:%r.x]]
8354 ; DARWIN-64-STATIC-NEXT:        leaq    262144([[RAX]],%rdi,4), %rax
8355 ; DARWIN-64-STATIC-NEXT:        ret
8356
8357 ; DARWIN-64-DYNAMIC: _cam08:
8358 ; DARWIN-64-DYNAMIC:    movq    _lptr(%rip), [[RAX:%r.x]]
8359 ; DARWIN-64-DYNAMIC-NEXT:       leaq    262144([[RAX]],%rdi,4), %rax
8360 ; DARWIN-64-DYNAMIC-NEXT:       ret
8361
8362 ; DARWIN-64-PIC: _cam08:
8363 ; DARWIN-64-PIC:        movq    _lptr(%rip), [[RAX:%r.x]]
8364 ; DARWIN-64-PIC-NEXT:   leaq    262144([[RAX]],%rdi,4), %rax
8365 ; DARWIN-64-PIC-NEXT:   ret
8366 }
8367
8368 define void @lcallee() nounwind {
8369 entry:
8370         call void @x() nounwind
8371         call void @x() nounwind
8372         call void @x() nounwind
8373         call void @x() nounwind
8374         call void @x() nounwind
8375         call void @x() nounwind
8376         call void @x() nounwind
8377         ret void
8378 ; LINUX-64-STATIC: lcallee:
8379 ; LINUX-64-STATIC: callq   x
8380 ; LINUX-64-STATIC: callq   x
8381 ; LINUX-64-STATIC: callq   x
8382 ; LINUX-64-STATIC: callq   x
8383 ; LINUX-64-STATIC: callq   x
8384 ; LINUX-64-STATIC: callq   x
8385 ; LINUX-64-STATIC: callq   x
8386 ; LINUX-64-STATIC: ret
8387
8388 ; LINUX-32-STATIC: lcallee:
8389 ; LINUX-32-STATIC:      subl
8390 ; LINUX-32-STATIC-NEXT:         calll   x
8391 ; LINUX-32-STATIC-NEXT:         calll   x
8392 ; LINUX-32-STATIC-NEXT:         calll   x
8393 ; LINUX-32-STATIC-NEXT:         calll   x
8394 ; LINUX-32-STATIC-NEXT:         calll   x
8395 ; LINUX-32-STATIC-NEXT:         calll   x
8396 ; LINUX-32-STATIC-NEXT:         calll   x
8397 ; LINUX-32-STATIC-NEXT:         addl
8398 ; LINUX-32-STATIC-NEXT:         ret
8399
8400 ; LINUX-32-PIC: lcallee:
8401 ; LINUX-32-PIC:         subl
8402 ; LINUX-32-PIC-NEXT:    calll   x
8403 ; LINUX-32-PIC-NEXT:    calll   x
8404 ; LINUX-32-PIC-NEXT:    calll   x
8405 ; LINUX-32-PIC-NEXT:    calll   x
8406 ; LINUX-32-PIC-NEXT:    calll   x
8407 ; LINUX-32-PIC-NEXT:    calll   x
8408 ; LINUX-32-PIC-NEXT:    calll   x
8409 ; LINUX-32-PIC-NEXT:    addl
8410
8411 ; LINUX-32-PIC-NEXT:    ret
8412
8413 ; LINUX-64-PIC: lcallee:
8414 ; LINUX-64-PIC:         pushq
8415 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8416 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8417 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8418 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8419 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8420 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8421 ; LINUX-64-PIC-NEXT:    callq   x@PLT
8422 ; LINUX-64-PIC-NEXT:    popq
8423 ; LINUX-64-PIC-NEXT:    ret
8424
8425 ; DARWIN-32-STATIC: _lcallee:
8426 ; DARWIN-32-STATIC:     subl    $12, %esp
8427 ; DARWIN-32-STATIC-NEXT:        calll   _x
8428 ; DARWIN-32-STATIC-NEXT:        calll   _x
8429 ; DARWIN-32-STATIC-NEXT:        calll   _x
8430 ; DARWIN-32-STATIC-NEXT:        calll   _x
8431 ; DARWIN-32-STATIC-NEXT:        calll   _x
8432 ; DARWIN-32-STATIC-NEXT:        calll   _x
8433 ; DARWIN-32-STATIC-NEXT:        calll   _x
8434 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8435 ; DARWIN-32-STATIC-NEXT:        ret
8436
8437 ; DARWIN-32-DYNAMIC: _lcallee:
8438 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8439 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8440 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8441 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8442 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8443 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8444 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8445 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_x$stub
8446 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8447 ; DARWIN-32-DYNAMIC-NEXT:       ret
8448
8449 ; DARWIN-32-PIC: _lcallee:
8450 ; DARWIN-32-PIC:        subl    $12, %esp
8451 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8452 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8453 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8454 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8455 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8456 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8457 ; DARWIN-32-PIC-NEXT:   calll   L_x$stub
8458 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8459 ; DARWIN-32-PIC-NEXT:   ret
8460
8461 ; DARWIN-64-STATIC: _lcallee:
8462 ; DARWIN-64-STATIC:     pushq
8463 ; DARWIN-64-STATIC-NEXT:        callq   _x
8464 ; DARWIN-64-STATIC-NEXT:        callq   _x
8465 ; DARWIN-64-STATIC-NEXT:        callq   _x
8466 ; DARWIN-64-STATIC-NEXT:        callq   _x
8467 ; DARWIN-64-STATIC-NEXT:        callq   _x
8468 ; DARWIN-64-STATIC-NEXT:        callq   _x
8469 ; DARWIN-64-STATIC-NEXT:        callq   _x
8470 ; DARWIN-64-STATIC-NEXT:        popq
8471 ; DARWIN-64-STATIC-NEXT:        ret
8472
8473 ; DARWIN-64-DYNAMIC: _lcallee:
8474 ; DARWIN-64-DYNAMIC:    pushq
8475 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8476 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8477 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8478 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8479 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8480 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8481 ; DARWIN-64-DYNAMIC-NEXT:       callq   _x
8482 ; DARWIN-64-DYNAMIC-NEXT:       popq
8483 ; DARWIN-64-DYNAMIC-NEXT:       ret
8484
8485 ; DARWIN-64-PIC: _lcallee:
8486 ; DARWIN-64-PIC:        pushq
8487 ; DARWIN-64-PIC-NEXT:   callq   _x
8488 ; DARWIN-64-PIC-NEXT:   callq   _x
8489 ; DARWIN-64-PIC-NEXT:   callq   _x
8490 ; DARWIN-64-PIC-NEXT:   callq   _x
8491 ; DARWIN-64-PIC-NEXT:   callq   _x
8492 ; DARWIN-64-PIC-NEXT:   callq   _x
8493 ; DARWIN-64-PIC-NEXT:   callq   _x
8494 ; DARWIN-64-PIC-NEXT:   popq
8495 ; DARWIN-64-PIC-NEXT:   ret
8496 }
8497
8498 declare void @x()
8499
8500 define internal void @dcallee() nounwind {
8501 entry:
8502         call void @y() nounwind
8503         call void @y() nounwind
8504         call void @y() nounwind
8505         call void @y() nounwind
8506         call void @y() nounwind
8507         call void @y() nounwind
8508         call void @y() nounwind
8509         ret void
8510 ; LINUX-64-STATIC: dcallee:
8511 ; LINUX-64-STATIC: callq   y
8512 ; LINUX-64-STATIC: callq   y
8513 ; LINUX-64-STATIC: callq   y
8514 ; LINUX-64-STATIC: callq   y
8515 ; LINUX-64-STATIC: callq   y
8516 ; LINUX-64-STATIC: callq   y
8517 ; LINUX-64-STATIC: callq   y
8518 ; LINUX-64-STATIC: ret
8519
8520 ; LINUX-32-STATIC: dcallee:
8521 ; LINUX-32-STATIC:      subl
8522 ; LINUX-32-STATIC-NEXT:         calll   y
8523 ; LINUX-32-STATIC-NEXT:         calll   y
8524 ; LINUX-32-STATIC-NEXT:         calll   y
8525 ; LINUX-32-STATIC-NEXT:         calll   y
8526 ; LINUX-32-STATIC-NEXT:         calll   y
8527 ; LINUX-32-STATIC-NEXT:         calll   y
8528 ; LINUX-32-STATIC-NEXT:         calll   y
8529 ; LINUX-32-STATIC-NEXT:         addl
8530 ; LINUX-32-STATIC-NEXT:         ret
8531
8532 ; LINUX-32-PIC: dcallee:
8533 ; LINUX-32-PIC:         subl
8534 ; LINUX-32-PIC-NEXT:    calll   y
8535 ; LINUX-32-PIC-NEXT:    calll   y
8536 ; LINUX-32-PIC-NEXT:    calll   y
8537 ; LINUX-32-PIC-NEXT:    calll   y
8538 ; LINUX-32-PIC-NEXT:    calll   y
8539 ; LINUX-32-PIC-NEXT:    calll   y
8540 ; LINUX-32-PIC-NEXT:    calll   y
8541 ; LINUX-32-PIC-NEXT:    addl
8542
8543 ; LINUX-32-PIC-NEXT:    ret
8544
8545 ; LINUX-64-PIC: dcallee:
8546 ; LINUX-64-PIC:         pushq
8547 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8548 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8549 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8550 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8551 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8552 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8553 ; LINUX-64-PIC-NEXT:    callq   y@PLT
8554 ; LINUX-64-PIC-NEXT:    popq
8555 ; LINUX-64-PIC-NEXT:    ret
8556
8557 ; DARWIN-32-STATIC: _dcallee:
8558 ; DARWIN-32-STATIC:     subl    $12, %esp
8559 ; DARWIN-32-STATIC-NEXT:        calll   _y
8560 ; DARWIN-32-STATIC-NEXT:        calll   _y
8561 ; DARWIN-32-STATIC-NEXT:        calll   _y
8562 ; DARWIN-32-STATIC-NEXT:        calll   _y
8563 ; DARWIN-32-STATIC-NEXT:        calll   _y
8564 ; DARWIN-32-STATIC-NEXT:        calll   _y
8565 ; DARWIN-32-STATIC-NEXT:        calll   _y
8566 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8567 ; DARWIN-32-STATIC-NEXT:        ret
8568
8569 ; DARWIN-32-DYNAMIC: _dcallee:
8570 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8571 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8572 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8573 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8574 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8575 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8576 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8577 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_y$stub
8578 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8579 ; DARWIN-32-DYNAMIC-NEXT:       ret
8580
8581 ; DARWIN-32-PIC: _dcallee:
8582 ; DARWIN-32-PIC:        subl    $12, %esp
8583 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8584 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8585 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8586 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8587 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8588 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8589 ; DARWIN-32-PIC-NEXT:   calll   L_y$stub
8590 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8591 ; DARWIN-32-PIC-NEXT:   ret
8592
8593 ; DARWIN-64-STATIC: _dcallee:
8594 ; DARWIN-64-STATIC:     pushq
8595 ; DARWIN-64-STATIC-NEXT:        callq   _y
8596 ; DARWIN-64-STATIC-NEXT:        callq   _y
8597 ; DARWIN-64-STATIC-NEXT:        callq   _y
8598 ; DARWIN-64-STATIC-NEXT:        callq   _y
8599 ; DARWIN-64-STATIC-NEXT:        callq   _y
8600 ; DARWIN-64-STATIC-NEXT:        callq   _y
8601 ; DARWIN-64-STATIC-NEXT:        callq   _y
8602 ; DARWIN-64-STATIC-NEXT:        popq
8603 ; DARWIN-64-STATIC-NEXT:        ret
8604
8605 ; DARWIN-64-DYNAMIC: _dcallee:
8606 ; DARWIN-64-DYNAMIC:    pushq
8607 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8608 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8609 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8610 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8611 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8612 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8613 ; DARWIN-64-DYNAMIC-NEXT:       callq   _y
8614 ; DARWIN-64-DYNAMIC-NEXT:       popq
8615 ; DARWIN-64-DYNAMIC-NEXT:       ret
8616
8617 ; DARWIN-64-PIC: _dcallee:
8618 ; DARWIN-64-PIC:        pushq
8619 ; DARWIN-64-PIC-NEXT:   callq   _y
8620 ; DARWIN-64-PIC-NEXT:   callq   _y
8621 ; DARWIN-64-PIC-NEXT:   callq   _y
8622 ; DARWIN-64-PIC-NEXT:   callq   _y
8623 ; DARWIN-64-PIC-NEXT:   callq   _y
8624 ; DARWIN-64-PIC-NEXT:   callq   _y
8625 ; DARWIN-64-PIC-NEXT:   callq   _y
8626 ; DARWIN-64-PIC-NEXT:   popq
8627 ; DARWIN-64-PIC-NEXT:   ret
8628 }
8629
8630 declare void @y()
8631
8632 define void ()* @address() nounwind {
8633 entry:
8634         ret void ()* @callee
8635 ; LINUX-64-STATIC: address:
8636 ; LINUX-64-STATIC: movl    $callee, %eax
8637 ; LINUX-64-STATIC: ret
8638
8639 ; LINUX-32-STATIC: address:
8640 ; LINUX-32-STATIC:      movl    $callee, %eax
8641 ; LINUX-32-STATIC-NEXT:         ret
8642
8643 ; LINUX-32-PIC: address:
8644 ; LINUX-32-PIC:         movl    $callee, %eax
8645 ; LINUX-32-PIC-NEXT:    ret
8646
8647 ; LINUX-64-PIC: address:
8648 ; LINUX-64-PIC:         movq    callee@GOTPCREL(%rip), %rax
8649 ; LINUX-64-PIC-NEXT:    ret
8650
8651 ; DARWIN-32-STATIC: _address:
8652 ; DARWIN-32-STATIC:     movl    $_callee, %eax
8653 ; DARWIN-32-STATIC-NEXT:        ret
8654
8655 ; DARWIN-32-DYNAMIC: _address:
8656 ; DARWIN-32-DYNAMIC:    movl    L_callee$non_lazy_ptr, %eax
8657 ; DARWIN-32-DYNAMIC-NEXT:       ret
8658
8659 ; DARWIN-32-PIC: _address:
8660 ; DARWIN-32-PIC:        calll   L133$pb
8661 ; DARWIN-32-PIC-NEXT: L133$pb:
8662 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8663 ; DARWIN-32-PIC-NEXT:   movl    L_callee$non_lazy_ptr-L133$pb([[EAX]]), %eax
8664 ; DARWIN-32-PIC-NEXT:   ret
8665
8666 ; DARWIN-64-STATIC: _address:
8667 ; DARWIN-64-STATIC:     movq    _callee@GOTPCREL(%rip), %rax
8668 ; DARWIN-64-STATIC-NEXT:        ret
8669
8670 ; DARWIN-64-DYNAMIC: _address:
8671 ; DARWIN-64-DYNAMIC:    movq    _callee@GOTPCREL(%rip), %rax
8672 ; DARWIN-64-DYNAMIC-NEXT:       ret
8673
8674 ; DARWIN-64-PIC: _address:
8675 ; DARWIN-64-PIC:        movq    _callee@GOTPCREL(%rip), %rax
8676 ; DARWIN-64-PIC-NEXT:   ret
8677 }
8678
8679 declare void @callee()
8680
8681 define void ()* @laddress() nounwind {
8682 entry:
8683         ret void ()* @lcallee
8684 ; LINUX-64-STATIC: laddress:
8685 ; LINUX-64-STATIC: movl    $lcallee, %eax
8686 ; LINUX-64-STATIC: ret
8687
8688 ; LINUX-32-STATIC: laddress:
8689 ; LINUX-32-STATIC:      movl    $lcallee, %eax
8690 ; LINUX-32-STATIC-NEXT:         ret
8691
8692 ; LINUX-32-PIC: laddress:
8693 ; LINUX-32-PIC:         movl    $lcallee, %eax
8694 ; LINUX-32-PIC-NEXT:    ret
8695
8696 ; LINUX-64-PIC: laddress:
8697 ; LINUX-64-PIC:         movq    lcallee@GOTPCREL(%rip), %rax
8698 ; LINUX-64-PIC-NEXT:    ret
8699
8700 ; DARWIN-32-STATIC: _laddress:
8701 ; DARWIN-32-STATIC:     movl    $_lcallee, %eax
8702 ; DARWIN-32-STATIC-NEXT:        ret
8703
8704 ; DARWIN-32-DYNAMIC: _laddress:
8705 ; DARWIN-32-DYNAMIC:    movl    $_lcallee, %eax
8706 ; DARWIN-32-DYNAMIC-NEXT:       ret
8707
8708 ; DARWIN-32-PIC: _laddress:
8709 ; DARWIN-32-PIC:        calll   L134$pb
8710 ; DARWIN-32-PIC-NEXT: L134$pb:
8711 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8712 ; DARWIN-32-PIC-NEXT:   leal    _lcallee-L134$pb([[EAX]]), %eax
8713 ; DARWIN-32-PIC-NEXT:   ret
8714
8715 ; DARWIN-64-STATIC: _laddress:
8716 ; DARWIN-64-STATIC:     leaq    _lcallee(%rip), %rax
8717 ; DARWIN-64-STATIC-NEXT:        ret
8718
8719 ; DARWIN-64-DYNAMIC: _laddress:
8720 ; DARWIN-64-DYNAMIC:    leaq    _lcallee(%rip), %rax
8721 ; DARWIN-64-DYNAMIC-NEXT:       ret
8722
8723 ; DARWIN-64-PIC: _laddress:
8724 ; DARWIN-64-PIC:        leaq    _lcallee(%rip), %rax
8725 ; DARWIN-64-PIC-NEXT:   ret
8726 }
8727
8728 define void ()* @daddress() nounwind {
8729 entry:
8730         ret void ()* @dcallee
8731 ; LINUX-64-STATIC: daddress:
8732 ; LINUX-64-STATIC: movl    $dcallee, %eax
8733 ; LINUX-64-STATIC: ret
8734
8735 ; LINUX-32-STATIC: daddress:
8736 ; LINUX-32-STATIC:      movl    $dcallee, %eax
8737 ; LINUX-32-STATIC-NEXT:         ret
8738
8739 ; LINUX-32-PIC: daddress:
8740 ; LINUX-32-PIC:         movl    $dcallee, %eax
8741 ; LINUX-32-PIC-NEXT:    ret
8742
8743 ; LINUX-64-PIC: daddress:
8744 ; LINUX-64-PIC:         leaq    dcallee(%rip), %rax
8745 ; LINUX-64-PIC-NEXT:    ret
8746
8747 ; DARWIN-32-STATIC: _daddress:
8748 ; DARWIN-32-STATIC:     movl    $_dcallee, %eax
8749 ; DARWIN-32-STATIC-NEXT:        ret
8750
8751 ; DARWIN-32-DYNAMIC: _daddress:
8752 ; DARWIN-32-DYNAMIC:    movl    $_dcallee, %eax
8753 ; DARWIN-32-DYNAMIC-NEXT:       ret
8754
8755 ; DARWIN-32-PIC: _daddress:
8756 ; DARWIN-32-PIC:        calll   L135$pb
8757 ; DARWIN-32-PIC-NEXT: L135$pb:
8758 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
8759 ; DARWIN-32-PIC-NEXT:   leal    _dcallee-L135$pb([[EAX]]), %eax
8760 ; DARWIN-32-PIC-NEXT:   ret
8761
8762 ; DARWIN-64-STATIC: _daddress:
8763 ; DARWIN-64-STATIC:     leaq    _dcallee(%rip), %rax
8764 ; DARWIN-64-STATIC-NEXT:        ret
8765
8766 ; DARWIN-64-DYNAMIC: _daddress:
8767 ; DARWIN-64-DYNAMIC:    leaq    _dcallee(%rip), %rax
8768 ; DARWIN-64-DYNAMIC-NEXT:       ret
8769
8770 ; DARWIN-64-PIC: _daddress:
8771 ; DARWIN-64-PIC:        leaq    _dcallee(%rip), %rax
8772 ; DARWIN-64-PIC-NEXT:   ret
8773 }
8774
8775 define void @caller() nounwind {
8776 entry:
8777         call void @callee() nounwind
8778         call void @callee() nounwind
8779         ret void
8780 ; LINUX-64-STATIC: caller:
8781 ; LINUX-64-STATIC: callq   callee
8782 ; LINUX-64-STATIC: callq   callee
8783 ; LINUX-64-STATIC: ret
8784
8785 ; LINUX-32-STATIC: caller:
8786 ; LINUX-32-STATIC:      subl
8787 ; LINUX-32-STATIC-NEXT:         calll   callee
8788 ; LINUX-32-STATIC-NEXT:         calll   callee
8789 ; LINUX-32-STATIC-NEXT:         addl
8790 ; LINUX-32-STATIC-NEXT:         ret
8791
8792 ; LINUX-32-PIC: caller:
8793 ; LINUX-32-PIC:         subl
8794 ; LINUX-32-PIC-NEXT:    calll   callee
8795 ; LINUX-32-PIC-NEXT:    calll   callee
8796 ; LINUX-32-PIC-NEXT:    addl
8797
8798 ; LINUX-32-PIC-NEXT:    ret
8799
8800 ; LINUX-64-PIC: caller:
8801 ; LINUX-64-PIC:         pushq
8802 ; LINUX-64-PIC-NEXT:    callq   callee@PLT
8803 ; LINUX-64-PIC-NEXT:    callq   callee@PLT
8804 ; LINUX-64-PIC-NEXT:    popq
8805 ; LINUX-64-PIC-NEXT:    ret
8806
8807 ; DARWIN-32-STATIC: _caller:
8808 ; DARWIN-32-STATIC:     subl    $12, %esp
8809 ; DARWIN-32-STATIC-NEXT:        calll   _callee
8810 ; DARWIN-32-STATIC-NEXT:        calll   _callee
8811 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8812 ; DARWIN-32-STATIC-NEXT:        ret
8813
8814 ; DARWIN-32-DYNAMIC: _caller:
8815 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8816 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_callee$stub
8817 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_callee$stub
8818 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8819 ; DARWIN-32-DYNAMIC-NEXT:       ret
8820
8821 ; DARWIN-32-PIC: _caller:
8822 ; DARWIN-32-PIC:        subl    $12, %esp
8823 ; DARWIN-32-PIC-NEXT:   calll   L_callee$stub
8824 ; DARWIN-32-PIC-NEXT:   calll   L_callee$stub
8825 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8826 ; DARWIN-32-PIC-NEXT:   ret
8827
8828 ; DARWIN-64-STATIC: _caller:
8829 ; DARWIN-64-STATIC:     pushq
8830 ; DARWIN-64-STATIC-NEXT:        callq   _callee
8831 ; DARWIN-64-STATIC-NEXT:        callq   _callee
8832 ; DARWIN-64-STATIC-NEXT:        popq
8833 ; DARWIN-64-STATIC-NEXT:        ret
8834
8835 ; DARWIN-64-DYNAMIC: _caller:
8836 ; DARWIN-64-DYNAMIC:    pushq
8837 ; DARWIN-64-DYNAMIC-NEXT:       callq   _callee
8838 ; DARWIN-64-DYNAMIC-NEXT:       callq   _callee
8839 ; DARWIN-64-DYNAMIC-NEXT:       popq
8840 ; DARWIN-64-DYNAMIC-NEXT:       ret
8841
8842 ; DARWIN-64-PIC: _caller:
8843 ; DARWIN-64-PIC:        pushq
8844 ; DARWIN-64-PIC-NEXT:   callq   _callee
8845 ; DARWIN-64-PIC-NEXT:   callq   _callee
8846 ; DARWIN-64-PIC-NEXT:   popq
8847 ; DARWIN-64-PIC-NEXT:   ret
8848 }
8849
8850 define void @dcaller() nounwind {
8851 entry:
8852         call void @dcallee() nounwind
8853         call void @dcallee() nounwind
8854         ret void
8855 ; LINUX-64-STATIC: dcaller:
8856 ; LINUX-64-STATIC: callq   dcallee
8857 ; LINUX-64-STATIC: callq   dcallee
8858 ; LINUX-64-STATIC: ret
8859
8860 ; LINUX-32-STATIC: dcaller:
8861 ; LINUX-32-STATIC:      subl
8862 ; LINUX-32-STATIC-NEXT:         calll   dcallee
8863 ; LINUX-32-STATIC-NEXT:         calll   dcallee
8864 ; LINUX-32-STATIC-NEXT:         addl
8865 ; LINUX-32-STATIC-NEXT:         ret
8866
8867 ; LINUX-32-PIC: dcaller:
8868 ; LINUX-32-PIC:         subl
8869 ; LINUX-32-PIC-NEXT:    calll   dcallee
8870 ; LINUX-32-PIC-NEXT:    calll   dcallee
8871 ; LINUX-32-PIC-NEXT:    addl
8872
8873 ; LINUX-32-PIC-NEXT:    ret
8874
8875 ; LINUX-64-PIC: dcaller:
8876 ; LINUX-64-PIC:         pushq
8877 ; LINUX-64-PIC-NEXT:    callq   dcallee
8878 ; LINUX-64-PIC-NEXT:    callq   dcallee
8879 ; LINUX-64-PIC-NEXT:    popq
8880 ; LINUX-64-PIC-NEXT:    ret
8881
8882 ; DARWIN-32-STATIC: _dcaller:
8883 ; DARWIN-32-STATIC:     subl    $12, %esp
8884 ; DARWIN-32-STATIC-NEXT:        calll   _dcallee
8885 ; DARWIN-32-STATIC-NEXT:        calll   _dcallee
8886 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8887 ; DARWIN-32-STATIC-NEXT:        ret
8888
8889 ; DARWIN-32-DYNAMIC: _dcaller:
8890 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8891 ; DARWIN-32-DYNAMIC-NEXT:       calll   _dcallee
8892 ; DARWIN-32-DYNAMIC-NEXT:       calll   _dcallee
8893 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8894 ; DARWIN-32-DYNAMIC-NEXT:       ret
8895
8896 ; DARWIN-32-PIC: _dcaller:
8897 ; DARWIN-32-PIC:        subl    $12, %esp
8898 ; DARWIN-32-PIC-NEXT:   calll   _dcallee
8899 ; DARWIN-32-PIC-NEXT:   calll   _dcallee
8900 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8901 ; DARWIN-32-PIC-NEXT:   ret
8902
8903 ; DARWIN-64-STATIC: _dcaller:
8904 ; DARWIN-64-STATIC:     pushq
8905 ; DARWIN-64-STATIC-NEXT:        callq   _dcallee
8906 ; DARWIN-64-STATIC-NEXT:        callq   _dcallee
8907 ; DARWIN-64-STATIC-NEXT:        popq
8908 ; DARWIN-64-STATIC-NEXT:        ret
8909
8910 ; DARWIN-64-DYNAMIC: _dcaller:
8911 ; DARWIN-64-DYNAMIC:    pushq
8912 ; DARWIN-64-DYNAMIC-NEXT:       callq   _dcallee
8913 ; DARWIN-64-DYNAMIC-NEXT:       callq   _dcallee
8914 ; DARWIN-64-DYNAMIC-NEXT:       popq
8915 ; DARWIN-64-DYNAMIC-NEXT:       ret
8916
8917 ; DARWIN-64-PIC: _dcaller:
8918 ; DARWIN-64-PIC:        pushq
8919 ; DARWIN-64-PIC-NEXT:   callq   _dcallee
8920 ; DARWIN-64-PIC-NEXT:   callq   _dcallee
8921 ; DARWIN-64-PIC-NEXT:   popq
8922 ; DARWIN-64-PIC-NEXT:   ret
8923 }
8924
8925 define void @lcaller() nounwind {
8926 entry:
8927         call void @lcallee() nounwind
8928         call void @lcallee() nounwind
8929         ret void
8930 ; LINUX-64-STATIC: lcaller:
8931 ; LINUX-64-STATIC: callq   lcallee
8932 ; LINUX-64-STATIC: callq   lcallee
8933 ; LINUX-64-STATIC: ret
8934
8935 ; LINUX-32-STATIC: lcaller:
8936 ; LINUX-32-STATIC:      subl
8937 ; LINUX-32-STATIC-NEXT:         calll   lcallee
8938 ; LINUX-32-STATIC-NEXT:         calll   lcallee
8939 ; LINUX-32-STATIC-NEXT:         addl
8940 ; LINUX-32-STATIC-NEXT:         ret
8941
8942 ; LINUX-32-PIC: lcaller:
8943 ; LINUX-32-PIC:         subl
8944 ; LINUX-32-PIC-NEXT:    calll   lcallee
8945 ; LINUX-32-PIC-NEXT:    calll   lcallee
8946 ; LINUX-32-PIC-NEXT:    addl
8947
8948 ; LINUX-32-PIC-NEXT:    ret
8949
8950 ; LINUX-64-PIC: lcaller:
8951 ; LINUX-64-PIC:         pushq
8952 ; LINUX-64-PIC-NEXT:    callq   lcallee@PLT
8953 ; LINUX-64-PIC-NEXT:    callq   lcallee@PLT
8954 ; LINUX-64-PIC-NEXT:    popq
8955 ; LINUX-64-PIC-NEXT:    ret
8956
8957 ; DARWIN-32-STATIC: _lcaller:
8958 ; DARWIN-32-STATIC:     subl    $12, %esp
8959 ; DARWIN-32-STATIC-NEXT:        calll   _lcallee
8960 ; DARWIN-32-STATIC-NEXT:        calll   _lcallee
8961 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
8962 ; DARWIN-32-STATIC-NEXT:        ret
8963
8964 ; DARWIN-32-DYNAMIC: _lcaller:
8965 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
8966 ; DARWIN-32-DYNAMIC-NEXT:       calll   _lcallee
8967 ; DARWIN-32-DYNAMIC-NEXT:       calll   _lcallee
8968 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
8969 ; DARWIN-32-DYNAMIC-NEXT:       ret
8970
8971 ; DARWIN-32-PIC: _lcaller:
8972 ; DARWIN-32-PIC:        subl    $12, %esp
8973 ; DARWIN-32-PIC-NEXT:   calll   _lcallee
8974 ; DARWIN-32-PIC-NEXT:   calll   _lcallee
8975 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
8976 ; DARWIN-32-PIC-NEXT:   ret
8977
8978 ; DARWIN-64-STATIC: _lcaller:
8979 ; DARWIN-64-STATIC:     pushq
8980 ; DARWIN-64-STATIC-NEXT:        callq   _lcallee
8981 ; DARWIN-64-STATIC-NEXT:        callq   _lcallee
8982 ; DARWIN-64-STATIC-NEXT:        popq
8983 ; DARWIN-64-STATIC-NEXT:        ret
8984
8985 ; DARWIN-64-DYNAMIC: _lcaller:
8986 ; DARWIN-64-DYNAMIC:    pushq
8987 ; DARWIN-64-DYNAMIC-NEXT:       callq   _lcallee
8988 ; DARWIN-64-DYNAMIC-NEXT:       callq   _lcallee
8989 ; DARWIN-64-DYNAMIC-NEXT:       popq
8990 ; DARWIN-64-DYNAMIC-NEXT:       ret
8991
8992 ; DARWIN-64-PIC: _lcaller:
8993 ; DARWIN-64-PIC:        pushq
8994 ; DARWIN-64-PIC-NEXT:   callq   _lcallee
8995 ; DARWIN-64-PIC-NEXT:   callq   _lcallee
8996 ; DARWIN-64-PIC-NEXT:   popq
8997 ; DARWIN-64-PIC-NEXT:   ret
8998 }
8999
9000 define void @tailcaller() nounwind {
9001 entry:
9002         call void @callee() nounwind
9003         ret void
9004 ; LINUX-64-STATIC: tailcaller:
9005 ; LINUX-64-STATIC: callq   callee
9006 ; LINUX-64-STATIC: ret
9007
9008 ; LINUX-32-STATIC: tailcaller:
9009 ; LINUX-32-STATIC:      subl
9010 ; LINUX-32-STATIC-NEXT:         calll   callee
9011 ; LINUX-32-STATIC-NEXT:         addl
9012 ; LINUX-32-STATIC-NEXT:         ret
9013
9014 ; LINUX-32-PIC: tailcaller:
9015 ; LINUX-32-PIC:         subl
9016 ; LINUX-32-PIC-NEXT:    calll   callee
9017 ; LINUX-32-PIC-NEXT:    addl
9018
9019 ; LINUX-32-PIC-NEXT:    ret
9020
9021 ; LINUX-64-PIC: tailcaller:
9022 ; LINUX-64-PIC:         pushq
9023 ; LINUX-64-PIC-NEXT:    callq   callee@PLT
9024 ; LINUX-64-PIC-NEXT:    popq
9025 ; LINUX-64-PIC-NEXT:    ret
9026
9027 ; DARWIN-32-STATIC: _tailcaller:
9028 ; DARWIN-32-STATIC:     subl    $12, %esp
9029 ; DARWIN-32-STATIC-NEXT:        calll   _callee
9030 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9031 ; DARWIN-32-STATIC-NEXT:        ret
9032
9033 ; DARWIN-32-DYNAMIC: _tailcaller:
9034 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9035 ; DARWIN-32-DYNAMIC-NEXT:       calll   L_callee$stub
9036 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9037 ; DARWIN-32-DYNAMIC-NEXT:       ret
9038
9039 ; DARWIN-32-PIC: _tailcaller:
9040 ; DARWIN-32-PIC:        subl    $12, %esp
9041 ; DARWIN-32-PIC-NEXT:   calll   L_callee$stub
9042 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9043 ; DARWIN-32-PIC-NEXT:   ret
9044
9045 ; DARWIN-64-STATIC: _tailcaller:
9046 ; DARWIN-64-STATIC:     pushq
9047 ; DARWIN-64-STATIC-NEXT:        callq   _callee
9048 ; DARWIN-64-STATIC-NEXT:        popq
9049 ; DARWIN-64-STATIC-NEXT:        ret
9050
9051 ; DARWIN-64-DYNAMIC: _tailcaller:
9052 ; DARWIN-64-DYNAMIC:    pushq
9053 ; DARWIN-64-DYNAMIC-NEXT:       callq   _callee
9054 ; DARWIN-64-DYNAMIC-NEXT:       popq
9055 ; DARWIN-64-DYNAMIC-NEXT:       ret
9056
9057 ; DARWIN-64-PIC: _tailcaller:
9058 ; DARWIN-64-PIC:        pushq
9059 ; DARWIN-64-PIC-NEXT:   callq   _callee
9060 ; DARWIN-64-PIC-NEXT:   popq
9061 ; DARWIN-64-PIC-NEXT:   ret
9062 }
9063
9064 define void @dtailcaller() nounwind {
9065 entry:
9066         call void @dcallee() nounwind
9067         ret void
9068 ; LINUX-64-STATIC: dtailcaller:
9069 ; LINUX-64-STATIC: callq   dcallee
9070 ; LINUX-64-STATIC: ret
9071
9072 ; LINUX-32-STATIC: dtailcaller:
9073 ; LINUX-32-STATIC:      subl
9074 ; LINUX-32-STATIC-NEXT:         calll   dcallee
9075 ; LINUX-32-STATIC-NEXT:         addl
9076 ; LINUX-32-STATIC-NEXT:         ret
9077
9078 ; LINUX-32-PIC: dtailcaller:
9079 ; LINUX-32-PIC:         subl
9080 ; LINUX-32-PIC-NEXT:    calll   dcallee
9081 ; LINUX-32-PIC-NEXT:    addl
9082
9083 ; LINUX-32-PIC-NEXT:    ret
9084
9085 ; LINUX-64-PIC: dtailcaller:
9086 ; LINUX-64-PIC:         pushq
9087 ; LINUX-64-PIC-NEXT:    callq   dcallee
9088 ; LINUX-64-PIC-NEXT:    popq
9089 ; LINUX-64-PIC-NEXT:    ret
9090
9091 ; DARWIN-32-STATIC: _dtailcaller:
9092 ; DARWIN-32-STATIC:     subl    $12, %esp
9093 ; DARWIN-32-STATIC-NEXT:        calll   _dcallee
9094 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9095 ; DARWIN-32-STATIC-NEXT:        ret
9096
9097 ; DARWIN-32-DYNAMIC: _dtailcaller:
9098 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9099 ; DARWIN-32-DYNAMIC-NEXT:       calll   _dcallee
9100 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9101 ; DARWIN-32-DYNAMIC-NEXT:       ret
9102
9103 ; DARWIN-32-PIC: _dtailcaller:
9104 ; DARWIN-32-PIC:        subl    $12, %esp
9105 ; DARWIN-32-PIC-NEXT:   calll   _dcallee
9106 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9107 ; DARWIN-32-PIC-NEXT:   ret
9108
9109 ; DARWIN-64-STATIC: _dtailcaller:
9110 ; DARWIN-64-STATIC:     pushq
9111 ; DARWIN-64-STATIC-NEXT:        callq   _dcallee
9112 ; DARWIN-64-STATIC-NEXT:        popq
9113 ; DARWIN-64-STATIC-NEXT:        ret
9114
9115 ; DARWIN-64-DYNAMIC: _dtailcaller:
9116 ; DARWIN-64-DYNAMIC:    pushq
9117 ; DARWIN-64-DYNAMIC-NEXT:       callq   _dcallee
9118 ; DARWIN-64-DYNAMIC-NEXT:       popq
9119 ; DARWIN-64-DYNAMIC-NEXT:       ret
9120
9121 ; DARWIN-64-PIC: _dtailcaller:
9122 ; DARWIN-64-PIC:        pushq
9123 ; DARWIN-64-PIC-NEXT:   callq   _dcallee
9124 ; DARWIN-64-PIC-NEXT:   popq
9125 ; DARWIN-64-PIC-NEXT:   ret
9126 }
9127
9128 define void @ltailcaller() nounwind {
9129 entry:
9130         call void @lcallee() nounwind
9131         ret void
9132 ; LINUX-64-STATIC: ltailcaller:
9133 ; LINUX-64-STATIC: callq   lcallee
9134 ; LINUX-64-STATIC: ret
9135
9136 ; LINUX-32-STATIC: ltailcaller:
9137 ; LINUX-32-STATIC:      subl
9138 ; LINUX-32-STATIC-NEXT:         calll   lcallee
9139 ; LINUX-32-STATIC-NEXT:         addl
9140 ; LINUX-32-STATIC-NEXT:         ret
9141
9142 ; LINUX-32-PIC: ltailcaller:
9143 ; LINUX-32-PIC:         subl
9144 ; LINUX-32-PIC-NEXT:    calll   lcallee
9145 ; LINUX-32-PIC-NEXT:    addl
9146
9147 ; LINUX-32-PIC-NEXT:    ret
9148
9149 ; LINUX-64-PIC: ltailcaller:
9150 ; LINUX-64-PIC:         pushq
9151 ; LINUX-64-PIC-NEXT:    callq   lcallee@PLT
9152 ; LINUX-64-PIC-NEXT:    popq
9153 ; LINUX-64-PIC-NEXT:    ret
9154
9155 ; DARWIN-32-STATIC: _ltailcaller:
9156 ; DARWIN-32-STATIC:     subl    $12, %esp
9157 ; DARWIN-32-STATIC-NEXT:        calll   _lcallee
9158 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9159 ; DARWIN-32-STATIC-NEXT:        ret
9160
9161 ; DARWIN-32-DYNAMIC: _ltailcaller:
9162 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9163 ; DARWIN-32-DYNAMIC-NEXT:       calll   _lcallee
9164 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9165 ; DARWIN-32-DYNAMIC-NEXT:       ret
9166
9167 ; DARWIN-32-PIC: _ltailcaller:
9168 ; DARWIN-32-PIC:        subl    $12, %esp
9169 ; DARWIN-32-PIC-NEXT:   calll   _lcallee
9170 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9171 ; DARWIN-32-PIC-NEXT:   ret
9172
9173 ; DARWIN-64-STATIC: _ltailcaller:
9174 ; DARWIN-64-STATIC:     pushq
9175 ; DARWIN-64-STATIC-NEXT:        callq   _lcallee
9176 ; DARWIN-64-STATIC-NEXT:        popq
9177 ; DARWIN-64-STATIC-NEXT:        ret
9178
9179 ; DARWIN-64-DYNAMIC: _ltailcaller:
9180 ; DARWIN-64-DYNAMIC:    pushq
9181 ; DARWIN-64-DYNAMIC-NEXT:       callq   _lcallee
9182 ; DARWIN-64-DYNAMIC-NEXT:       popq
9183 ; DARWIN-64-DYNAMIC-NEXT:       ret
9184
9185 ; DARWIN-64-PIC: _ltailcaller:
9186 ; DARWIN-64-PIC:        pushq
9187 ; DARWIN-64-PIC-NEXT:   callq   _lcallee
9188 ; DARWIN-64-PIC-NEXT:   popq
9189 ; DARWIN-64-PIC-NEXT:   ret
9190 }
9191
9192 define void @icaller() nounwind {
9193 entry:
9194         %0 = load void ()** @ifunc, align 8
9195         call void %0() nounwind
9196         %1 = load void ()** @ifunc, align 8
9197         call void %1() nounwind
9198         ret void
9199 ; LINUX-64-STATIC: icaller:
9200 ; LINUX-64-STATIC: callq   *ifunc
9201 ; LINUX-64-STATIC: callq   *ifunc
9202 ; LINUX-64-STATIC: ret
9203
9204 ; LINUX-32-STATIC: icaller:
9205 ; LINUX-32-STATIC:      subl
9206 ; LINUX-32-STATIC-NEXT:         calll   *ifunc
9207 ; LINUX-32-STATIC-NEXT:         calll   *ifunc
9208 ; LINUX-32-STATIC-NEXT:         addl
9209 ; LINUX-32-STATIC-NEXT:         ret
9210
9211 ; LINUX-32-PIC: icaller:
9212 ; LINUX-32-PIC:         subl
9213 ; LINUX-32-PIC-NEXT:    calll   *ifunc
9214 ; LINUX-32-PIC-NEXT:    calll   *ifunc
9215 ; LINUX-32-PIC-NEXT:    addl
9216
9217 ; LINUX-32-PIC-NEXT:    ret
9218
9219 ; LINUX-64-PIC: icaller:
9220 ; LINUX-64-PIC:         pushq   [[RBX:%r.x]]
9221 ; LINUX-64-PIC-NEXT:    movq    ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9222 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9223 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9224 ; LINUX-64-PIC-NEXT:    popq    [[RBX:%r.x]]
9225 ; LINUX-64-PIC-NEXT:    ret
9226
9227 ; DARWIN-32-STATIC: _icaller:
9228 ; DARWIN-32-STATIC:     subl    $12, %esp
9229 ; DARWIN-32-STATIC-NEXT:        calll   *_ifunc
9230 ; DARWIN-32-STATIC-NEXT:        calll   *_ifunc
9231 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9232 ; DARWIN-32-STATIC-NEXT:        ret
9233
9234 ; DARWIN-32-DYNAMIC: _icaller:
9235 ; DARWIN-32-DYNAMIC:    pushl   %esi
9236 ; DARWIN-32-DYNAMIC-NEXT:       subl    $8, %esp
9237 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ifunc$non_lazy_ptr, %esi
9238 ; DARWIN-32-DYNAMIC-NEXT:       calll   *(%esi)
9239 ; DARWIN-32-DYNAMIC-NEXT:       calll   *(%esi)
9240 ; DARWIN-32-DYNAMIC-NEXT:       addl    $8, %esp
9241 ; DARWIN-32-DYNAMIC-NEXT:       popl    %esi
9242 ; DARWIN-32-DYNAMIC-NEXT:       ret
9243
9244 ; DARWIN-32-PIC: _icaller:
9245 ; DARWIN-32-PIC:        pushl   %esi
9246 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9247 ; DARWIN-32-PIC-NEXT:   calll   L142$pb
9248 ; DARWIN-32-PIC-NEXT: L142$pb:
9249 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
9250 ; DARWIN-32-PIC-NEXT:   movl    L_ifunc$non_lazy_ptr-L142$pb([[EAX]]), %esi
9251 ; DARWIN-32-PIC-NEXT:   calll   *(%esi)
9252 ; DARWIN-32-PIC-NEXT:   calll   *(%esi)
9253 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9254 ; DARWIN-32-PIC-NEXT:   popl    %esi
9255 ; DARWIN-32-PIC-NEXT:   ret
9256
9257 ; DARWIN-64-STATIC: _icaller:
9258 ; DARWIN-64-STATIC:     pushq   [[RBX:%r.x]]
9259 ; DARWIN-64-STATIC-NEXT:        movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9260 ; DARWIN-64-STATIC-NEXT:        callq   *([[RBX]])
9261 ; DARWIN-64-STATIC-NEXT:        callq   *([[RBX]])
9262 ; DARWIN-64-STATIC-NEXT:        popq    [[RBX:%r.x]]
9263 ; DARWIN-64-STATIC-NEXT:        ret
9264
9265 ; DARWIN-64-DYNAMIC: _icaller:
9266 ; DARWIN-64-DYNAMIC:    pushq   [[RBX:%r.x]]
9267 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9268 ; DARWIN-64-DYNAMIC-NEXT:       callq   *([[RBX]])
9269 ; DARWIN-64-DYNAMIC-NEXT:       callq   *([[RBX]])
9270 ; DARWIN-64-DYNAMIC-NEXT:       popq    [[RBX:%r.x]]
9271 ; DARWIN-64-DYNAMIC-NEXT:       ret
9272
9273 ; DARWIN-64-PIC: _icaller:
9274 ; DARWIN-64-PIC:        pushq   [[RBX:%r.x]]
9275 ; DARWIN-64-PIC-NEXT:   movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9276 ; DARWIN-64-PIC-NEXT:   callq   *([[RBX]])
9277 ; DARWIN-64-PIC-NEXT:   callq   *([[RBX]])
9278 ; DARWIN-64-PIC-NEXT:   popq    [[RBX:%r.x]]
9279 ; DARWIN-64-PIC-NEXT:   ret
9280 }
9281
9282 define void @dicaller() nounwind {
9283 entry:
9284         %0 = load void ()** @difunc, align 8
9285         call void %0() nounwind
9286         %1 = load void ()** @difunc, align 8
9287         call void %1() nounwind
9288         ret void
9289 ; LINUX-64-STATIC: dicaller:
9290 ; LINUX-64-STATIC: callq   *difunc
9291 ; LINUX-64-STATIC: callq   *difunc
9292 ; LINUX-64-STATIC: ret
9293
9294 ; LINUX-32-STATIC: dicaller:
9295 ; LINUX-32-STATIC:      subl
9296 ; LINUX-32-STATIC-NEXT:         calll   *difunc
9297 ; LINUX-32-STATIC-NEXT:         calll   *difunc
9298 ; LINUX-32-STATIC-NEXT:         addl
9299 ; LINUX-32-STATIC-NEXT:         ret
9300
9301 ; LINUX-32-PIC: dicaller:
9302 ; LINUX-32-PIC:         subl
9303 ; LINUX-32-PIC-NEXT:    calll   *difunc
9304 ; LINUX-32-PIC-NEXT:    calll   *difunc
9305 ; LINUX-32-PIC-NEXT:    addl
9306
9307 ; LINUX-32-PIC-NEXT:    ret
9308
9309 ; LINUX-64-PIC: dicaller:
9310 ; LINUX-64-PIC:         pushq   [[RBX:%r.x]]
9311 ; LINUX-64-PIC-NEXT:    movq    difunc@GOTPCREL(%rip), [[RBX:%r.x]]
9312 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9313 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9314 ; LINUX-64-PIC-NEXT:    popq    [[RBX:%r.x]]
9315 ; LINUX-64-PIC-NEXT:    ret
9316
9317 ; DARWIN-32-STATIC: _dicaller:
9318 ; DARWIN-32-STATIC:     subl    $12, %esp
9319 ; DARWIN-32-STATIC-NEXT:        calll   *_difunc
9320 ; DARWIN-32-STATIC-NEXT:        calll   *_difunc
9321 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9322 ; DARWIN-32-STATIC-NEXT:        ret
9323
9324 ; DARWIN-32-DYNAMIC: _dicaller:
9325 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9326 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_difunc
9327 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_difunc
9328 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9329 ; DARWIN-32-DYNAMIC-NEXT:       ret
9330
9331 ; DARWIN-32-PIC: _dicaller:
9332 ; DARWIN-32-PIC:        pushl   %esi
9333 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9334 ; DARWIN-32-PIC-NEXT:   calll   L143$pb
9335 ; DARWIN-32-PIC-NEXT: L143$pb:
9336 ; DARWIN-32-PIC-NEXT:   popl    %esi
9337 ; DARWIN-32-PIC-NEXT:   calll   *_difunc-L143$pb(%esi)
9338 ; DARWIN-32-PIC-NEXT:   calll   *_difunc-L143$pb(%esi)
9339 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9340 ; DARWIN-32-PIC-NEXT:   popl    %esi
9341 ; DARWIN-32-PIC-NEXT:   ret
9342
9343 ; DARWIN-64-STATIC: _dicaller:
9344 ; DARWIN-64-STATIC:     pushq
9345 ; DARWIN-64-STATIC-NEXT:        callq   *_difunc(%rip)
9346 ; DARWIN-64-STATIC-NEXT:        callq   *_difunc(%rip)
9347 ; DARWIN-64-STATIC-NEXT:        popq
9348 ; DARWIN-64-STATIC-NEXT:        ret
9349
9350 ; DARWIN-64-DYNAMIC: _dicaller:
9351 ; DARWIN-64-DYNAMIC:    pushq
9352 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_difunc(%rip)
9353 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_difunc(%rip)
9354 ; DARWIN-64-DYNAMIC-NEXT:       popq
9355 ; DARWIN-64-DYNAMIC-NEXT:       ret
9356
9357 ; DARWIN-64-PIC: _dicaller:
9358 ; DARWIN-64-PIC:        pushq
9359 ; DARWIN-64-PIC-NEXT:   callq   *_difunc(%rip)
9360 ; DARWIN-64-PIC-NEXT:   callq   *_difunc(%rip)
9361 ; DARWIN-64-PIC-NEXT:   popq
9362 ; DARWIN-64-PIC-NEXT:   ret
9363 }
9364
9365 define void @licaller() nounwind {
9366 entry:
9367         %0 = load void ()** @lifunc, align 8
9368         call void %0() nounwind
9369         %1 = load void ()** @lifunc, align 8
9370         call void %1() nounwind
9371         ret void
9372 ; LINUX-64-STATIC: licaller:
9373 ; LINUX-64-STATIC: callq   *lifunc
9374 ; LINUX-64-STATIC: callq   *lifunc
9375 ; LINUX-64-STATIC: ret
9376
9377 ; LINUX-32-STATIC: licaller:
9378 ; LINUX-32-STATIC:      subl
9379 ; LINUX-32-STATIC-NEXT:         calll   *lifunc
9380 ; LINUX-32-STATIC-NEXT:         calll   *lifunc
9381 ; LINUX-32-STATIC-NEXT:         addl
9382 ; LINUX-32-STATIC-NEXT:         ret
9383
9384 ; LINUX-32-PIC: licaller:
9385 ; LINUX-32-PIC:         subl
9386 ; LINUX-32-PIC-NEXT:    calll   *lifunc
9387 ; LINUX-32-PIC-NEXT:    calll   *lifunc
9388 ; LINUX-32-PIC-NEXT:    addl
9389
9390 ; LINUX-32-PIC-NEXT:    ret
9391
9392 ; LINUX-64-PIC: licaller:
9393 ; LINUX-64-PIC:         pushq
9394 ; LINUX-64-PIC-NEXT:    callq   *lifunc(%rip)
9395 ; LINUX-64-PIC-NEXT:    callq   *lifunc(%rip)
9396 ; LINUX-64-PIC-NEXT:    popq
9397 ; LINUX-64-PIC-NEXT:    ret
9398
9399 ; DARWIN-32-STATIC: _licaller:
9400 ; DARWIN-32-STATIC:     subl    $12, %esp
9401 ; DARWIN-32-STATIC-NEXT:        calll   *_lifunc
9402 ; DARWIN-32-STATIC-NEXT:        calll   *_lifunc
9403 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9404 ; DARWIN-32-STATIC-NEXT:        ret
9405
9406 ; DARWIN-32-DYNAMIC: _licaller:
9407 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9408 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_lifunc
9409 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_lifunc
9410 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9411 ; DARWIN-32-DYNAMIC-NEXT:       ret
9412
9413 ; DARWIN-32-PIC: _licaller:
9414 ; DARWIN-32-PIC:        pushl   %esi
9415 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9416 ; DARWIN-32-PIC-NEXT:   calll   L144$pb
9417 ; DARWIN-32-PIC-NEXT: L144$pb:
9418 ; DARWIN-32-PIC-NEXT:   popl    %esi
9419 ; DARWIN-32-PIC-NEXT:   calll   *_lifunc-L144$pb(%esi)
9420 ; DARWIN-32-PIC-NEXT:   calll   *_lifunc-L144$pb(%esi)
9421 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9422 ; DARWIN-32-PIC-NEXT:   popl    %esi
9423 ; DARWIN-32-PIC-NEXT:   ret
9424
9425 ; DARWIN-64-STATIC: _licaller:
9426 ; DARWIN-64-STATIC:     pushq
9427 ; DARWIN-64-STATIC-NEXT:        callq   *_lifunc(%rip)
9428 ; DARWIN-64-STATIC-NEXT:        callq   *_lifunc(%rip)
9429 ; DARWIN-64-STATIC-NEXT:        popq
9430 ; DARWIN-64-STATIC-NEXT:        ret
9431
9432 ; DARWIN-64-DYNAMIC: _licaller:
9433 ; DARWIN-64-DYNAMIC:    pushq
9434 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_lifunc(%rip)
9435 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_lifunc(%rip)
9436 ; DARWIN-64-DYNAMIC-NEXT:       popq
9437 ; DARWIN-64-DYNAMIC-NEXT:       ret
9438
9439 ; DARWIN-64-PIC: _licaller:
9440 ; DARWIN-64-PIC:        pushq
9441 ; DARWIN-64-PIC-NEXT:   callq   *_lifunc(%rip)
9442 ; DARWIN-64-PIC-NEXT:   callq   *_lifunc(%rip)
9443 ; DARWIN-64-PIC-NEXT:   popq
9444 ; DARWIN-64-PIC-NEXT:   ret
9445 }
9446
9447 define void @itailcaller() nounwind {
9448 entry:
9449         %0 = load void ()** @ifunc, align 8
9450         call void %0() nounwind
9451         %1 = load void ()** @ifunc, align 8
9452         call void %1() nounwind
9453         ret void
9454 ; LINUX-64-STATIC: itailcaller:
9455 ; LINUX-64-STATIC: callq   *ifunc
9456 ; LINUX-64-STATIC: callq   *ifunc
9457 ; LINUX-64-STATIC: ret
9458
9459 ; LINUX-32-STATIC: itailcaller:
9460 ; LINUX-32-STATIC:      subl
9461 ; LINUX-32-STATIC-NEXT:         calll   *ifunc
9462 ; LINUX-32-STATIC-NEXT:         calll   *ifunc
9463 ; LINUX-32-STATIC-NEXT:         addl
9464 ; LINUX-32-STATIC-NEXT:         ret
9465
9466 ; LINUX-32-PIC: itailcaller:
9467 ; LINUX-32-PIC:         subl
9468 ; LINUX-32-PIC-NEXT:    calll   *ifunc
9469 ; LINUX-32-PIC-NEXT:    calll   *ifunc
9470 ; LINUX-32-PIC-NEXT:    addl
9471
9472 ; LINUX-32-PIC-NEXT:    ret
9473
9474 ; LINUX-64-PIC: itailcaller:
9475 ; LINUX-64-PIC:         pushq   [[RBX:%r.x]]
9476 ; LINUX-64-PIC-NEXT:    movq    ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9477 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9478 ; LINUX-64-PIC-NEXT:    callq   *([[RBX]])
9479 ; LINUX-64-PIC-NEXT:    popq    [[RBX:%r.x]]
9480 ; LINUX-64-PIC-NEXT:    ret
9481
9482 ; DARWIN-32-STATIC: _itailcaller:
9483 ; DARWIN-32-STATIC:     subl    $12, %esp
9484 ; DARWIN-32-STATIC-NEXT:        calll   *_ifunc
9485 ; DARWIN-32-STATIC-NEXT:        calll   *_ifunc
9486 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9487 ; DARWIN-32-STATIC-NEXT:        ret
9488
9489 ; DARWIN-32-DYNAMIC: _itailcaller:
9490 ; DARWIN-32-DYNAMIC:    pushl   %esi
9491 ; DARWIN-32-DYNAMIC-NEXT:       subl    $8, %esp
9492 ; DARWIN-32-DYNAMIC-NEXT:       movl    L_ifunc$non_lazy_ptr, %esi
9493 ; DARWIN-32-DYNAMIC-NEXT:       calll   *(%esi)
9494 ; DARWIN-32-DYNAMIC-NEXT:       calll   *(%esi)
9495 ; DARWIN-32-DYNAMIC-NEXT:       addl    $8, %esp
9496 ; DARWIN-32-DYNAMIC-NEXT:       popl    %esi
9497 ; DARWIN-32-DYNAMIC-NEXT:       ret
9498
9499 ; DARWIN-32-PIC: _itailcaller:
9500 ; DARWIN-32-PIC:        pushl   %esi
9501 ; DARWIN-32-PIC-NEXT:   subl    $8, %esp
9502 ; DARWIN-32-PIC-NEXT:   calll   L145$pb
9503 ; DARWIN-32-PIC-NEXT: L145$pb:
9504 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
9505 ; DARWIN-32-PIC-NEXT:   movl    L_ifunc$non_lazy_ptr-L145$pb([[EAX]]), %esi
9506 ; DARWIN-32-PIC-NEXT:   calll   *(%esi)
9507 ; DARWIN-32-PIC-NEXT:   calll   *(%esi)
9508 ; DARWIN-32-PIC-NEXT:   addl    $8, %esp
9509 ; DARWIN-32-PIC-NEXT:   popl    %esi
9510 ; DARWIN-32-PIC-NEXT:   ret
9511
9512 ; DARWIN-64-STATIC: _itailcaller:
9513 ; DARWIN-64-STATIC:     pushq   [[RBX:%r.x]]
9514 ; DARWIN-64-STATIC-NEXT:        movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9515 ; DARWIN-64-STATIC-NEXT:        callq   *([[RBX]])
9516 ; DARWIN-64-STATIC-NEXT:        callq   *([[RBX]])
9517 ; DARWIN-64-STATIC-NEXT:        popq    [[RBX:%r.x]]
9518 ; DARWIN-64-STATIC-NEXT:        ret
9519
9520 ; DARWIN-64-DYNAMIC: _itailcaller:
9521 ; DARWIN-64-DYNAMIC:    pushq   [[RBX:%r.x]]
9522 ; DARWIN-64-DYNAMIC-NEXT:       movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9523 ; DARWIN-64-DYNAMIC-NEXT:       callq   *([[RBX]])
9524 ; DARWIN-64-DYNAMIC-NEXT:       callq   *([[RBX]])
9525 ; DARWIN-64-DYNAMIC-NEXT:       popq    [[RBX:%r.x]]
9526 ; DARWIN-64-DYNAMIC-NEXT:       ret
9527
9528 ; DARWIN-64-PIC: _itailcaller:
9529 ; DARWIN-64-PIC:        pushq   [[RBX:%r.x]]
9530 ; DARWIN-64-PIC-NEXT:   movq    _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9531 ; DARWIN-64-PIC-NEXT:   callq   *([[RBX]])
9532 ; DARWIN-64-PIC-NEXT:   callq   *([[RBX]])
9533 ; DARWIN-64-PIC-NEXT:   popq    [[RBX:%r.x]]
9534 ; DARWIN-64-PIC-NEXT:   ret
9535 }
9536
9537 define void @ditailcaller() nounwind {
9538 entry:
9539         %0 = load void ()** @difunc, align 8
9540         call void %0() nounwind
9541         ret void
9542 ; LINUX-64-STATIC: ditailcaller:
9543 ; LINUX-64-STATIC: callq   *difunc
9544 ; LINUX-64-STATIC: ret
9545
9546 ; LINUX-32-STATIC: ditailcaller:
9547 ; LINUX-32-STATIC:      subl
9548 ; LINUX-32-STATIC-NEXT:         calll   *difunc
9549 ; LINUX-32-STATIC-NEXT:         addl
9550 ; LINUX-32-STATIC-NEXT:         ret
9551
9552 ; LINUX-32-PIC: ditailcaller:
9553 ; LINUX-32-PIC:         subl
9554 ; LINUX-32-PIC-NEXT:    calll   *difunc
9555 ; LINUX-32-PIC-NEXT:    addl
9556
9557 ; LINUX-32-PIC-NEXT:    ret
9558
9559 ; LINUX-64-PIC: ditailcaller:
9560 ; LINUX-64-PIC:         pushq
9561 ; LINUX-64-PIC-NEXT:    movq    difunc@GOTPCREL(%rip), [[RAX:%r.x]]
9562 ; LINUX-64-PIC-NEXT:    callq   *([[RAX]])
9563 ; LINUX-64-PIC-NEXT:    popq
9564 ; LINUX-64-PIC-NEXT:    ret
9565
9566 ; DARWIN-32-STATIC: _ditailcaller:
9567 ; DARWIN-32-STATIC:     subl    $12, %esp
9568 ; DARWIN-32-STATIC-NEXT:        calll   *_difunc
9569 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9570 ; DARWIN-32-STATIC-NEXT:        ret
9571
9572 ; DARWIN-32-DYNAMIC: _ditailcaller:
9573 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9574 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_difunc
9575 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9576 ; DARWIN-32-DYNAMIC-NEXT:       ret
9577
9578 ; DARWIN-32-PIC: _ditailcaller:
9579 ; DARWIN-32-PIC:        subl    $12, %esp
9580 ; DARWIN-32-PIC-NEXT:   calll   L146$pb
9581 ; DARWIN-32-PIC-NEXT: L146$pb:
9582 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
9583 ; DARWIN-32-PIC-NEXT:   calll   *_difunc-L146$pb([[EAX]])
9584 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9585 ; DARWIN-32-PIC-NEXT:   ret
9586
9587 ; DARWIN-64-STATIC: _ditailcaller:
9588 ; DARWIN-64-STATIC:     pushq
9589 ; DARWIN-64-STATIC-NEXT:        callq   *_difunc(%rip)
9590 ; DARWIN-64-STATIC-NEXT:        popq
9591 ; DARWIN-64-STATIC-NEXT:        ret
9592
9593 ; DARWIN-64-DYNAMIC: _ditailcaller:
9594 ; DARWIN-64-DYNAMIC:    pushq
9595 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_difunc(%rip)
9596 ; DARWIN-64-DYNAMIC-NEXT:       popq
9597 ; DARWIN-64-DYNAMIC-NEXT:       ret
9598
9599 ; DARWIN-64-PIC: _ditailcaller:
9600 ; DARWIN-64-PIC:        callq   *_difunc(%rip)
9601 ; DARWIN-64-PIC-NEXT:   popq
9602 ; DARWIN-64-PIC-NEXT:   ret
9603 }
9604
9605 define void @litailcaller() nounwind {
9606 entry:
9607         %0 = load void ()** @lifunc, align 8
9608         call void %0() nounwind
9609         ret void
9610 ; LINUX-64-STATIC: litailcaller:
9611 ; LINUX-64-STATIC: callq   *lifunc
9612 ; LINUX-64-STATIC: ret
9613
9614 ; LINUX-32-STATIC: litailcaller:
9615 ; LINUX-32-STATIC:      subl
9616 ; LINUX-32-STATIC-NEXT:         calll   *lifunc
9617 ; LINUX-32-STATIC-NEXT:         addl
9618 ; LINUX-32-STATIC-NEXT:         ret
9619
9620 ; LINUX-32-PIC: litailcaller:
9621 ; LINUX-32-PIC:         subl
9622 ; LINUX-32-PIC-NEXT:    calll   *lifunc
9623 ; LINUX-32-PIC-NEXT:    addl
9624
9625 ; LINUX-32-PIC-NEXT:    ret
9626
9627 ; LINUX-64-PIC: litailcaller:
9628 ; LINUX-64-PIC:         pushq
9629 ; LINUX-64-PIC-NEXT:    callq   *lifunc(%rip)
9630 ; LINUX-64-PIC-NEXT:    popq
9631 ; LINUX-64-PIC-NEXT:    ret
9632
9633 ; DARWIN-32-STATIC: _litailcaller:
9634 ; DARWIN-32-STATIC:     subl    $12, %esp
9635 ; DARWIN-32-STATIC-NEXT:        calll   *_lifunc
9636 ; DARWIN-32-STATIC-NEXT:        addl    $12, %esp
9637 ; DARWIN-32-STATIC-NEXT:        ret
9638
9639 ; DARWIN-32-DYNAMIC: _litailcaller:
9640 ; DARWIN-32-DYNAMIC:    subl    $12, %esp
9641 ; DARWIN-32-DYNAMIC-NEXT:       calll   *_lifunc
9642 ; DARWIN-32-DYNAMIC-NEXT:       addl    $12, %esp
9643 ; DARWIN-32-DYNAMIC-NEXT:       ret
9644
9645 ; DARWIN-32-PIC: _litailcaller:
9646 ; DARWIN-32-PIC:        subl    $12, %esp
9647 ; DARWIN-32-PIC-NEXT:   calll   L147$pb
9648 ; DARWIN-32-PIC-NEXT: L147$pb:
9649 ; DARWIN-32-PIC-NEXT:   popl    [[EAX:%e.x]]
9650 ; DARWIN-32-PIC-NEXT:   calll   *_lifunc-L147$pb([[EAX]])
9651 ; DARWIN-32-PIC-NEXT:   addl    $12, %esp
9652 ; DARWIN-32-PIC-NEXT:   ret
9653
9654 ; DARWIN-64-STATIC: _litailcaller:
9655 ; DARWIN-64-STATIC:     pushq
9656 ; DARWIN-64-STATIC-NEXT:        callq   *_lifunc(%rip)
9657 ; DARWIN-64-STATIC-NEXT:        popq
9658 ; DARWIN-64-STATIC-NEXT:        ret
9659
9660 ; DARWIN-64-DYNAMIC: _litailcaller:
9661 ; DARWIN-64-DYNAMIC:    pushq
9662 ; DARWIN-64-DYNAMIC-NEXT:       callq   *_lifunc(%rip)
9663 ; DARWIN-64-DYNAMIC-NEXT:       popq
9664 ; DARWIN-64-DYNAMIC-NEXT:       ret
9665
9666 ; DARWIN-64-PIC: _litailcaller:
9667 ; DARWIN-64-PIC:        pushq
9668 ; DARWIN-64-PIC-NEXT:   callq   *_lifunc(%rip)
9669 ; DARWIN-64-PIC-NEXT:   popq
9670 ; DARWIN-64-PIC-NEXT:   ret
9671 }