1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
3
4define i1000 @square(i1000 %A) nounwind {
5; CHECK-LABEL: square:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    pushq %rbp
8; CHECK-NEXT:    pushq %r15
9; CHECK-NEXT:    pushq %r14
10; CHECK-NEXT:    pushq %r13
11; CHECK-NEXT:    pushq %r12
12; CHECK-NEXT:    pushq %rbx
13; CHECK-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
14; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %r10
15; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbx
16; CHECK-NEXT:    bswapq %rbx
17; CHECK-NEXT:    movabsq $1085102592571150095, %rdi # imm = 0xF0F0F0F0F0F0F0F
18; CHECK-NEXT:    movq %rbx, %rbp
19; CHECK-NEXT:    andq %rdi, %rbp
20; CHECK-NEXT:    shlq $4, %rbp
21; CHECK-NEXT:    movabsq $-1085102592571150096, %r11 # imm = 0xF0F0F0F0F0F0F0F0
22; CHECK-NEXT:    andq %r11, %rbx
23; CHECK-NEXT:    movq %r11, %rax
24; CHECK-NEXT:    shrq $4, %rbx
25; CHECK-NEXT:    orq %rbp, %rbx
26; CHECK-NEXT:    movabsq $3689348814741910323, %r11 # imm = 0x3333333333333333
27; CHECK-NEXT:    movq %rbx, %r14
28; CHECK-NEXT:    andq %r11, %r14
29; CHECK-NEXT:    movabsq $-3689348814741910324, %rbp # imm = 0xCCCCCCCCCCCCCCCC
30; CHECK-NEXT:    andq %rbp, %rbx
31; CHECK-NEXT:    movq %rbp, %r15
32; CHECK-NEXT:    shrq $2, %rbx
33; CHECK-NEXT:    leaq (%rbx,%r14,4), %r14
34; CHECK-NEXT:    movabsq $6148914691230924800, %rbx # imm = 0x5555555555000000
35; CHECK-NEXT:    andq %r14, %rbx
36; CHECK-NEXT:    movabsq $-6148914691247702016, %rbp # imm = 0xAAAAAAAAAA000000
37; CHECK-NEXT:    andq %r14, %rbp
38; CHECK-NEXT:    shrq %rbp
39; CHECK-NEXT:    leaq (%rbp,%rbx,2), %rbx
40; CHECK-NEXT:    movq %rbx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
41; CHECK-NEXT:    bswapq %r10
42; CHECK-NEXT:    movq %r10, %rbx
43; CHECK-NEXT:    andq %rdi, %rbx
44; CHECK-NEXT:    shlq $4, %rbx
45; CHECK-NEXT:    andq %rax, %r10
46; CHECK-NEXT:    shrq $4, %r10
47; CHECK-NEXT:    orq %rbx, %r10
48; CHECK-NEXT:    movq %r10, %rbx
49; CHECK-NEXT:    andq %r11, %rbx
50; CHECK-NEXT:    andq %r15, %r10
51; CHECK-NEXT:    shrq $2, %r10
52; CHECK-NEXT:    leaq (%r10,%rbx,4), %rbp
53; CHECK-NEXT:    movabsq $6148914691236517205, %rbx # imm = 0x5555555555555555
54; CHECK-NEXT:    movq %rbp, %r10
55; CHECK-NEXT:    andq %rbx, %r10
56; CHECK-NEXT:    movabsq $-6148914691236517206, %r13 # imm = 0xAAAAAAAAAAAAAAAA
57; CHECK-NEXT:    andq %r13, %rbp
58; CHECK-NEXT:    shrq %rbp
59; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
60; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
61; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
62; CHECK-NEXT:    bswapq %rbp
63; CHECK-NEXT:    movq %rbp, %r10
64; CHECK-NEXT:    andq %rdi, %r10
65; CHECK-NEXT:    shlq $4, %r10
66; CHECK-NEXT:    andq %rax, %rbp
67; CHECK-NEXT:    shrq $4, %rbp
68; CHECK-NEXT:    orq %r10, %rbp
69; CHECK-NEXT:    movq %rbp, %r10
70; CHECK-NEXT:    andq %r11, %r10
71; CHECK-NEXT:    andq %r15, %rbp
72; CHECK-NEXT:    shrq $2, %rbp
73; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
74; CHECK-NEXT:    movq %rbp, %r10
75; CHECK-NEXT:    andq %rbx, %r10
76; CHECK-NEXT:    andq %r13, %rbp
77; CHECK-NEXT:    shrq %rbp
78; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
79; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
80; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
81; CHECK-NEXT:    bswapq %rbp
82; CHECK-NEXT:    movq %rbp, %r10
83; CHECK-NEXT:    andq %rdi, %r10
84; CHECK-NEXT:    shlq $4, %r10
85; CHECK-NEXT:    andq %rax, %rbp
86; CHECK-NEXT:    shrq $4, %rbp
87; CHECK-NEXT:    orq %r10, %rbp
88; CHECK-NEXT:    movq %rbp, %r10
89; CHECK-NEXT:    andq %r11, %r10
90; CHECK-NEXT:    andq %r15, %rbp
91; CHECK-NEXT:    shrq $2, %rbp
92; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
93; CHECK-NEXT:    movq %rbp, %r10
94; CHECK-NEXT:    andq %rbx, %r10
95; CHECK-NEXT:    andq %r13, %rbp
96; CHECK-NEXT:    shrq %rbp
97; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
98; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
99; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
100; CHECK-NEXT:    bswapq %rbp
101; CHECK-NEXT:    movq %rbp, %r10
102; CHECK-NEXT:    andq %rdi, %r10
103; CHECK-NEXT:    shlq $4, %r10
104; CHECK-NEXT:    andq %rax, %rbp
105; CHECK-NEXT:    shrq $4, %rbp
106; CHECK-NEXT:    orq %r10, %rbp
107; CHECK-NEXT:    movq %rbp, %r10
108; CHECK-NEXT:    andq %r11, %r10
109; CHECK-NEXT:    andq %r15, %rbp
110; CHECK-NEXT:    shrq $2, %rbp
111; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
112; CHECK-NEXT:    movq %rbp, %r10
113; CHECK-NEXT:    andq %rbx, %r10
114; CHECK-NEXT:    andq %r13, %rbp
115; CHECK-NEXT:    shrq %rbp
116; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
117; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
118; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
119; CHECK-NEXT:    bswapq %rbp
120; CHECK-NEXT:    movq %rbp, %r10
121; CHECK-NEXT:    andq %rdi, %r10
122; CHECK-NEXT:    shlq $4, %r10
123; CHECK-NEXT:    andq %rax, %rbp
124; CHECK-NEXT:    movq %rax, %r14
125; CHECK-NEXT:    shrq $4, %rbp
126; CHECK-NEXT:    orq %r10, %rbp
127; CHECK-NEXT:    movq %rbp, %r10
128; CHECK-NEXT:    andq %r11, %r10
129; CHECK-NEXT:    andq %r15, %rbp
130; CHECK-NEXT:    shrq $2, %rbp
131; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
132; CHECK-NEXT:    movq %rbp, %r10
133; CHECK-NEXT:    andq %rbx, %r10
134; CHECK-NEXT:    andq %r13, %rbp
135; CHECK-NEXT:    shrq %rbp
136; CHECK-NEXT:    leaq (%rbp,%r10,2), %rax
137; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
138; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
139; CHECK-NEXT:    bswapq %rbp
140; CHECK-NEXT:    movq %rbp, %r10
141; CHECK-NEXT:    andq %rdi, %r10
142; CHECK-NEXT:    shlq $4, %r10
143; CHECK-NEXT:    andq %r14, %rbp
144; CHECK-NEXT:    shrq $4, %rbp
145; CHECK-NEXT:    orq %r10, %rbp
146; CHECK-NEXT:    movq %rbp, %r10
147; CHECK-NEXT:    andq %r11, %r10
148; CHECK-NEXT:    andq %r15, %rbp
149; CHECK-NEXT:    shrq $2, %rbp
150; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
151; CHECK-NEXT:    movq %rbp, %r10
152; CHECK-NEXT:    andq %rbx, %r10
153; CHECK-NEXT:    andq %r13, %rbp
154; CHECK-NEXT:    shrq %rbp
155; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
156; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
157; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
158; CHECK-NEXT:    bswapq %rbp
159; CHECK-NEXT:    movq %rbp, %r10
160; CHECK-NEXT:    andq %rdi, %r10
161; CHECK-NEXT:    shlq $4, %r10
162; CHECK-NEXT:    andq %r14, %rbp
163; CHECK-NEXT:    shrq $4, %rbp
164; CHECK-NEXT:    orq %r10, %rbp
165; CHECK-NEXT:    movq %rbp, %r10
166; CHECK-NEXT:    andq %r11, %r10
167; CHECK-NEXT:    andq %r15, %rbp
168; CHECK-NEXT:    shrq $2, %rbp
169; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
170; CHECK-NEXT:    movq %rbp, %r10
171; CHECK-NEXT:    andq %rbx, %r10
172; CHECK-NEXT:    andq %r13, %rbp
173; CHECK-NEXT:    shrq %rbp
174; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
175; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
176; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
177; CHECK-NEXT:    bswapq %rbp
178; CHECK-NEXT:    movq %rbp, %r10
179; CHECK-NEXT:    andq %rdi, %r10
180; CHECK-NEXT:    shlq $4, %r10
181; CHECK-NEXT:    andq %r14, %rbp
182; CHECK-NEXT:    shrq $4, %rbp
183; CHECK-NEXT:    orq %r10, %rbp
184; CHECK-NEXT:    movq %rbp, %r10
185; CHECK-NEXT:    andq %r11, %r10
186; CHECK-NEXT:    andq %r15, %rbp
187; CHECK-NEXT:    shrq $2, %rbp
188; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
189; CHECK-NEXT:    movq %rbp, %r10
190; CHECK-NEXT:    andq %rbx, %r10
191; CHECK-NEXT:    andq %r13, %rbp
192; CHECK-NEXT:    shrq %rbp
193; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
194; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
195; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
196; CHECK-NEXT:    bswapq %rbp
197; CHECK-NEXT:    movq %rbp, %r10
198; CHECK-NEXT:    andq %rdi, %r10
199; CHECK-NEXT:    shlq $4, %r10
200; CHECK-NEXT:    andq %r14, %rbp
201; CHECK-NEXT:    shrq $4, %rbp
202; CHECK-NEXT:    orq %r10, %rbp
203; CHECK-NEXT:    movq %rbp, %r10
204; CHECK-NEXT:    andq %r11, %r10
205; CHECK-NEXT:    andq %r15, %rbp
206; CHECK-NEXT:    shrq $2, %rbp
207; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
208; CHECK-NEXT:    movq %rbp, %r10
209; CHECK-NEXT:    andq %rbx, %r10
210; CHECK-NEXT:    andq %r13, %rbp
211; CHECK-NEXT:    shrq %rbp
212; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
213; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
214; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbp
215; CHECK-NEXT:    bswapq %rbp
216; CHECK-NEXT:    movq %rbp, %r10
217; CHECK-NEXT:    andq %rdi, %r10
218; CHECK-NEXT:    shlq $4, %r10
219; CHECK-NEXT:    andq %r14, %rbp
220; CHECK-NEXT:    shrq $4, %rbp
221; CHECK-NEXT:    orq %r10, %rbp
222; CHECK-NEXT:    movq %rbp, %r10
223; CHECK-NEXT:    andq %r11, %r10
224; CHECK-NEXT:    andq %r15, %rbp
225; CHECK-NEXT:    shrq $2, %rbp
226; CHECK-NEXT:    leaq (%rbp,%r10,4), %rbp
227; CHECK-NEXT:    movq %rbp, %r10
228; CHECK-NEXT:    andq %rbx, %r10
229; CHECK-NEXT:    andq %r13, %rbp
230; CHECK-NEXT:    shrq %rbp
231; CHECK-NEXT:    leaq (%rbp,%r10,2), %rbp
232; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
233; CHECK-NEXT:    bswapq %r9
234; CHECK-NEXT:    movq %r9, %rbp
235; CHECK-NEXT:    andq %rdi, %rbp
236; CHECK-NEXT:    shlq $4, %rbp
237; CHECK-NEXT:    andq %r14, %r9
238; CHECK-NEXT:    shrq $4, %r9
239; CHECK-NEXT:    orq %rbp, %r9
240; CHECK-NEXT:    movq %r9, %rbp
241; CHECK-NEXT:    andq %r11, %rbp
242; CHECK-NEXT:    andq %r15, %r9
243; CHECK-NEXT:    shrq $2, %r9
244; CHECK-NEXT:    leaq (%r9,%rbp,4), %rbp
245; CHECK-NEXT:    movq %rbp, %r9
246; CHECK-NEXT:    andq %rbx, %r9
247; CHECK-NEXT:    andq %r13, %rbp
248; CHECK-NEXT:    shrq %rbp
249; CHECK-NEXT:    leaq (%rbp,%r9,2), %rbp
250; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
251; CHECK-NEXT:    bswapq %r8
252; CHECK-NEXT:    movq %r8, %rbp
253; CHECK-NEXT:    andq %rdi, %rbp
254; CHECK-NEXT:    shlq $4, %rbp
255; CHECK-NEXT:    andq %r14, %r8
256; CHECK-NEXT:    shrq $4, %r8
257; CHECK-NEXT:    orq %rbp, %r8
258; CHECK-NEXT:    movq %r8, %rbp
259; CHECK-NEXT:    andq %r11, %rbp
260; CHECK-NEXT:    andq %r15, %r8
261; CHECK-NEXT:    movq %r15, %r9
262; CHECK-NEXT:    shrq $2, %r8
263; CHECK-NEXT:    leaq (%r8,%rbp,4), %rbp
264; CHECK-NEXT:    movq %rbp, %r8
265; CHECK-NEXT:    andq %rbx, %r8
266; CHECK-NEXT:    andq %r13, %rbp
267; CHECK-NEXT:    shrq %rbp
268; CHECK-NEXT:    leaq (%rbp,%r8,2), %rbp
269; CHECK-NEXT:    movq %rbp, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
270; CHECK-NEXT:    bswapq %rcx
271; CHECK-NEXT:    movq %rcx, %rbp
272; CHECK-NEXT:    andq %rdi, %rbp
273; CHECK-NEXT:    shlq $4, %rbp
274; CHECK-NEXT:    andq %r14, %rcx
275; CHECK-NEXT:    shrq $4, %rcx
276; CHECK-NEXT:    orq %rbp, %rcx
277; CHECK-NEXT:    movq %rcx, %rbp
278; CHECK-NEXT:    andq %r11, %rbp
279; CHECK-NEXT:    andq %r15, %rcx
280; CHECK-NEXT:    shrq $2, %rcx
281; CHECK-NEXT:    leaq (%rcx,%rbp,4), %rcx
282; CHECK-NEXT:    movq %rcx, %rbp
283; CHECK-NEXT:    andq %rbx, %rbp
284; CHECK-NEXT:    andq %r13, %rcx
285; CHECK-NEXT:    shrq %rcx
286; CHECK-NEXT:    leaq (%rcx,%rbp,2), %r15
287; CHECK-NEXT:    bswapq %rdx
288; CHECK-NEXT:    movq %rdx, %rbp
289; CHECK-NEXT:    andq %rdi, %rbp
290; CHECK-NEXT:    shlq $4, %rbp
291; CHECK-NEXT:    andq %r14, %rdx
292; CHECK-NEXT:    shrq $4, %rdx
293; CHECK-NEXT:    orq %rbp, %rdx
294; CHECK-NEXT:    movq %rdx, %rbp
295; CHECK-NEXT:    andq %r11, %rbp
296; CHECK-NEXT:    andq %r9, %rdx
297; CHECK-NEXT:    shrq $2, %rdx
298; CHECK-NEXT:    leaq (%rdx,%rbp,4), %rdx
299; CHECK-NEXT:    movq %rdx, %rbp
300; CHECK-NEXT:    andq %rbx, %rbp
301; CHECK-NEXT:    andq %r13, %rdx
302; CHECK-NEXT:    shrq %rdx
303; CHECK-NEXT:    leaq (%rdx,%rbp,2), %rdx
304; CHECK-NEXT:    bswapq %rsi
305; CHECK-NEXT:    andq %rsi, %rdi
306; CHECK-NEXT:    andq %r14, %rsi
307; CHECK-NEXT:    shlq $4, %rdi
308; CHECK-NEXT:    shrq $4, %rsi
309; CHECK-NEXT:    orq %rdi, %rsi
310; CHECK-NEXT:    andq %rsi, %r11
311; CHECK-NEXT:    andq %r9, %rsi
312; CHECK-NEXT:    shrq $2, %rsi
313; CHECK-NEXT:    leaq (%rsi,%r11,4), %rsi
314; CHECK-NEXT:    andq %rsi, %rbx
315; CHECK-NEXT:    andq %r13, %rsi
316; CHECK-NEXT:    shrq %rsi
317; CHECK-NEXT:    leaq (%rsi,%rbx,2), %r13
318; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r11 # 8-byte Reload
319; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
320; CHECK-NEXT:    shrdq $24, %rax, %r11
321; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload
322; CHECK-NEXT:    shrdq $24, %rcx, %rax
323; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
324; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Reload
325; CHECK-NEXT:    shrdq $24, %rbp, %rcx
326; CHECK-NEXT:    movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
327; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Reload
328; CHECK-NEXT:    shrdq $24, %r12, %rbp
329; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload
330; CHECK-NEXT:    shrdq $24, %r14, %r12
331; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Reload
332; CHECK-NEXT:    shrdq $24, %rbx, %r14
333; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload
334; CHECK-NEXT:    shrdq $24, %r10, %rbx
335; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r9 # 8-byte Reload
336; CHECK-NEXT:    shrdq $24, %r9, %r10
337; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r8 # 8-byte Reload
338; CHECK-NEXT:    shrdq $24, %r8, %r9
339; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload
340; CHECK-NEXT:    shrdq $24, %rdi, %r8
341; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload
342; CHECK-NEXT:    shrdq $24, %rsi, %rdi
343; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
344; CHECK-NEXT:    shrdq $24, %rax, %rsi
345; CHECK-NEXT:    shrdq $24, %r15, %rax
346; CHECK-NEXT:    movq %rax, %rcx
347; CHECK-NEXT:    shrdq $24, %rdx, %r15
348; CHECK-NEXT:    shrdq $24, %r13, %rdx
349; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
350; CHECK-NEXT:    movq %rdx, 112(%rax)
351; CHECK-NEXT:    movq %r15, 104(%rax)
352; CHECK-NEXT:    movq %rcx, 96(%rax)
353; CHECK-NEXT:    movq %rsi, 88(%rax)
354; CHECK-NEXT:    movq %rdi, 80(%rax)
355; CHECK-NEXT:    movq %r8, 72(%rax)
356; CHECK-NEXT:    movq %r9, 64(%rax)
357; CHECK-NEXT:    movq %r10, 56(%rax)
358; CHECK-NEXT:    movq %rbx, 48(%rax)
359; CHECK-NEXT:    movq %r14, 40(%rax)
360; CHECK-NEXT:    movq %r12, 32(%rax)
361; CHECK-NEXT:    movq %rbp, 24(%rax)
362; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload
363; CHECK-NEXT:    movq %rcx, 16(%rax)
364; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload
365; CHECK-NEXT:    movq %rcx, 8(%rax)
366; CHECK-NEXT:    movq %r11, (%rax)
367; CHECK-NEXT:    movq %r13, %rcx
368; CHECK-NEXT:    shrq $56, %r13
369; CHECK-NEXT:    movb %r13b, 124(%rax)
370; CHECK-NEXT:    shrq $24, %rcx
371; CHECK-NEXT:    movl %ecx, 120(%rax)
372; CHECK-NEXT:    popq %rbx
373; CHECK-NEXT:    popq %r12
374; CHECK-NEXT:    popq %r13
375; CHECK-NEXT:    popq %r14
376; CHECK-NEXT:    popq %r15
377; CHECK-NEXT:    popq %rbp
378; CHECK-NEXT:    retq
379  %Z = call i1000 @llvm.bitreverse.i1000(i1000 %A)
380  ret i1000 %Z
381}
382
383declare i1000 @llvm.bitreverse.i1000(i1000)
384