[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / srem-seteq-illegal-types.ll
blob2febbbdc4c16d00a8c0e06eb9b0f37fcdd2cafe6
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=i686-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=X86
3 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=X64
4 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 < %s | FileCheck %s --check-prefixes=X64,SSE2
5 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+sse4.1 < %s | FileCheck %s --check-prefixes=X64,SSE41
6 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx < %s | FileCheck %s --check-prefixes=X64,AVX1
7 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 < %s | FileCheck %s --check-prefixes=X64,AVX2
8 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512vl < %s | FileCheck %s --check-prefixes=X64,AVX512VL
10 define i1 @test_srem_odd(i29 %X) nounwind {
11 ; X86-LABEL: test_srem_odd:
12 ; X86:       # %bb.0:
13 ; X86-NEXT:    imull $526025035, {{[0-9]+}}(%esp), %eax # imm = 0x1F5A814B
14 ; X86-NEXT:    addl $2711469, %eax # imm = 0x295FAD
15 ; X86-NEXT:    andl $536870911, %eax # imm = 0x1FFFFFFF
16 ; X86-NEXT:    cmpl $5422939, %eax # imm = 0x52BF5B
17 ; X86-NEXT:    setb %al
18 ; X86-NEXT:    retl
20 ; X64-LABEL: test_srem_odd:
21 ; X64:       # %bb.0:
22 ; X64-NEXT:    imull $526025035, %edi, %eax # imm = 0x1F5A814B
23 ; X64-NEXT:    addl $2711469, %eax # imm = 0x295FAD
24 ; X64-NEXT:    andl $536870911, %eax # imm = 0x1FFFFFFF
25 ; X64-NEXT:    cmpl $5422939, %eax # imm = 0x52BF5B
26 ; X64-NEXT:    setb %al
27 ; X64-NEXT:    retq
28   %srem = srem i29 %X, 99
29   %cmp = icmp eq i29 %srem, 0
30   ret i1 %cmp
33 define i1 @test_srem_even(i4 %X) nounwind {
34 ; X86-LABEL: test_srem_even:
35 ; X86:       # %bb.0:
36 ; X86-NEXT:    movb {{[0-9]+}}(%esp), %al
37 ; X86-NEXT:    shlb $4, %al
38 ; X86-NEXT:    sarb $4, %al
39 ; X86-NEXT:    movsbl %al, %ecx
40 ; X86-NEXT:    imull $43, %ecx, %ecx
41 ; X86-NEXT:    movzwl %cx, %ecx
42 ; X86-NEXT:    movl %ecx, %edx
43 ; X86-NEXT:    shrl $15, %edx
44 ; X86-NEXT:    addb %ch, %dl
45 ; X86-NEXT:    movzbl %dl, %ecx
46 ; X86-NEXT:    addl %ecx, %ecx
47 ; X86-NEXT:    leal (%ecx,%ecx,2), %ecx
48 ; X86-NEXT:    subb %cl, %al
49 ; X86-NEXT:    cmpb $1, %al
50 ; X86-NEXT:    sete %al
51 ; X86-NEXT:    retl
53 ; X64-LABEL: test_srem_even:
54 ; X64:       # %bb.0:
55 ; X64-NEXT:    shlb $4, %dil
56 ; X64-NEXT:    sarb $4, %dil
57 ; X64-NEXT:    movsbl %dil, %eax
58 ; X64-NEXT:    imull $43, %eax, %ecx
59 ; X64-NEXT:    movzwl %cx, %ecx
60 ; X64-NEXT:    movl %ecx, %edx
61 ; X64-NEXT:    shrl $15, %edx
62 ; X64-NEXT:    shrl $8, %ecx
63 ; X64-NEXT:    addb %dl, %cl
64 ; X64-NEXT:    movzbl %cl, %ecx
65 ; X64-NEXT:    addl %ecx, %ecx
66 ; X64-NEXT:    leal (%rcx,%rcx,2), %ecx
67 ; X64-NEXT:    subb %cl, %al
68 ; X64-NEXT:    cmpb $1, %al
69 ; X64-NEXT:    sete %al
70 ; X64-NEXT:    retq
71   %srem = srem i4 %X, 6
72   %cmp = icmp eq i4 %srem, 1
73   ret i1 %cmp
76 define i1 @test_srem_pow2_setne(i6 %X) nounwind {
77 ; X86-LABEL: test_srem_pow2_setne:
78 ; X86:       # %bb.0:
79 ; X86-NEXT:    movb {{[0-9]+}}(%esp), %al
80 ; X86-NEXT:    movl %eax, %ecx
81 ; X86-NEXT:    shlb $2, %cl
82 ; X86-NEXT:    sarb $5, %cl
83 ; X86-NEXT:    shrb $4, %cl
84 ; X86-NEXT:    andb $3, %cl
85 ; X86-NEXT:    addb %al, %cl
86 ; X86-NEXT:    andb $60, %cl
87 ; X86-NEXT:    subb %cl, %al
88 ; X86-NEXT:    testb $63, %al
89 ; X86-NEXT:    setne %al
90 ; X86-NEXT:    retl
92 ; X64-LABEL: test_srem_pow2_setne:
93 ; X64:       # %bb.0:
94 ; X64-NEXT:    # kill: def $edi killed $edi def $rdi
95 ; X64-NEXT:    leal (,%rdi,4), %eax
96 ; X64-NEXT:    sarb $5, %al
97 ; X64-NEXT:    shrb $4, %al
98 ; X64-NEXT:    andb $3, %al
99 ; X64-NEXT:    addb %dil, %al
100 ; X64-NEXT:    andb $60, %al
101 ; X64-NEXT:    subb %al, %dil
102 ; X64-NEXT:    testb $63, %dil
103 ; X64-NEXT:    setne %al
104 ; X64-NEXT:    retq
105   %srem = srem i6 %X, 4
106   %cmp = icmp ne i6 %srem, 0
107   ret i1 %cmp
110 define <3 x i1> @test_srem_vec(<3 x i33> %X) nounwind {
111 ; X86-LABEL: test_srem_vec:
112 ; X86:       # %bb.0:
113 ; X86-NEXT:    pushl %ebp
114 ; X86-NEXT:    pushl %ebx
115 ; X86-NEXT:    pushl %edi
116 ; X86-NEXT:    pushl %esi
117 ; X86-NEXT:    subl $12, %esp
118 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
119 ; X86-NEXT:    andl $1, %edi
120 ; X86-NEXT:    negl %edi
121 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx
122 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp
123 ; X86-NEXT:    andl $1, %ebp
124 ; X86-NEXT:    negl %ebp
125 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
126 ; X86-NEXT:    andl $1, %eax
127 ; X86-NEXT:    negl %eax
128 ; X86-NEXT:    pushl $-1
129 ; X86-NEXT:    pushl $-9
130 ; X86-NEXT:    pushl %eax
131 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
132 ; X86-NEXT:    calll __moddi3
133 ; X86-NEXT:    addl $16, %esp
134 ; X86-NEXT:    movl %eax, %esi
135 ; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
136 ; X86-NEXT:    pushl $0
137 ; X86-NEXT:    pushl $9
138 ; X86-NEXT:    pushl %ebp
139 ; X86-NEXT:    pushl %ebx
140 ; X86-NEXT:    calll __moddi3
141 ; X86-NEXT:    addl $16, %esp
142 ; X86-NEXT:    movl %eax, %ebx
143 ; X86-NEXT:    movl %edx, %ebp
144 ; X86-NEXT:    notl %ebp
145 ; X86-NEXT:    pushl $0
146 ; X86-NEXT:    pushl $9
147 ; X86-NEXT:    pushl %edi
148 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
149 ; X86-NEXT:    calll __moddi3
150 ; X86-NEXT:    addl $16, %esp
151 ; X86-NEXT:    xorl $3, %eax
152 ; X86-NEXT:    orl %edx, %eax
153 ; X86-NEXT:    setne %al
154 ; X86-NEXT:    xorl $3, %esi
155 ; X86-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload
156 ; X86-NEXT:    setne %cl
157 ; X86-NEXT:    xorl $-3, %ebx
158 ; X86-NEXT:    andl $1, %ebp
159 ; X86-NEXT:    orl %ebx, %ebp
160 ; X86-NEXT:    setne %dl
161 ; X86-NEXT:    addl $12, %esp
162 ; X86-NEXT:    popl %esi
163 ; X86-NEXT:    popl %edi
164 ; X86-NEXT:    popl %ebx
165 ; X86-NEXT:    popl %ebp
166 ; X86-NEXT:    retl
168 ; SSE2-LABEL: test_srem_vec:
169 ; SSE2:       # %bb.0:
170 ; SSE2-NEXT:    movq %rdx, %rcx
171 ; SSE2-NEXT:    shlq $31, %rcx
172 ; SSE2-NEXT:    sarq $31, %rcx
173 ; SSE2-NEXT:    shlq $31, %rdi
174 ; SSE2-NEXT:    sarq $31, %rdi
175 ; SSE2-NEXT:    shlq $31, %rsi
176 ; SSE2-NEXT:    sarq $31, %rsi
177 ; SSE2-NEXT:    movabsq $2049638230412172402, %r8 # imm = 0x1C71C71C71C71C72
178 ; SSE2-NEXT:    movq %rsi, %rax
179 ; SSE2-NEXT:    imulq %r8
180 ; SSE2-NEXT:    movq %rdx, %rax
181 ; SSE2-NEXT:    shrq $63, %rax
182 ; SSE2-NEXT:    addq %rdx, %rax
183 ; SSE2-NEXT:    leaq (%rax,%rax,8), %rax
184 ; SSE2-NEXT:    subq %rax, %rsi
185 ; SSE2-NEXT:    movq %rsi, %xmm1
186 ; SSE2-NEXT:    movq %rdi, %rax
187 ; SSE2-NEXT:    imulq %r8
188 ; SSE2-NEXT:    movq %rdx, %rax
189 ; SSE2-NEXT:    shrq $63, %rax
190 ; SSE2-NEXT:    addq %rdx, %rax
191 ; SSE2-NEXT:    leaq (%rax,%rax,8), %rax
192 ; SSE2-NEXT:    subq %rax, %rdi
193 ; SSE2-NEXT:    movq %rdi, %xmm0
194 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
195 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [8589934591,8589934591]
196 ; SSE2-NEXT:    pand %xmm1, %xmm0
197 ; SSE2-NEXT:    movabsq $2049638230412172401, %rdx # imm = 0x1C71C71C71C71C71
198 ; SSE2-NEXT:    movq %rcx, %rax
199 ; SSE2-NEXT:    imulq %rdx
200 ; SSE2-NEXT:    subq %rcx, %rdx
201 ; SSE2-NEXT:    movq %rdx, %rax
202 ; SSE2-NEXT:    shrq $63, %rax
203 ; SSE2-NEXT:    sarq $3, %rdx
204 ; SSE2-NEXT:    addq %rax, %rdx
205 ; SSE2-NEXT:    leaq (%rdx,%rdx,8), %rax
206 ; SSE2-NEXT:    addq %rcx, %rax
207 ; SSE2-NEXT:    movq %rax, %xmm2
208 ; SSE2-NEXT:    pand %xmm1, %xmm2
209 ; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
210 ; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
211 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
212 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,3],xmm2[1,2]
213 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,3]
214 ; SSE2-NEXT:    andps %xmm1, %xmm0
215 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
216 ; SSE2-NEXT:    pxor %xmm0, %xmm1
217 ; SSE2-NEXT:    movdqa %xmm1, -{{[0-9]+}}(%rsp)
218 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %al
219 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %dl
220 ; SSE2-NEXT:    movb -{{[0-9]+}}(%rsp), %cl
221 ; SSE2-NEXT:    retq
223 ; SSE41-LABEL: test_srem_vec:
224 ; SSE41:       # %bb.0:
225 ; SSE41-NEXT:    movq %rdx, %rcx
226 ; SSE41-NEXT:    shlq $31, %rcx
227 ; SSE41-NEXT:    sarq $31, %rcx
228 ; SSE41-NEXT:    shlq $31, %rdi
229 ; SSE41-NEXT:    sarq $31, %rdi
230 ; SSE41-NEXT:    shlq $31, %rsi
231 ; SSE41-NEXT:    sarq $31, %rsi
232 ; SSE41-NEXT:    movabsq $2049638230412172402, %r8 # imm = 0x1C71C71C71C71C72
233 ; SSE41-NEXT:    movq %rsi, %rax
234 ; SSE41-NEXT:    imulq %r8
235 ; SSE41-NEXT:    movq %rdx, %rax
236 ; SSE41-NEXT:    shrq $63, %rax
237 ; SSE41-NEXT:    addq %rdx, %rax
238 ; SSE41-NEXT:    leaq (%rax,%rax,8), %rax
239 ; SSE41-NEXT:    subq %rax, %rsi
240 ; SSE41-NEXT:    movq %rsi, %xmm1
241 ; SSE41-NEXT:    movq %rdi, %rax
242 ; SSE41-NEXT:    imulq %r8
243 ; SSE41-NEXT:    movq %rdx, %rax
244 ; SSE41-NEXT:    shrq $63, %rax
245 ; SSE41-NEXT:    addq %rdx, %rax
246 ; SSE41-NEXT:    leaq (%rax,%rax,8), %rax
247 ; SSE41-NEXT:    subq %rax, %rdi
248 ; SSE41-NEXT:    movq %rdi, %xmm0
249 ; SSE41-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
250 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [8589934591,8589934591]
251 ; SSE41-NEXT:    pand %xmm1, %xmm0
252 ; SSE41-NEXT:    movabsq $2049638230412172401, %rdx # imm = 0x1C71C71C71C71C71
253 ; SSE41-NEXT:    movq %rcx, %rax
254 ; SSE41-NEXT:    imulq %rdx
255 ; SSE41-NEXT:    subq %rcx, %rdx
256 ; SSE41-NEXT:    movq %rdx, %rax
257 ; SSE41-NEXT:    shrq $63, %rax
258 ; SSE41-NEXT:    sarq $3, %rdx
259 ; SSE41-NEXT:    addq %rax, %rdx
260 ; SSE41-NEXT:    leaq (%rdx,%rdx,8), %rax
261 ; SSE41-NEXT:    addq %rcx, %rax
262 ; SSE41-NEXT:    movq %rax, %xmm2
263 ; SSE41-NEXT:    pand %xmm1, %xmm2
264 ; SSE41-NEXT:    pcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
265 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
266 ; SSE41-NEXT:    pxor %xmm1, %xmm0
267 ; SSE41-NEXT:    pcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
268 ; SSE41-NEXT:    pxor %xmm1, %xmm2
269 ; SSE41-NEXT:    pextrb $0, %xmm0, %eax
270 ; SSE41-NEXT:    pextrb $8, %xmm0, %edx
271 ; SSE41-NEXT:    pextrb $0, %xmm2, %ecx
272 ; SSE41-NEXT:    # kill: def $al killed $al killed $eax
273 ; SSE41-NEXT:    # kill: def $dl killed $dl killed $edx
274 ; SSE41-NEXT:    # kill: def $cl killed $cl killed $ecx
275 ; SSE41-NEXT:    retq
277 ; AVX1-LABEL: test_srem_vec:
278 ; AVX1:       # %bb.0:
279 ; AVX1-NEXT:    movq %rdx, %rcx
280 ; AVX1-NEXT:    shlq $31, %rcx
281 ; AVX1-NEXT:    sarq $31, %rcx
282 ; AVX1-NEXT:    shlq $31, %rdi
283 ; AVX1-NEXT:    sarq $31, %rdi
284 ; AVX1-NEXT:    shlq $31, %rsi
285 ; AVX1-NEXT:    sarq $31, %rsi
286 ; AVX1-NEXT:    movabsq $2049638230412172402, %r8 # imm = 0x1C71C71C71C71C72
287 ; AVX1-NEXT:    movq %rsi, %rax
288 ; AVX1-NEXT:    imulq %r8
289 ; AVX1-NEXT:    movq %rdx, %rax
290 ; AVX1-NEXT:    shrq $63, %rax
291 ; AVX1-NEXT:    addq %rdx, %rax
292 ; AVX1-NEXT:    leaq (%rax,%rax,8), %rax
293 ; AVX1-NEXT:    subq %rax, %rsi
294 ; AVX1-NEXT:    vmovq %rsi, %xmm0
295 ; AVX1-NEXT:    movq %rdi, %rax
296 ; AVX1-NEXT:    imulq %r8
297 ; AVX1-NEXT:    movq %rdx, %rax
298 ; AVX1-NEXT:    shrq $63, %rax
299 ; AVX1-NEXT:    addq %rdx, %rax
300 ; AVX1-NEXT:    leaq (%rax,%rax,8), %rax
301 ; AVX1-NEXT:    subq %rax, %rdi
302 ; AVX1-NEXT:    vmovq %rdi, %xmm1
303 ; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
304 ; AVX1-NEXT:    movabsq $2049638230412172401, %rdx # imm = 0x1C71C71C71C71C71
305 ; AVX1-NEXT:    movq %rcx, %rax
306 ; AVX1-NEXT:    imulq %rdx
307 ; AVX1-NEXT:    subq %rcx, %rdx
308 ; AVX1-NEXT:    movq %rdx, %rax
309 ; AVX1-NEXT:    shrq $63, %rax
310 ; AVX1-NEXT:    sarq $3, %rdx
311 ; AVX1-NEXT:    addq %rax, %rdx
312 ; AVX1-NEXT:    leaq (%rdx,%rdx,8), %rax
313 ; AVX1-NEXT:    addq %rcx, %rax
314 ; AVX1-NEXT:    vmovq %rax, %xmm1
315 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
316 ; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
317 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
318 ; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
319 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
320 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
321 ; AVX1-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
322 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
323 ; AVX1-NEXT:    vpextrb $0, %xmm0, %eax
324 ; AVX1-NEXT:    vpextrb $8, %xmm0, %edx
325 ; AVX1-NEXT:    vpextrb $0, %xmm1, %ecx
326 ; AVX1-NEXT:    # kill: def $al killed $al killed $eax
327 ; AVX1-NEXT:    # kill: def $dl killed $dl killed $edx
328 ; AVX1-NEXT:    # kill: def $cl killed $cl killed $ecx
329 ; AVX1-NEXT:    vzeroupper
330 ; AVX1-NEXT:    retq
332 ; AVX2-LABEL: test_srem_vec:
333 ; AVX2:       # %bb.0:
334 ; AVX2-NEXT:    movq %rdx, %rcx
335 ; AVX2-NEXT:    shlq $31, %rcx
336 ; AVX2-NEXT:    sarq $31, %rcx
337 ; AVX2-NEXT:    shlq $31, %rdi
338 ; AVX2-NEXT:    sarq $31, %rdi
339 ; AVX2-NEXT:    shlq $31, %rsi
340 ; AVX2-NEXT:    sarq $31, %rsi
341 ; AVX2-NEXT:    movabsq $2049638230412172402, %r8 # imm = 0x1C71C71C71C71C72
342 ; AVX2-NEXT:    movq %rsi, %rax
343 ; AVX2-NEXT:    imulq %r8
344 ; AVX2-NEXT:    movq %rdx, %rax
345 ; AVX2-NEXT:    shrq $63, %rax
346 ; AVX2-NEXT:    addq %rdx, %rax
347 ; AVX2-NEXT:    leaq (%rax,%rax,8), %rax
348 ; AVX2-NEXT:    subq %rax, %rsi
349 ; AVX2-NEXT:    vmovq %rsi, %xmm0
350 ; AVX2-NEXT:    movq %rdi, %rax
351 ; AVX2-NEXT:    imulq %r8
352 ; AVX2-NEXT:    movq %rdx, %rax
353 ; AVX2-NEXT:    shrq $63, %rax
354 ; AVX2-NEXT:    addq %rdx, %rax
355 ; AVX2-NEXT:    leaq (%rax,%rax,8), %rax
356 ; AVX2-NEXT:    subq %rax, %rdi
357 ; AVX2-NEXT:    vmovq %rdi, %xmm1
358 ; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
359 ; AVX2-NEXT:    movabsq $2049638230412172401, %rdx # imm = 0x1C71C71C71C71C71
360 ; AVX2-NEXT:    movq %rcx, %rax
361 ; AVX2-NEXT:    imulq %rdx
362 ; AVX2-NEXT:    subq %rcx, %rdx
363 ; AVX2-NEXT:    movq %rdx, %rax
364 ; AVX2-NEXT:    shrq $63, %rax
365 ; AVX2-NEXT:    sarq $3, %rdx
366 ; AVX2-NEXT:    addq %rax, %rdx
367 ; AVX2-NEXT:    leaq (%rdx,%rdx,8), %rax
368 ; AVX2-NEXT:    addq %rcx, %rax
369 ; AVX2-NEXT:    vmovq %rax, %xmm1
370 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
371 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [8589934591,8589934591,8589934591,8589934591]
372 ; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
373 ; AVX2-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
374 ; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
375 ; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
376 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
377 ; AVX2-NEXT:    vpextrb $0, %xmm0, %eax
378 ; AVX2-NEXT:    vpextrb $8, %xmm0, %edx
379 ; AVX2-NEXT:    vpextrb $0, %xmm1, %ecx
380 ; AVX2-NEXT:    # kill: def $al killed $al killed $eax
381 ; AVX2-NEXT:    # kill: def $dl killed $dl killed $edx
382 ; AVX2-NEXT:    # kill: def $cl killed $cl killed $ecx
383 ; AVX2-NEXT:    vzeroupper
384 ; AVX2-NEXT:    retq
386 ; AVX512VL-LABEL: test_srem_vec:
387 ; AVX512VL:       # %bb.0:
388 ; AVX512VL-NEXT:    movq %rdx, %rcx
389 ; AVX512VL-NEXT:    shlq $31, %rcx
390 ; AVX512VL-NEXT:    sarq $31, %rcx
391 ; AVX512VL-NEXT:    shlq $31, %rdi
392 ; AVX512VL-NEXT:    sarq $31, %rdi
393 ; AVX512VL-NEXT:    shlq $31, %rsi
394 ; AVX512VL-NEXT:    sarq $31, %rsi
395 ; AVX512VL-NEXT:    movabsq $2049638230412172402, %r8 # imm = 0x1C71C71C71C71C72
396 ; AVX512VL-NEXT:    movq %rsi, %rax
397 ; AVX512VL-NEXT:    imulq %r8
398 ; AVX512VL-NEXT:    movq %rdx, %rax
399 ; AVX512VL-NEXT:    shrq $63, %rax
400 ; AVX512VL-NEXT:    addq %rdx, %rax
401 ; AVX512VL-NEXT:    leaq (%rax,%rax,8), %rax
402 ; AVX512VL-NEXT:    subq %rax, %rsi
403 ; AVX512VL-NEXT:    vmovq %rsi, %xmm0
404 ; AVX512VL-NEXT:    movq %rdi, %rax
405 ; AVX512VL-NEXT:    imulq %r8
406 ; AVX512VL-NEXT:    movq %rdx, %rax
407 ; AVX512VL-NEXT:    shrq $63, %rax
408 ; AVX512VL-NEXT:    addq %rdx, %rax
409 ; AVX512VL-NEXT:    leaq (%rax,%rax,8), %rax
410 ; AVX512VL-NEXT:    subq %rax, %rdi
411 ; AVX512VL-NEXT:    vmovq %rdi, %xmm1
412 ; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
413 ; AVX512VL-NEXT:    movabsq $2049638230412172401, %rdx # imm = 0x1C71C71C71C71C71
414 ; AVX512VL-NEXT:    movq %rcx, %rax
415 ; AVX512VL-NEXT:    imulq %rdx
416 ; AVX512VL-NEXT:    subq %rcx, %rdx
417 ; AVX512VL-NEXT:    movq %rdx, %rax
418 ; AVX512VL-NEXT:    shrq $63, %rax
419 ; AVX512VL-NEXT:    sarq $3, %rdx
420 ; AVX512VL-NEXT:    addq %rax, %rdx
421 ; AVX512VL-NEXT:    leaq (%rdx,%rdx,8), %rax
422 ; AVX512VL-NEXT:    addq %rcx, %rax
423 ; AVX512VL-NEXT:    vmovq %rax, %xmm1
424 ; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
425 ; AVX512VL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0
426 ; AVX512VL-NEXT:    vpcmpneqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
427 ; AVX512VL-NEXT:    kshiftrw $1, %k0, %k1
428 ; AVX512VL-NEXT:    kmovw %k1, %edx
429 ; AVX512VL-NEXT:    kshiftrw $2, %k0, %k1
430 ; AVX512VL-NEXT:    kmovw %k1, %ecx
431 ; AVX512VL-NEXT:    kmovw %k0, %eax
432 ; AVX512VL-NEXT:    # kill: def $al killed $al killed $eax
433 ; AVX512VL-NEXT:    # kill: def $dl killed $dl killed $edx
434 ; AVX512VL-NEXT:    # kill: def $cl killed $cl killed $ecx
435 ; AVX512VL-NEXT:    vzeroupper
436 ; AVX512VL-NEXT:    retq
437   %srem = srem <3 x i33> %X, <i33 9, i33 9, i33 -9>
438   %cmp = icmp ne <3 x i33> %srem, <i33 3, i33 -3, i33 3>
439   ret <3 x i1> %cmp