1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-- | FileCheck %s
3 ; RUN: llc < %s -mtriple=x86_64-- -O0 | FileCheck %s -check-prefixes=CHECK-X64,CHECK-X64-O0
4 ; RUN: llc < %s -mtriple=x86_64-- -O2 | FileCheck %s -check-prefixes=CHECK-X64,CHECK-X64-O2
7 define void @shift1(i256 %x, i256 %a, ptr nocapture %r) nounwind readnone {
9 ; CHECK: # %bb.0: # %entry
10 ; CHECK-NEXT: pushl %ebp
11 ; CHECK-NEXT: movl %esp, %ebp
12 ; CHECK-NEXT: pushl %ebx
13 ; CHECK-NEXT: pushl %edi
14 ; CHECK-NEXT: pushl %esi
15 ; CHECK-NEXT: andl $-16, %esp
16 ; CHECK-NEXT: subl $112, %esp
17 ; CHECK-NEXT: movl 40(%ebp), %ecx
18 ; CHECK-NEXT: movl 8(%ebp), %eax
19 ; CHECK-NEXT: movl 12(%ebp), %edx
20 ; CHECK-NEXT: movl 16(%ebp), %esi
21 ; CHECK-NEXT: movl 32(%ebp), %edi
22 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
23 ; CHECK-NEXT: movl 28(%ebp), %edi
24 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
25 ; CHECK-NEXT: movl 24(%ebp), %edi
26 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
27 ; CHECK-NEXT: movl 20(%ebp), %edi
28 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
29 ; CHECK-NEXT: movl 36(%ebp), %edi
30 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
31 ; CHECK-NEXT: movl %esi, {{[0-9]+}}(%esp)
32 ; CHECK-NEXT: movl %edx, {{[0-9]+}}(%esp)
33 ; CHECK-NEXT: movl %eax, {{[0-9]+}}(%esp)
34 ; CHECK-NEXT: sarl $31, %edi
35 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
36 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
37 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
38 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
39 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
40 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
41 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
42 ; CHECK-NEXT: movl %edi, {{[0-9]+}}(%esp)
43 ; CHECK-NEXT: movl %ecx, %eax
44 ; CHECK-NEXT: shrb $5, %al
45 ; CHECK-NEXT: movzbl %al, %eax
46 ; CHECK-NEXT: movl 40(%esp,%eax,4), %edx
47 ; CHECK-NEXT: movl 36(%esp,%eax,4), %esi
48 ; CHECK-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
49 ; CHECK-NEXT: shrdl %cl, %edx, %esi
50 ; CHECK-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
51 ; CHECK-NEXT: movl 44(%esp,%eax,4), %esi
52 ; CHECK-NEXT: shrdl %cl, %esi, %edx
53 ; CHECK-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
54 ; CHECK-NEXT: movl 48(%esp,%eax,4), %ebx
55 ; CHECK-NEXT: shrdl %cl, %ebx, %esi
56 ; CHECK-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
57 ; CHECK-NEXT: movl 52(%esp,%eax,4), %esi
58 ; CHECK-NEXT: shrdl %cl, %esi, %ebx
59 ; CHECK-NEXT: movl 56(%esp,%eax,4), %edx
60 ; CHECK-NEXT: shrdl %cl, %edx, %esi
61 ; CHECK-NEXT: movl 32(%esp,%eax,4), %edi
62 ; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
63 ; CHECK-NEXT: movl 60(%esp,%eax,4), %eax
64 ; CHECK-NEXT: shrdl %cl, %eax, %edx
65 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
66 ; CHECK-NEXT: shrdl %cl, %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
67 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
68 ; CHECK-NEXT: sarl %cl, %eax
69 ; CHECK-NEXT: movl 72(%ebp), %ecx
70 ; CHECK-NEXT: movl %eax, 28(%ecx)
71 ; CHECK-NEXT: movl %edx, 24(%ecx)
72 ; CHECK-NEXT: movl %esi, 20(%ecx)
73 ; CHECK-NEXT: movl %ebx, 16(%ecx)
74 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
75 ; CHECK-NEXT: movl %eax, 12(%ecx)
76 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
77 ; CHECK-NEXT: movl %eax, 8(%ecx)
78 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
79 ; CHECK-NEXT: movl %eax, 4(%ecx)
80 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
81 ; CHECK-NEXT: movl %eax, (%ecx)
82 ; CHECK-NEXT: leal -12(%ebp), %esp
83 ; CHECK-NEXT: popl %esi
84 ; CHECK-NEXT: popl %edi
85 ; CHECK-NEXT: popl %ebx
86 ; CHECK-NEXT: popl %ebp
89 ; CHECK-X64-O0-LABEL: shift1:
90 ; CHECK-X64-O0: # %bb.0: # %entry
91 ; CHECK-X64-O0-NEXT: movq {{[0-9]+}}(%rsp), %rax
92 ; CHECK-X64-O0-NEXT: movq {{[0-9]+}}(%rsp), %rax
93 ; CHECK-X64-O0-NEXT: movq {{[0-9]+}}(%rsp), %rax
94 ; CHECK-X64-O0-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)
95 ; CHECK-X64-O0-NEXT: movq %rsi, -{{[0-9]+}}(%rsp)
96 ; CHECK-X64-O0-NEXT: movq %rdx, -{{[0-9]+}}(%rsp)
97 ; CHECK-X64-O0-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
98 ; CHECK-X64-O0-NEXT: sarq $63, %rcx
99 ; CHECK-X64-O0-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
100 ; CHECK-X64-O0-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
101 ; CHECK-X64-O0-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
102 ; CHECK-X64-O0-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
103 ; CHECK-X64-O0-NEXT: movb %r8b, %cl
104 ; CHECK-X64-O0-NEXT: movb %cl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill
105 ; CHECK-X64-O0-NEXT: movb %cl, %dl
106 ; CHECK-X64-O0-NEXT: shrb $6, %dl
107 ; CHECK-X64-O0-NEXT: movzbl %dl, %edx
108 ; CHECK-X64-O0-NEXT: movl %edx, %edi
109 ; CHECK-X64-O0-NEXT: movq -56(%rsp,%rdi,8), %rsi
110 ; CHECK-X64-O0-NEXT: movq -72(%rsp,%rdi,8), %r8
111 ; CHECK-X64-O0-NEXT: movq -64(%rsp,%rdi,8), %r9
112 ; CHECK-X64-O0-NEXT: movq %r9, %rdx
113 ; CHECK-X64-O0-NEXT: shrdq %cl, %rsi, %rdx
114 ; CHECK-X64-O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %cl # 1-byte Reload
115 ; CHECK-X64-O0-NEXT: movq -48(%rsp,%rdi,8), %rdi
116 ; CHECK-X64-O0-NEXT: shrdq %cl, %rdi, %rsi
117 ; CHECK-X64-O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %cl # 1-byte Reload
118 ; CHECK-X64-O0-NEXT: shrdq %cl, %r9, %r8
119 ; CHECK-X64-O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %cl # 1-byte Reload
120 ; CHECK-X64-O0-NEXT: movq %r8, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
121 ; CHECK-X64-O0-NEXT: sarq %cl, %rdi
122 ; CHECK-X64-O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload
123 ; CHECK-X64-O0-NEXT: movq %rdi, 24(%rax)
124 ; CHECK-X64-O0-NEXT: movq %rsi, 16(%rax)
125 ; CHECK-X64-O0-NEXT: movq %rdx, 8(%rax)
126 ; CHECK-X64-O0-NEXT: movq %rcx, (%rax)
127 ; CHECK-X64-O0-NEXT: retq
129 ; CHECK-X64-O2-LABEL: shift1:
130 ; CHECK-X64-O2: # %bb.0: # %entry
131 ; CHECK-X64-O2-NEXT: movq {{[0-9]+}}(%rsp), %rax
132 ; CHECK-X64-O2-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
133 ; CHECK-X64-O2-NEXT: movq %rdx, -{{[0-9]+}}(%rsp)
134 ; CHECK-X64-O2-NEXT: movq %rsi, -{{[0-9]+}}(%rsp)
135 ; CHECK-X64-O2-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)
136 ; CHECK-X64-O2-NEXT: sarq $63, %rcx
137 ; CHECK-X64-O2-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
138 ; CHECK-X64-O2-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
139 ; CHECK-X64-O2-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
140 ; CHECK-X64-O2-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
141 ; CHECK-X64-O2-NEXT: movl %r8d, %ecx
142 ; CHECK-X64-O2-NEXT: shrb $6, %cl
143 ; CHECK-X64-O2-NEXT: movzbl %cl, %edx
144 ; CHECK-X64-O2-NEXT: movq -56(%rsp,%rdx,8), %rsi
145 ; CHECK-X64-O2-NEXT: movq -72(%rsp,%rdx,8), %rdi
146 ; CHECK-X64-O2-NEXT: movq -64(%rsp,%rdx,8), %r9
147 ; CHECK-X64-O2-NEXT: movq %r9, %r10
148 ; CHECK-X64-O2-NEXT: movl %r8d, %ecx
149 ; CHECK-X64-O2-NEXT: shrdq %cl, %rsi, %r10
150 ; CHECK-X64-O2-NEXT: movq -48(%rsp,%rdx,8), %rdx
151 ; CHECK-X64-O2-NEXT: shrdq %cl, %rdx, %rsi
152 ; CHECK-X64-O2-NEXT: shrdq %cl, %r9, %rdi
153 ; CHECK-X64-O2-NEXT: sarq %cl, %rdx
154 ; CHECK-X64-O2-NEXT: movq %rdx, 24(%rax)
155 ; CHECK-X64-O2-NEXT: movq %rsi, 16(%rax)
156 ; CHECK-X64-O2-NEXT: movq %r10, 8(%rax)
157 ; CHECK-X64-O2-NEXT: movq %rdi, (%rax)
158 ; CHECK-X64-O2-NEXT: retq
160 %0 = ashr i256 %x, %a
161 store i256 %0, ptr %r
165 define i256 @shift2(i256 %c) nounwind
166 ; CHECK-LABEL: shift2:
168 ; CHECK-NEXT: pushl %ebp
169 ; CHECK-NEXT: movl %esp, %ebp
170 ; CHECK-NEXT: pushl %ebx
171 ; CHECK-NEXT: pushl %edi
172 ; CHECK-NEXT: pushl %esi
173 ; CHECK-NEXT: andl $-16, %esp
174 ; CHECK-NEXT: subl $112, %esp
175 ; CHECK-NEXT: movl 12(%ebp), %ecx
176 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
177 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
178 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
179 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
180 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
181 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
182 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
183 ; CHECK-NEXT: movl $1, {{[0-9]+}}(%esp)
184 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
185 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
186 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
187 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
188 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
189 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
190 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
191 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
192 ; CHECK-NEXT: movl %ecx, %eax
193 ; CHECK-NEXT: shrb $3, %al
194 ; CHECK-NEXT: andb $28, %al
195 ; CHECK-NEXT: negb %al
196 ; CHECK-NEXT: movsbl %al, %eax
197 ; CHECK-NEXT: movl 68(%esp,%eax), %esi
198 ; CHECK-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
199 ; CHECK-NEXT: movl 72(%esp,%eax), %edx
200 ; CHECK-NEXT: movl %edx, %edi
201 ; CHECK-NEXT: shldl %cl, %esi, %edi
202 ; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
203 ; CHECK-NEXT: movl 76(%esp,%eax), %esi
204 ; CHECK-NEXT: movl %esi, %edi
205 ; CHECK-NEXT: shldl %cl, %edx, %edi
206 ; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
207 ; CHECK-NEXT: movl 80(%esp,%eax), %edx
208 ; CHECK-NEXT: movl %edx, %edi
209 ; CHECK-NEXT: shldl %cl, %esi, %edi
210 ; CHECK-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
211 ; CHECK-NEXT: movl 84(%esp,%eax), %esi
212 ; CHECK-NEXT: movl %esi, %ebx
213 ; CHECK-NEXT: shldl %cl, %edx, %ebx
214 ; CHECK-NEXT: movl 88(%esp,%eax), %edi
215 ; CHECK-NEXT: movl %edi, %edx
216 ; CHECK-NEXT: shldl %cl, %esi, %edx
217 ; CHECK-NEXT: movl 64(%esp,%eax), %esi
218 ; CHECK-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
219 ; CHECK-NEXT: movl 92(%esp,%eax), %esi
220 ; CHECK-NEXT: shldl %cl, %edi, %esi
221 ; CHECK-NEXT: movl 8(%ebp), %eax
222 ; CHECK-NEXT: movl %esi, 28(%eax)
223 ; CHECK-NEXT: movl %edx, 24(%eax)
224 ; CHECK-NEXT: movl %ebx, 20(%eax)
225 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
226 ; CHECK-NEXT: movl %edx, 16(%eax)
227 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
228 ; CHECK-NEXT: movl %edx, 12(%eax)
229 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
230 ; CHECK-NEXT: movl %edx, 8(%eax)
231 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
232 ; CHECK-NEXT: movl %edi, %edx
233 ; CHECK-NEXT: shll %cl, %edx
234 ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
235 ; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
236 ; CHECK-NEXT: shldl %cl, %edi, %esi
237 ; CHECK-NEXT: movl %esi, 4(%eax)
238 ; CHECK-NEXT: movl %edx, (%eax)
239 ; CHECK-NEXT: leal -12(%ebp), %esp
240 ; CHECK-NEXT: popl %esi
241 ; CHECK-NEXT: popl %edi
242 ; CHECK-NEXT: popl %ebx
243 ; CHECK-NEXT: popl %ebp
244 ; CHECK-NEXT: retl $4
246 ; CHECK-X64-O0-LABEL: shift2:
247 ; CHECK-X64-O0: # %bb.0:
248 ; CHECK-X64-O0-NEXT: movq %rdi, %rax
249 ; CHECK-X64-O0-NEXT: movq $0, -{{[0-9]+}}(%rsp)
250 ; CHECK-X64-O0-NEXT: movq $0, -{{[0-9]+}}(%rsp)
251 ; CHECK-X64-O0-NEXT: movq $0, -{{[0-9]+}}(%rsp)
252 ; CHECK-X64-O0-NEXT: movq $1, -{{[0-9]+}}(%rsp)
253 ; CHECK-X64-O0-NEXT: movq $0, -{{[0-9]+}}(%rsp)
254 ; CHECK-X64-O0-NEXT: movq $0, -{{[0-9]+}}(%rsp)
255 ; CHECK-X64-O0-NEXT: movq $0, -{{[0-9]+}}(%rsp)
256 ; CHECK-X64-O0-NEXT: movq $0, -{{[0-9]+}}(%rsp)
257 ; CHECK-X64-O0-NEXT: movb %sil, %cl
258 ; CHECK-X64-O0-NEXT: movb %cl, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill
259 ; CHECK-X64-O0-NEXT: movb %cl, %dl
260 ; CHECK-X64-O0-NEXT: shrb $3, %dl
261 ; CHECK-X64-O0-NEXT: andb $24, %dl
262 ; CHECK-X64-O0-NEXT: negb %dl
263 ; CHECK-X64-O0-NEXT: movsbq %dl, %r8
264 ; CHECK-X64-O0-NEXT: movq -40(%rsp,%r8), %r9
265 ; CHECK-X64-O0-NEXT: movq -32(%rsp,%r8), %rdx
266 ; CHECK-X64-O0-NEXT: movq -24(%rsp,%r8), %r10
267 ; CHECK-X64-O0-NEXT: movq %r10, %rsi
268 ; CHECK-X64-O0-NEXT: shldq %cl, %rdx, %rsi
269 ; CHECK-X64-O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %cl # 1-byte Reload
270 ; CHECK-X64-O0-NEXT: movq -16(%rsp,%r8), %r8
271 ; CHECK-X64-O0-NEXT: shldq %cl, %r10, %r8
272 ; CHECK-X64-O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %cl # 1-byte Reload
273 ; CHECK-X64-O0-NEXT: movq %r9, %r10
274 ; CHECK-X64-O0-NEXT: shlq %cl, %r10
275 ; CHECK-X64-O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %cl # 1-byte Reload
276 ; CHECK-X64-O0-NEXT: movq %r10, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
277 ; CHECK-X64-O0-NEXT: shldq %cl, %r9, %rdx
278 ; CHECK-X64-O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload
279 ; CHECK-X64-O0-NEXT: movq %r8, 24(%rdi)
280 ; CHECK-X64-O0-NEXT: movq %rsi, 16(%rdi)
281 ; CHECK-X64-O0-NEXT: movq %rdx, 8(%rdi)
282 ; CHECK-X64-O0-NEXT: movq %rcx, (%rdi)
283 ; CHECK-X64-O0-NEXT: retq
285 ; CHECK-X64-O2-LABEL: shift2:
286 ; CHECK-X64-O2: # %bb.0:
287 ; CHECK-X64-O2-NEXT: movq %rsi, %rcx
288 ; CHECK-X64-O2-NEXT: movq %rdi, %rax
289 ; CHECK-X64-O2-NEXT: xorps %xmm0, %xmm0
290 ; CHECK-X64-O2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
291 ; CHECK-X64-O2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
292 ; CHECK-X64-O2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
293 ; CHECK-X64-O2-NEXT: movq $0, -{{[0-9]+}}(%rsp)
294 ; CHECK-X64-O2-NEXT: movq $1, -{{[0-9]+}}(%rsp)
295 ; CHECK-X64-O2-NEXT: movl %ecx, %edx
296 ; CHECK-X64-O2-NEXT: shrb $3, %dl
297 ; CHECK-X64-O2-NEXT: andb $24, %dl
298 ; CHECK-X64-O2-NEXT: negb %dl
299 ; CHECK-X64-O2-NEXT: movsbq %dl, %rdx
300 ; CHECK-X64-O2-NEXT: movq -40(%rsp,%rdx), %rsi
301 ; CHECK-X64-O2-NEXT: movq -32(%rsp,%rdx), %rdi
302 ; CHECK-X64-O2-NEXT: movq -24(%rsp,%rdx), %r8
303 ; CHECK-X64-O2-NEXT: movq %r8, %r9
304 ; CHECK-X64-O2-NEXT: shldq %cl, %rdi, %r9
305 ; CHECK-X64-O2-NEXT: movq -16(%rsp,%rdx), %rdx
306 ; CHECK-X64-O2-NEXT: shldq %cl, %r8, %rdx
307 ; CHECK-X64-O2-NEXT: movq %rsi, %r8
308 ; CHECK-X64-O2-NEXT: shlq %cl, %r8
309 ; CHECK-X64-O2-NEXT: # kill: def $cl killed $cl killed $rcx
310 ; CHECK-X64-O2-NEXT: shldq %cl, %rsi, %rdi
311 ; CHECK-X64-O2-NEXT: movq %rdx, 24(%rax)
312 ; CHECK-X64-O2-NEXT: movq %r9, 16(%rax)
313 ; CHECK-X64-O2-NEXT: movq %rdi, 8(%rax)
314 ; CHECK-X64-O2-NEXT: movq %r8, (%rax)
315 ; CHECK-X64-O2-NEXT: retq
317 %b = shl i256 1, %c ; %c must not be a constant
318 ; Special case when %c is 0:
321 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: