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