blob: 5068d2929dbf8ff1ab6089e2da410ef54a8024f3 [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
15@src = external global [131072 x i32]
16@dst = external global [131072 x i32]
17@xsrc = external global [32 x i32]
18@xdst = external global [32 x i32]
19@ptr = external global i32*
20@dsrc = global [131072 x i32] zeroinitializer, align 32
21@ddst = global [131072 x i32] zeroinitializer, align 32
22@dptr = global i32* null
23@lsrc = internal global [131072 x i32] zeroinitializer
24@ldst = internal global [131072 x i32] zeroinitializer
25@lptr = internal global i32* null
26@ifunc = external global void ()*
27@difunc = global void ()* null
28@lifunc = internal global void ()* null
29@lxsrc = internal global [32 x i32] zeroinitializer, align 32
30@lxdst = internal global [32 x i32] zeroinitializer, align 32
31@dxsrc = global [32 x i32] zeroinitializer, align 32
32@dxdst = global [32 x i32] zeroinitializer, align 32
33
34define void @foo00() nounwind {
35entry:
36 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
37 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4
38 ret void
Chris Lattner4f066492009-07-11 20:29:19 +000039
40; LINUX-64-STATIC: foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000041; LINUX-64-STATIC: movl src(%rip), [[EAX:%e.x]]
42; LINUX-64-STATIC: movl [[EAX]], dst
Chris Lattner4f066492009-07-11 20:29:19 +000043; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000044
45; LINUX-32-STATIC: foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000046; LINUX-32-STATIC: movl src, [[EAX:%e.x]]
47; LINUX-32-STATIC-NEXT: movl [[EAX]], dst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000048; LINUX-32-STATIC-NEXT: ret
49
50; LINUX-32-PIC: foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000051; LINUX-32-PIC: movl src, [[EAX:%e.x]]
52; LINUX-32-PIC-NEXT: movl [[EAX]], dst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000053; LINUX-32-PIC-NEXT: ret
54
55; LINUX-64-PIC: foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000056; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r..]]
57; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e..]]
58; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r..]]
59; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000060; LINUX-64-PIC-NEXT: ret
61
62; DARWIN-32-STATIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000063; DARWIN-32-STATIC: movl _src, [[EAX:%e.x]]
64; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000065; DARWIN-32-STATIC-NEXT: ret
66
67; DARWIN-32-DYNAMIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000068; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e..]]
69; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e..]]
70; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e..]]
71; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000072; DARWIN-32-DYNAMIC-NEXT: ret
73
74; DARWIN-32-PIC: _foo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +000075; DARWIN-32-PIC: calll L0$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +000076; DARWIN-32-PIC-NEXT: L0$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000077; DARWIN-32-PIC-NEXT: popl [[EAX:%e..]]
78; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L0$pb([[EAX]]), [[ECX:%e..]]
79; DARWIN-32-PIC-NEXT: movl ([[ECX]]), [[ECX:%e..]]
80; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L0$pb([[EAX]]), [[EAX:%e..]]
81; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000082; DARWIN-32-PIC-NEXT: ret
83
84; DARWIN-64-STATIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000085; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r..]]
86; DARWIN-64-STATIC-NEXT: movl ([[RAX]]), [[EAX:%e..]]
87; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r..]]
88; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000089; DARWIN-64-STATIC-NEXT: ret
90
91; DARWIN-64-DYNAMIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000092; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r..]]
93; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]]), [[EAX:%e..]]
94; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r..]]
95; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +000096; DARWIN-64-DYNAMIC-NEXT: ret
97
98; DARWIN-64-PIC: _foo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +000099; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r..]]
100; DARWIN-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e..]]
101; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r..]]
102; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000103; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000104}
105
106define void @fxo00() nounwind {
107entry:
108 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
109 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4
110 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000111
112; LINUX-64-STATIC: fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000113; LINUX-64-STATIC: movl xsrc(%rip), [[EAX:%e.x]]
114; LINUX-64-STATIC: movl [[EAX]], xdst
Chris Lattner4f066492009-07-11 20:29:19 +0000115; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000116
117; LINUX-32-STATIC: fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000118; LINUX-32-STATIC: movl xsrc, [[EAX:%e.x]]
119; LINUX-32-STATIC-NEXT: movl [[EAX]], xdst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000120; LINUX-32-STATIC-NEXT: ret
121
122; LINUX-32-PIC: fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000123; LINUX-32-PIC: movl xsrc, [[EAX:%e.x]]
124; LINUX-32-PIC-NEXT: movl [[EAX]], xdst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000125; LINUX-32-PIC-NEXT: ret
126
127; LINUX-64-PIC: fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000128; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
129; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
130; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), [[RCX:%r.x]]
131; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000132; LINUX-64-PIC-NEXT: ret
133
134; DARWIN-32-STATIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000135; DARWIN-32-STATIC: movl _xsrc, [[EAX:%e.x]]
136; DARWIN-32-STATIC-NEXT: movl [[EAX]], _xdst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000137; DARWIN-32-STATIC-NEXT: ret
138
139; DARWIN-32-DYNAMIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000140; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
141; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
142; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]]
143; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000144; DARWIN-32-DYNAMIC-NEXT: ret
145
146; DARWIN-32-PIC: _fxo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000147; DARWIN-32-PIC: calll L1$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000148; DARWIN-32-PIC-NEXT: L1$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000149; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
150; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L1$pb([[EAX]]), [[ECX:%e.x]]
151; DARWIN-32-PIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]]
152; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L1$pb([[EAX]]), [[EAX:%e.x]]
153; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000154; DARWIN-32-PIC-NEXT: ret
155
156; DARWIN-64-STATIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000157; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
158; DARWIN-64-STATIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
159; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
160; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000161; DARWIN-64-STATIC-NEXT: ret
162
163; DARWIN-64-DYNAMIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000164; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
165; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
166; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
167; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000168; DARWIN-64-DYNAMIC-NEXT: ret
169
170; DARWIN-64-PIC: _fxo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000171; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
172; DARWIN-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
173; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
174; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000175; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000176}
177
178define void @foo01() nounwind {
179entry:
180 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
181 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000182; LINUX-64-STATIC: foo01:
183; LINUX-64-STATIC: movq $dst, ptr
184; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000185
186; LINUX-32-STATIC: foo01:
187; LINUX-32-STATIC: movl $dst, ptr
188; LINUX-32-STATIC-NEXT: ret
189
190; LINUX-32-PIC: foo01:
191; LINUX-32-PIC: movl $dst, ptr
192; LINUX-32-PIC-NEXT: ret
193
194; LINUX-64-PIC: foo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000195; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]]
196; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
197; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000198; LINUX-64-PIC-NEXT: ret
199
200; DARWIN-32-STATIC: _foo01:
201; DARWIN-32-STATIC: movl $_dst, _ptr
202; DARWIN-32-STATIC-NEXT: ret
203
204; DARWIN-32-DYNAMIC: _foo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000205; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, [[EAX:%e.x]]
206; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
207; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000208; DARWIN-32-DYNAMIC-NEXT: ret
209
210; DARWIN-32-PIC: _foo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000211; DARWIN-32-PIC: calll L2$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000212; DARWIN-32-PIC-NEXT: L2$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000213; DARWIN-32-PIC-NEXT: popl
214; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L2$pb(
215; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L2$pb(
216; DARWIN-32-PIC-NEXT: movl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000217; DARWIN-32-PIC-NEXT: ret
218
219; DARWIN-64-STATIC: _foo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000220; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
221; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
222; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000223; DARWIN-64-STATIC-NEXT: ret
224
225; DARWIN-64-DYNAMIC: _foo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000226; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
227; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
228; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000229; DARWIN-64-DYNAMIC-NEXT: ret
230
231; DARWIN-64-PIC: _foo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000232; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
233; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
234; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000235; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000236}
237
238define void @fxo01() nounwind {
239entry:
240 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
241 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000242; LINUX-64-STATIC: fxo01:
243; LINUX-64-STATIC: movq $xdst, ptr
244; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000245
246; LINUX-32-STATIC: fxo01:
247; LINUX-32-STATIC: movl $xdst, ptr
248; LINUX-32-STATIC-NEXT: ret
249
250; LINUX-32-PIC: fxo01:
251; LINUX-32-PIC: movl $xdst, ptr
252; LINUX-32-PIC-NEXT: ret
253
254; LINUX-64-PIC: fxo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000255; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]]
256; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
257; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000258; LINUX-64-PIC-NEXT: ret
259
260; DARWIN-32-STATIC: _fxo01:
261; DARWIN-32-STATIC: movl $_xdst, _ptr
262; DARWIN-32-STATIC-NEXT: ret
263
264; DARWIN-32-DYNAMIC: _fxo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000265; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, [[EAX:%e.x]]
266; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
267; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000268; DARWIN-32-DYNAMIC-NEXT: ret
269
270; DARWIN-32-PIC: _fxo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000271; DARWIN-32-PIC: calll L3$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000272; DARWIN-32-PIC-NEXT: L3$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000273; DARWIN-32-PIC-NEXT: popl [[R0:%e..]]
274; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L3$pb([[R0]]), [[R1:%e..]]
275; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L3$pb([[R0]]), [[R2:%e..]]
276; DARWIN-32-PIC-NEXT: movl [[R1:%e..]], ([[R2]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000277; DARWIN-32-PIC-NEXT: ret
278
279; DARWIN-64-STATIC: _fxo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000280; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
281; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
282; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000283; DARWIN-64-STATIC-NEXT: ret
284
285; DARWIN-64-DYNAMIC: _fxo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000286; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
287; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
288; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000289; DARWIN-64-DYNAMIC-NEXT: ret
290
291; DARWIN-64-PIC: _fxo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000292; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
293; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
294; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000295; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000296}
297
298define void @foo02() nounwind {
299entry:
300 %0 = load i32** @ptr, align 8
301 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
302 store i32 %1, i32* %0, align 4
303 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000304; LINUX-64-STATIC: foo02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000305; LINUX-64-STATIC: movl src(%rip), %
306; LINUX-64-STATIC: movq ptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000307; LINUX-64-STATIC: movl
308; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000309
310; LINUX-32-STATIC: foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000311; LINUX-32-STATIC: movl src, [[EAX:%e.x]]
312; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]]
313; LINUX-32-STATIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000314; LINUX-32-STATIC-NEXT: ret
315
316; LINUX-32-PIC: foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000317; LINUX-32-PIC: movl src, [[EAX:%e.x]]
318; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]]
319; LINUX-32-PIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000320; LINUX-32-PIC-NEXT: ret
321
322; LINUX-64-PIC: foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000323; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
324; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
325; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
326; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
327; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000328; LINUX-64-PIC-NEXT: ret
329
330; DARWIN-32-STATIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000331; DARWIN-32-STATIC: movl _src, [[EAX:%e.x]]
332; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]]
333; DARWIN-32-STATIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000334; DARWIN-32-STATIC-NEXT: ret
335
336; DARWIN-32-DYNAMIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000337; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]]
338; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
339; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
340; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]]
341; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000342; DARWIN-32-DYNAMIC-NEXT: ret
343
344; DARWIN-32-PIC: _foo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000345; DARWIN-32-PIC: calll L4$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000346; DARWIN-32-PIC-NEXT: L4$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000347; DARWIN-32-PIC-NEXT: popl [[R0:%e..]]
348; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L4$pb([[R0]]), [[R1:%e..]]
349; DARWIN-32-PIC-NEXT: movl ([[R1]]), [[R2:%e..]]
350; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L4$pb([[R0]]), [[R3:%e..]]
351; DARWIN-32-PIC-NEXT: movl ([[R3]]), [[R4:%e..]]
352; DARWIN-32-PIC-NEXT: movl [[R2]], ([[R4]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000353; DARWIN-32-PIC-NEXT: ret
354
355; DARWIN-64-STATIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000356; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
357; DARWIN-64-STATIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
358; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
359; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
360; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000361; DARWIN-64-STATIC-NEXT: ret
362
363; DARWIN-64-DYNAMIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000364; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
365; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
366; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
367; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
368; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000369; DARWIN-64-DYNAMIC-NEXT: ret
370
371; DARWIN-64-PIC: _foo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000372; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
373; DARWIN-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
374; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
375; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
376; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000377; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000378}
379
380define void @fxo02() nounwind {
381entry:
382 %0 = load i32** @ptr, align 8
383 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
384 store i32 %1, i32* %0, align 4
Chris Lattner4f066492009-07-11 20:29:19 +0000385; LINUX-64-STATIC: fxo02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000386; LINUX-64-STATIC: movl xsrc(%rip), %
387; LINUX-64-STATIC: movq ptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000388; LINUX-64-STATIC: movl
389; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000390
391; LINUX-32-STATIC: fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000392; LINUX-32-STATIC: movl xsrc, [[EAX:%e.x]]
393; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]]
394; LINUX-32-STATIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000395; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000396 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000397
398; LINUX-32-PIC: fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000399; LINUX-32-PIC: movl xsrc, [[EAX:%e.x]]
400; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]]
401; LINUX-32-PIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000402; LINUX-32-PIC-NEXT: ret
403
404; LINUX-64-PIC: fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000405; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
406; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
407; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
408; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
409; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000410; LINUX-64-PIC-NEXT: ret
411
412; DARWIN-32-STATIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000413; DARWIN-32-STATIC: movl _xsrc, [[EAX:%e.x]]
414; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]]
415; DARWIN-32-STATIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000416; DARWIN-32-STATIC-NEXT: ret
417
418; DARWIN-32-DYNAMIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000419; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
420; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
421; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
422; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]]
423; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000424; DARWIN-32-DYNAMIC-NEXT: ret
425
426; DARWIN-32-PIC: _fxo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000427; DARWIN-32-PIC: calll L5$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000428; DARWIN-32-PIC-NEXT: L5$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000429; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
430; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L5$pb([[EAX]]), [[ECX:%e.x]]
431; DARWIN-32-PIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]]
432; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L5$pb([[EAX]]), [[EAX:%e.x]]
433; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
434; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000435; DARWIN-32-PIC-NEXT: ret
436
437; DARWIN-64-STATIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000438; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
439; DARWIN-64-STATIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
440; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
441; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
442; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000443; DARWIN-64-STATIC-NEXT: ret
444
445; DARWIN-64-DYNAMIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000446; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
447; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
448; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
449; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
450; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000451; DARWIN-64-DYNAMIC-NEXT: ret
452
453; DARWIN-64-PIC: _fxo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000454; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
455; DARWIN-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
456; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
457; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
458; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000459; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000460}
461
462define void @foo03() nounwind {
463entry:
464 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
465 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32
466 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000467; LINUX-64-STATIC: foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000468; LINUX-64-STATIC: movl dsrc(%rip), [[EAX:%e.x]]
469; LINUX-64-STATIC: movl [[EAX]], ddst
Chris Lattner4f066492009-07-11 20:29:19 +0000470; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000471
472; LINUX-32-STATIC: foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000473; LINUX-32-STATIC: movl dsrc, [[EAX:%e.x]]
474; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000475; LINUX-32-STATIC-NEXT: ret
476
477; LINUX-32-PIC: foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000478; LINUX-32-PIC: movl dsrc, [[EAX:%e.x]]
479; LINUX-32-PIC-NEXT: movl [[EAX]], ddst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000480; LINUX-32-PIC-NEXT: ret
481
482; LINUX-64-PIC: foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000483; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
484; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
485; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]]
486; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000487; LINUX-64-PIC-NEXT: ret
488
489; DARWIN-32-STATIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000490; DARWIN-32-STATIC: movl _dsrc, [[EAX:%e.x]]
491; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000492; DARWIN-32-STATIC-NEXT: ret
493
494; DARWIN-32-DYNAMIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000495; DARWIN-32-DYNAMIC: movl _dsrc, [[EAX:%e.x]]
496; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000497; DARWIN-32-DYNAMIC-NEXT: ret
498
499; DARWIN-32-PIC: _foo03:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000500; DARWIN-32-PIC: calll L6$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000501; DARWIN-32-PIC-NEXT: L6$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000502; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
503; DARWIN-32-PIC-NEXT: movl _dsrc-L6$pb([[EAX]]), [[ECX:%e.x]]
504; DARWIN-32-PIC-NEXT: movl [[ECX]], _ddst-L6$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000505; DARWIN-32-PIC-NEXT: ret
506
507; DARWIN-64-STATIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000508; DARWIN-64-STATIC: movl _dsrc(%rip), [[EAX:%e.x]]
509; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000510; DARWIN-64-STATIC-NEXT: ret
511
512; DARWIN-64-DYNAMIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000513; DARWIN-64-DYNAMIC: movl _dsrc(%rip), [[EAX:%e.x]]
514; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000515; DARWIN-64-DYNAMIC-NEXT: ret
516
517; DARWIN-64-PIC: _foo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000518; DARWIN-64-PIC: movl _dsrc(%rip), [[EAX:%e.x]]
519; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000520; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000521}
522
523define void @foo04() nounwind {
524entry:
525 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
526 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000527; LINUX-64-STATIC: foo04:
528; LINUX-64-STATIC: movq $ddst, dptr
529; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000530
531; LINUX-32-STATIC: foo04:
532; LINUX-32-STATIC: movl $ddst, dptr
533; LINUX-32-STATIC-NEXT: ret
534
535; LINUX-32-PIC: foo04:
536; LINUX-32-PIC: movl $ddst, dptr
537; LINUX-32-PIC-NEXT: ret
538
539; LINUX-64-PIC: foo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000540; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
541; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
542; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000543; LINUX-64-PIC-NEXT: ret
544
545; DARWIN-32-STATIC: _foo04:
546; DARWIN-32-STATIC: movl $_ddst, _dptr
547; DARWIN-32-STATIC-NEXT: ret
548
549; DARWIN-32-DYNAMIC: _foo04:
550; DARWIN-32-DYNAMIC: movl $_ddst, _dptr
551; DARWIN-32-DYNAMIC-NEXT: ret
552
553; DARWIN-32-PIC: _foo04:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000554; DARWIN-32-PIC: calll L7$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000555; DARWIN-32-PIC-NEXT: L7$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000556; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
557; DARWIN-32-PIC-NEXT: leal _ddst-L7$pb([[EAX]]), [[ECX:%e.x]]
558; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L7$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000559; DARWIN-32-PIC-NEXT: ret
560
561; DARWIN-64-STATIC: _foo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000562; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
563; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000564; DARWIN-64-STATIC-NEXT: ret
565
566; DARWIN-64-DYNAMIC: _foo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000567; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
568; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000569; DARWIN-64-DYNAMIC-NEXT: ret
570
571; DARWIN-64-PIC: _foo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000572; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
573; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000574; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000575}
576
577define void @foo05() nounwind {
578entry:
579 %0 = load i32** @dptr, align 8
580 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
581 store i32 %1, i32* %0, align 4
582 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000583; LINUX-64-STATIC: foo05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000584; LINUX-64-STATIC: movl dsrc(%rip), %
585; LINUX-64-STATIC: movq dptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000586; LINUX-64-STATIC: movl
587; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000588
589; LINUX-32-STATIC: foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000590; LINUX-32-STATIC: movl dsrc, [[EAX:%e.x]]
591; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]]
592; LINUX-32-STATIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000593; LINUX-32-STATIC-NEXT: ret
594
595; LINUX-32-PIC: foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000596; LINUX-32-PIC: movl dsrc, [[EAX:%e.x]]
597; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]]
598; LINUX-32-PIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000599; LINUX-32-PIC-NEXT: ret
600
601; LINUX-64-PIC: foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000602; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
603; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]]
604; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
605; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
606; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000607; LINUX-64-PIC-NEXT: ret
608
609; DARWIN-32-STATIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000610; DARWIN-32-STATIC: movl _dsrc, [[EAX:%e.x]]
611; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]]
612; DARWIN-32-STATIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000613; DARWIN-32-STATIC-NEXT: ret
614
615; DARWIN-32-DYNAMIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000616; DARWIN-32-DYNAMIC: movl _dsrc, [[EAX:%e.x]]
617; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]]
618; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000619; DARWIN-32-DYNAMIC-NEXT: ret
620
621; DARWIN-32-PIC: _foo05:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000622; DARWIN-32-PIC: calll L8$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000623; DARWIN-32-PIC-NEXT: L8$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000624; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
625; DARWIN-32-PIC-NEXT: movl _dsrc-L8$pb([[EAX]]), [[ECX:%e.x]]
626; DARWIN-32-PIC-NEXT: movl _dptr-L8$pb([[EAX]]), [[EAX:%e.x]]
627; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000628; DARWIN-32-PIC-NEXT: ret
629
630; DARWIN-64-STATIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000631; DARWIN-64-STATIC: movl _dsrc(%rip), [[EAX:%e.x]]
632; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
633; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000634; DARWIN-64-STATIC-NEXT: ret
635
636; DARWIN-64-DYNAMIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000637; DARWIN-64-DYNAMIC: movl _dsrc(%rip), [[EAX:%e.x]]
638; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
639; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000640; DARWIN-64-DYNAMIC-NEXT: ret
641
642; DARWIN-64-PIC: _foo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000643; DARWIN-64-PIC: movl _dsrc(%rip), [[EAX:%e.x]]
644; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
645; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000646; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000647}
648
649define void @foo06() nounwind {
650entry:
651 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
652 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4
653 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000654; LINUX-64-STATIC: foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000655; LINUX-64-STATIC: movl lsrc(%rip), [[EAX:%e.x]]
656; LINUX-64-STATIC: movl [[EAX]], ldst(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000657; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000658
659; LINUX-32-STATIC: foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000660; LINUX-32-STATIC: movl lsrc, [[EAX:%e.x]]
661; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000662; LINUX-32-STATIC-NEXT: ret
663
664; LINUX-32-PIC: foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000665; LINUX-32-PIC: movl lsrc, [[EAX:%e.x]]
666; LINUX-32-PIC-NEXT: movl [[EAX]], ldst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000667; LINUX-32-PIC-NEXT: ret
668
669; LINUX-64-PIC: foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000670; LINUX-64-PIC: movl lsrc(%rip), [[EAX:%e.x]]
671; LINUX-64-PIC-NEXT: movl [[EAX]], ldst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000672; LINUX-64-PIC-NEXT: ret
673
674; DARWIN-32-STATIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000675; DARWIN-32-STATIC: movl _lsrc, [[EAX:%e.x]]
676; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000677; DARWIN-32-STATIC-NEXT: ret
678
679; DARWIN-32-DYNAMIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000680; DARWIN-32-DYNAMIC: movl _lsrc, [[EAX:%e.x]]
681; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000682; DARWIN-32-DYNAMIC-NEXT: ret
683
684; DARWIN-32-PIC: _foo06:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000685; DARWIN-32-PIC: calll L9$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000686; DARWIN-32-PIC-NEXT: L9$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000687; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
688; DARWIN-32-PIC-NEXT: movl _lsrc-L9$pb([[EAX]]), [[ECX:%e.x]]
689; DARWIN-32-PIC-NEXT: movl [[ECX]], _ldst-L9$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000690; DARWIN-32-PIC-NEXT: ret
691
692; DARWIN-64-STATIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000693; DARWIN-64-STATIC: movl _lsrc(%rip), [[EAX:%e.x]]
694; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000695; DARWIN-64-STATIC-NEXT: ret
696
697; DARWIN-64-DYNAMIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000698; DARWIN-64-DYNAMIC: movl _lsrc(%rip), [[EAX:%e.x]]
699; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000700; DARWIN-64-DYNAMIC-NEXT: ret
701
702; DARWIN-64-PIC: _foo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000703; DARWIN-64-PIC: movl _lsrc(%rip), [[EAX:%e.x]]
704; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000705; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000706}
707
708define void @foo07() nounwind {
709entry:
710 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
711 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000712; LINUX-64-STATIC: foo07:
713; LINUX-64-STATIC: movq $ldst, lptr
714; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000715
716; LINUX-32-STATIC: foo07:
717; LINUX-32-STATIC: movl $ldst, lptr
718; LINUX-32-STATIC-NEXT: ret
719
720; LINUX-32-PIC: foo07:
721; LINUX-32-PIC: movl $ldst, lptr
722; LINUX-32-PIC-NEXT: ret
723
724; LINUX-64-PIC: foo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000725; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
726; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000727; LINUX-64-PIC-NEXT: ret
728
729; DARWIN-32-STATIC: _foo07:
730; DARWIN-32-STATIC: movl $_ldst, _lptr
731; DARWIN-32-STATIC-NEXT: ret
732
733; DARWIN-32-DYNAMIC: _foo07:
734; DARWIN-32-DYNAMIC: movl $_ldst, _lptr
735; DARWIN-32-DYNAMIC-NEXT: ret
736
737; DARWIN-32-PIC: _foo07:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000738; DARWIN-32-PIC: calll L10$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000739; DARWIN-32-PIC-NEXT: L10$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000740; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
741; DARWIN-32-PIC-NEXT: leal _ldst-L10$pb([[EAX]]), [[ECX:%e.x]]
742; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L10$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000743; DARWIN-32-PIC-NEXT: ret
744
745; DARWIN-64-STATIC: _foo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000746; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
747; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000748; DARWIN-64-STATIC-NEXT: ret
749
750; DARWIN-64-DYNAMIC: _foo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000751; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
752; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000753; DARWIN-64-DYNAMIC-NEXT: ret
754
755; DARWIN-64-PIC: _foo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000756; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
757; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000758; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000759}
760
761define void @foo08() nounwind {
762entry:
763 %0 = load i32** @lptr, align 8
764 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
765 store i32 %1, i32* %0, align 4
766 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000767; LINUX-64-STATIC: foo08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +0000768; LINUX-64-STATIC: movl lsrc(%rip), %
769; LINUX-64-STATIC: movq lptr(%rip), %
Chris Lattner4f066492009-07-11 20:29:19 +0000770; LINUX-64-STATIC: movl
771; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000772
773; LINUX-32-STATIC: foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000774; LINUX-32-STATIC: movl lsrc, [[EAX:%e.x]]
775; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]]
776; LINUX-32-STATIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000777; LINUX-32-STATIC-NEXT: ret
778
779; LINUX-32-PIC: foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000780; LINUX-32-PIC: movl lsrc, [[EAX:%e.x]]
781; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]]
782; LINUX-32-PIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000783; LINUX-32-PIC-NEXT: ret
784
785; LINUX-64-PIC: foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000786; LINUX-64-PIC: movl lsrc(%rip), [[EAX:%e.x]]
787; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]]
788; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000789; LINUX-64-PIC-NEXT: ret
790
791; DARWIN-32-STATIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000792; DARWIN-32-STATIC: movl _lsrc, [[EAX:%e.x]]
793; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]]
794; DARWIN-32-STATIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000795; DARWIN-32-STATIC-NEXT: ret
796
797; DARWIN-32-DYNAMIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000798; DARWIN-32-DYNAMIC: movl _lsrc, [[EAX:%e.x]]
799; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]]
800; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000801; DARWIN-32-DYNAMIC-NEXT: ret
802
803; DARWIN-32-PIC: _foo08:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000804; DARWIN-32-PIC: calll L11$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000805; DARWIN-32-PIC-NEXT: L11$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000806; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
807; DARWIN-32-PIC-NEXT: movl _lsrc-L11$pb([[EAX]]), [[ECX:%e.x]]
808; DARWIN-32-PIC-NEXT: movl _lptr-L11$pb([[EAX]]), [[EAX:%e.x]]
809; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000810; DARWIN-32-PIC-NEXT: ret
811
812; DARWIN-64-STATIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000813; DARWIN-64-STATIC: movl _lsrc(%rip), [[EAX:%e.x]]
814; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
815; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000816; DARWIN-64-STATIC-NEXT: ret
817
818; DARWIN-64-DYNAMIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000819; DARWIN-64-DYNAMIC: movl _lsrc(%rip), [[EAX:%e.x]]
820; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
821; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000822; DARWIN-64-DYNAMIC-NEXT: ret
823
824; DARWIN-64-PIC: _foo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000825; DARWIN-64-PIC: movl _lsrc(%rip), [[EAX:%e.x]]
826; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
827; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000828; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000829}
830
831define void @qux00() nounwind {
832entry:
833 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
834 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4
835 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000836; LINUX-64-STATIC: qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000837; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]]
838; LINUX-64-STATIC: movl [[EAX]], dst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000839; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000840
841; LINUX-32-STATIC: qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000842; LINUX-32-STATIC: movl src+64, [[EAX:%e.x]]
843; LINUX-32-STATIC-NEXT: movl [[EAX]], dst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000844; LINUX-32-STATIC-NEXT: ret
845
846; LINUX-32-PIC: qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000847; LINUX-32-PIC: movl src+64, [[EAX:%e.x]]
848; LINUX-32-PIC-NEXT: movl [[EAX]], dst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000849; LINUX-32-PIC-NEXT: ret
850
851; LINUX-64-PIC: qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000852; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
853; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
854; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]]
855; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000856; LINUX-64-PIC-NEXT: ret
857
858; DARWIN-32-STATIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000859; DARWIN-32-STATIC: movl _src+64, [[EAX:%e.x]]
860; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000861; DARWIN-32-STATIC-NEXT: ret
862
863; DARWIN-32-DYNAMIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000864; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]]
865; DARWIN-32-DYNAMIC-NEXT: movl 64([[EAX]]), [[EAX:%e.x]]
866; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]]
867; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000868; DARWIN-32-DYNAMIC-NEXT: ret
869
870; DARWIN-32-PIC: _qux00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000871; DARWIN-32-PIC: calll L12$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000872; DARWIN-32-PIC-NEXT: L12$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000873; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
874; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L12$pb([[EAX]]), [[ECX:%e.x]]
875; DARWIN-32-PIC-NEXT: movl 64([[ECX]]), [[ECX:%e.x]]
876; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L12$pb([[EAX]]), [[EAX:%e.x]]
877; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000878; DARWIN-32-PIC-NEXT: ret
879
880; DARWIN-64-STATIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000881; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
882; DARWIN-64-STATIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
883; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
884; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000885; DARWIN-64-STATIC-NEXT: ret
886
887; DARWIN-64-DYNAMIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000888; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
889; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
890; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
891; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000892; DARWIN-64-DYNAMIC-NEXT: ret
893
894; DARWIN-64-PIC: _qux00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000895; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
896; DARWIN-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
897; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
898; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000899; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000900}
901
902define void @qxx00() nounwind {
903entry:
904 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
905 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4
906 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000907; LINUX-64-STATIC: qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000908; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]]
909; LINUX-64-STATIC: movl [[EAX]], xdst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +0000910; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000911
912; LINUX-32-STATIC: qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000913; LINUX-32-STATIC: movl xsrc+64, [[EAX:%e.x]]
914; LINUX-32-STATIC-NEXT: movl [[EAX]], xdst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000915; LINUX-32-STATIC-NEXT: ret
916
917; LINUX-32-PIC: qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000918; LINUX-32-PIC: movl xsrc+64, [[EAX:%e.x]]
919; LINUX-32-PIC-NEXT: movl [[EAX]], xdst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000920; LINUX-32-PIC-NEXT: ret
921
922; LINUX-64-PIC: qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000923; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
924; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
925; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), [[RCX:%r.x]]
926; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000927; LINUX-64-PIC-NEXT: ret
928
929; DARWIN-32-STATIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000930; DARWIN-32-STATIC: movl _xsrc+64, [[EAX:%e.x]]
931; DARWIN-32-STATIC-NEXT: movl [[EAX]], _xdst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000932; DARWIN-32-STATIC-NEXT: ret
933
934; DARWIN-32-DYNAMIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000935; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
936; DARWIN-32-DYNAMIC-NEXT: movl 64([[EAX]]), [[EAX:%e.x]]
937; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]]
938; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000939; DARWIN-32-DYNAMIC-NEXT: ret
940
941; DARWIN-32-PIC: _qxx00:
Chris Lattner1eb1b682010-09-22 05:49:14 +0000942; DARWIN-32-PIC: calll L13$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +0000943; DARWIN-32-PIC-NEXT: L13$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000944; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
945; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L13$pb([[EAX]]), [[ECX:%e.x]]
946; DARWIN-32-PIC-NEXT: movl 64([[ECX]]), [[ECX:%e.x]]
947; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L13$pb([[EAX]]), [[EAX:%e.x]]
948; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000949; DARWIN-32-PIC-NEXT: ret
950
951; DARWIN-64-STATIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000952; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
953; DARWIN-64-STATIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
954; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
955; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000956; DARWIN-64-STATIC-NEXT: ret
957
958; DARWIN-64-DYNAMIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000959; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
960; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
961; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
962; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000963; DARWIN-64-DYNAMIC-NEXT: ret
964
965; DARWIN-64-PIC: _qxx00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000966; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
967; DARWIN-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
968; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
969; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000970; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +0000971}
972
973define void @qux01() nounwind {
974entry:
975 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
976 ret void
Chris Lattner4f066492009-07-11 20:29:19 +0000977; LINUX-64-STATIC: qux01:
978; LINUX-64-STATIC: movq $dst+64, ptr
979; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000980
981; LINUX-32-STATIC: qux01:
982; LINUX-32-STATIC: movl $dst+64, ptr
983; LINUX-32-STATIC-NEXT: ret
984
985; LINUX-32-PIC: qux01:
986; LINUX-32-PIC: movl $dst+64, ptr
987; LINUX-32-PIC-NEXT: ret
988
989; LINUX-64-PIC: qux01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +0000990; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]]
991; LINUX-64-PIC-NEXT: addq $64, [[RAX:%r.x]]
992; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
993; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +0000994; LINUX-64-PIC-NEXT: ret
995
996; DARWIN-32-STATIC: _qux01:
997; DARWIN-32-STATIC: movl $_dst+64, _ptr
998; DARWIN-32-STATIC-NEXT: ret
999
1000; DARWIN-32-DYNAMIC: _qux01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001001; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, [[EAX:%e.x]]
1002; DARWIN-32-DYNAMIC-NEXT: addl $64, [[EAX:%e.x]]
1003; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1004; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001005; DARWIN-32-DYNAMIC-NEXT: ret
1006
1007; DARWIN-32-PIC: _qux01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001008; DARWIN-32-PIC: calll L14$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001009; DARWIN-32-PIC-NEXT: L14$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001010; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1011; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L14$pb([[EAX]]), [[ECX:%e.x]]
1012; DARWIN-32-PIC-NEXT: addl $64, [[ECX:%e.x]]
1013; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L14$pb([[EAX]]), [[EAX:%e.x]]
1014; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001015; DARWIN-32-PIC-NEXT: ret
1016
1017; DARWIN-64-STATIC: _qux01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001018; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1019; DARWIN-64-STATIC-NEXT: addq $64, [[RAX:%r.x]]
1020; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1021; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001022; DARWIN-64-STATIC-NEXT: ret
1023
1024; DARWIN-64-DYNAMIC: _qux01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001025; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1026; DARWIN-64-DYNAMIC-NEXT: addq $64, [[RAX:%r.x]]
1027; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1028; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001029; DARWIN-64-DYNAMIC-NEXT: ret
1030
1031; DARWIN-64-PIC: _qux01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001032; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
1033; DARWIN-64-PIC-NEXT: addq $64, [[RAX:%r.x]]
1034; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1035; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001036; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001037}
1038
1039define void @qxx01() nounwind {
1040entry:
1041 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
1042 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001043; LINUX-64-STATIC: qxx01:
1044; LINUX-64-STATIC: movq $xdst+64, ptr
1045; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001046
1047; LINUX-32-STATIC: qxx01:
1048; LINUX-32-STATIC: movl $xdst+64, ptr
1049; LINUX-32-STATIC-NEXT: ret
1050
1051; LINUX-32-PIC: qxx01:
1052; LINUX-32-PIC: movl $xdst+64, ptr
1053; LINUX-32-PIC-NEXT: ret
1054
1055; LINUX-64-PIC: qxx01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001056; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1057; LINUX-64-PIC-NEXT: addq $64, [[RAX:%r.x]]
1058; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1059; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001060; LINUX-64-PIC-NEXT: ret
1061
1062; DARWIN-32-STATIC: _qxx01:
1063; DARWIN-32-STATIC: movl $_xdst+64, _ptr
1064; DARWIN-32-STATIC-NEXT: ret
1065
1066; DARWIN-32-DYNAMIC: _qxx01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001067; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, [[EAX:%e.x]]
1068; DARWIN-32-DYNAMIC-NEXT: addl $64, [[EAX:%e.x]]
1069; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1070; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001071; DARWIN-32-DYNAMIC-NEXT: ret
1072
1073; DARWIN-32-PIC: _qxx01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001074; DARWIN-32-PIC: calll L15$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001075; DARWIN-32-PIC-NEXT: L15$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001076; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1077; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L15$pb([[EAX]]), [[ECX:%e.x]]
1078; DARWIN-32-PIC-NEXT: addl $64, [[ECX:%e.x]]
1079; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L15$pb([[EAX]]), [[EAX:%e.x]]
1080; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001081; DARWIN-32-PIC-NEXT: ret
1082
1083; DARWIN-64-STATIC: _qxx01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001084; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1085; DARWIN-64-STATIC-NEXT: addq $64, [[RAX:%r.x]]
1086; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1087; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001088; DARWIN-64-STATIC-NEXT: ret
1089
1090; DARWIN-64-DYNAMIC: _qxx01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001091; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1092; DARWIN-64-DYNAMIC-NEXT: addq $64, [[RAX:%r.x]]
1093; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1094; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001095; DARWIN-64-DYNAMIC-NEXT: ret
1096
1097; DARWIN-64-PIC: _qxx01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001098; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
1099; DARWIN-64-PIC-NEXT: addq $64, [[RAX:%r.x]]
1100; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1101; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001102; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001103}
1104
1105define void @qux02() nounwind {
1106entry:
1107 %0 = load i32** @ptr, align 8
1108 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
1109 %2 = getelementptr i32* %0, i64 16
1110 store i32 %1, i32* %2, align 4
Chris Lattner4f066492009-07-11 20:29:19 +00001111; LINUX-64-STATIC: qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001112; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]]
1113; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
1114; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]])
Chris Lattner4f066492009-07-11 20:29:19 +00001115; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001116
1117; LINUX-32-STATIC: qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001118; LINUX-32-STATIC: movl src+64, [[EAX:%e.x]]
1119; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]]
1120; LINUX-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001121; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001122 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001123
1124; LINUX-32-PIC: qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001125; LINUX-32-PIC: movl src+64, [[EAX:%e.x]]
1126; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]]
1127; LINUX-32-PIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001128; LINUX-32-PIC-NEXT: ret
1129
1130; LINUX-64-PIC: qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001131; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
1132; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1133; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1134; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1135; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001136; LINUX-64-PIC-NEXT: ret
1137
1138; DARWIN-32-STATIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001139; DARWIN-32-STATIC: movl _src+64, [[EAX:%e.x]]
1140; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]]
1141; DARWIN-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001142; DARWIN-32-STATIC-NEXT: ret
1143
1144; DARWIN-32-DYNAMIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001145; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]]
1146; DARWIN-32-DYNAMIC-NEXT: movl 64([[EAX]]), [[EAX:%e.x]]
1147; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1148; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]]
1149; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001150; DARWIN-32-DYNAMIC-NEXT: ret
1151
1152; DARWIN-32-PIC: _qux02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001153; DARWIN-32-PIC: calll L16$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001154; DARWIN-32-PIC-NEXT: L16$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001155; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1156; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L16$pb([[EAX]]), [[ECX:%e.x]]
1157; DARWIN-32-PIC-NEXT: movl 64([[ECX]]), [[ECX:%e.x]]
1158; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L16$pb([[EAX]]), [[EAX:%e.x]]
1159; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
1160; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001161; DARWIN-32-PIC-NEXT: ret
1162
1163; DARWIN-64-STATIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001164; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
1165; DARWIN-64-STATIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1166; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1167; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1168; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001169; DARWIN-64-STATIC-NEXT: ret
1170
1171; DARWIN-64-DYNAMIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001172; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
1173; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1174; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1175; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1176; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001177; DARWIN-64-DYNAMIC-NEXT: ret
1178
1179; DARWIN-64-PIC: _qux02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001180; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
1181; DARWIN-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1182; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1183; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1184; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001185; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001186}
1187
1188define void @qxx02() nounwind {
1189entry:
1190 %0 = load i32** @ptr, align 8
1191 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
1192 %2 = getelementptr i32* %0, i64 16
1193 store i32 %1, i32* %2, align 4
Chris Lattner4f066492009-07-11 20:29:19 +00001194; LINUX-64-STATIC: qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001195; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]]
1196; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
1197; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]])
Chris Lattner4f066492009-07-11 20:29:19 +00001198; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001199
1200; LINUX-32-STATIC: qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001201; LINUX-32-STATIC: movl xsrc+64, [[EAX:%e.x]]
1202; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]]
1203; LINUX-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001204; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001205 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001206
1207; LINUX-32-PIC: qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001208; LINUX-32-PIC: movl xsrc+64, [[EAX:%e.x]]
1209; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]]
1210; LINUX-32-PIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001211; LINUX-32-PIC-NEXT: ret
1212
1213; LINUX-64-PIC: qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001214; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1215; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1216; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1217; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1218; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001219; LINUX-64-PIC-NEXT: ret
1220
1221; DARWIN-32-STATIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001222; DARWIN-32-STATIC: movl _xsrc+64, [[EAX:%e.x]]
1223; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]]
1224; DARWIN-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001225; DARWIN-32-STATIC-NEXT: ret
1226
1227; DARWIN-32-DYNAMIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001228; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, [[EAX:%e.x]]
1229; DARWIN-32-DYNAMIC-NEXT: movl 64([[EAX]]), [[EAX:%e.x]]
1230; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1231; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]]
1232; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001233; DARWIN-32-DYNAMIC-NEXT: ret
1234
1235; DARWIN-32-PIC: _qxx02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001236; DARWIN-32-PIC: calll L17$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001237; DARWIN-32-PIC-NEXT: L17$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001238; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1239; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L17$pb([[EAX]]), [[ECX:%e.x]]
1240; DARWIN-32-PIC-NEXT: movl 64([[ECX]]), [[ECX:%e.x]]
1241; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L17$pb([[EAX]]), [[EAX:%e.x]]
1242; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
1243; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001244; DARWIN-32-PIC-NEXT: ret
1245
1246; DARWIN-64-STATIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001247; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1248; DARWIN-64-STATIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1249; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1250; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1251; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001252; DARWIN-64-STATIC-NEXT: ret
1253
1254; DARWIN-64-DYNAMIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001255; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1256; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1257; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1258; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1259; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001260; DARWIN-64-DYNAMIC-NEXT: ret
1261
1262; DARWIN-64-PIC: _qxx02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001263; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1264; DARWIN-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1265; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1266; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1267; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001268; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001269}
1270
1271define void @qux03() nounwind {
1272entry:
1273 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1274 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32
1275 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001276; LINUX-64-STATIC: qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001277; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]]
1278; LINUX-64-STATIC: movl [[EAX]], ddst+64(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00001279; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001280
1281; LINUX-32-STATIC: qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001282; LINUX-32-STATIC: movl dsrc+64, [[EAX:%e.x]]
1283; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001284; LINUX-32-STATIC-NEXT: ret
1285
1286; LINUX-32-PIC: qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001287; LINUX-32-PIC: movl dsrc+64, [[EAX:%e.x]]
1288; LINUX-32-PIC-NEXT: movl [[EAX]], ddst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001289; LINUX-32-PIC-NEXT: ret
1290
1291; LINUX-64-PIC: qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001292; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1293; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1294; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]]
1295; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001296; LINUX-64-PIC-NEXT: ret
1297
1298; DARWIN-32-STATIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001299; DARWIN-32-STATIC: movl _dsrc+64, [[EAX:%e.x]]
1300; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001301; DARWIN-32-STATIC-NEXT: ret
1302
1303; DARWIN-32-DYNAMIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001304; DARWIN-32-DYNAMIC: movl _dsrc+64, [[EAX:%e.x]]
1305; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001306; DARWIN-32-DYNAMIC-NEXT: ret
1307
1308; DARWIN-32-PIC: _qux03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001309; DARWIN-32-PIC: calll L18$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001310; DARWIN-32-PIC-NEXT: L18$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001311; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1312; DARWIN-32-PIC-NEXT: movl (_dsrc-L18$pb)+64([[EAX]]), [[ECX:%e.x]]
1313; DARWIN-32-PIC-NEXT: movl [[ECX]], (_ddst-L18$pb)+64([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001314; DARWIN-32-PIC-NEXT: ret
1315
1316; DARWIN-64-STATIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001317; DARWIN-64-STATIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1318; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001319; DARWIN-64-STATIC-NEXT: ret
1320
1321; DARWIN-64-DYNAMIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001322; DARWIN-64-DYNAMIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1323; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001324; DARWIN-64-DYNAMIC-NEXT: ret
1325
1326; DARWIN-64-PIC: _qux03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001327; DARWIN-64-PIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1328; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001329; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001330}
1331
1332define void @qux04() nounwind {
1333entry:
1334 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
1335 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001336; LINUX-64-STATIC: qux04:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00001337; LINUX-64-STATIC: movq $ddst+64, dptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00001338; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001339
1340; LINUX-32-STATIC: qux04:
1341; LINUX-32-STATIC: movl $ddst+64, dptr
1342; LINUX-32-STATIC-NEXT: ret
1343
1344; LINUX-32-PIC: qux04:
1345; LINUX-32-PIC: movl $ddst+64, dptr
1346; LINUX-32-PIC-NEXT: ret
1347
1348; LINUX-64-PIC: qux04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001349; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
1350; LINUX-64-PIC-NEXT: addq $64, [[RAX:%r.x]]
1351; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
1352; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001353; LINUX-64-PIC-NEXT: ret
1354
1355; DARWIN-32-STATIC: _qux04:
1356; DARWIN-32-STATIC: movl $_ddst+64, _dptr
1357; DARWIN-32-STATIC-NEXT: ret
1358
1359; DARWIN-32-DYNAMIC: _qux04:
1360; DARWIN-32-DYNAMIC: movl $_ddst+64, _dptr
1361; DARWIN-32-DYNAMIC-NEXT: ret
1362
1363; DARWIN-32-PIC: _qux04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001364; DARWIN-32-PIC: calll L19$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001365; DARWIN-32-PIC-NEXT: L19$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001366; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1367; DARWIN-32-PIC-NEXT: leal (_ddst-L19$pb)+64([[EAX]]), [[ECX:%e.x]]
1368; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L19$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001369; DARWIN-32-PIC-NEXT: ret
1370
1371; DARWIN-64-STATIC: _qux04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001372; DARWIN-64-STATIC: leaq _ddst+64(%rip), [[RAX:%r.x]]
1373; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001374; DARWIN-64-STATIC-NEXT: ret
1375
1376; DARWIN-64-DYNAMIC: _qux04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001377; DARWIN-64-DYNAMIC: leaq _ddst+64(%rip), [[RAX:%r.x]]
1378; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001379; DARWIN-64-DYNAMIC-NEXT: ret
1380
1381; DARWIN-64-PIC: _qux04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001382; DARWIN-64-PIC: leaq _ddst+64(%rip), [[RAX:%r.x]]
1383; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001384; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001385}
1386
1387define void @qux05() nounwind {
1388entry:
1389 %0 = load i32** @dptr, align 8
1390 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
1391 %2 = getelementptr i32* %0, i64 16
1392 store i32 %1, i32* %2, align 4
Chris Lattner4f066492009-07-11 20:29:19 +00001393; LINUX-64-STATIC: qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001394; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]]
1395; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
1396; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]])
Chris Lattner4f066492009-07-11 20:29:19 +00001397; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001398
1399; LINUX-32-STATIC: qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001400; LINUX-32-STATIC: movl dsrc+64, [[EAX:%e.x]]
1401; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]]
1402; LINUX-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001403; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001404 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001405
1406; LINUX-32-PIC: qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001407; LINUX-32-PIC: movl dsrc+64, [[EAX:%e.x]]
1408; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]]
1409; LINUX-32-PIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001410; LINUX-32-PIC-NEXT: ret
1411
1412; LINUX-64-PIC: qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001413; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1414; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]]
1415; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
1416; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1417; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001418; LINUX-64-PIC-NEXT: ret
1419
1420; DARWIN-32-STATIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001421; DARWIN-32-STATIC: movl _dsrc+64, [[EAX:%e.x]]
1422; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]]
1423; DARWIN-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001424; DARWIN-32-STATIC-NEXT: ret
1425
1426; DARWIN-32-DYNAMIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001427; DARWIN-32-DYNAMIC: movl _dsrc+64, [[EAX:%e.x]]
1428; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]]
1429; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001430; DARWIN-32-DYNAMIC-NEXT: ret
1431
1432; DARWIN-32-PIC: _qux05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001433; DARWIN-32-PIC: calll L20$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001434; DARWIN-32-PIC-NEXT: L20$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001435; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1436; DARWIN-32-PIC-NEXT: movl (_dsrc-L20$pb)+64([[EAX]]), [[ECX:%e.x]]
1437; DARWIN-32-PIC-NEXT: movl _dptr-L20$pb([[EAX]]), [[EAX:%e.x]]
1438; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001439; DARWIN-32-PIC-NEXT: ret
1440
1441; DARWIN-64-STATIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001442; DARWIN-64-STATIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1443; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
1444; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001445; DARWIN-64-STATIC-NEXT: ret
1446
1447; DARWIN-64-DYNAMIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001448; DARWIN-64-DYNAMIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1449; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
1450; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001451; DARWIN-64-DYNAMIC-NEXT: ret
1452
1453; DARWIN-64-PIC: _qux05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001454; DARWIN-64-PIC: movl _dsrc+64(%rip), [[EAX:%e.x]]
1455; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
1456; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001457; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001458}
1459
1460define void @qux06() nounwind {
1461entry:
1462 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1463 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4
1464 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001465; LINUX-64-STATIC: qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001466; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]]
1467; LINUX-64-STATIC: movl [[EAX]], ldst+64
Chris Lattner4f066492009-07-11 20:29:19 +00001468; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001469
1470; LINUX-32-STATIC: qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001471; LINUX-32-STATIC: movl lsrc+64, [[EAX:%e.x]]
1472; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001473; LINUX-32-STATIC-NEXT: ret
1474
1475; LINUX-32-PIC: qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001476; LINUX-32-PIC: movl lsrc+64, [[EAX:%e.x]]
1477; LINUX-32-PIC-NEXT: movl [[EAX]], ldst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001478; LINUX-32-PIC-NEXT: ret
1479
1480; LINUX-64-PIC: qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001481; LINUX-64-PIC: movl lsrc+64(%rip), [[EAX:%e.x]]
1482; LINUX-64-PIC-NEXT: movl [[EAX]], ldst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001483; LINUX-64-PIC-NEXT: ret
1484
1485; DARWIN-32-STATIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001486; DARWIN-32-STATIC: movl _lsrc+64, [[EAX:%e.x]]
1487; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001488; DARWIN-32-STATIC-NEXT: ret
1489
1490; DARWIN-32-DYNAMIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001491; DARWIN-32-DYNAMIC: movl _lsrc+64, [[EAX:%e.x]]
1492; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst+64
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001493; DARWIN-32-DYNAMIC-NEXT: ret
1494
1495; DARWIN-32-PIC: _qux06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001496; DARWIN-32-PIC: calll L21$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001497; DARWIN-32-PIC-NEXT: L21$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001498; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1499; DARWIN-32-PIC-NEXT: movl (_lsrc-L21$pb)+64([[EAX]]), [[ECX:%e.x]]
1500; DARWIN-32-PIC-NEXT: movl [[ECX]], (_ldst-L21$pb)+64([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001501; DARWIN-32-PIC-NEXT: ret
1502
1503; DARWIN-64-STATIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001504; DARWIN-64-STATIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1505; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001506; DARWIN-64-STATIC-NEXT: ret
1507
1508; DARWIN-64-DYNAMIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001509; DARWIN-64-DYNAMIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1510; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001511; DARWIN-64-DYNAMIC-NEXT: ret
1512
1513; DARWIN-64-PIC: _qux06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001514; DARWIN-64-PIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1515; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst+64(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001516; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001517}
1518
1519define void @qux07() nounwind {
1520entry:
1521 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
1522 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001523; LINUX-64-STATIC: qux07:
1524; LINUX-64-STATIC: movq $ldst+64, lptr
1525; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001526
1527; LINUX-32-STATIC: qux07:
1528; LINUX-32-STATIC: movl $ldst+64, lptr
1529; LINUX-32-STATIC-NEXT: ret
1530
1531; LINUX-32-PIC: qux07:
1532; LINUX-32-PIC: movl $ldst+64, lptr
1533; LINUX-32-PIC-NEXT: ret
1534
1535; LINUX-64-PIC: qux07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001536; LINUX-64-PIC: leaq ldst+64(%rip), [[RAX:%r.x]]
1537; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001538; LINUX-64-PIC-NEXT: ret
1539
1540; DARWIN-32-STATIC: _qux07:
1541; DARWIN-32-STATIC: movl $_ldst+64, _lptr
1542; DARWIN-32-STATIC-NEXT: ret
1543
1544; DARWIN-32-DYNAMIC: _qux07:
1545; DARWIN-32-DYNAMIC: movl $_ldst+64, _lptr
1546; DARWIN-32-DYNAMIC-NEXT: ret
1547
1548; DARWIN-32-PIC: _qux07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001549; DARWIN-32-PIC: calll L22$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001550; DARWIN-32-PIC-NEXT: L22$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001551; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1552; DARWIN-32-PIC-NEXT: leal (_ldst-L22$pb)+64([[EAX]]), [[ECX:%e.x]]
1553; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L22$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001554; DARWIN-32-PIC-NEXT: ret
1555
1556; DARWIN-64-STATIC: _qux07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001557; DARWIN-64-STATIC: leaq _ldst+64(%rip), [[RAX:%r.x]]
1558; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001559; DARWIN-64-STATIC-NEXT: ret
1560
1561; DARWIN-64-DYNAMIC: _qux07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001562; DARWIN-64-DYNAMIC: leaq _ldst+64(%rip), [[RAX:%r.x]]
1563; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001564; DARWIN-64-DYNAMIC-NEXT: ret
1565
1566; DARWIN-64-PIC: _qux07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001567; DARWIN-64-PIC: leaq _ldst+64(%rip), [[RAX:%r.x]]
1568; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001569; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001570}
1571
1572define void @qux08() nounwind {
1573entry:
1574 %0 = load i32** @lptr, align 8
1575 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
1576 %2 = getelementptr i32* %0, i64 16
1577 store i32 %1, i32* %2, align 4
Chris Lattner4f066492009-07-11 20:29:19 +00001578; LINUX-64-STATIC: qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001579; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]]
1580; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
1581; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]])
Chris Lattner4f066492009-07-11 20:29:19 +00001582; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001583
1584; LINUX-32-STATIC: qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001585; LINUX-32-STATIC: movl lsrc+64, [[EAX:%e.x]]
1586; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]]
1587; LINUX-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001588; LINUX-32-STATIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001589 ret void
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001590
1591; LINUX-32-PIC: qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001592; LINUX-32-PIC: movl lsrc+64, [[EAX:%e.x]]
1593; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]]
1594; LINUX-32-PIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001595; LINUX-32-PIC-NEXT: ret
1596
1597; LINUX-64-PIC: qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001598; LINUX-64-PIC: movl lsrc+64(%rip), [[EAX:%e.x]]
1599; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]]
1600; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001601; LINUX-64-PIC-NEXT: ret
1602
1603; DARWIN-32-STATIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001604; DARWIN-32-STATIC: movl _lsrc+64, [[EAX:%e.x]]
1605; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]]
1606; DARWIN-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001607; DARWIN-32-STATIC-NEXT: ret
1608
1609; DARWIN-32-DYNAMIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001610; DARWIN-32-DYNAMIC: movl _lsrc+64, [[EAX:%e.x]]
1611; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]]
1612; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001613; DARWIN-32-DYNAMIC-NEXT: ret
1614
1615; DARWIN-32-PIC: _qux08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001616; DARWIN-32-PIC: calll L23$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001617; DARWIN-32-PIC-NEXT: L23$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001618; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1619; DARWIN-32-PIC-NEXT: movl (_lsrc-L23$pb)+64([[EAX]]), [[ECX:%e.x]]
1620; DARWIN-32-PIC-NEXT: movl _lptr-L23$pb([[EAX]]), [[EAX:%e.x]]
1621; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001622; DARWIN-32-PIC-NEXT: ret
1623
1624; DARWIN-64-STATIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001625; DARWIN-64-STATIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1626; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
1627; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001628; DARWIN-64-STATIC-NEXT: ret
1629
1630; DARWIN-64-DYNAMIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001631; DARWIN-64-DYNAMIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1632; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
1633; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001634; DARWIN-64-DYNAMIC-NEXT: ret
1635
1636; DARWIN-64-PIC: _qux08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001637; DARWIN-64-PIC: movl _lsrc+64(%rip), [[EAX:%e.x]]
1638; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
1639; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001640; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001641}
1642
1643define void @ind00(i64 %i) nounwind {
1644entry:
1645 %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1646 %1 = load i32* %0, align 4
1647 %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1648 store i32 %1, i32* %2, align 4
1649 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001650; LINUX-64-STATIC: ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001651; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]]
1652; LINUX-64-STATIC: movl [[EAX]], dst(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00001653; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001654
1655; LINUX-32-STATIC: ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001656; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1657; LINUX-32-STATIC-NEXT: movl src(,[[EAX]],4), [[ECX:%e.x]]
1658; LINUX-32-STATIC-NEXT: movl [[ECX]], dst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001659; LINUX-32-STATIC-NEXT: ret
1660
1661; LINUX-32-PIC: ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001662; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
1663; LINUX-32-PIC-NEXT: movl src(,[[EAX]],4), [[ECX:%e.x]]
1664; LINUX-32-PIC-NEXT: movl [[ECX]], dst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001665; LINUX-32-PIC-NEXT: ret
1666
1667; LINUX-64-PIC: ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001668; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
1669; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1670; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]]
1671; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001672; LINUX-64-PIC-NEXT: ret
1673
1674; DARWIN-32-STATIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001675; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1676; DARWIN-32-STATIC-NEXT: movl _src(,[[EAX]],4), [[ECX:%e.x]]
1677; DARWIN-32-STATIC-NEXT: movl [[ECX]], _dst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001678; DARWIN-32-STATIC-NEXT: ret
1679
1680; DARWIN-32-DYNAMIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001681; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
1682; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]]
1683; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1684; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[EDX:%e.x]]
1685; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001686; DARWIN-32-DYNAMIC-NEXT: ret
1687
1688; DARWIN-32-PIC: _ind00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001689; DARWIN-32-PIC: calll L24$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001690; DARWIN-32-PIC-NEXT: L24$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001691; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1692; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
1693; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L24$pb([[EAX]]), [[EDX:%e.x]]
1694; DARWIN-32-PIC-NEXT: movl ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
1695; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L24$pb([[EAX]]), [[EAX:%e.x]]
1696; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001697; DARWIN-32-PIC-NEXT: ret
1698
1699; DARWIN-64-STATIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001700; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
1701; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1702; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1703; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001704; DARWIN-64-STATIC-NEXT: ret
1705
1706; DARWIN-64-DYNAMIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001707; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
1708; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1709; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1710; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001711; DARWIN-64-DYNAMIC-NEXT: ret
1712
1713; DARWIN-64-PIC: _ind00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001714; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
1715; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1716; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
1717; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001718; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001719}
1720
1721define void @ixd00(i64 %i) nounwind {
1722entry:
1723 %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
1724 %1 = load i32* %0, align 4
1725 %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1726 store i32 %1, i32* %2, align 4
1727 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001728; LINUX-64-STATIC: ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001729; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]]
1730; LINUX-64-STATIC: movl [[EAX]], xdst(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00001731; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001732
1733; LINUX-32-STATIC: ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001734; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1735; LINUX-32-STATIC-NEXT: movl xsrc(,[[EAX]],4), [[ECX:%e.x]]
1736; LINUX-32-STATIC-NEXT: movl [[ECX]], xdst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001737; LINUX-32-STATIC-NEXT: ret
1738
1739; LINUX-32-PIC: ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001740; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
1741; LINUX-32-PIC-NEXT: movl xsrc(,[[EAX]],4), [[ECX:%e.x]]
1742; LINUX-32-PIC-NEXT: movl [[ECX]], xdst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001743; LINUX-32-PIC-NEXT: ret
1744
1745; LINUX-64-PIC: ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001746; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1747; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1748; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1749; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001750; LINUX-64-PIC-NEXT: ret
1751
1752; DARWIN-32-STATIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001753; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1754; DARWIN-32-STATIC-NEXT: movl _xsrc(,[[EAX]],4), [[ECX:%e.x]]
1755; DARWIN-32-STATIC-NEXT: movl [[ECX]], _xdst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001756; DARWIN-32-STATIC-NEXT: ret
1757
1758; DARWIN-32-DYNAMIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001759; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
1760; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
1761; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1762; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[EDX:%e.x]]
1763; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001764; DARWIN-32-DYNAMIC-NEXT: ret
1765
1766; DARWIN-32-PIC: _ixd00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001767; DARWIN-32-PIC: calll L25$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001768; DARWIN-32-PIC-NEXT: L25$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001769; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1770; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
1771; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L25$pb([[EAX]]), [[EDX:%e.x]]
1772; DARWIN-32-PIC-NEXT: movl ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
1773; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L25$pb([[EAX]]), [[EAX:%e.x]]
1774; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001775; DARWIN-32-PIC-NEXT: ret
1776
1777; DARWIN-64-STATIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001778; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1779; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1780; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1781; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001782; DARWIN-64-STATIC-NEXT: ret
1783
1784; DARWIN-64-DYNAMIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001785; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1786; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1787; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1788; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001789; DARWIN-64-DYNAMIC-NEXT: ret
1790
1791; DARWIN-64-PIC: _ixd00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001792; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
1793; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1794; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
1795; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001796; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001797}
1798
1799define void @ind01(i64 %i) nounwind {
1800entry:
1801 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
1802 store i32* %0, i32** @ptr, align 8
1803 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001804; LINUX-64-STATIC: ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001805; LINUX-64-STATIC: leaq dst(,%rdi,4), [[RAX:%r.x]]
1806; LINUX-64-STATIC: movq [[RAX]], ptr
Chris Lattner4f066492009-07-11 20:29:19 +00001807; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001808
1809; LINUX-32-STATIC: ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001810; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1811; LINUX-32-STATIC-NEXT: leal dst(,[[EAX]],4), [[EAX:%e.x]]
1812; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001813; LINUX-32-STATIC-NEXT: ret
1814
1815; LINUX-32-PIC: ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001816; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
1817; LINUX-32-PIC-NEXT: leal dst(,[[EAX]],4), [[EAX:%e.x]]
1818; LINUX-32-PIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001819; LINUX-32-PIC-NEXT: ret
1820
1821; LINUX-64-PIC: ind01:
1822; LINUX-64-PIC: shlq $2, %rdi
1823; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001824; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1825; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001826; LINUX-64-PIC-NEXT: ret
1827
1828; DARWIN-32-STATIC: _ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001829; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1830; DARWIN-32-STATIC-NEXT: leal _dst(,[[EAX]],4), [[EAX:%e.x]]
1831; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001832; DARWIN-32-STATIC-NEXT: ret
1833
1834; DARWIN-32-DYNAMIC: _ind01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001835; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
1836; DARWIN-32-DYNAMIC-NEXT: shll $2, [[EAX:%e.x]]
1837; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, [[EAX:%e.x]]
1838; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1839; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001840; DARWIN-32-DYNAMIC-NEXT: ret
1841
1842; DARWIN-32-PIC: _ind01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001843; DARWIN-32-PIC: calll L26$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001844; DARWIN-32-PIC-NEXT: L26$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001845; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1846; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
1847; DARWIN-32-PIC-NEXT: shll $2, [[ECX:%e.x]]
1848; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L26$pb([[EAX]]), [[ECX:%e.x]]
1849; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L26$pb([[EAX]]), [[EAX:%e.x]]
1850; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001851; DARWIN-32-PIC-NEXT: ret
1852
1853; DARWIN-64-STATIC: _ind01:
1854; DARWIN-64-STATIC: shlq $2, %rdi
1855; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001856; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1857; DARWIN-64-STATIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001858; DARWIN-64-STATIC-NEXT: ret
1859
1860; DARWIN-64-DYNAMIC: _ind01:
1861; DARWIN-64-DYNAMIC: shlq $2, %rdi
1862; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001863; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1864; DARWIN-64-DYNAMIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001865; DARWIN-64-DYNAMIC-NEXT: ret
1866
1867; DARWIN-64-PIC: _ind01:
1868; DARWIN-64-PIC: shlq $2, %rdi
1869; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001870; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1871; DARWIN-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001872; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001873}
1874
1875define void @ixd01(i64 %i) nounwind {
1876entry:
1877 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
1878 store i32* %0, i32** @ptr, align 8
1879 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001880; LINUX-64-STATIC: ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001881; LINUX-64-STATIC: leaq xdst(,%rdi,4), [[RAX:%r.x]]
1882; LINUX-64-STATIC: movq [[RAX]], ptr
Chris Lattner4f066492009-07-11 20:29:19 +00001883; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001884
1885; LINUX-32-STATIC: ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001886; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1887; LINUX-32-STATIC-NEXT: leal xdst(,[[EAX]],4), [[EAX:%e.x]]
1888; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001889; LINUX-32-STATIC-NEXT: ret
1890
1891; LINUX-32-PIC: ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001892; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
1893; LINUX-32-PIC-NEXT: leal xdst(,[[EAX]],4), [[EAX:%e.x]]
1894; LINUX-32-PIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001895; LINUX-32-PIC-NEXT: ret
1896
1897; LINUX-64-PIC: ixd01:
1898; LINUX-64-PIC: shlq $2, %rdi
1899; LINUX-64-PIC-NEXT: addq xdst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001900; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1901; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001902; LINUX-64-PIC-NEXT: ret
1903
1904; DARWIN-32-STATIC: _ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001905; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1906; DARWIN-32-STATIC-NEXT: leal _xdst(,[[EAX]],4), [[EAX:%e.x]]
1907; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001908; DARWIN-32-STATIC-NEXT: ret
1909
1910; DARWIN-32-DYNAMIC: _ixd01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001911; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
1912; DARWIN-32-DYNAMIC-NEXT: shll $2, [[EAX:%e.x]]
1913; DARWIN-32-DYNAMIC-NEXT: addl L_xdst$non_lazy_ptr, [[EAX:%e.x]]
1914; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
1915; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001916; DARWIN-32-DYNAMIC-NEXT: ret
1917
1918; DARWIN-32-PIC: _ixd01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00001919; DARWIN-32-PIC: calll L27$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00001920; DARWIN-32-PIC-NEXT: L27$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001921; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
1922; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
1923; DARWIN-32-PIC-NEXT: shll $2, [[ECX:%e.x]]
1924; DARWIN-32-PIC-NEXT: addl L_xdst$non_lazy_ptr-L27$pb([[EAX]]), [[ECX:%e.x]]
1925; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L27$pb([[EAX]]), [[EAX:%e.x]]
1926; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001927; DARWIN-32-PIC-NEXT: ret
1928
1929; DARWIN-64-STATIC: _ixd01:
1930; DARWIN-64-STATIC: shlq $2, %rdi
1931; DARWIN-64-STATIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001932; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1933; DARWIN-64-STATIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001934; DARWIN-64-STATIC-NEXT: ret
1935
1936; DARWIN-64-DYNAMIC: _ixd01:
1937; DARWIN-64-DYNAMIC: shlq $2, %rdi
1938; DARWIN-64-DYNAMIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001939; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1940; DARWIN-64-DYNAMIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001941; DARWIN-64-DYNAMIC-NEXT: ret
1942
1943; DARWIN-64-PIC: _ixd01:
1944; DARWIN-64-PIC: shlq $2, %rdi
1945; DARWIN-64-PIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001946; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
1947; DARWIN-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001948; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00001949}
1950
1951define void @ind02(i64 %i) nounwind {
1952entry:
1953 %0 = load i32** @ptr, align 8
1954 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
1955 %2 = load i32* %1, align 4
1956 %3 = getelementptr i32* %0, i64 %i
1957 store i32 %2, i32* %3, align 4
1958 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00001959; LINUX-64-STATIC: ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001960; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]]
1961; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
1962; LINUX-64-STATIC: movl [[EAX]], ([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00001963; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001964
1965; LINUX-32-STATIC: ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001966; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1967; LINUX-32-STATIC-NEXT: movl src(,[[EAX]],4), [[ECX:%e.x]]
1968; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]]
1969; LINUX-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001970; LINUX-32-STATIC-NEXT: ret
1971
1972; LINUX-32-PIC: ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001973; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
1974; LINUX-32-PIC-NEXT: movl src(,[[EAX]],4), [[ECX:%e.x]]
1975; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]]
1976; LINUX-32-PIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001977; LINUX-32-PIC-NEXT: ret
1978
1979; LINUX-64-PIC: ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001980; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
1981; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
1982; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
1983; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
1984; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001985; LINUX-64-PIC-NEXT: ret
1986
1987; DARWIN-32-STATIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001988; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
1989; DARWIN-32-STATIC-NEXT: movl _src(,[[EAX]],4), [[ECX:%e.x]]
1990; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]]
1991; DARWIN-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00001992; DARWIN-32-STATIC-NEXT: ret
1993
1994; DARWIN-32-DYNAMIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00001995; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
1996; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]]
1997; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
1998; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]]
1999; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]]
2000; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002001; DARWIN-32-DYNAMIC-NEXT: ret
2002
2003; DARWIN-32-PIC: _ind02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002004; DARWIN-32-PIC: calll L28$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002005; DARWIN-32-PIC-NEXT: L28$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002006; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2007; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2008; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L28$pb([[EAX]]), [[EDX:%e.x]]
2009; DARWIN-32-PIC-NEXT: movl ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2010; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L28$pb([[EAX]]), [[EAX:%e.x]]
2011; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
2012; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002013; DARWIN-32-PIC-NEXT: ret
2014
2015; DARWIN-64-STATIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002016; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2017; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2018; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2019; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2020; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002021; DARWIN-64-STATIC-NEXT: ret
2022
2023; DARWIN-64-DYNAMIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002024; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2025; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2026; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2027; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2028; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002029; DARWIN-64-DYNAMIC-NEXT: ret
2030
2031; DARWIN-64-PIC: _ind02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002032; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2033; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2034; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2035; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2036; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002037; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002038}
2039
2040define void @ixd02(i64 %i) nounwind {
2041entry:
2042 %0 = load i32** @ptr, align 8
2043 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
2044 %2 = load i32* %1, align 4
2045 %3 = getelementptr i32* %0, i64 %i
2046 store i32 %2, i32* %3, align 4
2047 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002048; LINUX-64-STATIC: ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002049; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]]
2050; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
2051; LINUX-64-STATIC: movl [[EAX]], ([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002052; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002053
2054; LINUX-32-STATIC: ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002055; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2056; LINUX-32-STATIC-NEXT: movl xsrc(,[[EAX]],4), [[ECX:%e.x]]
2057; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]]
2058; LINUX-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002059; LINUX-32-STATIC-NEXT: ret
2060
2061; LINUX-32-PIC: ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002062; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2063; LINUX-32-PIC-NEXT: movl xsrc(,[[EAX]],4), [[ECX:%e.x]]
2064; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]]
2065; LINUX-32-PIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002066; LINUX-32-PIC-NEXT: ret
2067
2068; LINUX-64-PIC: ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002069; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2070; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2071; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2072; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2073; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002074; LINUX-64-PIC-NEXT: ret
2075
2076; DARWIN-32-STATIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002077; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2078; DARWIN-32-STATIC-NEXT: movl _xsrc(,[[EAX]],4), [[ECX:%e.x]]
2079; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]]
2080; DARWIN-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002081; DARWIN-32-STATIC-NEXT: ret
2082
2083; DARWIN-32-DYNAMIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002084; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2085; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
2086; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2087; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2088; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]]
2089; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002090; DARWIN-32-DYNAMIC-NEXT: ret
2091
2092; DARWIN-32-PIC: _ixd02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002093; DARWIN-32-PIC: calll L29$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002094; DARWIN-32-PIC-NEXT: L29$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002095; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2096; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2097; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L29$pb([[EAX]]), [[EDX:%e.x]]
2098; DARWIN-32-PIC-NEXT: movl ([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2099; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L29$pb([[EAX]]), [[EAX:%e.x]]
2100; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
2101; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002102; DARWIN-32-PIC-NEXT: ret
2103
2104; DARWIN-64-STATIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002105; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2106; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2107; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2108; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2109; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002110; DARWIN-64-STATIC-NEXT: ret
2111
2112; DARWIN-64-DYNAMIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002113; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2114; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2115; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2116; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2117; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002118; DARWIN-64-DYNAMIC-NEXT: ret
2119
2120; DARWIN-64-PIC: _ixd02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002121; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2122; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2123; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2124; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2125; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002126; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002127}
2128
2129define void @ind03(i64 %i) nounwind {
2130entry:
2131 %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2132 %1 = load i32* %0, align 4
2133 %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2134 store i32 %1, i32* %2, align 4
2135 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002136; LINUX-64-STATIC: ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002137; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]]
2138; LINUX-64-STATIC: movl [[EAX]], ddst(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002139; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002140
2141; LINUX-32-STATIC: ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002142; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2143; LINUX-32-STATIC-NEXT: movl dsrc(,[[EAX]],4), [[ECX:%e.x]]
2144; LINUX-32-STATIC-NEXT: movl [[ECX]], ddst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002145; LINUX-32-STATIC-NEXT: ret
2146
2147; LINUX-32-PIC: ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002148; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2149; LINUX-32-PIC-NEXT: movl dsrc(,[[EAX]],4), [[ECX:%e.x]]
2150; LINUX-32-PIC-NEXT: movl [[ECX]], ddst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002151; LINUX-32-PIC-NEXT: ret
2152
2153; LINUX-64-PIC: ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002154; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2155; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2156; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]]
2157; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002158; LINUX-64-PIC-NEXT: ret
2159
2160; DARWIN-32-STATIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002161; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2162; DARWIN-32-STATIC-NEXT: movl _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2163; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ddst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002164; DARWIN-32-STATIC-NEXT: ret
2165
2166; DARWIN-32-DYNAMIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002167; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2168; DARWIN-32-DYNAMIC-NEXT: movl _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2169; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ddst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002170; DARWIN-32-DYNAMIC-NEXT: ret
2171
2172; DARWIN-32-PIC: _ind03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002173; DARWIN-32-PIC: calll L30$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002174; DARWIN-32-PIC-NEXT: L30$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002175; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2176; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2177; DARWIN-32-PIC-NEXT: movl _dsrc-L30$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2178; DARWIN-32-PIC-NEXT: movl [[EDX]], _ddst-L30$pb([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002179; DARWIN-32-PIC-NEXT: ret
2180
2181; DARWIN-64-STATIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002182; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
2183; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2184; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
2185; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002186; DARWIN-64-STATIC-NEXT: ret
2187
2188; DARWIN-64-DYNAMIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002189; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
2190; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2191; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
2192; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002193; DARWIN-64-DYNAMIC-NEXT: ret
2194
2195; DARWIN-64-PIC: _ind03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002196; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
2197; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2198; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
2199; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002200; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002201}
2202
2203define void @ind04(i64 %i) nounwind {
2204entry:
2205 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
2206 store i32* %0, i32** @dptr, align 8
2207 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002208; LINUX-64-STATIC: ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002209; LINUX-64-STATIC: leaq ddst(,%rdi,4), [[RAX:%r.x]]
2210; LINUX-64-STATIC: movq [[RAX]], dptr
Chris Lattner4f066492009-07-11 20:29:19 +00002211; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002212
2213; LINUX-32-STATIC: ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002214; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2215; LINUX-32-STATIC-NEXT: leal ddst(,[[EAX]],4), [[EAX:%e.x]]
2216; LINUX-32-STATIC-NEXT: movl [[EAX]], dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002217; LINUX-32-STATIC-NEXT: ret
2218
2219; LINUX-32-PIC: ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002220; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2221; LINUX-32-PIC-NEXT: leal ddst(,[[EAX]],4), [[EAX:%e.x]]
2222; LINUX-32-PIC-NEXT: movl [[EAX]], dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002223; LINUX-32-PIC-NEXT: ret
2224
2225; LINUX-64-PIC: ind04:
2226; LINUX-64-PIC: shlq $2, %rdi
2227; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), %rdi
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002228; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]]
2229; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002230; LINUX-64-PIC-NEXT: ret
2231
2232; DARWIN-32-STATIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002233; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2234; DARWIN-32-STATIC-NEXT: leal _ddst(,[[EAX]],4), [[EAX:%e.x]]
2235; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002236; DARWIN-32-STATIC-NEXT: ret
2237
2238; DARWIN-32-DYNAMIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002239; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2240; DARWIN-32-DYNAMIC-NEXT: leal _ddst(,[[EAX]],4), [[EAX:%e.x]]
2241; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002242; DARWIN-32-DYNAMIC-NEXT: ret
2243
2244; DARWIN-32-PIC: _ind04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002245; DARWIN-32-PIC: calll L31$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002246; DARWIN-32-PIC-NEXT: L31$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002247; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2248; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2249; DARWIN-32-PIC-NEXT: leal _ddst-L31$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]]
2250; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L31$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002251; DARWIN-32-PIC-NEXT: ret
2252
2253; DARWIN-64-STATIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002254; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
2255; DARWIN-64-STATIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]]
2256; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002257; DARWIN-64-STATIC-NEXT: ret
2258
2259; DARWIN-64-DYNAMIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002260; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
2261; DARWIN-64-DYNAMIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]]
2262; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002263; DARWIN-64-DYNAMIC-NEXT: ret
2264
2265; DARWIN-64-PIC: _ind04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002266; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
2267; DARWIN-64-PIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]]
2268; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002269; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002270}
2271
2272define void @ind05(i64 %i) nounwind {
2273entry:
2274 %0 = load i32** @dptr, align 8
2275 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
2276 %2 = load i32* %1, align 4
2277 %3 = getelementptr i32* %0, i64 %i
2278 store i32 %2, i32* %3, align 4
2279 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002280; LINUX-64-STATIC: ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002281; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]]
2282; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
2283; LINUX-64-STATIC: movl [[EAX]], ([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002284; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002285
2286; LINUX-32-STATIC: ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002287; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2288; LINUX-32-STATIC-NEXT: movl dsrc(,[[EAX]],4), [[ECX:%e.x]]
2289; LINUX-32-STATIC-NEXT: movl dptr, [[EDX:%e.x]]
2290; LINUX-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002291; LINUX-32-STATIC-NEXT: ret
2292
2293; LINUX-32-PIC: ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002294; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2295; LINUX-32-PIC-NEXT: movl dsrc(,[[EAX]],4), [[ECX:%e.x]]
2296; LINUX-32-PIC-NEXT: movl dptr, [[EDX:%e.x]]
2297; LINUX-32-PIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002298; LINUX-32-PIC-NEXT: ret
2299
2300; LINUX-64-PIC: ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002301; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2302; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2303; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
2304; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2305; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002306; LINUX-64-PIC-NEXT: ret
2307
2308; DARWIN-32-STATIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002309; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2310; DARWIN-32-STATIC-NEXT: movl _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2311; DARWIN-32-STATIC-NEXT: movl _dptr, [[EDX:%e.x]]
2312; DARWIN-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002313; DARWIN-32-STATIC-NEXT: ret
2314
2315; DARWIN-32-DYNAMIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002316; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2317; DARWIN-32-DYNAMIC-NEXT: movl _dsrc(,[[EAX]],4), [[ECX:%e.x]]
2318; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[EDX:%e.x]]
2319; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002320; DARWIN-32-DYNAMIC-NEXT: ret
2321
2322; DARWIN-32-PIC: _ind05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002323; DARWIN-32-PIC: calll L32$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002324; DARWIN-32-PIC-NEXT: L32$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002325; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2326; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2327; DARWIN-32-PIC-NEXT: movl _dsrc-L32$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2328; DARWIN-32-PIC-NEXT: movl _dptr-L32$pb([[EAX]]), [[EAX:%e.x]]
2329; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002330; DARWIN-32-PIC-NEXT: ret
2331
2332; DARWIN-64-STATIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002333; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
2334; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2335; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
2336; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002337; DARWIN-64-STATIC-NEXT: ret
2338
2339; DARWIN-64-DYNAMIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002340; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
2341; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2342; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
2343; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002344; DARWIN-64-DYNAMIC-NEXT: ret
2345
2346; DARWIN-64-PIC: _ind05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002347; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
2348; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2349; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
2350; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002351; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002352}
2353
2354define void @ind06(i64 %i) nounwind {
2355entry:
2356 %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2357 %1 = load i32* %0, align 4
2358 %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2359 store i32 %1, i32* %2, align 4
2360 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002361; LINUX-64-STATIC: ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002362; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]]
2363; LINUX-64-STATIC: movl [[EAX]], ldst(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002364; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002365
2366; LINUX-32-STATIC: ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002367; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2368; LINUX-32-STATIC-NEXT: movl lsrc(,[[EAX]],4), [[ECX:%e.x]]
2369; LINUX-32-STATIC-NEXT: movl [[ECX]], ldst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002370; LINUX-32-STATIC-NEXT: ret
2371
2372; LINUX-32-PIC: ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002373; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2374; LINUX-32-PIC-NEXT: movl lsrc(,[[EAX]],4), [[ECX:%e.x]]
2375; LINUX-32-PIC-NEXT: movl [[ECX]], ldst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002376; LINUX-32-PIC-NEXT: ret
2377
2378; LINUX-64-PIC: ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002379; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
2380; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2381; LINUX-64-PIC-NEXT: leaq ldst(%rip), [[RCX:%r.x]]
2382; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002383; LINUX-64-PIC-NEXT: ret
2384
2385; DARWIN-32-STATIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002386; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2387; DARWIN-32-STATIC-NEXT: movl _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2388; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ldst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002389; DARWIN-32-STATIC-NEXT: ret
2390
2391; DARWIN-32-DYNAMIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002392; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2393; DARWIN-32-DYNAMIC-NEXT: movl _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2394; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ldst(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002395; DARWIN-32-DYNAMIC-NEXT: ret
2396
2397; DARWIN-32-PIC: _ind06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002398; DARWIN-32-PIC: calll L33$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002399; DARWIN-32-PIC-NEXT: L33$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002400; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2401; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2402; DARWIN-32-PIC-NEXT: movl _lsrc-L33$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2403; DARWIN-32-PIC-NEXT: movl [[EDX]], _ldst-L33$pb([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002404; DARWIN-32-PIC-NEXT: ret
2405
2406; DARWIN-64-STATIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002407; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
2408; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2409; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
2410; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002411; DARWIN-64-STATIC-NEXT: ret
2412
2413; DARWIN-64-DYNAMIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002414; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
2415; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2416; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
2417; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002418; DARWIN-64-DYNAMIC-NEXT: ret
2419
2420; DARWIN-64-PIC: _ind06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002421; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
2422; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2423; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
2424; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002425; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002426}
2427
2428define void @ind07(i64 %i) nounwind {
2429entry:
2430 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
2431 store i32* %0, i32** @lptr, align 8
2432 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002433; LINUX-64-STATIC: ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002434; LINUX-64-STATIC: leaq ldst(,%rdi,4), [[RAX:%r.x]]
2435; LINUX-64-STATIC: movq [[RAX]], lptr
Chris Lattner4f066492009-07-11 20:29:19 +00002436; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002437
2438; LINUX-32-STATIC: ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002439; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2440; LINUX-32-STATIC-NEXT: leal ldst(,[[EAX]],4), [[EAX:%e.x]]
2441; LINUX-32-STATIC-NEXT: movl [[EAX]], lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002442; LINUX-32-STATIC-NEXT: ret
2443
2444; LINUX-32-PIC: ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002445; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2446; LINUX-32-PIC-NEXT: leal ldst(,[[EAX]],4), [[EAX:%e.x]]
2447; LINUX-32-PIC-NEXT: movl [[EAX]], lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002448; LINUX-32-PIC-NEXT: ret
2449
2450; LINUX-64-PIC: ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002451; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
2452; LINUX-64-PIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]]
2453; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002454; LINUX-64-PIC-NEXT: ret
2455
2456; DARWIN-32-STATIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002457; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2458; DARWIN-32-STATIC-NEXT: leal _ldst(,[[EAX]],4), [[EAX:%e.x]]
2459; DARWIN-32-STATIC-NEXT: movl [[EAX]], _lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002460; DARWIN-32-STATIC-NEXT: ret
2461
2462; DARWIN-32-DYNAMIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002463; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2464; DARWIN-32-DYNAMIC-NEXT: leal _ldst(,[[EAX]],4), [[EAX:%e.x]]
2465; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002466; DARWIN-32-DYNAMIC-NEXT: ret
2467
2468; DARWIN-32-PIC: _ind07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002469; DARWIN-32-PIC: calll L34$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002470; DARWIN-32-PIC-NEXT: L34$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002471; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2472; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2473; DARWIN-32-PIC-NEXT: leal _ldst-L34$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]]
2474; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L34$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002475; DARWIN-32-PIC-NEXT: ret
2476
2477; DARWIN-64-STATIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002478; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
2479; DARWIN-64-STATIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]]
2480; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002481; DARWIN-64-STATIC-NEXT: ret
2482
2483; DARWIN-64-DYNAMIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002484; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
2485; DARWIN-64-DYNAMIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]]
2486; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002487; DARWIN-64-DYNAMIC-NEXT: ret
2488
2489; DARWIN-64-PIC: _ind07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002490; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
2491; DARWIN-64-PIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]]
2492; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002493; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002494}
2495
2496define void @ind08(i64 %i) nounwind {
2497entry:
2498 %0 = load i32** @lptr, align 8
2499 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
2500 %2 = load i32* %1, align 4
2501 %3 = getelementptr i32* %0, i64 %i
2502 store i32 %2, i32* %3, align 4
2503 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002504; LINUX-64-STATIC: ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002505; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]]
2506; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
2507; LINUX-64-STATIC: movl [[EAX]], ([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002508; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002509
2510; LINUX-32-STATIC: ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002511; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2512; LINUX-32-STATIC-NEXT: movl lsrc(,[[EAX]],4), [[ECX:%e.x]]
2513; LINUX-32-STATIC-NEXT: movl lptr, [[EDX:%e.x]]
2514; LINUX-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002515; LINUX-32-STATIC-NEXT: ret
2516
2517; LINUX-32-PIC: ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002518; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2519; LINUX-32-PIC-NEXT: movl lsrc(,[[EAX]],4), [[ECX:%e.x]]
2520; LINUX-32-PIC-NEXT: movl lptr, [[EDX:%e.x]]
2521; LINUX-32-PIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002522; LINUX-32-PIC-NEXT: ret
2523
2524; LINUX-64-PIC: ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002525; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
2526; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2527; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]]
2528; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002529; LINUX-64-PIC-NEXT: ret
2530
2531; DARWIN-32-STATIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002532; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2533; DARWIN-32-STATIC-NEXT: movl _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2534; DARWIN-32-STATIC-NEXT: movl _lptr, [[EDX:%e.x]]
2535; DARWIN-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002536; DARWIN-32-STATIC-NEXT: ret
2537
2538; DARWIN-32-DYNAMIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002539; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2540; DARWIN-32-DYNAMIC-NEXT: movl _lsrc(,[[EAX]],4), [[ECX:%e.x]]
2541; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[EDX:%e.x]]
2542; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002543; DARWIN-32-DYNAMIC-NEXT: ret
2544
2545; DARWIN-32-PIC: _ind08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002546; DARWIN-32-PIC: calll L35$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002547; DARWIN-32-PIC-NEXT: L35$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002548; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2549; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2550; DARWIN-32-PIC-NEXT: movl _lsrc-L35$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]]
2551; DARWIN-32-PIC-NEXT: movl _lptr-L35$pb([[EAX]]), [[EAX:%e.x]]
2552; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002553; DARWIN-32-PIC-NEXT: ret
2554
2555; DARWIN-64-STATIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002556; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
2557; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2558; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
2559; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002560; DARWIN-64-STATIC-NEXT: ret
2561
2562; DARWIN-64-DYNAMIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002563; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
2564; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2565; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
2566; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002567; DARWIN-64-DYNAMIC-NEXT: ret
2568
2569; DARWIN-64-PIC: _ind08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002570; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
2571; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]]
2572; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
2573; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002574; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002575}
2576
2577define void @off00(i64 %i) nounwind {
2578entry:
2579 %0 = add i64 %i, 16
2580 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
2581 %2 = load i32* %1, align 4
2582 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
2583 store i32 %2, i32* %3, align 4
2584 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002585; LINUX-64-STATIC: off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002586; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]]
2587; LINUX-64-STATIC: movl [[EAX]], dst+64(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002588; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002589
2590; LINUX-32-STATIC: off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002591; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2592; LINUX-32-STATIC-NEXT: movl src+64(,[[EAX]],4), [[ECX:%e.x]]
2593; LINUX-32-STATIC-NEXT: movl [[ECX]], dst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002594; LINUX-32-STATIC-NEXT: ret
2595
2596; LINUX-32-PIC: off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002597; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2598; LINUX-32-PIC-NEXT: movl src+64(,[[EAX]],4), [[ECX:%e.x]]
2599; LINUX-32-PIC-NEXT: movl [[ECX]], dst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002600; LINUX-32-PIC-NEXT: ret
2601
2602; LINUX-64-PIC: off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002603; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
2604; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2605; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]]
2606; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002607; LINUX-64-PIC-NEXT: ret
2608
2609; DARWIN-32-STATIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002610; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2611; DARWIN-32-STATIC-NEXT: movl _src+64(,[[EAX]],4), [[ECX:%e.x]]
2612; DARWIN-32-STATIC-NEXT: movl [[ECX]], _dst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002613; DARWIN-32-STATIC-NEXT: ret
2614
2615; DARWIN-32-DYNAMIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002616; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2617; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]]
2618; DARWIN-32-DYNAMIC-NEXT: movl 64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2619; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[EDX:%e.x]]
2620; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002621; DARWIN-32-DYNAMIC-NEXT: ret
2622
2623; DARWIN-32-PIC: _off00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002624; DARWIN-32-PIC: calll L36$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002625; DARWIN-32-PIC-NEXT: L36$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002626; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2627; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2628; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L36$pb([[EAX]]), [[EDX:%e.x]]
2629; DARWIN-32-PIC-NEXT: movl 64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2630; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L36$pb([[EAX]]), [[EAX:%e.x]]
2631; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002632; DARWIN-32-PIC-NEXT: ret
2633
2634; DARWIN-64-STATIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002635; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2636; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2637; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2638; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002639; DARWIN-64-STATIC-NEXT: ret
2640
2641; DARWIN-64-DYNAMIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002642; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2643; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2644; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2645; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002646; DARWIN-64-DYNAMIC-NEXT: ret
2647
2648; DARWIN-64-PIC: _off00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002649; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2650; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2651; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
2652; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002653; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002654}
2655
2656define void @oxf00(i64 %i) nounwind {
2657entry:
2658 %0 = add i64 %i, 16
2659 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
2660 %2 = load i32* %1, align 4
2661 %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
2662 store i32 %2, i32* %3, align 4
2663 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002664; LINUX-64-STATIC: oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002665; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]]
2666; LINUX-64-STATIC: movl [[EAX]], xdst+64(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002667; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002668
2669; LINUX-32-STATIC: oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002670; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2671; LINUX-32-STATIC-NEXT: movl xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2672; LINUX-32-STATIC-NEXT: movl [[ECX]], xdst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002673; LINUX-32-STATIC-NEXT: ret
2674
2675; LINUX-32-PIC: oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002676; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2677; LINUX-32-PIC-NEXT: movl xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2678; LINUX-32-PIC-NEXT: movl [[ECX]], xdst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002679; LINUX-32-PIC-NEXT: ret
2680
2681; LINUX-64-PIC: oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002682; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2683; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2684; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2685; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002686; LINUX-64-PIC-NEXT: ret
2687
2688; DARWIN-32-STATIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002689; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2690; DARWIN-32-STATIC-NEXT: movl _xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2691; DARWIN-32-STATIC-NEXT: movl [[ECX]], _xdst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002692; DARWIN-32-STATIC-NEXT: ret
2693
2694; DARWIN-32-DYNAMIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002695; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2696; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
2697; DARWIN-32-DYNAMIC-NEXT: movl 64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2698; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[EDX:%e.x]]
2699; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002700; DARWIN-32-DYNAMIC-NEXT: ret
2701
2702; DARWIN-32-PIC: _oxf00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002703; DARWIN-32-PIC: calll L37$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002704; DARWIN-32-PIC-NEXT: L37$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002705; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2706; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2707; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L37$pb([[EAX]]), [[EDX:%e.x]]
2708; DARWIN-32-PIC-NEXT: movl 64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2709; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L37$pb([[EAX]]), [[EAX:%e.x]]
2710; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002711; DARWIN-32-PIC-NEXT: ret
2712
2713; DARWIN-64-STATIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002714; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2715; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2716; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2717; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002718; DARWIN-64-STATIC-NEXT: ret
2719
2720; DARWIN-64-DYNAMIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002721; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2722; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2723; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2724; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002725; DARWIN-64-DYNAMIC-NEXT: ret
2726
2727; DARWIN-64-PIC: _oxf00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002728; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
2729; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2730; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]]
2731; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002732; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002733}
2734
2735define void @off01(i64 %i) nounwind {
2736entry:
2737 %.sum = add i64 %i, 16
2738 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
2739 store i32* %0, i32** @ptr, align 8
2740 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002741; LINUX-64-STATIC: off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002742; LINUX-64-STATIC: leaq dst+64(,%rdi,4), [[RAX:%r.x]]
2743; LINUX-64-STATIC: movq [[RAX]], ptr
Chris Lattner4f066492009-07-11 20:29:19 +00002744; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002745
2746; LINUX-32-STATIC: off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002747; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2748; LINUX-32-STATIC-NEXT: leal dst+64(,[[EAX]],4), [[EAX:%e.x]]
2749; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002750; LINUX-32-STATIC-NEXT: ret
2751
2752; LINUX-32-PIC: off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002753; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2754; LINUX-32-PIC-NEXT: leal dst+64(,[[EAX]],4), [[EAX:%e.x]]
2755; LINUX-32-PIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002756; LINUX-32-PIC-NEXT: ret
2757
2758; LINUX-64-PIC: off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002759; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]]
2760; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
2761; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2762; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002763; LINUX-64-PIC-NEXT: ret
2764
2765; DARWIN-32-STATIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002766; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2767; DARWIN-32-STATIC-NEXT: leal _dst+64(,[[EAX]],4), [[EAX:%e.x]]
2768; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002769; DARWIN-32-STATIC-NEXT: ret
2770
2771; DARWIN-32-DYNAMIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002772; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2773; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]]
2774; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), [[EAX:%e.x]]
2775; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
2776; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002777; DARWIN-32-DYNAMIC-NEXT: ret
2778
2779; DARWIN-32-PIC: _off01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002780; DARWIN-32-PIC: calll L38$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002781; DARWIN-32-PIC-NEXT: L38$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002782; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2783; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2784; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L38$pb([[EAX]]), [[EDX:%e.x]]
2785; DARWIN-32-PIC-NEXT: leal 64([[EDX]],[[ECX]],4), [[ECX:%e.x]]
2786; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L38$pb([[EAX]]), [[EAX:%e.x]]
2787; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002788; DARWIN-32-PIC-NEXT: ret
2789
2790; DARWIN-64-STATIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002791; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2792; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
2793; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2794; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002795; DARWIN-64-STATIC-NEXT: ret
2796
2797; DARWIN-64-DYNAMIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002798; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2799; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
2800; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2801; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002802; DARWIN-64-DYNAMIC-NEXT: ret
2803
2804; DARWIN-64-PIC: _off01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002805; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
2806; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
2807; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2808; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002809; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002810}
2811
2812define void @oxf01(i64 %i) nounwind {
2813entry:
2814 %.sum = add i64 %i, 16
2815 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum
2816 store i32* %0, i32** @ptr, align 8
2817 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002818; LINUX-64-STATIC: oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002819; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), [[RAX:%r.x]]
2820; LINUX-64-STATIC: movq [[RAX]], ptr
Chris Lattner4f066492009-07-11 20:29:19 +00002821; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002822
2823; LINUX-32-STATIC: oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002824; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2825; LINUX-32-STATIC-NEXT: leal xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2826; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002827; LINUX-32-STATIC-NEXT: ret
2828
2829; LINUX-32-PIC: oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002830; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2831; LINUX-32-PIC-NEXT: leal xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2832; LINUX-32-PIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002833; LINUX-32-PIC-NEXT: ret
2834
2835; LINUX-64-PIC: oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002836; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2837; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
2838; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2839; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002840; LINUX-64-PIC-NEXT: ret
2841
2842; DARWIN-32-STATIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002843; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2844; DARWIN-32-STATIC-NEXT: leal _xdst+64(,[[EAX]],4), [[EAX:%e.x]]
2845; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002846; DARWIN-32-STATIC-NEXT: ret
2847
2848; DARWIN-32-DYNAMIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002849; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2850; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]]
2851; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), [[EAX:%e.x]]
2852; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
2853; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002854; DARWIN-32-DYNAMIC-NEXT: ret
2855
2856; DARWIN-32-PIC: _oxf01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002857; DARWIN-32-PIC: calll L39$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002858; DARWIN-32-PIC-NEXT: L39$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002859; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2860; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2861; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L39$pb([[EAX]]), [[EDX:%e.x]]
2862; DARWIN-32-PIC-NEXT: leal 64([[EDX]],[[ECX]],4), [[ECX:%e.x]]
2863; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L39$pb([[EAX]]), [[EAX:%e.x]]
2864; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002865; DARWIN-32-PIC-NEXT: ret
2866
2867; DARWIN-64-STATIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002868; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2869; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
2870; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2871; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002872; DARWIN-64-STATIC-NEXT: ret
2873
2874; DARWIN-64-DYNAMIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002875; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2876; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
2877; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2878; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002879; DARWIN-64-DYNAMIC-NEXT: ret
2880
2881; DARWIN-64-PIC: _oxf01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002882; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
2883; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
2884; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2885; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002886; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002887}
2888
2889define void @off02(i64 %i) nounwind {
2890entry:
2891 %0 = load i32** @ptr, align 8
2892 %1 = add i64 %i, 16
2893 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
2894 %3 = load i32* %2, align 4
2895 %4 = getelementptr i32* %0, i64 %1
2896 store i32 %3, i32* %4, align 4
2897 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002898; LINUX-64-STATIC: off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002899; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]]
2900; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
2901; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002902; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002903
2904; LINUX-32-STATIC: off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002905; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2906; LINUX-32-STATIC-NEXT: movl src+64(,[[EAX]],4), [[ECX:%e.x]]
2907; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]]
2908; LINUX-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002909; LINUX-32-STATIC-NEXT: ret
2910
2911; LINUX-32-PIC: off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002912; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
2913; LINUX-32-PIC-NEXT: movl src+64(,[[EAX]],4), [[ECX:%e.x]]
2914; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]]
2915; LINUX-32-PIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002916; LINUX-32-PIC-NEXT: ret
2917
2918; LINUX-64-PIC: off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002919; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
2920; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2921; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2922; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2923; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002924; LINUX-64-PIC-NEXT: ret
2925
2926; DARWIN-32-STATIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002927; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2928; DARWIN-32-STATIC-NEXT: movl _src+64(,[[EAX]],4), [[ECX:%e.x]]
2929; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]]
2930; DARWIN-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002931; DARWIN-32-STATIC-NEXT: ret
2932
2933; DARWIN-32-DYNAMIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002934; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
2935; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]]
2936; DARWIN-32-DYNAMIC-NEXT: movl 64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
2937; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]]
2938; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]]
2939; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002940; DARWIN-32-DYNAMIC-NEXT: ret
2941
2942; DARWIN-32-PIC: _off02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00002943; DARWIN-32-PIC: calll L40$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00002944; DARWIN-32-PIC-NEXT: L40$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002945; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
2946; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
2947; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L40$pb([[EAX]]), [[EDX:%e.x]]
2948; DARWIN-32-PIC-NEXT: movl 64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
2949; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L40$pb([[EAX]]), [[EAX:%e.x]]
2950; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
2951; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002952; DARWIN-32-PIC-NEXT: ret
2953
2954; DARWIN-64-STATIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002955; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2956; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2957; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2958; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2959; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002960; DARWIN-64-STATIC-NEXT: ret
2961
2962; DARWIN-64-DYNAMIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002963; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2964; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2965; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2966; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2967; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002968; DARWIN-64-DYNAMIC-NEXT: ret
2969
2970; DARWIN-64-PIC: _off02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002971; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
2972; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
2973; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
2974; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
2975; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002976; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00002977}
2978
2979define void @oxf02(i64 %i) nounwind {
2980entry:
2981 %0 = load i32** @ptr, align 8
2982 %1 = add i64 %i, 16
2983 %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1
2984 %3 = load i32* %2, align 4
2985 %4 = getelementptr i32* %0, i64 %1
2986 store i32 %3, i32* %4, align 4
2987 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00002988; LINUX-64-STATIC: oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002989; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]]
2990; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
2991; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00002992; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002993
2994; LINUX-32-STATIC: oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00002995; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
2996; LINUX-32-STATIC-NEXT: movl xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
2997; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]]
2998; LINUX-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00002999; LINUX-32-STATIC-NEXT: ret
3000
3001; LINUX-32-PIC: oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003002; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
3003; LINUX-32-PIC-NEXT: movl xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3004; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]]
3005; LINUX-32-PIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003006; LINUX-32-PIC-NEXT: ret
3007
3008; LINUX-64-PIC: oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003009; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3010; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3011; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3012; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3013; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003014; LINUX-64-PIC-NEXT: ret
3015
3016; DARWIN-32-STATIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003017; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3018; DARWIN-32-STATIC-NEXT: movl _xsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3019; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]]
3020; DARWIN-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003021; DARWIN-32-STATIC-NEXT: ret
3022
3023; DARWIN-32-DYNAMIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003024; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
3025; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
3026; DARWIN-32-DYNAMIC-NEXT: movl 64([[ECX]],[[EAX]],4), [[ECX:%e.x]]
3027; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]]
3028; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]]
3029; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003030; DARWIN-32-DYNAMIC-NEXT: ret
3031
3032; DARWIN-32-PIC: _oxf02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003033; DARWIN-32-PIC: calll L41$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003034; DARWIN-32-PIC-NEXT: L41$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003035; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3036; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
3037; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L41$pb([[EAX]]), [[EDX:%e.x]]
3038; DARWIN-32-PIC-NEXT: movl 64([[EDX]],[[ECX]],4), [[EDX:%e.x]]
3039; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L41$pb([[EAX]]), [[EAX:%e.x]]
3040; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
3041; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003042; DARWIN-32-PIC-NEXT: ret
3043
3044; DARWIN-64-STATIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003045; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3046; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3047; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3048; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3049; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003050; DARWIN-64-STATIC-NEXT: ret
3051
3052; DARWIN-64-DYNAMIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003053; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3054; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3055; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3056; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3057; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003058; DARWIN-64-DYNAMIC-NEXT: ret
3059
3060; DARWIN-64-PIC: _oxf02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003061; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3062; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3063; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3064; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3065; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003066; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003067}
3068
3069define void @off03(i64 %i) nounwind {
3070entry:
3071 %0 = add i64 %i, 16
3072 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
3073 %2 = load i32* %1, align 4
3074 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
3075 store i32 %2, i32* %3, align 4
3076 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003077; LINUX-64-STATIC: off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003078; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]]
3079; LINUX-64-STATIC: movl [[EAX]], ddst+64(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00003080; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003081
3082; LINUX-32-STATIC: off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003083; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3084; LINUX-32-STATIC-NEXT: movl dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3085; LINUX-32-STATIC-NEXT: movl [[ECX]], ddst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003086; LINUX-32-STATIC-NEXT: ret
3087
3088; LINUX-32-PIC: off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003089; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
3090; LINUX-32-PIC-NEXT: movl dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3091; LINUX-32-PIC-NEXT: movl [[ECX]], ddst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003092; LINUX-32-PIC-NEXT: ret
3093
3094; LINUX-64-PIC: off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003095; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3096; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3097; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]]
3098; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003099; LINUX-64-PIC-NEXT: ret
3100
3101; DARWIN-32-STATIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003102; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3103; DARWIN-32-STATIC-NEXT: movl _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3104; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ddst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003105; DARWIN-32-STATIC-NEXT: ret
3106
3107; DARWIN-32-DYNAMIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003108; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
3109; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3110; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ddst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003111; DARWIN-32-DYNAMIC-NEXT: ret
3112
3113; DARWIN-32-PIC: _off03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003114; DARWIN-32-PIC: calll L42$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003115; DARWIN-32-PIC-NEXT: L42$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003116; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3117; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
3118; DARWIN-32-PIC-NEXT: movl (_dsrc-L42$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3119; DARWIN-32-PIC-NEXT: movl [[EDX]], (_ddst-L42$pb)+64([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003120; DARWIN-32-PIC-NEXT: ret
3121
3122; DARWIN-64-STATIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003123; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
3124; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3125; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
3126; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003127; DARWIN-64-STATIC-NEXT: ret
3128
3129; DARWIN-64-DYNAMIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003130; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
3131; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3132; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
3133; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003134; DARWIN-64-DYNAMIC-NEXT: ret
3135
3136; DARWIN-64-PIC: _off03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003137; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
3138; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3139; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
3140; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003141; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003142}
3143
3144define void @off04(i64 %i) nounwind {
3145entry:
3146 %.sum = add i64 %i, 16
3147 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
3148 store i32* %0, i32** @dptr, align 8
3149 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003150; LINUX-64-STATIC: off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003151; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), [[RAX:%r.x]]
3152; LINUX-64-STATIC: movq [[RAX]], dptr
Chris Lattner4f066492009-07-11 20:29:19 +00003153; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003154
3155; LINUX-32-STATIC: off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003156; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3157; LINUX-32-STATIC-NEXT: leal ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3158; LINUX-32-STATIC-NEXT: movl [[EAX]], dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003159; LINUX-32-STATIC-NEXT: ret
3160
3161; LINUX-32-PIC: off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003162; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
3163; LINUX-32-PIC-NEXT: leal ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3164; LINUX-32-PIC-NEXT: movl [[EAX]], dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003165; LINUX-32-PIC-NEXT: ret
3166
3167; LINUX-64-PIC: off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003168; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
3169; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
3170; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3171; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003172; LINUX-64-PIC-NEXT: ret
3173
3174; DARWIN-32-STATIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003175; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3176; DARWIN-32-STATIC-NEXT: leal _ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3177; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003178; DARWIN-32-STATIC-NEXT: ret
3179
3180; DARWIN-32-DYNAMIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003181; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
3182; DARWIN-32-DYNAMIC-NEXT: leal _ddst+64(,[[EAX]],4), [[EAX:%e.x]]
3183; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003184; DARWIN-32-DYNAMIC-NEXT: ret
3185
3186; DARWIN-32-PIC: _off04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003187; DARWIN-32-PIC: calll L43$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003188; DARWIN-32-PIC-NEXT: L43$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003189; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3190; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
3191; DARWIN-32-PIC-NEXT: leal (_ddst-L43$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]]
3192; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L43$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003193; DARWIN-32-PIC-NEXT: ret
3194
3195; DARWIN-64-STATIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003196; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
3197; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
3198; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003199; DARWIN-64-STATIC-NEXT: ret
3200
3201; DARWIN-64-DYNAMIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003202; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
3203; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
3204; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003205; DARWIN-64-DYNAMIC-NEXT: ret
3206
3207; DARWIN-64-PIC: _off04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003208; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
3209; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
3210; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003211; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003212}
3213
3214define void @off05(i64 %i) nounwind {
3215entry:
3216 %0 = load i32** @dptr, align 8
3217 %1 = add i64 %i, 16
3218 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
3219 %3 = load i32* %2, align 4
3220 %4 = getelementptr i32* %0, i64 %1
3221 store i32 %3, i32* %4, align 4
3222 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003223; LINUX-64-STATIC: off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003224; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]]
3225; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
3226; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00003227; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003228
3229; LINUX-32-STATIC: off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003230; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3231; LINUX-32-STATIC-NEXT: movl dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3232; LINUX-32-STATIC-NEXT: movl dptr, [[EDX:%e.x]]
3233; LINUX-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003234; LINUX-32-STATIC-NEXT: ret
3235
3236; LINUX-32-PIC: off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003237; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
3238; LINUX-32-PIC-NEXT: movl dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3239; LINUX-32-PIC-NEXT: movl dptr, [[EDX:%e.x]]
3240; LINUX-32-PIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003241; LINUX-32-PIC-NEXT: ret
3242
3243; LINUX-64-PIC: off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003244; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3245; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3246; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3247; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3248; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003249; LINUX-64-PIC-NEXT: ret
3250
3251; DARWIN-32-STATIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003252; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3253; DARWIN-32-STATIC-NEXT: movl _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3254; DARWIN-32-STATIC-NEXT: movl _dptr, [[EDX:%e.x]]
3255; DARWIN-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003256; DARWIN-32-STATIC-NEXT: ret
3257
3258; DARWIN-32-DYNAMIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003259; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
3260; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3261; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[EDX:%e.x]]
3262; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003263; DARWIN-32-DYNAMIC-NEXT: ret
3264
3265; DARWIN-32-PIC: _off05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003266; DARWIN-32-PIC: calll L44$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003267; DARWIN-32-PIC-NEXT: L44$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003268; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3269; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
3270; DARWIN-32-PIC-NEXT: movl (_dsrc-L44$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3271; DARWIN-32-PIC-NEXT: movl _dptr-L44$pb([[EAX]]), [[EAX:%e.x]]
3272; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003273; DARWIN-32-PIC-NEXT: ret
3274
3275; DARWIN-64-STATIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003276; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
3277; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3278; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
3279; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003280; DARWIN-64-STATIC-NEXT: ret
3281
3282; DARWIN-64-DYNAMIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003283; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
3284; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3285; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
3286; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003287; DARWIN-64-DYNAMIC-NEXT: ret
3288
3289; DARWIN-64-PIC: _off05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003290; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
3291; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3292; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
3293; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003294; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003295}
3296
3297define void @off06(i64 %i) nounwind {
3298entry:
3299 %0 = add i64 %i, 16
3300 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
3301 %2 = load i32* %1, align 4
3302 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
3303 store i32 %2, i32* %3, align 4
3304 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003305; LINUX-64-STATIC: off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003306; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]]
3307; LINUX-64-STATIC: movl [[EAX]], ldst+64(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00003308; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003309
3310; LINUX-32-STATIC: off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003311; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3312; LINUX-32-STATIC-NEXT: movl lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3313; LINUX-32-STATIC-NEXT: movl [[ECX]], ldst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003314; LINUX-32-STATIC-NEXT: ret
3315
3316; LINUX-32-PIC: off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003317; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
3318; LINUX-32-PIC-NEXT: movl lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3319; LINUX-32-PIC-NEXT: movl [[ECX]], ldst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003320; LINUX-32-PIC-NEXT: ret
3321
3322; LINUX-64-PIC: off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003323; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
3324; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3325; LINUX-64-PIC-NEXT: leaq ldst(%rip), [[RCX:%r.x]]
3326; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003327; LINUX-64-PIC-NEXT: ret
3328
3329; DARWIN-32-STATIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003330; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3331; DARWIN-32-STATIC-NEXT: movl _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3332; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ldst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003333; DARWIN-32-STATIC-NEXT: ret
3334
3335; DARWIN-32-DYNAMIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003336; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
3337; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3338; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ldst+64(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003339; DARWIN-32-DYNAMIC-NEXT: ret
3340
3341; DARWIN-32-PIC: _off06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003342; DARWIN-32-PIC: calll L45$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003343; DARWIN-32-PIC-NEXT: L45$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003344; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3345; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
3346; DARWIN-32-PIC-NEXT: movl (_lsrc-L45$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3347; DARWIN-32-PIC-NEXT: movl [[EDX]], (_ldst-L45$pb)+64([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003348; DARWIN-32-PIC-NEXT: ret
3349
3350; DARWIN-64-STATIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003351; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
3352; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3353; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
3354; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003355; DARWIN-64-STATIC-NEXT: ret
3356
3357; DARWIN-64-DYNAMIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003358; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
3359; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3360; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
3361; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003362; DARWIN-64-DYNAMIC-NEXT: ret
3363
3364; DARWIN-64-PIC: _off06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003365; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
3366; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3367; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
3368; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003369; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003370}
3371
3372define void @off07(i64 %i) nounwind {
3373entry:
3374 %.sum = add i64 %i, 16
3375 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
3376 store i32* %0, i32** @lptr, align 8
3377 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003378; LINUX-64-STATIC: off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003379; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), [[RAX:%r.x]]
3380; LINUX-64-STATIC: movq [[RAX]], lptr
Chris Lattner4f066492009-07-11 20:29:19 +00003381; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003382
3383; LINUX-32-STATIC: off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003384; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3385; LINUX-32-STATIC-NEXT: leal ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3386; LINUX-32-STATIC-NEXT: movl [[EAX]], lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003387; LINUX-32-STATIC-NEXT: ret
3388
3389; LINUX-32-PIC: off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003390; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
3391; LINUX-32-PIC-NEXT: leal ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3392; LINUX-32-PIC-NEXT: movl [[EAX]], lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003393; LINUX-32-PIC-NEXT: ret
3394
3395; LINUX-64-PIC: off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003396; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
3397; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
3398; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003399; LINUX-64-PIC-NEXT: ret
3400
3401; DARWIN-32-STATIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003402; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3403; DARWIN-32-STATIC-NEXT: leal _ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3404; DARWIN-32-STATIC-NEXT: movl [[EAX]], _lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003405; DARWIN-32-STATIC-NEXT: ret
3406
3407; DARWIN-32-DYNAMIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003408; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
3409; DARWIN-32-DYNAMIC-NEXT: leal _ldst+64(,[[EAX]],4), [[EAX:%e.x]]
3410; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003411; DARWIN-32-DYNAMIC-NEXT: ret
3412
3413; DARWIN-32-PIC: _off07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003414; DARWIN-32-PIC: calll L46$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003415; DARWIN-32-PIC-NEXT: L46$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003416; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3417; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
3418; DARWIN-32-PIC-NEXT: leal (_ldst-L46$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]]
3419; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L46$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003420; DARWIN-32-PIC-NEXT: ret
3421
3422; DARWIN-64-STATIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003423; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
3424; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
3425; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003426; DARWIN-64-STATIC-NEXT: ret
3427
3428; DARWIN-64-DYNAMIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003429; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
3430; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
3431; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003432; DARWIN-64-DYNAMIC-NEXT: ret
3433
3434; DARWIN-64-PIC: _off07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003435; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
3436; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]]
3437; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003438; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003439}
3440
3441define void @off08(i64 %i) nounwind {
3442entry:
3443 %0 = load i32** @lptr, align 8
3444 %1 = add i64 %i, 16
3445 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
3446 %3 = load i32* %2, align 4
3447 %4 = getelementptr i32* %0, i64 %1
3448 store i32 %3, i32* %4, align 4
3449 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003450; LINUX-64-STATIC: off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003451; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]]
3452; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
3453; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00003454; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003455
3456; LINUX-32-STATIC: off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003457; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3458; LINUX-32-STATIC-NEXT: movl lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3459; LINUX-32-STATIC-NEXT: movl lptr, [[EDX:%e.x]]
3460; LINUX-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003461; LINUX-32-STATIC-NEXT: ret
3462
3463; LINUX-32-PIC: off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003464; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
3465; LINUX-32-PIC-NEXT: movl lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3466; LINUX-32-PIC-NEXT: movl lptr, [[EDX:%e.x]]
3467; LINUX-32-PIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003468; LINUX-32-PIC-NEXT: ret
3469
3470; LINUX-64-PIC: off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003471; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
3472; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3473; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]]
3474; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003475; LINUX-64-PIC-NEXT: ret
3476
3477; DARWIN-32-STATIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003478; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
3479; DARWIN-32-STATIC-NEXT: movl _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3480; DARWIN-32-STATIC-NEXT: movl _lptr, [[EDX:%e.x]]
3481; DARWIN-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003482; DARWIN-32-STATIC-NEXT: ret
3483
3484; DARWIN-32-DYNAMIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003485; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
3486; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+64(,[[EAX]],4), [[ECX:%e.x]]
3487; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[EDX:%e.x]]
3488; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003489; DARWIN-32-DYNAMIC-NEXT: ret
3490
3491; DARWIN-32-PIC: _off08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003492; DARWIN-32-PIC: calll L47$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003493; DARWIN-32-PIC-NEXT: L47$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003494; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3495; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
3496; DARWIN-32-PIC-NEXT: movl (_lsrc-L47$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]]
3497; DARWIN-32-PIC-NEXT: movl _lptr-L47$pb([[EAX]]), [[EAX:%e.x]]
3498; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003499; DARWIN-32-PIC-NEXT: ret
3500
3501; DARWIN-64-STATIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003502; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
3503; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3504; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
3505; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003506; DARWIN-64-STATIC-NEXT: ret
3507
3508; DARWIN-64-DYNAMIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003509; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
3510; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3511; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
3512; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003513; DARWIN-64-DYNAMIC-NEXT: ret
3514
3515; DARWIN-64-PIC: _off08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003516; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
3517; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]]
3518; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
3519; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003520; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003521}
3522
3523define void @moo00(i64 %i) nounwind {
3524entry:
3525 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3526 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4
3527 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003528; LINUX-64-STATIC: moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003529; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]]
3530; LINUX-64-STATIC: movl [[EAX]], dst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003531; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003532
3533; LINUX-32-STATIC: moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003534; LINUX-32-STATIC: movl src+262144, [[EAX:%e.x]]
3535; LINUX-32-STATIC-NEXT: movl [[EAX]], dst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003536; LINUX-32-STATIC-NEXT: ret
3537
3538; LINUX-32-PIC: moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003539; LINUX-32-PIC: movl src+262144, [[EAX:%e.x]]
3540; LINUX-32-PIC-NEXT: movl [[EAX]], dst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003541; LINUX-32-PIC-NEXT: ret
3542
3543; LINUX-64-PIC: moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003544; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
3545; LINUX-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3546; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]]
3547; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003548; LINUX-64-PIC-NEXT: ret
3549
3550; DARWIN-32-STATIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003551; DARWIN-32-STATIC: movl _src+262144, [[EAX:%e.x]]
3552; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003553; DARWIN-32-STATIC-NEXT: ret
3554
3555; DARWIN-32-DYNAMIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003556; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]]
3557; DARWIN-32-DYNAMIC-NEXT: movl 262144([[EAX]]), [[EAX:%e.x]]
3558; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]]
3559; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003560; DARWIN-32-DYNAMIC-NEXT: ret
3561
3562; DARWIN-32-PIC: _moo00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003563; DARWIN-32-PIC: calll L48$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003564; DARWIN-32-PIC-NEXT: L48$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003565; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3566; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L48$pb([[EAX]]), [[ECX:%e.x]]
3567; DARWIN-32-PIC-NEXT: movl 262144([[ECX]]), [[ECX:%e.x]]
3568; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L48$pb([[EAX]]), [[EAX:%e.x]]
3569; DARWIN-32-PIC-NEXT: movl [[ECX]], 262144([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003570; DARWIN-32-PIC-NEXT: ret
3571
3572; DARWIN-64-STATIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003573; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
3574; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3575; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3576; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003577; DARWIN-64-STATIC-NEXT: ret
3578
3579; DARWIN-64-DYNAMIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003580; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
3581; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3582; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3583; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003584; DARWIN-64-DYNAMIC-NEXT: ret
3585
3586; DARWIN-64-PIC: _moo00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003587; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
3588; DARWIN-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3589; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
3590; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003591; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003592}
3593
3594define void @moo01(i64 %i) nounwind {
3595entry:
3596 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
3597 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003598; LINUX-64-STATIC: moo01:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00003599; LINUX-64-STATIC: movq $dst+262144, ptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003600; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003601
3602; LINUX-32-STATIC: moo01:
3603; LINUX-32-STATIC: movl $dst+262144, ptr
3604; LINUX-32-STATIC-NEXT: ret
3605
3606; LINUX-32-PIC: moo01:
3607; LINUX-32-PIC: movl $dst+262144, ptr
3608; LINUX-32-PIC-NEXT: ret
3609
3610; LINUX-64-PIC: moo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003611; LINUX-64-PIC: movl $262144, [[EAX:%e.x]]
3612; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), [[RAX:%r.x]]
3613; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3614; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003615; LINUX-64-PIC-NEXT: ret
3616
3617; DARWIN-32-STATIC: _moo01:
3618; DARWIN-32-STATIC: movl $_dst+262144, _ptr
3619; DARWIN-32-STATIC-NEXT: ret
3620
3621; DARWIN-32-DYNAMIC: _moo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003622; DARWIN-32-DYNAMIC: movl $262144, [[EAX:%e.x]]
3623; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, [[EAX:%e.x]]
3624; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
3625; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003626; DARWIN-32-DYNAMIC-NEXT: ret
3627
3628; DARWIN-32-PIC: _moo01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003629; DARWIN-32-PIC: calll L49$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003630; DARWIN-32-PIC-NEXT: L49$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003631; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3632; DARWIN-32-PIC-NEXT: movl $262144, [[ECX:%e.x]]
3633; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L49$pb([[EAX]]), [[ECX:%e.x]]
3634; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L49$pb([[EAX]]), [[EAX:%e.x]]
3635; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003636; DARWIN-32-PIC-NEXT: ret
3637
3638; DARWIN-64-STATIC: _moo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003639; DARWIN-64-STATIC: movl $262144, [[EAX:%e.x]]
3640; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3641; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3642; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003643; DARWIN-64-STATIC-NEXT: ret
3644
3645; DARWIN-64-DYNAMIC: _moo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003646; DARWIN-64-DYNAMIC: movl $262144, [[EAX:%e.x]]
3647; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3648; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3649; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003650; DARWIN-64-DYNAMIC-NEXT: ret
3651
3652; DARWIN-64-PIC: _moo01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003653; DARWIN-64-PIC: movl $262144, [[EAX:%e.x]]
3654; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
3655; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3656; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003657; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003658}
3659
3660define void @moo02(i64 %i) nounwind {
3661entry:
3662 %0 = load i32** @ptr, align 8
3663 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
3664 %2 = getelementptr i32* %0, i64 65536
3665 store i32 %1, i32* %2, align 4
3666 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003667; LINUX-64-STATIC: moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003668; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]]
3669; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
3670; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]])
Chris Lattner4f066492009-07-11 20:29:19 +00003671; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003672
3673; LINUX-32-STATIC: moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003674; LINUX-32-STATIC: movl src+262144, [[EAX:%e.x]]
3675; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]]
3676; LINUX-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003677; LINUX-32-STATIC-NEXT: ret
3678
3679; LINUX-32-PIC: moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003680; LINUX-32-PIC: movl src+262144, [[EAX:%e.x]]
3681; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]]
3682; LINUX-32-PIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003683; LINUX-32-PIC-NEXT: ret
3684
3685; LINUX-64-PIC: moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003686; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
3687; LINUX-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3688; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3689; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3690; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003691; LINUX-64-PIC-NEXT: ret
3692
3693; DARWIN-32-STATIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003694; DARWIN-32-STATIC: movl _src+262144, [[EAX:%e.x]]
3695; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]]
3696; DARWIN-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003697; DARWIN-32-STATIC-NEXT: ret
3698
3699; DARWIN-32-DYNAMIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003700; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]]
3701; DARWIN-32-DYNAMIC-NEXT: movl 262144([[EAX]]), [[EAX:%e.x]]
3702; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
3703; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]]
3704; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003705; DARWIN-32-DYNAMIC-NEXT: ret
3706
3707; DARWIN-32-PIC: _moo02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003708; DARWIN-32-PIC: calll L50$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003709; DARWIN-32-PIC-NEXT: L50$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003710; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3711; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L50$pb([[EAX]]), [[ECX:%e.x]]
3712; DARWIN-32-PIC-NEXT: movl 262144([[ECX]]), [[ECX:%e.x]]
3713; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L50$pb([[EAX]]), [[EAX:%e.x]]
3714; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
3715; DARWIN-32-PIC-NEXT: movl [[ECX]], 262144([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003716; DARWIN-32-PIC-NEXT: ret
3717
3718; DARWIN-64-STATIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003719; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
3720; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3721; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3722; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3723; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003724; DARWIN-64-STATIC-NEXT: ret
3725
3726; DARWIN-64-DYNAMIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003727; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
3728; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3729; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3730; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3731; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003732; DARWIN-64-DYNAMIC-NEXT: ret
3733
3734; DARWIN-64-PIC: _moo02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003735; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
3736; DARWIN-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3737; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
3738; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3739; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003740; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003741}
3742
3743define void @moo03(i64 %i) nounwind {
3744entry:
3745 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3746 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32
3747 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003748; LINUX-64-STATIC: moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003749; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]]
3750; LINUX-64-STATIC: movl [[EAX]], ddst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003751; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003752
3753; LINUX-32-STATIC: moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003754; LINUX-32-STATIC: movl dsrc+262144, [[EAX:%e.x]]
3755; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003756; LINUX-32-STATIC-NEXT: ret
3757
3758; LINUX-32-PIC: moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003759; LINUX-32-PIC: movl dsrc+262144, [[EAX:%e.x]]
3760; LINUX-32-PIC-NEXT: movl [[EAX]], ddst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003761; LINUX-32-PIC-NEXT: ret
3762
3763; LINUX-64-PIC: moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003764; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3765; LINUX-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3766; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]]
3767; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003768; LINUX-64-PIC-NEXT: ret
3769
3770; DARWIN-32-STATIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003771; DARWIN-32-STATIC: movl _dsrc+262144, [[EAX:%e.x]]
3772; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003773; DARWIN-32-STATIC-NEXT: ret
3774
3775; DARWIN-32-DYNAMIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003776; DARWIN-32-DYNAMIC: movl _dsrc+262144, [[EAX:%e.x]]
3777; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003778; DARWIN-32-DYNAMIC-NEXT: ret
3779
3780; DARWIN-32-PIC: _moo03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003781; DARWIN-32-PIC: calll L51$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003782; DARWIN-32-PIC-NEXT: L51$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003783; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3784; DARWIN-32-PIC-NEXT: movl (_dsrc-L51$pb)+262144([[EAX]]), [[ECX:%e.x]]
3785; DARWIN-32-PIC-NEXT: movl [[ECX]], (_ddst-L51$pb)+262144([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003786; DARWIN-32-PIC-NEXT: ret
3787
3788; DARWIN-64-STATIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003789; DARWIN-64-STATIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3790; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003791; DARWIN-64-STATIC-NEXT: ret
3792
3793; DARWIN-64-DYNAMIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003794; DARWIN-64-DYNAMIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3795; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003796; DARWIN-64-DYNAMIC-NEXT: ret
3797
3798; DARWIN-64-PIC: _moo03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003799; DARWIN-64-PIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3800; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003801; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003802}
3803
3804define void @moo04(i64 %i) nounwind {
3805entry:
3806 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
3807 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003808; LINUX-64-STATIC: moo04:
3809; LINUX-64-STATIC: movq $ddst+262144, dptr
3810; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003811
3812; LINUX-32-STATIC: moo04:
3813; LINUX-32-STATIC: movl $ddst+262144, dptr
3814; LINUX-32-STATIC-NEXT: ret
3815
3816; LINUX-32-PIC: moo04:
3817; LINUX-32-PIC: movl $ddst+262144, dptr
3818; LINUX-32-PIC-NEXT: ret
3819
3820; LINUX-64-PIC: moo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003821; LINUX-64-PIC: movl $262144, [[EAX:%e.x]]
3822; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
3823; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3824; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003825; LINUX-64-PIC-NEXT: ret
3826
3827; DARWIN-32-STATIC: _moo04:
3828; DARWIN-32-STATIC: movl $_ddst+262144, _dptr
3829; DARWIN-32-STATIC-NEXT: ret
3830
3831; DARWIN-32-DYNAMIC: _moo04:
3832; DARWIN-32-DYNAMIC: movl $_ddst+262144, _dptr
3833; DARWIN-32-DYNAMIC-NEXT: ret
3834
3835; DARWIN-32-PIC: _moo04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003836; DARWIN-32-PIC: calll L52$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003837; DARWIN-32-PIC-NEXT: L52$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003838; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3839; DARWIN-32-PIC-NEXT: leal (_ddst-L52$pb)+262144([[EAX]]), [[ECX:%e.x]]
3840; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L52$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003841; DARWIN-32-PIC-NEXT: ret
3842
3843; DARWIN-64-STATIC: _moo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003844; DARWIN-64-STATIC: leaq _ddst+262144(%rip), [[RAX:%r.x]]
3845; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003846; DARWIN-64-STATIC-NEXT: ret
3847
3848; DARWIN-64-DYNAMIC: _moo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003849; DARWIN-64-DYNAMIC: leaq _ddst+262144(%rip), [[RAX:%r.x]]
3850; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003851; DARWIN-64-DYNAMIC-NEXT: ret
3852
3853; DARWIN-64-PIC: _moo04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003854; DARWIN-64-PIC: leaq _ddst+262144(%rip), [[RAX:%r.x]]
3855; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003856; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003857}
3858
3859define void @moo05(i64 %i) nounwind {
3860entry:
3861 %0 = load i32** @dptr, align 8
3862 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
3863 %2 = getelementptr i32* %0, i64 65536
3864 store i32 %1, i32* %2, align 4
3865 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003866; LINUX-64-STATIC: moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003867; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]]
3868; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
3869; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]])
Chris Lattner4f066492009-07-11 20:29:19 +00003870; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003871
3872; LINUX-32-STATIC: moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003873; LINUX-32-STATIC: movl dsrc+262144, [[EAX:%e.x]]
3874; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]]
3875; LINUX-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003876; LINUX-32-STATIC-NEXT: ret
3877
3878; LINUX-32-PIC: moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003879; LINUX-32-PIC: movl dsrc+262144, [[EAX:%e.x]]
3880; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]]
3881; LINUX-32-PIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003882; LINUX-32-PIC-NEXT: ret
3883
3884; LINUX-64-PIC: moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003885; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
3886; LINUX-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]]
3887; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
3888; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
3889; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003890; LINUX-64-PIC-NEXT: ret
3891
3892; DARWIN-32-STATIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003893; DARWIN-32-STATIC: movl _dsrc+262144, [[EAX:%e.x]]
3894; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]]
3895; DARWIN-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003896; DARWIN-32-STATIC-NEXT: ret
3897
3898; DARWIN-32-DYNAMIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003899; DARWIN-32-DYNAMIC: movl _dsrc+262144, [[EAX:%e.x]]
3900; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]]
3901; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003902; DARWIN-32-DYNAMIC-NEXT: ret
3903
3904; DARWIN-32-PIC: _moo05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003905; DARWIN-32-PIC: calll L53$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003906; DARWIN-32-PIC-NEXT: L53$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003907; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3908; DARWIN-32-PIC-NEXT: movl (_dsrc-L53$pb)+262144([[EAX]]), [[ECX:%e.x]]
3909; DARWIN-32-PIC-NEXT: movl _dptr-L53$pb([[EAX]]), [[EAX:%e.x]]
3910; DARWIN-32-PIC-NEXT: movl [[ECX]], 262144([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003911; DARWIN-32-PIC-NEXT: ret
3912
3913; DARWIN-64-STATIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003914; DARWIN-64-STATIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3915; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
3916; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003917; DARWIN-64-STATIC-NEXT: ret
3918
3919; DARWIN-64-DYNAMIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003920; DARWIN-64-DYNAMIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3921; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
3922; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003923; DARWIN-64-DYNAMIC-NEXT: ret
3924
3925; DARWIN-64-PIC: _moo05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003926; DARWIN-64-PIC: movl _dsrc+262144(%rip), [[EAX:%e.x]]
3927; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
3928; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003929; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003930}
3931
3932define void @moo06(i64 %i) nounwind {
3933entry:
3934 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
3935 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4
3936 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003937; LINUX-64-STATIC: moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003938; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]]
3939; LINUX-64-STATIC: movl [[EAX]], ldst+262144(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00003940; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003941
3942; LINUX-32-STATIC: moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003943; LINUX-32-STATIC: movl lsrc+262144, [[EAX:%e.x]]
3944; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003945; LINUX-32-STATIC-NEXT: ret
3946
3947; LINUX-32-PIC: moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003948; LINUX-32-PIC: movl lsrc+262144, [[EAX:%e.x]]
3949; LINUX-32-PIC-NEXT: movl [[EAX]], ldst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003950; LINUX-32-PIC-NEXT: ret
3951
3952; LINUX-64-PIC: moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003953; LINUX-64-PIC: movl lsrc+262144(%rip), [[EAX:%e.x]]
3954; LINUX-64-PIC-NEXT: movl [[EAX]], ldst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003955; LINUX-64-PIC-NEXT: ret
3956
3957; DARWIN-32-STATIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003958; DARWIN-32-STATIC: movl _lsrc+262144, [[EAX:%e.x]]
3959; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003960; DARWIN-32-STATIC-NEXT: ret
3961
3962; DARWIN-32-DYNAMIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003963; DARWIN-32-DYNAMIC: movl _lsrc+262144, [[EAX:%e.x]]
3964; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst+262144
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003965; DARWIN-32-DYNAMIC-NEXT: ret
3966
3967; DARWIN-32-PIC: _moo06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00003968; DARWIN-32-PIC: calll L54$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00003969; DARWIN-32-PIC-NEXT: L54$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003970; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
3971; DARWIN-32-PIC-NEXT: movl (_lsrc-L54$pb)+262144([[EAX]]), [[ECX:%e.x]]
3972; DARWIN-32-PIC-NEXT: movl [[ECX]], (_ldst-L54$pb)+262144([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003973; DARWIN-32-PIC-NEXT: ret
3974
3975; DARWIN-64-STATIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003976; DARWIN-64-STATIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
3977; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003978; DARWIN-64-STATIC-NEXT: ret
3979
3980; DARWIN-64-DYNAMIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003981; DARWIN-64-DYNAMIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
3982; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003983; DARWIN-64-DYNAMIC-NEXT: ret
3984
3985; DARWIN-64-PIC: _moo06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00003986; DARWIN-64-PIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
3987; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst+262144(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003988; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00003989}
3990
3991define void @moo07(i64 %i) nounwind {
3992entry:
3993 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
3994 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00003995; LINUX-64-STATIC: moo07:
3996; LINUX-64-STATIC: movq $ldst+262144, lptr
3997; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00003998
3999; LINUX-32-STATIC: moo07:
4000; LINUX-32-STATIC: movl $ldst+262144, lptr
4001; LINUX-32-STATIC-NEXT: ret
4002
4003; LINUX-32-PIC: moo07:
4004; LINUX-32-PIC: movl $ldst+262144, lptr
4005; LINUX-32-PIC-NEXT: ret
4006
4007; LINUX-64-PIC: moo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004008; LINUX-64-PIC: leaq ldst+262144(%rip), [[RAX:%r.x]]
4009; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004010; LINUX-64-PIC-NEXT: ret
4011
4012; DARWIN-32-STATIC: _moo07:
4013; DARWIN-32-STATIC: movl $_ldst+262144, _lptr
4014; DARWIN-32-STATIC-NEXT: ret
4015
4016; DARWIN-32-DYNAMIC: _moo07:
4017; DARWIN-32-DYNAMIC: movl $_ldst+262144, _lptr
4018; DARWIN-32-DYNAMIC-NEXT: ret
4019
4020; DARWIN-32-PIC: _moo07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004021; DARWIN-32-PIC: calll L55$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004022; DARWIN-32-PIC-NEXT: L55$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004023; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4024; DARWIN-32-PIC-NEXT: leal (_ldst-L55$pb)+262144([[EAX]]), [[ECX:%e.x]]
4025; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L55$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004026; DARWIN-32-PIC-NEXT: ret
4027
4028; DARWIN-64-STATIC: _moo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004029; DARWIN-64-STATIC: leaq _ldst+262144(%rip), [[RAX:%r.x]]
4030; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004031; DARWIN-64-STATIC-NEXT: ret
4032
4033; DARWIN-64-DYNAMIC: _moo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004034; DARWIN-64-DYNAMIC: leaq _ldst+262144(%rip), [[RAX:%r.x]]
4035; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004036; DARWIN-64-DYNAMIC-NEXT: ret
4037
4038; DARWIN-64-PIC: _moo07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004039; DARWIN-64-PIC: leaq _ldst+262144(%rip), [[RAX:%r.x]]
4040; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004041; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004042}
4043
4044define void @moo08(i64 %i) nounwind {
4045entry:
4046 %0 = load i32** @lptr, align 8
4047 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
4048 %2 = getelementptr i32* %0, i64 65536
4049 store i32 %1, i32* %2, align 4
4050 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004051; LINUX-64-STATIC: moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004052; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]]
4053; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
4054; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]])
Chris Lattner4f066492009-07-11 20:29:19 +00004055; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004056
4057; LINUX-32-STATIC: moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004058; LINUX-32-STATIC: movl lsrc+262144, [[EAX:%e.x]]
4059; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]]
4060; LINUX-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004061; LINUX-32-STATIC-NEXT: ret
4062
4063; LINUX-32-PIC: moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004064; LINUX-32-PIC: movl lsrc+262144, [[EAX:%e.x]]
4065; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]]
4066; LINUX-32-PIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004067; LINUX-32-PIC-NEXT: ret
4068
4069; LINUX-64-PIC: moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004070; LINUX-64-PIC: movl lsrc+262144(%rip), [[EAX:%e.x]]
4071; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]]
4072; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004073; LINUX-64-PIC-NEXT: ret
4074
4075; DARWIN-32-STATIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004076; DARWIN-32-STATIC: movl _lsrc+262144, [[EAX:%e.x]]
4077; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]]
4078; DARWIN-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004079; DARWIN-32-STATIC-NEXT: ret
4080
4081; DARWIN-32-DYNAMIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004082; DARWIN-32-DYNAMIC: movl _lsrc+262144, [[EAX:%e.x]]
4083; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]]
4084; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 262144([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004085; DARWIN-32-DYNAMIC-NEXT: ret
4086
4087; DARWIN-32-PIC: _moo08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004088; DARWIN-32-PIC: calll L56$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004089; DARWIN-32-PIC-NEXT: L56$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004090; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4091; DARWIN-32-PIC-NEXT: movl (_lsrc-L56$pb)+262144([[EAX]]), [[ECX:%e.x]]
4092; DARWIN-32-PIC-NEXT: movl _lptr-L56$pb([[EAX]]), [[EAX:%e.x]]
4093; DARWIN-32-PIC-NEXT: movl [[ECX]], 262144([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004094; DARWIN-32-PIC-NEXT: ret
4095
4096; DARWIN-64-STATIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004097; DARWIN-64-STATIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
4098; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
4099; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004100; DARWIN-64-STATIC-NEXT: ret
4101
4102; DARWIN-64-DYNAMIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004103; DARWIN-64-DYNAMIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
4104; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
4105; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004106; DARWIN-64-DYNAMIC-NEXT: ret
4107
4108; DARWIN-64-PIC: _moo08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004109; DARWIN-64-PIC: movl _lsrc+262144(%rip), [[EAX:%e.x]]
4110; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
4111; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004112; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004113}
4114
4115define void @big00(i64 %i) nounwind {
4116entry:
4117 %0 = add i64 %i, 65536
4118 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
4119 %2 = load i32* %1, align 4
4120 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
4121 store i32 %2, i32* %3, align 4
4122 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004123; LINUX-64-STATIC: big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004124; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]]
4125; LINUX-64-STATIC: movl [[EAX]], dst+262144(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004126; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004127
4128; LINUX-32-STATIC: big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004129; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4130; LINUX-32-STATIC-NEXT: movl src+262144(,[[EAX]],4), [[ECX:%e.x]]
4131; LINUX-32-STATIC-NEXT: movl [[ECX]], dst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004132; LINUX-32-STATIC-NEXT: ret
4133
4134; LINUX-32-PIC: big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004135; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4136; LINUX-32-PIC-NEXT: movl src+262144(,[[EAX]],4), [[ECX:%e.x]]
4137; LINUX-32-PIC-NEXT: movl [[ECX]], dst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004138; LINUX-32-PIC-NEXT: ret
4139
4140; LINUX-64-PIC: big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004141; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
4142; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4143; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]]
4144; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004145; LINUX-64-PIC-NEXT: ret
4146
4147; DARWIN-32-STATIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004148; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4149; DARWIN-32-STATIC-NEXT: movl _src+262144(,[[EAX]],4), [[ECX:%e.x]]
4150; DARWIN-32-STATIC-NEXT: movl [[ECX]], _dst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004151; DARWIN-32-STATIC-NEXT: ret
4152
4153; DARWIN-32-DYNAMIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004154; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4155; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]]
4156; DARWIN-32-DYNAMIC-NEXT: movl 262144([[ECX]],[[EAX]],4), [[ECX:%e.x]]
4157; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[EDX:%e.x]]
4158; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004159; DARWIN-32-DYNAMIC-NEXT: ret
4160
4161; DARWIN-32-PIC: _big00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004162; DARWIN-32-PIC: calll L57$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004163; DARWIN-32-PIC-NEXT: L57$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004164; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4165; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4166; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L57$pb([[EAX]]), [[EDX:%e.x]]
4167; DARWIN-32-PIC-NEXT: movl 262144([[EDX]],[[ECX]],4), [[EDX:%e.x]]
4168; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L57$pb([[EAX]]), [[EAX:%e.x]]
4169; DARWIN-32-PIC-NEXT: movl [[EDX]], 262144([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004170; DARWIN-32-PIC-NEXT: ret
4171
4172; DARWIN-64-STATIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004173; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
4174; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4175; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4176; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004177; DARWIN-64-STATIC-NEXT: ret
4178
4179; DARWIN-64-DYNAMIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004180; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
4181; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4182; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4183; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004184; DARWIN-64-DYNAMIC-NEXT: ret
4185
4186; DARWIN-64-PIC: _big00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004187; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
4188; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4189; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]]
4190; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004191; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004192}
4193
4194define void @big01(i64 %i) nounwind {
4195entry:
4196 %.sum = add i64 %i, 65536
4197 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
4198 store i32* %0, i32** @ptr, align 8
4199 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004200; LINUX-64-STATIC: big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004201; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), [[RAX:%r.x]]
4202; LINUX-64-STATIC: movq [[RAX]], ptr(%rip)
Chris Lattner4f066492009-07-11 20:29:19 +00004203; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004204
4205; LINUX-32-STATIC: big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004206; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4207; LINUX-32-STATIC-NEXT: leal dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4208; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004209; LINUX-32-STATIC-NEXT: ret
4210
4211; LINUX-32-PIC: big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004212; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4213; LINUX-32-PIC-NEXT: leal dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4214; LINUX-32-PIC-NEXT: movl [[EAX]], ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004215; LINUX-32-PIC-NEXT: ret
4216
4217; LINUX-64-PIC: big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004218; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]]
4219; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4220; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4221; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004222; LINUX-64-PIC-NEXT: ret
4223
4224; DARWIN-32-STATIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004225; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4226; DARWIN-32-STATIC-NEXT: leal _dst+262144(,[[EAX]],4), [[EAX:%e.x]]
4227; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004228; DARWIN-32-STATIC-NEXT: ret
4229
4230; DARWIN-32-DYNAMIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004231; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4232; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]]
4233; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), [[EAX:%e.x]]
4234; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
4235; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004236; DARWIN-32-DYNAMIC-NEXT: ret
4237
4238; DARWIN-32-PIC: _big01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004239; DARWIN-32-PIC: calll L58$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004240; DARWIN-32-PIC-NEXT: L58$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004241; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4242; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4243; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L58$pb([[EAX]]), [[EDX:%e.x]]
4244; DARWIN-32-PIC-NEXT: leal 262144([[EDX]],[[ECX]],4), [[ECX:%e.x]]
4245; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L58$pb([[EAX]]), [[EAX:%e.x]]
4246; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004247; DARWIN-32-PIC-NEXT: ret
4248
4249; DARWIN-64-STATIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004250; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4251; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4252; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4253; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004254; DARWIN-64-STATIC-NEXT: ret
4255
4256; DARWIN-64-DYNAMIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004257; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4258; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4259; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4260; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004261; DARWIN-64-DYNAMIC-NEXT: ret
4262
4263; DARWIN-64-PIC: _big01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004264; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
4265; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4266; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4267; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004268; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004269}
4270
4271define void @big02(i64 %i) nounwind {
4272entry:
4273 %0 = load i32** @ptr, align 8
4274 %1 = add i64 %i, 65536
4275 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
4276 %3 = load i32* %2, align 4
4277 %4 = getelementptr i32* %0, i64 %1
4278 store i32 %3, i32* %4, align 4
4279 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004280; LINUX-64-STATIC: big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004281; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]]
4282; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]]
4283; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004284; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004285
4286; LINUX-32-STATIC: big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004287; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4288; LINUX-32-STATIC-NEXT: movl src+262144(,[[EAX]],4), [[ECX:%e.x]]
4289; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]]
4290; LINUX-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004291; LINUX-32-STATIC-NEXT: ret
4292
4293; LINUX-32-PIC: big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004294; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4295; LINUX-32-PIC-NEXT: movl src+262144(,[[EAX]],4), [[ECX:%e.x]]
4296; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]]
4297; LINUX-32-PIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004298; LINUX-32-PIC-NEXT: ret
4299
4300; LINUX-64-PIC: big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004301; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
4302; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4303; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4304; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
4305; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004306; LINUX-64-PIC-NEXT: ret
4307
4308; DARWIN-32-STATIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004309; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4310; DARWIN-32-STATIC-NEXT: movl _src+262144(,[[EAX]],4), [[ECX:%e.x]]
4311; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]]
4312; DARWIN-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004313; DARWIN-32-STATIC-NEXT: ret
4314
4315; DARWIN-32-DYNAMIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004316; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4317; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]]
4318; DARWIN-32-DYNAMIC-NEXT: movl 262144([[ECX]],[[EAX]],4), [[ECX:%e.x]]
4319; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]]
4320; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]]
4321; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004322; DARWIN-32-DYNAMIC-NEXT: ret
4323
4324; DARWIN-32-PIC: _big02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004325; DARWIN-32-PIC: calll L59$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004326; DARWIN-32-PIC-NEXT: L59$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004327; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4328; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4329; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L59$pb([[EAX]]), [[EDX:%e.x]]
4330; DARWIN-32-PIC-NEXT: movl 262144([[EDX]],[[ECX]],4), [[EDX:%e.x]]
4331; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L59$pb([[EAX]]), [[EAX:%e.x]]
4332; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
4333; DARWIN-32-PIC-NEXT: movl [[EDX]], 262144([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004334; DARWIN-32-PIC-NEXT: ret
4335
4336; DARWIN-64-STATIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004337; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
4338; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4339; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4340; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
4341; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004342; DARWIN-64-STATIC-NEXT: ret
4343
4344; DARWIN-64-DYNAMIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004345; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
4346; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4347; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4348; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
4349; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004350; DARWIN-64-DYNAMIC-NEXT: ret
4351
4352; DARWIN-64-PIC: _big02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004353; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
4354; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4355; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
4356; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
4357; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004358; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004359}
4360
4361define void @big03(i64 %i) nounwind {
4362entry:
4363 %0 = add i64 %i, 65536
4364 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
4365 %2 = load i32* %1, align 4
4366 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
4367 store i32 %2, i32* %3, align 4
4368 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004369; LINUX-64-STATIC: big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004370; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4371; LINUX-64-STATIC: movl [[EAX]], ddst+262144(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004372; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004373
4374; LINUX-32-STATIC: big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004375; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4376; LINUX-32-STATIC-NEXT: movl dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4377; LINUX-32-STATIC-NEXT: movl [[ECX]], ddst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004378; LINUX-32-STATIC-NEXT: ret
4379
4380; LINUX-32-PIC: big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004381; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4382; LINUX-32-PIC-NEXT: movl dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4383; LINUX-32-PIC-NEXT: movl [[ECX]], ddst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004384; LINUX-32-PIC-NEXT: ret
4385
4386; LINUX-64-PIC: big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004387; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
4388; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4389; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]]
4390; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004391; LINUX-64-PIC-NEXT: ret
4392
4393; DARWIN-32-STATIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004394; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4395; DARWIN-32-STATIC-NEXT: movl _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4396; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ddst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004397; DARWIN-32-STATIC-NEXT: ret
4398
4399; DARWIN-32-DYNAMIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004400; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4401; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4402; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ddst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004403; DARWIN-32-DYNAMIC-NEXT: ret
4404
4405; DARWIN-32-PIC: _big03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004406; DARWIN-32-PIC: calll L60$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004407; DARWIN-32-PIC-NEXT: L60$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004408; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4409; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4410; DARWIN-32-PIC-NEXT: movl (_dsrc-L60$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4411; DARWIN-32-PIC-NEXT: movl [[EDX]], (_ddst-L60$pb)+262144([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004412; DARWIN-32-PIC-NEXT: ret
4413
4414; DARWIN-64-STATIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004415; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
4416; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4417; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
4418; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004419; DARWIN-64-STATIC-NEXT: ret
4420
4421; DARWIN-64-DYNAMIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004422; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
4423; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4424; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
4425; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004426; DARWIN-64-DYNAMIC-NEXT: ret
4427
4428; DARWIN-64-PIC: _big03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004429; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
4430; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4431; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]]
4432; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004433; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004434}
4435
4436define void @big04(i64 %i) nounwind {
4437entry:
4438 %.sum = add i64 %i, 65536
4439 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
4440 store i32* %0, i32** @dptr, align 8
4441 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004442; LINUX-64-STATIC: big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004443; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), [[RAX:%r.x]]
4444; LINUX-64-STATIC: movq [[RAX]], dptr
Chris Lattner4f066492009-07-11 20:29:19 +00004445; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004446
4447; LINUX-32-STATIC: big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004448; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4449; LINUX-32-STATIC-NEXT: leal ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4450; LINUX-32-STATIC-NEXT: movl [[EAX]], dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004451; LINUX-32-STATIC-NEXT: ret
4452
4453; LINUX-32-PIC: big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004454; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4455; LINUX-32-PIC-NEXT: leal ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4456; LINUX-32-PIC-NEXT: movl [[EAX]], dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004457; LINUX-32-PIC-NEXT: ret
4458
4459; LINUX-64-PIC: big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004460; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
4461; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4462; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
4463; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004464; LINUX-64-PIC-NEXT: ret
4465
4466; DARWIN-32-STATIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004467; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4468; DARWIN-32-STATIC-NEXT: leal _ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4469; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004470; DARWIN-32-STATIC-NEXT: ret
4471
4472; DARWIN-32-DYNAMIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004473; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4474; DARWIN-32-DYNAMIC-NEXT: leal _ddst+262144(,[[EAX]],4), [[EAX:%e.x]]
4475; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _dptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004476; DARWIN-32-DYNAMIC-NEXT: ret
4477
4478; DARWIN-32-PIC: _big04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004479; DARWIN-32-PIC: calll L61$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004480; DARWIN-32-PIC-NEXT: L61$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004481; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4482; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4483; DARWIN-32-PIC-NEXT: leal (_ddst-L61$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]]
4484; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L61$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004485; DARWIN-32-PIC-NEXT: ret
4486
4487; DARWIN-64-STATIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004488; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
4489; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4490; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004491; DARWIN-64-STATIC-NEXT: ret
4492
4493; DARWIN-64-DYNAMIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004494; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
4495; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4496; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004497; DARWIN-64-DYNAMIC-NEXT: ret
4498
4499; DARWIN-64-PIC: _big04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004500; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
4501; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4502; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004503; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004504}
4505
4506define void @big05(i64 %i) nounwind {
4507entry:
4508 %0 = load i32** @dptr, align 8
4509 %1 = add i64 %i, 65536
4510 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
4511 %3 = load i32* %2, align 4
4512 %4 = getelementptr i32* %0, i64 %1
4513 store i32 %3, i32* %4, align 4
4514 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004515; LINUX-64-STATIC: big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004516; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]]
4517; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]]
4518; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004519; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004520
4521; LINUX-32-STATIC: big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004522; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4523; LINUX-32-STATIC-NEXT: movl dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4524; LINUX-32-STATIC-NEXT: movl dptr, [[EDX:%e.x]]
4525; LINUX-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004526; LINUX-32-STATIC-NEXT: ret
4527
4528; LINUX-32-PIC: big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004529; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4530; LINUX-32-PIC-NEXT: movl dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4531; LINUX-32-PIC-NEXT: movl dptr, [[EDX:%e.x]]
4532; LINUX-32-PIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004533; LINUX-32-PIC-NEXT: ret
4534
4535; LINUX-64-PIC: big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004536; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
4537; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4538; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
4539; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]]
4540; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004541; LINUX-64-PIC-NEXT: ret
4542
4543; DARWIN-32-STATIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004544; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4545; DARWIN-32-STATIC-NEXT: movl _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4546; DARWIN-32-STATIC-NEXT: movl _dptr, [[EDX:%e.x]]
4547; DARWIN-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004548; DARWIN-32-STATIC-NEXT: ret
4549
4550; DARWIN-32-DYNAMIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004551; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4552; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4553; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[EDX:%e.x]]
4554; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004555; DARWIN-32-DYNAMIC-NEXT: ret
4556
4557; DARWIN-32-PIC: _big05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004558; DARWIN-32-PIC: calll L62$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004559; DARWIN-32-PIC-NEXT: L62$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004560; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4561; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4562; DARWIN-32-PIC-NEXT: movl (_dsrc-L62$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4563; DARWIN-32-PIC-NEXT: movl _dptr-L62$pb([[EAX]]), [[EAX:%e.x]]
4564; DARWIN-32-PIC-NEXT: movl [[EDX]], 262144([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004565; DARWIN-32-PIC-NEXT: ret
4566
4567; DARWIN-64-STATIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004568; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
4569; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4570; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
4571; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004572; DARWIN-64-STATIC-NEXT: ret
4573
4574; DARWIN-64-DYNAMIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004575; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
4576; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4577; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
4578; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004579; DARWIN-64-DYNAMIC-NEXT: ret
4580
4581; DARWIN-64-PIC: _big05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004582; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
4583; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4584; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]]
4585; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004586; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004587}
4588
4589define void @big06(i64 %i) nounwind {
4590entry:
4591 %0 = add i64 %i, 65536
4592 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
4593 %2 = load i32* %1, align 4
4594 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
4595 store i32 %2, i32* %3, align 4
4596 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004597; LINUX-64-STATIC: big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004598; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4599; LINUX-64-STATIC: movl [[EAX]], ldst+262144(,%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004600; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004601
4602; LINUX-32-STATIC: big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004603; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4604; LINUX-32-STATIC-NEXT: movl lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4605; LINUX-32-STATIC-NEXT: movl [[ECX]], ldst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004606; LINUX-32-STATIC-NEXT: ret
4607
4608; LINUX-32-PIC: big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004609; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4610; LINUX-32-PIC-NEXT: movl lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4611; LINUX-32-PIC-NEXT: movl [[ECX]], ldst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004612; LINUX-32-PIC-NEXT: ret
4613
4614; LINUX-64-PIC: big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004615; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
4616; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4617; LINUX-64-PIC-NEXT: leaq ldst(%rip), [[RCX:%r.x]]
4618; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004619; LINUX-64-PIC-NEXT: ret
4620
4621; DARWIN-32-STATIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004622; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4623; DARWIN-32-STATIC-NEXT: movl _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4624; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ldst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004625; DARWIN-32-STATIC-NEXT: ret
4626
4627; DARWIN-32-DYNAMIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004628; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4629; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4630; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ldst+262144(,[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004631; DARWIN-32-DYNAMIC-NEXT: ret
4632
4633; DARWIN-32-PIC: _big06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004634; DARWIN-32-PIC: calll L63$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004635; DARWIN-32-PIC-NEXT: L63$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004636; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4637; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4638; DARWIN-32-PIC-NEXT: movl (_lsrc-L63$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4639; DARWIN-32-PIC-NEXT: movl [[EDX]], (_ldst-L63$pb)+262144([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004640; DARWIN-32-PIC-NEXT: ret
4641
4642; DARWIN-64-STATIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004643; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
4644; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4645; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
4646; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004647; DARWIN-64-STATIC-NEXT: ret
4648
4649; DARWIN-64-DYNAMIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004650; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
4651; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4652; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
4653; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004654; DARWIN-64-DYNAMIC-NEXT: ret
4655
4656; DARWIN-64-PIC: _big06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004657; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
4658; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4659; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]]
4660; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004661; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004662}
4663
4664define void @big07(i64 %i) nounwind {
4665entry:
4666 %.sum = add i64 %i, 65536
4667 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
4668 store i32* %0, i32** @lptr, align 8
4669 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004670; LINUX-64-STATIC: big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004671; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), [[RAX:%r.x]]
4672; LINUX-64-STATIC: movq [[RAX]], lptr
Chris Lattner4f066492009-07-11 20:29:19 +00004673; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004674
4675; LINUX-32-STATIC: big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004676; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4677; LINUX-32-STATIC-NEXT: leal ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4678; LINUX-32-STATIC-NEXT: movl [[EAX]], lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004679; LINUX-32-STATIC-NEXT: ret
4680
4681; LINUX-32-PIC: big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004682; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4683; LINUX-32-PIC-NEXT: leal ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4684; LINUX-32-PIC-NEXT: movl [[EAX]], lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004685; LINUX-32-PIC-NEXT: ret
4686
4687; LINUX-64-PIC: big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004688; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
4689; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4690; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004691; LINUX-64-PIC-NEXT: ret
4692
4693; DARWIN-32-STATIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004694; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4695; DARWIN-32-STATIC-NEXT: leal _ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4696; DARWIN-32-STATIC-NEXT: movl [[EAX]], _lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004697; DARWIN-32-STATIC-NEXT: ret
4698
4699; DARWIN-32-DYNAMIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004700; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4701; DARWIN-32-DYNAMIC-NEXT: leal _ldst+262144(,[[EAX]],4), [[EAX:%e.x]]
4702; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _lptr
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004703; DARWIN-32-DYNAMIC-NEXT: ret
4704
4705; DARWIN-32-PIC: _big07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004706; DARWIN-32-PIC: calll L64$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004707; DARWIN-32-PIC-NEXT: L64$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004708; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4709; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4710; DARWIN-32-PIC-NEXT: leal (_ldst-L64$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]]
4711; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L64$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004712; DARWIN-32-PIC-NEXT: ret
4713
4714; DARWIN-64-STATIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004715; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
4716; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4717; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004718; DARWIN-64-STATIC-NEXT: ret
4719
4720; DARWIN-64-DYNAMIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004721; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
4722; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4723; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004724; DARWIN-64-DYNAMIC-NEXT: ret
4725
4726; DARWIN-64-PIC: _big07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004727; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
4728; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]]
4729; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004730; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004731}
4732
4733define void @big08(i64 %i) nounwind {
4734entry:
4735 %0 = load i32** @lptr, align 8
4736 %1 = add i64 %i, 65536
4737 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
4738 %3 = load i32* %2, align 4
4739 %4 = getelementptr i32* %0, i64 %1
4740 store i32 %3, i32* %4, align 4
4741 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00004742; LINUX-64-STATIC: big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004743; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]]
4744; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]]
4745; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]],%rdi,4)
Chris Lattner4f066492009-07-11 20:29:19 +00004746; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004747
4748; LINUX-32-STATIC: big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004749; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4750; LINUX-32-STATIC-NEXT: movl lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4751; LINUX-32-STATIC-NEXT: movl lptr, [[EDX:%e.x]]
4752; LINUX-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004753; LINUX-32-STATIC-NEXT: ret
4754
4755; LINUX-32-PIC: big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004756; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
4757; LINUX-32-PIC-NEXT: movl lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4758; LINUX-32-PIC-NEXT: movl lptr, [[EDX:%e.x]]
4759; LINUX-32-PIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004760; LINUX-32-PIC-NEXT: ret
4761
4762; LINUX-64-PIC: big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004763; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
4764; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4765; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]]
4766; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004767; LINUX-64-PIC-NEXT: ret
4768
4769; DARWIN-32-STATIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004770; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
4771; DARWIN-32-STATIC-NEXT: movl _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4772; DARWIN-32-STATIC-NEXT: movl _lptr, [[EDX:%e.x]]
4773; DARWIN-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004774; DARWIN-32-STATIC-NEXT: ret
4775
4776; DARWIN-32-DYNAMIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004777; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
4778; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]]
4779; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[EDX:%e.x]]
4780; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004781; DARWIN-32-DYNAMIC-NEXT: ret
4782
4783; DARWIN-32-PIC: _big08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004784; DARWIN-32-PIC: calll L65$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004785; DARWIN-32-PIC-NEXT: L65$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004786; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4787; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
4788; DARWIN-32-PIC-NEXT: movl (_lsrc-L65$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]]
4789; DARWIN-32-PIC-NEXT: movl _lptr-L65$pb([[EAX]]), [[EAX:%e.x]]
4790; DARWIN-32-PIC-NEXT: movl [[EDX]], 262144([[EAX]],[[ECX]],4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004791; DARWIN-32-PIC-NEXT: ret
4792
4793; DARWIN-64-STATIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004794; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
4795; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4796; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
4797; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004798; DARWIN-64-STATIC-NEXT: ret
4799
4800; DARWIN-64-DYNAMIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004801; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
4802; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4803; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
4804; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004805; DARWIN-64-DYNAMIC-NEXT: ret
4806
4807; DARWIN-64-PIC: _big08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004808; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
4809; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]]
4810; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]]
4811; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004812; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004813}
4814
4815define i8* @bar00() nounwind {
4816entry:
4817 ret i8* bitcast ([131072 x i32]* @src to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004818; LINUX-64-STATIC: bar00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004819; LINUX-64-STATIC: movl $src, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004820; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004821
4822; LINUX-32-STATIC: bar00:
4823; LINUX-32-STATIC: movl $src, %eax
4824; LINUX-32-STATIC-NEXT: ret
4825
4826; LINUX-32-PIC: bar00:
4827; LINUX-32-PIC: movl $src, %eax
4828; LINUX-32-PIC-NEXT: ret
4829
4830; LINUX-64-PIC: bar00:
4831; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
4832; LINUX-64-PIC-NEXT: ret
4833
4834; DARWIN-32-STATIC: _bar00:
4835; DARWIN-32-STATIC: movl $_src, %eax
4836; DARWIN-32-STATIC-NEXT: ret
4837
4838; DARWIN-32-DYNAMIC: _bar00:
4839; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
4840; DARWIN-32-DYNAMIC-NEXT: ret
4841
4842; DARWIN-32-PIC: _bar00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004843; DARWIN-32-PIC: calll L66$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004844; DARWIN-32-PIC-NEXT: L66$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004845; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4846; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L66$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004847; DARWIN-32-PIC-NEXT: ret
4848
4849; DARWIN-64-STATIC: _bar00:
4850; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
4851; DARWIN-64-STATIC-NEXT: ret
4852
4853; DARWIN-64-DYNAMIC: _bar00:
4854; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
4855; DARWIN-64-DYNAMIC-NEXT: ret
4856
4857; DARWIN-64-PIC: _bar00:
4858; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
4859; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004860}
4861
4862define i8* @bxr00() nounwind {
4863entry:
4864 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004865; LINUX-64-STATIC: bxr00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004866; LINUX-64-STATIC: movl $xsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004867; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004868
4869; LINUX-32-STATIC: bxr00:
4870; LINUX-32-STATIC: movl $xsrc, %eax
4871; LINUX-32-STATIC-NEXT: ret
4872
4873; LINUX-32-PIC: bxr00:
4874; LINUX-32-PIC: movl $xsrc, %eax
4875; LINUX-32-PIC-NEXT: ret
4876
4877; LINUX-64-PIC: bxr00:
4878; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
4879; LINUX-64-PIC-NEXT: ret
4880
4881; DARWIN-32-STATIC: _bxr00:
4882; DARWIN-32-STATIC: movl $_xsrc, %eax
4883; DARWIN-32-STATIC-NEXT: ret
4884
4885; DARWIN-32-DYNAMIC: _bxr00:
4886; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
4887; DARWIN-32-DYNAMIC-NEXT: ret
4888
4889; DARWIN-32-PIC: _bxr00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004890; DARWIN-32-PIC: calll L67$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004891; DARWIN-32-PIC-NEXT: L67$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004892; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4893; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L67$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004894; DARWIN-32-PIC-NEXT: ret
4895
4896; DARWIN-64-STATIC: _bxr00:
4897; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
4898; DARWIN-64-STATIC-NEXT: ret
4899
4900; DARWIN-64-DYNAMIC: _bxr00:
4901; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
4902; DARWIN-64-DYNAMIC-NEXT: ret
4903
4904; DARWIN-64-PIC: _bxr00:
4905; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
4906; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004907}
4908
4909define i8* @bar01() nounwind {
4910entry:
4911 ret i8* bitcast ([131072 x i32]* @dst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004912; LINUX-64-STATIC: bar01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004913; LINUX-64-STATIC: movl $dst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004914; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004915
4916; LINUX-32-STATIC: bar01:
4917; LINUX-32-STATIC: movl $dst, %eax
4918; LINUX-32-STATIC-NEXT: ret
4919
4920; LINUX-32-PIC: bar01:
4921; LINUX-32-PIC: movl $dst, %eax
4922; LINUX-32-PIC-NEXT: ret
4923
4924; LINUX-64-PIC: bar01:
4925; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
4926; LINUX-64-PIC-NEXT: ret
4927
4928; DARWIN-32-STATIC: _bar01:
4929; DARWIN-32-STATIC: movl $_dst, %eax
4930; DARWIN-32-STATIC-NEXT: ret
4931
4932; DARWIN-32-DYNAMIC: _bar01:
4933; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax
4934; DARWIN-32-DYNAMIC-NEXT: ret
4935
4936; DARWIN-32-PIC: _bar01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004937; DARWIN-32-PIC: calll L68$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004938; DARWIN-32-PIC-NEXT: L68$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004939; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4940; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L68$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004941; DARWIN-32-PIC-NEXT: ret
4942
4943; DARWIN-64-STATIC: _bar01:
4944; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
4945; DARWIN-64-STATIC-NEXT: ret
4946
4947; DARWIN-64-DYNAMIC: _bar01:
4948; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
4949; DARWIN-64-DYNAMIC-NEXT: ret
4950
4951; DARWIN-64-PIC: _bar01:
4952; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
4953; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00004954}
4955
4956define i8* @bxr01() nounwind {
4957entry:
4958 ret i8* bitcast ([32 x i32]* @xdst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00004959; LINUX-64-STATIC: bxr01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00004960; LINUX-64-STATIC: movl $xdst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00004961; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004962
4963; LINUX-32-STATIC: bxr01:
4964; LINUX-32-STATIC: movl $xdst, %eax
4965; LINUX-32-STATIC-NEXT: ret
4966
4967; LINUX-32-PIC: bxr01:
4968; LINUX-32-PIC: movl $xdst, %eax
4969; LINUX-32-PIC-NEXT: ret
4970
4971; LINUX-64-PIC: bxr01:
4972; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
4973; LINUX-64-PIC-NEXT: ret
4974
4975; DARWIN-32-STATIC: _bxr01:
4976; DARWIN-32-STATIC: movl $_xdst, %eax
4977; DARWIN-32-STATIC-NEXT: ret
4978
4979; DARWIN-32-DYNAMIC: _bxr01:
4980; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax
4981; DARWIN-32-DYNAMIC-NEXT: ret
4982
4983; DARWIN-32-PIC: _bxr01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00004984; DARWIN-32-PIC: calll L69$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00004985; DARWIN-32-PIC-NEXT: L69$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00004986; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
4987; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L69$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00004988; DARWIN-32-PIC-NEXT: ret
4989
4990; DARWIN-64-STATIC: _bxr01:
4991; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
4992; DARWIN-64-STATIC-NEXT: ret
4993
4994; DARWIN-64-DYNAMIC: _bxr01:
4995; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
4996; DARWIN-64-DYNAMIC-NEXT: ret
4997
4998; DARWIN-64-PIC: _bxr01:
4999; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
5000; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005001}
5002
5003define i8* @bar02() nounwind {
5004entry:
5005 ret i8* bitcast (i32** @ptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005006; LINUX-64-STATIC: bar02:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005007; LINUX-64-STATIC: movl $ptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005008; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005009
5010; LINUX-32-STATIC: bar02:
5011; LINUX-32-STATIC: movl $ptr, %eax
5012; LINUX-32-STATIC-NEXT: ret
5013
5014; LINUX-32-PIC: bar02:
5015; LINUX-32-PIC: movl $ptr, %eax
5016; LINUX-32-PIC-NEXT: ret
5017
5018; LINUX-64-PIC: bar02:
5019; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), %rax
5020; LINUX-64-PIC-NEXT: ret
5021
5022; DARWIN-32-STATIC: _bar02:
5023; DARWIN-32-STATIC: movl $_ptr, %eax
5024; DARWIN-32-STATIC-NEXT: ret
5025
5026; DARWIN-32-DYNAMIC: _bar02:
5027; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, %eax
5028; DARWIN-32-DYNAMIC-NEXT: ret
5029
5030; DARWIN-32-PIC: _bar02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005031; DARWIN-32-PIC: calll L70$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005032; DARWIN-32-PIC-NEXT: L70$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005033; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5034; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L70$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005035; DARWIN-32-PIC-NEXT: ret
5036
5037; DARWIN-64-STATIC: _bar02:
5038; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), %rax
5039; DARWIN-64-STATIC-NEXT: ret
5040
5041; DARWIN-64-DYNAMIC: _bar02:
5042; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), %rax
5043; DARWIN-64-DYNAMIC-NEXT: ret
5044
5045; DARWIN-64-PIC: _bar02:
5046; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), %rax
5047; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005048}
5049
5050define i8* @bar03() nounwind {
5051entry:
5052 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005053; LINUX-64-STATIC: bar03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005054; LINUX-64-STATIC: movl $dsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005055; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005056
5057; LINUX-32-STATIC: bar03:
5058; LINUX-32-STATIC: movl $dsrc, %eax
5059; LINUX-32-STATIC-NEXT: ret
5060
5061; LINUX-32-PIC: bar03:
5062; LINUX-32-PIC: movl $dsrc, %eax
5063; LINUX-32-PIC-NEXT: ret
5064
5065; LINUX-64-PIC: bar03:
5066; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
5067; LINUX-64-PIC-NEXT: ret
5068
5069; DARWIN-32-STATIC: _bar03:
5070; DARWIN-32-STATIC: movl $_dsrc, %eax
5071; DARWIN-32-STATIC-NEXT: ret
5072
5073; DARWIN-32-DYNAMIC: _bar03:
5074; DARWIN-32-DYNAMIC: movl $_dsrc, %eax
5075; DARWIN-32-DYNAMIC-NEXT: ret
5076
5077; DARWIN-32-PIC: _bar03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005078; DARWIN-32-PIC: calll L71$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005079; DARWIN-32-PIC-NEXT: L71$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005080; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5081; DARWIN-32-PIC-NEXT: leal _dsrc-L71$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005082; DARWIN-32-PIC-NEXT: ret
5083
5084; DARWIN-64-STATIC: _bar03:
5085; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
5086; DARWIN-64-STATIC-NEXT: ret
5087
5088; DARWIN-64-DYNAMIC: _bar03:
5089; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
5090; DARWIN-64-DYNAMIC-NEXT: ret
5091
5092; DARWIN-64-PIC: _bar03:
5093; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
5094; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005095}
5096
5097define i8* @bar04() nounwind {
5098entry:
5099 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005100; LINUX-64-STATIC: bar04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005101; LINUX-64-STATIC: movl $ddst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005102; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005103
5104; LINUX-32-STATIC: bar04:
5105; LINUX-32-STATIC: movl $ddst, %eax
5106; LINUX-32-STATIC-NEXT: ret
5107
5108; LINUX-32-PIC: bar04:
5109; LINUX-32-PIC: movl $ddst, %eax
5110; LINUX-32-PIC-NEXT: ret
5111
5112; LINUX-64-PIC: bar04:
5113; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
5114; LINUX-64-PIC-NEXT: ret
5115
5116; DARWIN-32-STATIC: _bar04:
5117; DARWIN-32-STATIC: movl $_ddst, %eax
5118; DARWIN-32-STATIC-NEXT: ret
5119
5120; DARWIN-32-DYNAMIC: _bar04:
5121; DARWIN-32-DYNAMIC: movl $_ddst, %eax
5122; DARWIN-32-DYNAMIC-NEXT: ret
5123
5124; DARWIN-32-PIC: _bar04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005125; DARWIN-32-PIC: calll L72$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005126; DARWIN-32-PIC-NEXT: L72$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005127; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5128; DARWIN-32-PIC-NEXT: leal _ddst-L72$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005129; DARWIN-32-PIC-NEXT: ret
5130
5131; DARWIN-64-STATIC: _bar04:
5132; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
5133; DARWIN-64-STATIC-NEXT: ret
5134
5135; DARWIN-64-DYNAMIC: _bar04:
5136; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
5137; DARWIN-64-DYNAMIC-NEXT: ret
5138
5139; DARWIN-64-PIC: _bar04:
5140; DARWIN-64-PIC: leaq _ddst(%rip), %rax
5141; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005142}
5143
5144define i8* @bar05() nounwind {
5145entry:
5146 ret i8* bitcast (i32** @dptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005147; LINUX-64-STATIC: bar05:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005148; LINUX-64-STATIC: movl $dptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005149; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005150
5151; LINUX-32-STATIC: bar05:
5152; LINUX-32-STATIC: movl $dptr, %eax
5153; LINUX-32-STATIC-NEXT: ret
5154
5155; LINUX-32-PIC: bar05:
5156; LINUX-32-PIC: movl $dptr, %eax
5157; LINUX-32-PIC-NEXT: ret
5158
5159; LINUX-64-PIC: bar05:
5160; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), %rax
5161; LINUX-64-PIC-NEXT: ret
5162
5163; DARWIN-32-STATIC: _bar05:
5164; DARWIN-32-STATIC: movl $_dptr, %eax
5165; DARWIN-32-STATIC-NEXT: ret
5166
5167; DARWIN-32-DYNAMIC: _bar05:
5168; DARWIN-32-DYNAMIC: movl $_dptr, %eax
5169; DARWIN-32-DYNAMIC-NEXT: ret
5170
5171; DARWIN-32-PIC: _bar05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005172; DARWIN-32-PIC: calll L73$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005173; DARWIN-32-PIC-NEXT: L73$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005174; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5175; DARWIN-32-PIC-NEXT: leal _dptr-L73$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005176; DARWIN-32-PIC-NEXT: ret
5177
5178; DARWIN-64-STATIC: _bar05:
5179; DARWIN-64-STATIC: leaq _dptr(%rip), %rax
5180; DARWIN-64-STATIC-NEXT: ret
5181
5182; DARWIN-64-DYNAMIC: _bar05:
5183; DARWIN-64-DYNAMIC: leaq _dptr(%rip), %rax
5184; DARWIN-64-DYNAMIC-NEXT: ret
5185
5186; DARWIN-64-PIC: _bar05:
5187; DARWIN-64-PIC: leaq _dptr(%rip), %rax
5188; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005189}
5190
5191define i8* @bar06() nounwind {
5192entry:
5193 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005194; LINUX-64-STATIC: bar06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005195; LINUX-64-STATIC: movl $lsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005196; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005197
5198; LINUX-32-STATIC: bar06:
5199; LINUX-32-STATIC: movl $lsrc, %eax
5200; LINUX-32-STATIC-NEXT: ret
5201
5202; LINUX-32-PIC: bar06:
5203; LINUX-32-PIC: movl $lsrc, %eax
5204; LINUX-32-PIC-NEXT: ret
5205
5206; LINUX-64-PIC: bar06:
5207; LINUX-64-PIC: leaq lsrc(%rip), %rax
5208; LINUX-64-PIC-NEXT: ret
5209
5210; DARWIN-32-STATIC: _bar06:
5211; DARWIN-32-STATIC: movl $_lsrc, %eax
5212; DARWIN-32-STATIC-NEXT: ret
5213
5214; DARWIN-32-DYNAMIC: _bar06:
5215; DARWIN-32-DYNAMIC: movl $_lsrc, %eax
5216; DARWIN-32-DYNAMIC-NEXT: ret
5217
5218; DARWIN-32-PIC: _bar06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005219; DARWIN-32-PIC: calll L74$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005220; DARWIN-32-PIC-NEXT: L74$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005221; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5222; DARWIN-32-PIC-NEXT: leal _lsrc-L74$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005223; DARWIN-32-PIC-NEXT: ret
5224
5225; DARWIN-64-STATIC: _bar06:
5226; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
5227; DARWIN-64-STATIC-NEXT: ret
5228
5229; DARWIN-64-DYNAMIC: _bar06:
5230; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
5231; DARWIN-64-DYNAMIC-NEXT: ret
5232
5233; DARWIN-64-PIC: _bar06:
5234; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
5235; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005236}
5237
5238define i8* @bar07() nounwind {
5239entry:
5240 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005241; LINUX-64-STATIC: bar07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005242; LINUX-64-STATIC: movl $ldst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005243; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005244
5245; LINUX-32-STATIC: bar07:
5246; LINUX-32-STATIC: movl $ldst, %eax
5247; LINUX-32-STATIC-NEXT: ret
5248
5249; LINUX-32-PIC: bar07:
5250; LINUX-32-PIC: movl $ldst, %eax
5251; LINUX-32-PIC-NEXT: ret
5252
5253; LINUX-64-PIC: bar07:
5254; LINUX-64-PIC: leaq ldst(%rip), %rax
5255; LINUX-64-PIC-NEXT: ret
5256
5257; DARWIN-32-STATIC: _bar07:
5258; DARWIN-32-STATIC: movl $_ldst, %eax
5259; DARWIN-32-STATIC-NEXT: ret
5260
5261; DARWIN-32-DYNAMIC: _bar07:
5262; DARWIN-32-DYNAMIC: movl $_ldst, %eax
5263; DARWIN-32-DYNAMIC-NEXT: ret
5264
5265; DARWIN-32-PIC: _bar07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005266; DARWIN-32-PIC: calll L75$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005267; DARWIN-32-PIC-NEXT: L75$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005268; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5269; DARWIN-32-PIC-NEXT: leal _ldst-L75$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005270; DARWIN-32-PIC-NEXT: ret
5271
5272; DARWIN-64-STATIC: _bar07:
5273; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
5274; DARWIN-64-STATIC-NEXT: ret
5275
5276; DARWIN-64-DYNAMIC: _bar07:
5277; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
5278; DARWIN-64-DYNAMIC-NEXT: ret
5279
5280; DARWIN-64-PIC: _bar07:
5281; DARWIN-64-PIC: leaq _ldst(%rip), %rax
5282; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005283}
5284
5285define i8* @bar08() nounwind {
5286entry:
5287 ret i8* bitcast (i32** @lptr to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005288; LINUX-64-STATIC: bar08:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005289; LINUX-64-STATIC: movl $lptr, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005290; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005291
5292; LINUX-32-STATIC: bar08:
5293; LINUX-32-STATIC: movl $lptr, %eax
5294; LINUX-32-STATIC-NEXT: ret
5295
5296; LINUX-32-PIC: bar08:
5297; LINUX-32-PIC: movl $lptr, %eax
5298; LINUX-32-PIC-NEXT: ret
5299
5300; LINUX-64-PIC: bar08:
5301; LINUX-64-PIC: leaq lptr(%rip), %rax
5302; LINUX-64-PIC-NEXT: ret
5303
5304; DARWIN-32-STATIC: _bar08:
5305; DARWIN-32-STATIC: movl $_lptr, %eax
5306; DARWIN-32-STATIC-NEXT: ret
5307
5308; DARWIN-32-DYNAMIC: _bar08:
5309; DARWIN-32-DYNAMIC: movl $_lptr, %eax
5310; DARWIN-32-DYNAMIC-NEXT: ret
5311
5312; DARWIN-32-PIC: _bar08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005313; DARWIN-32-PIC: calll L76$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005314; DARWIN-32-PIC-NEXT: L76$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005315; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5316; DARWIN-32-PIC-NEXT: leal _lptr-L76$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005317; DARWIN-32-PIC-NEXT: ret
5318
5319; DARWIN-64-STATIC: _bar08:
5320; DARWIN-64-STATIC: leaq _lptr(%rip), %rax
5321; DARWIN-64-STATIC-NEXT: ret
5322
5323; DARWIN-64-DYNAMIC: _bar08:
5324; DARWIN-64-DYNAMIC: leaq _lptr(%rip), %rax
5325; DARWIN-64-DYNAMIC-NEXT: ret
5326
5327; DARWIN-64-PIC: _bar08:
5328; DARWIN-64-PIC: leaq _lptr(%rip), %rax
5329; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005330}
5331
5332define i8* @har00() nounwind {
5333entry:
5334 ret i8* bitcast ([131072 x i32]* @src to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005335; LINUX-64-STATIC: har00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005336; LINUX-64-STATIC: movl $src, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005337; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005338
5339; LINUX-32-STATIC: har00:
5340; LINUX-32-STATIC: movl $src, %eax
5341; LINUX-32-STATIC-NEXT: ret
5342
5343; LINUX-32-PIC: har00:
5344; LINUX-32-PIC: movl $src, %eax
5345; LINUX-32-PIC-NEXT: ret
5346
5347; LINUX-64-PIC: har00:
5348; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
5349; LINUX-64-PIC-NEXT: ret
5350
5351; DARWIN-32-STATIC: _har00:
5352; DARWIN-32-STATIC: movl $_src, %eax
5353; DARWIN-32-STATIC-NEXT: ret
5354
5355; DARWIN-32-DYNAMIC: _har00:
5356; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
5357; DARWIN-32-DYNAMIC-NEXT: ret
5358
5359; DARWIN-32-PIC: _har00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005360; DARWIN-32-PIC: calll L77$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005361; DARWIN-32-PIC-NEXT: L77$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005362; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5363; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L77$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005364; DARWIN-32-PIC-NEXT: ret
5365
5366; DARWIN-64-STATIC: _har00:
5367; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
5368; DARWIN-64-STATIC-NEXT: ret
5369
5370; DARWIN-64-DYNAMIC: _har00:
5371; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
5372; DARWIN-64-DYNAMIC-NEXT: ret
5373
5374; DARWIN-64-PIC: _har00:
5375; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
5376; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005377}
5378
5379define i8* @hxr00() nounwind {
5380entry:
5381 ret i8* bitcast ([32 x i32]* @xsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005382; LINUX-64-STATIC: hxr00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005383; LINUX-64-STATIC: movl $xsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005384; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005385
5386; LINUX-32-STATIC: hxr00:
5387; LINUX-32-STATIC: movl $xsrc, %eax
5388; LINUX-32-STATIC-NEXT: ret
5389
5390; LINUX-32-PIC: hxr00:
5391; LINUX-32-PIC: movl $xsrc, %eax
5392; LINUX-32-PIC-NEXT: ret
5393
5394; LINUX-64-PIC: hxr00:
5395; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
5396; LINUX-64-PIC-NEXT: ret
5397
5398; DARWIN-32-STATIC: _hxr00:
5399; DARWIN-32-STATIC: movl $_xsrc, %eax
5400; DARWIN-32-STATIC-NEXT: ret
5401
5402; DARWIN-32-DYNAMIC: _hxr00:
5403; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
5404; DARWIN-32-DYNAMIC-NEXT: ret
5405
5406; DARWIN-32-PIC: _hxr00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005407; DARWIN-32-PIC: calll L78$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005408; DARWIN-32-PIC-NEXT: L78$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005409; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5410; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L78$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005411; DARWIN-32-PIC-NEXT: ret
5412
5413; DARWIN-64-STATIC: _hxr00:
5414; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
5415; DARWIN-64-STATIC-NEXT: ret
5416
5417; DARWIN-64-DYNAMIC: _hxr00:
5418; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
5419; DARWIN-64-DYNAMIC-NEXT: ret
5420
5421; DARWIN-64-PIC: _hxr00:
5422; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
5423; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005424}
5425
5426define i8* @har01() nounwind {
5427entry:
5428 ret i8* bitcast ([131072 x i32]* @dst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005429; LINUX-64-STATIC: har01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005430; LINUX-64-STATIC: movl $dst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005431; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005432
5433; LINUX-32-STATIC: har01:
5434; LINUX-32-STATIC: movl $dst, %eax
5435; LINUX-32-STATIC-NEXT: ret
5436
5437; LINUX-32-PIC: har01:
5438; LINUX-32-PIC: movl $dst, %eax
5439; LINUX-32-PIC-NEXT: ret
5440
5441; LINUX-64-PIC: har01:
5442; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
5443; LINUX-64-PIC-NEXT: ret
5444
5445; DARWIN-32-STATIC: _har01:
5446; DARWIN-32-STATIC: movl $_dst, %eax
5447; DARWIN-32-STATIC-NEXT: ret
5448
5449; DARWIN-32-DYNAMIC: _har01:
5450; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax
5451; DARWIN-32-DYNAMIC-NEXT: ret
5452
5453; DARWIN-32-PIC: _har01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005454; DARWIN-32-PIC: calll L79$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005455; DARWIN-32-PIC-NEXT: L79$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005456; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5457; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L79$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005458; DARWIN-32-PIC-NEXT: ret
5459
5460; DARWIN-64-STATIC: _har01:
5461; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
5462; DARWIN-64-STATIC-NEXT: ret
5463
5464; DARWIN-64-DYNAMIC: _har01:
5465; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
5466; DARWIN-64-DYNAMIC-NEXT: ret
5467
5468; DARWIN-64-PIC: _har01:
5469; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
5470; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005471}
5472
5473define i8* @hxr01() nounwind {
5474entry:
5475 ret i8* bitcast ([32 x i32]* @xdst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005476; LINUX-64-STATIC: hxr01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005477; LINUX-64-STATIC: movl $xdst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005478; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005479
5480; LINUX-32-STATIC: hxr01:
5481; LINUX-32-STATIC: movl $xdst, %eax
5482; LINUX-32-STATIC-NEXT: ret
5483
5484; LINUX-32-PIC: hxr01:
5485; LINUX-32-PIC: movl $xdst, %eax
5486; LINUX-32-PIC-NEXT: ret
5487
5488; LINUX-64-PIC: hxr01:
5489; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
5490; LINUX-64-PIC-NEXT: ret
5491
5492; DARWIN-32-STATIC: _hxr01:
5493; DARWIN-32-STATIC: movl $_xdst, %eax
5494; DARWIN-32-STATIC-NEXT: ret
5495
5496; DARWIN-32-DYNAMIC: _hxr01:
5497; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax
5498; DARWIN-32-DYNAMIC-NEXT: ret
5499
5500; DARWIN-32-PIC: _hxr01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005501; DARWIN-32-PIC: calll L80$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005502; DARWIN-32-PIC-NEXT: L80$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005503; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5504; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L80$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005505; DARWIN-32-PIC-NEXT: ret
5506
5507; DARWIN-64-STATIC: _hxr01:
5508; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
5509; DARWIN-64-STATIC-NEXT: ret
5510
5511; DARWIN-64-DYNAMIC: _hxr01:
5512; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
5513; DARWIN-64-DYNAMIC-NEXT: ret
5514
5515; DARWIN-64-PIC: _hxr01:
5516; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
5517; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005518}
5519
5520define i8* @har02() nounwind {
5521entry:
5522 %0 = load i32** @ptr, align 8
5523 %1 = bitcast i32* %0 to i8*
5524 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005525; LINUX-64-STATIC: har02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005526; LINUX-64-STATIC: movq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005527; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005528
5529; LINUX-32-STATIC: har02:
5530; LINUX-32-STATIC: movl ptr, %eax
5531; LINUX-32-STATIC-NEXT: ret
5532
5533; LINUX-32-PIC: har02:
5534; LINUX-32-PIC: movl ptr, %eax
5535; LINUX-32-PIC-NEXT: ret
5536
5537; LINUX-64-PIC: har02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005538; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5539; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005540; LINUX-64-PIC-NEXT: ret
5541
5542; DARWIN-32-STATIC: _har02:
5543; DARWIN-32-STATIC: movl _ptr, %eax
5544; DARWIN-32-STATIC-NEXT: ret
5545
5546; DARWIN-32-DYNAMIC: _har02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005547; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]]
5548; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005549; DARWIN-32-DYNAMIC-NEXT: ret
5550
5551; DARWIN-32-PIC: _har02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005552; DARWIN-32-PIC: calll L81$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005553; DARWIN-32-PIC-NEXT: L81$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005554; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5555; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L81$pb([[EAX]]), [[EAX:%e.x]]
5556; DARWIN-32-PIC-NEXT: movl ([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005557; DARWIN-32-PIC-NEXT: ret
5558
5559; DARWIN-64-STATIC: _har02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005560; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5561; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005562; DARWIN-64-STATIC-NEXT: ret
5563
5564; DARWIN-64-DYNAMIC: _har02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005565; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5566; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005567; DARWIN-64-DYNAMIC-NEXT: ret
5568
5569; DARWIN-64-PIC: _har02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005570; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
5571; DARWIN-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005572; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005573}
5574
5575define i8* @har03() nounwind {
5576entry:
5577 ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005578; LINUX-64-STATIC: har03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005579; LINUX-64-STATIC: movl $dsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005580; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005581
5582; LINUX-32-STATIC: har03:
5583; LINUX-32-STATIC: movl $dsrc, %eax
5584; LINUX-32-STATIC-NEXT: ret
5585
5586; LINUX-32-PIC: har03:
5587; LINUX-32-PIC: movl $dsrc, %eax
5588; LINUX-32-PIC-NEXT: ret
5589
5590; LINUX-64-PIC: har03:
5591; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
5592; LINUX-64-PIC-NEXT: ret
5593
5594; DARWIN-32-STATIC: _har03:
5595; DARWIN-32-STATIC: movl $_dsrc, %eax
5596; DARWIN-32-STATIC-NEXT: ret
5597
5598; DARWIN-32-DYNAMIC: _har03:
5599; DARWIN-32-DYNAMIC: movl $_dsrc, %eax
5600; DARWIN-32-DYNAMIC-NEXT: ret
5601
5602; DARWIN-32-PIC: _har03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005603; DARWIN-32-PIC: calll L82$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005604; DARWIN-32-PIC-NEXT: L82$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005605; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5606; DARWIN-32-PIC-NEXT: leal _dsrc-L82$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005607; DARWIN-32-PIC-NEXT: ret
5608
5609; DARWIN-64-STATIC: _har03:
5610; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax
5611; DARWIN-64-STATIC-NEXT: ret
5612
5613; DARWIN-64-DYNAMIC: _har03:
5614; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax
5615; DARWIN-64-DYNAMIC-NEXT: ret
5616
5617; DARWIN-64-PIC: _har03:
5618; DARWIN-64-PIC: leaq _dsrc(%rip), %rax
5619; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005620}
5621
5622define i8* @har04() nounwind {
5623entry:
5624 ret i8* bitcast ([131072 x i32]* @ddst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005625; LINUX-64-STATIC: har04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005626; LINUX-64-STATIC: movl $ddst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005627; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005628
5629; LINUX-32-STATIC: har04:
5630; LINUX-32-STATIC: movl $ddst, %eax
5631; LINUX-32-STATIC-NEXT: ret
5632
5633; LINUX-32-PIC: har04:
5634; LINUX-32-PIC: movl $ddst, %eax
5635; LINUX-32-PIC-NEXT: ret
5636
5637; LINUX-64-PIC: har04:
5638; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
5639; LINUX-64-PIC-NEXT: ret
5640
5641; DARWIN-32-STATIC: _har04:
5642; DARWIN-32-STATIC: movl $_ddst, %eax
5643; DARWIN-32-STATIC-NEXT: ret
5644
5645; DARWIN-32-DYNAMIC: _har04:
5646; DARWIN-32-DYNAMIC: movl $_ddst, %eax
5647; DARWIN-32-DYNAMIC-NEXT: ret
5648
5649; DARWIN-32-PIC: _har04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005650; DARWIN-32-PIC: calll L83$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005651; DARWIN-32-PIC-NEXT: L83$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005652; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5653; DARWIN-32-PIC-NEXT: leal _ddst-L83$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005654; DARWIN-32-PIC-NEXT: ret
5655
5656; DARWIN-64-STATIC: _har04:
5657; DARWIN-64-STATIC: leaq _ddst(%rip), %rax
5658; DARWIN-64-STATIC-NEXT: ret
5659
5660; DARWIN-64-DYNAMIC: _har04:
5661; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax
5662; DARWIN-64-DYNAMIC-NEXT: ret
5663
5664; DARWIN-64-PIC: _har04:
5665; DARWIN-64-PIC: leaq _ddst(%rip), %rax
5666; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005667}
5668
5669define i8* @har05() nounwind {
5670entry:
5671 %0 = load i32** @dptr, align 8
5672 %1 = bitcast i32* %0 to i8*
5673 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005674; LINUX-64-STATIC: har05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005675; LINUX-64-STATIC: movq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005676; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005677
5678; LINUX-32-STATIC: har05:
5679; LINUX-32-STATIC: movl dptr, %eax
5680; LINUX-32-STATIC-NEXT: ret
5681
5682; LINUX-32-PIC: har05:
5683; LINUX-32-PIC: movl dptr, %eax
5684; LINUX-32-PIC-NEXT: ret
5685
5686; LINUX-64-PIC: har05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005687; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]]
5688; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005689; LINUX-64-PIC-NEXT: ret
5690
5691; DARWIN-32-STATIC: _har05:
5692; DARWIN-32-STATIC: movl _dptr, %eax
5693; DARWIN-32-STATIC-NEXT: ret
5694
5695; DARWIN-32-DYNAMIC: _har05:
5696; DARWIN-32-DYNAMIC: movl _dptr, %eax
5697; DARWIN-32-DYNAMIC-NEXT: ret
5698
5699; DARWIN-32-PIC: _har05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005700; DARWIN-32-PIC: calll L84$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005701; DARWIN-32-PIC-NEXT: L84$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005702; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5703; DARWIN-32-PIC-NEXT: movl _dptr-L84$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005704; DARWIN-32-PIC-NEXT: ret
5705
5706; DARWIN-64-STATIC: _har05:
5707; DARWIN-64-STATIC: movq _dptr(%rip), %rax
5708; DARWIN-64-STATIC-NEXT: ret
5709
5710; DARWIN-64-DYNAMIC: _har05:
5711; DARWIN-64-DYNAMIC: movq _dptr(%rip), %rax
5712; DARWIN-64-DYNAMIC-NEXT: ret
5713
5714; DARWIN-64-PIC: _har05:
5715; DARWIN-64-PIC: movq _dptr(%rip), %rax
5716; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005717}
5718
5719define i8* @har06() nounwind {
5720entry:
5721 ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005722; LINUX-64-STATIC: har06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005723; LINUX-64-STATIC: movl $lsrc, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005724; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005725
5726; LINUX-32-STATIC: har06:
5727; LINUX-32-STATIC: movl $lsrc, %eax
5728; LINUX-32-STATIC-NEXT: ret
5729
5730; LINUX-32-PIC: har06:
5731; LINUX-32-PIC: movl $lsrc, %eax
5732; LINUX-32-PIC-NEXT: ret
5733
5734; LINUX-64-PIC: har06:
5735; LINUX-64-PIC: leaq lsrc(%rip), %rax
5736; LINUX-64-PIC-NEXT: ret
5737
5738; DARWIN-32-STATIC: _har06:
5739; DARWIN-32-STATIC: movl $_lsrc, %eax
5740; DARWIN-32-STATIC-NEXT: ret
5741
5742; DARWIN-32-DYNAMIC: _har06:
5743; DARWIN-32-DYNAMIC: movl $_lsrc, %eax
5744; DARWIN-32-DYNAMIC-NEXT: ret
5745
5746; DARWIN-32-PIC: _har06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005747; DARWIN-32-PIC: calll L85$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005748; DARWIN-32-PIC-NEXT: L85$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005749; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5750; DARWIN-32-PIC-NEXT: leal _lsrc-L85$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005751; DARWIN-32-PIC-NEXT: ret
5752
5753; DARWIN-64-STATIC: _har06:
5754; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax
5755; DARWIN-64-STATIC-NEXT: ret
5756
5757; DARWIN-64-DYNAMIC: _har06:
5758; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax
5759; DARWIN-64-DYNAMIC-NEXT: ret
5760
5761; DARWIN-64-PIC: _har06:
5762; DARWIN-64-PIC: leaq _lsrc(%rip), %rax
5763; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005764}
5765
5766define i8* @har07() nounwind {
5767entry:
5768 ret i8* bitcast ([131072 x i32]* @ldst to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005769; LINUX-64-STATIC: har07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005770; LINUX-64-STATIC: movl $ldst, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005771; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005772
5773; LINUX-32-STATIC: har07:
5774; LINUX-32-STATIC: movl $ldst, %eax
5775; LINUX-32-STATIC-NEXT: ret
5776
5777; LINUX-32-PIC: har07:
5778; LINUX-32-PIC: movl $ldst, %eax
5779; LINUX-32-PIC-NEXT: ret
5780
5781; LINUX-64-PIC: har07:
5782; LINUX-64-PIC: leaq ldst(%rip), %rax
5783; LINUX-64-PIC-NEXT: ret
5784
5785; DARWIN-32-STATIC: _har07:
5786; DARWIN-32-STATIC: movl $_ldst, %eax
5787; DARWIN-32-STATIC-NEXT: ret
5788
5789; DARWIN-32-DYNAMIC: _har07:
5790; DARWIN-32-DYNAMIC: movl $_ldst, %eax
5791; DARWIN-32-DYNAMIC-NEXT: ret
5792
5793; DARWIN-32-PIC: _har07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005794; DARWIN-32-PIC: calll L86$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005795; DARWIN-32-PIC-NEXT: L86$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005796; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5797; DARWIN-32-PIC-NEXT: leal _ldst-L86$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005798; DARWIN-32-PIC-NEXT: ret
5799
5800; DARWIN-64-STATIC: _har07:
5801; DARWIN-64-STATIC: leaq _ldst(%rip), %rax
5802; DARWIN-64-STATIC-NEXT: ret
5803
5804; DARWIN-64-DYNAMIC: _har07:
5805; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax
5806; DARWIN-64-DYNAMIC-NEXT: ret
5807
5808; DARWIN-64-PIC: _har07:
5809; DARWIN-64-PIC: leaq _ldst(%rip), %rax
5810; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005811}
5812
5813define i8* @har08() nounwind {
5814entry:
5815 %0 = load i32** @lptr, align 8
5816 %1 = bitcast i32* %0 to i8*
5817 ret i8* %1
Chris Lattner4f066492009-07-11 20:29:19 +00005818; LINUX-64-STATIC: har08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00005819; LINUX-64-STATIC: movq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00005820; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005821
5822; LINUX-32-STATIC: har08:
5823; LINUX-32-STATIC: movl lptr, %eax
5824; LINUX-32-STATIC-NEXT: ret
5825
5826; LINUX-32-PIC: har08:
5827; LINUX-32-PIC: movl lptr, %eax
5828; LINUX-32-PIC-NEXT: ret
5829
5830; LINUX-64-PIC: har08:
5831; LINUX-64-PIC: movq lptr(%rip), %rax
5832; LINUX-64-PIC-NEXT: ret
5833
5834; DARWIN-32-STATIC: _har08:
5835; DARWIN-32-STATIC: movl _lptr, %eax
5836; DARWIN-32-STATIC-NEXT: ret
5837
5838; DARWIN-32-DYNAMIC: _har08:
5839; DARWIN-32-DYNAMIC: movl _lptr, %eax
5840; DARWIN-32-DYNAMIC-NEXT: ret
5841
5842; DARWIN-32-PIC: _har08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005843; DARWIN-32-PIC: calll L87$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005844; DARWIN-32-PIC-NEXT: L87$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005845; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5846; DARWIN-32-PIC-NEXT: movl _lptr-L87$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005847; DARWIN-32-PIC-NEXT: ret
5848
5849; DARWIN-64-STATIC: _har08:
5850; DARWIN-64-STATIC: movq _lptr(%rip), %rax
5851; DARWIN-64-STATIC-NEXT: ret
5852
5853; DARWIN-64-DYNAMIC: _har08:
5854; DARWIN-64-DYNAMIC: movq _lptr(%rip), %rax
5855; DARWIN-64-DYNAMIC-NEXT: ret
5856
5857; DARWIN-64-PIC: _har08:
5858; DARWIN-64-PIC: movq _lptr(%rip), %rax
5859; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005860}
5861
5862define i8* @bat00() nounwind {
5863entry:
5864 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005865; LINUX-64-STATIC: bat00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005866; LINUX-64-STATIC: movl $src+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005867; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005868
5869; LINUX-32-STATIC: bat00:
5870; LINUX-32-STATIC: movl $src+64, %eax
5871; LINUX-32-STATIC-NEXT: ret
5872
5873; LINUX-32-PIC: bat00:
5874; LINUX-32-PIC: movl $src+64, %eax
5875; LINUX-32-PIC-NEXT: ret
5876
5877; LINUX-64-PIC: bat00:
5878; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax
5879; LINUX-64-PIC-NEXT: addq $64, %rax
5880; LINUX-64-PIC-NEXT: ret
5881
5882; DARWIN-32-STATIC: _bat00:
5883; DARWIN-32-STATIC: movl $_src+64, %eax
5884; DARWIN-32-STATIC-NEXT: ret
5885
5886; DARWIN-32-DYNAMIC: _bat00:
5887; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax
5888; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
5889; DARWIN-32-DYNAMIC-NEXT: ret
5890
5891; DARWIN-32-PIC: _bat00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005892; DARWIN-32-PIC: calll L88$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005893; DARWIN-32-PIC-NEXT: L88$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005894; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5895; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L88$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005896; DARWIN-32-PIC-NEXT: addl $64, %eax
5897; DARWIN-32-PIC-NEXT: ret
5898
5899; DARWIN-64-STATIC: _bat00:
5900; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax
5901; DARWIN-64-STATIC-NEXT: addq $64, %rax
5902; DARWIN-64-STATIC-NEXT: ret
5903
5904; DARWIN-64-DYNAMIC: _bat00:
5905; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax
5906; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
5907; DARWIN-64-DYNAMIC-NEXT: ret
5908
5909; DARWIN-64-PIC: _bat00:
5910; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax
5911; DARWIN-64-PIC-NEXT: addq $64, %rax
5912; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005913}
5914
5915define i8* @bxt00() nounwind {
5916entry:
5917 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005918; LINUX-64-STATIC: bxt00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005919; LINUX-64-STATIC: movl $xsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005920; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005921
5922; LINUX-32-STATIC: bxt00:
5923; LINUX-32-STATIC: movl $xsrc+64, %eax
5924; LINUX-32-STATIC-NEXT: ret
5925
5926; LINUX-32-PIC: bxt00:
5927; LINUX-32-PIC: movl $xsrc+64, %eax
5928; LINUX-32-PIC-NEXT: ret
5929
5930; LINUX-64-PIC: bxt00:
5931; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax
5932; LINUX-64-PIC-NEXT: addq $64, %rax
5933; LINUX-64-PIC-NEXT: ret
5934
5935; DARWIN-32-STATIC: _bxt00:
5936; DARWIN-32-STATIC: movl $_xsrc+64, %eax
5937; DARWIN-32-STATIC-NEXT: ret
5938
5939; DARWIN-32-DYNAMIC: _bxt00:
5940; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax
5941; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
5942; DARWIN-32-DYNAMIC-NEXT: ret
5943
5944; DARWIN-32-PIC: _bxt00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005945; DARWIN-32-PIC: calll L89$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005946; DARWIN-32-PIC-NEXT: L89$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00005947; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
5948; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L89$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005949; DARWIN-32-PIC-NEXT: addl $64, %eax
5950; DARWIN-32-PIC-NEXT: ret
5951
5952; DARWIN-64-STATIC: _bxt00:
5953; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax
5954; DARWIN-64-STATIC-NEXT: addq $64, %rax
5955; DARWIN-64-STATIC-NEXT: ret
5956
5957; DARWIN-64-DYNAMIC: _bxt00:
5958; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax
5959; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
5960; DARWIN-64-DYNAMIC-NEXT: ret
5961
5962; DARWIN-64-PIC: _bxt00:
5963; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax
5964; DARWIN-64-PIC-NEXT: addq $64, %rax
5965; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00005966}
5967
5968define i8* @bat01() nounwind {
5969entry:
5970 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00005971; LINUX-64-STATIC: bat01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00005972; LINUX-64-STATIC: movl $dst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00005973; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00005974
5975; LINUX-32-STATIC: bat01:
5976; LINUX-32-STATIC: movl $dst+64, %eax
5977; LINUX-32-STATIC-NEXT: ret
5978
5979; LINUX-32-PIC: bat01:
5980; LINUX-32-PIC: movl $dst+64, %eax
5981; LINUX-32-PIC-NEXT: ret
5982
5983; LINUX-64-PIC: bat01:
5984; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax
5985; LINUX-64-PIC-NEXT: addq $64, %rax
5986; LINUX-64-PIC-NEXT: ret
5987
5988; DARWIN-32-STATIC: _bat01:
5989; DARWIN-32-STATIC: movl $_dst+64, %eax
5990; DARWIN-32-STATIC-NEXT: ret
5991
5992; DARWIN-32-DYNAMIC: _bat01:
5993; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax
5994; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
5995; DARWIN-32-DYNAMIC-NEXT: ret
5996
5997; DARWIN-32-PIC: _bat01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00005998; DARWIN-32-PIC: calll L90$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00005999; DARWIN-32-PIC-NEXT: L90$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006000; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6001; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L90$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006002; DARWIN-32-PIC-NEXT: addl $64, %eax
6003; DARWIN-32-PIC-NEXT: ret
6004
6005; DARWIN-64-STATIC: _bat01:
6006; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax
6007; DARWIN-64-STATIC-NEXT: addq $64, %rax
6008; DARWIN-64-STATIC-NEXT: ret
6009
6010; DARWIN-64-DYNAMIC: _bat01:
6011; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax
6012; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6013; DARWIN-64-DYNAMIC-NEXT: ret
6014
6015; DARWIN-64-PIC: _bat01:
6016; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax
6017; DARWIN-64-PIC-NEXT: addq $64, %rax
6018; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006019}
6020
6021define i8* @bxt01() nounwind {
6022entry:
6023 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006024; LINUX-64-STATIC: bxt01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006025; LINUX-64-STATIC: movl $xdst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006026; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006027
6028; LINUX-32-STATIC: bxt01:
6029; LINUX-32-STATIC: movl $xdst+64, %eax
6030; LINUX-32-STATIC-NEXT: ret
6031
6032; LINUX-32-PIC: bxt01:
6033; LINUX-32-PIC: movl $xdst+64, %eax
6034; LINUX-32-PIC-NEXT: ret
6035
6036; LINUX-64-PIC: bxt01:
6037; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax
6038; LINUX-64-PIC-NEXT: addq $64, %rax
6039; LINUX-64-PIC-NEXT: ret
6040
6041; DARWIN-32-STATIC: _bxt01:
6042; DARWIN-32-STATIC: movl $_xdst+64, %eax
6043; DARWIN-32-STATIC-NEXT: ret
6044
6045; DARWIN-32-DYNAMIC: _bxt01:
6046; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax
6047; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6048; DARWIN-32-DYNAMIC-NEXT: ret
6049
6050; DARWIN-32-PIC: _bxt01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006051; DARWIN-32-PIC: calll L91$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006052; DARWIN-32-PIC-NEXT: L91$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006053; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6054; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L91$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006055; DARWIN-32-PIC-NEXT: addl $64, %eax
6056; DARWIN-32-PIC-NEXT: ret
6057
6058; DARWIN-64-STATIC: _bxt01:
6059; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax
6060; DARWIN-64-STATIC-NEXT: addq $64, %rax
6061; DARWIN-64-STATIC-NEXT: ret
6062
6063; DARWIN-64-DYNAMIC: _bxt01:
6064; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax
6065; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6066; DARWIN-64-DYNAMIC-NEXT: ret
6067
6068; DARWIN-64-PIC: _bxt01:
6069; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax
6070; DARWIN-64-PIC-NEXT: addq $64, %rax
6071; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006072}
6073
6074define i8* @bat02() nounwind {
6075entry:
6076 %0 = load i32** @ptr, align 8
6077 %1 = getelementptr i32* %0, i64 16
6078 %2 = bitcast i32* %1 to i8*
6079 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006080; LINUX-64-STATIC: bat02:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006081; LINUX-64-STATIC: movq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006082; LINUX-64-STATIC: addq $64, %rax
6083; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006084
6085; LINUX-32-STATIC: bat02:
6086; LINUX-32-STATIC: movl ptr, %eax
6087; LINUX-32-STATIC-NEXT: addl $64, %eax
6088; LINUX-32-STATIC-NEXT: ret
6089
6090; LINUX-32-PIC: bat02:
6091; LINUX-32-PIC: movl ptr, %eax
6092; LINUX-32-PIC-NEXT: addl $64, %eax
6093; LINUX-32-PIC-NEXT: ret
6094
6095; LINUX-64-PIC: bat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006096; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6097; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006098; LINUX-64-PIC-NEXT: addq $64, %rax
6099; LINUX-64-PIC-NEXT: ret
6100
6101; DARWIN-32-STATIC: _bat02:
6102; DARWIN-32-STATIC: movl _ptr, %eax
6103; DARWIN-32-STATIC-NEXT: addl $64, %eax
6104; DARWIN-32-STATIC-NEXT: ret
6105
6106; DARWIN-32-DYNAMIC: _bat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006107; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]]
6108; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006109; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6110; DARWIN-32-DYNAMIC-NEXT: ret
6111
6112; DARWIN-32-PIC: _bat02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006113; DARWIN-32-PIC: calll L92$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006114; DARWIN-32-PIC-NEXT: L92$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006115; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6116; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L92$pb([[EAX]]), [[EAX:%e.x]]
6117; DARWIN-32-PIC-NEXT: movl ([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006118; DARWIN-32-PIC-NEXT: addl $64, %eax
6119; DARWIN-32-PIC-NEXT: ret
6120
6121; DARWIN-64-STATIC: _bat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006122; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6123; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006124; DARWIN-64-STATIC-NEXT: addq $64, %rax
6125; DARWIN-64-STATIC-NEXT: ret
6126
6127; DARWIN-64-DYNAMIC: _bat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006128; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6129; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006130; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6131; DARWIN-64-DYNAMIC-NEXT: ret
6132
6133; DARWIN-64-PIC: _bat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006134; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
6135; DARWIN-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006136; DARWIN-64-PIC-NEXT: addq $64, %rax
6137; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006138}
6139
6140define i8* @bat03() nounwind {
6141entry:
6142 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006143; LINUX-64-STATIC: bat03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006144; LINUX-64-STATIC: movl $dsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006145; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006146
6147; LINUX-32-STATIC: bat03:
6148; LINUX-32-STATIC: movl $dsrc+64, %eax
6149; LINUX-32-STATIC-NEXT: ret
6150
6151; LINUX-32-PIC: bat03:
6152; LINUX-32-PIC: movl $dsrc+64, %eax
6153; LINUX-32-PIC-NEXT: ret
6154
6155; LINUX-64-PIC: bat03:
6156; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax
6157; LINUX-64-PIC-NEXT: addq $64, %rax
6158; LINUX-64-PIC-NEXT: ret
6159
6160; DARWIN-32-STATIC: _bat03:
6161; DARWIN-32-STATIC: movl $_dsrc+64, %eax
6162; DARWIN-32-STATIC-NEXT: ret
6163
6164; DARWIN-32-DYNAMIC: _bat03:
6165; DARWIN-32-DYNAMIC: movl $_dsrc+64, %eax
6166; DARWIN-32-DYNAMIC-NEXT: ret
6167
6168; DARWIN-32-PIC: _bat03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006169; DARWIN-32-PIC: calll L93$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006170; DARWIN-32-PIC-NEXT: L93$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006171; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6172; DARWIN-32-PIC-NEXT: leal (_dsrc-L93$pb)+64([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006173; DARWIN-32-PIC-NEXT: ret
6174
6175; DARWIN-64-STATIC: _bat03:
6176; DARWIN-64-STATIC: leaq _dsrc+64(%rip), %rax
6177; DARWIN-64-STATIC-NEXT: ret
6178
6179; DARWIN-64-DYNAMIC: _bat03:
6180; DARWIN-64-DYNAMIC: leaq _dsrc+64(%rip), %rax
6181; DARWIN-64-DYNAMIC-NEXT: ret
6182
6183; DARWIN-64-PIC: _bat03:
6184; DARWIN-64-PIC: leaq _dsrc+64(%rip), %rax
6185; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006186}
6187
6188define i8* @bat04() nounwind {
6189entry:
6190 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006191; LINUX-64-STATIC: bat04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006192; LINUX-64-STATIC: movl $ddst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006193; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006194
6195; LINUX-32-STATIC: bat04:
6196; LINUX-32-STATIC: movl $ddst+64, %eax
6197; LINUX-32-STATIC-NEXT: ret
6198
6199; LINUX-32-PIC: bat04:
6200; LINUX-32-PIC: movl $ddst+64, %eax
6201; LINUX-32-PIC-NEXT: ret
6202
6203; LINUX-64-PIC: bat04:
6204; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax
6205; LINUX-64-PIC-NEXT: addq $64, %rax
6206; LINUX-64-PIC-NEXT: ret
6207
6208; DARWIN-32-STATIC: _bat04:
6209; DARWIN-32-STATIC: movl $_ddst+64, %eax
6210; DARWIN-32-STATIC-NEXT: ret
6211
6212; DARWIN-32-DYNAMIC: _bat04:
6213; DARWIN-32-DYNAMIC: movl $_ddst+64, %eax
6214; DARWIN-32-DYNAMIC-NEXT: ret
6215
6216; DARWIN-32-PIC: _bat04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006217; DARWIN-32-PIC: calll L94$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006218; DARWIN-32-PIC-NEXT: L94$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006219; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6220; DARWIN-32-PIC-NEXT: leal (_ddst-L94$pb)+64([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006221; DARWIN-32-PIC-NEXT: ret
6222
6223; DARWIN-64-STATIC: _bat04:
6224; DARWIN-64-STATIC: leaq _ddst+64(%rip), %rax
6225; DARWIN-64-STATIC-NEXT: ret
6226
6227; DARWIN-64-DYNAMIC: _bat04:
6228; DARWIN-64-DYNAMIC: leaq _ddst+64(%rip), %rax
6229; DARWIN-64-DYNAMIC-NEXT: ret
6230
6231; DARWIN-64-PIC: _bat04:
6232; DARWIN-64-PIC: leaq _ddst+64(%rip), %rax
6233; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006234}
6235
6236define i8* @bat05() nounwind {
6237entry:
6238 %0 = load i32** @dptr, align 8
6239 %1 = getelementptr i32* %0, i64 16
6240 %2 = bitcast i32* %1 to i8*
6241 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006242; LINUX-64-STATIC: bat05:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006243; LINUX-64-STATIC: movq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006244; LINUX-64-STATIC: addq $64, %rax
6245; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006246
6247; LINUX-32-STATIC: bat05:
6248; LINUX-32-STATIC: movl dptr, %eax
6249; LINUX-32-STATIC-NEXT: addl $64, %eax
6250; LINUX-32-STATIC-NEXT: ret
6251
6252; LINUX-32-PIC: bat05:
6253; LINUX-32-PIC: movl dptr, %eax
6254; LINUX-32-PIC-NEXT: addl $64, %eax
6255; LINUX-32-PIC-NEXT: ret
6256
6257; LINUX-64-PIC: bat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006258; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]]
6259; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006260; LINUX-64-PIC-NEXT: addq $64, %rax
6261; LINUX-64-PIC-NEXT: ret
6262
6263; DARWIN-32-STATIC: _bat05:
6264; DARWIN-32-STATIC: movl _dptr, %eax
6265; DARWIN-32-STATIC-NEXT: addl $64, %eax
6266; DARWIN-32-STATIC-NEXT: ret
6267
6268; DARWIN-32-DYNAMIC: _bat05:
6269; DARWIN-32-DYNAMIC: movl _dptr, %eax
6270; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6271; DARWIN-32-DYNAMIC-NEXT: ret
6272
6273; DARWIN-32-PIC: _bat05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006274; DARWIN-32-PIC: calll L95$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006275; DARWIN-32-PIC-NEXT: L95$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006276; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6277; DARWIN-32-PIC-NEXT: movl _dptr-L95$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006278; DARWIN-32-PIC-NEXT: addl $64, %eax
6279; DARWIN-32-PIC-NEXT: ret
6280
6281; DARWIN-64-STATIC: _bat05:
6282; DARWIN-64-STATIC: movq _dptr(%rip), %rax
6283; DARWIN-64-STATIC-NEXT: addq $64, %rax
6284; DARWIN-64-STATIC-NEXT: ret
6285
6286; DARWIN-64-DYNAMIC: _bat05:
6287; DARWIN-64-DYNAMIC: movq _dptr(%rip), %rax
6288; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6289; DARWIN-64-DYNAMIC-NEXT: ret
6290
6291; DARWIN-64-PIC: _bat05:
6292; DARWIN-64-PIC: movq _dptr(%rip), %rax
6293; DARWIN-64-PIC-NEXT: addq $64, %rax
6294; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006295}
6296
6297define i8* @bat06() nounwind {
6298entry:
6299 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006300; LINUX-64-STATIC: bat06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006301; LINUX-64-STATIC: movl $lsrc+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006302; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006303
6304; LINUX-32-STATIC: bat06:
6305; LINUX-32-STATIC: movl $lsrc+64, %eax
6306; LINUX-32-STATIC-NEXT: ret
6307
6308; LINUX-32-PIC: bat06:
6309; LINUX-32-PIC: movl $lsrc+64, %eax
6310; LINUX-32-PIC-NEXT: ret
6311
6312; LINUX-64-PIC: bat06:
6313; LINUX-64-PIC: leaq lsrc+64(%rip), %rax
6314; LINUX-64-PIC-NEXT: ret
6315
6316; DARWIN-32-STATIC: _bat06:
6317; DARWIN-32-STATIC: movl $_lsrc+64, %eax
6318; DARWIN-32-STATIC-NEXT: ret
6319
6320; DARWIN-32-DYNAMIC: _bat06:
6321; DARWIN-32-DYNAMIC: movl $_lsrc+64, %eax
6322; DARWIN-32-DYNAMIC-NEXT: ret
6323
6324; DARWIN-32-PIC: _bat06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006325; DARWIN-32-PIC: calll L96$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006326; DARWIN-32-PIC-NEXT: L96$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006327; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6328; DARWIN-32-PIC-NEXT: leal (_lsrc-L96$pb)+64([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006329; DARWIN-32-PIC-NEXT: ret
6330
6331; DARWIN-64-STATIC: _bat06:
6332; DARWIN-64-STATIC: leaq _lsrc+64(%rip), %rax
6333; DARWIN-64-STATIC-NEXT: ret
6334
6335; DARWIN-64-DYNAMIC: _bat06:
6336; DARWIN-64-DYNAMIC: leaq _lsrc+64(%rip), %rax
6337; DARWIN-64-DYNAMIC-NEXT: ret
6338
6339; DARWIN-64-PIC: _bat06:
6340; DARWIN-64-PIC: leaq _lsrc+64(%rip), %rax
6341; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006342}
6343
6344define i8* @bat07() nounwind {
6345entry:
6346 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006347; LINUX-64-STATIC: bat07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006348; LINUX-64-STATIC: movl $ldst+64, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006349; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006350
6351; LINUX-32-STATIC: bat07:
6352; LINUX-32-STATIC: movl $ldst+64, %eax
6353; LINUX-32-STATIC-NEXT: ret
6354
6355; LINUX-32-PIC: bat07:
6356; LINUX-32-PIC: movl $ldst+64, %eax
6357; LINUX-32-PIC-NEXT: ret
6358
6359; LINUX-64-PIC: bat07:
6360; LINUX-64-PIC: leaq ldst+64(%rip), %rax
6361; LINUX-64-PIC-NEXT: ret
6362
6363; DARWIN-32-STATIC: _bat07:
6364; DARWIN-32-STATIC: movl $_ldst+64, %eax
6365; DARWIN-32-STATIC-NEXT: ret
6366
6367; DARWIN-32-DYNAMIC: _bat07:
6368; DARWIN-32-DYNAMIC: movl $_ldst+64, %eax
6369; DARWIN-32-DYNAMIC-NEXT: ret
6370
6371; DARWIN-32-PIC: _bat07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006372; DARWIN-32-PIC: calll L97$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006373; DARWIN-32-PIC-NEXT: L97$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006374; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6375; DARWIN-32-PIC-NEXT: leal (_ldst-L97$pb)+64([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006376; DARWIN-32-PIC-NEXT: ret
6377
6378; DARWIN-64-STATIC: _bat07:
6379; DARWIN-64-STATIC: leaq _ldst+64(%rip), %rax
6380; DARWIN-64-STATIC-NEXT: ret
6381
6382; DARWIN-64-DYNAMIC: _bat07:
6383; DARWIN-64-DYNAMIC: leaq _ldst+64(%rip), %rax
6384; DARWIN-64-DYNAMIC-NEXT: ret
6385
6386; DARWIN-64-PIC: _bat07:
6387; DARWIN-64-PIC: leaq _ldst+64(%rip), %rax
6388; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006389}
6390
6391define i8* @bat08() nounwind {
6392entry:
6393 %0 = load i32** @lptr, align 8
6394 %1 = getelementptr i32* %0, i64 16
6395 %2 = bitcast i32* %1 to i8*
6396 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006397; LINUX-64-STATIC: bat08:
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006398; LINUX-64-STATIC: movq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006399; LINUX-64-STATIC: addq $64, %rax
6400; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006401
6402; LINUX-32-STATIC: bat08:
6403; LINUX-32-STATIC: movl lptr, %eax
6404; LINUX-32-STATIC-NEXT: addl $64, %eax
6405; LINUX-32-STATIC-NEXT: ret
6406
6407; LINUX-32-PIC: bat08:
6408; LINUX-32-PIC: movl lptr, %eax
6409; LINUX-32-PIC-NEXT: addl $64, %eax
6410; LINUX-32-PIC-NEXT: ret
6411
6412; LINUX-64-PIC: bat08:
6413; LINUX-64-PIC: movq lptr(%rip), %rax
6414; LINUX-64-PIC-NEXT: addq $64, %rax
6415; LINUX-64-PIC-NEXT: ret
6416
6417; DARWIN-32-STATIC: _bat08:
6418; DARWIN-32-STATIC: movl _lptr, %eax
6419; DARWIN-32-STATIC-NEXT: addl $64, %eax
6420; DARWIN-32-STATIC-NEXT: ret
6421
6422; DARWIN-32-DYNAMIC: _bat08:
6423; DARWIN-32-DYNAMIC: movl _lptr, %eax
6424; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax
6425; DARWIN-32-DYNAMIC-NEXT: ret
6426
6427; DARWIN-32-PIC: _bat08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006428; DARWIN-32-PIC: calll L98$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006429; DARWIN-32-PIC-NEXT: L98$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006430; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6431; DARWIN-32-PIC-NEXT: movl _lptr-L98$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006432; DARWIN-32-PIC-NEXT: addl $64, %eax
6433; DARWIN-32-PIC-NEXT: ret
6434
6435; DARWIN-64-STATIC: _bat08:
6436; DARWIN-64-STATIC: movq _lptr(%rip), %rax
6437; DARWIN-64-STATIC-NEXT: addq $64, %rax
6438; DARWIN-64-STATIC-NEXT: ret
6439
6440; DARWIN-64-DYNAMIC: _bat08:
6441; DARWIN-64-DYNAMIC: movq _lptr(%rip), %rax
6442; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax
6443; DARWIN-64-DYNAMIC-NEXT: ret
6444
6445; DARWIN-64-PIC: _bat08:
6446; DARWIN-64-PIC: movq _lptr(%rip), %rax
6447; DARWIN-64-PIC-NEXT: addq $64, %rax
6448; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006449}
6450
6451define i8* @bam00() nounwind {
6452entry:
6453 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006454; LINUX-64-STATIC: bam00:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006455; LINUX-64-STATIC: movl $src+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006456; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006457
6458; LINUX-32-STATIC: bam00:
6459; LINUX-32-STATIC: movl $src+262144, %eax
6460; LINUX-32-STATIC-NEXT: ret
6461
6462; LINUX-32-PIC: bam00:
6463; LINUX-32-PIC: movl $src+262144, %eax
6464; LINUX-32-PIC-NEXT: ret
6465
6466; LINUX-64-PIC: bam00:
6467; LINUX-64-PIC: movl $262144, %eax
6468; LINUX-64-PIC-NEXT: addq src@GOTPCREL(%rip), %rax
6469; LINUX-64-PIC-NEXT: ret
6470
6471; DARWIN-32-STATIC: _bam00:
6472; DARWIN-32-STATIC: movl $_src+262144, %eax
6473; DARWIN-32-STATIC-NEXT: ret
6474
6475; DARWIN-32-DYNAMIC: _bam00:
6476; DARWIN-32-DYNAMIC: movl $262144, %eax
6477; DARWIN-32-DYNAMIC-NEXT: addl L_src$non_lazy_ptr, %eax
6478; DARWIN-32-DYNAMIC-NEXT: ret
6479
6480; DARWIN-32-PIC: _bam00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006481; DARWIN-32-PIC: calll L99$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006482; DARWIN-32-PIC-NEXT: L99$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006483; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006484; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006485; DARWIN-32-PIC-NEXT: addl L_src$non_lazy_ptr-L99$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006486; DARWIN-32-PIC-NEXT: ret
6487
6488; DARWIN-64-STATIC: _bam00:
6489; DARWIN-64-STATIC: movl $262144, %eax
6490; DARWIN-64-STATIC-NEXT: addq _src@GOTPCREL(%rip), %rax
6491; DARWIN-64-STATIC-NEXT: ret
6492
6493; DARWIN-64-DYNAMIC: _bam00:
6494; DARWIN-64-DYNAMIC: movl $262144, %eax
6495; DARWIN-64-DYNAMIC-NEXT: addq _src@GOTPCREL(%rip), %rax
6496; DARWIN-64-DYNAMIC-NEXT: ret
6497
6498; DARWIN-64-PIC: _bam00:
6499; DARWIN-64-PIC: movl $262144, %eax
6500; DARWIN-64-PIC-NEXT: addq _src@GOTPCREL(%rip), %rax
6501; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006502}
6503
6504define i8* @bam01() nounwind {
6505entry:
6506 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006507; LINUX-64-STATIC: bam01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006508; LINUX-64-STATIC: movl $dst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006509; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006510
6511; LINUX-32-STATIC: bam01:
6512; LINUX-32-STATIC: movl $dst+262144, %eax
6513; LINUX-32-STATIC-NEXT: ret
6514
6515; LINUX-32-PIC: bam01:
6516; LINUX-32-PIC: movl $dst+262144, %eax
6517; LINUX-32-PIC-NEXT: ret
6518
6519; LINUX-64-PIC: bam01:
6520; LINUX-64-PIC: movl $262144, %eax
6521; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), %rax
6522; LINUX-64-PIC-NEXT: ret
6523
6524; DARWIN-32-STATIC: _bam01:
6525; DARWIN-32-STATIC: movl $_dst+262144, %eax
6526; DARWIN-32-STATIC-NEXT: ret
6527
6528; DARWIN-32-DYNAMIC: _bam01:
6529; DARWIN-32-DYNAMIC: movl $262144, %eax
6530; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, %eax
6531; DARWIN-32-DYNAMIC-NEXT: ret
6532
6533; DARWIN-32-PIC: _bam01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006534; DARWIN-32-PIC: calll L100$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006535; DARWIN-32-PIC-NEXT: L100$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006536; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006537; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006538; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L100$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006539; DARWIN-32-PIC-NEXT: ret
6540
6541; DARWIN-64-STATIC: _bam01:
6542; DARWIN-64-STATIC: movl $262144, %eax
6543; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
6544; DARWIN-64-STATIC-NEXT: ret
6545
6546; DARWIN-64-DYNAMIC: _bam01:
6547; DARWIN-64-DYNAMIC: movl $262144, %eax
6548; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
6549; DARWIN-64-DYNAMIC-NEXT: ret
6550
6551; DARWIN-64-PIC: _bam01:
6552; DARWIN-64-PIC: movl $262144, %eax
6553; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), %rax
6554; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006555}
6556
6557define i8* @bxm01() nounwind {
6558entry:
6559 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006560; LINUX-64-STATIC: bxm01:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006561; LINUX-64-STATIC: movl $xdst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006562; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006563
6564; LINUX-32-STATIC: bxm01:
6565; LINUX-32-STATIC: movl $xdst+262144, %eax
6566; LINUX-32-STATIC-NEXT: ret
6567
6568; LINUX-32-PIC: bxm01:
6569; LINUX-32-PIC: movl $xdst+262144, %eax
6570; LINUX-32-PIC-NEXT: ret
6571
6572; LINUX-64-PIC: bxm01:
6573; LINUX-64-PIC: movl $262144, %eax
6574; LINUX-64-PIC-NEXT: addq xdst@GOTPCREL(%rip), %rax
6575; LINUX-64-PIC-NEXT: ret
6576
6577; DARWIN-32-STATIC: _bxm01:
6578; DARWIN-32-STATIC: movl $_xdst+262144, %eax
6579; DARWIN-32-STATIC-NEXT: ret
6580
6581; DARWIN-32-DYNAMIC: _bxm01:
6582; DARWIN-32-DYNAMIC: movl $262144, %eax
6583; DARWIN-32-DYNAMIC-NEXT: addl L_xdst$non_lazy_ptr, %eax
6584; DARWIN-32-DYNAMIC-NEXT: ret
6585
6586; DARWIN-32-PIC: _bxm01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006587; DARWIN-32-PIC: calll L101$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006588; DARWIN-32-PIC-NEXT: L101$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006589; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006590; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006591; DARWIN-32-PIC-NEXT: addl L_xdst$non_lazy_ptr-L101$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006592; DARWIN-32-PIC-NEXT: ret
6593
6594; DARWIN-64-STATIC: _bxm01:
6595; DARWIN-64-STATIC: movl $262144, %eax
6596; DARWIN-64-STATIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax
6597; DARWIN-64-STATIC-NEXT: ret
6598
6599; DARWIN-64-DYNAMIC: _bxm01:
6600; DARWIN-64-DYNAMIC: movl $262144, %eax
6601; DARWIN-64-DYNAMIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax
6602; DARWIN-64-DYNAMIC-NEXT: ret
6603
6604; DARWIN-64-PIC: _bxm01:
6605; DARWIN-64-PIC: movl $262144, %eax
6606; DARWIN-64-PIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax
6607; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006608}
6609
6610define i8* @bam02() nounwind {
6611entry:
6612 %0 = load i32** @ptr, align 8
6613 %1 = getelementptr i32* %0, i64 65536
6614 %2 = bitcast i32* %1 to i8*
6615 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006616; LINUX-64-STATIC: bam02:
6617; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006618; LINUX-64-STATIC: addq ptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006619; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006620
6621; LINUX-32-STATIC: bam02:
6622; LINUX-32-STATIC: movl $262144, %eax
6623; LINUX-32-STATIC-NEXT: addl ptr, %eax
6624; LINUX-32-STATIC-NEXT: ret
6625
6626; LINUX-32-PIC: bam02:
6627; LINUX-32-PIC: movl $262144, %eax
6628; LINUX-32-PIC-NEXT: addl ptr, %eax
6629; LINUX-32-PIC-NEXT: ret
6630
6631; LINUX-64-PIC: bam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006632; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006633; LINUX-64-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006634; LINUX-64-PIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006635; LINUX-64-PIC-NEXT: ret
6636
6637; DARWIN-32-STATIC: _bam02:
6638; DARWIN-32-STATIC: movl $262144, %eax
6639; DARWIN-32-STATIC-NEXT: addl _ptr, %eax
6640; DARWIN-32-STATIC-NEXT: ret
6641
6642; DARWIN-32-DYNAMIC: _bam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006643; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006644; DARWIN-32-DYNAMIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006645; DARWIN-32-DYNAMIC-NEXT: addl ([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006646; DARWIN-32-DYNAMIC-NEXT: ret
6647
6648; DARWIN-32-PIC: _bam02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006649; DARWIN-32-PIC: calll L102$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006650; DARWIN-32-PIC-NEXT: L102$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006651; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6652; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L102$pb([[EAX]]), [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006653; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006654; DARWIN-32-PIC-NEXT: addl ([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006655; DARWIN-32-PIC-NEXT: ret
6656
6657; DARWIN-64-STATIC: _bam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006658; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006659; DARWIN-64-STATIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006660; DARWIN-64-STATIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006661; DARWIN-64-STATIC-NEXT: ret
6662
6663; DARWIN-64-DYNAMIC: _bam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006664; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006665; DARWIN-64-DYNAMIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006666; DARWIN-64-DYNAMIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006667; DARWIN-64-DYNAMIC-NEXT: ret
6668
6669; DARWIN-64-PIC: _bam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006670; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006671; DARWIN-64-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006672; DARWIN-64-PIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006673; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006674}
6675
6676define i8* @bam03() nounwind {
6677entry:
6678 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006679; LINUX-64-STATIC: bam03:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006680; LINUX-64-STATIC: movl $dsrc+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006681; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006682
6683; LINUX-32-STATIC: bam03:
6684; LINUX-32-STATIC: movl $dsrc+262144, %eax
6685; LINUX-32-STATIC-NEXT: ret
6686
6687; LINUX-32-PIC: bam03:
6688; LINUX-32-PIC: movl $dsrc+262144, %eax
6689; LINUX-32-PIC-NEXT: ret
6690
6691; LINUX-64-PIC: bam03:
6692; LINUX-64-PIC: movl $262144, %eax
6693; LINUX-64-PIC-NEXT: addq dsrc@GOTPCREL(%rip), %rax
6694; LINUX-64-PIC-NEXT: ret
6695
6696; DARWIN-32-STATIC: _bam03:
6697; DARWIN-32-STATIC: movl $_dsrc+262144, %eax
6698; DARWIN-32-STATIC-NEXT: ret
6699
6700; DARWIN-32-DYNAMIC: _bam03:
6701; DARWIN-32-DYNAMIC: movl $_dsrc+262144, %eax
6702; DARWIN-32-DYNAMIC-NEXT: ret
6703
6704; DARWIN-32-PIC: _bam03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006705; DARWIN-32-PIC: calll L103$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006706; DARWIN-32-PIC-NEXT: L103$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006707; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6708; DARWIN-32-PIC-NEXT: leal (_dsrc-L103$pb)+262144([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006709; DARWIN-32-PIC-NEXT: ret
6710
6711; DARWIN-64-STATIC: _bam03:
6712; DARWIN-64-STATIC: leaq _dsrc+262144(%rip), %rax
6713; DARWIN-64-STATIC-NEXT: ret
6714
6715; DARWIN-64-DYNAMIC: _bam03:
6716; DARWIN-64-DYNAMIC: leaq _dsrc+262144(%rip), %rax
6717; DARWIN-64-DYNAMIC-NEXT: ret
6718
6719; DARWIN-64-PIC: _bam03:
6720; DARWIN-64-PIC: leaq _dsrc+262144(%rip), %rax
6721; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006722}
6723
6724define i8* @bam04() nounwind {
6725entry:
6726 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006727; LINUX-64-STATIC: bam04:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006728; LINUX-64-STATIC: movl $ddst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006729; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006730
6731; LINUX-32-STATIC: bam04:
6732; LINUX-32-STATIC: movl $ddst+262144, %eax
6733; LINUX-32-STATIC-NEXT: ret
6734
6735; LINUX-32-PIC: bam04:
6736; LINUX-32-PIC: movl $ddst+262144, %eax
6737; LINUX-32-PIC-NEXT: ret
6738
6739; LINUX-64-PIC: bam04:
6740; LINUX-64-PIC: movl $262144, %eax
6741; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), %rax
6742; LINUX-64-PIC-NEXT: ret
6743
6744; DARWIN-32-STATIC: _bam04:
6745; DARWIN-32-STATIC: movl $_ddst+262144, %eax
6746; DARWIN-32-STATIC-NEXT: ret
6747
6748; DARWIN-32-DYNAMIC: _bam04:
6749; DARWIN-32-DYNAMIC: movl $_ddst+262144, %eax
6750; DARWIN-32-DYNAMIC-NEXT: ret
6751
6752; DARWIN-32-PIC: _bam04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006753; DARWIN-32-PIC: calll L104$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006754; DARWIN-32-PIC-NEXT: L104$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006755; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6756; DARWIN-32-PIC-NEXT: leal (_ddst-L104$pb)+262144([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006757; DARWIN-32-PIC-NEXT: ret
6758
6759; DARWIN-64-STATIC: _bam04:
6760; DARWIN-64-STATIC: leaq _ddst+262144(%rip), %rax
6761; DARWIN-64-STATIC-NEXT: ret
6762
6763; DARWIN-64-DYNAMIC: _bam04:
6764; DARWIN-64-DYNAMIC: leaq _ddst+262144(%rip), %rax
6765; DARWIN-64-DYNAMIC-NEXT: ret
6766
6767; DARWIN-64-PIC: _bam04:
6768; DARWIN-64-PIC: leaq _ddst+262144(%rip), %rax
6769; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006770}
6771
6772define i8* @bam05() nounwind {
6773entry:
6774 %0 = load i32** @dptr, align 8
6775 %1 = getelementptr i32* %0, i64 65536
6776 %2 = bitcast i32* %1 to i8*
6777 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006778; LINUX-64-STATIC: bam05:
6779; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006780; LINUX-64-STATIC: addq dptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006781; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006782
6783; LINUX-32-STATIC: bam05:
6784; LINUX-32-STATIC: movl $262144, %eax
6785; LINUX-32-STATIC-NEXT: addl dptr, %eax
6786; LINUX-32-STATIC-NEXT: ret
6787
6788; LINUX-32-PIC: bam05:
6789; LINUX-32-PIC: movl $262144, %eax
6790; LINUX-32-PIC-NEXT: addl dptr, %eax
6791; LINUX-32-PIC-NEXT: ret
6792
6793; LINUX-64-PIC: bam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006794; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006795; LINUX-64-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006796; LINUX-64-PIC-NEXT: addq ([[RCX]]), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006797; LINUX-64-PIC-NEXT: ret
6798
6799; DARWIN-32-STATIC: _bam05:
6800; DARWIN-32-STATIC: movl $262144, %eax
6801; DARWIN-32-STATIC-NEXT: addl _dptr, %eax
6802; DARWIN-32-STATIC-NEXT: ret
6803
6804; DARWIN-32-DYNAMIC: _bam05:
6805; DARWIN-32-DYNAMIC: movl $262144, %eax
6806; DARWIN-32-DYNAMIC-NEXT: addl _dptr, %eax
6807; DARWIN-32-DYNAMIC-NEXT: ret
6808
6809; DARWIN-32-PIC: _bam05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006810; DARWIN-32-PIC: calll L105$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006811; DARWIN-32-PIC-NEXT: L105$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006812; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006813; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006814; DARWIN-32-PIC-NEXT: addl _dptr-L105$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006815; DARWIN-32-PIC-NEXT: ret
6816
6817; DARWIN-64-STATIC: _bam05:
6818; DARWIN-64-STATIC: movl $262144, %eax
6819; DARWIN-64-STATIC-NEXT: addq _dptr(%rip), %rax
6820; DARWIN-64-STATIC-NEXT: ret
6821
6822; DARWIN-64-DYNAMIC: _bam05:
6823; DARWIN-64-DYNAMIC: movl $262144, %eax
6824; DARWIN-64-DYNAMIC-NEXT: addq _dptr(%rip), %rax
6825; DARWIN-64-DYNAMIC-NEXT: ret
6826
6827; DARWIN-64-PIC: _bam05:
6828; DARWIN-64-PIC: movl $262144, %eax
6829; DARWIN-64-PIC-NEXT: addq _dptr(%rip), %rax
6830; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006831}
6832
6833define i8* @bam06() nounwind {
6834entry:
6835 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006836; LINUX-64-STATIC: bam06:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006837; LINUX-64-STATIC: movl $lsrc+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006838; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006839
6840; LINUX-32-STATIC: bam06:
6841; LINUX-32-STATIC: movl $lsrc+262144, %eax
6842; LINUX-32-STATIC-NEXT: ret
6843
6844; LINUX-32-PIC: bam06:
6845; LINUX-32-PIC: movl $lsrc+262144, %eax
6846; LINUX-32-PIC-NEXT: ret
6847
6848; LINUX-64-PIC: bam06:
6849; LINUX-64-PIC: leaq lsrc+262144(%rip), %rax
6850; LINUX-64-PIC-NEXT: ret
6851
6852; DARWIN-32-STATIC: _bam06:
6853; DARWIN-32-STATIC: movl $_lsrc+262144, %eax
6854; DARWIN-32-STATIC-NEXT: ret
6855
6856; DARWIN-32-DYNAMIC: _bam06:
6857; DARWIN-32-DYNAMIC: movl $_lsrc+262144, %eax
6858; DARWIN-32-DYNAMIC-NEXT: ret
6859
6860; DARWIN-32-PIC: _bam06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006861; DARWIN-32-PIC: calll L106$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006862; DARWIN-32-PIC-NEXT: L106$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006863; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
6864; DARWIN-32-PIC-NEXT: leal (_lsrc-L106$pb)+262144([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006865; DARWIN-32-PIC-NEXT: ret
6866
6867; DARWIN-64-STATIC: _bam06:
6868; DARWIN-64-STATIC: leaq _lsrc+262144(%rip), %rax
6869; DARWIN-64-STATIC-NEXT: ret
6870
6871; DARWIN-64-DYNAMIC: _bam06:
6872; DARWIN-64-DYNAMIC: leaq _lsrc+262144(%rip), %rax
6873; DARWIN-64-DYNAMIC-NEXT: ret
6874
6875; DARWIN-64-PIC: _bam06:
6876; DARWIN-64-PIC: leaq _lsrc+262144(%rip), %rax
6877; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006878}
6879
6880define i8* @bam07() nounwind {
6881entry:
6882 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
Chris Lattner4f066492009-07-11 20:29:19 +00006883; LINUX-64-STATIC: bam07:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00006884; LINUX-64-STATIC: movl $ldst+262144, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00006885; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006886
6887; LINUX-32-STATIC: bam07:
6888; LINUX-32-STATIC: movl $ldst+262144, %eax
6889; LINUX-32-STATIC-NEXT: ret
6890
6891; LINUX-32-PIC: bam07:
6892; LINUX-32-PIC: movl $ldst+262144, %eax
6893; LINUX-32-PIC-NEXT: ret
6894
6895; LINUX-64-PIC: bam07:
6896; LINUX-64-PIC: leaq ldst+262144(%rip), %rax
6897; LINUX-64-PIC-NEXT: ret
6898
6899; DARWIN-32-STATIC: _bam07:
6900; DARWIN-32-STATIC: movl $_ldst+262144, %eax
6901; DARWIN-32-STATIC-NEXT: ret
6902
6903; DARWIN-32-DYNAMIC: _bam07:
6904; DARWIN-32-DYNAMIC: movl $_ldst+262144, %eax
6905; DARWIN-32-DYNAMIC-NEXT: ret
6906
6907; DARWIN-32-PIC: _bam07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006908; DARWIN-32-PIC: calll L107$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006909; DARWIN-32-PIC-NEXT: L107$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006910; DARWIN-32-PIC-NEXT: popl %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006911; DARWIN-32-PIC-NEXT: leal (_ldst-L107$pb)+262144([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006912; DARWIN-32-PIC-NEXT: ret
6913
6914; DARWIN-64-STATIC: _bam07:
6915; DARWIN-64-STATIC: leaq _ldst+262144(%rip), %rax
6916; DARWIN-64-STATIC-NEXT: ret
6917
6918; DARWIN-64-DYNAMIC: _bam07:
6919; DARWIN-64-DYNAMIC: leaq _ldst+262144(%rip), %rax
6920; DARWIN-64-DYNAMIC-NEXT: ret
6921
6922; DARWIN-64-PIC: _bam07:
6923; DARWIN-64-PIC: leaq _ldst+262144(%rip), %rax
6924; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006925}
6926
6927define i8* @bam08() nounwind {
6928entry:
6929 %0 = load i32** @lptr, align 8
6930 %1 = getelementptr i32* %0, i64 65536
6931 %2 = bitcast i32* %1 to i8*
6932 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006933; LINUX-64-STATIC: bam08:
6934; LINUX-64-STATIC: movl $262144, %eax
Dan Gohmanef74e9b2009-08-20 18:23:44 +00006935; LINUX-64-STATIC: addq lptr(%rip), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00006936; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006937
6938; LINUX-32-STATIC: bam08:
6939; LINUX-32-STATIC: movl $262144, %eax
6940; LINUX-32-STATIC-NEXT: addl lptr, %eax
6941; LINUX-32-STATIC-NEXT: ret
6942
6943; LINUX-32-PIC: bam08:
6944; LINUX-32-PIC: movl $262144, %eax
6945; LINUX-32-PIC-NEXT: addl lptr, %eax
6946; LINUX-32-PIC-NEXT: ret
6947
6948; LINUX-64-PIC: bam08:
6949; LINUX-64-PIC: movl $262144, %eax
6950; LINUX-64-PIC-NEXT: addq lptr(%rip), %rax
6951; LINUX-64-PIC-NEXT: ret
6952
6953; DARWIN-32-STATIC: _bam08:
6954; DARWIN-32-STATIC: movl $262144, %eax
6955; DARWIN-32-STATIC-NEXT: addl _lptr, %eax
6956; DARWIN-32-STATIC-NEXT: ret
6957
6958; DARWIN-32-DYNAMIC: _bam08:
6959; DARWIN-32-DYNAMIC: movl $262144, %eax
6960; DARWIN-32-DYNAMIC-NEXT: addl _lptr, %eax
6961; DARWIN-32-DYNAMIC-NEXT: ret
6962
6963; DARWIN-32-PIC: _bam08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00006964; DARWIN-32-PIC: calll L108$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00006965; DARWIN-32-PIC-NEXT: L108$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006966; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006967; DARWIN-32-PIC-NEXT: movl $262144, %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006968; DARWIN-32-PIC-NEXT: addl _lptr-L108$pb([[ECX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006969; DARWIN-32-PIC-NEXT: ret
6970
6971; DARWIN-64-STATIC: _bam08:
6972; DARWIN-64-STATIC: movl $262144, %eax
6973; DARWIN-64-STATIC-NEXT: addq _lptr(%rip), %rax
6974; DARWIN-64-STATIC-NEXT: ret
6975
6976; DARWIN-64-DYNAMIC: _bam08:
6977; DARWIN-64-DYNAMIC: movl $262144, %eax
6978; DARWIN-64-DYNAMIC-NEXT: addq _lptr(%rip), %rax
6979; DARWIN-64-DYNAMIC-NEXT: ret
6980
6981; DARWIN-64-PIC: _bam08:
6982; DARWIN-64-PIC: movl $262144, %eax
6983; DARWIN-64-PIC-NEXT: addq _lptr(%rip), %rax
6984; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00006985}
6986
6987define i8* @cat00(i64 %i) nounwind {
6988entry:
6989 %0 = add i64 %i, 16
6990 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
6991 %2 = bitcast i32* %1 to i8*
6992 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00006993; LINUX-64-STATIC: cat00:
6994; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax
6995; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00006996
6997; LINUX-32-STATIC: cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00006998; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
6999; LINUX-32-STATIC-NEXT: leal src+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007000; LINUX-32-STATIC-NEXT: ret
7001
7002; LINUX-32-PIC: cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007003; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7004; LINUX-32-PIC-NEXT: leal src+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007005; LINUX-32-PIC-NEXT: ret
7006
7007; LINUX-64-PIC: cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007008; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
7009; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007010; LINUX-64-PIC-NEXT: ret
7011
7012; DARWIN-32-STATIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007013; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7014; DARWIN-32-STATIC-NEXT: leal _src+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007015; DARWIN-32-STATIC-NEXT: ret
7016
7017; DARWIN-32-DYNAMIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007018; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7019; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]]
7020; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007021; DARWIN-32-DYNAMIC-NEXT: ret
7022
7023; DARWIN-32-PIC: _cat00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007024; DARWIN-32-PIC: calll L109$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007025; DARWIN-32-PIC-NEXT: L109$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007026; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7027; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7028; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L109$pb([[EAX]]), [[EAX:%e.x]]
7029; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007030; DARWIN-32-PIC-NEXT: ret
7031
7032; DARWIN-64-STATIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007033; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7034; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007035; DARWIN-64-STATIC-NEXT: ret
7036
7037; DARWIN-64-DYNAMIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007038; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7039; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007040; DARWIN-64-DYNAMIC-NEXT: ret
7041
7042; DARWIN-64-PIC: _cat00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007043; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7044; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007045; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007046}
7047
7048define i8* @cxt00(i64 %i) nounwind {
7049entry:
7050 %0 = add i64 %i, 16
7051 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7052 %2 = bitcast i32* %1 to i8*
7053 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007054; LINUX-64-STATIC: cxt00:
7055; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax
7056; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007057
7058; LINUX-32-STATIC: cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007059; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7060; LINUX-32-STATIC-NEXT: leal xsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007061; LINUX-32-STATIC-NEXT: ret
7062
7063; LINUX-32-PIC: cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007064; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7065; LINUX-32-PIC-NEXT: leal xsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007066; LINUX-32-PIC-NEXT: ret
7067
7068; LINUX-64-PIC: cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007069; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7070; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007071; LINUX-64-PIC-NEXT: ret
7072
7073; DARWIN-32-STATIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007074; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7075; DARWIN-32-STATIC-NEXT: leal _xsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007076; DARWIN-32-STATIC-NEXT: ret
7077
7078; DARWIN-32-DYNAMIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007079; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7080; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
7081; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007082; DARWIN-32-DYNAMIC-NEXT: ret
7083
7084; DARWIN-32-PIC: _cxt00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007085; DARWIN-32-PIC: calll L110$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007086; DARWIN-32-PIC-NEXT: L110$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007087; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7088; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7089; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L110$pb([[EAX]]), [[EAX:%e.x]]
7090; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007091; DARWIN-32-PIC-NEXT: ret
7092
7093; DARWIN-64-STATIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007094; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7095; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007096; DARWIN-64-STATIC-NEXT: ret
7097
7098; DARWIN-64-DYNAMIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007099; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7100; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007101; DARWIN-64-DYNAMIC-NEXT: ret
7102
7103; DARWIN-64-PIC: _cxt00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007104; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7105; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007106; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007107}
7108
7109define i8* @cat01(i64 %i) nounwind {
7110entry:
7111 %0 = add i64 %i, 16
7112 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7113 %2 = bitcast i32* %1 to i8*
7114 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007115; LINUX-64-STATIC: cat01:
7116; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax
7117; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007118
7119; LINUX-32-STATIC: cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007120; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7121; LINUX-32-STATIC-NEXT: leal dst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007122; LINUX-32-STATIC-NEXT: ret
7123
7124; LINUX-32-PIC: cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007125; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7126; LINUX-32-PIC-NEXT: leal dst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007127; LINUX-32-PIC-NEXT: ret
7128
7129; LINUX-64-PIC: cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007130; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]]
7131; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007132; LINUX-64-PIC-NEXT: ret
7133
7134; DARWIN-32-STATIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007135; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7136; DARWIN-32-STATIC-NEXT: leal _dst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007137; DARWIN-32-STATIC-NEXT: ret
7138
7139; DARWIN-32-DYNAMIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007140; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7141; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]]
7142; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007143; DARWIN-32-DYNAMIC-NEXT: ret
7144
7145; DARWIN-32-PIC: _cat01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007146; DARWIN-32-PIC: calll L111$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007147; DARWIN-32-PIC-NEXT: L111$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007148; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7149; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7150; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L111$pb([[EAX]]), [[EAX:%e.x]]
7151; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007152; DARWIN-32-PIC-NEXT: ret
7153
7154; DARWIN-64-STATIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007155; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7156; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007157; DARWIN-64-STATIC-NEXT: ret
7158
7159; DARWIN-64-DYNAMIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007160; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7161; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007162; DARWIN-64-DYNAMIC-NEXT: ret
7163
7164; DARWIN-64-PIC: _cat01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007165; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7166; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007167; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007168}
7169
7170define i8* @cxt01(i64 %i) nounwind {
7171entry:
7172 %0 = add i64 %i, 16
7173 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7174 %2 = bitcast i32* %1 to i8*
7175 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007176; LINUX-64-STATIC: cxt01:
7177; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax
7178; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007179
7180; LINUX-32-STATIC: cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007181; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7182; LINUX-32-STATIC-NEXT: leal xdst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007183; LINUX-32-STATIC-NEXT: ret
7184
7185; LINUX-32-PIC: cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007186; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7187; LINUX-32-PIC-NEXT: leal xdst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007188; LINUX-32-PIC-NEXT: ret
7189
7190; LINUX-64-PIC: cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007191; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7192; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007193; LINUX-64-PIC-NEXT: ret
7194
7195; DARWIN-32-STATIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007196; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7197; DARWIN-32-STATIC-NEXT: leal _xdst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007198; DARWIN-32-STATIC-NEXT: ret
7199
7200; DARWIN-32-DYNAMIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007201; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7202; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]]
7203; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007204; DARWIN-32-DYNAMIC-NEXT: ret
7205
7206; DARWIN-32-PIC: _cxt01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007207; DARWIN-32-PIC: calll L112$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007208; DARWIN-32-PIC-NEXT: L112$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007209; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7210; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7211; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L112$pb([[EAX]]), [[EAX:%e.x]]
7212; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007213; DARWIN-32-PIC-NEXT: ret
7214
7215; DARWIN-64-STATIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007216; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7217; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007218; DARWIN-64-STATIC-NEXT: ret
7219
7220; DARWIN-64-DYNAMIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007221; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7222; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007223; DARWIN-64-DYNAMIC-NEXT: ret
7224
7225; DARWIN-64-PIC: _cxt01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007226; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7227; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007228; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007229}
7230
7231define i8* @cat02(i64 %i) nounwind {
7232entry:
7233 %0 = load i32** @ptr, align 8
7234 %1 = add i64 %i, 16
7235 %2 = getelementptr i32* %0, i64 %1
7236 %3 = bitcast i32* %2 to i8*
7237 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00007238; LINUX-64-STATIC: cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007239; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]]
7240; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007241; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007242
7243; LINUX-32-STATIC: cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007244; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7245; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]]
7246; LINUX-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007247; LINUX-32-STATIC-NEXT: ret
7248
7249; LINUX-32-PIC: cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007250; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7251; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]]
7252; LINUX-32-PIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007253; LINUX-32-PIC-NEXT: ret
7254
7255; LINUX-64-PIC: cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007256; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7257; LINUX-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7258; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007259; LINUX-64-PIC-NEXT: ret
7260
7261; DARWIN-32-STATIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007262; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7263; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]]
7264; DARWIN-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007265; DARWIN-32-STATIC-NEXT: ret
7266
7267; DARWIN-32-DYNAMIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007268; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]]
7269; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
7270; DARWIN-32-DYNAMIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7271; DARWIN-32-DYNAMIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007272; DARWIN-32-DYNAMIC-NEXT: ret
7273
7274; DARWIN-32-PIC: _cat02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007275; DARWIN-32-PIC: calll L113$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007276; DARWIN-32-PIC-NEXT: L113$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007277; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7278; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L113$pb([[EAX]]), [[EAX:%e.x]]
7279; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
7280; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7281; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007282; DARWIN-32-PIC-NEXT: ret
7283
7284; DARWIN-64-STATIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007285; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7286; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7287; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007288; DARWIN-64-STATIC-NEXT: ret
7289
7290; DARWIN-64-DYNAMIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007291; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7292; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7293; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007294; DARWIN-64-DYNAMIC-NEXT: ret
7295
7296; DARWIN-64-PIC: _cat02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007297; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7298; DARWIN-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7299; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007300; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007301}
7302
7303define i8* @cat03(i64 %i) nounwind {
7304entry:
7305 %0 = add i64 %i, 16
7306 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7307 %2 = bitcast i32* %1 to i8*
7308 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007309; LINUX-64-STATIC: cat03:
7310; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax
7311; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007312
7313; LINUX-32-STATIC: cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007314; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7315; LINUX-32-STATIC-NEXT: leal dsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007316; LINUX-32-STATIC-NEXT: ret
7317
7318; LINUX-32-PIC: cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007319; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7320; LINUX-32-PIC-NEXT: leal dsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007321; LINUX-32-PIC-NEXT: ret
7322
7323; LINUX-64-PIC: cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007324; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7325; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007326; LINUX-64-PIC-NEXT: ret
7327
7328; DARWIN-32-STATIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007329; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7330; DARWIN-32-STATIC-NEXT: leal _dsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007331; DARWIN-32-STATIC-NEXT: ret
7332
7333; DARWIN-32-DYNAMIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007334; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7335; DARWIN-32-DYNAMIC-NEXT: leal _dsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007336; DARWIN-32-DYNAMIC-NEXT: ret
7337
7338; DARWIN-32-PIC: _cat03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007339; DARWIN-32-PIC: calll L114$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007340; DARWIN-32-PIC-NEXT: L114$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007341; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7342; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7343; DARWIN-32-PIC-NEXT: leal (_dsrc-L114$pb)+64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007344; DARWIN-32-PIC-NEXT: ret
7345
7346; DARWIN-64-STATIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007347; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
7348; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007349; DARWIN-64-STATIC-NEXT: ret
7350
7351; DARWIN-64-DYNAMIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007352; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
7353; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007354; DARWIN-64-DYNAMIC-NEXT: ret
7355
7356; DARWIN-64-PIC: _cat03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007357; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
7358; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007359; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007360}
7361
7362define i8* @cat04(i64 %i) nounwind {
7363entry:
7364 %0 = add i64 %i, 16
7365 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
7366 %2 = bitcast i32* %1 to i8*
7367 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007368; LINUX-64-STATIC: cat04:
7369; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax
7370; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007371
7372; LINUX-32-STATIC: cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007373; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7374; LINUX-32-STATIC-NEXT: leal ddst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007375; LINUX-32-STATIC-NEXT: ret
7376
7377; LINUX-32-PIC: cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007378; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7379; LINUX-32-PIC-NEXT: leal ddst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007380; LINUX-32-PIC-NEXT: ret
7381
7382; LINUX-64-PIC: cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007383; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
7384; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007385; LINUX-64-PIC-NEXT: ret
7386
7387; DARWIN-32-STATIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007388; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7389; DARWIN-32-STATIC-NEXT: leal _ddst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007390; DARWIN-32-STATIC-NEXT: ret
7391
7392; DARWIN-32-DYNAMIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007393; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7394; DARWIN-32-DYNAMIC-NEXT: leal _ddst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007395; DARWIN-32-DYNAMIC-NEXT: ret
7396
7397; DARWIN-32-PIC: _cat04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007398; DARWIN-32-PIC: calll L115$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007399; DARWIN-32-PIC-NEXT: L115$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007400; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7401; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7402; DARWIN-32-PIC-NEXT: leal (_ddst-L115$pb)+64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007403; DARWIN-32-PIC-NEXT: ret
7404
7405; DARWIN-64-STATIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007406; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
7407; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007408; DARWIN-64-STATIC-NEXT: ret
7409
7410; DARWIN-64-DYNAMIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007411; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
7412; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007413; DARWIN-64-DYNAMIC-NEXT: ret
7414
7415; DARWIN-64-PIC: _cat04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007416; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
7417; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007418; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007419}
7420
7421define i8* @cat05(i64 %i) nounwind {
7422entry:
7423 %0 = load i32** @dptr, align 8
7424 %1 = add i64 %i, 16
7425 %2 = getelementptr i32* %0, i64 %1
7426 %3 = bitcast i32* %2 to i8*
7427 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00007428; LINUX-64-STATIC: cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007429; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]]
7430; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007431; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007432
7433; LINUX-32-STATIC: cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007434; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7435; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]]
7436; LINUX-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007437; LINUX-32-STATIC-NEXT: ret
7438
7439; LINUX-32-PIC: cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007440; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7441; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]]
7442; LINUX-32-PIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007443; LINUX-32-PIC-NEXT: ret
7444
7445; LINUX-64-PIC: cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007446; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]]
7447; LINUX-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7448; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007449; LINUX-64-PIC-NEXT: ret
7450
7451; DARWIN-32-STATIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007452; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7453; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]]
7454; DARWIN-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007455; DARWIN-32-STATIC-NEXT: ret
7456
7457; DARWIN-32-DYNAMIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007458; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7459; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]]
7460; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007461; DARWIN-32-DYNAMIC-NEXT: ret
7462
7463; DARWIN-32-PIC: _cat05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007464; DARWIN-32-PIC: calll L116$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007465; DARWIN-32-PIC-NEXT: L116$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007466; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7467; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7468; DARWIN-32-PIC-NEXT: movl _dptr-L116$pb([[EAX]]), [[EAX:%e.x]]
7469; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007470; DARWIN-32-PIC-NEXT: ret
7471
7472; DARWIN-64-STATIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007473; DARWIN-64-STATIC: movq _dptr(%rip), [[RAX:%r.x]]
7474; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007475; DARWIN-64-STATIC-NEXT: ret
7476
7477; DARWIN-64-DYNAMIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007478; DARWIN-64-DYNAMIC: movq _dptr(%rip), [[RAX:%r.x]]
7479; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007480; DARWIN-64-DYNAMIC-NEXT: ret
7481
7482; DARWIN-64-PIC: _cat05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007483; DARWIN-64-PIC: movq _dptr(%rip), [[RAX:%r.x]]
7484; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007485; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007486}
7487
7488define i8* @cat06(i64 %i) nounwind {
7489entry:
7490 %0 = add i64 %i, 16
7491 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
7492 %2 = bitcast i32* %1 to i8*
7493 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007494; LINUX-64-STATIC: cat06:
7495; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax
7496; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007497
7498; LINUX-32-STATIC: cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007499; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7500; LINUX-32-STATIC-NEXT: leal lsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007501; LINUX-32-STATIC-NEXT: ret
7502
7503; LINUX-32-PIC: cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007504; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7505; LINUX-32-PIC-NEXT: leal lsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007506; LINUX-32-PIC-NEXT: ret
7507
7508; LINUX-64-PIC: cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007509; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
7510; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007511; LINUX-64-PIC-NEXT: ret
7512
7513; DARWIN-32-STATIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007514; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7515; DARWIN-32-STATIC-NEXT: leal _lsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007516; DARWIN-32-STATIC-NEXT: ret
7517
7518; DARWIN-32-DYNAMIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007519; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7520; DARWIN-32-DYNAMIC-NEXT: leal _lsrc+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007521; DARWIN-32-DYNAMIC-NEXT: ret
7522
7523; DARWIN-32-PIC: _cat06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007524; DARWIN-32-PIC: calll L117$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007525; DARWIN-32-PIC-NEXT: L117$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007526; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7527; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7528; DARWIN-32-PIC-NEXT: leal (_lsrc-L117$pb)+64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007529; DARWIN-32-PIC-NEXT: ret
7530
7531; DARWIN-64-STATIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007532; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
7533; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007534; DARWIN-64-STATIC-NEXT: ret
7535
7536; DARWIN-64-DYNAMIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007537; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
7538; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007539; DARWIN-64-DYNAMIC-NEXT: ret
7540
7541; DARWIN-64-PIC: _cat06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007542; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
7543; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007544; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007545}
7546
7547define i8* @cat07(i64 %i) nounwind {
7548entry:
7549 %0 = add i64 %i, 16
7550 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
7551 %2 = bitcast i32* %1 to i8*
7552 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007553; LINUX-64-STATIC: cat07:
7554; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax
7555; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007556
7557; LINUX-32-STATIC: cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007558; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7559; LINUX-32-STATIC-NEXT: leal ldst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007560; LINUX-32-STATIC-NEXT: ret
7561
7562; LINUX-32-PIC: cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007563; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7564; LINUX-32-PIC-NEXT: leal ldst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007565; LINUX-32-PIC-NEXT: ret
7566
7567; LINUX-64-PIC: cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007568; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
7569; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007570; LINUX-64-PIC-NEXT: ret
7571
7572; DARWIN-32-STATIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007573; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7574; DARWIN-32-STATIC-NEXT: leal _ldst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007575; DARWIN-32-STATIC-NEXT: ret
7576
7577; DARWIN-32-DYNAMIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007578; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7579; DARWIN-32-DYNAMIC-NEXT: leal _ldst+64(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007580; DARWIN-32-DYNAMIC-NEXT: ret
7581
7582; DARWIN-32-PIC: _cat07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007583; DARWIN-32-PIC: calll L118$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007584; DARWIN-32-PIC-NEXT: L118$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007585; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7586; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7587; DARWIN-32-PIC-NEXT: leal (_ldst-L118$pb)+64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007588; DARWIN-32-PIC-NEXT: ret
7589
7590; DARWIN-64-STATIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007591; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
7592; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007593; DARWIN-64-STATIC-NEXT: ret
7594
7595; DARWIN-64-DYNAMIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007596; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
7597; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007598; DARWIN-64-DYNAMIC-NEXT: ret
7599
7600; DARWIN-64-PIC: _cat07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007601; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
7602; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007603; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007604}
7605
7606define i8* @cat08(i64 %i) nounwind {
7607entry:
7608 %0 = load i32** @lptr, align 8
7609 %1 = add i64 %i, 16
7610 %2 = getelementptr i32* %0, i64 %1
7611 %3 = bitcast i32* %2 to i8*
7612 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00007613; LINUX-64-STATIC: cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007614; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]]
7615; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007616; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007617
7618; LINUX-32-STATIC: cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007619; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7620; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]]
7621; LINUX-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007622; LINUX-32-STATIC-NEXT: ret
7623
7624; LINUX-32-PIC: cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007625; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7626; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]]
7627; LINUX-32-PIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007628; LINUX-32-PIC-NEXT: ret
7629
7630; LINUX-64-PIC: cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007631; LINUX-64-PIC: movq lptr(%rip), [[RAX:%r.x]]
7632; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007633; LINUX-64-PIC-NEXT: ret
7634
7635; DARWIN-32-STATIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007636; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7637; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]]
7638; DARWIN-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007639; DARWIN-32-STATIC-NEXT: ret
7640
7641; DARWIN-32-DYNAMIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007642; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7643; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]]
7644; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007645; DARWIN-32-DYNAMIC-NEXT: ret
7646
7647; DARWIN-32-PIC: _cat08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007648; DARWIN-32-PIC: calll L119$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007649; DARWIN-32-PIC-NEXT: L119$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007650; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7651; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7652; DARWIN-32-PIC-NEXT: movl _lptr-L119$pb([[EAX]]), [[EAX:%e.x]]
7653; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007654; DARWIN-32-PIC-NEXT: ret
7655
7656; DARWIN-64-STATIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007657; DARWIN-64-STATIC: movq _lptr(%rip), [[RAX:%r.x]]
7658; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007659; DARWIN-64-STATIC-NEXT: ret
7660
7661; DARWIN-64-DYNAMIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007662; DARWIN-64-DYNAMIC: movq _lptr(%rip), [[RAX:%r.x]]
7663; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007664; DARWIN-64-DYNAMIC-NEXT: ret
7665
7666; DARWIN-64-PIC: _cat08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007667; DARWIN-64-PIC: movq _lptr(%rip), [[RAX:%r.x]]
7668; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007669; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007670}
7671
7672define i8* @cam00(i64 %i) nounwind {
7673entry:
7674 %0 = add i64 %i, 65536
7675 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
7676 %2 = bitcast i32* %1 to i8*
7677 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007678; LINUX-64-STATIC: cam00:
7679; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax
7680; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007681
7682; LINUX-32-STATIC: cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007683; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7684; LINUX-32-STATIC-NEXT: leal src+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007685; LINUX-32-STATIC-NEXT: ret
7686
7687; LINUX-32-PIC: cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007688; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7689; LINUX-32-PIC-NEXT: leal src+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007690; LINUX-32-PIC-NEXT: ret
7691
7692; LINUX-64-PIC: cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007693; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]]
7694; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007695; LINUX-64-PIC-NEXT: ret
7696
7697; DARWIN-32-STATIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007698; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7699; DARWIN-32-STATIC-NEXT: leal _src+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007700; DARWIN-32-STATIC-NEXT: ret
7701
7702; DARWIN-32-DYNAMIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007703; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7704; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]]
7705; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007706; DARWIN-32-DYNAMIC-NEXT: ret
7707
7708; DARWIN-32-PIC: _cam00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007709; DARWIN-32-PIC: calll L120$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007710; DARWIN-32-PIC-NEXT: L120$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007711; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7712; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7713; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L120$pb([[EAX]]), [[EAX:%e.x]]
7714; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007715; DARWIN-32-PIC-NEXT: ret
7716
7717; DARWIN-64-STATIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007718; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7719; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007720; DARWIN-64-STATIC-NEXT: ret
7721
7722; DARWIN-64-DYNAMIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007723; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7724; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007725; DARWIN-64-DYNAMIC-NEXT: ret
7726
7727; DARWIN-64-PIC: _cam00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007728; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]]
7729; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007730; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007731}
7732
7733define i8* @cxm00(i64 %i) nounwind {
7734entry:
7735 %0 = add i64 %i, 65536
7736 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
7737 %2 = bitcast i32* %1 to i8*
7738 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007739; LINUX-64-STATIC: cxm00:
7740; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax
7741; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007742
7743; LINUX-32-STATIC: cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007744; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7745; LINUX-32-STATIC-NEXT: leal xsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007746; LINUX-32-STATIC-NEXT: ret
7747
7748; LINUX-32-PIC: cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007749; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7750; LINUX-32-PIC-NEXT: leal xsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007751; LINUX-32-PIC-NEXT: ret
7752
7753; LINUX-64-PIC: cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007754; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7755; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007756; LINUX-64-PIC-NEXT: ret
7757
7758; DARWIN-32-STATIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007759; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7760; DARWIN-32-STATIC-NEXT: leal _xsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007761; DARWIN-32-STATIC-NEXT: ret
7762
7763; DARWIN-32-DYNAMIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007764; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7765; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]]
7766; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007767; DARWIN-32-DYNAMIC-NEXT: ret
7768
7769; DARWIN-32-PIC: _cxm00:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007770; DARWIN-32-PIC: calll L121$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007771; DARWIN-32-PIC-NEXT: L121$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007772; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7773; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7774; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L121$pb([[EAX]]), [[EAX:%e.x]]
7775; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007776; DARWIN-32-PIC-NEXT: ret
7777
7778; DARWIN-64-STATIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007779; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7780; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007781; DARWIN-64-STATIC-NEXT: ret
7782
7783; DARWIN-64-DYNAMIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007784; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7785; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007786; DARWIN-64-DYNAMIC-NEXT: ret
7787
7788; DARWIN-64-PIC: _cxm00:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007789; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]]
7790; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007791; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007792}
7793
7794define i8* @cam01(i64 %i) nounwind {
7795entry:
7796 %0 = add i64 %i, 65536
7797 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
7798 %2 = bitcast i32* %1 to i8*
7799 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007800; LINUX-64-STATIC: cam01:
7801; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax
7802; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007803
7804; LINUX-32-STATIC: cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007805; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7806; LINUX-32-STATIC-NEXT: leal dst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007807; LINUX-32-STATIC-NEXT: ret
7808
7809; LINUX-32-PIC: cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007810; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7811; LINUX-32-PIC-NEXT: leal dst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007812; LINUX-32-PIC-NEXT: ret
7813
7814; LINUX-64-PIC: cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007815; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]]
7816; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007817; LINUX-64-PIC-NEXT: ret
7818
7819; DARWIN-32-STATIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007820; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7821; DARWIN-32-STATIC-NEXT: leal _dst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007822; DARWIN-32-STATIC-NEXT: ret
7823
7824; DARWIN-32-DYNAMIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007825; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7826; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]]
7827; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007828; DARWIN-32-DYNAMIC-NEXT: ret
7829
7830; DARWIN-32-PIC: _cam01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007831; DARWIN-32-PIC: calll L122$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007832; DARWIN-32-PIC-NEXT: L122$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007833; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7834; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7835; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L122$pb([[EAX]]), [[EAX:%e.x]]
7836; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007837; DARWIN-32-PIC-NEXT: ret
7838
7839; DARWIN-64-STATIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007840; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7841; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007842; DARWIN-64-STATIC-NEXT: ret
7843
7844; DARWIN-64-DYNAMIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007845; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7846; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007847; DARWIN-64-DYNAMIC-NEXT: ret
7848
7849; DARWIN-64-PIC: _cam01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007850; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]]
7851; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007852; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007853}
7854
7855define i8* @cxm01(i64 %i) nounwind {
7856entry:
7857 %0 = add i64 %i, 65536
7858 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
7859 %2 = bitcast i32* %1 to i8*
7860 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007861; LINUX-64-STATIC: cxm01:
7862; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax
7863; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007864
7865; LINUX-32-STATIC: cxm01:
7866; LINUX-32-STATIC: movl 4(%esp), %eax
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007867; LINUX-32-STATIC-NEXT: leal xdst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007868; LINUX-32-STATIC-NEXT: ret
7869
7870; LINUX-32-PIC: cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007871; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7872; LINUX-32-PIC-NEXT: leal xdst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007873; LINUX-32-PIC-NEXT: ret
7874
7875; LINUX-64-PIC: cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007876; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7877; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007878; LINUX-64-PIC-NEXT: ret
7879
7880; DARWIN-32-STATIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007881; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7882; DARWIN-32-STATIC-NEXT: leal _xdst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007883; DARWIN-32-STATIC-NEXT: ret
7884
7885; DARWIN-32-DYNAMIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007886; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
7887; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]]
7888; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007889; DARWIN-32-DYNAMIC-NEXT: ret
7890
7891; DARWIN-32-PIC: _cxm01:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007892; DARWIN-32-PIC: calll L123$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007893; DARWIN-32-PIC-NEXT: L123$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007894; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7895; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7896; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L123$pb([[EAX]]), [[EAX:%e.x]]
7897; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007898; DARWIN-32-PIC-NEXT: ret
7899
7900; DARWIN-64-STATIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007901; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7902; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007903; DARWIN-64-STATIC-NEXT: ret
7904
7905; DARWIN-64-DYNAMIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007906; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7907; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007908; DARWIN-64-DYNAMIC-NEXT: ret
7909
7910; DARWIN-64-PIC: _cxm01:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007911; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]]
7912; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007913; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007914}
7915
7916define i8* @cam02(i64 %i) nounwind {
7917entry:
7918 %0 = load i32** @ptr, align 8
7919 %1 = add i64 %i, 65536
7920 %2 = getelementptr i32* %0, i64 %1
7921 %3 = bitcast i32* %2 to i8*
7922 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00007923; LINUX-64-STATIC: cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007924; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]]
7925; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00007926; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007927
7928; LINUX-32-STATIC: cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007929; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7930; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]]
7931; LINUX-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007932; LINUX-32-STATIC-NEXT: ret
7933
7934; LINUX-32-PIC: cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007935; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
7936; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]]
7937; LINUX-32-PIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007938; LINUX-32-PIC-NEXT: ret
7939
7940; LINUX-64-PIC: cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007941; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7942; LINUX-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7943; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007944; LINUX-64-PIC-NEXT: ret
7945
7946; DARWIN-32-STATIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007947; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
7948; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]]
7949; DARWIN-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007950; DARWIN-32-STATIC-NEXT: ret
7951
7952; DARWIN-32-DYNAMIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007953; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]]
7954; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
7955; DARWIN-32-DYNAMIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7956; DARWIN-32-DYNAMIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007957; DARWIN-32-DYNAMIC-NEXT: ret
7958
7959; DARWIN-32-PIC: _cam02:
Chris Lattner1eb1b682010-09-22 05:49:14 +00007960; DARWIN-32-PIC: calll L124$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00007961; DARWIN-32-PIC-NEXT: L124$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007962; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
7963; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L124$pb([[EAX]]), [[EAX:%e.x]]
7964; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]]
7965; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
7966; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007967; DARWIN-32-PIC-NEXT: ret
7968
7969; DARWIN-64-STATIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007970; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7971; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7972; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007973; DARWIN-64-STATIC-NEXT: ret
7974
7975; DARWIN-64-DYNAMIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007976; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7977; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7978; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007979; DARWIN-64-DYNAMIC-NEXT: ret
7980
7981; DARWIN-64-PIC: _cam02:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007982; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]]
7983; DARWIN-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
7984; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007985; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00007986}
7987
7988define i8* @cam03(i64 %i) nounwind {
7989entry:
7990 %0 = add i64 %i, 65536
7991 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
7992 %2 = bitcast i32* %1 to i8*
7993 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00007994; LINUX-64-STATIC: cam03:
7995; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax
7996; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00007997
7998; LINUX-32-STATIC: cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00007999; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8000; LINUX-32-STATIC-NEXT: leal dsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008001; LINUX-32-STATIC-NEXT: ret
8002
8003; LINUX-32-PIC: cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008004; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8005; LINUX-32-PIC-NEXT: leal dsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008006; LINUX-32-PIC-NEXT: ret
8007
8008; LINUX-64-PIC: cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008009; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]]
8010; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008011; LINUX-64-PIC-NEXT: ret
8012
8013; DARWIN-32-STATIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008014; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8015; DARWIN-32-STATIC-NEXT: leal _dsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008016; DARWIN-32-STATIC-NEXT: ret
8017
8018; DARWIN-32-DYNAMIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008019; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8020; DARWIN-32-DYNAMIC-NEXT: leal _dsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008021; DARWIN-32-DYNAMIC-NEXT: ret
8022
8023; DARWIN-32-PIC: _cam03:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008024; DARWIN-32-PIC: calll L125$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008025; DARWIN-32-PIC-NEXT: L125$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008026; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8027; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
8028; DARWIN-32-PIC-NEXT: leal (_dsrc-L125$pb)+262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008029; DARWIN-32-PIC-NEXT: ret
8030
8031; DARWIN-64-STATIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008032; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]]
8033; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008034; DARWIN-64-STATIC-NEXT: ret
8035
8036; DARWIN-64-DYNAMIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008037; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]]
8038; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008039; DARWIN-64-DYNAMIC-NEXT: ret
8040
8041; DARWIN-64-PIC: _cam03:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008042; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]]
8043; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008044; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008045}
8046
8047define i8* @cam04(i64 %i) nounwind {
8048entry:
8049 %0 = add i64 %i, 65536
8050 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
8051 %2 = bitcast i32* %1 to i8*
8052 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00008053; LINUX-64-STATIC: cam04:
8054; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax
8055; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008056
8057; LINUX-32-STATIC: cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008058; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8059; LINUX-32-STATIC-NEXT: leal ddst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008060; LINUX-32-STATIC-NEXT: ret
8061
8062; LINUX-32-PIC: cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008063; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8064; LINUX-32-PIC-NEXT: leal ddst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008065; LINUX-32-PIC-NEXT: ret
8066
8067; LINUX-64-PIC: cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008068; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]]
8069; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008070; LINUX-64-PIC-NEXT: ret
8071
8072; DARWIN-32-STATIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008073; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8074; DARWIN-32-STATIC-NEXT: leal _ddst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008075; DARWIN-32-STATIC-NEXT: ret
8076
8077; DARWIN-32-DYNAMIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008078; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8079; DARWIN-32-DYNAMIC-NEXT: leal _ddst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008080; DARWIN-32-DYNAMIC-NEXT: ret
8081
8082; DARWIN-32-PIC: _cam04:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008083; DARWIN-32-PIC: calll L126$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008084; DARWIN-32-PIC-NEXT: L126$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008085; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8086; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
8087; DARWIN-32-PIC-NEXT: leal (_ddst-L126$pb)+262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008088; DARWIN-32-PIC-NEXT: ret
8089
8090; DARWIN-64-STATIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008091; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]]
8092; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008093; DARWIN-64-STATIC-NEXT: ret
8094
8095; DARWIN-64-DYNAMIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008096; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]]
8097; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008098; DARWIN-64-DYNAMIC-NEXT: ret
8099
8100; DARWIN-64-PIC: _cam04:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008101; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]]
8102; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008103; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008104}
8105
8106define i8* @cam05(i64 %i) nounwind {
8107entry:
8108 %0 = load i32** @dptr, align 8
8109 %1 = add i64 %i, 65536
8110 %2 = getelementptr i32* %0, i64 %1
8111 %3 = bitcast i32* %2 to i8*
8112 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00008113; LINUX-64-STATIC: cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008114; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]]
8115; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00008116; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008117
8118; LINUX-32-STATIC: cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008119; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8120; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]]
8121; LINUX-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008122; LINUX-32-STATIC-NEXT: ret
8123
8124; LINUX-32-PIC: cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008125; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8126; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]]
8127; LINUX-32-PIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008128; LINUX-32-PIC-NEXT: ret
8129
8130; LINUX-64-PIC: cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008131; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]]
8132; LINUX-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]]
8133; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008134; LINUX-64-PIC-NEXT: ret
8135
8136; DARWIN-32-STATIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008137; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8138; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]]
8139; DARWIN-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008140; DARWIN-32-STATIC-NEXT: ret
8141
8142; DARWIN-32-DYNAMIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008143; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8144; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]]
8145; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008146; DARWIN-32-DYNAMIC-NEXT: ret
8147
8148; DARWIN-32-PIC: _cam05:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008149; DARWIN-32-PIC: calll L127$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008150; DARWIN-32-PIC-NEXT: L127$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008151; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8152; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
8153; DARWIN-32-PIC-NEXT: movl _dptr-L127$pb([[EAX]]), [[EAX:%e.x]]
8154; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008155; DARWIN-32-PIC-NEXT: ret
8156
8157; DARWIN-64-STATIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008158; DARWIN-64-STATIC: movq _dptr(%rip), [[RAX:%r.x]]
8159; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008160; DARWIN-64-STATIC-NEXT: ret
8161
8162; DARWIN-64-DYNAMIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008163; DARWIN-64-DYNAMIC: movq _dptr(%rip), [[RAX:%r.x]]
8164; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008165; DARWIN-64-DYNAMIC-NEXT: ret
8166
8167; DARWIN-64-PIC: _cam05:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008168; DARWIN-64-PIC: movq _dptr(%rip), [[RAX:%r.x]]
8169; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008170; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008171}
8172
8173define i8* @cam06(i64 %i) nounwind {
8174entry:
8175 %0 = add i64 %i, 65536
8176 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
8177 %2 = bitcast i32* %1 to i8*
8178 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00008179; LINUX-64-STATIC: cam06:
8180; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax
8181; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008182
8183; LINUX-32-STATIC: cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008184; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8185; LINUX-32-STATIC-NEXT: leal lsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008186; LINUX-32-STATIC-NEXT: ret
8187
8188; LINUX-32-PIC: cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008189; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8190; LINUX-32-PIC-NEXT: leal lsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008191; LINUX-32-PIC-NEXT: ret
8192
8193; LINUX-64-PIC: cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008194; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]]
8195; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008196; LINUX-64-PIC-NEXT: ret
8197
8198; DARWIN-32-STATIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008199; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8200; DARWIN-32-STATIC-NEXT: leal _lsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008201; DARWIN-32-STATIC-NEXT: ret
8202
8203; DARWIN-32-DYNAMIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008204; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8205; DARWIN-32-DYNAMIC-NEXT: leal _lsrc+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008206; DARWIN-32-DYNAMIC-NEXT: ret
8207
8208; DARWIN-32-PIC: _cam06:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008209; DARWIN-32-PIC: calll L128$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008210; DARWIN-32-PIC-NEXT: L128$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008211; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8212; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
8213; DARWIN-32-PIC-NEXT: leal (_lsrc-L128$pb)+262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008214; DARWIN-32-PIC-NEXT: ret
8215
8216; DARWIN-64-STATIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008217; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]]
8218; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008219; DARWIN-64-STATIC-NEXT: ret
8220
8221; DARWIN-64-DYNAMIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008222; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]]
8223; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008224; DARWIN-64-DYNAMIC-NEXT: ret
8225
8226; DARWIN-64-PIC: _cam06:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008227; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]]
8228; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008229; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008230}
8231
8232define i8* @cam07(i64 %i) nounwind {
8233entry:
8234 %0 = add i64 %i, 65536
8235 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
8236 %2 = bitcast i32* %1 to i8*
8237 ret i8* %2
Chris Lattner4f066492009-07-11 20:29:19 +00008238; LINUX-64-STATIC: cam07:
8239; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax
8240; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008241
8242; LINUX-32-STATIC: cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008243; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8244; LINUX-32-STATIC-NEXT: leal ldst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008245; LINUX-32-STATIC-NEXT: ret
8246
8247; LINUX-32-PIC: cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008248; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8249; LINUX-32-PIC-NEXT: leal ldst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008250; LINUX-32-PIC-NEXT: ret
8251
8252; LINUX-64-PIC: cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008253; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]]
8254; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008255; LINUX-64-PIC-NEXT: ret
8256
8257; DARWIN-32-STATIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008258; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8259; DARWIN-32-STATIC-NEXT: leal _ldst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008260; DARWIN-32-STATIC-NEXT: ret
8261
8262; DARWIN-32-DYNAMIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008263; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8264; DARWIN-32-DYNAMIC-NEXT: leal _ldst+262144(,[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008265; DARWIN-32-DYNAMIC-NEXT: ret
8266
8267; DARWIN-32-PIC: _cam07:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008268; DARWIN-32-PIC: calll L129$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008269; DARWIN-32-PIC-NEXT: L129$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008270; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8271; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
8272; DARWIN-32-PIC-NEXT: leal (_ldst-L129$pb)+262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008273; DARWIN-32-PIC-NEXT: ret
8274
8275; DARWIN-64-STATIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008276; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]]
8277; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008278; DARWIN-64-STATIC-NEXT: ret
8279
8280; DARWIN-64-DYNAMIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008281; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]]
8282; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008283; DARWIN-64-DYNAMIC-NEXT: ret
8284
8285; DARWIN-64-PIC: _cam07:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008286; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]]
8287; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008288; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008289}
8290
8291define i8* @cam08(i64 %i) nounwind {
8292entry:
8293 %0 = load i32** @lptr, align 8
8294 %1 = add i64 %i, 65536
8295 %2 = getelementptr i32* %0, i64 %1
8296 %3 = bitcast i32* %2 to i8*
8297 ret i8* %3
Chris Lattner4f066492009-07-11 20:29:19 +00008298; LINUX-64-STATIC: cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008299; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]]
8300; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax
Chris Lattner4f066492009-07-11 20:29:19 +00008301; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008302
8303; LINUX-32-STATIC: cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008304; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8305; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]]
8306; LINUX-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008307; LINUX-32-STATIC-NEXT: ret
8308
8309; LINUX-32-PIC: cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008310; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]]
8311; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]]
8312; LINUX-32-PIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008313; LINUX-32-PIC-NEXT: ret
8314
8315; LINUX-64-PIC: cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008316; LINUX-64-PIC: movq lptr(%rip), [[RAX:%r.x]]
8317; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008318; LINUX-64-PIC-NEXT: ret
8319
8320; DARWIN-32-STATIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008321; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]]
8322; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]]
8323; DARWIN-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008324; DARWIN-32-STATIC-NEXT: ret
8325
8326; DARWIN-32-DYNAMIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008327; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]]
8328; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]]
8329; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008330; DARWIN-32-DYNAMIC-NEXT: ret
8331
8332; DARWIN-32-PIC: _cam08:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008333; DARWIN-32-PIC: calll L130$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008334; DARWIN-32-PIC-NEXT: L130$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008335; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8336; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]]
8337; DARWIN-32-PIC-NEXT: movl _lptr-L130$pb([[EAX]]), [[EAX:%e.x]]
8338; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008339; DARWIN-32-PIC-NEXT: ret
8340
8341; DARWIN-64-STATIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008342; DARWIN-64-STATIC: movq _lptr(%rip), [[RAX:%r.x]]
8343; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008344; DARWIN-64-STATIC-NEXT: ret
8345
8346; DARWIN-64-DYNAMIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008347; DARWIN-64-DYNAMIC: movq _lptr(%rip), [[RAX:%r.x]]
8348; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008349; DARWIN-64-DYNAMIC-NEXT: ret
8350
8351; DARWIN-64-PIC: _cam08:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008352; DARWIN-64-PIC: movq _lptr(%rip), [[RAX:%r.x]]
8353; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008354; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008355}
8356
8357define void @lcallee() nounwind {
8358entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008359 call void @x() nounwind
8360 call void @x() nounwind
8361 call void @x() nounwind
8362 call void @x() nounwind
8363 call void @x() nounwind
8364 call void @x() nounwind
8365 call void @x() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008366 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008367; LINUX-64-STATIC: lcallee:
Sean Callanan108934c2009-12-18 00:01:26 +00008368; LINUX-64-STATIC: callq x
8369; LINUX-64-STATIC: callq x
8370; LINUX-64-STATIC: callq x
8371; LINUX-64-STATIC: callq x
8372; LINUX-64-STATIC: callq x
8373; LINUX-64-STATIC: callq x
8374; LINUX-64-STATIC: callq x
Chris Lattner4f066492009-07-11 20:29:19 +00008375; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008376
8377; LINUX-32-STATIC: lcallee:
Eric Christopher04f50792011-01-13 06:47:10 +00008378; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008379; LINUX-32-STATIC-NEXT: calll x
8380; LINUX-32-STATIC-NEXT: calll x
8381; LINUX-32-STATIC-NEXT: calll x
8382; LINUX-32-STATIC-NEXT: calll x
8383; LINUX-32-STATIC-NEXT: calll x
8384; LINUX-32-STATIC-NEXT: calll x
8385; LINUX-32-STATIC-NEXT: calll x
Eric Christopher04f50792011-01-13 06:47:10 +00008386; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008387; LINUX-32-STATIC-NEXT: ret
8388
8389; LINUX-32-PIC: lcallee:
Eric Christopher04f50792011-01-13 06:47:10 +00008390; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008391; LINUX-32-PIC-NEXT: calll x
8392; LINUX-32-PIC-NEXT: calll x
8393; LINUX-32-PIC-NEXT: calll x
8394; LINUX-32-PIC-NEXT: calll x
8395; LINUX-32-PIC-NEXT: calll x
8396; LINUX-32-PIC-NEXT: calll x
8397; LINUX-32-PIC-NEXT: calll x
Eric Christopher04f50792011-01-13 06:47:10 +00008398; LINUX-32-PIC-NEXT: addl
8399
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008400; LINUX-32-PIC-NEXT: ret
8401
8402; LINUX-64-PIC: lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008403; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008404; LINUX-64-PIC-NEXT: callq x@PLT
8405; LINUX-64-PIC-NEXT: callq x@PLT
8406; LINUX-64-PIC-NEXT: callq x@PLT
8407; LINUX-64-PIC-NEXT: callq x@PLT
8408; LINUX-64-PIC-NEXT: callq x@PLT
8409; LINUX-64-PIC-NEXT: callq x@PLT
8410; LINUX-64-PIC-NEXT: callq x@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008411; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008412; LINUX-64-PIC-NEXT: ret
8413
8414; DARWIN-32-STATIC: _lcallee:
8415; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008416; DARWIN-32-STATIC-NEXT: calll _x
8417; DARWIN-32-STATIC-NEXT: calll _x
8418; DARWIN-32-STATIC-NEXT: calll _x
8419; DARWIN-32-STATIC-NEXT: calll _x
8420; DARWIN-32-STATIC-NEXT: calll _x
8421; DARWIN-32-STATIC-NEXT: calll _x
8422; DARWIN-32-STATIC-NEXT: calll _x
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008423; DARWIN-32-STATIC-NEXT: addl $12, %esp
8424; DARWIN-32-STATIC-NEXT: ret
8425
8426; DARWIN-32-DYNAMIC: _lcallee:
8427; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008428; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8429; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8430; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8431; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8432; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8433; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
8434; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008435; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8436; DARWIN-32-DYNAMIC-NEXT: ret
8437
8438; DARWIN-32-PIC: _lcallee:
8439; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008440; DARWIN-32-PIC-NEXT: calll L_x$stub
8441; DARWIN-32-PIC-NEXT: calll L_x$stub
8442; DARWIN-32-PIC-NEXT: calll L_x$stub
8443; DARWIN-32-PIC-NEXT: calll L_x$stub
8444; DARWIN-32-PIC-NEXT: calll L_x$stub
8445; DARWIN-32-PIC-NEXT: calll L_x$stub
8446; DARWIN-32-PIC-NEXT: calll L_x$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008447; DARWIN-32-PIC-NEXT: addl $12, %esp
8448; DARWIN-32-PIC-NEXT: ret
8449
8450; DARWIN-64-STATIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008451; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008452; DARWIN-64-STATIC-NEXT: callq _x
8453; DARWIN-64-STATIC-NEXT: callq _x
8454; DARWIN-64-STATIC-NEXT: callq _x
8455; DARWIN-64-STATIC-NEXT: callq _x
8456; DARWIN-64-STATIC-NEXT: callq _x
8457; DARWIN-64-STATIC-NEXT: callq _x
8458; DARWIN-64-STATIC-NEXT: callq _x
Evan Cheng7158e082011-01-03 22:53:22 +00008459; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008460; DARWIN-64-STATIC-NEXT: ret
8461
8462; DARWIN-64-DYNAMIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008463; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008464; DARWIN-64-DYNAMIC-NEXT: callq _x
8465; DARWIN-64-DYNAMIC-NEXT: callq _x
8466; DARWIN-64-DYNAMIC-NEXT: callq _x
8467; DARWIN-64-DYNAMIC-NEXT: callq _x
8468; DARWIN-64-DYNAMIC-NEXT: callq _x
8469; DARWIN-64-DYNAMIC-NEXT: callq _x
8470; DARWIN-64-DYNAMIC-NEXT: callq _x
Evan Cheng7158e082011-01-03 22:53:22 +00008471; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008472; DARWIN-64-DYNAMIC-NEXT: ret
8473
8474; DARWIN-64-PIC: _lcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008475; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008476; DARWIN-64-PIC-NEXT: callq _x
8477; DARWIN-64-PIC-NEXT: callq _x
8478; DARWIN-64-PIC-NEXT: callq _x
8479; DARWIN-64-PIC-NEXT: callq _x
8480; DARWIN-64-PIC-NEXT: callq _x
8481; DARWIN-64-PIC-NEXT: callq _x
8482; DARWIN-64-PIC-NEXT: callq _x
Evan Cheng7158e082011-01-03 22:53:22 +00008483; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008484; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008485}
8486
8487declare void @x()
8488
8489define internal void @dcallee() nounwind {
8490entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008491 call void @y() nounwind
8492 call void @y() nounwind
8493 call void @y() nounwind
8494 call void @y() nounwind
8495 call void @y() nounwind
8496 call void @y() nounwind
8497 call void @y() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008498 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008499; LINUX-64-STATIC: dcallee:
Sean Callanan108934c2009-12-18 00:01:26 +00008500; LINUX-64-STATIC: callq y
8501; LINUX-64-STATIC: callq y
8502; LINUX-64-STATIC: callq y
8503; LINUX-64-STATIC: callq y
8504; LINUX-64-STATIC: callq y
8505; LINUX-64-STATIC: callq y
8506; LINUX-64-STATIC: callq y
Chris Lattner4f066492009-07-11 20:29:19 +00008507; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008508
8509; LINUX-32-STATIC: dcallee:
Eric Christopher04f50792011-01-13 06:47:10 +00008510; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008511; LINUX-32-STATIC-NEXT: calll y
8512; LINUX-32-STATIC-NEXT: calll y
8513; LINUX-32-STATIC-NEXT: calll y
8514; LINUX-32-STATIC-NEXT: calll y
8515; LINUX-32-STATIC-NEXT: calll y
8516; LINUX-32-STATIC-NEXT: calll y
8517; LINUX-32-STATIC-NEXT: calll y
Eric Christopher04f50792011-01-13 06:47:10 +00008518; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008519; LINUX-32-STATIC-NEXT: ret
8520
8521; LINUX-32-PIC: dcallee:
Eric Christopher04f50792011-01-13 06:47:10 +00008522; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008523; LINUX-32-PIC-NEXT: calll y
8524; LINUX-32-PIC-NEXT: calll y
8525; LINUX-32-PIC-NEXT: calll y
8526; LINUX-32-PIC-NEXT: calll y
8527; LINUX-32-PIC-NEXT: calll y
8528; LINUX-32-PIC-NEXT: calll y
8529; LINUX-32-PIC-NEXT: calll y
Eric Christopher04f50792011-01-13 06:47:10 +00008530; LINUX-32-PIC-NEXT: addl
8531
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008532; LINUX-32-PIC-NEXT: ret
8533
8534; LINUX-64-PIC: dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008535; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008536; LINUX-64-PIC-NEXT: callq y@PLT
8537; LINUX-64-PIC-NEXT: callq y@PLT
8538; LINUX-64-PIC-NEXT: callq y@PLT
8539; LINUX-64-PIC-NEXT: callq y@PLT
8540; LINUX-64-PIC-NEXT: callq y@PLT
8541; LINUX-64-PIC-NEXT: callq y@PLT
8542; LINUX-64-PIC-NEXT: callq y@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008543; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008544; LINUX-64-PIC-NEXT: ret
8545
8546; DARWIN-32-STATIC: _dcallee:
8547; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008548; DARWIN-32-STATIC-NEXT: calll _y
8549; DARWIN-32-STATIC-NEXT: calll _y
8550; DARWIN-32-STATIC-NEXT: calll _y
8551; DARWIN-32-STATIC-NEXT: calll _y
8552; DARWIN-32-STATIC-NEXT: calll _y
8553; DARWIN-32-STATIC-NEXT: calll _y
8554; DARWIN-32-STATIC-NEXT: calll _y
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008555; DARWIN-32-STATIC-NEXT: addl $12, %esp
8556; DARWIN-32-STATIC-NEXT: ret
8557
8558; DARWIN-32-DYNAMIC: _dcallee:
8559; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008560; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8561; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8562; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8563; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8564; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8565; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
8566; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008567; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8568; DARWIN-32-DYNAMIC-NEXT: ret
8569
8570; DARWIN-32-PIC: _dcallee:
8571; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008572; DARWIN-32-PIC-NEXT: calll L_y$stub
8573; DARWIN-32-PIC-NEXT: calll L_y$stub
8574; DARWIN-32-PIC-NEXT: calll L_y$stub
8575; DARWIN-32-PIC-NEXT: calll L_y$stub
8576; DARWIN-32-PIC-NEXT: calll L_y$stub
8577; DARWIN-32-PIC-NEXT: calll L_y$stub
8578; DARWIN-32-PIC-NEXT: calll L_y$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008579; DARWIN-32-PIC-NEXT: addl $12, %esp
8580; DARWIN-32-PIC-NEXT: ret
8581
8582; DARWIN-64-STATIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008583; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008584; DARWIN-64-STATIC-NEXT: callq _y
8585; DARWIN-64-STATIC-NEXT: callq _y
8586; DARWIN-64-STATIC-NEXT: callq _y
8587; DARWIN-64-STATIC-NEXT: callq _y
8588; DARWIN-64-STATIC-NEXT: callq _y
8589; DARWIN-64-STATIC-NEXT: callq _y
8590; DARWIN-64-STATIC-NEXT: callq _y
Evan Cheng7158e082011-01-03 22:53:22 +00008591; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008592; DARWIN-64-STATIC-NEXT: ret
8593
8594; DARWIN-64-DYNAMIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008595; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008596; DARWIN-64-DYNAMIC-NEXT: callq _y
8597; DARWIN-64-DYNAMIC-NEXT: callq _y
8598; DARWIN-64-DYNAMIC-NEXT: callq _y
8599; DARWIN-64-DYNAMIC-NEXT: callq _y
8600; DARWIN-64-DYNAMIC-NEXT: callq _y
8601; DARWIN-64-DYNAMIC-NEXT: callq _y
8602; DARWIN-64-DYNAMIC-NEXT: callq _y
Evan Cheng7158e082011-01-03 22:53:22 +00008603; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008604; DARWIN-64-DYNAMIC-NEXT: ret
8605
8606; DARWIN-64-PIC: _dcallee:
Evan Cheng7158e082011-01-03 22:53:22 +00008607; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008608; DARWIN-64-PIC-NEXT: callq _y
8609; DARWIN-64-PIC-NEXT: callq _y
8610; DARWIN-64-PIC-NEXT: callq _y
8611; DARWIN-64-PIC-NEXT: callq _y
8612; DARWIN-64-PIC-NEXT: callq _y
8613; DARWIN-64-PIC-NEXT: callq _y
8614; DARWIN-64-PIC-NEXT: callq _y
Evan Cheng7158e082011-01-03 22:53:22 +00008615; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008616; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008617}
8618
8619declare void @y()
8620
8621define void ()* @address() nounwind {
8622entry:
8623 ret void ()* @callee
Chris Lattner4f066492009-07-11 20:29:19 +00008624; LINUX-64-STATIC: address:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008625; LINUX-64-STATIC: movl $callee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008626; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008627
8628; LINUX-32-STATIC: address:
8629; LINUX-32-STATIC: movl $callee, %eax
8630; LINUX-32-STATIC-NEXT: ret
8631
8632; LINUX-32-PIC: address:
8633; LINUX-32-PIC: movl $callee, %eax
8634; LINUX-32-PIC-NEXT: ret
8635
8636; LINUX-64-PIC: address:
8637; LINUX-64-PIC: movq callee@GOTPCREL(%rip), %rax
8638; LINUX-64-PIC-NEXT: ret
8639
8640; DARWIN-32-STATIC: _address:
8641; DARWIN-32-STATIC: movl $_callee, %eax
8642; DARWIN-32-STATIC-NEXT: ret
8643
8644; DARWIN-32-DYNAMIC: _address:
8645; DARWIN-32-DYNAMIC: movl L_callee$non_lazy_ptr, %eax
8646; DARWIN-32-DYNAMIC-NEXT: ret
8647
8648; DARWIN-32-PIC: _address:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008649; DARWIN-32-PIC: calll L133$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008650; DARWIN-32-PIC-NEXT: L133$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008651; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8652; DARWIN-32-PIC-NEXT: movl L_callee$non_lazy_ptr-L133$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008653; DARWIN-32-PIC-NEXT: ret
8654
8655; DARWIN-64-STATIC: _address:
8656; DARWIN-64-STATIC: movq _callee@GOTPCREL(%rip), %rax
8657; DARWIN-64-STATIC-NEXT: ret
8658
8659; DARWIN-64-DYNAMIC: _address:
8660; DARWIN-64-DYNAMIC: movq _callee@GOTPCREL(%rip), %rax
8661; DARWIN-64-DYNAMIC-NEXT: ret
8662
8663; DARWIN-64-PIC: _address:
8664; DARWIN-64-PIC: movq _callee@GOTPCREL(%rip), %rax
8665; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008666}
8667
8668declare void @callee()
8669
8670define void ()* @laddress() nounwind {
8671entry:
8672 ret void ()* @lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008673; LINUX-64-STATIC: laddress:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008674; LINUX-64-STATIC: movl $lcallee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008675; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008676
8677; LINUX-32-STATIC: laddress:
8678; LINUX-32-STATIC: movl $lcallee, %eax
8679; LINUX-32-STATIC-NEXT: ret
8680
8681; LINUX-32-PIC: laddress:
8682; LINUX-32-PIC: movl $lcallee, %eax
8683; LINUX-32-PIC-NEXT: ret
8684
8685; LINUX-64-PIC: laddress:
8686; LINUX-64-PIC: movq lcallee@GOTPCREL(%rip), %rax
8687; LINUX-64-PIC-NEXT: ret
8688
8689; DARWIN-32-STATIC: _laddress:
8690; DARWIN-32-STATIC: movl $_lcallee, %eax
8691; DARWIN-32-STATIC-NEXT: ret
8692
8693; DARWIN-32-DYNAMIC: _laddress:
8694; DARWIN-32-DYNAMIC: movl $_lcallee, %eax
8695; DARWIN-32-DYNAMIC-NEXT: ret
8696
8697; DARWIN-32-PIC: _laddress:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008698; DARWIN-32-PIC: calll L134$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008699; DARWIN-32-PIC-NEXT: L134$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008700; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8701; DARWIN-32-PIC-NEXT: leal _lcallee-L134$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008702; DARWIN-32-PIC-NEXT: ret
8703
8704; DARWIN-64-STATIC: _laddress:
8705; DARWIN-64-STATIC: leaq _lcallee(%rip), %rax
8706; DARWIN-64-STATIC-NEXT: ret
8707
8708; DARWIN-64-DYNAMIC: _laddress:
8709; DARWIN-64-DYNAMIC: leaq _lcallee(%rip), %rax
8710; DARWIN-64-DYNAMIC-NEXT: ret
8711
8712; DARWIN-64-PIC: _laddress:
8713; DARWIN-64-PIC: leaq _lcallee(%rip), %rax
8714; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008715}
8716
8717define void ()* @daddress() nounwind {
8718entry:
8719 ret void ()* @dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008720; LINUX-64-STATIC: daddress:
Chris Lattner65a7a6f2009-07-11 23:17:29 +00008721; LINUX-64-STATIC: movl $dcallee, %eax
Chris Lattner4f066492009-07-11 20:29:19 +00008722; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008723
8724; LINUX-32-STATIC: daddress:
8725; LINUX-32-STATIC: movl $dcallee, %eax
8726; LINUX-32-STATIC-NEXT: ret
8727
8728; LINUX-32-PIC: daddress:
8729; LINUX-32-PIC: movl $dcallee, %eax
8730; LINUX-32-PIC-NEXT: ret
8731
8732; LINUX-64-PIC: daddress:
8733; LINUX-64-PIC: leaq dcallee(%rip), %rax
8734; LINUX-64-PIC-NEXT: ret
8735
8736; DARWIN-32-STATIC: _daddress:
8737; DARWIN-32-STATIC: movl $_dcallee, %eax
8738; DARWIN-32-STATIC-NEXT: ret
8739
8740; DARWIN-32-DYNAMIC: _daddress:
8741; DARWIN-32-DYNAMIC: movl $_dcallee, %eax
8742; DARWIN-32-DYNAMIC-NEXT: ret
8743
8744; DARWIN-32-PIC: _daddress:
Chris Lattner1eb1b682010-09-22 05:49:14 +00008745; DARWIN-32-PIC: calll L135$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00008746; DARWIN-32-PIC-NEXT: L135$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00008747; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
8748; DARWIN-32-PIC-NEXT: leal _dcallee-L135$pb([[EAX]]), %eax
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008749; DARWIN-32-PIC-NEXT: ret
8750
8751; DARWIN-64-STATIC: _daddress:
8752; DARWIN-64-STATIC: leaq _dcallee(%rip), %rax
8753; DARWIN-64-STATIC-NEXT: ret
8754
8755; DARWIN-64-DYNAMIC: _daddress:
8756; DARWIN-64-DYNAMIC: leaq _dcallee(%rip), %rax
8757; DARWIN-64-DYNAMIC-NEXT: ret
8758
8759; DARWIN-64-PIC: _daddress:
8760; DARWIN-64-PIC: leaq _dcallee(%rip), %rax
8761; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008762}
8763
8764define void @caller() nounwind {
8765entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008766 call void @callee() nounwind
8767 call void @callee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008768 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008769; LINUX-64-STATIC: caller:
Sean Callanan108934c2009-12-18 00:01:26 +00008770; LINUX-64-STATIC: callq callee
8771; LINUX-64-STATIC: callq callee
Chris Lattner4f066492009-07-11 20:29:19 +00008772; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008773
8774; LINUX-32-STATIC: caller:
Eric Christopher04f50792011-01-13 06:47:10 +00008775; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008776; LINUX-32-STATIC-NEXT: calll callee
8777; LINUX-32-STATIC-NEXT: calll callee
Eric Christopher04f50792011-01-13 06:47:10 +00008778; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008779; LINUX-32-STATIC-NEXT: ret
8780
8781; LINUX-32-PIC: caller:
Eric Christopher04f50792011-01-13 06:47:10 +00008782; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008783; LINUX-32-PIC-NEXT: calll callee
8784; LINUX-32-PIC-NEXT: calll callee
Eric Christopher04f50792011-01-13 06:47:10 +00008785; LINUX-32-PIC-NEXT: addl
8786
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008787; LINUX-32-PIC-NEXT: ret
8788
8789; LINUX-64-PIC: caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008790; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008791; LINUX-64-PIC-NEXT: callq callee@PLT
8792; LINUX-64-PIC-NEXT: callq callee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008793; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008794; LINUX-64-PIC-NEXT: ret
8795
8796; DARWIN-32-STATIC: _caller:
8797; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008798; DARWIN-32-STATIC-NEXT: calll _callee
8799; DARWIN-32-STATIC-NEXT: calll _callee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008800; DARWIN-32-STATIC-NEXT: addl $12, %esp
8801; DARWIN-32-STATIC-NEXT: ret
8802
8803; DARWIN-32-DYNAMIC: _caller:
8804; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008805; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
8806; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008807; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8808; DARWIN-32-DYNAMIC-NEXT: ret
8809
8810; DARWIN-32-PIC: _caller:
8811; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008812; DARWIN-32-PIC-NEXT: calll L_callee$stub
8813; DARWIN-32-PIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008814; DARWIN-32-PIC-NEXT: addl $12, %esp
8815; DARWIN-32-PIC-NEXT: ret
8816
8817; DARWIN-64-STATIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008818; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008819; DARWIN-64-STATIC-NEXT: callq _callee
8820; DARWIN-64-STATIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008821; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008822; DARWIN-64-STATIC-NEXT: ret
8823
8824; DARWIN-64-DYNAMIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008825; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008826; DARWIN-64-DYNAMIC-NEXT: callq _callee
8827; DARWIN-64-DYNAMIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008828; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008829; DARWIN-64-DYNAMIC-NEXT: ret
8830
8831; DARWIN-64-PIC: _caller:
Evan Cheng7158e082011-01-03 22:53:22 +00008832; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008833; DARWIN-64-PIC-NEXT: callq _callee
8834; DARWIN-64-PIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00008835; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008836; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008837}
8838
8839define void @dcaller() nounwind {
8840entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008841 call void @dcallee() nounwind
8842 call void @dcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008843 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008844; LINUX-64-STATIC: dcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00008845; LINUX-64-STATIC: callq dcallee
8846; LINUX-64-STATIC: callq dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008847; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008848
8849; LINUX-32-STATIC: dcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008850; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008851; LINUX-32-STATIC-NEXT: calll dcallee
8852; LINUX-32-STATIC-NEXT: calll dcallee
Eric Christopher04f50792011-01-13 06:47:10 +00008853; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008854; LINUX-32-STATIC-NEXT: ret
8855
8856; LINUX-32-PIC: dcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008857; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008858; LINUX-32-PIC-NEXT: calll dcallee
8859; LINUX-32-PIC-NEXT: calll dcallee
Eric Christopher04f50792011-01-13 06:47:10 +00008860; LINUX-32-PIC-NEXT: addl
8861
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008862; LINUX-32-PIC-NEXT: ret
8863
8864; LINUX-64-PIC: dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008865; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008866; LINUX-64-PIC-NEXT: callq dcallee
8867; LINUX-64-PIC-NEXT: callq dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008868; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008869; LINUX-64-PIC-NEXT: ret
8870
8871; DARWIN-32-STATIC: _dcaller:
8872; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008873; DARWIN-32-STATIC-NEXT: calll _dcallee
8874; DARWIN-32-STATIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008875; DARWIN-32-STATIC-NEXT: addl $12, %esp
8876; DARWIN-32-STATIC-NEXT: ret
8877
8878; DARWIN-32-DYNAMIC: _dcaller:
8879; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008880; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
8881; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008882; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8883; DARWIN-32-DYNAMIC-NEXT: ret
8884
8885; DARWIN-32-PIC: _dcaller:
8886; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008887; DARWIN-32-PIC-NEXT: calll _dcallee
8888; DARWIN-32-PIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008889; DARWIN-32-PIC-NEXT: addl $12, %esp
8890; DARWIN-32-PIC-NEXT: ret
8891
8892; DARWIN-64-STATIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008893; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008894; DARWIN-64-STATIC-NEXT: callq _dcallee
8895; DARWIN-64-STATIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008896; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008897; DARWIN-64-STATIC-NEXT: ret
8898
8899; DARWIN-64-DYNAMIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008900; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008901; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
8902; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008903; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008904; DARWIN-64-DYNAMIC-NEXT: ret
8905
8906; DARWIN-64-PIC: _dcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008907; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008908; DARWIN-64-PIC-NEXT: callq _dcallee
8909; DARWIN-64-PIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008910; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008911; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008912}
8913
8914define void @lcaller() nounwind {
8915entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008916 call void @lcallee() nounwind
8917 call void @lcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008918 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008919; LINUX-64-STATIC: lcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00008920; LINUX-64-STATIC: callq lcallee
8921; LINUX-64-STATIC: callq lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00008922; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008923
8924; LINUX-32-STATIC: lcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008925; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008926; LINUX-32-STATIC-NEXT: calll lcallee
8927; LINUX-32-STATIC-NEXT: calll lcallee
Eric Christopher04f50792011-01-13 06:47:10 +00008928; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008929; LINUX-32-STATIC-NEXT: ret
8930
8931; LINUX-32-PIC: lcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008932; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008933; LINUX-32-PIC-NEXT: calll lcallee
8934; LINUX-32-PIC-NEXT: calll lcallee
Eric Christopher04f50792011-01-13 06:47:10 +00008935; LINUX-32-PIC-NEXT: addl
8936
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008937; LINUX-32-PIC-NEXT: ret
8938
8939; LINUX-64-PIC: lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008940; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008941; LINUX-64-PIC-NEXT: callq lcallee@PLT
8942; LINUX-64-PIC-NEXT: callq lcallee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00008943; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008944; LINUX-64-PIC-NEXT: ret
8945
8946; DARWIN-32-STATIC: _lcaller:
8947; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008948; DARWIN-32-STATIC-NEXT: calll _lcallee
8949; DARWIN-32-STATIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008950; DARWIN-32-STATIC-NEXT: addl $12, %esp
8951; DARWIN-32-STATIC-NEXT: ret
8952
8953; DARWIN-32-DYNAMIC: _lcaller:
8954; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008955; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
8956; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008957; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
8958; DARWIN-32-DYNAMIC-NEXT: ret
8959
8960; DARWIN-32-PIC: _lcaller:
8961; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00008962; DARWIN-32-PIC-NEXT: calll _lcallee
8963; DARWIN-32-PIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008964; DARWIN-32-PIC-NEXT: addl $12, %esp
8965; DARWIN-32-PIC-NEXT: ret
8966
8967; DARWIN-64-STATIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008968; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008969; DARWIN-64-STATIC-NEXT: callq _lcallee
8970; DARWIN-64-STATIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008971; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008972; DARWIN-64-STATIC-NEXT: ret
8973
8974; DARWIN-64-DYNAMIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008975; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008976; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
8977; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008978; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008979; DARWIN-64-DYNAMIC-NEXT: ret
8980
8981; DARWIN-64-PIC: _lcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00008982; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00008983; DARWIN-64-PIC-NEXT: callq _lcallee
8984; DARWIN-64-PIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00008985; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008986; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00008987}
8988
8989define void @tailcaller() nounwind {
8990entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00008991 call void @callee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00008992 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00008993; LINUX-64-STATIC: tailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00008994; LINUX-64-STATIC: callq callee
Chris Lattner4f066492009-07-11 20:29:19 +00008995; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00008996
8997; LINUX-32-STATIC: tailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00008998; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00008999; LINUX-32-STATIC-NEXT: calll callee
Eric Christopher04f50792011-01-13 06:47:10 +00009000; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009001; LINUX-32-STATIC-NEXT: ret
9002
9003; LINUX-32-PIC: tailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009004; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009005; LINUX-32-PIC-NEXT: calll callee
Eric Christopher04f50792011-01-13 06:47:10 +00009006; LINUX-32-PIC-NEXT: addl
9007
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009008; LINUX-32-PIC-NEXT: ret
9009
9010; LINUX-64-PIC: tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009011; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009012; LINUX-64-PIC-NEXT: callq callee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00009013; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009014; LINUX-64-PIC-NEXT: ret
9015
9016; DARWIN-32-STATIC: _tailcaller:
9017; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009018; DARWIN-32-STATIC-NEXT: calll _callee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009019; DARWIN-32-STATIC-NEXT: addl $12, %esp
9020; DARWIN-32-STATIC-NEXT: ret
9021
9022; DARWIN-32-DYNAMIC: _tailcaller:
9023; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009024; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009025; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9026; DARWIN-32-DYNAMIC-NEXT: ret
9027
9028; DARWIN-32-PIC: _tailcaller:
9029; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009030; DARWIN-32-PIC-NEXT: calll L_callee$stub
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009031; DARWIN-32-PIC-NEXT: addl $12, %esp
9032; DARWIN-32-PIC-NEXT: ret
9033
9034; DARWIN-64-STATIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009035; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009036; DARWIN-64-STATIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009037; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009038; DARWIN-64-STATIC-NEXT: ret
9039
9040; DARWIN-64-DYNAMIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009041; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009042; DARWIN-64-DYNAMIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009043; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009044; DARWIN-64-DYNAMIC-NEXT: ret
9045
9046; DARWIN-64-PIC: _tailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009047; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009048; DARWIN-64-PIC-NEXT: callq _callee
Evan Cheng7158e082011-01-03 22:53:22 +00009049; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009050; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009051}
9052
9053define void @dtailcaller() nounwind {
9054entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00009055 call void @dcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009056 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009057; LINUX-64-STATIC: dtailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009058; LINUX-64-STATIC: callq dcallee
Chris Lattner4f066492009-07-11 20:29:19 +00009059; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009060
9061; LINUX-32-STATIC: dtailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009062; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009063; LINUX-32-STATIC-NEXT: calll dcallee
Eric Christopher04f50792011-01-13 06:47:10 +00009064; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009065; LINUX-32-STATIC-NEXT: ret
9066
9067; LINUX-32-PIC: dtailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009068; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009069; LINUX-32-PIC-NEXT: calll dcallee
Eric Christopher04f50792011-01-13 06:47:10 +00009070; LINUX-32-PIC-NEXT: addl
9071
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009072; LINUX-32-PIC-NEXT: ret
9073
9074; LINUX-64-PIC: dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009075; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009076; LINUX-64-PIC-NEXT: callq dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009077; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009078; LINUX-64-PIC-NEXT: ret
9079
9080; DARWIN-32-STATIC: _dtailcaller:
9081; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009082; DARWIN-32-STATIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009083; DARWIN-32-STATIC-NEXT: addl $12, %esp
9084; DARWIN-32-STATIC-NEXT: ret
9085
9086; DARWIN-32-DYNAMIC: _dtailcaller:
9087; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009088; DARWIN-32-DYNAMIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009089; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9090; DARWIN-32-DYNAMIC-NEXT: ret
9091
9092; DARWIN-32-PIC: _dtailcaller:
9093; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009094; DARWIN-32-PIC-NEXT: calll _dcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009095; DARWIN-32-PIC-NEXT: addl $12, %esp
9096; DARWIN-32-PIC-NEXT: ret
9097
9098; DARWIN-64-STATIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009099; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009100; DARWIN-64-STATIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009101; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009102; DARWIN-64-STATIC-NEXT: ret
9103
9104; DARWIN-64-DYNAMIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009105; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009106; DARWIN-64-DYNAMIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009107; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009108; DARWIN-64-DYNAMIC-NEXT: ret
9109
9110; DARWIN-64-PIC: _dtailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009111; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009112; DARWIN-64-PIC-NEXT: callq _dcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009113; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009114; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009115}
9116
9117define void @ltailcaller() nounwind {
9118entry:
Dan Gohmanf0423962009-12-18 01:02:18 +00009119 call void @lcallee() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009120 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009121; LINUX-64-STATIC: ltailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009122; LINUX-64-STATIC: callq lcallee
Chris Lattner4f066492009-07-11 20:29:19 +00009123; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009124
9125; LINUX-32-STATIC: ltailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009126; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009127; LINUX-32-STATIC-NEXT: calll lcallee
Eric Christopher04f50792011-01-13 06:47:10 +00009128; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009129; LINUX-32-STATIC-NEXT: ret
9130
9131; LINUX-32-PIC: ltailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009132; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009133; LINUX-32-PIC-NEXT: calll lcallee
Eric Christopher04f50792011-01-13 06:47:10 +00009134; LINUX-32-PIC-NEXT: addl
9135
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009136; LINUX-32-PIC-NEXT: ret
9137
9138; LINUX-64-PIC: ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009139; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009140; LINUX-64-PIC-NEXT: callq lcallee@PLT
Evan Cheng7158e082011-01-03 22:53:22 +00009141; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009142; LINUX-64-PIC-NEXT: ret
9143
9144; DARWIN-32-STATIC: _ltailcaller:
9145; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009146; DARWIN-32-STATIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009147; DARWIN-32-STATIC-NEXT: addl $12, %esp
9148; DARWIN-32-STATIC-NEXT: ret
9149
9150; DARWIN-32-DYNAMIC: _ltailcaller:
9151; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009152; DARWIN-32-DYNAMIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009153; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9154; DARWIN-32-DYNAMIC-NEXT: ret
9155
9156; DARWIN-32-PIC: _ltailcaller:
9157; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009158; DARWIN-32-PIC-NEXT: calll _lcallee
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009159; DARWIN-32-PIC-NEXT: addl $12, %esp
9160; DARWIN-32-PIC-NEXT: ret
9161
9162; DARWIN-64-STATIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009163; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009164; DARWIN-64-STATIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009165; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009166; DARWIN-64-STATIC-NEXT: ret
9167
9168; DARWIN-64-DYNAMIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009169; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009170; DARWIN-64-DYNAMIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009171; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009172; DARWIN-64-DYNAMIC-NEXT: ret
9173
9174; DARWIN-64-PIC: _ltailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009175; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009176; DARWIN-64-PIC-NEXT: callq _lcallee
Evan Cheng7158e082011-01-03 22:53:22 +00009177; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009178; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009179}
9180
9181define void @icaller() nounwind {
9182entry:
9183 %0 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009184 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009185 %1 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009186 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009187 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009188; LINUX-64-STATIC: icaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009189; LINUX-64-STATIC: callq *ifunc
9190; LINUX-64-STATIC: callq *ifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009191; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009192
9193; LINUX-32-STATIC: icaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009194; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009195; LINUX-32-STATIC-NEXT: calll *ifunc
9196; LINUX-32-STATIC-NEXT: calll *ifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009197; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009198; LINUX-32-STATIC-NEXT: ret
9199
9200; LINUX-32-PIC: icaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009201; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009202; LINUX-32-PIC-NEXT: calll *ifunc
9203; LINUX-32-PIC-NEXT: calll *ifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009204; LINUX-32-PIC-NEXT: addl
9205
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009206; LINUX-32-PIC-NEXT: ret
9207
9208; LINUX-64-PIC: icaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009209; LINUX-64-PIC: pushq [[RBX:%r.x]]
9210; LINUX-64-PIC-NEXT: movq ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9211; LINUX-64-PIC-NEXT: callq *([[RBX]])
9212; LINUX-64-PIC-NEXT: callq *([[RBX]])
9213; LINUX-64-PIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009214; LINUX-64-PIC-NEXT: ret
9215
9216; DARWIN-32-STATIC: _icaller:
9217; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009218; DARWIN-32-STATIC-NEXT: calll *_ifunc
9219; DARWIN-32-STATIC-NEXT: calll *_ifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009220; DARWIN-32-STATIC-NEXT: addl $12, %esp
9221; DARWIN-32-STATIC-NEXT: ret
9222
9223; DARWIN-32-DYNAMIC: _icaller:
9224; DARWIN-32-DYNAMIC: pushl %esi
9225; DARWIN-32-DYNAMIC-NEXT: subl $8, %esp
9226; DARWIN-32-DYNAMIC-NEXT: movl L_ifunc$non_lazy_ptr, %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009227; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
9228; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009229; DARWIN-32-DYNAMIC-NEXT: addl $8, %esp
9230; DARWIN-32-DYNAMIC-NEXT: popl %esi
9231; DARWIN-32-DYNAMIC-NEXT: ret
9232
9233; DARWIN-32-PIC: _icaller:
9234; DARWIN-32-PIC: pushl %esi
9235; DARWIN-32-PIC-NEXT: subl $8, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009236; DARWIN-32-PIC-NEXT: calll L142$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009237; DARWIN-32-PIC-NEXT: L142$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009238; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
9239; DARWIN-32-PIC-NEXT: movl L_ifunc$non_lazy_ptr-L142$pb([[EAX]]), %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009240; DARWIN-32-PIC-NEXT: calll *(%esi)
9241; DARWIN-32-PIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009242; DARWIN-32-PIC-NEXT: addl $8, %esp
9243; DARWIN-32-PIC-NEXT: popl %esi
9244; DARWIN-32-PIC-NEXT: ret
9245
9246; DARWIN-64-STATIC: _icaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009247; DARWIN-64-STATIC: pushq [[RBX:%r.x]]
9248; DARWIN-64-STATIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9249; DARWIN-64-STATIC-NEXT: callq *([[RBX]])
9250; DARWIN-64-STATIC-NEXT: callq *([[RBX]])
9251; DARWIN-64-STATIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009252; DARWIN-64-STATIC-NEXT: ret
9253
9254; DARWIN-64-DYNAMIC: _icaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009255; DARWIN-64-DYNAMIC: pushq [[RBX:%r.x]]
9256; DARWIN-64-DYNAMIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9257; DARWIN-64-DYNAMIC-NEXT: callq *([[RBX]])
9258; DARWIN-64-DYNAMIC-NEXT: callq *([[RBX]])
9259; DARWIN-64-DYNAMIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009260; DARWIN-64-DYNAMIC-NEXT: ret
9261
9262; DARWIN-64-PIC: _icaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009263; DARWIN-64-PIC: pushq [[RBX:%r.x]]
9264; DARWIN-64-PIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9265; DARWIN-64-PIC-NEXT: callq *([[RBX]])
9266; DARWIN-64-PIC-NEXT: callq *([[RBX]])
9267; DARWIN-64-PIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009268; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009269}
9270
9271define void @dicaller() nounwind {
9272entry:
9273 %0 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009274 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009275 %1 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009276 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009277 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009278; LINUX-64-STATIC: dicaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009279; LINUX-64-STATIC: callq *difunc
9280; LINUX-64-STATIC: callq *difunc
Chris Lattner4f066492009-07-11 20:29:19 +00009281; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009282
9283; LINUX-32-STATIC: dicaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009284; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009285; LINUX-32-STATIC-NEXT: calll *difunc
9286; LINUX-32-STATIC-NEXT: calll *difunc
Eric Christopher04f50792011-01-13 06:47:10 +00009287; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009288; LINUX-32-STATIC-NEXT: ret
9289
9290; LINUX-32-PIC: dicaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009291; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009292; LINUX-32-PIC-NEXT: calll *difunc
9293; LINUX-32-PIC-NEXT: calll *difunc
Eric Christopher04f50792011-01-13 06:47:10 +00009294; LINUX-32-PIC-NEXT: addl
9295
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009296; LINUX-32-PIC-NEXT: ret
9297
9298; LINUX-64-PIC: dicaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009299; LINUX-64-PIC: pushq [[RBX:%r.x]]
9300; LINUX-64-PIC-NEXT: movq difunc@GOTPCREL(%rip), [[RBX:%r.x]]
9301; LINUX-64-PIC-NEXT: callq *([[RBX]])
9302; LINUX-64-PIC-NEXT: callq *([[RBX]])
9303; LINUX-64-PIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009304; LINUX-64-PIC-NEXT: ret
9305
9306; DARWIN-32-STATIC: _dicaller:
9307; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009308; DARWIN-32-STATIC-NEXT: calll *_difunc
9309; DARWIN-32-STATIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009310; DARWIN-32-STATIC-NEXT: addl $12, %esp
9311; DARWIN-32-STATIC-NEXT: ret
9312
9313; DARWIN-32-DYNAMIC: _dicaller:
9314; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009315; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
9316; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009317; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9318; DARWIN-32-DYNAMIC-NEXT: ret
9319
9320; DARWIN-32-PIC: _dicaller:
9321; DARWIN-32-PIC: pushl %esi
9322; DARWIN-32-PIC-NEXT: subl $8, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009323; DARWIN-32-PIC-NEXT: calll L143$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009324; DARWIN-32-PIC-NEXT: L143$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009325; DARWIN-32-PIC-NEXT: popl %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009326; DARWIN-32-PIC-NEXT: calll *_difunc-L143$pb(%esi)
9327; DARWIN-32-PIC-NEXT: calll *_difunc-L143$pb(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009328; DARWIN-32-PIC-NEXT: addl $8, %esp
9329; DARWIN-32-PIC-NEXT: popl %esi
9330; DARWIN-32-PIC-NEXT: ret
9331
9332; DARWIN-64-STATIC: _dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009333; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009334; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
9335; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009336; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009337; DARWIN-64-STATIC-NEXT: ret
9338
9339; DARWIN-64-DYNAMIC: _dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009340; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009341; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
9342; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009343; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009344; DARWIN-64-DYNAMIC-NEXT: ret
9345
9346; DARWIN-64-PIC: _dicaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009347; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009348; DARWIN-64-PIC-NEXT: callq *_difunc(%rip)
9349; DARWIN-64-PIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009350; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009351; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009352}
9353
9354define void @licaller() nounwind {
9355entry:
9356 %0 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009357 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009358 %1 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009359 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009360 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009361; LINUX-64-STATIC: licaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009362; LINUX-64-STATIC: callq *lifunc
9363; LINUX-64-STATIC: callq *lifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009364; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009365
9366; LINUX-32-STATIC: licaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009367; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009368; LINUX-32-STATIC-NEXT: calll *lifunc
9369; LINUX-32-STATIC-NEXT: calll *lifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009370; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009371; LINUX-32-STATIC-NEXT: ret
9372
9373; LINUX-32-PIC: licaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009374; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009375; LINUX-32-PIC-NEXT: calll *lifunc
9376; LINUX-32-PIC-NEXT: calll *lifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009377; LINUX-32-PIC-NEXT: addl
9378
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009379; LINUX-32-PIC-NEXT: ret
9380
9381; LINUX-64-PIC: licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009382; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009383; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
9384; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009385; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009386; LINUX-64-PIC-NEXT: ret
9387
9388; DARWIN-32-STATIC: _licaller:
9389; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009390; DARWIN-32-STATIC-NEXT: calll *_lifunc
9391; DARWIN-32-STATIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009392; DARWIN-32-STATIC-NEXT: addl $12, %esp
9393; DARWIN-32-STATIC-NEXT: ret
9394
9395; DARWIN-32-DYNAMIC: _licaller:
9396; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009397; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
9398; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009399; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9400; DARWIN-32-DYNAMIC-NEXT: ret
9401
9402; DARWIN-32-PIC: _licaller:
9403; DARWIN-32-PIC: pushl %esi
9404; DARWIN-32-PIC-NEXT: subl $8, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009405; DARWIN-32-PIC-NEXT: calll L144$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009406; DARWIN-32-PIC-NEXT: L144$pb:
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009407; DARWIN-32-PIC-NEXT: popl %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009408; DARWIN-32-PIC-NEXT: calll *_lifunc-L144$pb(%esi)
9409; DARWIN-32-PIC-NEXT: calll *_lifunc-L144$pb(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009410; DARWIN-32-PIC-NEXT: addl $8, %esp
9411; DARWIN-32-PIC-NEXT: popl %esi
9412; DARWIN-32-PIC-NEXT: ret
9413
9414; DARWIN-64-STATIC: _licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009415; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009416; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
9417; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009418; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009419; DARWIN-64-STATIC-NEXT: ret
9420
9421; DARWIN-64-DYNAMIC: _licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009422; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009423; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
9424; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009425; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009426; DARWIN-64-DYNAMIC-NEXT: ret
9427
9428; DARWIN-64-PIC: _licaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009429; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009430; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
9431; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009432; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009433; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009434}
9435
9436define void @itailcaller() nounwind {
9437entry:
9438 %0 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009439 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009440 %1 = load void ()** @ifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009441 call void %1() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009442 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009443; LINUX-64-STATIC: itailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009444; LINUX-64-STATIC: callq *ifunc
9445; LINUX-64-STATIC: callq *ifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009446; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009447
9448; LINUX-32-STATIC: itailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009449; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009450; LINUX-32-STATIC-NEXT: calll *ifunc
9451; LINUX-32-STATIC-NEXT: calll *ifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009452; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009453; LINUX-32-STATIC-NEXT: ret
9454
9455; LINUX-32-PIC: itailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009456; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009457; LINUX-32-PIC-NEXT: calll *ifunc
9458; LINUX-32-PIC-NEXT: calll *ifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009459; LINUX-32-PIC-NEXT: addl
9460
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009461; LINUX-32-PIC-NEXT: ret
9462
9463; LINUX-64-PIC: itailcaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009464; LINUX-64-PIC: pushq [[RBX:%r.x]]
9465; LINUX-64-PIC-NEXT: movq ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9466; LINUX-64-PIC-NEXT: callq *([[RBX]])
9467; LINUX-64-PIC-NEXT: callq *([[RBX]])
9468; LINUX-64-PIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009469; LINUX-64-PIC-NEXT: ret
9470
9471; DARWIN-32-STATIC: _itailcaller:
9472; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009473; DARWIN-32-STATIC-NEXT: calll *_ifunc
9474; DARWIN-32-STATIC-NEXT: calll *_ifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009475; DARWIN-32-STATIC-NEXT: addl $12, %esp
9476; DARWIN-32-STATIC-NEXT: ret
9477
9478; DARWIN-32-DYNAMIC: _itailcaller:
9479; DARWIN-32-DYNAMIC: pushl %esi
9480; DARWIN-32-DYNAMIC-NEXT: subl $8, %esp
9481; DARWIN-32-DYNAMIC-NEXT: movl L_ifunc$non_lazy_ptr, %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009482; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
9483; DARWIN-32-DYNAMIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009484; DARWIN-32-DYNAMIC-NEXT: addl $8, %esp
9485; DARWIN-32-DYNAMIC-NEXT: popl %esi
9486; DARWIN-32-DYNAMIC-NEXT: ret
9487
9488; DARWIN-32-PIC: _itailcaller:
9489; DARWIN-32-PIC: pushl %esi
9490; DARWIN-32-PIC-NEXT: subl $8, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009491; DARWIN-32-PIC-NEXT: calll L145$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009492; DARWIN-32-PIC-NEXT: L145$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009493; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
9494; DARWIN-32-PIC-NEXT: movl L_ifunc$non_lazy_ptr-L145$pb([[EAX]]), %esi
Chris Lattner1eb1b682010-09-22 05:49:14 +00009495; DARWIN-32-PIC-NEXT: calll *(%esi)
9496; DARWIN-32-PIC-NEXT: calll *(%esi)
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009497; DARWIN-32-PIC-NEXT: addl $8, %esp
9498; DARWIN-32-PIC-NEXT: popl %esi
9499; DARWIN-32-PIC-NEXT: ret
9500
9501; DARWIN-64-STATIC: _itailcaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009502; DARWIN-64-STATIC: pushq [[RBX:%r.x]]
9503; DARWIN-64-STATIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9504; DARWIN-64-STATIC-NEXT: callq *([[RBX]])
9505; DARWIN-64-STATIC-NEXT: callq *([[RBX]])
9506; DARWIN-64-STATIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009507; DARWIN-64-STATIC-NEXT: ret
9508
9509; DARWIN-64-DYNAMIC: _itailcaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009510; DARWIN-64-DYNAMIC: pushq [[RBX:%r.x]]
9511; DARWIN-64-DYNAMIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9512; DARWIN-64-DYNAMIC-NEXT: callq *([[RBX]])
9513; DARWIN-64-DYNAMIC-NEXT: callq *([[RBX]])
9514; DARWIN-64-DYNAMIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009515; DARWIN-64-DYNAMIC-NEXT: ret
9516
9517; DARWIN-64-PIC: _itailcaller:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009518; DARWIN-64-PIC: pushq [[RBX:%r.x]]
9519; DARWIN-64-PIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]]
9520; DARWIN-64-PIC-NEXT: callq *([[RBX]])
9521; DARWIN-64-PIC-NEXT: callq *([[RBX]])
9522; DARWIN-64-PIC-NEXT: popq [[RBX:%r.x]]
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009523; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009524}
9525
9526define void @ditailcaller() nounwind {
9527entry:
9528 %0 = load void ()** @difunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009529 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009530 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009531; LINUX-64-STATIC: ditailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009532; LINUX-64-STATIC: callq *difunc
Chris Lattner4f066492009-07-11 20:29:19 +00009533; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009534
9535; LINUX-32-STATIC: ditailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009536; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009537; LINUX-32-STATIC-NEXT: calll *difunc
Eric Christopher04f50792011-01-13 06:47:10 +00009538; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009539; LINUX-32-STATIC-NEXT: ret
9540
9541; LINUX-32-PIC: ditailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009542; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009543; LINUX-32-PIC-NEXT: calll *difunc
Eric Christopher04f50792011-01-13 06:47:10 +00009544; LINUX-32-PIC-NEXT: addl
9545
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009546; LINUX-32-PIC-NEXT: ret
9547
9548; LINUX-64-PIC: ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009549; LINUX-64-PIC: pushq
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009550; LINUX-64-PIC-NEXT: movq difunc@GOTPCREL(%rip), [[RAX:%r.x]]
9551; LINUX-64-PIC-NEXT: callq *([[RAX]])
Evan Cheng7158e082011-01-03 22:53:22 +00009552; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009553; LINUX-64-PIC-NEXT: ret
9554
9555; DARWIN-32-STATIC: _ditailcaller:
9556; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009557; DARWIN-32-STATIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009558; DARWIN-32-STATIC-NEXT: addl $12, %esp
9559; DARWIN-32-STATIC-NEXT: ret
9560
9561; DARWIN-32-DYNAMIC: _ditailcaller:
9562; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009563; DARWIN-32-DYNAMIC-NEXT: calll *_difunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009564; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9565; DARWIN-32-DYNAMIC-NEXT: ret
9566
9567; DARWIN-32-PIC: _ditailcaller:
9568; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009569; DARWIN-32-PIC-NEXT: calll L146$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009570; DARWIN-32-PIC-NEXT: L146$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009571; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
9572; DARWIN-32-PIC-NEXT: calll *_difunc-L146$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009573; DARWIN-32-PIC-NEXT: addl $12, %esp
9574; DARWIN-32-PIC-NEXT: ret
9575
9576; DARWIN-64-STATIC: _ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009577; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009578; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009579; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009580; DARWIN-64-STATIC-NEXT: ret
9581
9582; DARWIN-64-DYNAMIC: _ditailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009583; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009584; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009585; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009586; DARWIN-64-DYNAMIC-NEXT: ret
9587
9588; DARWIN-64-PIC: _ditailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009589; DARWIN-64-PIC: callq *_difunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009590; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009591; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009592}
9593
9594define void @litailcaller() nounwind {
9595entry:
9596 %0 = load void ()** @lifunc, align 8
Dan Gohmanf0423962009-12-18 01:02:18 +00009597 call void %0() nounwind
Dan Gohman318f5052009-03-14 02:35:10 +00009598 ret void
Chris Lattner4f066492009-07-11 20:29:19 +00009599; LINUX-64-STATIC: litailcaller:
Sean Callanan108934c2009-12-18 00:01:26 +00009600; LINUX-64-STATIC: callq *lifunc
Chris Lattner4f066492009-07-11 20:29:19 +00009601; LINUX-64-STATIC: ret
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009602
9603; LINUX-32-STATIC: litailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009604; LINUX-32-STATIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009605; LINUX-32-STATIC-NEXT: calll *lifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009606; LINUX-32-STATIC-NEXT: addl
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009607; LINUX-32-STATIC-NEXT: ret
9608
9609; LINUX-32-PIC: litailcaller:
Eric Christopher04f50792011-01-13 06:47:10 +00009610; LINUX-32-PIC: subl
Chris Lattner1eb1b682010-09-22 05:49:14 +00009611; LINUX-32-PIC-NEXT: calll *lifunc
Eric Christopher04f50792011-01-13 06:47:10 +00009612; LINUX-32-PIC-NEXT: addl
9613
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009614; LINUX-32-PIC-NEXT: ret
9615
9616; LINUX-64-PIC: litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009617; LINUX-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009618; LINUX-64-PIC-NEXT: callq *lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009619; LINUX-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009620; LINUX-64-PIC-NEXT: ret
9621
9622; DARWIN-32-STATIC: _litailcaller:
9623; DARWIN-32-STATIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009624; DARWIN-32-STATIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009625; DARWIN-32-STATIC-NEXT: addl $12, %esp
9626; DARWIN-32-STATIC-NEXT: ret
9627
9628; DARWIN-32-DYNAMIC: _litailcaller:
9629; DARWIN-32-DYNAMIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009630; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009631; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp
9632; DARWIN-32-DYNAMIC-NEXT: ret
9633
9634; DARWIN-32-PIC: _litailcaller:
9635; DARWIN-32-PIC: subl $12, %esp
Chris Lattner1eb1b682010-09-22 05:49:14 +00009636; DARWIN-32-PIC-NEXT: calll L147$pb
Dan Gohman9f23dee2010-04-17 16:29:15 +00009637; DARWIN-32-PIC-NEXT: L147$pb:
Jakob Stoklund Olesen57b0fb72011-04-05 20:20:30 +00009638; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]]
9639; DARWIN-32-PIC-NEXT: calll *_lifunc-L147$pb([[EAX]])
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009640; DARWIN-32-PIC-NEXT: addl $12, %esp
9641; DARWIN-32-PIC-NEXT: ret
9642
9643; DARWIN-64-STATIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009644; DARWIN-64-STATIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009645; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009646; DARWIN-64-STATIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009647; DARWIN-64-STATIC-NEXT: ret
9648
9649; DARWIN-64-DYNAMIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009650; DARWIN-64-DYNAMIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009651; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009652; DARWIN-64-DYNAMIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009653; DARWIN-64-DYNAMIC-NEXT: ret
9654
9655; DARWIN-64-PIC: _litailcaller:
Evan Cheng7158e082011-01-03 22:53:22 +00009656; DARWIN-64-PIC: pushq
Sean Callanan108934c2009-12-18 00:01:26 +00009657; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip)
Evan Cheng7158e082011-01-03 22:53:22 +00009658; DARWIN-64-PIC-NEXT: popq
Daniel Dunbar3ff36b72009-08-25 18:45:03 +00009659; DARWIN-64-PIC-NEXT: ret
Dan Gohman318f5052009-03-14 02:35:10 +00009660}