Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vremu-vp.ll
blobb5eec4142c78247143d07e2021620bf83fa409a7
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <8 x i7> @llvm.vp.urem.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
9 define <8 x i7> @vremu_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vremu_vv_v8i7:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    li a1, 127
13 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
14 ; CHECK-NEXT:    vand.vx v9, v9, a1, v0.t
15 ; CHECK-NEXT:    vand.vx v8, v8, a1, v0.t
16 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
17 ; CHECK-NEXT:    ret
18   %v = call <8 x i7> @llvm.vp.urem.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
19   ret <8 x i7> %v
22 declare <2 x i8> @llvm.vp.urem.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
24 define <2 x i8> @vremu_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
25 ; CHECK-LABEL: vremu_vv_v2i8:
26 ; CHECK:       # %bb.0:
27 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
28 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
29 ; CHECK-NEXT:    ret
30   %v = call <2 x i8> @llvm.vp.urem.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
31   ret <2 x i8> %v
34 define <2 x i8> @vremu_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
35 ; CHECK-LABEL: vremu_vv_v2i8_unmasked:
36 ; CHECK:       # %bb.0:
37 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
38 ; CHECK-NEXT:    vremu.vv v8, v8, v9
39 ; CHECK-NEXT:    ret
40   %v = call <2 x i8> @llvm.vp.urem.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl)
41   ret <2 x i8> %v
44 define <2 x i8> @vremu_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
45 ; CHECK-LABEL: vremu_vx_v2i8:
46 ; CHECK:       # %bb.0:
47 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
48 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
49 ; CHECK-NEXT:    ret
50   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
51   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
52   %v = call <2 x i8> @llvm.vp.urem.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
53   ret <2 x i8> %v
56 define <2 x i8> @vremu_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
57 ; CHECK-LABEL: vremu_vx_v2i8_unmasked:
58 ; CHECK:       # %bb.0:
59 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
60 ; CHECK-NEXT:    vremu.vx v8, v8, a0
61 ; CHECK-NEXT:    ret
62   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
63   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
64   %v = call <2 x i8> @llvm.vp.urem.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl)
65   ret <2 x i8> %v
68 declare <4 x i8> @llvm.vp.urem.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
70 define <4 x i8> @vremu_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
71 ; CHECK-LABEL: vremu_vv_v4i8:
72 ; CHECK:       # %bb.0:
73 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
74 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
75 ; CHECK-NEXT:    ret
76   %v = call <4 x i8> @llvm.vp.urem.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
77   ret <4 x i8> %v
80 define <4 x i8> @vremu_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
81 ; CHECK-LABEL: vremu_vv_v4i8_unmasked:
82 ; CHECK:       # %bb.0:
83 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
84 ; CHECK-NEXT:    vremu.vv v8, v8, v9
85 ; CHECK-NEXT:    ret
86   %v = call <4 x i8> @llvm.vp.urem.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl)
87   ret <4 x i8> %v
90 define <4 x i8> @vremu_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
91 ; CHECK-LABEL: vremu_vx_v4i8:
92 ; CHECK:       # %bb.0:
93 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
94 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
95 ; CHECK-NEXT:    ret
96   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
97   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
98   %v = call <4 x i8> @llvm.vp.urem.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
99   ret <4 x i8> %v
102 define <4 x i8> @vremu_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
103 ; CHECK-LABEL: vremu_vx_v4i8_unmasked:
104 ; CHECK:       # %bb.0:
105 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
106 ; CHECK-NEXT:    vremu.vx v8, v8, a0
107 ; CHECK-NEXT:    ret
108   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
109   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
110   %v = call <4 x i8> @llvm.vp.urem.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl)
111   ret <4 x i8> %v
114 declare <6 x i8> @llvm.vp.urem.v6i8(<6 x i8>, <6 x i8>, <6 x i1>, i32)
116 define <6 x i8> @vremu_vv_v6i8(<6 x i8> %va, <6 x i8> %b, <6 x i1> %m, i32 zeroext %evl) {
117 ; CHECK-LABEL: vremu_vv_v6i8:
118 ; CHECK:       # %bb.0:
119 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
120 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
121 ; CHECK-NEXT:    ret
122   %v = call <6 x i8> @llvm.vp.urem.v6i8(<6 x i8> %va, <6 x i8> %b, <6 x i1> %m, i32 %evl)
123   ret <6 x i8> %v
126 declare <8 x i8> @llvm.vp.urem.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
128 define <8 x i8> @vremu_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
129 ; CHECK-LABEL: vremu_vv_v8i8:
130 ; CHECK:       # %bb.0:
131 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
132 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
133 ; CHECK-NEXT:    ret
134   %v = call <8 x i8> @llvm.vp.urem.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
135   ret <8 x i8> %v
138 define <8 x i8> @vremu_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
139 ; CHECK-LABEL: vremu_vv_v8i8_unmasked:
140 ; CHECK:       # %bb.0:
141 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
142 ; CHECK-NEXT:    vremu.vv v8, v8, v9
143 ; CHECK-NEXT:    ret
144   %v = call <8 x i8> @llvm.vp.urem.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl)
145   ret <8 x i8> %v
148 define <8 x i8> @vremu_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
149 ; CHECK-LABEL: vremu_vx_v8i8:
150 ; CHECK:       # %bb.0:
151 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
152 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
153 ; CHECK-NEXT:    ret
154   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
155   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
156   %v = call <8 x i8> @llvm.vp.urem.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
157   ret <8 x i8> %v
160 define <8 x i8> @vremu_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
161 ; CHECK-LABEL: vremu_vx_v8i8_unmasked:
162 ; CHECK:       # %bb.0:
163 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
164 ; CHECK-NEXT:    vremu.vx v8, v8, a0
165 ; CHECK-NEXT:    ret
166   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
167   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
168   %v = call <8 x i8> @llvm.vp.urem.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl)
169   ret <8 x i8> %v
172 declare <16 x i8> @llvm.vp.urem.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
174 define <16 x i8> @vremu_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
175 ; CHECK-LABEL: vremu_vv_v16i8:
176 ; CHECK:       # %bb.0:
177 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
178 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
179 ; CHECK-NEXT:    ret
180   %v = call <16 x i8> @llvm.vp.urem.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
181   ret <16 x i8> %v
184 define <16 x i8> @vremu_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
185 ; CHECK-LABEL: vremu_vv_v16i8_unmasked:
186 ; CHECK:       # %bb.0:
187 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
188 ; CHECK-NEXT:    vremu.vv v8, v8, v9
189 ; CHECK-NEXT:    ret
190   %v = call <16 x i8> @llvm.vp.urem.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl)
191   ret <16 x i8> %v
194 define <16 x i8> @vremu_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
195 ; CHECK-LABEL: vremu_vx_v16i8:
196 ; CHECK:       # %bb.0:
197 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
198 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
199 ; CHECK-NEXT:    ret
200   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
201   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
202   %v = call <16 x i8> @llvm.vp.urem.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
203   ret <16 x i8> %v
206 define <16 x i8> @vremu_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
207 ; CHECK-LABEL: vremu_vx_v16i8_unmasked:
208 ; CHECK:       # %bb.0:
209 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
210 ; CHECK-NEXT:    vremu.vx v8, v8, a0
211 ; CHECK-NEXT:    ret
212   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
213   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
214   %v = call <16 x i8> @llvm.vp.urem.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl)
215   ret <16 x i8> %v
218 declare <2 x i16> @llvm.vp.urem.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
220 define <2 x i16> @vremu_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
221 ; CHECK-LABEL: vremu_vv_v2i16:
222 ; CHECK:       # %bb.0:
223 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
224 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
225 ; CHECK-NEXT:    ret
226   %v = call <2 x i16> @llvm.vp.urem.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
227   ret <2 x i16> %v
230 define <2 x i16> @vremu_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
231 ; CHECK-LABEL: vremu_vv_v2i16_unmasked:
232 ; CHECK:       # %bb.0:
233 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
234 ; CHECK-NEXT:    vremu.vv v8, v8, v9
235 ; CHECK-NEXT:    ret
236   %v = call <2 x i16> @llvm.vp.urem.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl)
237   ret <2 x i16> %v
240 define <2 x i16> @vremu_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
241 ; CHECK-LABEL: vremu_vx_v2i16:
242 ; CHECK:       # %bb.0:
243 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
244 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
245 ; CHECK-NEXT:    ret
246   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
247   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
248   %v = call <2 x i16> @llvm.vp.urem.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
249   ret <2 x i16> %v
252 define <2 x i16> @vremu_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
253 ; CHECK-LABEL: vremu_vx_v2i16_unmasked:
254 ; CHECK:       # %bb.0:
255 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
256 ; CHECK-NEXT:    vremu.vx v8, v8, a0
257 ; CHECK-NEXT:    ret
258   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
259   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
260   %v = call <2 x i16> @llvm.vp.urem.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl)
261   ret <2 x i16> %v
264 declare <4 x i16> @llvm.vp.urem.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
266 define <4 x i16> @vremu_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
267 ; CHECK-LABEL: vremu_vv_v4i16:
268 ; CHECK:       # %bb.0:
269 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
270 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
271 ; CHECK-NEXT:    ret
272   %v = call <4 x i16> @llvm.vp.urem.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
273   ret <4 x i16> %v
276 define <4 x i16> @vremu_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
277 ; CHECK-LABEL: vremu_vv_v4i16_unmasked:
278 ; CHECK:       # %bb.0:
279 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
280 ; CHECK-NEXT:    vremu.vv v8, v8, v9
281 ; CHECK-NEXT:    ret
282   %v = call <4 x i16> @llvm.vp.urem.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl)
283   ret <4 x i16> %v
286 define <4 x i16> @vremu_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
287 ; CHECK-LABEL: vremu_vx_v4i16:
288 ; CHECK:       # %bb.0:
289 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
290 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
291 ; CHECK-NEXT:    ret
292   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
293   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
294   %v = call <4 x i16> @llvm.vp.urem.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
295   ret <4 x i16> %v
298 define <4 x i16> @vremu_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
299 ; CHECK-LABEL: vremu_vx_v4i16_unmasked:
300 ; CHECK:       # %bb.0:
301 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
302 ; CHECK-NEXT:    vremu.vx v8, v8, a0
303 ; CHECK-NEXT:    ret
304   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
305   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
306   %v = call <4 x i16> @llvm.vp.urem.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl)
307   ret <4 x i16> %v
310 declare <8 x i16> @llvm.vp.urem.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
312 define <8 x i16> @vremu_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
313 ; CHECK-LABEL: vremu_vv_v8i16:
314 ; CHECK:       # %bb.0:
315 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
316 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
317 ; CHECK-NEXT:    ret
318   %v = call <8 x i16> @llvm.vp.urem.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
319   ret <8 x i16> %v
322 define <8 x i16> @vremu_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
323 ; CHECK-LABEL: vremu_vv_v8i16_unmasked:
324 ; CHECK:       # %bb.0:
325 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
326 ; CHECK-NEXT:    vremu.vv v8, v8, v9
327 ; CHECK-NEXT:    ret
328   %v = call <8 x i16> @llvm.vp.urem.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl)
329   ret <8 x i16> %v
332 define <8 x i16> @vremu_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
333 ; CHECK-LABEL: vremu_vx_v8i16:
334 ; CHECK:       # %bb.0:
335 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
336 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
337 ; CHECK-NEXT:    ret
338   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
339   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
340   %v = call <8 x i16> @llvm.vp.urem.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
341   ret <8 x i16> %v
344 define <8 x i16> @vremu_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
345 ; CHECK-LABEL: vremu_vx_v8i16_unmasked:
346 ; CHECK:       # %bb.0:
347 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
348 ; CHECK-NEXT:    vremu.vx v8, v8, a0
349 ; CHECK-NEXT:    ret
350   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
351   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
352   %v = call <8 x i16> @llvm.vp.urem.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl)
353   ret <8 x i16> %v
356 declare <16 x i16> @llvm.vp.urem.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
358 define <16 x i16> @vremu_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
359 ; CHECK-LABEL: vremu_vv_v16i16:
360 ; CHECK:       # %bb.0:
361 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
362 ; CHECK-NEXT:    vremu.vv v8, v8, v10, v0.t
363 ; CHECK-NEXT:    ret
364   %v = call <16 x i16> @llvm.vp.urem.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
365   ret <16 x i16> %v
368 define <16 x i16> @vremu_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
369 ; CHECK-LABEL: vremu_vv_v16i16_unmasked:
370 ; CHECK:       # %bb.0:
371 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
372 ; CHECK-NEXT:    vremu.vv v8, v8, v10
373 ; CHECK-NEXT:    ret
374   %v = call <16 x i16> @llvm.vp.urem.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl)
375   ret <16 x i16> %v
378 define <16 x i16> @vremu_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
379 ; CHECK-LABEL: vremu_vx_v16i16:
380 ; CHECK:       # %bb.0:
381 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
382 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
383 ; CHECK-NEXT:    ret
384   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
385   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
386   %v = call <16 x i16> @llvm.vp.urem.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
387   ret <16 x i16> %v
390 define <16 x i16> @vremu_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
391 ; CHECK-LABEL: vremu_vx_v16i16_unmasked:
392 ; CHECK:       # %bb.0:
393 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
394 ; CHECK-NEXT:    vremu.vx v8, v8, a0
395 ; CHECK-NEXT:    ret
396   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
397   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
398   %v = call <16 x i16> @llvm.vp.urem.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl)
399   ret <16 x i16> %v
402 declare <2 x i32> @llvm.vp.urem.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
404 define <2 x i32> @vremu_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
405 ; CHECK-LABEL: vremu_vv_v2i32:
406 ; CHECK:       # %bb.0:
407 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
408 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
409 ; CHECK-NEXT:    ret
410   %v = call <2 x i32> @llvm.vp.urem.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
411   ret <2 x i32> %v
414 define <2 x i32> @vremu_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
415 ; CHECK-LABEL: vremu_vv_v2i32_unmasked:
416 ; CHECK:       # %bb.0:
417 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
418 ; CHECK-NEXT:    vremu.vv v8, v8, v9
419 ; CHECK-NEXT:    ret
420   %v = call <2 x i32> @llvm.vp.urem.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl)
421   ret <2 x i32> %v
424 define <2 x i32> @vremu_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
425 ; CHECK-LABEL: vremu_vx_v2i32:
426 ; CHECK:       # %bb.0:
427 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
428 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
429 ; CHECK-NEXT:    ret
430   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
431   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
432   %v = call <2 x i32> @llvm.vp.urem.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
433   ret <2 x i32> %v
436 define <2 x i32> @vremu_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
437 ; CHECK-LABEL: vremu_vx_v2i32_unmasked:
438 ; CHECK:       # %bb.0:
439 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
440 ; CHECK-NEXT:    vremu.vx v8, v8, a0
441 ; CHECK-NEXT:    ret
442   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
443   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
444   %v = call <2 x i32> @llvm.vp.urem.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl)
445   ret <2 x i32> %v
448 declare <4 x i32> @llvm.vp.urem.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
450 define <4 x i32> @vremu_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
451 ; CHECK-LABEL: vremu_vv_v4i32:
452 ; CHECK:       # %bb.0:
453 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
454 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
455 ; CHECK-NEXT:    ret
456   %v = call <4 x i32> @llvm.vp.urem.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
457   ret <4 x i32> %v
460 define <4 x i32> @vremu_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
461 ; CHECK-LABEL: vremu_vv_v4i32_unmasked:
462 ; CHECK:       # %bb.0:
463 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
464 ; CHECK-NEXT:    vremu.vv v8, v8, v9
465 ; CHECK-NEXT:    ret
466   %v = call <4 x i32> @llvm.vp.urem.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl)
467   ret <4 x i32> %v
470 define <4 x i32> @vremu_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
471 ; CHECK-LABEL: vremu_vx_v4i32:
472 ; CHECK:       # %bb.0:
473 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
474 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
475 ; CHECK-NEXT:    ret
476   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
477   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
478   %v = call <4 x i32> @llvm.vp.urem.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
479   ret <4 x i32> %v
482 define <4 x i32> @vremu_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
483 ; CHECK-LABEL: vremu_vx_v4i32_unmasked:
484 ; CHECK:       # %bb.0:
485 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
486 ; CHECK-NEXT:    vremu.vx v8, v8, a0
487 ; CHECK-NEXT:    ret
488   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
489   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
490   %v = call <4 x i32> @llvm.vp.urem.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl)
491   ret <4 x i32> %v
494 declare <8 x i32> @llvm.vp.urem.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
496 define <8 x i32> @vremu_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
497 ; CHECK-LABEL: vremu_vv_v8i32:
498 ; CHECK:       # %bb.0:
499 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
500 ; CHECK-NEXT:    vremu.vv v8, v8, v10, v0.t
501 ; CHECK-NEXT:    ret
502   %v = call <8 x i32> @llvm.vp.urem.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
503   ret <8 x i32> %v
506 define <8 x i32> @vremu_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
507 ; CHECK-LABEL: vremu_vv_v8i32_unmasked:
508 ; CHECK:       # %bb.0:
509 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
510 ; CHECK-NEXT:    vremu.vv v8, v8, v10
511 ; CHECK-NEXT:    ret
512   %v = call <8 x i32> @llvm.vp.urem.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl)
513   ret <8 x i32> %v
516 define <8 x i32> @vremu_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
517 ; CHECK-LABEL: vremu_vx_v8i32:
518 ; CHECK:       # %bb.0:
519 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
520 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
521 ; CHECK-NEXT:    ret
522   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
523   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
524   %v = call <8 x i32> @llvm.vp.urem.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
525   ret <8 x i32> %v
528 define <8 x i32> @vremu_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
529 ; CHECK-LABEL: vremu_vx_v8i32_unmasked:
530 ; CHECK:       # %bb.0:
531 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
532 ; CHECK-NEXT:    vremu.vx v8, v8, a0
533 ; CHECK-NEXT:    ret
534   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
535   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
536   %v = call <8 x i32> @llvm.vp.urem.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl)
537   ret <8 x i32> %v
540 declare <16 x i32> @llvm.vp.urem.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
542 define <16 x i32> @vremu_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
543 ; CHECK-LABEL: vremu_vv_v16i32:
544 ; CHECK:       # %bb.0:
545 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
546 ; CHECK-NEXT:    vremu.vv v8, v8, v12, v0.t
547 ; CHECK-NEXT:    ret
548   %v = call <16 x i32> @llvm.vp.urem.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
549   ret <16 x i32> %v
552 define <16 x i32> @vremu_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
553 ; CHECK-LABEL: vremu_vv_v16i32_unmasked:
554 ; CHECK:       # %bb.0:
555 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
556 ; CHECK-NEXT:    vremu.vv v8, v8, v12
557 ; CHECK-NEXT:    ret
558   %v = call <16 x i32> @llvm.vp.urem.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl)
559   ret <16 x i32> %v
562 define <16 x i32> @vremu_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
563 ; CHECK-LABEL: vremu_vx_v16i32:
564 ; CHECK:       # %bb.0:
565 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
566 ; CHECK-NEXT:    vremu.vx v8, v8, a0, v0.t
567 ; CHECK-NEXT:    ret
568   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
569   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
570   %v = call <16 x i32> @llvm.vp.urem.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
571   ret <16 x i32> %v
574 define <16 x i32> @vremu_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
575 ; CHECK-LABEL: vremu_vx_v16i32_unmasked:
576 ; CHECK:       # %bb.0:
577 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
578 ; CHECK-NEXT:    vremu.vx v8, v8, a0
579 ; CHECK-NEXT:    ret
580   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
581   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
582   %v = call <16 x i32> @llvm.vp.urem.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl)
583   ret <16 x i32> %v
586 declare <2 x i64> @llvm.vp.urem.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
588 define <2 x i64> @vremu_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
589 ; CHECK-LABEL: vremu_vv_v2i64:
590 ; CHECK:       # %bb.0:
591 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
592 ; CHECK-NEXT:    vremu.vv v8, v8, v9, v0.t
593 ; CHECK-NEXT:    ret
594   %v = call <2 x i64> @llvm.vp.urem.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
595   ret <2 x i64> %v
598 define <2 x i64> @vremu_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
599 ; CHECK-LABEL: vremu_vv_v2i64_unmasked:
600 ; CHECK:       # %bb.0:
601 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
602 ; CHECK-NEXT:    vremu.vv v8, v8, v9
603 ; CHECK-NEXT:    ret
604   %v = call <2 x i64> @llvm.vp.urem.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl)
605   ret <2 x i64> %v
608 define <2 x i64> @vremu_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
609 ; RV32-LABEL: vremu_vx_v2i64:
610 ; RV32:       # %bb.0:
611 ; RV32-NEXT:    addi sp, sp, -16
612 ; RV32-NEXT:    .cfi_def_cfa_offset 16
613 ; RV32-NEXT:    sw a1, 12(sp)
614 ; RV32-NEXT:    sw a0, 8(sp)
615 ; RV32-NEXT:    addi a0, sp, 8
616 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
617 ; RV32-NEXT:    vlse64.v v9, (a0), zero
618 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
619 ; RV32-NEXT:    vremu.vv v8, v8, v9, v0.t
620 ; RV32-NEXT:    addi sp, sp, 16
621 ; RV32-NEXT:    ret
623 ; RV64-LABEL: vremu_vx_v2i64:
624 ; RV64:       # %bb.0:
625 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
626 ; RV64-NEXT:    vremu.vx v8, v8, a0, v0.t
627 ; RV64-NEXT:    ret
628   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
629   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
630   %v = call <2 x i64> @llvm.vp.urem.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
631   ret <2 x i64> %v
634 define <2 x i64> @vremu_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
635 ; RV32-LABEL: vremu_vx_v2i64_unmasked:
636 ; RV32:       # %bb.0:
637 ; RV32-NEXT:    addi sp, sp, -16
638 ; RV32-NEXT:    .cfi_def_cfa_offset 16
639 ; RV32-NEXT:    sw a1, 12(sp)
640 ; RV32-NEXT:    sw a0, 8(sp)
641 ; RV32-NEXT:    addi a0, sp, 8
642 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
643 ; RV32-NEXT:    vlse64.v v9, (a0), zero
644 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
645 ; RV32-NEXT:    vremu.vv v8, v8, v9
646 ; RV32-NEXT:    addi sp, sp, 16
647 ; RV32-NEXT:    ret
649 ; RV64-LABEL: vremu_vx_v2i64_unmasked:
650 ; RV64:       # %bb.0:
651 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
652 ; RV64-NEXT:    vremu.vx v8, v8, a0
653 ; RV64-NEXT:    ret
654   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
655   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
656   %v = call <2 x i64> @llvm.vp.urem.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl)
657   ret <2 x i64> %v
660 declare <4 x i64> @llvm.vp.urem.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
662 define <4 x i64> @vremu_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
663 ; CHECK-LABEL: vremu_vv_v4i64:
664 ; CHECK:       # %bb.0:
665 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
666 ; CHECK-NEXT:    vremu.vv v8, v8, v10, v0.t
667 ; CHECK-NEXT:    ret
668   %v = call <4 x i64> @llvm.vp.urem.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
669   ret <4 x i64> %v
672 define <4 x i64> @vremu_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
673 ; CHECK-LABEL: vremu_vv_v4i64_unmasked:
674 ; CHECK:       # %bb.0:
675 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
676 ; CHECK-NEXT:    vremu.vv v8, v8, v10
677 ; CHECK-NEXT:    ret
678   %v = call <4 x i64> @llvm.vp.urem.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl)
679   ret <4 x i64> %v
682 define <4 x i64> @vremu_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
683 ; RV32-LABEL: vremu_vx_v4i64:
684 ; RV32:       # %bb.0:
685 ; RV32-NEXT:    addi sp, sp, -16
686 ; RV32-NEXT:    .cfi_def_cfa_offset 16
687 ; RV32-NEXT:    sw a1, 12(sp)
688 ; RV32-NEXT:    sw a0, 8(sp)
689 ; RV32-NEXT:    addi a0, sp, 8
690 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
691 ; RV32-NEXT:    vlse64.v v10, (a0), zero
692 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
693 ; RV32-NEXT:    vremu.vv v8, v8, v10, v0.t
694 ; RV32-NEXT:    addi sp, sp, 16
695 ; RV32-NEXT:    ret
697 ; RV64-LABEL: vremu_vx_v4i64:
698 ; RV64:       # %bb.0:
699 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
700 ; RV64-NEXT:    vremu.vx v8, v8, a0, v0.t
701 ; RV64-NEXT:    ret
702   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
703   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
704   %v = call <4 x i64> @llvm.vp.urem.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
705   ret <4 x i64> %v
708 define <4 x i64> @vremu_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
709 ; RV32-LABEL: vremu_vx_v4i64_unmasked:
710 ; RV32:       # %bb.0:
711 ; RV32-NEXT:    addi sp, sp, -16
712 ; RV32-NEXT:    .cfi_def_cfa_offset 16
713 ; RV32-NEXT:    sw a1, 12(sp)
714 ; RV32-NEXT:    sw a0, 8(sp)
715 ; RV32-NEXT:    addi a0, sp, 8
716 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
717 ; RV32-NEXT:    vlse64.v v10, (a0), zero
718 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
719 ; RV32-NEXT:    vremu.vv v8, v8, v10
720 ; RV32-NEXT:    addi sp, sp, 16
721 ; RV32-NEXT:    ret
723 ; RV64-LABEL: vremu_vx_v4i64_unmasked:
724 ; RV64:       # %bb.0:
725 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
726 ; RV64-NEXT:    vremu.vx v8, v8, a0
727 ; RV64-NEXT:    ret
728   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
729   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
730   %v = call <4 x i64> @llvm.vp.urem.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl)
731   ret <4 x i64> %v
734 declare <8 x i64> @llvm.vp.urem.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
736 define <8 x i64> @vremu_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
737 ; CHECK-LABEL: vremu_vv_v8i64:
738 ; CHECK:       # %bb.0:
739 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
740 ; CHECK-NEXT:    vremu.vv v8, v8, v12, v0.t
741 ; CHECK-NEXT:    ret
742   %v = call <8 x i64> @llvm.vp.urem.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
743   ret <8 x i64> %v
746 define <8 x i64> @vremu_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
747 ; CHECK-LABEL: vremu_vv_v8i64_unmasked:
748 ; CHECK:       # %bb.0:
749 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
750 ; CHECK-NEXT:    vremu.vv v8, v8, v12
751 ; CHECK-NEXT:    ret
752   %v = call <8 x i64> @llvm.vp.urem.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl)
753   ret <8 x i64> %v
756 define <8 x i64> @vremu_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
757 ; RV32-LABEL: vremu_vx_v8i64:
758 ; RV32:       # %bb.0:
759 ; RV32-NEXT:    addi sp, sp, -16
760 ; RV32-NEXT:    .cfi_def_cfa_offset 16
761 ; RV32-NEXT:    sw a1, 12(sp)
762 ; RV32-NEXT:    sw a0, 8(sp)
763 ; RV32-NEXT:    addi a0, sp, 8
764 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
765 ; RV32-NEXT:    vlse64.v v12, (a0), zero
766 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
767 ; RV32-NEXT:    vremu.vv v8, v8, v12, v0.t
768 ; RV32-NEXT:    addi sp, sp, 16
769 ; RV32-NEXT:    ret
771 ; RV64-LABEL: vremu_vx_v8i64:
772 ; RV64:       # %bb.0:
773 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
774 ; RV64-NEXT:    vremu.vx v8, v8, a0, v0.t
775 ; RV64-NEXT:    ret
776   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
777   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
778   %v = call <8 x i64> @llvm.vp.urem.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
779   ret <8 x i64> %v
782 define <8 x i64> @vremu_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
783 ; RV32-LABEL: vremu_vx_v8i64_unmasked:
784 ; RV32:       # %bb.0:
785 ; RV32-NEXT:    addi sp, sp, -16
786 ; RV32-NEXT:    .cfi_def_cfa_offset 16
787 ; RV32-NEXT:    sw a1, 12(sp)
788 ; RV32-NEXT:    sw a0, 8(sp)
789 ; RV32-NEXT:    addi a0, sp, 8
790 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
791 ; RV32-NEXT:    vlse64.v v12, (a0), zero
792 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
793 ; RV32-NEXT:    vremu.vv v8, v8, v12
794 ; RV32-NEXT:    addi sp, sp, 16
795 ; RV32-NEXT:    ret
797 ; RV64-LABEL: vremu_vx_v8i64_unmasked:
798 ; RV64:       # %bb.0:
799 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
800 ; RV64-NEXT:    vremu.vx v8, v8, a0
801 ; RV64-NEXT:    ret
802   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
803   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
804   %v = call <8 x i64> @llvm.vp.urem.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl)
805   ret <8 x i64> %v
808 declare <16 x i64> @llvm.vp.urem.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
810 define <16 x i64> @vremu_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
811 ; CHECK-LABEL: vremu_vv_v16i64:
812 ; CHECK:       # %bb.0:
813 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
814 ; CHECK-NEXT:    vremu.vv v8, v8, v16, v0.t
815 ; CHECK-NEXT:    ret
816   %v = call <16 x i64> @llvm.vp.urem.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
817   ret <16 x i64> %v
820 define <16 x i64> @vremu_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
821 ; CHECK-LABEL: vremu_vv_v16i64_unmasked:
822 ; CHECK:       # %bb.0:
823 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
824 ; CHECK-NEXT:    vremu.vv v8, v8, v16
825 ; CHECK-NEXT:    ret
826   %v = call <16 x i64> @llvm.vp.urem.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl)
827   ret <16 x i64> %v
830 define <16 x i64> @vremu_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
831 ; RV32-LABEL: vremu_vx_v16i64:
832 ; RV32:       # %bb.0:
833 ; RV32-NEXT:    addi sp, sp, -16
834 ; RV32-NEXT:    .cfi_def_cfa_offset 16
835 ; RV32-NEXT:    sw a1, 12(sp)
836 ; RV32-NEXT:    sw a0, 8(sp)
837 ; RV32-NEXT:    addi a0, sp, 8
838 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
839 ; RV32-NEXT:    vlse64.v v16, (a0), zero
840 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
841 ; RV32-NEXT:    vremu.vv v8, v8, v16, v0.t
842 ; RV32-NEXT:    addi sp, sp, 16
843 ; RV32-NEXT:    ret
845 ; RV64-LABEL: vremu_vx_v16i64:
846 ; RV64:       # %bb.0:
847 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
848 ; RV64-NEXT:    vremu.vx v8, v8, a0, v0.t
849 ; RV64-NEXT:    ret
850   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
851   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
852   %v = call <16 x i64> @llvm.vp.urem.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
853   ret <16 x i64> %v
856 define <16 x i64> @vremu_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
857 ; RV32-LABEL: vremu_vx_v16i64_unmasked:
858 ; RV32:       # %bb.0:
859 ; RV32-NEXT:    addi sp, sp, -16
860 ; RV32-NEXT:    .cfi_def_cfa_offset 16
861 ; RV32-NEXT:    sw a1, 12(sp)
862 ; RV32-NEXT:    sw a0, 8(sp)
863 ; RV32-NEXT:    addi a0, sp, 8
864 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
865 ; RV32-NEXT:    vlse64.v v16, (a0), zero
866 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
867 ; RV32-NEXT:    vremu.vv v8, v8, v16
868 ; RV32-NEXT:    addi sp, sp, 16
869 ; RV32-NEXT:    ret
871 ; RV64-LABEL: vremu_vx_v16i64_unmasked:
872 ; RV64:       # %bb.0:
873 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
874 ; RV64-NEXT:    vremu.vx v8, v8, a0
875 ; RV64-NEXT:    ret
876   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
877   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
878   %v = call <16 x i64> @llvm.vp.urem.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl)
879   ret <16 x i64> %v