blob: 7535e07b809c4d4526b4aba77d808fd943360dfc [file] [log] [blame]
Evan Cheng7158e082011-01-03 22:53:22 +00001; 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
Chris Lattner4f066492009-07-11 20:29:19 +00003
Evan Cheng7158e082011-01-03 22:53:22 +00004; 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
Chris Lattner4f066492009-07-11 20:29:19 +00006
Evan Cheng7158e082011-01-03 22:53:22 +00007; 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
Dan Gohman318f5052009-03-14 02:35:10 +000010
Evan Cheng7158e082011-01-03 22:53:22 +000011; 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
Dan Gohman318f5052009-03-14 02:35:10 +000014
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000015; 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
Dan Gohman318f5052009-03-14 02:35:10 +000026@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
45define void @foo00() nounwind {
46entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +000050
51; LINUX-64-STATIC: foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000052; LINUX-64-STATIC: movl src(%rip), [[EAX:%e.x]]
53; LINUX-64-STATIC: movl [[EAX]], dst
Chris Lattner4f066492009-07-11 20:29:19 +000054; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000055
56; LINUX-32-STATIC: foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000057; LINUX-32-STATIC: movl src, [[EAX:%e.x]]
58; LINUX-32-STATIC-NEXT: movl [[EAX]], dst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000059; LINUX-32-STATIC-NEXT: ret
60
61; LINUX-32-PIC: foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000062; LINUX-32-PIC: movl src, [[EAX:%e.x]]
63; LINUX-32-PIC-NEXT: movl [[EAX]], dst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000064; LINUX-32-PIC-NEXT: ret
65
66; LINUX-64-PIC: foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000067; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000071; LINUX-64-PIC-NEXT: ret
72
73; DARWIN-32-STATIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000074; DARWIN-32-STATIC: movl _src, [[EAX:%e.x]]
75; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000076; DARWIN-32-STATIC-NEXT: ret
77
78; DARWIN-32-DYNAMIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000079; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000083; DARWIN-32-DYNAMIC-NEXT: ret
84
85; DARWIN-32-PIC: _foo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +000086; DARWIN-32-PIC: calll L0$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +000087; DARWIN-32-PIC-NEXT: L0$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000088; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000093; DARWIN-32-PIC-NEXT: ret
94
95; DARWIN-64-STATIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000096; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000100; DARWIN-64-STATIC-NEXT: ret
101
102; DARWIN-64-DYNAMIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000103; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000107; DARWIN-64-DYNAMIC-NEXT: ret
108
109; DARWIN-64-PIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000110; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000114; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000115}
116
117define void @fxo00() nounwind {
118entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000122
123; LINUX-64-STATIC: fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000124; LINUX-64-STATIC: movl xsrc(%rip), [[EAX:%e.x]]
125; LINUX-64-STATIC: movl [[EAX]], xdst
Chris Lattner4f066492009-07-11 20:29:19 +0000126; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000127
128; LINUX-32-STATIC: fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000129; LINUX-32-STATIC: movl xsrc, [[EAX:%e.x]]
130; LINUX-32-STATIC-NEXT: movl [[EAX]], xdst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000131; LINUX-32-STATIC-NEXT: ret
132
133; LINUX-32-PIC: fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000134; LINUX-32-PIC: movl xsrc, [[EAX:%e.x]]
135; LINUX-32-PIC-NEXT: movl [[EAX]], xdst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000136; LINUX-32-PIC-NEXT: ret
137
138; LINUX-64-PIC: fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000139; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000143; LINUX-64-PIC-NEXT: ret
144
145; DARWIN-32-STATIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000146; DARWIN-32-STATIC: movl _xsrc, [[EAX:%e.x]]
147; DARWIN-32-STATIC-NEXT: movl [[EAX]], _xdst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000148; DARWIN-32-STATIC-NEXT: ret
149
150; DARWIN-32-DYNAMIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000151; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000155; DARWIN-32-DYNAMIC-NEXT: ret
156
157; DARWIN-32-PIC: _fxo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000158; DARWIN-32-PIC: calll L1$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000159; DARWIN-32-PIC-NEXT: L1$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000160; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000165; DARWIN-32-PIC-NEXT: ret
166
167; DARWIN-64-STATIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000168; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000172; DARWIN-64-STATIC-NEXT: ret
173
174; DARWIN-64-DYNAMIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000175; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000179; DARWIN-64-DYNAMIC-NEXT: ret
180
181; DARWIN-64-PIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000182; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000186; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000187}
188
189define void @foo01() nounwind {
190entry:
191 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
192 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000193; LINUX-64-STATIC: foo01:
194; LINUX-64-STATIC: movq $dst, ptr
195; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000196
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000206; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000209; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000216; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000219; DARWIN-32-DYNAMIC-NEXT: ret
220
221; DARWIN-32-PIC: _foo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000222; DARWIN-32-PIC: calll L2$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000223; DARWIN-32-PIC-NEXT: L2$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000224; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000228; DARWIN-32-PIC-NEXT: ret
229
230; DARWIN-64-STATIC: _foo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000231; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000234; DARWIN-64-STATIC-NEXT: ret
235
236; DARWIN-64-DYNAMIC: _foo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000237; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000240; DARWIN-64-DYNAMIC-NEXT: ret
241
242; DARWIN-64-PIC: _foo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000243; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000246; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000247}
248
249define void @fxo01() nounwind {
250entry:
251 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
252 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000253; LINUX-64-STATIC: fxo01:
254; LINUX-64-STATIC: movq $xdst, ptr
255; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000256
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000266; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000269; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000276; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000279; DARWIN-32-DYNAMIC-NEXT: ret
280
281; DARWIN-32-PIC: _fxo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000282; DARWIN-32-PIC: calll L3$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000283; DARWIN-32-PIC-NEXT: L3$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000284; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000288; DARWIN-32-PIC-NEXT: ret
289
290; DARWIN-64-STATIC: _fxo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000291; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000294; DARWIN-64-STATIC-NEXT: ret
295
296; DARWIN-64-DYNAMIC: _fxo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000297; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000300; DARWIN-64-DYNAMIC-NEXT: ret
301
302; DARWIN-64-PIC: _fxo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000303; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000306; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000307}
308
309define void @foo02() nounwind {
310entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000315; LINUX-64-STATIC: foo02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000316; LINUX-64-STATIC: movl src(%rip), %
317; LINUX-64-STATIC: movq ptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000318; LINUX-64-STATIC: movl
319; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000320
321; LINUX-32-STATIC: foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000322; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000325; LINUX-32-STATIC-NEXT: ret
326
327; LINUX-32-PIC: foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000328; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000331; LINUX-32-PIC-NEXT: ret
332
333; LINUX-64-PIC: foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000334; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000339; LINUX-64-PIC-NEXT: ret
340
341; DARWIN-32-STATIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000342; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000345; DARWIN-32-STATIC-NEXT: ret
346
347; DARWIN-32-DYNAMIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000348; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000353; DARWIN-32-DYNAMIC-NEXT: ret
354
355; DARWIN-32-PIC: _foo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000356; DARWIN-32-PIC: calll L4$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000357; DARWIN-32-PIC-NEXT: L4$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000358; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000364; DARWIN-32-PIC-NEXT: ret
365
366; DARWIN-64-STATIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000367; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000372; DARWIN-64-STATIC-NEXT: ret
373
374; DARWIN-64-DYNAMIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000375; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000380; DARWIN-64-DYNAMIC-NEXT: ret
381
382; DARWIN-64-PIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000383; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000388; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000389}
390
391define void @fxo02() nounwind {
392entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000396; LINUX-64-STATIC: fxo02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000397; LINUX-64-STATIC: movl xsrc(%rip), %
398; LINUX-64-STATIC: movq ptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000399; LINUX-64-STATIC: movl
400; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000401
402; LINUX-32-STATIC: fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000403; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000406; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000407 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000408
409; LINUX-32-PIC: fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000410; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000413; LINUX-32-PIC-NEXT: ret
414
415; LINUX-64-PIC: fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000416; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000421; LINUX-64-PIC-NEXT: ret
422
423; DARWIN-32-STATIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000424; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000427; DARWIN-32-STATIC-NEXT: ret
428
429; DARWIN-32-DYNAMIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000430; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000435; DARWIN-32-DYNAMIC-NEXT: ret
436
437; DARWIN-32-PIC: _fxo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000438; DARWIN-32-PIC: calll L5$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000439; DARWIN-32-PIC-NEXT: L5$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000440; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000446; DARWIN-32-PIC-NEXT: ret
447
448; DARWIN-64-STATIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000449; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000454; DARWIN-64-STATIC-NEXT: ret
455
456; DARWIN-64-DYNAMIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000457; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000462; DARWIN-64-DYNAMIC-NEXT: ret
463
464; DARWIN-64-PIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000465; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000470; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000471}
472
473define void @foo03() nounwind {
474entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000478; LINUX-64-STATIC: foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000479; LINUX-64-STATIC: movl dsrc(%rip), [[EAX:%e.x]]
480; LINUX-64-STATIC: movl [[EAX]], ddst
Chris Lattner4f066492009-07-11 20:29:19 +0000481; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000482
483; LINUX-32-STATIC: foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000484; LINUX-32-STATIC: movl dsrc, [[EAX:%e.x]]
485; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000486; LINUX-32-STATIC-NEXT: ret
487
488; LINUX-32-PIC: foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000489; LINUX-32-PIC: movl dsrc, [[EAX:%e.x]]
490; LINUX-32-PIC-NEXT: movl [[EAX]], ddst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000491; LINUX-32-PIC-NEXT: ret
492
493; LINUX-64-PIC: foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000494; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000498; LINUX-64-PIC-NEXT: ret
499
500; DARWIN-32-STATIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000501; DARWIN-32-STATIC: movl _dsrc, [[EAX:%e.x]]
502; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000503; DARWIN-32-STATIC-NEXT: ret
504
505; DARWIN-32-DYNAMIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000506; DARWIN-32-DYNAMIC: movl _dsrc, [[EAX:%e.x]]
507; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000508; DARWIN-32-DYNAMIC-NEXT: ret
509
510; DARWIN-32-PIC: _foo03:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000511; DARWIN-32-PIC: calll L6$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000512; DARWIN-32-PIC-NEXT: L6$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000513; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000516; DARWIN-32-PIC-NEXT: ret
517
518; DARWIN-64-STATIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000519; DARWIN-64-STATIC: movl _dsrc(%rip), [[EAX:%e.x]]
520; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000521; DARWIN-64-STATIC-NEXT: ret
522
523; DARWIN-64-DYNAMIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000524; DARWIN-64-DYNAMIC: movl _dsrc(%rip), [[EAX:%e.x]]
525; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000526; DARWIN-64-DYNAMIC-NEXT: ret
527
528; DARWIN-64-PIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000529; DARWIN-64-PIC: movl _dsrc(%rip), [[EAX:%e.x]]
530; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000531; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000532}
533
534define void @foo04() nounwind {
535entry:
536 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
537 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000538; LINUX-64-STATIC: foo04:
539; LINUX-64-STATIC: movq $ddst, dptr
540; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000541
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000551; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000554; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000565; DARWIN-32-PIC: calll L7$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000566; DARWIN-32-PIC-NEXT: L7$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000567; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000570; DARWIN-32-PIC-NEXT: ret
571
572; DARWIN-64-STATIC: _foo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000573; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
574; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000575; DARWIN-64-STATIC-NEXT: ret
576
577; DARWIN-64-DYNAMIC: _foo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000578; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
579; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000580; DARWIN-64-DYNAMIC-NEXT: ret
581
582; DARWIN-64-PIC: _foo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000583; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
584; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000585; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000586}
587
588define void @foo05() nounwind {
589entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000594; LINUX-64-STATIC: foo05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000595; LINUX-64-STATIC: movl dsrc(%rip), %
596; LINUX-64-STATIC: movq dptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000597; LINUX-64-STATIC: movl
598; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000599
600; LINUX-32-STATIC: foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000601; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000604; LINUX-32-STATIC-NEXT: ret
605
606; LINUX-32-PIC: foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000607; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000610; LINUX-32-PIC-NEXT: ret
611
612; LINUX-64-PIC: foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000613; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000618; LINUX-64-PIC-NEXT: ret
619
620; DARWIN-32-STATIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000621; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000624; DARWIN-32-STATIC-NEXT: ret
625
626; DARWIN-32-DYNAMIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000627; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000630; DARWIN-32-DYNAMIC-NEXT: ret
631
632; DARWIN-32-PIC: _foo05:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000633; DARWIN-32-PIC: calll L8$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000634; DARWIN-32-PIC-NEXT: L8$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000635; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000639; DARWIN-32-PIC-NEXT: ret
640
641; DARWIN-64-STATIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000642; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000645; DARWIN-64-STATIC-NEXT: ret
646
647; DARWIN-64-DYNAMIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000648; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000651; DARWIN-64-DYNAMIC-NEXT: ret
652
653; DARWIN-64-PIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000654; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000657; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000658}
659
660define void @foo06() nounwind {
661entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000665; LINUX-64-STATIC: foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000666; LINUX-64-STATIC: movl lsrc(%rip), [[EAX:%e.x]]
667; LINUX-64-STATIC: movl [[EAX]], ldst(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000668; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000669
670; LINUX-32-STATIC: foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000671; LINUX-32-STATIC: movl lsrc, [[EAX:%e.x]]
672; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000673; LINUX-32-STATIC-NEXT: ret
674
675; LINUX-32-PIC: foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000676; LINUX-32-PIC: movl lsrc, [[EAX:%e.x]]
677; LINUX-32-PIC-NEXT: movl [[EAX]], ldst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000678; LINUX-32-PIC-NEXT: ret
679
680; LINUX-64-PIC: foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000681; LINUX-64-PIC: movl lsrc(%rip), [[EAX:%e.x]]
682; LINUX-64-PIC-NEXT: movl [[EAX]], ldst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000683; LINUX-64-PIC-NEXT: ret
684
685; DARWIN-32-STATIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000686; DARWIN-32-STATIC: movl _lsrc, [[EAX:%e.x]]
687; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000688; DARWIN-32-STATIC-NEXT: ret
689
690; DARWIN-32-DYNAMIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000691; DARWIN-32-DYNAMIC: movl _lsrc, [[EAX:%e.x]]
692; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000693; DARWIN-32-DYNAMIC-NEXT: ret
694
695; DARWIN-32-PIC: _foo06:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000696; DARWIN-32-PIC: calll L9$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000697; DARWIN-32-PIC-NEXT: L9$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000698; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000701; DARWIN-32-PIC-NEXT: ret
702
703; DARWIN-64-STATIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000704; DARWIN-64-STATIC: movl _lsrc(%rip), [[EAX:%e.x]]
705; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000706; DARWIN-64-STATIC-NEXT: ret
707
708; DARWIN-64-DYNAMIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000709; DARWIN-64-DYNAMIC: movl _lsrc(%rip), [[EAX:%e.x]]
710; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000711; DARWIN-64-DYNAMIC-NEXT: ret
712
713; DARWIN-64-PIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000714; DARWIN-64-PIC: movl _lsrc(%rip), [[EAX:%e.x]]
715; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000716; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000717}
718
719define void @foo07() nounwind {
720entry:
721 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
722 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000723; LINUX-64-STATIC: foo07:
724; LINUX-64-STATIC: movq $ldst, lptr
725; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000726
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000736; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
737; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000738; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000749; DARWIN-32-PIC: calll L10$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000750; DARWIN-32-PIC-NEXT: L10$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000751; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000754; DARWIN-32-PIC-NEXT: ret
755
756; DARWIN-64-STATIC: _foo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000757; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
758; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000759; DARWIN-64-STATIC-NEXT: ret
760
761; DARWIN-64-DYNAMIC: _foo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000762; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
763; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000764; DARWIN-64-DYNAMIC-NEXT: ret
765
766; DARWIN-64-PIC: _foo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000767; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
768; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000769; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000770}
771
772define void @foo08() nounwind {
773entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000778; LINUX-64-STATIC: foo08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000779; LINUX-64-STATIC: movl lsrc(%rip), %
780; LINUX-64-STATIC: movq lptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000781; LINUX-64-STATIC: movl
782; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000783
784; LINUX-32-STATIC: foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000785; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000788; LINUX-32-STATIC-NEXT: ret
789
790; LINUX-32-PIC: foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000791; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000794; LINUX-32-PIC-NEXT: ret
795
796; LINUX-64-PIC: foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000797; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000800; LINUX-64-PIC-NEXT: ret
801
802; DARWIN-32-STATIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000803; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000806; DARWIN-32-STATIC-NEXT: ret
807
808; DARWIN-32-DYNAMIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000809; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000812; DARWIN-32-DYNAMIC-NEXT: ret
813
814; DARWIN-32-PIC: _foo08:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000815; DARWIN-32-PIC: calll L11$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000816; DARWIN-32-PIC-NEXT: L11$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000817; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000821; DARWIN-32-PIC-NEXT: ret
822
823; DARWIN-64-STATIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000824; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000827; DARWIN-64-STATIC-NEXT: ret
828
829; DARWIN-64-DYNAMIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000830; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000833; DARWIN-64-DYNAMIC-NEXT: ret
834
835; DARWIN-64-PIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000836; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000839; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000840}
841
842define void @qux00() nounwind {
843entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000847; LINUX-64-STATIC: qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000848; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]]
849; LINUX-64-STATIC: movl [[EAX]], dst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000850; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000851
852; LINUX-32-STATIC: qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000853; LINUX-32-STATIC: movl src+64, [[EAX:%e.x]]
854; LINUX-32-STATIC-NEXT: movl [[EAX]], dst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000855; LINUX-32-STATIC-NEXT: ret
856
857; LINUX-32-PIC: qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000858; LINUX-32-PIC: movl src+64, [[EAX:%e.x]]
859; LINUX-32-PIC-NEXT: movl [[EAX]], dst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000860; LINUX-32-PIC-NEXT: ret
861
862; LINUX-64-PIC: qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000863; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000867; LINUX-64-PIC-NEXT: ret
868
869; DARWIN-32-STATIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000870; DARWIN-32-STATIC: movl _src+64, [[EAX:%e.x]]
871; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000872; DARWIN-32-STATIC-NEXT: ret
873
874; DARWIN-32-DYNAMIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000875; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000879; DARWIN-32-DYNAMIC-NEXT: ret
880
881; DARWIN-32-PIC: _qux00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000882; DARWIN-32-PIC: calll L12$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000883; DARWIN-32-PIC-NEXT: L12$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000884; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000889; DARWIN-32-PIC-NEXT: ret
890
891; DARWIN-64-STATIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000892; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000896; DARWIN-64-STATIC-NEXT: ret
897
898; DARWIN-64-DYNAMIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000899; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000903; DARWIN-64-DYNAMIC-NEXT: ret
904
905; DARWIN-64-PIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000906; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000910; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000911}
912
913define void @qxx00() nounwind {
914entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +0000918; LINUX-64-STATIC: qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000919; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]]
920; LINUX-64-STATIC: movl [[EAX]], xdst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000921; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000922
923; LINUX-32-STATIC: qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000924; LINUX-32-STATIC: movl xsrc+64, [[EAX:%e.x]]
925; LINUX-32-STATIC-NEXT: movl [[EAX]], xdst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000926; LINUX-32-STATIC-NEXT: ret
927
928; LINUX-32-PIC: qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000929; LINUX-32-PIC: movl xsrc+64, [[EAX:%e.x]]
930; LINUX-32-PIC-NEXT: movl [[EAX]], xdst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000931; LINUX-32-PIC-NEXT: ret
932
933; LINUX-64-PIC: qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000934; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000938; LINUX-64-PIC-NEXT: ret
939
940; DARWIN-32-STATIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000941; DARWIN-32-STATIC: movl _xsrc+64, [[EAX:%e.x]]
942; DARWIN-32-STATIC-NEXT: movl [[EAX]], _xdst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000943; DARWIN-32-STATIC-NEXT: ret
944
945; DARWIN-32-DYNAMIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000946; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000950; DARWIN-32-DYNAMIC-NEXT: ret
951
952; DARWIN-32-PIC: _qxx00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000953; DARWIN-32-PIC: calll L13$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000954; DARWIN-32-PIC-NEXT: L13$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000955; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000960; DARWIN-32-PIC-NEXT: ret
961
962; DARWIN-64-STATIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000963; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000967; DARWIN-64-STATIC-NEXT: ret
968
969; DARWIN-64-DYNAMIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000970; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000974; DARWIN-64-DYNAMIC-NEXT: ret
975
976; DARWIN-64-PIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000977; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000981; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000982}
983
984define void @qux01() nounwind {
985entry:
986 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
987 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000988; LINUX-64-STATIC: qux01:
989; LINUX-64-STATIC: movq $dst+64, ptr
990; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000991
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001001; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001005; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001012; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001016; DARWIN-32-DYNAMIC-NEXT: ret
1017
1018; DARWIN-32-PIC: _qux01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001019; DARWIN-32-PIC: calll L14$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001020; DARWIN-32-PIC-NEXT: L14$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001021; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001026; DARWIN-32-PIC-NEXT: ret
1027
1028; DARWIN-64-STATIC: _qux01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001029; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001033; DARWIN-64-STATIC-NEXT: ret
1034
1035; DARWIN-64-DYNAMIC: _qux01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001036; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001040; DARWIN-64-DYNAMIC-NEXT: ret
1041
1042; DARWIN-64-PIC: _qux01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001043; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001047; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001048}
1049
1050define void @qxx01() nounwind {
1051entry:
1052 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1053 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001054; LINUX-64-STATIC: qxx01:
1055; LINUX-64-STATIC: movq $xdst+64, ptr
1056; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001057
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001067; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001071; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001078; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001082; DARWIN-32-DYNAMIC-NEXT: ret
1083
1084; DARWIN-32-PIC: _qxx01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001085; DARWIN-32-PIC: calll L15$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001086; DARWIN-32-PIC-NEXT: L15$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001087; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001092; DARWIN-32-PIC-NEXT: ret
1093
1094; DARWIN-64-STATIC: _qxx01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001095; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001099; DARWIN-64-STATIC-NEXT: ret
1100
1101; DARWIN-64-DYNAMIC: _qxx01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001102; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001106; DARWIN-64-DYNAMIC-NEXT: ret
1107
1108; DARWIN-64-PIC: _qxx01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001109; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001113; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001114}
1115
1116define void @qux02() nounwind {
1117entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001122; LINUX-64-STATIC: qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001123; 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]])
Chris Lattner4f066492009-07-11 20:29:19 +00001126; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001127
1128; LINUX-32-STATIC: qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001129; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001132; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001133 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001134
1135; LINUX-32-PIC: qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001136; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001139; LINUX-32-PIC-NEXT: ret
1140
1141; LINUX-64-PIC: qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001142; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001147; LINUX-64-PIC-NEXT: ret
1148
1149; DARWIN-32-STATIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001150; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001153; DARWIN-32-STATIC-NEXT: ret
1154
1155; DARWIN-32-DYNAMIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001156; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001161; DARWIN-32-DYNAMIC-NEXT: ret
1162
1163; DARWIN-32-PIC: _qux02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001164; DARWIN-32-PIC: calll L16$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001165; DARWIN-32-PIC-NEXT: L16$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001166; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001172; DARWIN-32-PIC-NEXT: ret
1173
1174; DARWIN-64-STATIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001175; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001180; DARWIN-64-STATIC-NEXT: ret
1181
1182; DARWIN-64-DYNAMIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001183; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001188; DARWIN-64-DYNAMIC-NEXT: ret
1189
1190; DARWIN-64-PIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001191; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001196; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001197}
1198
1199define void @qxx02() nounwind {
1200entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001205; LINUX-64-STATIC: qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001206; 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]])
Chris Lattner4f066492009-07-11 20:29:19 +00001209; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001210
1211; LINUX-32-STATIC: qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001212; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001215; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001216 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001217
1218; LINUX-32-PIC: qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001219; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001222; LINUX-32-PIC-NEXT: ret
1223
1224; LINUX-64-PIC: qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001225; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001230; LINUX-64-PIC-NEXT: ret
1231
1232; DARWIN-32-STATIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001233; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001236; DARWIN-32-STATIC-NEXT: ret
1237
1238; DARWIN-32-DYNAMIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001239; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001244; DARWIN-32-DYNAMIC-NEXT: ret
1245
1246; DARWIN-32-PIC: _qxx02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001247; DARWIN-32-PIC: calll L17$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001248; DARWIN-32-PIC-NEXT: L17$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001249; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001255; DARWIN-32-PIC-NEXT: ret
1256
1257; DARWIN-64-STATIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001258; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001263; DARWIN-64-STATIC-NEXT: ret
1264
1265; DARWIN-64-DYNAMIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001266; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001271; DARWIN-64-DYNAMIC-NEXT: ret
1272
1273; DARWIN-64-PIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001274; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001279; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001280}
1281
1282define void @qux03() nounwind {
1283entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001287; LINUX-64-STATIC: qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001288; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]]
1289; LINUX-64-STATIC: movl [[EAX]], ddst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00001290; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001291
1292; LINUX-32-STATIC: qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001293; LINUX-32-STATIC: movl dsrc+64, [[EAX:%e.x]]
1294; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001295; LINUX-32-STATIC-NEXT: ret
1296
1297; LINUX-32-PIC: qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001298; LINUX-32-PIC: movl dsrc+64, [[EAX:%e.x]]
1299; LINUX-32-PIC-NEXT: movl [[EAX]], ddst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001300; LINUX-32-PIC-NEXT: ret
1301
1302; LINUX-64-PIC: qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001303; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001307; LINUX-64-PIC-NEXT: ret
1308
1309; DARWIN-32-STATIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001310; DARWIN-32-STATIC: movl _dsrc+64, [[EAX:%e.x]]
1311; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001312; DARWIN-32-STATIC-NEXT: ret
1313
1314; DARWIN-32-DYNAMIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001315; DARWIN-32-DYNAMIC: movl _dsrc+64, [[EAX:%e.x]]
1316; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001317; DARWIN-32-DYNAMIC-NEXT: ret
1318
1319; DARWIN-32-PIC: _qux03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001320; DARWIN-32-PIC: calll L18$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001321; DARWIN-32-PIC-NEXT: L18$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001322; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001325; DARWIN-32-PIC-NEXT: ret
1326
1327; DARWIN-64-STATIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001328; DARWIN-64-STATIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1329; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001330; DARWIN-64-STATIC-NEXT: ret
1331
1332; DARWIN-64-DYNAMIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001333; DARWIN-64-DYNAMIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1334; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001335; DARWIN-64-DYNAMIC-NEXT: ret
1336
1337; DARWIN-64-PIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001338; DARWIN-64-PIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1339; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001340; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001341}
1342
1343define void @qux04() nounwind {
1344entry:
1345 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1346 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001347; LINUX-64-STATIC: qux04:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001348; LINUX-64-STATIC: movq $ddst+64, dptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00001349; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001350
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001360; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001364; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001375; DARWIN-32-PIC: calll L19$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001376; DARWIN-32-PIC-NEXT: L19$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001377; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001380; DARWIN-32-PIC-NEXT: ret
1381
1382; DARWIN-64-STATIC: _qux04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001383; DARWIN-64-STATIC: leaq _ddst+64(%rip), [[RAX:%r.x]]
1384; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001385; DARWIN-64-STATIC-NEXT: ret
1386
1387; DARWIN-64-DYNAMIC: _qux04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001388; DARWIN-64-DYNAMIC: leaq _ddst+64(%rip), [[RAX:%r.x]]
1389; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001390; DARWIN-64-DYNAMIC-NEXT: ret
1391
1392; DARWIN-64-PIC: _qux04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001393; DARWIN-64-PIC: leaq _ddst+64(%rip), [[RAX:%r.x]]
1394; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001395; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001396}
1397
1398define void @qux05() nounwind {
1399entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001404; LINUX-64-STATIC: qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001405; 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]])
Chris Lattner4f066492009-07-11 20:29:19 +00001408; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001409
1410; LINUX-32-STATIC: qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001411; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001414; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001415 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001416
1417; LINUX-32-PIC: qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001418; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001421; LINUX-32-PIC-NEXT: ret
1422
1423; LINUX-64-PIC: qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001424; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001429; LINUX-64-PIC-NEXT: ret
1430
1431; DARWIN-32-STATIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001432; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001435; DARWIN-32-STATIC-NEXT: ret
1436
1437; DARWIN-32-DYNAMIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001438; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001441; DARWIN-32-DYNAMIC-NEXT: ret
1442
1443; DARWIN-32-PIC: _qux05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001444; DARWIN-32-PIC: calll L20$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001445; DARWIN-32-PIC-NEXT: L20$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001446; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001450; DARWIN-32-PIC-NEXT: ret
1451
1452; DARWIN-64-STATIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001453; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001456; DARWIN-64-STATIC-NEXT: ret
1457
1458; DARWIN-64-DYNAMIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001459; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001462; DARWIN-64-DYNAMIC-NEXT: ret
1463
1464; DARWIN-64-PIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001465; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001468; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001469}
1470
1471define void @qux06() nounwind {
1472entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001476; LINUX-64-STATIC: qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001477; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]]
1478; LINUX-64-STATIC: movl [[EAX]], ldst+64
Chris Lattner4f066492009-07-11 20:29:19 +00001479; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001480
1481; LINUX-32-STATIC: qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001482; LINUX-32-STATIC: movl lsrc+64, [[EAX:%e.x]]
1483; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001484; LINUX-32-STATIC-NEXT: ret
1485
1486; LINUX-32-PIC: qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001487; LINUX-32-PIC: movl lsrc+64, [[EAX:%e.x]]
1488; LINUX-32-PIC-NEXT: movl [[EAX]], ldst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001489; LINUX-32-PIC-NEXT: ret
1490
1491; LINUX-64-PIC: qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001492; LINUX-64-PIC: movl lsrc+64(%rip), [[EAX:%e.x]]
1493; LINUX-64-PIC-NEXT: movl [[EAX]], ldst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001494; LINUX-64-PIC-NEXT: ret
1495
1496; DARWIN-32-STATIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001497; DARWIN-32-STATIC: movl _lsrc+64, [[EAX:%e.x]]
1498; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001499; DARWIN-32-STATIC-NEXT: ret
1500
1501; DARWIN-32-DYNAMIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001502; DARWIN-32-DYNAMIC: movl _lsrc+64, [[EAX:%e.x]]
1503; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001504; DARWIN-32-DYNAMIC-NEXT: ret
1505
1506; DARWIN-32-PIC: _qux06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001507; DARWIN-32-PIC: calll L21$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001508; DARWIN-32-PIC-NEXT: L21$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001509; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001512; DARWIN-32-PIC-NEXT: ret
1513
1514; DARWIN-64-STATIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001515; DARWIN-64-STATIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1516; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001517; DARWIN-64-STATIC-NEXT: ret
1518
1519; DARWIN-64-DYNAMIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001520; DARWIN-64-DYNAMIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1521; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001522; DARWIN-64-DYNAMIC-NEXT: ret
1523
1524; DARWIN-64-PIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001525; DARWIN-64-PIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1526; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001527; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001528}
1529
1530define void @qux07() nounwind {
1531entry:
1532 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1533 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001534; LINUX-64-STATIC: qux07:
1535; LINUX-64-STATIC: movq $ldst+64, lptr
1536; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001537
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001547; LINUX-64-PIC: leaq ldst+64(%rip), [[RAX:%r.x]]
1548; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001549; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001560; DARWIN-32-PIC: calll L22$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001561; DARWIN-32-PIC-NEXT: L22$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001562; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001565; DARWIN-32-PIC-NEXT: ret
1566
1567; DARWIN-64-STATIC: _qux07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001568; DARWIN-64-STATIC: leaq _ldst+64(%rip), [[RAX:%r.x]]
1569; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001570; DARWIN-64-STATIC-NEXT: ret
1571
1572; DARWIN-64-DYNAMIC: _qux07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001573; DARWIN-64-DYNAMIC: leaq _ldst+64(%rip), [[RAX:%r.x]]
1574; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001575; DARWIN-64-DYNAMIC-NEXT: ret
1576
1577; DARWIN-64-PIC: _qux07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001578; DARWIN-64-PIC: leaq _ldst+64(%rip), [[RAX:%r.x]]
1579; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001580; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001581}
1582
1583define void @qux08() nounwind {
1584entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001589; LINUX-64-STATIC: qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001590; 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]])
Chris Lattner4f066492009-07-11 20:29:19 +00001593; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001594
1595; LINUX-32-STATIC: qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001596; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001599; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001600 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001601
1602; LINUX-32-PIC: qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001603; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001606; LINUX-32-PIC-NEXT: ret
1607
1608; LINUX-64-PIC: qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001609; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001612; LINUX-64-PIC-NEXT: ret
1613
1614; DARWIN-32-STATIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001615; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001618; DARWIN-32-STATIC-NEXT: ret
1619
1620; DARWIN-32-DYNAMIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001621; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001624; DARWIN-32-DYNAMIC-NEXT: ret
1625
1626; DARWIN-32-PIC: _qux08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001627; DARWIN-32-PIC: calll L23$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001628; DARWIN-32-PIC-NEXT: L23$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001629; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001633; DARWIN-32-PIC-NEXT: ret
1634
1635; DARWIN-64-STATIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001636; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001639; DARWIN-64-STATIC-NEXT: ret
1640
1641; DARWIN-64-DYNAMIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001642; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001645; DARWIN-64-DYNAMIC-NEXT: ret
1646
1647; DARWIN-64-PIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001648; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001651; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001652}
1653
1654define void @ind00(i64 %i) nounwind {
1655entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001661; LINUX-64-STATIC: ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001662; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]]
1663; LINUX-64-STATIC: movl [[EAX]], dst(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00001664; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001665
1666; LINUX-32-STATIC: ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001667; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001670; LINUX-32-STATIC-NEXT: ret
1671
1672; LINUX-32-PIC: ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001673; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001676; LINUX-32-PIC-NEXT: ret
1677
1678; LINUX-64-PIC: ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001679; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001683; LINUX-64-PIC-NEXT: ret
1684
1685; DARWIN-32-STATIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001686; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001689; DARWIN-32-STATIC-NEXT: ret
1690
1691; DARWIN-32-DYNAMIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001692; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001697; DARWIN-32-DYNAMIC-NEXT: ret
1698
1699; DARWIN-32-PIC: _ind00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001700; DARWIN-32-PIC: calll L24$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001701; DARWIN-32-PIC-NEXT: L24$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001702; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001708; DARWIN-32-PIC-NEXT: ret
1709
1710; DARWIN-64-STATIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001711; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001715; DARWIN-64-STATIC-NEXT: ret
1716
1717; DARWIN-64-DYNAMIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001718; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001722; DARWIN-64-DYNAMIC-NEXT: ret
1723
1724; DARWIN-64-PIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001725; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001729; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001730}
1731
1732define void @ixd00(i64 %i) nounwind {
1733entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001739; LINUX-64-STATIC: ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001740; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]]
1741; LINUX-64-STATIC: movl [[EAX]], xdst(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00001742; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001743
1744; LINUX-32-STATIC: ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001745; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001748; LINUX-32-STATIC-NEXT: ret
1749
1750; LINUX-32-PIC: ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001751; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001754; LINUX-32-PIC-NEXT: ret
1755
1756; LINUX-64-PIC: ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001757; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001761; LINUX-64-PIC-NEXT: ret
1762
1763; DARWIN-32-STATIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001764; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001767; DARWIN-32-STATIC-NEXT: ret
1768
1769; DARWIN-32-DYNAMIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001770; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001775; DARWIN-32-DYNAMIC-NEXT: ret
1776
1777; DARWIN-32-PIC: _ixd00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001778; DARWIN-32-PIC: calll L25$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001779; DARWIN-32-PIC-NEXT: L25$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001780; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001786; DARWIN-32-PIC-NEXT: ret
1787
1788; DARWIN-64-STATIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001789; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001793; DARWIN-64-STATIC-NEXT: ret
1794
1795; DARWIN-64-DYNAMIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001796; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001800; DARWIN-64-DYNAMIC-NEXT: ret
1801
1802; DARWIN-64-PIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001803; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001807; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001808}
1809
1810define void @ind01(i64 %i) nounwind {
1811entry:
1812 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1813 store i32* %0, i32** @ptr, align 8
1814 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001815; LINUX-64-STATIC: ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001816; LINUX-64-STATIC: leaq dst(,%rdi,4), [[RAX:%r.x]]
1817; LINUX-64-STATIC: movq [[RAX]], ptr
Chris Lattner4f066492009-07-11 20:29:19 +00001818; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001819
1820; LINUX-32-STATIC: ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001821; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001824; LINUX-32-STATIC-NEXT: ret
1825
1826; LINUX-32-PIC: ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001827; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001830; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001835; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1836; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001837; LINUX-64-PIC-NEXT: ret
1838
1839; DARWIN-32-STATIC: _ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001840; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001843; DARWIN-32-STATIC-NEXT: ret
1844
1845; DARWIN-32-DYNAMIC: _ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001846; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001851; DARWIN-32-DYNAMIC-NEXT: ret
1852
1853; DARWIN-32-PIC: _ind01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001854; DARWIN-32-PIC: calll L26$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001855; DARWIN-32-PIC-NEXT: L26$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001856; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001862; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001867; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1868; DARWIN-64-STATIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001869; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001874; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1875; DARWIN-64-DYNAMIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001876; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001881; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1882; DARWIN-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001883; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001884}
1885
1886define void @ixd01(i64 %i) nounwind {
1887entry:
1888 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1889 store i32* %0, i32** @ptr, align 8
1890 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001891; LINUX-64-STATIC: ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001892; LINUX-64-STATIC: leaq xdst(,%rdi,4), [[RAX:%r.x]]
1893; LINUX-64-STATIC: movq [[RAX]], ptr
Chris Lattner4f066492009-07-11 20:29:19 +00001894; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001895
1896; LINUX-32-STATIC: ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001897; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001900; LINUX-32-STATIC-NEXT: ret
1901
1902; LINUX-32-PIC: ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001903; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001906; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001911; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1912; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001913; LINUX-64-PIC-NEXT: ret
1914
1915; DARWIN-32-STATIC: _ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001916; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001919; DARWIN-32-STATIC-NEXT: ret
1920
1921; DARWIN-32-DYNAMIC: _ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001922; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001927; DARWIN-32-DYNAMIC-NEXT: ret
1928
1929; DARWIN-32-PIC: _ixd01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001930; DARWIN-32-PIC: calll L27$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001931; DARWIN-32-PIC-NEXT: L27$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001932; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001938; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001943; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1944; DARWIN-64-STATIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001945; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001950; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1951; DARWIN-64-DYNAMIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001952; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001957; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1958; DARWIN-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001959; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001960}
1961
1962define void @ind02(i64 %i) nounwind {
1963entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00001970; LINUX-64-STATIC: ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001971; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00001974; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001975
1976; LINUX-32-STATIC: ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001977; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001981; LINUX-32-STATIC-NEXT: ret
1982
1983; LINUX-32-PIC: ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001984; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001988; LINUX-32-PIC-NEXT: ret
1989
1990; LINUX-64-PIC: ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001991; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001996; LINUX-64-PIC-NEXT: ret
1997
1998; DARWIN-32-STATIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001999; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002003; DARWIN-32-STATIC-NEXT: ret
2004
2005; DARWIN-32-DYNAMIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002006; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002012; DARWIN-32-DYNAMIC-NEXT: ret
2013
2014; DARWIN-32-PIC: _ind02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002015; DARWIN-32-PIC: calll L28$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002016; DARWIN-32-PIC-NEXT: L28$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002017; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002024; DARWIN-32-PIC-NEXT: ret
2025
2026; DARWIN-64-STATIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002027; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002032; DARWIN-64-STATIC-NEXT: ret
2033
2034; DARWIN-64-DYNAMIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002035; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002040; DARWIN-64-DYNAMIC-NEXT: ret
2041
2042; DARWIN-64-PIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002043; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002048; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002049}
2050
2051define void @ixd02(i64 %i) nounwind {
2052entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002059; LINUX-64-STATIC: ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002060; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00002063; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002064
2065; LINUX-32-STATIC: ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002066; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002070; LINUX-32-STATIC-NEXT: ret
2071
2072; LINUX-32-PIC: ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002073; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002077; LINUX-32-PIC-NEXT: ret
2078
2079; LINUX-64-PIC: ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002080; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002085; LINUX-64-PIC-NEXT: ret
2086
2087; DARWIN-32-STATIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002088; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002092; DARWIN-32-STATIC-NEXT: ret
2093
2094; DARWIN-32-DYNAMIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002095; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002101; DARWIN-32-DYNAMIC-NEXT: ret
2102
2103; DARWIN-32-PIC: _ixd02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002104; DARWIN-32-PIC: calll L29$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002105; DARWIN-32-PIC-NEXT: L29$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002106; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002113; DARWIN-32-PIC-NEXT: ret
2114
2115; DARWIN-64-STATIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002116; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002121; DARWIN-64-STATIC-NEXT: ret
2122
2123; DARWIN-64-DYNAMIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002124; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002129; DARWIN-64-DYNAMIC-NEXT: ret
2130
2131; DARWIN-64-PIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002132; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002137; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002138}
2139
2140define void @ind03(i64 %i) nounwind {
2141entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002147; LINUX-64-STATIC: ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002148; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]]
2149; LINUX-64-STATIC: movl [[EAX]], ddst(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002150; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002151
2152; LINUX-32-STATIC: ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002153; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002156; LINUX-32-STATIC-NEXT: ret
2157
2158; LINUX-32-PIC: ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002159; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002162; LINUX-32-PIC-NEXT: ret
2163
2164; LINUX-64-PIC: ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002165; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002169; LINUX-64-PIC-NEXT: ret
2170
2171; DARWIN-32-STATIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002172; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002175; DARWIN-32-STATIC-NEXT: ret
2176
2177; DARWIN-32-DYNAMIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002178; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002181; DARWIN-32-DYNAMIC-NEXT: ret
2182
2183; DARWIN-32-PIC: _ind03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002184; DARWIN-32-PIC: calll L30$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002185; DARWIN-32-PIC-NEXT: L30$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002186; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002190; DARWIN-32-PIC-NEXT: ret
2191
2192; DARWIN-64-STATIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002193; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002197; DARWIN-64-STATIC-NEXT: ret
2198
2199; DARWIN-64-DYNAMIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002200; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002204; DARWIN-64-DYNAMIC-NEXT: ret
2205
2206; DARWIN-64-PIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002207; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002211; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002212}
2213
2214define void @ind04(i64 %i) nounwind {
2215entry:
2216 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2217 store i32* %0, i32** @dptr, align 8
2218 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002219; LINUX-64-STATIC: ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002220; LINUX-64-STATIC: leaq ddst(,%rdi,4), [[RAX:%r.x]]
2221; LINUX-64-STATIC: movq [[RAX]], dptr
Chris Lattner4f066492009-07-11 20:29:19 +00002222; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002223
2224; LINUX-32-STATIC: ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002225; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002228; LINUX-32-STATIC-NEXT: ret
2229
2230; LINUX-32-PIC: ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002231; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002234; 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
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002239; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]]
2240; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002241; LINUX-64-PIC-NEXT: ret
2242
2243; DARWIN-32-STATIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002244; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002247; DARWIN-32-STATIC-NEXT: ret
2248
2249; DARWIN-32-DYNAMIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002250; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002253; DARWIN-32-DYNAMIC-NEXT: ret
2254
2255; DARWIN-32-PIC: _ind04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002256; DARWIN-32-PIC: calll L31$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002257; DARWIN-32-PIC-NEXT: L31$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002258; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002262; DARWIN-32-PIC-NEXT: ret
2263
2264; DARWIN-64-STATIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002265; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002268; DARWIN-64-STATIC-NEXT: ret
2269
2270; DARWIN-64-DYNAMIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002271; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002274; DARWIN-64-DYNAMIC-NEXT: ret
2275
2276; DARWIN-64-PIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002277; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002280; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002281}
2282
2283define void @ind05(i64 %i) nounwind {
2284entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002291; LINUX-64-STATIC: ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002292; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00002295; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002296
2297; LINUX-32-STATIC: ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002298; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002302; LINUX-32-STATIC-NEXT: ret
2303
2304; LINUX-32-PIC: ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002305; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002309; LINUX-32-PIC-NEXT: ret
2310
2311; LINUX-64-PIC: ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002312; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002317; LINUX-64-PIC-NEXT: ret
2318
2319; DARWIN-32-STATIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002320; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002324; DARWIN-32-STATIC-NEXT: ret
2325
2326; DARWIN-32-DYNAMIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002327; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002331; DARWIN-32-DYNAMIC-NEXT: ret
2332
2333; DARWIN-32-PIC: _ind05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002334; DARWIN-32-PIC: calll L32$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002335; DARWIN-32-PIC-NEXT: L32$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002336; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002341; DARWIN-32-PIC-NEXT: ret
2342
2343; DARWIN-64-STATIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002344; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002348; DARWIN-64-STATIC-NEXT: ret
2349
2350; DARWIN-64-DYNAMIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002351; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002355; DARWIN-64-DYNAMIC-NEXT: ret
2356
2357; DARWIN-64-PIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002358; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002362; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002363}
2364
2365define void @ind06(i64 %i) nounwind {
2366entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002372; LINUX-64-STATIC: ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002373; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]]
2374; LINUX-64-STATIC: movl [[EAX]], ldst(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002375; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002376
2377; LINUX-32-STATIC: ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002378; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002381; LINUX-32-STATIC-NEXT: ret
2382
2383; LINUX-32-PIC: ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002384; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002387; LINUX-32-PIC-NEXT: ret
2388
2389; LINUX-64-PIC: ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002390; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002394; LINUX-64-PIC-NEXT: ret
2395
2396; DARWIN-32-STATIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002397; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002400; DARWIN-32-STATIC-NEXT: ret
2401
2402; DARWIN-32-DYNAMIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002403; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002406; DARWIN-32-DYNAMIC-NEXT: ret
2407
2408; DARWIN-32-PIC: _ind06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002409; DARWIN-32-PIC: calll L33$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002410; DARWIN-32-PIC-NEXT: L33$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002411; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002415; DARWIN-32-PIC-NEXT: ret
2416
2417; DARWIN-64-STATIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002418; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002422; DARWIN-64-STATIC-NEXT: ret
2423
2424; DARWIN-64-DYNAMIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002425; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002429; DARWIN-64-DYNAMIC-NEXT: ret
2430
2431; DARWIN-64-PIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002432; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002436; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002437}
2438
2439define void @ind07(i64 %i) nounwind {
2440entry:
2441 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2442 store i32* %0, i32** @lptr, align 8
2443 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002444; LINUX-64-STATIC: ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002445; LINUX-64-STATIC: leaq ldst(,%rdi,4), [[RAX:%r.x]]
2446; LINUX-64-STATIC: movq [[RAX]], lptr
Chris Lattner4f066492009-07-11 20:29:19 +00002447; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002448
2449; LINUX-32-STATIC: ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002450; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002453; LINUX-32-STATIC-NEXT: ret
2454
2455; LINUX-32-PIC: ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002456; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002459; LINUX-32-PIC-NEXT: ret
2460
2461; LINUX-64-PIC: ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002462; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002465; LINUX-64-PIC-NEXT: ret
2466
2467; DARWIN-32-STATIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002468; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002471; DARWIN-32-STATIC-NEXT: ret
2472
2473; DARWIN-32-DYNAMIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002474; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002477; DARWIN-32-DYNAMIC-NEXT: ret
2478
2479; DARWIN-32-PIC: _ind07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002480; DARWIN-32-PIC: calll L34$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002481; DARWIN-32-PIC-NEXT: L34$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002482; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002486; DARWIN-32-PIC-NEXT: ret
2487
2488; DARWIN-64-STATIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002489; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002492; DARWIN-64-STATIC-NEXT: ret
2493
2494; DARWIN-64-DYNAMIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002495; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002498; DARWIN-64-DYNAMIC-NEXT: ret
2499
2500; DARWIN-64-PIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002501; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002504; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002505}
2506
2507define void @ind08(i64 %i) nounwind {
2508entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002515; LINUX-64-STATIC: ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002516; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00002519; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002520
2521; LINUX-32-STATIC: ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002522; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002526; LINUX-32-STATIC-NEXT: ret
2527
2528; LINUX-32-PIC: ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002529; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002533; LINUX-32-PIC-NEXT: ret
2534
2535; LINUX-64-PIC: ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002536; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002540; LINUX-64-PIC-NEXT: ret
2541
2542; DARWIN-32-STATIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002543; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002547; DARWIN-32-STATIC-NEXT: ret
2548
2549; DARWIN-32-DYNAMIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002550; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002554; DARWIN-32-DYNAMIC-NEXT: ret
2555
2556; DARWIN-32-PIC: _ind08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002557; DARWIN-32-PIC: calll L35$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002558; DARWIN-32-PIC-NEXT: L35$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002559; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002564; DARWIN-32-PIC-NEXT: ret
2565
2566; DARWIN-64-STATIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002567; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002571; DARWIN-64-STATIC-NEXT: ret
2572
2573; DARWIN-64-DYNAMIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002574; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002578; DARWIN-64-DYNAMIC-NEXT: ret
2579
2580; DARWIN-64-PIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002581; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002585; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002586}
2587
2588define void @off00(i64 %i) nounwind {
2589entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002596; LINUX-64-STATIC: off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002597; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]]
2598; LINUX-64-STATIC: movl [[EAX]], dst+64(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002599; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002600
2601; LINUX-32-STATIC: off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002602; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002605; LINUX-32-STATIC-NEXT: ret
2606
2607; LINUX-32-PIC: off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002608; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002611; LINUX-32-PIC-NEXT: ret
2612
2613; LINUX-64-PIC: off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002614; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002618; LINUX-64-PIC-NEXT: ret
2619
2620; DARWIN-32-STATIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002621; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002624; DARWIN-32-STATIC-NEXT: ret
2625
2626; DARWIN-32-DYNAMIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002627; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002632; DARWIN-32-DYNAMIC-NEXT: ret
2633
2634; DARWIN-32-PIC: _off00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002635; DARWIN-32-PIC: calll L36$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002636; DARWIN-32-PIC-NEXT: L36$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002637; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002643; DARWIN-32-PIC-NEXT: ret
2644
2645; DARWIN-64-STATIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002646; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002650; DARWIN-64-STATIC-NEXT: ret
2651
2652; DARWIN-64-DYNAMIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002653; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002657; DARWIN-64-DYNAMIC-NEXT: ret
2658
2659; DARWIN-64-PIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002660; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002664; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002665}
2666
2667define void @oxf00(i64 %i) nounwind {
2668entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002675; LINUX-64-STATIC: oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002676; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]]
2677; LINUX-64-STATIC: movl [[EAX]], xdst+64(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002678; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002679
2680; LINUX-32-STATIC: oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002681; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002684; LINUX-32-STATIC-NEXT: ret
2685
2686; LINUX-32-PIC: oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002687; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002690; LINUX-32-PIC-NEXT: ret
2691
2692; LINUX-64-PIC: oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002693; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002697; LINUX-64-PIC-NEXT: ret
2698
2699; DARWIN-32-STATIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002700; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002703; DARWIN-32-STATIC-NEXT: ret
2704
2705; DARWIN-32-DYNAMIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002706; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002711; DARWIN-32-DYNAMIC-NEXT: ret
2712
2713; DARWIN-32-PIC: _oxf00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002714; DARWIN-32-PIC: calll L37$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002715; DARWIN-32-PIC-NEXT: L37$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002716; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002722; DARWIN-32-PIC-NEXT: ret
2723
2724; DARWIN-64-STATIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002725; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002729; DARWIN-64-STATIC-NEXT: ret
2730
2731; DARWIN-64-DYNAMIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002732; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002736; DARWIN-64-DYNAMIC-NEXT: ret
2737
2738; DARWIN-64-PIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002739; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002743; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002744}
2745
2746define void @off01(i64 %i) nounwind {
2747entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002752; LINUX-64-STATIC: off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002753; LINUX-64-STATIC: leaq dst+64(,%rdi,4), [[RAX:%r.x]]
2754; LINUX-64-STATIC: movq [[RAX]], ptr
Chris Lattner4f066492009-07-11 20:29:19 +00002755; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002756
2757; LINUX-32-STATIC: off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002758; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002761; LINUX-32-STATIC-NEXT: ret
2762
2763; LINUX-32-PIC: off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002764; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002767; LINUX-32-PIC-NEXT: ret
2768
2769; LINUX-64-PIC: off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002770; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002774; LINUX-64-PIC-NEXT: ret
2775
2776; DARWIN-32-STATIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002777; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002780; DARWIN-32-STATIC-NEXT: ret
2781
2782; DARWIN-32-DYNAMIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002783; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002788; DARWIN-32-DYNAMIC-NEXT: ret
2789
2790; DARWIN-32-PIC: _off01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002791; DARWIN-32-PIC: calll L38$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002792; DARWIN-32-PIC-NEXT: L38$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002793; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002799; DARWIN-32-PIC-NEXT: ret
2800
2801; DARWIN-64-STATIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002802; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002806; DARWIN-64-STATIC-NEXT: ret
2807
2808; DARWIN-64-DYNAMIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002809; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002813; DARWIN-64-DYNAMIC-NEXT: ret
2814
2815; DARWIN-64-PIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002816; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002820; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002821}
2822
2823define void @oxf01(i64 %i) nounwind {
2824entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002829; LINUX-64-STATIC: oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002830; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), [[RAX:%r.x]]
2831; LINUX-64-STATIC: movq [[RAX]], ptr
Chris Lattner4f066492009-07-11 20:29:19 +00002832; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002833
2834; LINUX-32-STATIC: oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002835; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002838; LINUX-32-STATIC-NEXT: ret
2839
2840; LINUX-32-PIC: oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002841; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002844; LINUX-32-PIC-NEXT: ret
2845
2846; LINUX-64-PIC: oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002847; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002851; LINUX-64-PIC-NEXT: ret
2852
2853; DARWIN-32-STATIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002854; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002857; DARWIN-32-STATIC-NEXT: ret
2858
2859; DARWIN-32-DYNAMIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002860; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002865; DARWIN-32-DYNAMIC-NEXT: ret
2866
2867; DARWIN-32-PIC: _oxf01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002868; DARWIN-32-PIC: calll L39$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002869; DARWIN-32-PIC-NEXT: L39$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002870; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002876; DARWIN-32-PIC-NEXT: ret
2877
2878; DARWIN-64-STATIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002879; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002883; DARWIN-64-STATIC-NEXT: ret
2884
2885; DARWIN-64-DYNAMIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002886; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002890; DARWIN-64-DYNAMIC-NEXT: ret
2891
2892; DARWIN-64-PIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002893; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002897; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002898}
2899
2900define void @off02(i64 %i) nounwind {
2901entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002909; LINUX-64-STATIC: off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002910; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00002913; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002914
2915; LINUX-32-STATIC: off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002916; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002920; LINUX-32-STATIC-NEXT: ret
2921
2922; LINUX-32-PIC: off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002923; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002927; LINUX-32-PIC-NEXT: ret
2928
2929; LINUX-64-PIC: off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002930; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002935; LINUX-64-PIC-NEXT: ret
2936
2937; DARWIN-32-STATIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002938; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002942; DARWIN-32-STATIC-NEXT: ret
2943
2944; DARWIN-32-DYNAMIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002945; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002951; DARWIN-32-DYNAMIC-NEXT: ret
2952
2953; DARWIN-32-PIC: _off02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002954; DARWIN-32-PIC: calll L40$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002955; DARWIN-32-PIC-NEXT: L40$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002956; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002963; DARWIN-32-PIC-NEXT: ret
2964
2965; DARWIN-64-STATIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002966; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002971; DARWIN-64-STATIC-NEXT: ret
2972
2973; DARWIN-64-DYNAMIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002974; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002979; DARWIN-64-DYNAMIC-NEXT: ret
2980
2981; DARWIN-64-PIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002982; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002987; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002988}
2989
2990define void @oxf02(i64 %i) nounwind {
2991entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00002999; LINUX-64-STATIC: oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003000; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00003003; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003004
3005; LINUX-32-STATIC: oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003006; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003010; LINUX-32-STATIC-NEXT: ret
3011
3012; LINUX-32-PIC: oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003013; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003017; LINUX-32-PIC-NEXT: ret
3018
3019; LINUX-64-PIC: oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003020; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003025; LINUX-64-PIC-NEXT: ret
3026
3027; DARWIN-32-STATIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003028; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003032; DARWIN-32-STATIC-NEXT: ret
3033
3034; DARWIN-32-DYNAMIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003035; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003041; DARWIN-32-DYNAMIC-NEXT: ret
3042
3043; DARWIN-32-PIC: _oxf02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003044; DARWIN-32-PIC: calll L41$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003045; DARWIN-32-PIC-NEXT: L41$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003046; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003053; DARWIN-32-PIC-NEXT: ret
3054
3055; DARWIN-64-STATIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003056; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003061; DARWIN-64-STATIC-NEXT: ret
3062
3063; DARWIN-64-DYNAMIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003064; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003069; DARWIN-64-DYNAMIC-NEXT: ret
3070
3071; DARWIN-64-PIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003072; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003077; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003078}
3079
3080define void @off03(i64 %i) nounwind {
3081entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003088; LINUX-64-STATIC: off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003089; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]]
3090; LINUX-64-STATIC: movl [[EAX]], ddst+64(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00003091; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003092
3093; LINUX-32-STATIC: off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003094; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003097; LINUX-32-STATIC-NEXT: ret
3098
3099; LINUX-32-PIC: off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003100; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003103; LINUX-32-PIC-NEXT: ret
3104
3105; LINUX-64-PIC: off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003106; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003110; LINUX-64-PIC-NEXT: ret
3111
3112; DARWIN-32-STATIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003113; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003116; DARWIN-32-STATIC-NEXT: ret
3117
3118; DARWIN-32-DYNAMIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003119; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003122; DARWIN-32-DYNAMIC-NEXT: ret
3123
3124; DARWIN-32-PIC: _off03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003125; DARWIN-32-PIC: calll L42$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003126; DARWIN-32-PIC-NEXT: L42$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003127; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003131; DARWIN-32-PIC-NEXT: ret
3132
3133; DARWIN-64-STATIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003134; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003138; DARWIN-64-STATIC-NEXT: ret
3139
3140; DARWIN-64-DYNAMIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003141; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003145; DARWIN-64-DYNAMIC-NEXT: ret
3146
3147; DARWIN-64-PIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003148; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003152; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003153}
3154
3155define void @off04(i64 %i) nounwind {
3156entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003161; LINUX-64-STATIC: off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003162; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), [[RAX:%r.x]]
3163; LINUX-64-STATIC: movq [[RAX]], dptr
Chris Lattner4f066492009-07-11 20:29:19 +00003164; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003165
3166; LINUX-32-STATIC: off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003167; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003170; LINUX-32-STATIC-NEXT: ret
3171
3172; LINUX-32-PIC: off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003173; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003176; LINUX-32-PIC-NEXT: ret
3177
3178; LINUX-64-PIC: off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003179; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003183; LINUX-64-PIC-NEXT: ret
3184
3185; DARWIN-32-STATIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003186; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003189; DARWIN-32-STATIC-NEXT: ret
3190
3191; DARWIN-32-DYNAMIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003192; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003195; DARWIN-32-DYNAMIC-NEXT: ret
3196
3197; DARWIN-32-PIC: _off04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003198; DARWIN-32-PIC: calll L43$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003199; DARWIN-32-PIC-NEXT: L43$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003200; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003204; DARWIN-32-PIC-NEXT: ret
3205
3206; DARWIN-64-STATIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003207; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003210; DARWIN-64-STATIC-NEXT: ret
3211
3212; DARWIN-64-DYNAMIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003213; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003216; DARWIN-64-DYNAMIC-NEXT: ret
3217
3218; DARWIN-64-PIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003219; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003222; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003223}
3224
3225define void @off05(i64 %i) nounwind {
3226entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003234; LINUX-64-STATIC: off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003235; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00003238; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003239
3240; LINUX-32-STATIC: off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003241; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003245; LINUX-32-STATIC-NEXT: ret
3246
3247; LINUX-32-PIC: off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003248; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003252; LINUX-32-PIC-NEXT: ret
3253
3254; LINUX-64-PIC: off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003255; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003260; LINUX-64-PIC-NEXT: ret
3261
3262; DARWIN-32-STATIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003263; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003267; DARWIN-32-STATIC-NEXT: ret
3268
3269; DARWIN-32-DYNAMIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003270; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003274; DARWIN-32-DYNAMIC-NEXT: ret
3275
3276; DARWIN-32-PIC: _off05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003277; DARWIN-32-PIC: calll L44$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003278; DARWIN-32-PIC-NEXT: L44$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003279; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003284; DARWIN-32-PIC-NEXT: ret
3285
3286; DARWIN-64-STATIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003287; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003291; DARWIN-64-STATIC-NEXT: ret
3292
3293; DARWIN-64-DYNAMIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003294; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003298; DARWIN-64-DYNAMIC-NEXT: ret
3299
3300; DARWIN-64-PIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003301; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003305; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003306}
3307
3308define void @off06(i64 %i) nounwind {
3309entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003316; LINUX-64-STATIC: off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003317; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]]
3318; LINUX-64-STATIC: movl [[EAX]], ldst+64(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00003319; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003320
3321; LINUX-32-STATIC: off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003322; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003325; LINUX-32-STATIC-NEXT: ret
3326
3327; LINUX-32-PIC: off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003328; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003331; LINUX-32-PIC-NEXT: ret
3332
3333; LINUX-64-PIC: off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003334; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003338; LINUX-64-PIC-NEXT: ret
3339
3340; DARWIN-32-STATIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003341; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003344; DARWIN-32-STATIC-NEXT: ret
3345
3346; DARWIN-32-DYNAMIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003347; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003350; DARWIN-32-DYNAMIC-NEXT: ret
3351
3352; DARWIN-32-PIC: _off06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003353; DARWIN-32-PIC: calll L45$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003354; DARWIN-32-PIC-NEXT: L45$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003355; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003359; DARWIN-32-PIC-NEXT: ret
3360
3361; DARWIN-64-STATIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003362; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003366; DARWIN-64-STATIC-NEXT: ret
3367
3368; DARWIN-64-DYNAMIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003369; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003373; DARWIN-64-DYNAMIC-NEXT: ret
3374
3375; DARWIN-64-PIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003376; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003380; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003381}
3382
3383define void @off07(i64 %i) nounwind {
3384entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003389; LINUX-64-STATIC: off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003390; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), [[RAX:%r.x]]
3391; LINUX-64-STATIC: movq [[RAX]], lptr
Chris Lattner4f066492009-07-11 20:29:19 +00003392; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003393
3394; LINUX-32-STATIC: off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003395; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003398; LINUX-32-STATIC-NEXT: ret
3399
3400; LINUX-32-PIC: off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003401; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003404; LINUX-32-PIC-NEXT: ret
3405
3406; LINUX-64-PIC: off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003407; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003410; LINUX-64-PIC-NEXT: ret
3411
3412; DARWIN-32-STATIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003413; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003416; DARWIN-32-STATIC-NEXT: ret
3417
3418; DARWIN-32-DYNAMIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003419; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003422; DARWIN-32-DYNAMIC-NEXT: ret
3423
3424; DARWIN-32-PIC: _off07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003425; DARWIN-32-PIC: calll L46$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003426; DARWIN-32-PIC-NEXT: L46$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003427; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003431; DARWIN-32-PIC-NEXT: ret
3432
3433; DARWIN-64-STATIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003434; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003437; DARWIN-64-STATIC-NEXT: ret
3438
3439; DARWIN-64-DYNAMIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003440; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003443; DARWIN-64-DYNAMIC-NEXT: ret
3444
3445; DARWIN-64-PIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003446; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003449; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003450}
3451
3452define void @off08(i64 %i) nounwind {
3453entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003461; LINUX-64-STATIC: off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003462; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00003465; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003466
3467; LINUX-32-STATIC: off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003468; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003472; LINUX-32-STATIC-NEXT: ret
3473
3474; LINUX-32-PIC: off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003475; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003479; LINUX-32-PIC-NEXT: ret
3480
3481; LINUX-64-PIC: off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003482; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003486; LINUX-64-PIC-NEXT: ret
3487
3488; DARWIN-32-STATIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003489; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003493; DARWIN-32-STATIC-NEXT: ret
3494
3495; DARWIN-32-DYNAMIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003496; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003500; DARWIN-32-DYNAMIC-NEXT: ret
3501
3502; DARWIN-32-PIC: _off08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003503; DARWIN-32-PIC: calll L47$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003504; DARWIN-32-PIC-NEXT: L47$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003505; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003510; DARWIN-32-PIC-NEXT: ret
3511
3512; DARWIN-64-STATIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003513; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003517; DARWIN-64-STATIC-NEXT: ret
3518
3519; DARWIN-64-DYNAMIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003520; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003524; DARWIN-64-DYNAMIC-NEXT: ret
3525
3526; DARWIN-64-PIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003527; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003531; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003532}
3533
3534define void @moo00(i64 %i) nounwind {
3535entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003539; LINUX-64-STATIC: moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003540; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]]
3541; LINUX-64-STATIC: movl [[EAX]], dst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003542; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003543
3544; LINUX-32-STATIC: moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003545; LINUX-32-STATIC: movl src+262144, [[EAX:%e.x]]
3546; LINUX-32-STATIC-NEXT: movl [[EAX]], dst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003547; LINUX-32-STATIC-NEXT: ret
3548
3549; LINUX-32-PIC: moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003550; LINUX-32-PIC: movl src+262144, [[EAX:%e.x]]
3551; LINUX-32-PIC-NEXT: movl [[EAX]], dst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003552; LINUX-32-PIC-NEXT: ret
3553
3554; LINUX-64-PIC: moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003555; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003559; LINUX-64-PIC-NEXT: ret
3560
3561; DARWIN-32-STATIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003562; DARWIN-32-STATIC: movl _src+262144, [[EAX:%e.x]]
3563; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003564; DARWIN-32-STATIC-NEXT: ret
3565
3566; DARWIN-32-DYNAMIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003567; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003571; DARWIN-32-DYNAMIC-NEXT: ret
3572
3573; DARWIN-32-PIC: _moo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003574; DARWIN-32-PIC: calll L48$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003575; DARWIN-32-PIC-NEXT: L48$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003576; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003581; DARWIN-32-PIC-NEXT: ret
3582
3583; DARWIN-64-STATIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003584; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003588; DARWIN-64-STATIC-NEXT: ret
3589
3590; DARWIN-64-DYNAMIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003591; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003595; DARWIN-64-DYNAMIC-NEXT: ret
3596
3597; DARWIN-64-PIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003598; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003602; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003603}
3604
3605define void @moo01(i64 %i) nounwind {
3606entry:
3607 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
3608 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003609; LINUX-64-STATIC: moo01:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003610; LINUX-64-STATIC: movq $dst+262144, ptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003611; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003612
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003622; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003626; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003633; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003637; DARWIN-32-DYNAMIC-NEXT: ret
3638
3639; DARWIN-32-PIC: _moo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003640; DARWIN-32-PIC: calll L49$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003641; DARWIN-32-PIC-NEXT: L49$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003642; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003647; DARWIN-32-PIC-NEXT: ret
3648
3649; DARWIN-64-STATIC: _moo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003650; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003654; DARWIN-64-STATIC-NEXT: ret
3655
3656; DARWIN-64-DYNAMIC: _moo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003657; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003661; DARWIN-64-DYNAMIC-NEXT: ret
3662
3663; DARWIN-64-PIC: _moo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003664; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003668; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003669}
3670
3671define void @moo02(i64 %i) nounwind {
3672entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003678; LINUX-64-STATIC: moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003679; 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]])
Chris Lattner4f066492009-07-11 20:29:19 +00003682; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003683
3684; LINUX-32-STATIC: moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003685; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003688; LINUX-32-STATIC-NEXT: ret
3689
3690; LINUX-32-PIC: moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003691; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003694; LINUX-32-PIC-NEXT: ret
3695
3696; LINUX-64-PIC: moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003697; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003702; LINUX-64-PIC-NEXT: ret
3703
3704; DARWIN-32-STATIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003705; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003708; DARWIN-32-STATIC-NEXT: ret
3709
3710; DARWIN-32-DYNAMIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003711; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003716; DARWIN-32-DYNAMIC-NEXT: ret
3717
3718; DARWIN-32-PIC: _moo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003719; DARWIN-32-PIC: calll L50$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003720; DARWIN-32-PIC-NEXT: L50$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003721; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003727; DARWIN-32-PIC-NEXT: ret
3728
3729; DARWIN-64-STATIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003730; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003735; DARWIN-64-STATIC-NEXT: ret
3736
3737; DARWIN-64-DYNAMIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003738; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003743; DARWIN-64-DYNAMIC-NEXT: ret
3744
3745; DARWIN-64-PIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003746; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003751; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003752}
3753
3754define void @moo03(i64 %i) nounwind {
3755entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003759; LINUX-64-STATIC: moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003760; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]]
3761; LINUX-64-STATIC: movl [[EAX]], ddst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003762; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003763
3764; LINUX-32-STATIC: moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003765; LINUX-32-STATIC: movl dsrc+262144, [[EAX:%e.x]]
3766; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003767; LINUX-32-STATIC-NEXT: ret
3768
3769; LINUX-32-PIC: moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003770; LINUX-32-PIC: movl dsrc+262144, [[EAX:%e.x]]
3771; LINUX-32-PIC-NEXT: movl [[EAX]], ddst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003772; LINUX-32-PIC-NEXT: ret
3773
3774; LINUX-64-PIC: moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003775; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003779; LINUX-64-PIC-NEXT: ret
3780
3781; DARWIN-32-STATIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003782; DARWIN-32-STATIC: movl _dsrc+262144, [[EAX:%e.x]]
3783; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003784; DARWIN-32-STATIC-NEXT: ret
3785
3786; DARWIN-32-DYNAMIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003787; DARWIN-32-DYNAMIC: movl _dsrc+262144, [[EAX:%e.x]]
3788; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003789; DARWIN-32-DYNAMIC-NEXT: ret
3790
3791; DARWIN-32-PIC: _moo03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003792; DARWIN-32-PIC: calll L51$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003793; DARWIN-32-PIC-NEXT: L51$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003794; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003797; DARWIN-32-PIC-NEXT: ret
3798
3799; DARWIN-64-STATIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003800; DARWIN-64-STATIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3801; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003802; DARWIN-64-STATIC-NEXT: ret
3803
3804; DARWIN-64-DYNAMIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003805; DARWIN-64-DYNAMIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3806; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003807; DARWIN-64-DYNAMIC-NEXT: ret
3808
3809; DARWIN-64-PIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003810; DARWIN-64-PIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3811; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003812; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003813}
3814
3815define void @moo04(i64 %i) nounwind {
3816entry:
3817 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
3818 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003819; LINUX-64-STATIC: moo04:
3820; LINUX-64-STATIC: movq $ddst+262144, dptr
3821; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003822
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003832; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003836; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003847; DARWIN-32-PIC: calll L52$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003848; DARWIN-32-PIC-NEXT: L52$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003849; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003852; DARWIN-32-PIC-NEXT: ret
3853
3854; DARWIN-64-STATIC: _moo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003855; DARWIN-64-STATIC: leaq _ddst+262144(%rip), [[RAX:%r.x]]
3856; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003857; DARWIN-64-STATIC-NEXT: ret
3858
3859; DARWIN-64-DYNAMIC: _moo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003860; DARWIN-64-DYNAMIC: leaq _ddst+262144(%rip), [[RAX:%r.x]]
3861; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003862; DARWIN-64-DYNAMIC-NEXT: ret
3863
3864; DARWIN-64-PIC: _moo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003865; DARWIN-64-PIC: leaq _ddst+262144(%rip), [[RAX:%r.x]]
3866; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003867; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003868}
3869
3870define void @moo05(i64 %i) nounwind {
3871entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003877; LINUX-64-STATIC: moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003878; 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]])
Chris Lattner4f066492009-07-11 20:29:19 +00003881; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003882
3883; LINUX-32-STATIC: moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003884; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003887; LINUX-32-STATIC-NEXT: ret
3888
3889; LINUX-32-PIC: moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003890; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003893; LINUX-32-PIC-NEXT: ret
3894
3895; LINUX-64-PIC: moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003896; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003901; LINUX-64-PIC-NEXT: ret
3902
3903; DARWIN-32-STATIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003904; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003907; DARWIN-32-STATIC-NEXT: ret
3908
3909; DARWIN-32-DYNAMIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003910; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003913; DARWIN-32-DYNAMIC-NEXT: ret
3914
3915; DARWIN-32-PIC: _moo05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003916; DARWIN-32-PIC: calll L53$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003917; DARWIN-32-PIC-NEXT: L53$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003918; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003922; DARWIN-32-PIC-NEXT: ret
3923
3924; DARWIN-64-STATIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003925; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003928; DARWIN-64-STATIC-NEXT: ret
3929
3930; DARWIN-64-DYNAMIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003931; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003934; DARWIN-64-DYNAMIC-NEXT: ret
3935
3936; DARWIN-64-PIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003937; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003940; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003941}
3942
3943define void @moo06(i64 %i) nounwind {
3944entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00003948; LINUX-64-STATIC: moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003949; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]]
3950; LINUX-64-STATIC: movl [[EAX]], ldst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003951; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003952
3953; LINUX-32-STATIC: moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003954; LINUX-32-STATIC: movl lsrc+262144, [[EAX:%e.x]]
3955; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003956; LINUX-32-STATIC-NEXT: ret
3957
3958; LINUX-32-PIC: moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003959; LINUX-32-PIC: movl lsrc+262144, [[EAX:%e.x]]
3960; LINUX-32-PIC-NEXT: movl [[EAX]], ldst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003961; LINUX-32-PIC-NEXT: ret
3962
3963; LINUX-64-PIC: moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003964; LINUX-64-PIC: movl lsrc+262144(%rip), [[EAX:%e.x]]
3965; LINUX-64-PIC-NEXT: movl [[EAX]], ldst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003966; LINUX-64-PIC-NEXT: ret
3967
3968; DARWIN-32-STATIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003969; DARWIN-32-STATIC: movl _lsrc+262144, [[EAX:%e.x]]
3970; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003971; DARWIN-32-STATIC-NEXT: ret
3972
3973; DARWIN-32-DYNAMIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003974; DARWIN-32-DYNAMIC: movl _lsrc+262144, [[EAX:%e.x]]
3975; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003976; DARWIN-32-DYNAMIC-NEXT: ret
3977
3978; DARWIN-32-PIC: _moo06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003979; DARWIN-32-PIC: calll L54$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003980; DARWIN-32-PIC-NEXT: L54$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003981; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003984; DARWIN-32-PIC-NEXT: ret
3985
3986; DARWIN-64-STATIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003987; DARWIN-64-STATIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
3988; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003989; DARWIN-64-STATIC-NEXT: ret
3990
3991; DARWIN-64-DYNAMIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003992; DARWIN-64-DYNAMIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
3993; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003994; DARWIN-64-DYNAMIC-NEXT: ret
3995
3996; DARWIN-64-PIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003997; DARWIN-64-PIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
3998; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003999; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004000}
4001
4002define void @moo07(i64 %i) nounwind {
4003entry:
4004 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
4005 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004006; LINUX-64-STATIC: moo07:
4007; LINUX-64-STATIC: movq $ldst+262144, lptr
4008; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004009
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004019; LINUX-64-PIC: leaq ldst+262144(%rip), [[RAX:%r.x]]
4020; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004021; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004032; DARWIN-32-PIC: calll L55$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004033; DARWIN-32-PIC-NEXT: L55$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004034; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004037; DARWIN-32-PIC-NEXT: ret
4038
4039; DARWIN-64-STATIC: _moo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004040; DARWIN-64-STATIC: leaq _ldst+262144(%rip), [[RAX:%r.x]]
4041; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004042; DARWIN-64-STATIC-NEXT: ret
4043
4044; DARWIN-64-DYNAMIC: _moo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004045; DARWIN-64-DYNAMIC: leaq _ldst+262144(%rip), [[RAX:%r.x]]
4046; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004047; DARWIN-64-DYNAMIC-NEXT: ret
4048
4049; DARWIN-64-PIC: _moo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004050; DARWIN-64-PIC: leaq _ldst+262144(%rip), [[RAX:%r.x]]
4051; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004052; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004053}
4054
4055define void @moo08(i64 %i) nounwind {
4056entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004062; LINUX-64-STATIC: moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004063; 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]])
Chris Lattner4f066492009-07-11 20:29:19 +00004066; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004067
4068; LINUX-32-STATIC: moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004069; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004072; LINUX-32-STATIC-NEXT: ret
4073
4074; LINUX-32-PIC: moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004075; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004078; LINUX-32-PIC-NEXT: ret
4079
4080; LINUX-64-PIC: moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004081; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004084; LINUX-64-PIC-NEXT: ret
4085
4086; DARWIN-32-STATIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004087; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004090; DARWIN-32-STATIC-NEXT: ret
4091
4092; DARWIN-32-DYNAMIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004093; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004096; DARWIN-32-DYNAMIC-NEXT: ret
4097
4098; DARWIN-32-PIC: _moo08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004099; DARWIN-32-PIC: calll L56$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004100; DARWIN-32-PIC-NEXT: L56$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004101; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004105; DARWIN-32-PIC-NEXT: ret
4106
4107; DARWIN-64-STATIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004108; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004111; DARWIN-64-STATIC-NEXT: ret
4112
4113; DARWIN-64-DYNAMIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004114; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004117; DARWIN-64-DYNAMIC-NEXT: ret
4118
4119; DARWIN-64-PIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004120; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004123; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004124}
4125
4126define void @big00(i64 %i) nounwind {
4127entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004134; LINUX-64-STATIC: big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004135; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]]
4136; LINUX-64-STATIC: movl [[EAX]], dst+262144(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004137; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004138
4139; LINUX-32-STATIC: big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004140; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004143; LINUX-32-STATIC-NEXT: ret
4144
4145; LINUX-32-PIC: big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004146; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004149; LINUX-32-PIC-NEXT: ret
4150
4151; LINUX-64-PIC: big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004152; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004156; LINUX-64-PIC-NEXT: ret
4157
4158; DARWIN-32-STATIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004159; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004162; DARWIN-32-STATIC-NEXT: ret
4163
4164; DARWIN-32-DYNAMIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004165; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004170; DARWIN-32-DYNAMIC-NEXT: ret
4171
4172; DARWIN-32-PIC: _big00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004173; DARWIN-32-PIC: calll L57$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004174; DARWIN-32-PIC-NEXT: L57$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004175; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004181; DARWIN-32-PIC-NEXT: ret
4182
4183; DARWIN-64-STATIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004184; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004188; DARWIN-64-STATIC-NEXT: ret
4189
4190; DARWIN-64-DYNAMIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004191; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004195; DARWIN-64-DYNAMIC-NEXT: ret
4196
4197; DARWIN-64-PIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004198; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004202; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004203}
4204
4205define void @big01(i64 %i) nounwind {
4206entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004211; LINUX-64-STATIC: big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004212; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), [[RAX:%r.x]]
4213; LINUX-64-STATIC: movq [[RAX]], ptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00004214; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004215
4216; LINUX-32-STATIC: big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004217; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004220; LINUX-32-STATIC-NEXT: ret
4221
4222; LINUX-32-PIC: big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004223; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004226; LINUX-32-PIC-NEXT: ret
4227
4228; LINUX-64-PIC: big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004229; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004233; LINUX-64-PIC-NEXT: ret
4234
4235; DARWIN-32-STATIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004236; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004239; DARWIN-32-STATIC-NEXT: ret
4240
4241; DARWIN-32-DYNAMIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004242; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004247; DARWIN-32-DYNAMIC-NEXT: ret
4248
4249; DARWIN-32-PIC: _big01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004250; DARWIN-32-PIC: calll L58$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004251; DARWIN-32-PIC-NEXT: L58$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004252; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004258; DARWIN-32-PIC-NEXT: ret
4259
4260; DARWIN-64-STATIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004261; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004265; DARWIN-64-STATIC-NEXT: ret
4266
4267; DARWIN-64-DYNAMIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004268; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004272; DARWIN-64-DYNAMIC-NEXT: ret
4273
4274; DARWIN-64-PIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004275; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004279; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004280}
4281
4282define void @big02(i64 %i) nounwind {
4283entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004291; LINUX-64-STATIC: big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004292; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00004295; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004296
4297; LINUX-32-STATIC: big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004298; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004302; LINUX-32-STATIC-NEXT: ret
4303
4304; LINUX-32-PIC: big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004305; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004309; LINUX-32-PIC-NEXT: ret
4310
4311; LINUX-64-PIC: big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004312; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004317; LINUX-64-PIC-NEXT: ret
4318
4319; DARWIN-32-STATIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004320; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004324; DARWIN-32-STATIC-NEXT: ret
4325
4326; DARWIN-32-DYNAMIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004327; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004333; DARWIN-32-DYNAMIC-NEXT: ret
4334
4335; DARWIN-32-PIC: _big02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004336; DARWIN-32-PIC: calll L59$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004337; DARWIN-32-PIC-NEXT: L59$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004338; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004345; DARWIN-32-PIC-NEXT: ret
4346
4347; DARWIN-64-STATIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004348; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004353; DARWIN-64-STATIC-NEXT: ret
4354
4355; DARWIN-64-DYNAMIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004356; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004361; DARWIN-64-DYNAMIC-NEXT: ret
4362
4363; DARWIN-64-PIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004364; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004369; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004370}
4371
4372define void @big03(i64 %i) nounwind {
4373entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004380; LINUX-64-STATIC: big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004381; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4382; LINUX-64-STATIC: movl [[EAX]], ddst+262144(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004383; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004384
4385; LINUX-32-STATIC: big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004386; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004389; LINUX-32-STATIC-NEXT: ret
4390
4391; LINUX-32-PIC: big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004392; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004395; LINUX-32-PIC-NEXT: ret
4396
4397; LINUX-64-PIC: big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004398; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004402; LINUX-64-PIC-NEXT: ret
4403
4404; DARWIN-32-STATIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004405; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004408; DARWIN-32-STATIC-NEXT: ret
4409
4410; DARWIN-32-DYNAMIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004411; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004414; DARWIN-32-DYNAMIC-NEXT: ret
4415
4416; DARWIN-32-PIC: _big03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004417; DARWIN-32-PIC: calll L60$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004418; DARWIN-32-PIC-NEXT: L60$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004419; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004423; DARWIN-32-PIC-NEXT: ret
4424
4425; DARWIN-64-STATIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004426; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004430; DARWIN-64-STATIC-NEXT: ret
4431
4432; DARWIN-64-DYNAMIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004433; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004437; DARWIN-64-DYNAMIC-NEXT: ret
4438
4439; DARWIN-64-PIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004440; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004444; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004445}
4446
4447define void @big04(i64 %i) nounwind {
4448entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004453; LINUX-64-STATIC: big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004454; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), [[RAX:%r.x]]
4455; LINUX-64-STATIC: movq [[RAX]], dptr
Chris Lattner4f066492009-07-11 20:29:19 +00004456; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004457
4458; LINUX-32-STATIC: big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004459; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004462; LINUX-32-STATIC-NEXT: ret
4463
4464; LINUX-32-PIC: big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004465; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004468; LINUX-32-PIC-NEXT: ret
4469
4470; LINUX-64-PIC: big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004471; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004475; LINUX-64-PIC-NEXT: ret
4476
4477; DARWIN-32-STATIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004478; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004481; DARWIN-32-STATIC-NEXT: ret
4482
4483; DARWIN-32-DYNAMIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004484; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004487; DARWIN-32-DYNAMIC-NEXT: ret
4488
4489; DARWIN-32-PIC: _big04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004490; DARWIN-32-PIC: calll L61$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004491; DARWIN-32-PIC-NEXT: L61$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004492; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004496; DARWIN-32-PIC-NEXT: ret
4497
4498; DARWIN-64-STATIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004499; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004502; DARWIN-64-STATIC-NEXT: ret
4503
4504; DARWIN-64-DYNAMIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004505; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004508; DARWIN-64-DYNAMIC-NEXT: ret
4509
4510; DARWIN-64-PIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004511; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004514; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004515}
4516
4517define void @big05(i64 %i) nounwind {
4518entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004526; LINUX-64-STATIC: big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004527; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00004530; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004531
4532; LINUX-32-STATIC: big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004533; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004537; LINUX-32-STATIC-NEXT: ret
4538
4539; LINUX-32-PIC: big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004540; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004544; LINUX-32-PIC-NEXT: ret
4545
4546; LINUX-64-PIC: big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004547; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004552; LINUX-64-PIC-NEXT: ret
4553
4554; DARWIN-32-STATIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004555; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004559; DARWIN-32-STATIC-NEXT: ret
4560
4561; DARWIN-32-DYNAMIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004562; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004566; DARWIN-32-DYNAMIC-NEXT: ret
4567
4568; DARWIN-32-PIC: _big05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004569; DARWIN-32-PIC: calll L62$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004570; DARWIN-32-PIC-NEXT: L62$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004571; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004576; DARWIN-32-PIC-NEXT: ret
4577
4578; DARWIN-64-STATIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004579; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004583; DARWIN-64-STATIC-NEXT: ret
4584
4585; DARWIN-64-DYNAMIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004586; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004590; DARWIN-64-DYNAMIC-NEXT: ret
4591
4592; DARWIN-64-PIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004593; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004597; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004598}
4599
4600define void @big06(i64 %i) nounwind {
4601entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004608; LINUX-64-STATIC: big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004609; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4610; LINUX-64-STATIC: movl [[EAX]], ldst+262144(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004611; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004612
4613; LINUX-32-STATIC: big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004614; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004617; LINUX-32-STATIC-NEXT: ret
4618
4619; LINUX-32-PIC: big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004620; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004623; LINUX-32-PIC-NEXT: ret
4624
4625; LINUX-64-PIC: big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004626; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004630; LINUX-64-PIC-NEXT: ret
4631
4632; DARWIN-32-STATIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004633; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004636; DARWIN-32-STATIC-NEXT: ret
4637
4638; DARWIN-32-DYNAMIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004639; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004642; DARWIN-32-DYNAMIC-NEXT: ret
4643
4644; DARWIN-32-PIC: _big06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004645; DARWIN-32-PIC: calll L63$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004646; DARWIN-32-PIC-NEXT: L63$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004647; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004651; DARWIN-32-PIC-NEXT: ret
4652
4653; DARWIN-64-STATIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004654; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004658; DARWIN-64-STATIC-NEXT: ret
4659
4660; DARWIN-64-DYNAMIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004661; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004665; DARWIN-64-DYNAMIC-NEXT: ret
4666
4667; DARWIN-64-PIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004668; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004672; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004673}
4674
4675define void @big07(i64 %i) nounwind {
4676entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004681; LINUX-64-STATIC: big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004682; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), [[RAX:%r.x]]
4683; LINUX-64-STATIC: movq [[RAX]], lptr
Chris Lattner4f066492009-07-11 20:29:19 +00004684; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004685
4686; LINUX-32-STATIC: big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004687; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004690; LINUX-32-STATIC-NEXT: ret
4691
4692; LINUX-32-PIC: big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004693; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004696; LINUX-32-PIC-NEXT: ret
4697
4698; LINUX-64-PIC: big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004699; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004702; LINUX-64-PIC-NEXT: ret
4703
4704; DARWIN-32-STATIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004705; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004708; DARWIN-32-STATIC-NEXT: ret
4709
4710; DARWIN-32-DYNAMIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004711; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004714; DARWIN-32-DYNAMIC-NEXT: ret
4715
4716; DARWIN-32-PIC: _big07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004717; DARWIN-32-PIC: calll L64$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004718; DARWIN-32-PIC-NEXT: L64$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004719; 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]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004723; DARWIN-32-PIC-NEXT: ret
4724
4725; DARWIN-64-STATIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004726; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004729; DARWIN-64-STATIC-NEXT: ret
4730
4731; DARWIN-64-DYNAMIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004732; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004735; DARWIN-64-DYNAMIC-NEXT: ret
4736
4737; DARWIN-64-PIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004738; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004741; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004742}
4743
4744define void @big08(i64 %i) nounwind {
4745entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00004753; LINUX-64-STATIC: big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004754; 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)
Chris Lattner4f066492009-07-11 20:29:19 +00004757; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004758
4759; LINUX-32-STATIC: big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004760; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004764; LINUX-32-STATIC-NEXT: ret
4765
4766; LINUX-32-PIC: big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004767; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004771; LINUX-32-PIC-NEXT: ret
4772
4773; LINUX-64-PIC: big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004774; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004778; LINUX-64-PIC-NEXT: ret
4779
4780; DARWIN-32-STATIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004781; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004785; DARWIN-32-STATIC-NEXT: ret
4786
4787; DARWIN-32-DYNAMIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004788; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004792; DARWIN-32-DYNAMIC-NEXT: ret
4793
4794; DARWIN-32-PIC: _big08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004795; DARWIN-32-PIC: calll L65$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004796; DARWIN-32-PIC-NEXT: L65$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004797; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004802; DARWIN-32-PIC-NEXT: ret
4803
4804; DARWIN-64-STATIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004805; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004809; DARWIN-64-STATIC-NEXT: ret
4810
4811; DARWIN-64-DYNAMIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004812; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004816; DARWIN-64-DYNAMIC-NEXT: ret
4817
4818; DARWIN-64-PIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004819; 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)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004823; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004824}
4825
4826define i8* @bar00() nounwind {
4827entry:
4828 ret i8* bitcast ([131072 x i32]* @src to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004829; LINUX-64-STATIC: bar00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004830; LINUX-64-STATIC: movl $src, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004831; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004832
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004854; DARWIN-32-PIC: calll L66$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004855; DARWIN-32-PIC-NEXT: L66$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004856; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4857; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L66$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004858; 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
Dan Gohman318f5052009-03-14 02:35:10 +00004871}
4872
4873define i8* @bxr00() nounwind {
4874entry:
4875 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004876; LINUX-64-STATIC: bxr00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004877; LINUX-64-STATIC: movl $xsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004878; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004879
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004901; DARWIN-32-PIC: calll L67$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004902; DARWIN-32-PIC-NEXT: L67$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004903; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4904; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L67$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004905; 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
Dan Gohman318f5052009-03-14 02:35:10 +00004918}
4919
4920define i8* @bar01() nounwind {
4921entry:
4922 ret i8* bitcast ([131072 x i32]* @dst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004923; LINUX-64-STATIC: bar01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004924; LINUX-64-STATIC: movl $dst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004925; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004926
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004948; DARWIN-32-PIC: calll L68$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004949; DARWIN-32-PIC-NEXT: L68$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004950; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4951; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L68$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004952; 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
Dan Gohman318f5052009-03-14 02:35:10 +00004965}
4966
4967define i8* @bxr01() nounwind {
4968entry:
4969 ret i8* bitcast ([32 x i32]* @xdst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004970; LINUX-64-STATIC: bxr01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004971; LINUX-64-STATIC: movl $xdst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004972; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004973
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004995; DARWIN-32-PIC: calll L69$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004996; DARWIN-32-PIC-NEXT: L69$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004997; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4998; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L69$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004999; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005012}
5013
5014define i8* @bar02() nounwind {
5015entry:
5016 ret i8* bitcast (i32** @ptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005017; LINUX-64-STATIC: bar02:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005018; LINUX-64-STATIC: movl $ptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005019; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005020
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005042; DARWIN-32-PIC: calll L70$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005043; DARWIN-32-PIC-NEXT: L70$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005044; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5045; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L70$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005046; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005059}
5060
5061define i8* @bar03() nounwind {
5062entry:
5063 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005064; LINUX-64-STATIC: bar03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005065; LINUX-64-STATIC: movl $dsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005066; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005067
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005089; DARWIN-32-PIC: calll L71$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005090; DARWIN-32-PIC-NEXT: L71$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005091; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5092; DARWIN-32-PIC-NEXT: leal _dsrc-L71$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005093; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005106}
5107
5108define i8* @bar04() nounwind {
5109entry:
5110 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005111; LINUX-64-STATIC: bar04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005112; LINUX-64-STATIC: movl $ddst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005113; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005114
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005136; DARWIN-32-PIC: calll L72$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005137; DARWIN-32-PIC-NEXT: L72$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005138; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5139; DARWIN-32-PIC-NEXT: leal _ddst-L72$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005140; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005153}
5154
5155define i8* @bar05() nounwind {
5156entry:
5157 ret i8* bitcast (i32** @dptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005158; LINUX-64-STATIC: bar05:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005159; LINUX-64-STATIC: movl $dptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005160; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005161
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005183; DARWIN-32-PIC: calll L73$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005184; DARWIN-32-PIC-NEXT: L73$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005185; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5186; DARWIN-32-PIC-NEXT: leal _dptr-L73$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005187; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005200}
5201
5202define i8* @bar06() nounwind {
5203entry:
5204 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005205; LINUX-64-STATIC: bar06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005206; LINUX-64-STATIC: movl $lsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005207; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005208
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005230; DARWIN-32-PIC: calll L74$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005231; DARWIN-32-PIC-NEXT: L74$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005232; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5233; DARWIN-32-PIC-NEXT: leal _lsrc-L74$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005234; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005247}
5248
5249define i8* @bar07() nounwind {
5250entry:
5251 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005252; LINUX-64-STATIC: bar07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005253; LINUX-64-STATIC: movl $ldst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005254; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005255
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005277; DARWIN-32-PIC: calll L75$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005278; DARWIN-32-PIC-NEXT: L75$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005279; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5280; DARWIN-32-PIC-NEXT: leal _ldst-L75$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005281; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005294}
5295
5296define i8* @bar08() nounwind {
5297entry:
5298 ret i8* bitcast (i32** @lptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005299; LINUX-64-STATIC: bar08:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005300; LINUX-64-STATIC: movl $lptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005301; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005302
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005324; DARWIN-32-PIC: calll L76$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005325; DARWIN-32-PIC-NEXT: L76$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005326; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5327; DARWIN-32-PIC-NEXT: leal _lptr-L76$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005328; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005341}
5342
5343define i8* @har00() nounwind {
5344entry:
5345 ret i8* bitcast ([131072 x i32]* @src to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005346; LINUX-64-STATIC: har00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005347; LINUX-64-STATIC: movl $src, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005348; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005349
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005371; DARWIN-32-PIC: calll L77$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005372; DARWIN-32-PIC-NEXT: L77$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005373; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5374; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L77$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005375; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005388}
5389
5390define i8* @hxr00() nounwind {
5391entry:
5392 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005393; LINUX-64-STATIC: hxr00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005394; LINUX-64-STATIC: movl $xsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005395; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005396
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005418; DARWIN-32-PIC: calll L78$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005419; DARWIN-32-PIC-NEXT: L78$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005420; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5421; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L78$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005422; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005435}
5436
5437define i8* @har01() nounwind {
5438entry:
5439 ret i8* bitcast ([131072 x i32]* @dst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005440; LINUX-64-STATIC: har01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005441; LINUX-64-STATIC: movl $dst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005442; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005443
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005465; DARWIN-32-PIC: calll L79$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005466; DARWIN-32-PIC-NEXT: L79$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005467; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5468; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L79$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005469; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005482}
5483
5484define i8* @hxr01() nounwind {
5485entry:
5486 ret i8* bitcast ([32 x i32]* @xdst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005487; LINUX-64-STATIC: hxr01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005488; LINUX-64-STATIC: movl $xdst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005489; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005490
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005512; DARWIN-32-PIC: calll L80$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005513; DARWIN-32-PIC-NEXT: L80$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005514; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5515; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L80$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005516; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005529}
5530
5531define i8* @har02() nounwind {
5532entry:
5533 %0 = load i32** @ptr, align 8
5534 %1 = bitcast i32* %0 to i8*
5535 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005536; LINUX-64-STATIC: har02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005537; LINUX-64-STATIC: movq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005538; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005539
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005549; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5550; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005551; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005558; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]]
5559; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005560; DARWIN-32-DYNAMIC-NEXT: ret
5561
5562; DARWIN-32-PIC: _har02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005563; DARWIN-32-PIC: calll L81$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005564; DARWIN-32-PIC-NEXT: L81$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005565; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005568; DARWIN-32-PIC-NEXT: ret
5569
5570; DARWIN-64-STATIC: _har02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005571; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5572; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005573; DARWIN-64-STATIC-NEXT: ret
5574
5575; DARWIN-64-DYNAMIC: _har02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005576; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5577; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005578; DARWIN-64-DYNAMIC-NEXT: ret
5579
5580; DARWIN-64-PIC: _har02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005581; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5582; DARWIN-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005583; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005584}
5585
5586define i8* @har03() nounwind {
5587entry:
5588 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005589; LINUX-64-STATIC: har03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005590; LINUX-64-STATIC: movl $dsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005591; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005592
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005614; DARWIN-32-PIC: calll L82$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005615; DARWIN-32-PIC-NEXT: L82$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005616; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5617; DARWIN-32-PIC-NEXT: leal _dsrc-L82$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005618; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005631}
5632
5633define i8* @har04() nounwind {
5634entry:
5635 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005636; LINUX-64-STATIC: har04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005637; LINUX-64-STATIC: movl $ddst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005638; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005639
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005661; DARWIN-32-PIC: calll L83$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005662; DARWIN-32-PIC-NEXT: L83$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005663; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5664; DARWIN-32-PIC-NEXT: leal _ddst-L83$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005665; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005678}
5679
5680define i8* @har05() nounwind {
5681entry:
5682 %0 = load i32** @dptr, align 8
5683 %1 = bitcast i32* %0 to i8*
5684 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005685; LINUX-64-STATIC: har05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005686; LINUX-64-STATIC: movq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005687; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005688
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005698; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]]
5699; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005700; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005711; DARWIN-32-PIC: calll L84$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005712; DARWIN-32-PIC-NEXT: L84$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005713; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5714; DARWIN-32-PIC-NEXT: movl _dptr-L84$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005715; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005728}
5729
5730define i8* @har06() nounwind {
5731entry:
5732 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005733; LINUX-64-STATIC: har06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005734; LINUX-64-STATIC: movl $lsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005735; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005736
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005758; DARWIN-32-PIC: calll L85$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005759; DARWIN-32-PIC-NEXT: L85$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005760; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5761; DARWIN-32-PIC-NEXT: leal _lsrc-L85$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005762; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005775}
5776
5777define i8* @har07() nounwind {
5778entry:
5779 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005780; LINUX-64-STATIC: har07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005781; LINUX-64-STATIC: movl $ldst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005782; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005783
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005805; DARWIN-32-PIC: calll L86$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005806; DARWIN-32-PIC-NEXT: L86$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005807; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5808; DARWIN-32-PIC-NEXT: leal _ldst-L86$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005809; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005822}
5823
5824define i8* @har08() nounwind {
5825entry:
5826 %0 = load i32** @lptr, align 8
5827 %1 = bitcast i32* %0 to i8*
5828 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005829; LINUX-64-STATIC: har08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005830; LINUX-64-STATIC: movq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005831; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005832
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005854; DARWIN-32-PIC: calll L87$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005855; DARWIN-32-PIC-NEXT: L87$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005856; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5857; DARWIN-32-PIC-NEXT: movl _lptr-L87$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005858; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005871}
5872
5873define i8* @bat00() nounwind {
5874entry:
5875 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005876; LINUX-64-STATIC: bat00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005877; LINUX-64-STATIC: movl $src+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005878; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005879
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005903; DARWIN-32-PIC: calll L88$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005904; DARWIN-32-PIC-NEXT: L88$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005905; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5906; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L88$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005907; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005924}
5925
5926define i8* @bxt00() nounwind {
5927entry:
5928 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005929; LINUX-64-STATIC: bxt00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005930; LINUX-64-STATIC: movl $xsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005931; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005932
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005956; DARWIN-32-PIC: calll L89$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005957; DARWIN-32-PIC-NEXT: L89$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005958; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5959; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L89$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005960; 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
Dan Gohman318f5052009-03-14 02:35:10 +00005977}
5978
5979define i8* @bat01() nounwind {
5980entry:
5981 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005982; LINUX-64-STATIC: bat01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005983; LINUX-64-STATIC: movl $dst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005984; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005985
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006009; DARWIN-32-PIC: calll L90$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006010; DARWIN-32-PIC-NEXT: L90$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006011; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6012; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L90$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006013; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006030}
6031
6032define i8* @bxt01() nounwind {
6033entry:
6034 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006035; LINUX-64-STATIC: bxt01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006036; LINUX-64-STATIC: movl $xdst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006037; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006038
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006062; DARWIN-32-PIC: calll L91$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006063; DARWIN-32-PIC-NEXT: L91$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006064; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6065; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L91$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006066; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006083}
6084
6085define i8* @bat02() nounwind {
6086entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00006091; LINUX-64-STATIC: bat02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006092; LINUX-64-STATIC: movq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006093; LINUX-64-STATIC: addq $64, %rax
6094; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006095
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006107; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6108; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006109; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006118; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]]
6119; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006120; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6121; DARWIN-32-DYNAMIC-NEXT: ret
6122
6123; DARWIN-32-PIC: _bat02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006124; DARWIN-32-PIC: calll L92$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006125; DARWIN-32-PIC-NEXT: L92$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006126; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006129; DARWIN-32-PIC-NEXT: addl $64, %eax
6130; DARWIN-32-PIC-NEXT: ret
6131
6132; DARWIN-64-STATIC: _bat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006133; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6134; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006135; DARWIN-64-STATIC-NEXT: addq $64, %rax
6136; DARWIN-64-STATIC-NEXT: ret
6137
6138; DARWIN-64-DYNAMIC: _bat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006139; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6140; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006141; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6142; DARWIN-64-DYNAMIC-NEXT: ret
6143
6144; DARWIN-64-PIC: _bat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006145; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6146; DARWIN-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006147; DARWIN-64-PIC-NEXT: addq $64, %rax
6148; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006149}
6150
6151define i8* @bat03() nounwind {
6152entry:
6153 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006154; LINUX-64-STATIC: bat03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006155; LINUX-64-STATIC: movl $dsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006156; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006157
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006180; DARWIN-32-PIC: calll L93$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006181; DARWIN-32-PIC-NEXT: L93$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006182; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6183; DARWIN-32-PIC-NEXT: leal (_dsrc-L93$pb)+64([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006184; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006197}
6198
6199define i8* @bat04() nounwind {
6200entry:
6201 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006202; LINUX-64-STATIC: bat04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006203; LINUX-64-STATIC: movl $ddst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006204; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006205
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006228; DARWIN-32-PIC: calll L94$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006229; DARWIN-32-PIC-NEXT: L94$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006230; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6231; DARWIN-32-PIC-NEXT: leal (_ddst-L94$pb)+64([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006232; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006245}
6246
6247define i8* @bat05() nounwind {
6248entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00006253; LINUX-64-STATIC: bat05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006254; LINUX-64-STATIC: movq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006255; LINUX-64-STATIC: addq $64, %rax
6256; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006257
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006269; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]]
6270; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006271; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006285; DARWIN-32-PIC: calll L95$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006286; DARWIN-32-PIC-NEXT: L95$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006287; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6288; DARWIN-32-PIC-NEXT: movl _dptr-L95$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006289; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006306}
6307
6308define i8* @bat06() nounwind {
6309entry:
6310 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006311; LINUX-64-STATIC: bat06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006312; LINUX-64-STATIC: movl $lsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006313; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006314
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006336; DARWIN-32-PIC: calll L96$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006337; DARWIN-32-PIC-NEXT: L96$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006338; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6339; DARWIN-32-PIC-NEXT: leal (_lsrc-L96$pb)+64([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006340; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006353}
6354
6355define i8* @bat07() nounwind {
6356entry:
6357 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006358; LINUX-64-STATIC: bat07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006359; LINUX-64-STATIC: movl $ldst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006360; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006361
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006383; DARWIN-32-PIC: calll L97$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006384; DARWIN-32-PIC-NEXT: L97$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006385; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6386; DARWIN-32-PIC-NEXT: leal (_ldst-L97$pb)+64([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006387; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006400}
6401
6402define i8* @bat08() nounwind {
6403entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00006408; LINUX-64-STATIC: bat08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006409; LINUX-64-STATIC: movq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006410; LINUX-64-STATIC: addq $64, %rax
6411; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006412
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006439; DARWIN-32-PIC: calll L98$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006440; DARWIN-32-PIC-NEXT: L98$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006441; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6442; DARWIN-32-PIC-NEXT: movl _lptr-L98$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006443; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006460}
6461
6462define i8* @bam00() nounwind {
6463entry:
6464 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006465; LINUX-64-STATIC: bam00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006466; LINUX-64-STATIC: movl $src+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006467; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006468
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006492; DARWIN-32-PIC: calll L99$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006493; DARWIN-32-PIC-NEXT: L99$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006494; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006495; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006496; DARWIN-32-PIC-NEXT: addl L_src$non_lazy_ptr-L99$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006497; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006513}
6514
6515define i8* @bam01() nounwind {
6516entry:
6517 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006518; LINUX-64-STATIC: bam01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006519; LINUX-64-STATIC: movl $dst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006520; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006521
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006545; DARWIN-32-PIC: calll L100$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006546; DARWIN-32-PIC-NEXT: L100$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006547; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006548; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006549; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L100$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006550; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006566}
6567
6568define i8* @bxm01() nounwind {
6569entry:
6570 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006571; LINUX-64-STATIC: bxm01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006572; LINUX-64-STATIC: movl $xdst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006573; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006574
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006598; DARWIN-32-PIC: calll L101$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006599; DARWIN-32-PIC-NEXT: L101$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006600; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006601; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006602; DARWIN-32-PIC-NEXT: addl L_xdst$non_lazy_ptr-L101$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006603; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006619}
6620
6621define i8* @bam02() nounwind {
6622entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00006627; LINUX-64-STATIC: bam02:
6628; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006629; LINUX-64-STATIC: addq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006630; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006631
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006643; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006644; LINUX-64-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006645; LINUX-64-PIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006646; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006654; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006655; DARWIN-32-DYNAMIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006656; DARWIN-32-DYNAMIC-NEXT: addl ([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006657; DARWIN-32-DYNAMIC-NEXT: ret
6658
6659; DARWIN-32-PIC: _bam02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006660; DARWIN-32-PIC: calll L102$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006661; DARWIN-32-PIC-NEXT: L102$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006662; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006664; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006665; DARWIN-32-PIC-NEXT: addl ([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006666; DARWIN-32-PIC-NEXT: ret
6667
6668; DARWIN-64-STATIC: _bam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006669; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006670; DARWIN-64-STATIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006671; DARWIN-64-STATIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006672; DARWIN-64-STATIC-NEXT: ret
6673
6674; DARWIN-64-DYNAMIC: _bam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006675; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006676; DARWIN-64-DYNAMIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006677; DARWIN-64-DYNAMIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006678; DARWIN-64-DYNAMIC-NEXT: ret
6679
6680; DARWIN-64-PIC: _bam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006681; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006682; DARWIN-64-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006683; DARWIN-64-PIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006684; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006685}
6686
6687define i8* @bam03() nounwind {
6688entry:
6689 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006690; LINUX-64-STATIC: bam03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006691; LINUX-64-STATIC: movl $dsrc+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006692; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006693
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006716; DARWIN-32-PIC: calll L103$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006717; DARWIN-32-PIC-NEXT: L103$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006718; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6719; DARWIN-32-PIC-NEXT: leal (_dsrc-L103$pb)+262144([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006720; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006733}
6734
6735define i8* @bam04() nounwind {
6736entry:
6737 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006738; LINUX-64-STATIC: bam04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006739; LINUX-64-STATIC: movl $ddst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006740; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006741
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006764; DARWIN-32-PIC: calll L104$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006765; DARWIN-32-PIC-NEXT: L104$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006766; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6767; DARWIN-32-PIC-NEXT: leal (_ddst-L104$pb)+262144([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006768; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006781}
6782
6783define i8* @bam05() nounwind {
6784entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00006789; LINUX-64-STATIC: bam05:
6790; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006791; LINUX-64-STATIC: addq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006792; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006793
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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006805; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006806; LINUX-64-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006807; LINUX-64-PIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006808; 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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006821; DARWIN-32-PIC: calll L105$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006822; DARWIN-32-PIC-NEXT: L105$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006823; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006824; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006825; DARWIN-32-PIC-NEXT: addl _dptr-L105$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006826; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006842}
6843
6844define i8* @bam06() nounwind {
6845entry:
6846 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006847; LINUX-64-STATIC: bam06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006848; LINUX-64-STATIC: movl $lsrc+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006849; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006850
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006872; DARWIN-32-PIC: calll L106$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006873; DARWIN-32-PIC-NEXT: L106$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006874; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6875; DARWIN-32-PIC-NEXT: leal (_lsrc-L106$pb)+262144([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006876; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006889}
6890
6891define i8* @bam07() nounwind {
6892entry:
6893 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006894; LINUX-64-STATIC: bam07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006895; LINUX-64-STATIC: movl $ldst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006896; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006897
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006919; DARWIN-32-PIC: calll L107$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006920; DARWIN-32-PIC-NEXT: L107$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006921; DARWIN-32-PIC-NEXT: popl %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006922; DARWIN-32-PIC-NEXT: leal (_ldst-L107$pb)+262144([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006923; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006936}
6937
6938define i8* @bam08() nounwind {
6939entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00006944; LINUX-64-STATIC: bam08:
6945; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006946; LINUX-64-STATIC: addq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006947; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006948
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006975; DARWIN-32-PIC: calll L108$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006976; DARWIN-32-PIC-NEXT: L108$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006977; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006978; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006979; DARWIN-32-PIC-NEXT: addl _lptr-L108$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006980; 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
Dan Gohman318f5052009-03-14 02:35:10 +00006996}
6997
6998define i8* @cat00(i64 %i) nounwind {
6999entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007004; LINUX-64-STATIC: cat00:
7005; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax
7006; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007007
7008; LINUX-32-STATIC: cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007009; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7010; LINUX-32-STATIC-NEXT: leal src+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007011; LINUX-32-STATIC-NEXT: ret
7012
7013; LINUX-32-PIC: cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007014; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7015; LINUX-32-PIC-NEXT: leal src+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007016; LINUX-32-PIC-NEXT: ret
7017
7018; LINUX-64-PIC: cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007019; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
7020; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007021; LINUX-64-PIC-NEXT: ret
7022
7023; DARWIN-32-STATIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007024; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7025; DARWIN-32-STATIC-NEXT: leal _src+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007026; DARWIN-32-STATIC-NEXT: ret
7027
7028; DARWIN-32-DYNAMIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007029; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007032; DARWIN-32-DYNAMIC-NEXT: ret
7033
7034; DARWIN-32-PIC: _cat00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007035; DARWIN-32-PIC: calll L109$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007036; DARWIN-32-PIC-NEXT: L109$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007037; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007041; DARWIN-32-PIC-NEXT: ret
7042
7043; DARWIN-64-STATIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007044; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7045; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007046; DARWIN-64-STATIC-NEXT: ret
7047
7048; DARWIN-64-DYNAMIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007049; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7050; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007051; DARWIN-64-DYNAMIC-NEXT: ret
7052
7053; DARWIN-64-PIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007054; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7055; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007056; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007057}
7058
7059define i8* @cxt00(i64 %i) nounwind {
7060entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007065; LINUX-64-STATIC: cxt00:
7066; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax
7067; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007068
7069; LINUX-32-STATIC: cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007070; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7071; LINUX-32-STATIC-NEXT: leal xsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007072; LINUX-32-STATIC-NEXT: ret
7073
7074; LINUX-32-PIC: cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007075; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7076; LINUX-32-PIC-NEXT: leal xsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007077; LINUX-32-PIC-NEXT: ret
7078
7079; LINUX-64-PIC: cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007080; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7081; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007082; LINUX-64-PIC-NEXT: ret
7083
7084; DARWIN-32-STATIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007085; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7086; DARWIN-32-STATIC-NEXT: leal _xsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007087; DARWIN-32-STATIC-NEXT: ret
7088
7089; DARWIN-32-DYNAMIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007090; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007093; DARWIN-32-DYNAMIC-NEXT: ret
7094
7095; DARWIN-32-PIC: _cxt00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007096; DARWIN-32-PIC: calll L110$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007097; DARWIN-32-PIC-NEXT: L110$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007098; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007102; DARWIN-32-PIC-NEXT: ret
7103
7104; DARWIN-64-STATIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007105; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7106; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007107; DARWIN-64-STATIC-NEXT: ret
7108
7109; DARWIN-64-DYNAMIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007110; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7111; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007112; DARWIN-64-DYNAMIC-NEXT: ret
7113
7114; DARWIN-64-PIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007115; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7116; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007117; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007118}
7119
7120define i8* @cat01(i64 %i) nounwind {
7121entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007126; LINUX-64-STATIC: cat01:
7127; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax
7128; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007129
7130; LINUX-32-STATIC: cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007131; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7132; LINUX-32-STATIC-NEXT: leal dst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007133; LINUX-32-STATIC-NEXT: ret
7134
7135; LINUX-32-PIC: cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007136; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7137; LINUX-32-PIC-NEXT: leal dst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007138; LINUX-32-PIC-NEXT: ret
7139
7140; LINUX-64-PIC: cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007141; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]]
7142; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007143; LINUX-64-PIC-NEXT: ret
7144
7145; DARWIN-32-STATIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007146; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7147; DARWIN-32-STATIC-NEXT: leal _dst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007148; DARWIN-32-STATIC-NEXT: ret
7149
7150; DARWIN-32-DYNAMIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007151; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007154; DARWIN-32-DYNAMIC-NEXT: ret
7155
7156; DARWIN-32-PIC: _cat01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007157; DARWIN-32-PIC: calll L111$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007158; DARWIN-32-PIC-NEXT: L111$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007159; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007163; DARWIN-32-PIC-NEXT: ret
7164
7165; DARWIN-64-STATIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007166; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7167; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007168; DARWIN-64-STATIC-NEXT: ret
7169
7170; DARWIN-64-DYNAMIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007171; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7172; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007173; DARWIN-64-DYNAMIC-NEXT: ret
7174
7175; DARWIN-64-PIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007176; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7177; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007178; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007179}
7180
7181define i8* @cxt01(i64 %i) nounwind {
7182entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007187; LINUX-64-STATIC: cxt01:
7188; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax
7189; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007190
7191; LINUX-32-STATIC: cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007192; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7193; LINUX-32-STATIC-NEXT: leal xdst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007194; LINUX-32-STATIC-NEXT: ret
7195
7196; LINUX-32-PIC: cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007197; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7198; LINUX-32-PIC-NEXT: leal xdst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007199; LINUX-32-PIC-NEXT: ret
7200
7201; LINUX-64-PIC: cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007202; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7203; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007204; LINUX-64-PIC-NEXT: ret
7205
7206; DARWIN-32-STATIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007207; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7208; DARWIN-32-STATIC-NEXT: leal _xdst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007209; DARWIN-32-STATIC-NEXT: ret
7210
7211; DARWIN-32-DYNAMIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007212; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007215; DARWIN-32-DYNAMIC-NEXT: ret
7216
7217; DARWIN-32-PIC: _cxt01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007218; DARWIN-32-PIC: calll L112$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007219; DARWIN-32-PIC-NEXT: L112$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007220; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007224; DARWIN-32-PIC-NEXT: ret
7225
7226; DARWIN-64-STATIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007227; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7228; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007229; DARWIN-64-STATIC-NEXT: ret
7230
7231; DARWIN-64-DYNAMIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007232; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7233; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007234; DARWIN-64-DYNAMIC-NEXT: ret
7235
7236; DARWIN-64-PIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007237; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7238; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007239; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007240}
7241
7242define i8* @cat02(i64 %i) nounwind {
7243entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007249; LINUX-64-STATIC: cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007250; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]]
7251; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007252; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007253
7254; LINUX-32-STATIC: cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007255; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007258; LINUX-32-STATIC-NEXT: ret
7259
7260; LINUX-32-PIC: cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007261; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007264; LINUX-32-PIC-NEXT: ret
7265
7266; LINUX-64-PIC: cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007267; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007270; LINUX-64-PIC-NEXT: ret
7271
7272; DARWIN-32-STATIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007273; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007276; DARWIN-32-STATIC-NEXT: ret
7277
7278; DARWIN-32-DYNAMIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007279; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007283; DARWIN-32-DYNAMIC-NEXT: ret
7284
7285; DARWIN-32-PIC: _cat02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007286; DARWIN-32-PIC: calll L113$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007287; DARWIN-32-PIC-NEXT: L113$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007288; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007293; DARWIN-32-PIC-NEXT: ret
7294
7295; DARWIN-64-STATIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007296; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007299; DARWIN-64-STATIC-NEXT: ret
7300
7301; DARWIN-64-DYNAMIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007302; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007305; DARWIN-64-DYNAMIC-NEXT: ret
7306
7307; DARWIN-64-PIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007308; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007311; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007312}
7313
7314define i8* @cat03(i64 %i) nounwind {
7315entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007320; LINUX-64-STATIC: cat03:
7321; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax
7322; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007323
7324; LINUX-32-STATIC: cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007325; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7326; LINUX-32-STATIC-NEXT: leal dsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007327; LINUX-32-STATIC-NEXT: ret
7328
7329; LINUX-32-PIC: cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007330; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7331; LINUX-32-PIC-NEXT: leal dsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007332; LINUX-32-PIC-NEXT: ret
7333
7334; LINUX-64-PIC: cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007335; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7336; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007337; LINUX-64-PIC-NEXT: ret
7338
7339; DARWIN-32-STATIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007340; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7341; DARWIN-32-STATIC-NEXT: leal _dsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007342; DARWIN-32-STATIC-NEXT: ret
7343
7344; DARWIN-32-DYNAMIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007345; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7346; DARWIN-32-DYNAMIC-NEXT: leal _dsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007347; DARWIN-32-DYNAMIC-NEXT: ret
7348
7349; DARWIN-32-PIC: _cat03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007350; DARWIN-32-PIC: calll L114$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007351; DARWIN-32-PIC-NEXT: L114$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007352; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007355; DARWIN-32-PIC-NEXT: ret
7356
7357; DARWIN-64-STATIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007358; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
7359; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007360; DARWIN-64-STATIC-NEXT: ret
7361
7362; DARWIN-64-DYNAMIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007363; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
7364; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007365; DARWIN-64-DYNAMIC-NEXT: ret
7366
7367; DARWIN-64-PIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007368; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
7369; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007370; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007371}
7372
7373define i8* @cat04(i64 %i) nounwind {
7374entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007379; LINUX-64-STATIC: cat04:
7380; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax
7381; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007382
7383; LINUX-32-STATIC: cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007384; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7385; LINUX-32-STATIC-NEXT: leal ddst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007386; LINUX-32-STATIC-NEXT: ret
7387
7388; LINUX-32-PIC: cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007389; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7390; LINUX-32-PIC-NEXT: leal ddst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007391; LINUX-32-PIC-NEXT: ret
7392
7393; LINUX-64-PIC: cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007394; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
7395; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007396; LINUX-64-PIC-NEXT: ret
7397
7398; DARWIN-32-STATIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007399; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7400; DARWIN-32-STATIC-NEXT: leal _ddst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007401; DARWIN-32-STATIC-NEXT: ret
7402
7403; DARWIN-32-DYNAMIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007404; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7405; DARWIN-32-DYNAMIC-NEXT: leal _ddst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007406; DARWIN-32-DYNAMIC-NEXT: ret
7407
7408; DARWIN-32-PIC: _cat04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007409; DARWIN-32-PIC: calll L115$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007410; DARWIN-32-PIC-NEXT: L115$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007411; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007414; DARWIN-32-PIC-NEXT: ret
7415
7416; DARWIN-64-STATIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007417; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
7418; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007419; DARWIN-64-STATIC-NEXT: ret
7420
7421; DARWIN-64-DYNAMIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007422; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
7423; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007424; DARWIN-64-DYNAMIC-NEXT: ret
7425
7426; DARWIN-64-PIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007427; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
7428; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007429; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007430}
7431
7432define i8* @cat05(i64 %i) nounwind {
7433entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007439; LINUX-64-STATIC: cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007440; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]]
7441; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007442; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007443
7444; LINUX-32-STATIC: cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007445; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007448; LINUX-32-STATIC-NEXT: ret
7449
7450; LINUX-32-PIC: cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007451; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007454; LINUX-32-PIC-NEXT: ret
7455
7456; LINUX-64-PIC: cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007457; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007460; LINUX-64-PIC-NEXT: ret
7461
7462; DARWIN-32-STATIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007463; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007466; DARWIN-32-STATIC-NEXT: ret
7467
7468; DARWIN-32-DYNAMIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007469; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007472; DARWIN-32-DYNAMIC-NEXT: ret
7473
7474; DARWIN-32-PIC: _cat05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007475; DARWIN-32-PIC: calll L116$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007476; DARWIN-32-PIC-NEXT: L116$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007477; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007481; DARWIN-32-PIC-NEXT: ret
7482
7483; DARWIN-64-STATIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007484; DARWIN-64-STATIC: movq _dptr(%rip), [[RAX:%r.x]]
7485; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007486; DARWIN-64-STATIC-NEXT: ret
7487
7488; DARWIN-64-DYNAMIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007489; DARWIN-64-DYNAMIC: movq _dptr(%rip), [[RAX:%r.x]]
7490; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007491; DARWIN-64-DYNAMIC-NEXT: ret
7492
7493; DARWIN-64-PIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007494; DARWIN-64-PIC: movq _dptr(%rip), [[RAX:%r.x]]
7495; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007496; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007497}
7498
7499define i8* @cat06(i64 %i) nounwind {
7500entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007505; LINUX-64-STATIC: cat06:
7506; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax
7507; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007508
7509; LINUX-32-STATIC: cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007510; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7511; LINUX-32-STATIC-NEXT: leal lsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007512; LINUX-32-STATIC-NEXT: ret
7513
7514; LINUX-32-PIC: cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007515; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7516; LINUX-32-PIC-NEXT: leal lsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007517; LINUX-32-PIC-NEXT: ret
7518
7519; LINUX-64-PIC: cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007520; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
7521; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007522; LINUX-64-PIC-NEXT: ret
7523
7524; DARWIN-32-STATIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007525; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7526; DARWIN-32-STATIC-NEXT: leal _lsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007527; DARWIN-32-STATIC-NEXT: ret
7528
7529; DARWIN-32-DYNAMIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007530; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7531; DARWIN-32-DYNAMIC-NEXT: leal _lsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007532; DARWIN-32-DYNAMIC-NEXT: ret
7533
7534; DARWIN-32-PIC: _cat06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007535; DARWIN-32-PIC: calll L117$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007536; DARWIN-32-PIC-NEXT: L117$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007537; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007540; DARWIN-32-PIC-NEXT: ret
7541
7542; DARWIN-64-STATIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007543; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
7544; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007545; DARWIN-64-STATIC-NEXT: ret
7546
7547; DARWIN-64-DYNAMIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007548; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
7549; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007550; DARWIN-64-DYNAMIC-NEXT: ret
7551
7552; DARWIN-64-PIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007553; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
7554; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007555; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007556}
7557
7558define i8* @cat07(i64 %i) nounwind {
7559entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007564; LINUX-64-STATIC: cat07:
7565; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax
7566; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007567
7568; LINUX-32-STATIC: cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007569; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7570; LINUX-32-STATIC-NEXT: leal ldst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007571; LINUX-32-STATIC-NEXT: ret
7572
7573; LINUX-32-PIC: cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007574; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7575; LINUX-32-PIC-NEXT: leal ldst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007576; LINUX-32-PIC-NEXT: ret
7577
7578; LINUX-64-PIC: cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007579; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
7580; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007581; LINUX-64-PIC-NEXT: ret
7582
7583; DARWIN-32-STATIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007584; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7585; DARWIN-32-STATIC-NEXT: leal _ldst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007586; DARWIN-32-STATIC-NEXT: ret
7587
7588; DARWIN-32-DYNAMIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007589; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7590; DARWIN-32-DYNAMIC-NEXT: leal _ldst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007591; DARWIN-32-DYNAMIC-NEXT: ret
7592
7593; DARWIN-32-PIC: _cat07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007594; DARWIN-32-PIC: calll L118$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007595; DARWIN-32-PIC-NEXT: L118$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007596; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007599; DARWIN-32-PIC-NEXT: ret
7600
7601; DARWIN-64-STATIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007602; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
7603; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007604; DARWIN-64-STATIC-NEXT: ret
7605
7606; DARWIN-64-DYNAMIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007607; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
7608; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007609; DARWIN-64-DYNAMIC-NEXT: ret
7610
7611; DARWIN-64-PIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007612; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
7613; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007614; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007615}
7616
7617define i8* @cat08(i64 %i) nounwind {
7618entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007624; LINUX-64-STATIC: cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007625; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]]
7626; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007627; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007628
7629; LINUX-32-STATIC: cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007630; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007633; LINUX-32-STATIC-NEXT: ret
7634
7635; LINUX-32-PIC: cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007636; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007639; LINUX-32-PIC-NEXT: ret
7640
7641; LINUX-64-PIC: cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007642; LINUX-64-PIC: movq lptr(%rip), [[RAX:%r.x]]
7643; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007644; LINUX-64-PIC-NEXT: ret
7645
7646; DARWIN-32-STATIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007647; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007650; DARWIN-32-STATIC-NEXT: ret
7651
7652; DARWIN-32-DYNAMIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007653; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007656; DARWIN-32-DYNAMIC-NEXT: ret
7657
7658; DARWIN-32-PIC: _cat08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007659; DARWIN-32-PIC: calll L119$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007660; DARWIN-32-PIC-NEXT: L119$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007661; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007665; DARWIN-32-PIC-NEXT: ret
7666
7667; DARWIN-64-STATIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007668; DARWIN-64-STATIC: movq _lptr(%rip), [[RAX:%r.x]]
7669; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007670; DARWIN-64-STATIC-NEXT: ret
7671
7672; DARWIN-64-DYNAMIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007673; DARWIN-64-DYNAMIC: movq _lptr(%rip), [[RAX:%r.x]]
7674; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007675; DARWIN-64-DYNAMIC-NEXT: ret
7676
7677; DARWIN-64-PIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007678; DARWIN-64-PIC: movq _lptr(%rip), [[RAX:%r.x]]
7679; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007680; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007681}
7682
7683define i8* @cam00(i64 %i) nounwind {
7684entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007689; LINUX-64-STATIC: cam00:
7690; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax
7691; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007692
7693; LINUX-32-STATIC: cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007694; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7695; LINUX-32-STATIC-NEXT: leal src+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007696; LINUX-32-STATIC-NEXT: ret
7697
7698; LINUX-32-PIC: cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007699; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7700; LINUX-32-PIC-NEXT: leal src+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007701; LINUX-32-PIC-NEXT: ret
7702
7703; LINUX-64-PIC: cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007704; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
7705; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007706; LINUX-64-PIC-NEXT: ret
7707
7708; DARWIN-32-STATIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007709; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7710; DARWIN-32-STATIC-NEXT: leal _src+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007711; DARWIN-32-STATIC-NEXT: ret
7712
7713; DARWIN-32-DYNAMIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007714; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007717; DARWIN-32-DYNAMIC-NEXT: ret
7718
7719; DARWIN-32-PIC: _cam00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007720; DARWIN-32-PIC: calll L120$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007721; DARWIN-32-PIC-NEXT: L120$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007722; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007726; DARWIN-32-PIC-NEXT: ret
7727
7728; DARWIN-64-STATIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007729; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7730; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007731; DARWIN-64-STATIC-NEXT: ret
7732
7733; DARWIN-64-DYNAMIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007734; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7735; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007736; DARWIN-64-DYNAMIC-NEXT: ret
7737
7738; DARWIN-64-PIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007739; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7740; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007741; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007742}
7743
7744define i8* @cxm00(i64 %i) nounwind {
7745entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007750; LINUX-64-STATIC: cxm00:
7751; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax
7752; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007753
7754; LINUX-32-STATIC: cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007755; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7756; LINUX-32-STATIC-NEXT: leal xsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007757; LINUX-32-STATIC-NEXT: ret
7758
7759; LINUX-32-PIC: cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007760; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7761; LINUX-32-PIC-NEXT: leal xsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007762; LINUX-32-PIC-NEXT: ret
7763
7764; LINUX-64-PIC: cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007765; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7766; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007767; LINUX-64-PIC-NEXT: ret
7768
7769; DARWIN-32-STATIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007770; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7771; DARWIN-32-STATIC-NEXT: leal _xsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007772; DARWIN-32-STATIC-NEXT: ret
7773
7774; DARWIN-32-DYNAMIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007775; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007778; DARWIN-32-DYNAMIC-NEXT: ret
7779
7780; DARWIN-32-PIC: _cxm00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007781; DARWIN-32-PIC: calll L121$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007782; DARWIN-32-PIC-NEXT: L121$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007783; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007787; DARWIN-32-PIC-NEXT: ret
7788
7789; DARWIN-64-STATIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007790; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7791; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007792; DARWIN-64-STATIC-NEXT: ret
7793
7794; DARWIN-64-DYNAMIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007795; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7796; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007797; DARWIN-64-DYNAMIC-NEXT: ret
7798
7799; DARWIN-64-PIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007800; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7801; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007802; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007803}
7804
7805define i8* @cam01(i64 %i) nounwind {
7806entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007811; LINUX-64-STATIC: cam01:
7812; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax
7813; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007814
7815; LINUX-32-STATIC: cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007816; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7817; LINUX-32-STATIC-NEXT: leal dst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007818; LINUX-32-STATIC-NEXT: ret
7819
7820; LINUX-32-PIC: cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007821; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7822; LINUX-32-PIC-NEXT: leal dst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007823; LINUX-32-PIC-NEXT: ret
7824
7825; LINUX-64-PIC: cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007826; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]]
7827; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007828; LINUX-64-PIC-NEXT: ret
7829
7830; DARWIN-32-STATIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007831; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7832; DARWIN-32-STATIC-NEXT: leal _dst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007833; DARWIN-32-STATIC-NEXT: ret
7834
7835; DARWIN-32-DYNAMIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007836; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007839; DARWIN-32-DYNAMIC-NEXT: ret
7840
7841; DARWIN-32-PIC: _cam01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007842; DARWIN-32-PIC: calll L122$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007843; DARWIN-32-PIC-NEXT: L122$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007844; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007848; DARWIN-32-PIC-NEXT: ret
7849
7850; DARWIN-64-STATIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007851; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7852; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007853; DARWIN-64-STATIC-NEXT: ret
7854
7855; DARWIN-64-DYNAMIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007856; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7857; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007858; DARWIN-64-DYNAMIC-NEXT: ret
7859
7860; DARWIN-64-PIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007861; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7862; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007863; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007864}
7865
7866define i8* @cxm01(i64 %i) nounwind {
7867entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007872; LINUX-64-STATIC: cxm01:
7873; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax
7874; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007875
7876; LINUX-32-STATIC: cxm01:
7877; LINUX-32-STATIC: movl 4(%esp), %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007878; LINUX-32-STATIC-NEXT: leal xdst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007879; LINUX-32-STATIC-NEXT: ret
7880
7881; LINUX-32-PIC: cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007882; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7883; LINUX-32-PIC-NEXT: leal xdst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007884; LINUX-32-PIC-NEXT: ret
7885
7886; LINUX-64-PIC: cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007887; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7888; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007889; LINUX-64-PIC-NEXT: ret
7890
7891; DARWIN-32-STATIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007892; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7893; DARWIN-32-STATIC-NEXT: leal _xdst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007894; DARWIN-32-STATIC-NEXT: ret
7895
7896; DARWIN-32-DYNAMIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007897; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007900; DARWIN-32-DYNAMIC-NEXT: ret
7901
7902; DARWIN-32-PIC: _cxm01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007903; DARWIN-32-PIC: calll L123$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007904; DARWIN-32-PIC-NEXT: L123$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007905; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007909; DARWIN-32-PIC-NEXT: ret
7910
7911; DARWIN-64-STATIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007912; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7913; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007914; DARWIN-64-STATIC-NEXT: ret
7915
7916; DARWIN-64-DYNAMIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007917; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7918; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007919; DARWIN-64-DYNAMIC-NEXT: ret
7920
7921; DARWIN-64-PIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007922; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7923; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007924; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007925}
7926
7927define i8* @cam02(i64 %i) nounwind {
7928entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00007934; LINUX-64-STATIC: cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007935; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]]
7936; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007937; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007938
7939; LINUX-32-STATIC: cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007940; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007943; LINUX-32-STATIC-NEXT: ret
7944
7945; LINUX-32-PIC: cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007946; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007949; LINUX-32-PIC-NEXT: ret
7950
7951; LINUX-64-PIC: cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007952; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007955; LINUX-64-PIC-NEXT: ret
7956
7957; DARWIN-32-STATIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007958; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007961; DARWIN-32-STATIC-NEXT: ret
7962
7963; DARWIN-32-DYNAMIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007964; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007968; DARWIN-32-DYNAMIC-NEXT: ret
7969
7970; DARWIN-32-PIC: _cam02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007971; DARWIN-32-PIC: calll L124$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007972; DARWIN-32-PIC-NEXT: L124$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007973; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007978; DARWIN-32-PIC-NEXT: ret
7979
7980; DARWIN-64-STATIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007981; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007984; DARWIN-64-STATIC-NEXT: ret
7985
7986; DARWIN-64-DYNAMIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007987; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007990; DARWIN-64-DYNAMIC-NEXT: ret
7991
7992; DARWIN-64-PIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007993; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007996; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007997}
7998
7999define i8* @cam03(i64 %i) nounwind {
8000entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00008005; LINUX-64-STATIC: cam03:
8006; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax
8007; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008008
8009; LINUX-32-STATIC: cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008010; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8011; LINUX-32-STATIC-NEXT: leal dsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008012; LINUX-32-STATIC-NEXT: ret
8013
8014; LINUX-32-PIC: cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008015; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8016; LINUX-32-PIC-NEXT: leal dsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008017; LINUX-32-PIC-NEXT: ret
8018
8019; LINUX-64-PIC: cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008020; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
8021; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008022; LINUX-64-PIC-NEXT: ret
8023
8024; DARWIN-32-STATIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008025; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8026; DARWIN-32-STATIC-NEXT: leal _dsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008027; DARWIN-32-STATIC-NEXT: ret
8028
8029; DARWIN-32-DYNAMIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008030; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8031; DARWIN-32-DYNAMIC-NEXT: leal _dsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008032; DARWIN-32-DYNAMIC-NEXT: ret
8033
8034; DARWIN-32-PIC: _cam03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008035; DARWIN-32-PIC: calll L125$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008036; DARWIN-32-PIC-NEXT: L125$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008037; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008040; DARWIN-32-PIC-NEXT: ret
8041
8042; DARWIN-64-STATIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008043; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
8044; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008045; DARWIN-64-STATIC-NEXT: ret
8046
8047; DARWIN-64-DYNAMIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008048; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
8049; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008050; DARWIN-64-DYNAMIC-NEXT: ret
8051
8052; DARWIN-64-PIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008053; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
8054; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008055; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008056}
8057
8058define i8* @cam04(i64 %i) nounwind {
8059entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00008064; LINUX-64-STATIC: cam04:
8065; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax
8066; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008067
8068; LINUX-32-STATIC: cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008069; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8070; LINUX-32-STATIC-NEXT: leal ddst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008071; LINUX-32-STATIC-NEXT: ret
8072
8073; LINUX-32-PIC: cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008074; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8075; LINUX-32-PIC-NEXT: leal ddst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008076; LINUX-32-PIC-NEXT: ret
8077
8078; LINUX-64-PIC: cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008079; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
8080; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008081; LINUX-64-PIC-NEXT: ret
8082
8083; DARWIN-32-STATIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008084; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8085; DARWIN-32-STATIC-NEXT: leal _ddst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008086; DARWIN-32-STATIC-NEXT: ret
8087
8088; DARWIN-32-DYNAMIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008089; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8090; DARWIN-32-DYNAMIC-NEXT: leal _ddst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008091; DARWIN-32-DYNAMIC-NEXT: ret
8092
8093; DARWIN-32-PIC: _cam04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008094; DARWIN-32-PIC: calll L126$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008095; DARWIN-32-PIC-NEXT: L126$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008096; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008099; DARWIN-32-PIC-NEXT: ret
8100
8101; DARWIN-64-STATIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008102; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
8103; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008104; DARWIN-64-STATIC-NEXT: ret
8105
8106; DARWIN-64-DYNAMIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008107; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
8108; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008109; DARWIN-64-DYNAMIC-NEXT: ret
8110
8111; DARWIN-64-PIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008112; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
8113; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008114; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008115}
8116
8117define i8* @cam05(i64 %i) nounwind {
8118entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00008124; LINUX-64-STATIC: cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008125; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]]
8126; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00008127; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008128
8129; LINUX-32-STATIC: cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008130; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008133; LINUX-32-STATIC-NEXT: ret
8134
8135; LINUX-32-PIC: cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008136; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008139; LINUX-32-PIC-NEXT: ret
8140
8141; LINUX-64-PIC: cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008142; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008145; LINUX-64-PIC-NEXT: ret
8146
8147; DARWIN-32-STATIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008148; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008151; DARWIN-32-STATIC-NEXT: ret
8152
8153; DARWIN-32-DYNAMIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008154; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008157; DARWIN-32-DYNAMIC-NEXT: ret
8158
8159; DARWIN-32-PIC: _cam05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008160; DARWIN-32-PIC: calll L127$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008161; DARWIN-32-PIC-NEXT: L127$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008162; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008166; DARWIN-32-PIC-NEXT: ret
8167
8168; DARWIN-64-STATIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008169; DARWIN-64-STATIC: movq _dptr(%rip), [[RAX:%r.x]]
8170; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008171; DARWIN-64-STATIC-NEXT: ret
8172
8173; DARWIN-64-DYNAMIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008174; DARWIN-64-DYNAMIC: movq _dptr(%rip), [[RAX:%r.x]]
8175; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008176; DARWIN-64-DYNAMIC-NEXT: ret
8177
8178; DARWIN-64-PIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008179; DARWIN-64-PIC: movq _dptr(%rip), [[RAX:%r.x]]
8180; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008181; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008182}
8183
8184define i8* @cam06(i64 %i) nounwind {
8185entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00008190; LINUX-64-STATIC: cam06:
8191; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax
8192; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008193
8194; LINUX-32-STATIC: cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008195; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8196; LINUX-32-STATIC-NEXT: leal lsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008197; LINUX-32-STATIC-NEXT: ret
8198
8199; LINUX-32-PIC: cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008200; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8201; LINUX-32-PIC-NEXT: leal lsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008202; LINUX-32-PIC-NEXT: ret
8203
8204; LINUX-64-PIC: cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008205; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
8206; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008207; LINUX-64-PIC-NEXT: ret
8208
8209; DARWIN-32-STATIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008210; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8211; DARWIN-32-STATIC-NEXT: leal _lsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008212; DARWIN-32-STATIC-NEXT: ret
8213
8214; DARWIN-32-DYNAMIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008215; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8216; DARWIN-32-DYNAMIC-NEXT: leal _lsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008217; DARWIN-32-DYNAMIC-NEXT: ret
8218
8219; DARWIN-32-PIC: _cam06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008220; DARWIN-32-PIC: calll L128$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008221; DARWIN-32-PIC-NEXT: L128$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008222; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008225; DARWIN-32-PIC-NEXT: ret
8226
8227; DARWIN-64-STATIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008228; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
8229; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008230; DARWIN-64-STATIC-NEXT: ret
8231
8232; DARWIN-64-DYNAMIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008233; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
8234; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008235; DARWIN-64-DYNAMIC-NEXT: ret
8236
8237; DARWIN-64-PIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008238; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
8239; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008240; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008241}
8242
8243define i8* @cam07(i64 %i) nounwind {
8244entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00008249; LINUX-64-STATIC: cam07:
8250; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax
8251; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008252
8253; LINUX-32-STATIC: cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008254; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8255; LINUX-32-STATIC-NEXT: leal ldst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008256; LINUX-32-STATIC-NEXT: ret
8257
8258; LINUX-32-PIC: cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008259; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8260; LINUX-32-PIC-NEXT: leal ldst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008261; LINUX-32-PIC-NEXT: ret
8262
8263; LINUX-64-PIC: cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008264; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
8265; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008266; LINUX-64-PIC-NEXT: ret
8267
8268; DARWIN-32-STATIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008269; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8270; DARWIN-32-STATIC-NEXT: leal _ldst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008271; DARWIN-32-STATIC-NEXT: ret
8272
8273; DARWIN-32-DYNAMIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008274; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8275; DARWIN-32-DYNAMIC-NEXT: leal _ldst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008276; DARWIN-32-DYNAMIC-NEXT: ret
8277
8278; DARWIN-32-PIC: _cam07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008279; DARWIN-32-PIC: calll L129$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008280; DARWIN-32-PIC-NEXT: L129$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008281; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008284; DARWIN-32-PIC-NEXT: ret
8285
8286; DARWIN-64-STATIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008287; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
8288; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008289; DARWIN-64-STATIC-NEXT: ret
8290
8291; DARWIN-64-DYNAMIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008292; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
8293; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008294; DARWIN-64-DYNAMIC-NEXT: ret
8295
8296; DARWIN-64-PIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008297; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
8298; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008299; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008300}
8301
8302define i8* @cam08(i64 %i) nounwind {
8303entry:
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
Chris Lattner4f066492009-07-11 20:29:19 +00008309; LINUX-64-STATIC: cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008310; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]]
8311; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00008312; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008313
8314; LINUX-32-STATIC: cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008315; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008318; LINUX-32-STATIC-NEXT: ret
8319
8320; LINUX-32-PIC: cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008321; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008324; LINUX-32-PIC-NEXT: ret
8325
8326; LINUX-64-PIC: cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008327; LINUX-64-PIC: movq lptr(%rip), [[RAX:%r.x]]
8328; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008329; LINUX-64-PIC-NEXT: ret
8330
8331; DARWIN-32-STATIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008332; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008335; DARWIN-32-STATIC-NEXT: ret
8336
8337; DARWIN-32-DYNAMIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008338; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008341; DARWIN-32-DYNAMIC-NEXT: ret
8342
8343; DARWIN-32-PIC: _cam08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008344; DARWIN-32-PIC: calll L130$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008345; DARWIN-32-PIC-NEXT: L130$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008346; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008350; DARWIN-32-PIC-NEXT: ret
8351
8352; DARWIN-64-STATIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008353; DARWIN-64-STATIC: movq _lptr(%rip), [[RAX:%r.x]]
8354; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008355; DARWIN-64-STATIC-NEXT: ret
8356
8357; DARWIN-64-DYNAMIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008358; DARWIN-64-DYNAMIC: movq _lptr(%rip), [[RAX:%r.x]]
8359; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008360; DARWIN-64-DYNAMIC-NEXT: ret
8361
8362; DARWIN-64-PIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008363; DARWIN-64-PIC: movq _lptr(%rip), [[RAX:%r.x]]
8364; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008365; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008366}
8367
8368define void @lcallee() nounwind {
8369entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008370 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
Dan Gohman318f5052009-03-14 02:35:10 +00008377 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008378; LINUX-64-STATIC: lcallee:
Sean Callanan108934c2009-12-18 00:01:26 +00008379; 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
Chris Lattner4f066492009-07-11 20:29:19 +00008386; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008387
8388; LINUX-32-STATIC: lcallee:
Eric Christopher04f50792011-01-13 06:47:10 +00008389; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008390; 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
Eric Christopher04f50792011-01-13 06:47:10 +00008397; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008398; LINUX-32-STATIC-NEXT: ret
8399
8400; LINUX-32-PIC: lcallee:
Eric Christopher04f50792011-01-13 06:47:10 +00008401; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008402; 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
Eric Christopher04f50792011-01-13 06:47:10 +00008409; LINUX-32-PIC-NEXT: addl
8410
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008411; LINUX-32-PIC-NEXT: ret
8412
8413; LINUX-64-PIC: lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008414; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008415; 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
Evan Cheng7158e082011-01-03 22:53:22 +00008422; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008423; LINUX-64-PIC-NEXT: ret
8424
8425; DARWIN-32-STATIC: _lcallee:
8426; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008427; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008434; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008439; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008446; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008451; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008458; DARWIN-32-PIC-NEXT: addl $12, %esp
8459; DARWIN-32-PIC-NEXT: ret
8460
8461; DARWIN-64-STATIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008462; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008463; 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
Evan Cheng7158e082011-01-03 22:53:22 +00008470; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008471; DARWIN-64-STATIC-NEXT: ret
8472
8473; DARWIN-64-DYNAMIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008474; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008475; 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
Evan Cheng7158e082011-01-03 22:53:22 +00008482; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008483; DARWIN-64-DYNAMIC-NEXT: ret
8484
8485; DARWIN-64-PIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008486; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008487; 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
Evan Cheng7158e082011-01-03 22:53:22 +00008494; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008495; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008496}
8497
8498declare void @x()
8499
8500define internal void @dcallee() nounwind {
8501entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008502 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
Dan Gohman318f5052009-03-14 02:35:10 +00008509 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008510; LINUX-64-STATIC: dcallee:
Sean Callanan108934c2009-12-18 00:01:26 +00008511; 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
Chris Lattner4f066492009-07-11 20:29:19 +00008518; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008519
8520; LINUX-32-STATIC: dcallee:
Eric Christopher04f50792011-01-13 06:47:10 +00008521; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008522; 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
Eric Christopher04f50792011-01-13 06:47:10 +00008529; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008530; LINUX-32-STATIC-NEXT: ret
8531
8532; LINUX-32-PIC: dcallee:
Eric Christopher04f50792011-01-13 06:47:10 +00008533; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008534; 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
Eric Christopher04f50792011-01-13 06:47:10 +00008541; LINUX-32-PIC-NEXT: addl
8542
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008543; LINUX-32-PIC-NEXT: ret
8544
8545; LINUX-64-PIC: dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008546; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008547; 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
Evan Cheng7158e082011-01-03 22:53:22 +00008554; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008555; LINUX-64-PIC-NEXT: ret
8556
8557; DARWIN-32-STATIC: _dcallee:
8558; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008559; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008566; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008571; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008578; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008583; 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
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008590; DARWIN-32-PIC-NEXT: addl $12, %esp
8591; DARWIN-32-PIC-NEXT: ret
8592
8593; DARWIN-64-STATIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008594; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008595; 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
Evan Cheng7158e082011-01-03 22:53:22 +00008602; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008603; DARWIN-64-STATIC-NEXT: ret
8604
8605; DARWIN-64-DYNAMIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008606; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008607; 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
Evan Cheng7158e082011-01-03 22:53:22 +00008614; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008615; DARWIN-64-DYNAMIC-NEXT: ret
8616
8617; DARWIN-64-PIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008618; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008619; 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
Evan Cheng7158e082011-01-03 22:53:22 +00008626; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008627; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008628}
8629
8630declare void @y()
8631
8632define void ()* @address() nounwind {
8633entry:
8634 ret void ()* @callee
Chris Lattner4f066492009-07-11 20:29:19 +00008635; LINUX-64-STATIC: address:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008636; LINUX-64-STATIC: movl $callee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008637; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008638
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008660; DARWIN-32-PIC: calll L133$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008661; DARWIN-32-PIC-NEXT: L133$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008662; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8663; DARWIN-32-PIC-NEXT: movl L_callee$non_lazy_ptr-L133$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008664; 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
Dan Gohman318f5052009-03-14 02:35:10 +00008677}
8678
8679declare void @callee()
8680
8681define void ()* @laddress() nounwind {
8682entry:
8683 ret void ()* @lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008684; LINUX-64-STATIC: laddress:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008685; LINUX-64-STATIC: movl $lcallee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008686; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008687
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008709; DARWIN-32-PIC: calll L134$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008710; DARWIN-32-PIC-NEXT: L134$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008711; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8712; DARWIN-32-PIC-NEXT: leal _lcallee-L134$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008713; 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
Dan Gohman318f5052009-03-14 02:35:10 +00008726}
8727
8728define void ()* @daddress() nounwind {
8729entry:
8730 ret void ()* @dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008731; LINUX-64-STATIC: daddress:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008732; LINUX-64-STATIC: movl $dcallee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008733; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008734
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:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008756; DARWIN-32-PIC: calll L135$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008757; DARWIN-32-PIC-NEXT: L135$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008758; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8759; DARWIN-32-PIC-NEXT: leal _dcallee-L135$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008760; 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
Dan Gohman318f5052009-03-14 02:35:10 +00008773}
8774
8775define void @caller() nounwind {
8776entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008777 call void @callee() nounwind
8778 call void @callee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008779 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008780; LINUX-64-STATIC: caller:
Sean Callanan108934c2009-12-18 00:01:26 +00008781; LINUX-64-STATIC: callq callee
8782; LINUX-64-STATIC: callq callee
Chris Lattner4f066492009-07-11 20:29:19 +00008783; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008784
8785; LINUX-32-STATIC: caller:
Eric Christopher04f50792011-01-13 06:47:10 +00008786; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008787; LINUX-32-STATIC-NEXT: calll callee
8788; LINUX-32-STATIC-NEXT: calll callee
Eric Christopher04f50792011-01-13 06:47:10 +00008789; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008790; LINUX-32-STATIC-NEXT: ret
8791
8792; LINUX-32-PIC: caller:
Eric Christopher04f50792011-01-13 06:47:10 +00008793; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008794; LINUX-32-PIC-NEXT: calll callee
8795; LINUX-32-PIC-NEXT: calll callee
Eric Christopher04f50792011-01-13 06:47:10 +00008796; LINUX-32-PIC-NEXT: addl
8797
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008798; LINUX-32-PIC-NEXT: ret
8799
8800; LINUX-64-PIC: caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008801; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008802; LINUX-64-PIC-NEXT: callq callee@PLT
8803; LINUX-64-PIC-NEXT: callq callee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008804; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008805; LINUX-64-PIC-NEXT: ret
8806
8807; DARWIN-32-STATIC: _caller:
8808; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008809; DARWIN-32-STATIC-NEXT: calll _callee
8810; DARWIN-32-STATIC-NEXT: calll _callee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008811; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008816; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
8817; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008818; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008823; DARWIN-32-PIC-NEXT: calll L_callee$stub
8824; DARWIN-32-PIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008825; DARWIN-32-PIC-NEXT: addl $12, %esp
8826; DARWIN-32-PIC-NEXT: ret
8827
8828; DARWIN-64-STATIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008829; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008830; DARWIN-64-STATIC-NEXT: callq _callee
8831; DARWIN-64-STATIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008832; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008833; DARWIN-64-STATIC-NEXT: ret
8834
8835; DARWIN-64-DYNAMIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008836; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008837; DARWIN-64-DYNAMIC-NEXT: callq _callee
8838; DARWIN-64-DYNAMIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008839; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008840; DARWIN-64-DYNAMIC-NEXT: ret
8841
8842; DARWIN-64-PIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008843; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008844; DARWIN-64-PIC-NEXT: callq _callee
8845; DARWIN-64-PIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008846; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008847; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008848}
8849
8850define void @dcaller() nounwind {
8851entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008852 call void @dcallee() nounwind
8853 call void @dcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008854 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008855; LINUX-64-STATIC: dcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00008856; LINUX-64-STATIC: callq dcallee
8857; LINUX-64-STATIC: callq dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008858; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008859
8860; LINUX-32-STATIC: dcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008861; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008862; LINUX-32-STATIC-NEXT: calll dcallee
8863; LINUX-32-STATIC-NEXT: calll dcallee
Eric Christopher04f50792011-01-13 06:47:10 +00008864; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008865; LINUX-32-STATIC-NEXT: ret
8866
8867; LINUX-32-PIC: dcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008868; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008869; LINUX-32-PIC-NEXT: calll dcallee
8870; LINUX-32-PIC-NEXT: calll dcallee
Eric Christopher04f50792011-01-13 06:47:10 +00008871; LINUX-32-PIC-NEXT: addl
8872
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008873; LINUX-32-PIC-NEXT: ret
8874
8875; LINUX-64-PIC: dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008876; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008877; LINUX-64-PIC-NEXT: callq dcallee
8878; LINUX-64-PIC-NEXT: callq dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008879; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008880; LINUX-64-PIC-NEXT: ret
8881
8882; DARWIN-32-STATIC: _dcaller:
8883; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008884; DARWIN-32-STATIC-NEXT: calll _dcallee
8885; DARWIN-32-STATIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008886; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008891; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
8892; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008893; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008898; DARWIN-32-PIC-NEXT: calll _dcallee
8899; DARWIN-32-PIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008900; DARWIN-32-PIC-NEXT: addl $12, %esp
8901; DARWIN-32-PIC-NEXT: ret
8902
8903; DARWIN-64-STATIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008904; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008905; DARWIN-64-STATIC-NEXT: callq _dcallee
8906; DARWIN-64-STATIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008907; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008908; DARWIN-64-STATIC-NEXT: ret
8909
8910; DARWIN-64-DYNAMIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008911; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008912; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
8913; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008914; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008915; DARWIN-64-DYNAMIC-NEXT: ret
8916
8917; DARWIN-64-PIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008918; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008919; DARWIN-64-PIC-NEXT: callq _dcallee
8920; DARWIN-64-PIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008921; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008922; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008923}
8924
8925define void @lcaller() nounwind {
8926entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008927 call void @lcallee() nounwind
8928 call void @lcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008929 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008930; LINUX-64-STATIC: lcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00008931; LINUX-64-STATIC: callq lcallee
8932; LINUX-64-STATIC: callq lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008933; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008934
8935; LINUX-32-STATIC: lcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008936; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008937; LINUX-32-STATIC-NEXT: calll lcallee
8938; LINUX-32-STATIC-NEXT: calll lcallee
Eric Christopher04f50792011-01-13 06:47:10 +00008939; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008940; LINUX-32-STATIC-NEXT: ret
8941
8942; LINUX-32-PIC: lcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008943; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008944; LINUX-32-PIC-NEXT: calll lcallee
8945; LINUX-32-PIC-NEXT: calll lcallee
Eric Christopher04f50792011-01-13 06:47:10 +00008946; LINUX-32-PIC-NEXT: addl
8947
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008948; LINUX-32-PIC-NEXT: ret
8949
8950; LINUX-64-PIC: lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008951; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008952; LINUX-64-PIC-NEXT: callq lcallee@PLT
8953; LINUX-64-PIC-NEXT: callq lcallee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008954; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008955; LINUX-64-PIC-NEXT: ret
8956
8957; DARWIN-32-STATIC: _lcaller:
8958; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008959; DARWIN-32-STATIC-NEXT: calll _lcallee
8960; DARWIN-32-STATIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008961; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008966; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
8967; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008968; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00008973; DARWIN-32-PIC-NEXT: calll _lcallee
8974; DARWIN-32-PIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008975; DARWIN-32-PIC-NEXT: addl $12, %esp
8976; DARWIN-32-PIC-NEXT: ret
8977
8978; DARWIN-64-STATIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008979; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008980; DARWIN-64-STATIC-NEXT: callq _lcallee
8981; DARWIN-64-STATIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008982; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008983; DARWIN-64-STATIC-NEXT: ret
8984
8985; DARWIN-64-DYNAMIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008986; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008987; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
8988; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008989; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008990; DARWIN-64-DYNAMIC-NEXT: ret
8991
8992; DARWIN-64-PIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008993; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008994; DARWIN-64-PIC-NEXT: callq _lcallee
8995; DARWIN-64-PIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008996; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008997; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008998}
8999
9000define void @tailcaller() nounwind {
9001entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00009002 call void @callee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009003 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009004; LINUX-64-STATIC: tailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009005; LINUX-64-STATIC: callq callee
Chris Lattner4f066492009-07-11 20:29:19 +00009006; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009007
9008; LINUX-32-STATIC: tailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009009; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009010; LINUX-32-STATIC-NEXT: calll callee
Eric Christopher04f50792011-01-13 06:47:10 +00009011; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009012; LINUX-32-STATIC-NEXT: ret
9013
9014; LINUX-32-PIC: tailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009015; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009016; LINUX-32-PIC-NEXT: calll callee
Eric Christopher04f50792011-01-13 06:47:10 +00009017; LINUX-32-PIC-NEXT: addl
9018
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009019; LINUX-32-PIC-NEXT: ret
9020
9021; LINUX-64-PIC: tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009022; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009023; LINUX-64-PIC-NEXT: callq callee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00009024; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009025; LINUX-64-PIC-NEXT: ret
9026
9027; DARWIN-32-STATIC: _tailcaller:
9028; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009029; DARWIN-32-STATIC-NEXT: calll _callee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009030; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009035; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009036; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009041; DARWIN-32-PIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009042; DARWIN-32-PIC-NEXT: addl $12, %esp
9043; DARWIN-32-PIC-NEXT: ret
9044
9045; DARWIN-64-STATIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009046; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009047; DARWIN-64-STATIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009048; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009049; DARWIN-64-STATIC-NEXT: ret
9050
9051; DARWIN-64-DYNAMIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009052; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009053; DARWIN-64-DYNAMIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009054; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009055; DARWIN-64-DYNAMIC-NEXT: ret
9056
9057; DARWIN-64-PIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009058; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009059; DARWIN-64-PIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009060; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009061; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009062}
9063
9064define void @dtailcaller() nounwind {
9065entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00009066 call void @dcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009067 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009068; LINUX-64-STATIC: dtailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009069; LINUX-64-STATIC: callq dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00009070; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009071
9072; LINUX-32-STATIC: dtailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009073; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009074; LINUX-32-STATIC-NEXT: calll dcallee
Eric Christopher04f50792011-01-13 06:47:10 +00009075; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009076; LINUX-32-STATIC-NEXT: ret
9077
9078; LINUX-32-PIC: dtailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009079; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009080; LINUX-32-PIC-NEXT: calll dcallee
Eric Christopher04f50792011-01-13 06:47:10 +00009081; LINUX-32-PIC-NEXT: addl
9082
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009083; LINUX-32-PIC-NEXT: ret
9084
9085; LINUX-64-PIC: dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009086; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009087; LINUX-64-PIC-NEXT: callq dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009088; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009089; LINUX-64-PIC-NEXT: ret
9090
9091; DARWIN-32-STATIC: _dtailcaller:
9092; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009093; DARWIN-32-STATIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009094; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009099; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009100; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009105; DARWIN-32-PIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009106; DARWIN-32-PIC-NEXT: addl $12, %esp
9107; DARWIN-32-PIC-NEXT: ret
9108
9109; DARWIN-64-STATIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009110; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009111; DARWIN-64-STATIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009112; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009113; DARWIN-64-STATIC-NEXT: ret
9114
9115; DARWIN-64-DYNAMIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009116; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009117; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009118; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009119; DARWIN-64-DYNAMIC-NEXT: ret
9120
9121; DARWIN-64-PIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009122; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009123; DARWIN-64-PIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009124; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009125; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009126}
9127
9128define void @ltailcaller() nounwind {
9129entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00009130 call void @lcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009131 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009132; LINUX-64-STATIC: ltailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009133; LINUX-64-STATIC: callq lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00009134; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009135
9136; LINUX-32-STATIC: ltailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009137; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009138; LINUX-32-STATIC-NEXT: calll lcallee
Eric Christopher04f50792011-01-13 06:47:10 +00009139; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009140; LINUX-32-STATIC-NEXT: ret
9141
9142; LINUX-32-PIC: ltailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009143; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009144; LINUX-32-PIC-NEXT: calll lcallee
Eric Christopher04f50792011-01-13 06:47:10 +00009145; LINUX-32-PIC-NEXT: addl
9146
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009147; LINUX-32-PIC-NEXT: ret
9148
9149; LINUX-64-PIC: ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009150; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009151; LINUX-64-PIC-NEXT: callq lcallee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00009152; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009153; LINUX-64-PIC-NEXT: ret
9154
9155; DARWIN-32-STATIC: _ltailcaller:
9156; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009157; DARWIN-32-STATIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009158; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009163; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009164; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009169; DARWIN-32-PIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009170; DARWIN-32-PIC-NEXT: addl $12, %esp
9171; DARWIN-32-PIC-NEXT: ret
9172
9173; DARWIN-64-STATIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009174; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009175; DARWIN-64-STATIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009176; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009177; DARWIN-64-STATIC-NEXT: ret
9178
9179; DARWIN-64-DYNAMIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009180; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009181; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009182; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009183; DARWIN-64-DYNAMIC-NEXT: ret
9184
9185; DARWIN-64-PIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009186; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009187; DARWIN-64-PIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009188; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009189; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009190}
9191
9192define void @icaller() nounwind {
9193entry:
9194 %0 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009195 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009196 %1 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009197 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009198 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009199; LINUX-64-STATIC: icaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009200; LINUX-64-STATIC: callq *ifunc
9201; LINUX-64-STATIC: callq *ifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009202; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009203
9204; LINUX-32-STATIC: icaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009205; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009206; LINUX-32-STATIC-NEXT: calll *ifunc
9207; LINUX-32-STATIC-NEXT: calll *ifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009208; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009209; LINUX-32-STATIC-NEXT: ret
9210
9211; LINUX-32-PIC: icaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009212; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009213; LINUX-32-PIC-NEXT: calll *ifunc
9214; LINUX-32-PIC-NEXT: calll *ifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009215; LINUX-32-PIC-NEXT: addl
9216
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009217; LINUX-32-PIC-NEXT: ret
9218
9219; LINUX-64-PIC: icaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009220; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009225; LINUX-64-PIC-NEXT: ret
9226
9227; DARWIN-32-STATIC: _icaller:
9228; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009229; DARWIN-32-STATIC-NEXT: calll *_ifunc
9230; DARWIN-32-STATIC-NEXT: calll *_ifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009231; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009238; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
9239; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009240; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009247; DARWIN-32-PIC-NEXT: calll L142$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009248; DARWIN-32-PIC-NEXT: L142$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009249; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
9250; DARWIN-32-PIC-NEXT: movl L_ifunc$non_lazy_ptr-L142$pb([[EAX]]), %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009251; DARWIN-32-PIC-NEXT: calll *(%esi)
9252; DARWIN-32-PIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009253; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009258; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009263; DARWIN-64-STATIC-NEXT: ret
9264
9265; DARWIN-64-DYNAMIC: _icaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009266; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009271; DARWIN-64-DYNAMIC-NEXT: ret
9272
9273; DARWIN-64-PIC: _icaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009274; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009279; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009280}
9281
9282define void @dicaller() nounwind {
9283entry:
9284 %0 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009285 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009286 %1 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009287 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009288 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009289; LINUX-64-STATIC: dicaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009290; LINUX-64-STATIC: callq *difunc
9291; LINUX-64-STATIC: callq *difunc
Chris Lattner4f066492009-07-11 20:29:19 +00009292; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009293
9294; LINUX-32-STATIC: dicaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009295; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009296; LINUX-32-STATIC-NEXT: calll *difunc
9297; LINUX-32-STATIC-NEXT: calll *difunc
Eric Christopher04f50792011-01-13 06:47:10 +00009298; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009299; LINUX-32-STATIC-NEXT: ret
9300
9301; LINUX-32-PIC: dicaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009302; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009303; LINUX-32-PIC-NEXT: calll *difunc
9304; LINUX-32-PIC-NEXT: calll *difunc
Eric Christopher04f50792011-01-13 06:47:10 +00009305; LINUX-32-PIC-NEXT: addl
9306
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009307; LINUX-32-PIC-NEXT: ret
9308
9309; LINUX-64-PIC: dicaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009310; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009315; LINUX-64-PIC-NEXT: ret
9316
9317; DARWIN-32-STATIC: _dicaller:
9318; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009319; DARWIN-32-STATIC-NEXT: calll *_difunc
9320; DARWIN-32-STATIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009321; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009326; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
9327; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009328; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009334; DARWIN-32-PIC-NEXT: calll L143$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009335; DARWIN-32-PIC-NEXT: L143$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009336; DARWIN-32-PIC-NEXT: popl %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009337; DARWIN-32-PIC-NEXT: calll *_difunc-L143$pb(%esi)
9338; DARWIN-32-PIC-NEXT: calll *_difunc-L143$pb(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009339; 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:
Evan Cheng7158e082011-01-03 22:53:22 +00009344; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009345; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
9346; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009347; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009348; DARWIN-64-STATIC-NEXT: ret
9349
9350; DARWIN-64-DYNAMIC: _dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009351; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009352; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
9353; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009354; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009355; DARWIN-64-DYNAMIC-NEXT: ret
9356
9357; DARWIN-64-PIC: _dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009358; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009359; DARWIN-64-PIC-NEXT: callq *_difunc(%rip)
9360; DARWIN-64-PIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009361; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009362; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009363}
9364
9365define void @licaller() nounwind {
9366entry:
9367 %0 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009368 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009369 %1 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009370 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009371 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009372; LINUX-64-STATIC: licaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009373; LINUX-64-STATIC: callq *lifunc
9374; LINUX-64-STATIC: callq *lifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009375; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009376
9377; LINUX-32-STATIC: licaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009378; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009379; LINUX-32-STATIC-NEXT: calll *lifunc
9380; LINUX-32-STATIC-NEXT: calll *lifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009381; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009382; LINUX-32-STATIC-NEXT: ret
9383
9384; LINUX-32-PIC: licaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009385; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009386; LINUX-32-PIC-NEXT: calll *lifunc
9387; LINUX-32-PIC-NEXT: calll *lifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009388; LINUX-32-PIC-NEXT: addl
9389
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009390; LINUX-32-PIC-NEXT: ret
9391
9392; LINUX-64-PIC: licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009393; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009394; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
9395; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009396; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009397; LINUX-64-PIC-NEXT: ret
9398
9399; DARWIN-32-STATIC: _licaller:
9400; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009401; DARWIN-32-STATIC-NEXT: calll *_lifunc
9402; DARWIN-32-STATIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009403; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009408; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
9409; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009410; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009416; DARWIN-32-PIC-NEXT: calll L144$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009417; DARWIN-32-PIC-NEXT: L144$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009418; DARWIN-32-PIC-NEXT: popl %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009419; DARWIN-32-PIC-NEXT: calll *_lifunc-L144$pb(%esi)
9420; DARWIN-32-PIC-NEXT: calll *_lifunc-L144$pb(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009421; 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:
Evan Cheng7158e082011-01-03 22:53:22 +00009426; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009427; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
9428; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009429; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009430; DARWIN-64-STATIC-NEXT: ret
9431
9432; DARWIN-64-DYNAMIC: _licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009433; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009434; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
9435; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009436; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009437; DARWIN-64-DYNAMIC-NEXT: ret
9438
9439; DARWIN-64-PIC: _licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009440; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009441; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
9442; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009443; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009444; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009445}
9446
9447define void @itailcaller() nounwind {
9448entry:
9449 %0 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009450 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009451 %1 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009452 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009453 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009454; LINUX-64-STATIC: itailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009455; LINUX-64-STATIC: callq *ifunc
9456; LINUX-64-STATIC: callq *ifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009457; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009458
9459; LINUX-32-STATIC: itailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009460; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009461; LINUX-32-STATIC-NEXT: calll *ifunc
9462; LINUX-32-STATIC-NEXT: calll *ifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009463; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009464; LINUX-32-STATIC-NEXT: ret
9465
9466; LINUX-32-PIC: itailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009467; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009468; LINUX-32-PIC-NEXT: calll *ifunc
9469; LINUX-32-PIC-NEXT: calll *ifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009470; LINUX-32-PIC-NEXT: addl
9471
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009472; LINUX-32-PIC-NEXT: ret
9473
9474; LINUX-64-PIC: itailcaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009475; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009480; LINUX-64-PIC-NEXT: ret
9481
9482; DARWIN-32-STATIC: _itailcaller:
9483; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009484; DARWIN-32-STATIC-NEXT: calll *_ifunc
9485; DARWIN-32-STATIC-NEXT: calll *_ifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009486; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009493; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
9494; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009495; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009502; DARWIN-32-PIC-NEXT: calll L145$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009503; DARWIN-32-PIC-NEXT: L145$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009504; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
9505; DARWIN-32-PIC-NEXT: movl L_ifunc$non_lazy_ptr-L145$pb([[EAX]]), %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009506; DARWIN-32-PIC-NEXT: calll *(%esi)
9507; DARWIN-32-PIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009508; 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:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009513; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009518; DARWIN-64-STATIC-NEXT: ret
9519
9520; DARWIN-64-DYNAMIC: _itailcaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009521; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009526; DARWIN-64-DYNAMIC-NEXT: ret
9527
9528; DARWIN-64-PIC: _itailcaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009529; 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]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009534; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009535}
9536
9537define void @ditailcaller() nounwind {
9538entry:
9539 %0 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009540 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009541 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009542; LINUX-64-STATIC: ditailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009543; LINUX-64-STATIC: callq *difunc
Chris Lattner4f066492009-07-11 20:29:19 +00009544; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009545
9546; LINUX-32-STATIC: ditailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009547; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009548; LINUX-32-STATIC-NEXT: calll *difunc
Eric Christopher04f50792011-01-13 06:47:10 +00009549; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009550; LINUX-32-STATIC-NEXT: ret
9551
9552; LINUX-32-PIC: ditailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009553; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009554; LINUX-32-PIC-NEXT: calll *difunc
Eric Christopher04f50792011-01-13 06:47:10 +00009555; LINUX-32-PIC-NEXT: addl
9556
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009557; LINUX-32-PIC-NEXT: ret
9558
9559; LINUX-64-PIC: ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009560; LINUX-64-PIC: pushq
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009561; LINUX-64-PIC-NEXT: movq difunc@GOTPCREL(%rip), [[RAX:%r.x]]
9562; LINUX-64-PIC-NEXT: callq *([[RAX]])
Evan Cheng7158e082011-01-03 22:53:22 +00009563; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009564; LINUX-64-PIC-NEXT: ret
9565
9566; DARWIN-32-STATIC: _ditailcaller:
9567; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009568; DARWIN-32-STATIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009569; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009574; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009575; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009580; DARWIN-32-PIC-NEXT: calll L146$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009581; DARWIN-32-PIC-NEXT: L146$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009582; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
9583; DARWIN-32-PIC-NEXT: calll *_difunc-L146$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009584; DARWIN-32-PIC-NEXT: addl $12, %esp
9585; DARWIN-32-PIC-NEXT: ret
9586
9587; DARWIN-64-STATIC: _ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009588; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009589; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009590; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009591; DARWIN-64-STATIC-NEXT: ret
9592
9593; DARWIN-64-DYNAMIC: _ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009594; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009595; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009596; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009597; DARWIN-64-DYNAMIC-NEXT: ret
9598
9599; DARWIN-64-PIC: _ditailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009600; DARWIN-64-PIC: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009601; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009602; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009603}
9604
9605define void @litailcaller() nounwind {
9606entry:
9607 %0 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009608 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009609 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009610; LINUX-64-STATIC: litailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009611; LINUX-64-STATIC: callq *lifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009612; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009613
9614; LINUX-32-STATIC: litailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009615; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009616; LINUX-32-STATIC-NEXT: calll *lifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009617; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009618; LINUX-32-STATIC-NEXT: ret
9619
9620; LINUX-32-PIC: litailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009621; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009622; LINUX-32-PIC-NEXT: calll *lifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009623; LINUX-32-PIC-NEXT: addl
9624
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009625; LINUX-32-PIC-NEXT: ret
9626
9627; LINUX-64-PIC: litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009628; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009629; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009630; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009631; LINUX-64-PIC-NEXT: ret
9632
9633; DARWIN-32-STATIC: _litailcaller:
9634; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009635; DARWIN-32-STATIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009636; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009641; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009642; 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
Chris Lattner1eb1b682010-09-22 05:49:14 +00009647; DARWIN-32-PIC-NEXT: calll L147$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009648; DARWIN-32-PIC-NEXT: L147$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009649; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
9650; DARWIN-32-PIC-NEXT: calll *_lifunc-L147$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009651; DARWIN-32-PIC-NEXT: addl $12, %esp
9652; DARWIN-32-PIC-NEXT: ret
9653
9654; DARWIN-64-STATIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009655; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009656; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009657; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009658; DARWIN-64-STATIC-NEXT: ret
9659
9660; DARWIN-64-DYNAMIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009661; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009662; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009663; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009664; DARWIN-64-DYNAMIC-NEXT: ret
9665
9666; DARWIN-64-PIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009667; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009668; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009669; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009670; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009671}