Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / RISCV / srem-seteq-illegal-types.ll
blob457d0380ca8a83dffb06232bb1c53075c93aef5c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 < %s | FileCheck %s --check-prefixes=RV32
3 ; RUN: llc -mtriple=riscv64 < %s | FileCheck %s --check-prefixes=RV64
4 ; RUN: llc -mtriple=riscv32 -mattr=+m < %s | FileCheck %s --check-prefixes=RV32M
5 ; RUN: llc -mtriple=riscv64 -mattr=+m < %s | FileCheck %s --check-prefixes=RV64M
6 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v < %s | FileCheck %s --check-prefixes=RV32MV
7 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v < %s | FileCheck %s --check-prefixes=RV64MV
9 define i1 @test_srem_odd(i29 %X) nounwind {
10 ; RV32-LABEL: test_srem_odd:
11 ; RV32:       # %bb.0:
12 ; RV32-NEXT:    addi sp, sp, -16
13 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
14 ; RV32-NEXT:    lui a1, 128424
15 ; RV32-NEXT:    addi a1, a1, 331
16 ; RV32-NEXT:    call __mulsi3
17 ; RV32-NEXT:    lui a1, 662
18 ; RV32-NEXT:    addi a1, a1, -83
19 ; RV32-NEXT:    add a0, a0, a1
20 ; RV32-NEXT:    slli a0, a0, 3
21 ; RV32-NEXT:    srli a0, a0, 3
22 ; RV32-NEXT:    lui a1, 1324
23 ; RV32-NEXT:    addi a1, a1, -165
24 ; RV32-NEXT:    sltu a0, a0, a1
25 ; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
26 ; RV32-NEXT:    addi sp, sp, 16
27 ; RV32-NEXT:    ret
29 ; RV64-LABEL: test_srem_odd:
30 ; RV64:       # %bb.0:
31 ; RV64-NEXT:    addi sp, sp, -16
32 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
33 ; RV64-NEXT:    lui a1, 128424
34 ; RV64-NEXT:    addiw a1, a1, 331
35 ; RV64-NEXT:    call __muldi3
36 ; RV64-NEXT:    lui a1, 662
37 ; RV64-NEXT:    addi a1, a1, -83
38 ; RV64-NEXT:    add a0, a0, a1
39 ; RV64-NEXT:    slli a0, a0, 35
40 ; RV64-NEXT:    srli a0, a0, 35
41 ; RV64-NEXT:    lui a1, 1324
42 ; RV64-NEXT:    addiw a1, a1, -165
43 ; RV64-NEXT:    sltu a0, a0, a1
44 ; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
45 ; RV64-NEXT:    addi sp, sp, 16
46 ; RV64-NEXT:    ret
48 ; RV32M-LABEL: test_srem_odd:
49 ; RV32M:       # %bb.0:
50 ; RV32M-NEXT:    lui a1, 128424
51 ; RV32M-NEXT:    addi a1, a1, 331
52 ; RV32M-NEXT:    mul a0, a0, a1
53 ; RV32M-NEXT:    lui a1, 662
54 ; RV32M-NEXT:    addi a1, a1, -83
55 ; RV32M-NEXT:    add a0, a0, a1
56 ; RV32M-NEXT:    slli a0, a0, 3
57 ; RV32M-NEXT:    srli a0, a0, 3
58 ; RV32M-NEXT:    lui a1, 1324
59 ; RV32M-NEXT:    addi a1, a1, -165
60 ; RV32M-NEXT:    sltu a0, a0, a1
61 ; RV32M-NEXT:    ret
63 ; RV64M-LABEL: test_srem_odd:
64 ; RV64M:       # %bb.0:
65 ; RV64M-NEXT:    lui a1, 128424
66 ; RV64M-NEXT:    addi a1, a1, 331
67 ; RV64M-NEXT:    mul a0, a0, a1
68 ; RV64M-NEXT:    lui a1, 662
69 ; RV64M-NEXT:    addi a1, a1, -83
70 ; RV64M-NEXT:    add a0, a0, a1
71 ; RV64M-NEXT:    slli a0, a0, 35
72 ; RV64M-NEXT:    srli a0, a0, 35
73 ; RV64M-NEXT:    lui a1, 1324
74 ; RV64M-NEXT:    addiw a1, a1, -165
75 ; RV64M-NEXT:    sltu a0, a0, a1
76 ; RV64M-NEXT:    ret
78 ; RV32MV-LABEL: test_srem_odd:
79 ; RV32MV:       # %bb.0:
80 ; RV32MV-NEXT:    lui a1, 128424
81 ; RV32MV-NEXT:    addi a1, a1, 331
82 ; RV32MV-NEXT:    mul a0, a0, a1
83 ; RV32MV-NEXT:    lui a1, 662
84 ; RV32MV-NEXT:    addi a1, a1, -83
85 ; RV32MV-NEXT:    add a0, a0, a1
86 ; RV32MV-NEXT:    slli a0, a0, 3
87 ; RV32MV-NEXT:    srli a0, a0, 3
88 ; RV32MV-NEXT:    lui a1, 1324
89 ; RV32MV-NEXT:    addi a1, a1, -165
90 ; RV32MV-NEXT:    sltu a0, a0, a1
91 ; RV32MV-NEXT:    ret
93 ; RV64MV-LABEL: test_srem_odd:
94 ; RV64MV:       # %bb.0:
95 ; RV64MV-NEXT:    lui a1, 128424
96 ; RV64MV-NEXT:    addi a1, a1, 331
97 ; RV64MV-NEXT:    mul a0, a0, a1
98 ; RV64MV-NEXT:    lui a1, 662
99 ; RV64MV-NEXT:    addi a1, a1, -83
100 ; RV64MV-NEXT:    add a0, a0, a1
101 ; RV64MV-NEXT:    slli a0, a0, 35
102 ; RV64MV-NEXT:    srli a0, a0, 35
103 ; RV64MV-NEXT:    lui a1, 1324
104 ; RV64MV-NEXT:    addiw a1, a1, -165
105 ; RV64MV-NEXT:    sltu a0, a0, a1
106 ; RV64MV-NEXT:    ret
107   %srem = srem i29 %X, 99
108   %cmp = icmp eq i29 %srem, 0
109   ret i1 %cmp
112 define i1 @test_srem_even(i4 %X) nounwind {
113 ; RV32-LABEL: test_srem_even:
114 ; RV32:       # %bb.0:
115 ; RV32-NEXT:    addi sp, sp, -16
116 ; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
117 ; RV32-NEXT:    slli a0, a0, 28
118 ; RV32-NEXT:    srai a0, a0, 28
119 ; RV32-NEXT:    li a1, 6
120 ; RV32-NEXT:    call __modsi3
121 ; RV32-NEXT:    addi a0, a0, -1
122 ; RV32-NEXT:    seqz a0, a0
123 ; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
124 ; RV32-NEXT:    addi sp, sp, 16
125 ; RV32-NEXT:    ret
127 ; RV64-LABEL: test_srem_even:
128 ; RV64:       # %bb.0:
129 ; RV64-NEXT:    addi sp, sp, -16
130 ; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
131 ; RV64-NEXT:    slli a0, a0, 60
132 ; RV64-NEXT:    srai a0, a0, 60
133 ; RV64-NEXT:    li a1, 6
134 ; RV64-NEXT:    call __moddi3
135 ; RV64-NEXT:    addi a0, a0, -1
136 ; RV64-NEXT:    seqz a0, a0
137 ; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
138 ; RV64-NEXT:    addi sp, sp, 16
139 ; RV64-NEXT:    ret
141 ; RV32M-LABEL: test_srem_even:
142 ; RV32M:       # %bb.0:
143 ; RV32M-NEXT:    slli a1, a0, 28
144 ; RV32M-NEXT:    srai a1, a1, 28
145 ; RV32M-NEXT:    slli a2, a1, 1
146 ; RV32M-NEXT:    add a1, a2, a1
147 ; RV32M-NEXT:    srli a2, a1, 4
148 ; RV32M-NEXT:    slli a1, a1, 24
149 ; RV32M-NEXT:    srli a1, a1, 31
150 ; RV32M-NEXT:    add a1, a2, a1
151 ; RV32M-NEXT:    slli a2, a1, 3
152 ; RV32M-NEXT:    slli a1, a1, 1
153 ; RV32M-NEXT:    sub a1, a1, a2
154 ; RV32M-NEXT:    add a0, a0, a1
155 ; RV32M-NEXT:    andi a0, a0, 15
156 ; RV32M-NEXT:    addi a0, a0, -1
157 ; RV32M-NEXT:    seqz a0, a0
158 ; RV32M-NEXT:    ret
160 ; RV64M-LABEL: test_srem_even:
161 ; RV64M:       # %bb.0:
162 ; RV64M-NEXT:    slli a1, a0, 60
163 ; RV64M-NEXT:    srai a1, a1, 60
164 ; RV64M-NEXT:    slli a2, a1, 1
165 ; RV64M-NEXT:    add a1, a2, a1
166 ; RV64M-NEXT:    srli a2, a1, 4
167 ; RV64M-NEXT:    slli a1, a1, 56
168 ; RV64M-NEXT:    srli a1, a1, 63
169 ; RV64M-NEXT:    add a1, a2, a1
170 ; RV64M-NEXT:    slli a2, a1, 3
171 ; RV64M-NEXT:    slli a1, a1, 1
172 ; RV64M-NEXT:    subw a1, a1, a2
173 ; RV64M-NEXT:    add a0, a0, a1
174 ; RV64M-NEXT:    andi a0, a0, 15
175 ; RV64M-NEXT:    addi a0, a0, -1
176 ; RV64M-NEXT:    seqz a0, a0
177 ; RV64M-NEXT:    ret
179 ; RV32MV-LABEL: test_srem_even:
180 ; RV32MV:       # %bb.0:
181 ; RV32MV-NEXT:    slli a1, a0, 28
182 ; RV32MV-NEXT:    srai a1, a1, 28
183 ; RV32MV-NEXT:    slli a2, a1, 1
184 ; RV32MV-NEXT:    add a1, a2, a1
185 ; RV32MV-NEXT:    srli a2, a1, 4
186 ; RV32MV-NEXT:    slli a1, a1, 24
187 ; RV32MV-NEXT:    srli a1, a1, 31
188 ; RV32MV-NEXT:    add a1, a2, a1
189 ; RV32MV-NEXT:    slli a2, a1, 3
190 ; RV32MV-NEXT:    slli a1, a1, 1
191 ; RV32MV-NEXT:    sub a1, a1, a2
192 ; RV32MV-NEXT:    add a0, a0, a1
193 ; RV32MV-NEXT:    andi a0, a0, 15
194 ; RV32MV-NEXT:    addi a0, a0, -1
195 ; RV32MV-NEXT:    seqz a0, a0
196 ; RV32MV-NEXT:    ret
198 ; RV64MV-LABEL: test_srem_even:
199 ; RV64MV:       # %bb.0:
200 ; RV64MV-NEXT:    slli a1, a0, 60
201 ; RV64MV-NEXT:    srai a1, a1, 60
202 ; RV64MV-NEXT:    slli a2, a1, 1
203 ; RV64MV-NEXT:    add a1, a2, a1
204 ; RV64MV-NEXT:    srli a2, a1, 4
205 ; RV64MV-NEXT:    slli a1, a1, 56
206 ; RV64MV-NEXT:    srli a1, a1, 63
207 ; RV64MV-NEXT:    add a1, a2, a1
208 ; RV64MV-NEXT:    slli a2, a1, 3
209 ; RV64MV-NEXT:    slli a1, a1, 1
210 ; RV64MV-NEXT:    subw a1, a1, a2
211 ; RV64MV-NEXT:    add a0, a0, a1
212 ; RV64MV-NEXT:    andi a0, a0, 15
213 ; RV64MV-NEXT:    addi a0, a0, -1
214 ; RV64MV-NEXT:    seqz a0, a0
215 ; RV64MV-NEXT:    ret
216   %srem = srem i4 %X, 6
217   %cmp = icmp eq i4 %srem, 1
218   ret i1 %cmp
221 define i1 @test_srem_pow2_setne(i6 %X) nounwind {
222 ; RV32-LABEL: test_srem_pow2_setne:
223 ; RV32:       # %bb.0:
224 ; RV32-NEXT:    slli a1, a0, 26
225 ; RV32-NEXT:    srai a1, a1, 26
226 ; RV32-NEXT:    slli a1, a1, 21
227 ; RV32-NEXT:    srli a1, a1, 30
228 ; RV32-NEXT:    add a1, a0, a1
229 ; RV32-NEXT:    andi a1, a1, 60
230 ; RV32-NEXT:    sub a0, a0, a1
231 ; RV32-NEXT:    andi a0, a0, 63
232 ; RV32-NEXT:    snez a0, a0
233 ; RV32-NEXT:    ret
235 ; RV64-LABEL: test_srem_pow2_setne:
236 ; RV64:       # %bb.0:
237 ; RV64-NEXT:    slli a1, a0, 58
238 ; RV64-NEXT:    srai a1, a1, 58
239 ; RV64-NEXT:    slli a1, a1, 53
240 ; RV64-NEXT:    srli a1, a1, 62
241 ; RV64-NEXT:    add a1, a0, a1
242 ; RV64-NEXT:    andi a1, a1, 60
243 ; RV64-NEXT:    subw a0, a0, a1
244 ; RV64-NEXT:    andi a0, a0, 63
245 ; RV64-NEXT:    snez a0, a0
246 ; RV64-NEXT:    ret
248 ; RV32M-LABEL: test_srem_pow2_setne:
249 ; RV32M:       # %bb.0:
250 ; RV32M-NEXT:    slli a1, a0, 26
251 ; RV32M-NEXT:    srai a1, a1, 26
252 ; RV32M-NEXT:    slli a1, a1, 21
253 ; RV32M-NEXT:    srli a1, a1, 30
254 ; RV32M-NEXT:    add a1, a0, a1
255 ; RV32M-NEXT:    andi a1, a1, 60
256 ; RV32M-NEXT:    sub a0, a0, a1
257 ; RV32M-NEXT:    andi a0, a0, 63
258 ; RV32M-NEXT:    snez a0, a0
259 ; RV32M-NEXT:    ret
261 ; RV64M-LABEL: test_srem_pow2_setne:
262 ; RV64M:       # %bb.0:
263 ; RV64M-NEXT:    slli a1, a0, 58
264 ; RV64M-NEXT:    srai a1, a1, 58
265 ; RV64M-NEXT:    slli a1, a1, 53
266 ; RV64M-NEXT:    srli a1, a1, 62
267 ; RV64M-NEXT:    add a1, a0, a1
268 ; RV64M-NEXT:    andi a1, a1, 60
269 ; RV64M-NEXT:    subw a0, a0, a1
270 ; RV64M-NEXT:    andi a0, a0, 63
271 ; RV64M-NEXT:    snez a0, a0
272 ; RV64M-NEXT:    ret
274 ; RV32MV-LABEL: test_srem_pow2_setne:
275 ; RV32MV:       # %bb.0:
276 ; RV32MV-NEXT:    slli a1, a0, 26
277 ; RV32MV-NEXT:    srai a1, a1, 26
278 ; RV32MV-NEXT:    slli a1, a1, 21
279 ; RV32MV-NEXT:    srli a1, a1, 30
280 ; RV32MV-NEXT:    add a1, a0, a1
281 ; RV32MV-NEXT:    andi a1, a1, 60
282 ; RV32MV-NEXT:    sub a0, a0, a1
283 ; RV32MV-NEXT:    andi a0, a0, 63
284 ; RV32MV-NEXT:    snez a0, a0
285 ; RV32MV-NEXT:    ret
287 ; RV64MV-LABEL: test_srem_pow2_setne:
288 ; RV64MV:       # %bb.0:
289 ; RV64MV-NEXT:    slli a1, a0, 58
290 ; RV64MV-NEXT:    srai a1, a1, 58
291 ; RV64MV-NEXT:    slli a1, a1, 53
292 ; RV64MV-NEXT:    srli a1, a1, 62
293 ; RV64MV-NEXT:    add a1, a0, a1
294 ; RV64MV-NEXT:    andi a1, a1, 60
295 ; RV64MV-NEXT:    subw a0, a0, a1
296 ; RV64MV-NEXT:    andi a0, a0, 63
297 ; RV64MV-NEXT:    snez a0, a0
298 ; RV64MV-NEXT:    ret
299   %srem = srem i6 %X, 4
300   %cmp = icmp ne i6 %srem, 0
301   ret i1 %cmp
304 define void @test_srem_vec(ptr %X) nounwind {
305 ; RV32-LABEL: test_srem_vec:
306 ; RV32:       # %bb.0:
307 ; RV32-NEXT:    addi sp, sp, -32
308 ; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
309 ; RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
310 ; RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
311 ; RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
312 ; RV32-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
313 ; RV32-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
314 ; RV32-NEXT:    sw s5, 4(sp) # 4-byte Folded Spill
315 ; RV32-NEXT:    sw s6, 0(sp) # 4-byte Folded Spill
316 ; RV32-NEXT:    mv s0, a0
317 ; RV32-NEXT:    lbu a0, 12(a0)
318 ; RV32-NEXT:    lw a1, 8(s0)
319 ; RV32-NEXT:    slli a2, a0, 30
320 ; RV32-NEXT:    lw a3, 4(s0)
321 ; RV32-NEXT:    srli s1, a1, 2
322 ; RV32-NEXT:    or s1, s1, a2
323 ; RV32-NEXT:    slli a2, a1, 31
324 ; RV32-NEXT:    srli a4, a3, 1
325 ; RV32-NEXT:    or s2, a4, a2
326 ; RV32-NEXT:    srli a0, a0, 2
327 ; RV32-NEXT:    slli a0, a0, 31
328 ; RV32-NEXT:    srai s3, a0, 31
329 ; RV32-NEXT:    srli a1, a1, 1
330 ; RV32-NEXT:    slli a1, a1, 31
331 ; RV32-NEXT:    lw a0, 0(s0)
332 ; RV32-NEXT:    srai s4, a1, 31
333 ; RV32-NEXT:    slli a1, a3, 31
334 ; RV32-NEXT:    srai a1, a1, 31
335 ; RV32-NEXT:    li a2, 6
336 ; RV32-NEXT:    li a3, 0
337 ; RV32-NEXT:    call __moddi3
338 ; RV32-NEXT:    mv s5, a0
339 ; RV32-NEXT:    mv s6, a1
340 ; RV32-NEXT:    li a2, 7
341 ; RV32-NEXT:    mv a0, s2
342 ; RV32-NEXT:    mv a1, s4
343 ; RV32-NEXT:    li a3, 0
344 ; RV32-NEXT:    call __moddi3
345 ; RV32-NEXT:    mv s2, a0
346 ; RV32-NEXT:    mv s4, a1
347 ; RV32-NEXT:    li a2, -5
348 ; RV32-NEXT:    li a3, -1
349 ; RV32-NEXT:    mv a0, s1
350 ; RV32-NEXT:    mv a1, s3
351 ; RV32-NEXT:    call __moddi3
352 ; RV32-NEXT:    or a2, s5, s6
353 ; RV32-NEXT:    snez a2, a2
354 ; RV32-NEXT:    xori a0, a0, 2
355 ; RV32-NEXT:    or a0, a0, a1
356 ; RV32-NEXT:    seqz a0, a0
357 ; RV32-NEXT:    xori a1, s2, 1
358 ; RV32-NEXT:    or a1, a1, s4
359 ; RV32-NEXT:    seqz a1, a1
360 ; RV32-NEXT:    neg a3, a2
361 ; RV32-NEXT:    addi a1, a1, -1
362 ; RV32-NEXT:    addi a0, a0, -1
363 ; RV32-NEXT:    sw a3, 0(s0)
364 ; RV32-NEXT:    andi a3, a0, 7
365 ; RV32-NEXT:    sb a3, 12(s0)
366 ; RV32-NEXT:    slli a3, a1, 1
367 ; RV32-NEXT:    or a2, a3, a2
368 ; RV32-NEXT:    sw a2, 4(s0)
369 ; RV32-NEXT:    srli a2, a1, 31
370 ; RV32-NEXT:    andi a1, a1, 1
371 ; RV32-NEXT:    slli a1, a1, 1
372 ; RV32-NEXT:    slli a0, a0, 2
373 ; RV32-NEXT:    or a0, a2, a0
374 ; RV32-NEXT:    or a0, a0, a1
375 ; RV32-NEXT:    sw a0, 8(s0)
376 ; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
377 ; RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
378 ; RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
379 ; RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
380 ; RV32-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
381 ; RV32-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
382 ; RV32-NEXT:    lw s5, 4(sp) # 4-byte Folded Reload
383 ; RV32-NEXT:    lw s6, 0(sp) # 4-byte Folded Reload
384 ; RV32-NEXT:    addi sp, sp, 32
385 ; RV32-NEXT:    ret
387 ; RV64-LABEL: test_srem_vec:
388 ; RV64:       # %bb.0:
389 ; RV64-NEXT:    addi sp, sp, -48
390 ; RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
391 ; RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
392 ; RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
393 ; RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
394 ; RV64-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill
395 ; RV64-NEXT:    mv s0, a0
396 ; RV64-NEXT:    lbu a0, 12(a0)
397 ; RV64-NEXT:    lwu a1, 8(s0)
398 ; RV64-NEXT:    slli a0, a0, 32
399 ; RV64-NEXT:    ld a2, 0(s0)
400 ; RV64-NEXT:    or a0, a1, a0
401 ; RV64-NEXT:    slli a0, a0, 29
402 ; RV64-NEXT:    srai s1, a0, 31
403 ; RV64-NEXT:    srli a0, a2, 2
404 ; RV64-NEXT:    slli a1, a1, 62
405 ; RV64-NEXT:    or a0, a1, a0
406 ; RV64-NEXT:    srai a0, a0, 31
407 ; RV64-NEXT:    slli a2, a2, 31
408 ; RV64-NEXT:    srai s2, a2, 31
409 ; RV64-NEXT:    li a1, 7
410 ; RV64-NEXT:    call __moddi3
411 ; RV64-NEXT:    mv s3, a0
412 ; RV64-NEXT:    li a1, -5
413 ; RV64-NEXT:    mv a0, s1
414 ; RV64-NEXT:    call __moddi3
415 ; RV64-NEXT:    mv s1, a0
416 ; RV64-NEXT:    lui a0, 699051
417 ; RV64-NEXT:    addiw a1, a0, -1365
418 ; RV64-NEXT:    slli a0, a1, 32
419 ; RV64-NEXT:    add a1, a1, a0
420 ; RV64-NEXT:    mv a0, s2
421 ; RV64-NEXT:    call __muldi3
422 ; RV64-NEXT:    lui a1, %hi(.LCPI3_0)
423 ; RV64-NEXT:    ld a1, %lo(.LCPI3_0)(a1)
424 ; RV64-NEXT:    add a0, a0, a1
425 ; RV64-NEXT:    slli a2, a0, 63
426 ; RV64-NEXT:    srli a0, a0, 1
427 ; RV64-NEXT:    or a0, a0, a2
428 ; RV64-NEXT:    sltu a0, a1, a0
429 ; RV64-NEXT:    addi s1, s1, -2
430 ; RV64-NEXT:    seqz a1, s1
431 ; RV64-NEXT:    addi s3, s3, -1
432 ; RV64-NEXT:    seqz a2, s3
433 ; RV64-NEXT:    neg a0, a0
434 ; RV64-NEXT:    addi a2, a2, -1
435 ; RV64-NEXT:    addi a1, a1, -1
436 ; RV64-NEXT:    slli a3, a1, 2
437 ; RV64-NEXT:    slli a4, a2, 31
438 ; RV64-NEXT:    srli a4, a4, 62
439 ; RV64-NEXT:    or a3, a4, a3
440 ; RV64-NEXT:    sw a3, 8(s0)
441 ; RV64-NEXT:    slli a1, a1, 29
442 ; RV64-NEXT:    srli a1, a1, 61
443 ; RV64-NEXT:    sb a1, 12(s0)
444 ; RV64-NEXT:    slli a0, a0, 31
445 ; RV64-NEXT:    srli a0, a0, 31
446 ; RV64-NEXT:    slli a2, a2, 33
447 ; RV64-NEXT:    or a0, a0, a2
448 ; RV64-NEXT:    sd a0, 0(s0)
449 ; RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
450 ; RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
451 ; RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
452 ; RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
453 ; RV64-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload
454 ; RV64-NEXT:    addi sp, sp, 48
455 ; RV64-NEXT:    ret
457 ; RV32M-LABEL: test_srem_vec:
458 ; RV32M:       # %bb.0:
459 ; RV32M-NEXT:    addi sp, sp, -32
460 ; RV32M-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
461 ; RV32M-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
462 ; RV32M-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
463 ; RV32M-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
464 ; RV32M-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
465 ; RV32M-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
466 ; RV32M-NEXT:    sw s5, 4(sp) # 4-byte Folded Spill
467 ; RV32M-NEXT:    sw s6, 0(sp) # 4-byte Folded Spill
468 ; RV32M-NEXT:    mv s0, a0
469 ; RV32M-NEXT:    lbu a0, 12(a0)
470 ; RV32M-NEXT:    lw a1, 8(s0)
471 ; RV32M-NEXT:    slli a2, a0, 30
472 ; RV32M-NEXT:    lw a3, 4(s0)
473 ; RV32M-NEXT:    srli s1, a1, 2
474 ; RV32M-NEXT:    or s1, s1, a2
475 ; RV32M-NEXT:    slli a2, a1, 31
476 ; RV32M-NEXT:    srli a4, a3, 1
477 ; RV32M-NEXT:    or s2, a4, a2
478 ; RV32M-NEXT:    srli a0, a0, 2
479 ; RV32M-NEXT:    slli a0, a0, 31
480 ; RV32M-NEXT:    srai s3, a0, 31
481 ; RV32M-NEXT:    srli a1, a1, 1
482 ; RV32M-NEXT:    slli a1, a1, 31
483 ; RV32M-NEXT:    lw a0, 0(s0)
484 ; RV32M-NEXT:    srai s4, a1, 31
485 ; RV32M-NEXT:    slli a1, a3, 31
486 ; RV32M-NEXT:    srai a1, a1, 31
487 ; RV32M-NEXT:    li a2, 6
488 ; RV32M-NEXT:    li a3, 0
489 ; RV32M-NEXT:    call __moddi3
490 ; RV32M-NEXT:    mv s5, a0
491 ; RV32M-NEXT:    mv s6, a1
492 ; RV32M-NEXT:    li a2, 7
493 ; RV32M-NEXT:    mv a0, s2
494 ; RV32M-NEXT:    mv a1, s4
495 ; RV32M-NEXT:    li a3, 0
496 ; RV32M-NEXT:    call __moddi3
497 ; RV32M-NEXT:    mv s2, a0
498 ; RV32M-NEXT:    mv s4, a1
499 ; RV32M-NEXT:    li a2, -5
500 ; RV32M-NEXT:    li a3, -1
501 ; RV32M-NEXT:    mv a0, s1
502 ; RV32M-NEXT:    mv a1, s3
503 ; RV32M-NEXT:    call __moddi3
504 ; RV32M-NEXT:    or a2, s5, s6
505 ; RV32M-NEXT:    snez a2, a2
506 ; RV32M-NEXT:    xori a0, a0, 2
507 ; RV32M-NEXT:    or a0, a0, a1
508 ; RV32M-NEXT:    seqz a0, a0
509 ; RV32M-NEXT:    xori a1, s2, 1
510 ; RV32M-NEXT:    or a1, a1, s4
511 ; RV32M-NEXT:    seqz a1, a1
512 ; RV32M-NEXT:    neg a3, a2
513 ; RV32M-NEXT:    addi a1, a1, -1
514 ; RV32M-NEXT:    addi a0, a0, -1
515 ; RV32M-NEXT:    sw a3, 0(s0)
516 ; RV32M-NEXT:    andi a3, a0, 7
517 ; RV32M-NEXT:    sb a3, 12(s0)
518 ; RV32M-NEXT:    slli a3, a1, 1
519 ; RV32M-NEXT:    or a2, a3, a2
520 ; RV32M-NEXT:    sw a2, 4(s0)
521 ; RV32M-NEXT:    srli a2, a1, 31
522 ; RV32M-NEXT:    andi a1, a1, 1
523 ; RV32M-NEXT:    slli a1, a1, 1
524 ; RV32M-NEXT:    slli a0, a0, 2
525 ; RV32M-NEXT:    or a0, a2, a0
526 ; RV32M-NEXT:    or a0, a0, a1
527 ; RV32M-NEXT:    sw a0, 8(s0)
528 ; RV32M-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
529 ; RV32M-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
530 ; RV32M-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
531 ; RV32M-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
532 ; RV32M-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
533 ; RV32M-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
534 ; RV32M-NEXT:    lw s5, 4(sp) # 4-byte Folded Reload
535 ; RV32M-NEXT:    lw s6, 0(sp) # 4-byte Folded Reload
536 ; RV32M-NEXT:    addi sp, sp, 32
537 ; RV32M-NEXT:    ret
539 ; RV64M-LABEL: test_srem_vec:
540 ; RV64M:       # %bb.0:
541 ; RV64M-NEXT:    ld a1, 0(a0)
542 ; RV64M-NEXT:    lwu a2, 8(a0)
543 ; RV64M-NEXT:    srli a3, a1, 2
544 ; RV64M-NEXT:    lbu a4, 12(a0)
545 ; RV64M-NEXT:    slli a5, a2, 62
546 ; RV64M-NEXT:    or a3, a5, a3
547 ; RV64M-NEXT:    srai a3, a3, 31
548 ; RV64M-NEXT:    slli a4, a4, 32
549 ; RV64M-NEXT:    or a2, a2, a4
550 ; RV64M-NEXT:    slli a2, a2, 29
551 ; RV64M-NEXT:    lui a4, %hi(.LCPI3_0)
552 ; RV64M-NEXT:    ld a4, %lo(.LCPI3_0)(a4)
553 ; RV64M-NEXT:    srai a2, a2, 31
554 ; RV64M-NEXT:    slli a1, a1, 31
555 ; RV64M-NEXT:    srai a1, a1, 31
556 ; RV64M-NEXT:    mulh a4, a2, a4
557 ; RV64M-NEXT:    srli a5, a4, 63
558 ; RV64M-NEXT:    srai a4, a4, 1
559 ; RV64M-NEXT:    add a4, a4, a5
560 ; RV64M-NEXT:    lui a5, %hi(.LCPI3_1)
561 ; RV64M-NEXT:    ld a5, %lo(.LCPI3_1)(a5)
562 ; RV64M-NEXT:    add a2, a2, a4
563 ; RV64M-NEXT:    slli a4, a4, 2
564 ; RV64M-NEXT:    add a2, a2, a4
565 ; RV64M-NEXT:    mulh a4, a3, a5
566 ; RV64M-NEXT:    srli a5, a4, 63
567 ; RV64M-NEXT:    srai a4, a4, 1
568 ; RV64M-NEXT:    add a4, a4, a5
569 ; RV64M-NEXT:    slli a5, a4, 3
570 ; RV64M-NEXT:    add a3, a3, a4
571 ; RV64M-NEXT:    sub a3, a3, a5
572 ; RV64M-NEXT:    addi a3, a3, -1
573 ; RV64M-NEXT:    seqz a3, a3
574 ; RV64M-NEXT:    lui a4, 699051
575 ; RV64M-NEXT:    addiw a4, a4, -1365
576 ; RV64M-NEXT:    slli a5, a4, 32
577 ; RV64M-NEXT:    add a4, a4, a5
578 ; RV64M-NEXT:    lui a5, %hi(.LCPI3_2)
579 ; RV64M-NEXT:    ld a5, %lo(.LCPI3_2)(a5)
580 ; RV64M-NEXT:    addi a2, a2, -2
581 ; RV64M-NEXT:    seqz a2, a2
582 ; RV64M-NEXT:    mul a1, a1, a4
583 ; RV64M-NEXT:    add a1, a1, a5
584 ; RV64M-NEXT:    slli a4, a1, 63
585 ; RV64M-NEXT:    srli a1, a1, 1
586 ; RV64M-NEXT:    or a1, a1, a4
587 ; RV64M-NEXT:    sltu a1, a5, a1
588 ; RV64M-NEXT:    addi a2, a2, -1
589 ; RV64M-NEXT:    addi a3, a3, -1
590 ; RV64M-NEXT:    neg a1, a1
591 ; RV64M-NEXT:    slli a4, a3, 33
592 ; RV64M-NEXT:    slli a1, a1, 31
593 ; RV64M-NEXT:    srli a1, a1, 31
594 ; RV64M-NEXT:    or a1, a1, a4
595 ; RV64M-NEXT:    sd a1, 0(a0)
596 ; RV64M-NEXT:    slli a1, a2, 2
597 ; RV64M-NEXT:    slli a3, a3, 31
598 ; RV64M-NEXT:    srli a3, a3, 62
599 ; RV64M-NEXT:    or a1, a3, a1
600 ; RV64M-NEXT:    sw a1, 8(a0)
601 ; RV64M-NEXT:    slli a2, a2, 29
602 ; RV64M-NEXT:    srli a2, a2, 61
603 ; RV64M-NEXT:    sb a2, 12(a0)
604 ; RV64M-NEXT:    ret
606 ; RV32MV-LABEL: test_srem_vec:
607 ; RV32MV:       # %bb.0:
608 ; RV32MV-NEXT:    addi sp, sp, -48
609 ; RV32MV-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
610 ; RV32MV-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
611 ; RV32MV-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
612 ; RV32MV-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
613 ; RV32MV-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
614 ; RV32MV-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
615 ; RV32MV-NEXT:    csrr a1, vlenb
616 ; RV32MV-NEXT:    slli a1, a1, 1
617 ; RV32MV-NEXT:    sub sp, sp, a1
618 ; RV32MV-NEXT:    mv s0, a0
619 ; RV32MV-NEXT:    lbu a0, 12(a0)
620 ; RV32MV-NEXT:    lw a1, 8(s0)
621 ; RV32MV-NEXT:    slli a2, a0, 30
622 ; RV32MV-NEXT:    lw a3, 4(s0)
623 ; RV32MV-NEXT:    srli s1, a1, 2
624 ; RV32MV-NEXT:    or s1, s1, a2
625 ; RV32MV-NEXT:    slli a2, a1, 31
626 ; RV32MV-NEXT:    srli a4, a3, 1
627 ; RV32MV-NEXT:    or s2, a4, a2
628 ; RV32MV-NEXT:    srli a0, a0, 2
629 ; RV32MV-NEXT:    slli a0, a0, 31
630 ; RV32MV-NEXT:    srai s3, a0, 31
631 ; RV32MV-NEXT:    srli a1, a1, 1
632 ; RV32MV-NEXT:    slli a1, a1, 31
633 ; RV32MV-NEXT:    lw a0, 0(s0)
634 ; RV32MV-NEXT:    srai s4, a1, 31
635 ; RV32MV-NEXT:    slli a1, a3, 31
636 ; RV32MV-NEXT:    srai a1, a1, 31
637 ; RV32MV-NEXT:    li a2, 6
638 ; RV32MV-NEXT:    li a3, 0
639 ; RV32MV-NEXT:    call __moddi3
640 ; RV32MV-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
641 ; RV32MV-NEXT:    vmv.v.x v8, a0
642 ; RV32MV-NEXT:    vslide1down.vx v8, v8, a1
643 ; RV32MV-NEXT:    addi a0, sp, 16
644 ; RV32MV-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
645 ; RV32MV-NEXT:    li a2, 7
646 ; RV32MV-NEXT:    mv a0, s2
647 ; RV32MV-NEXT:    mv a1, s4
648 ; RV32MV-NEXT:    li a3, 0
649 ; RV32MV-NEXT:    call __moddi3
650 ; RV32MV-NEXT:    addi a2, sp, 16
651 ; RV32MV-NEXT:    vl2r.v v8, (a2) # Unknown-size Folded Reload
652 ; RV32MV-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
653 ; RV32MV-NEXT:    vslide1down.vx v8, v8, a0
654 ; RV32MV-NEXT:    vslide1down.vx v8, v8, a1
655 ; RV32MV-NEXT:    addi a0, sp, 16
656 ; RV32MV-NEXT:    vs2r.v v8, (a0) # Unknown-size Folded Spill
657 ; RV32MV-NEXT:    li a2, -5
658 ; RV32MV-NEXT:    li a3, -1
659 ; RV32MV-NEXT:    mv a0, s1
660 ; RV32MV-NEXT:    mv a1, s3
661 ; RV32MV-NEXT:    call __moddi3
662 ; RV32MV-NEXT:    addi a2, sp, 16
663 ; RV32MV-NEXT:    vl2r.v v8, (a2) # Unknown-size Folded Reload
664 ; RV32MV-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
665 ; RV32MV-NEXT:    vslide1down.vx v8, v8, a0
666 ; RV32MV-NEXT:    vslide1down.vx v8, v8, a1
667 ; RV32MV-NEXT:    vslidedown.vi v8, v8, 2
668 ; RV32MV-NEXT:    li a0, 511
669 ; RV32MV-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
670 ; RV32MV-NEXT:    vmv.v.x v10, a0
671 ; RV32MV-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
672 ; RV32MV-NEXT:    vsext.vf4 v12, v10
673 ; RV32MV-NEXT:    vand.vv v8, v8, v12
674 ; RV32MV-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
675 ; RV32MV-NEXT:    vmv.v.i v10, 1
676 ; RV32MV-NEXT:    vmv.v.i v11, 0
677 ; RV32MV-NEXT:    vsetivli zero, 3, e8, mf2, tu, ma
678 ; RV32MV-NEXT:    vslideup.vi v11, v10, 2
679 ; RV32MV-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
680 ; RV32MV-NEXT:    vmv.v.i v10, 2
681 ; RV32MV-NEXT:    vsetivli zero, 5, e8, mf2, tu, ma
682 ; RV32MV-NEXT:    vslideup.vi v11, v10, 4
683 ; RV32MV-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
684 ; RV32MV-NEXT:    vsext.vf4 v12, v11
685 ; RV32MV-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
686 ; RV32MV-NEXT:    vmsne.vv v0, v8, v12
687 ; RV32MV-NEXT:    vmv.v.i v8, 0
688 ; RV32MV-NEXT:    vmerge.vim v8, v8, -1, v0
689 ; RV32MV-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
690 ; RV32MV-NEXT:    vse32.v v8, (s0)
691 ; RV32MV-NEXT:    vslidedown.vi v10, v8, 1
692 ; RV32MV-NEXT:    vmv.x.s a0, v10
693 ; RV32MV-NEXT:    vslidedown.vi v10, v8, 2
694 ; RV32MV-NEXT:    vmv.x.s a1, v10
695 ; RV32MV-NEXT:    slli a2, a1, 1
696 ; RV32MV-NEXT:    sub a2, a2, a0
697 ; RV32MV-NEXT:    sw a2, 4(s0)
698 ; RV32MV-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
699 ; RV32MV-NEXT:    vslidedown.vi v10, v8, 4
700 ; RV32MV-NEXT:    vmv.x.s a0, v10
701 ; RV32MV-NEXT:    srli a2, a0, 30
702 ; RV32MV-NEXT:    vslidedown.vi v10, v8, 5
703 ; RV32MV-NEXT:    vmv.x.s a3, v10
704 ; RV32MV-NEXT:    slli a3, a3, 2
705 ; RV32MV-NEXT:    or a2, a3, a2
706 ; RV32MV-NEXT:    andi a2, a2, 7
707 ; RV32MV-NEXT:    sb a2, 12(s0)
708 ; RV32MV-NEXT:    srli a1, a1, 31
709 ; RV32MV-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
710 ; RV32MV-NEXT:    vslidedown.vi v8, v8, 3
711 ; RV32MV-NEXT:    vmv.x.s a2, v8
712 ; RV32MV-NEXT:    andi a2, a2, 1
713 ; RV32MV-NEXT:    slli a2, a2, 1
714 ; RV32MV-NEXT:    slli a0, a0, 2
715 ; RV32MV-NEXT:    or a0, a1, a0
716 ; RV32MV-NEXT:    or a0, a0, a2
717 ; RV32MV-NEXT:    sw a0, 8(s0)
718 ; RV32MV-NEXT:    csrr a0, vlenb
719 ; RV32MV-NEXT:    slli a0, a0, 1
720 ; RV32MV-NEXT:    add sp, sp, a0
721 ; RV32MV-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
722 ; RV32MV-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
723 ; RV32MV-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
724 ; RV32MV-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
725 ; RV32MV-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
726 ; RV32MV-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
727 ; RV32MV-NEXT:    addi sp, sp, 48
728 ; RV32MV-NEXT:    ret
730 ; RV64MV-LABEL: test_srem_vec:
731 ; RV64MV:       # %bb.0:
732 ; RV64MV-NEXT:    lbu a1, 12(a0)
733 ; RV64MV-NEXT:    lwu a2, 8(a0)
734 ; RV64MV-NEXT:    slli a1, a1, 32
735 ; RV64MV-NEXT:    ld a3, 0(a0)
736 ; RV64MV-NEXT:    or a1, a2, a1
737 ; RV64MV-NEXT:    slli a1, a1, 29
738 ; RV64MV-NEXT:    srai a1, a1, 31
739 ; RV64MV-NEXT:    srli a4, a3, 2
740 ; RV64MV-NEXT:    slli a2, a2, 62
741 ; RV64MV-NEXT:    or a2, a2, a4
742 ; RV64MV-NEXT:    lui a4, %hi(.LCPI3_0)
743 ; RV64MV-NEXT:    ld a4, %lo(.LCPI3_0)(a4)
744 ; RV64MV-NEXT:    srai a2, a2, 31
745 ; RV64MV-NEXT:    slli a3, a3, 31
746 ; RV64MV-NEXT:    srai a3, a3, 31
747 ; RV64MV-NEXT:    mulh a4, a2, a4
748 ; RV64MV-NEXT:    srli a5, a4, 63
749 ; RV64MV-NEXT:    srai a4, a4, 1
750 ; RV64MV-NEXT:    add a4, a4, a5
751 ; RV64MV-NEXT:    lui a5, %hi(.LCPI3_1)
752 ; RV64MV-NEXT:    ld a5, %lo(.LCPI3_1)(a5)
753 ; RV64MV-NEXT:    add a2, a2, a4
754 ; RV64MV-NEXT:    slli a4, a4, 3
755 ; RV64MV-NEXT:    sub a2, a2, a4
756 ; RV64MV-NEXT:    mulh a4, a3, a5
757 ; RV64MV-NEXT:    srli a5, a4, 63
758 ; RV64MV-NEXT:    add a4, a4, a5
759 ; RV64MV-NEXT:    slli a5, a4, 3
760 ; RV64MV-NEXT:    slli a4, a4, 1
761 ; RV64MV-NEXT:    sub a4, a4, a5
762 ; RV64MV-NEXT:    lui a5, %hi(.LCPI3_2)
763 ; RV64MV-NEXT:    ld a5, %lo(.LCPI3_2)(a5)
764 ; RV64MV-NEXT:    add a3, a3, a4
765 ; RV64MV-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
766 ; RV64MV-NEXT:    vmv.v.x v8, a3
767 ; RV64MV-NEXT:    vslide1down.vx v8, v8, a2
768 ; RV64MV-NEXT:    mulh a2, a1, a5
769 ; RV64MV-NEXT:    srli a3, a2, 63
770 ; RV64MV-NEXT:    srai a2, a2, 1
771 ; RV64MV-NEXT:    add a2, a2, a3
772 ; RV64MV-NEXT:    slli a3, a2, 2
773 ; RV64MV-NEXT:    add a1, a1, a2
774 ; RV64MV-NEXT:    add a1, a1, a3
775 ; RV64MV-NEXT:    vslide1down.vx v8, v8, a1
776 ; RV64MV-NEXT:    vslidedown.vi v8, v8, 1
777 ; RV64MV-NEXT:    li a1, -1
778 ; RV64MV-NEXT:    srli a1, a1, 31
779 ; RV64MV-NEXT:    vand.vx v8, v8, a1
780 ; RV64MV-NEXT:    lui a2, 32
781 ; RV64MV-NEXT:    addi a2, a2, 256
782 ; RV64MV-NEXT:    vmv.s.x v10, a2
783 ; RV64MV-NEXT:    vsext.vf8 v12, v10
784 ; RV64MV-NEXT:    vmsne.vv v0, v8, v12
785 ; RV64MV-NEXT:    vmv.v.i v8, 0
786 ; RV64MV-NEXT:    vmerge.vim v8, v8, -1, v0
787 ; RV64MV-NEXT:    vslidedown.vi v10, v8, 2
788 ; RV64MV-NEXT:    vmv.x.s a2, v10
789 ; RV64MV-NEXT:    slli a3, a2, 31
790 ; RV64MV-NEXT:    srli a3, a3, 61
791 ; RV64MV-NEXT:    sb a3, 12(a0)
792 ; RV64MV-NEXT:    vmv.x.s a3, v8
793 ; RV64MV-NEXT:    and a1, a3, a1
794 ; RV64MV-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
795 ; RV64MV-NEXT:    vslidedown.vi v8, v8, 1
796 ; RV64MV-NEXT:    vmv.x.s a3, v8
797 ; RV64MV-NEXT:    slli a4, a3, 33
798 ; RV64MV-NEXT:    or a1, a1, a4
799 ; RV64MV-NEXT:    sd a1, 0(a0)
800 ; RV64MV-NEXT:    slli a2, a2, 2
801 ; RV64MV-NEXT:    slli a3, a3, 31
802 ; RV64MV-NEXT:    srli a3, a3, 62
803 ; RV64MV-NEXT:    or a2, a3, a2
804 ; RV64MV-NEXT:    sw a2, 8(a0)
805 ; RV64MV-NEXT:    ret
806   %ld = load <3 x i33>, ptr %X
807   %srem = srem <3 x i33> %ld, <i33 6, i33 7, i33 -5>
808   %cmp = icmp ne <3 x i33> %srem, <i33 0, i33 1, i33 2>
809   %ext = sext <3 x i1> %cmp to <3 x i33>
810   store <3 x i33> %ext, ptr %X
811   ret void