1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=riscv32 -mattr=+v,+d,+zfh,+zvfh -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
3 ; RUN: llc -mtriple=riscv64 -mattr=+v,+d,+zfh,+zvfh -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
5 define <vscale x 1 x i8> @vp_splat_nxv1i8(i8 %val, <vscale x 1 x i1> %m, i32 zeroext %evl) {
6 ; CHECK-LABEL: vp_splat_nxv1i8:
8 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
9 ; CHECK-NEXT: vmv.v.x v8, a0
11 %splat = call <vscale x 1 x i8> @llvm.experimental.vp.splat.nxv1i8(i8 %val, <vscale x 1 x i1> %m, i32 %evl)
12 ret <vscale x 1 x i8> %splat
15 define <vscale x 2 x i8> @vp_splat_nxv2i8(i8 %val, <vscale x 2 x i1> %m, i32 zeroext %evl) {
16 ; CHECK-LABEL: vp_splat_nxv2i8:
18 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
19 ; CHECK-NEXT: vmv.v.x v8, a0
21 %splat = call <vscale x 2 x i8> @llvm.experimental.vp.splat.nxv2i8(i8 %val, <vscale x 2 x i1> %m, i32 %evl)
22 ret <vscale x 2 x i8> %splat
25 define <vscale x 4 x i8> @vp_splat_nxv4i8(i8 %val, <vscale x 4 x i1> %m, i32 zeroext %evl) {
26 ; CHECK-LABEL: vp_splat_nxv4i8:
28 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
29 ; CHECK-NEXT: vmv.v.x v8, a0
31 %splat = call <vscale x 4 x i8> @llvm.experimental.vp.splat.nxv4i8(i8 %val, <vscale x 4 x i1> %m, i32 %evl)
32 ret <vscale x 4 x i8> %splat
35 define <vscale x 8 x i8> @vp_splat_nxv8i8(i8 %val, <vscale x 8 x i1> %m, i32 zeroext %evl) {
36 ; CHECK-LABEL: vp_splat_nxv8i8:
38 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
39 ; CHECK-NEXT: vmv.v.x v8, a0
41 %splat = call <vscale x 8 x i8> @llvm.experimental.vp.splat.nxv8i8(i8 %val, <vscale x 8 x i1> %m, i32 %evl)
42 ret <vscale x 8 x i8> %splat
45 define <vscale x 16 x i8> @vp_splat_nxv16i8(i8 %val, <vscale x 16 x i1> %m, i32 zeroext %evl) {
46 ; CHECK-LABEL: vp_splat_nxv16i8:
48 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
49 ; CHECK-NEXT: vmv.v.x v8, a0
51 %splat = call <vscale x 16 x i8> @llvm.experimental.vp.splat.nxv16i8(i8 %val, <vscale x 16 x i1> %m, i32 %evl)
52 ret <vscale x 16 x i8> %splat
55 define <vscale x 32 x i8> @vp_splat_nxv32i8(i8 %val, <vscale x 32 x i1> %m, i32 zeroext %evl) {
56 ; CHECK-LABEL: vp_splat_nxv32i8:
58 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
59 ; CHECK-NEXT: vmv.v.x v8, a0
61 %splat = call <vscale x 32 x i8> @llvm.experimental.vp.splat.nxv32i8(i8 %val, <vscale x 32 x i1> %m, i32 %evl)
62 ret <vscale x 32 x i8> %splat
65 define <vscale x 64 x i8> @vp_splat_nxv64i8(i8 %val, <vscale x 64 x i1> %m, i32 zeroext %evl) {
66 ; CHECK-LABEL: vp_splat_nxv64i8:
68 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
69 ; CHECK-NEXT: vmv.v.x v8, a0
71 %splat = call <vscale x 64 x i8> @llvm.experimental.vp.splat.nxv64i8(i8 %val, <vscale x 64 x i1> %m, i32 %evl)
72 ret <vscale x 64 x i8> %splat
75 define <vscale x 1 x i16> @vp_splat_nxv1i16(i16 %val, <vscale x 1 x i1> %m, i32 zeroext %evl) {
76 ; CHECK-LABEL: vp_splat_nxv1i16:
78 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
79 ; CHECK-NEXT: vmv.v.x v8, a0
81 %splat = call <vscale x 1 x i16> @llvm.experimental.vp.splat.nxv1i16(i16 %val, <vscale x 1 x i1> %m, i32 %evl)
82 ret <vscale x 1 x i16> %splat
85 define <vscale x 2 x i16> @vp_splat_nxv2i16(i16 %val, <vscale x 2 x i1> %m, i32 zeroext %evl) {
86 ; CHECK-LABEL: vp_splat_nxv2i16:
88 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
89 ; CHECK-NEXT: vmv.v.x v8, a0
91 %splat = call <vscale x 2 x i16> @llvm.experimental.vp.splat.nxv2i16(i16 %val, <vscale x 2 x i1> %m, i32 %evl)
92 ret <vscale x 2 x i16> %splat
95 define <vscale x 4 x i16> @vp_splat_nxv4i16(i16 %val, <vscale x 4 x i1> %m, i32 zeroext %evl) {
96 ; CHECK-LABEL: vp_splat_nxv4i16:
98 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
99 ; CHECK-NEXT: vmv.v.x v8, a0
101 %splat = call <vscale x 4 x i16> @llvm.experimental.vp.splat.nxv4i16(i16 %val, <vscale x 4 x i1> %m, i32 %evl)
102 ret <vscale x 4 x i16> %splat
105 define <vscale x 8 x i16> @vp_splat_nxv8i16(i16 %val, <vscale x 8 x i1> %m, i32 zeroext %evl) {
106 ; CHECK-LABEL: vp_splat_nxv8i16:
108 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
109 ; CHECK-NEXT: vmv.v.x v8, a0
111 %splat = call <vscale x 8 x i16> @llvm.experimental.vp.splat.nxv8i16(i16 %val, <vscale x 8 x i1> %m, i32 %evl)
112 ret <vscale x 8 x i16> %splat
115 define <vscale x 16 x i16> @vp_splat_nxv16i16(i16 %val, <vscale x 16 x i1> %m, i32 zeroext %evl) {
116 ; CHECK-LABEL: vp_splat_nxv16i16:
118 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
119 ; CHECK-NEXT: vmv.v.x v8, a0
121 %splat = call <vscale x 16 x i16> @llvm.experimental.vp.splat.nxv16i16(i16 %val, <vscale x 16 x i1> %m, i32 %evl)
122 ret <vscale x 16 x i16> %splat
125 define <vscale x 32 x i16> @vp_splat_nxv32i16(i16 %val, <vscale x 32 x i1> %m, i32 zeroext %evl) {
126 ; CHECK-LABEL: vp_splat_nxv32i16:
128 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
129 ; CHECK-NEXT: vmv.v.x v8, a0
131 %splat = call <vscale x 32 x i16> @llvm.experimental.vp.splat.nxv32i16(i16 %val, <vscale x 32 x i1> %m, i32 %evl)
132 ret <vscale x 32 x i16> %splat
135 define <vscale x 1 x i32> @vp_splat_nxv1i32(i32 %val, <vscale x 1 x i1> %m, i32 zeroext %evl) {
136 ; CHECK-LABEL: vp_splat_nxv1i32:
138 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
139 ; CHECK-NEXT: vmv.v.x v8, a0
141 %splat = call <vscale x 1 x i32> @llvm.experimental.vp.splat.nxv1i32(i32 %val, <vscale x 1 x i1> %m, i32 %evl)
142 ret <vscale x 1 x i32> %splat
145 define <vscale x 2 x i32> @vp_splat_nxv2i32(i32 %val, <vscale x 2 x i1> %m, i32 zeroext %evl) {
146 ; CHECK-LABEL: vp_splat_nxv2i32:
148 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
149 ; CHECK-NEXT: vmv.v.x v8, a0
151 %splat = call <vscale x 2 x i32> @llvm.experimental.vp.splat.nxv2i32(i32 %val, <vscale x 2 x i1> %m, i32 %evl)
152 ret <vscale x 2 x i32> %splat
155 define <vscale x 4 x i32> @vp_splat_nxv4i32(i32 %val, <vscale x 4 x i1> %m, i32 zeroext %evl) {
156 ; CHECK-LABEL: vp_splat_nxv4i32:
158 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
159 ; CHECK-NEXT: vmv.v.x v8, a0
161 %splat = call <vscale x 4 x i32> @llvm.experimental.vp.splat.nxv4i32(i32 %val, <vscale x 4 x i1> %m, i32 %evl)
162 ret <vscale x 4 x i32> %splat
165 define <vscale x 8 x i32> @vp_splat_nxv8i32(i32 %val, <vscale x 8 x i1> %m, i32 zeroext %evl) {
166 ; CHECK-LABEL: vp_splat_nxv8i32:
168 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
169 ; CHECK-NEXT: vmv.v.x v8, a0
171 %splat = call <vscale x 8 x i32> @llvm.experimental.vp.splat.nxv8i32(i32 %val, <vscale x 8 x i1> %m, i32 %evl)
172 ret <vscale x 8 x i32> %splat
175 define <vscale x 16 x i32> @vp_splat_nxv16i32(i32 %val, <vscale x 16 x i1> %m, i32 zeroext %evl) {
176 ; CHECK-LABEL: vp_splat_nxv16i32:
178 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
179 ; CHECK-NEXT: vmv.v.x v8, a0
181 %splat = call <vscale x 16 x i32> @llvm.experimental.vp.splat.nxv16i32(i32 %val, <vscale x 16 x i1> %m, i32 %evl)
182 ret <vscale x 16 x i32> %splat
185 define <vscale x 1 x i64> @vp_splat_nxv1i64(i64 %val, <vscale x 1 x i1> %m, i32 zeroext %evl) {
186 ; RV32-LABEL: vp_splat_nxv1i64:
188 ; RV32-NEXT: addi sp, sp, -16
189 ; RV32-NEXT: .cfi_def_cfa_offset 16
190 ; RV32-NEXT: sw a1, 12(sp)
191 ; RV32-NEXT: sw a0, 8(sp)
192 ; RV32-NEXT: addi a0, sp, 8
193 ; RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
194 ; RV32-NEXT: vlse64.v v8, (a0), zero
195 ; RV32-NEXT: addi sp, sp, 16
198 ; RV64-LABEL: vp_splat_nxv1i64:
200 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
201 ; RV64-NEXT: vmv.v.x v8, a0
203 %splat = call <vscale x 1 x i64> @llvm.experimental.vp.splat.nxv1i64(i64 %val, <vscale x 1 x i1> %m, i32 %evl)
204 ret <vscale x 1 x i64> %splat
207 define <vscale x 2 x i64> @vp_splat_nxv2i64(i64 %val, <vscale x 2 x i1> %m, i32 zeroext %evl) {
208 ; RV32-LABEL: vp_splat_nxv2i64:
210 ; RV32-NEXT: addi sp, sp, -16
211 ; RV32-NEXT: .cfi_def_cfa_offset 16
212 ; RV32-NEXT: sw a1, 12(sp)
213 ; RV32-NEXT: sw a0, 8(sp)
214 ; RV32-NEXT: addi a0, sp, 8
215 ; RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
216 ; RV32-NEXT: vlse64.v v8, (a0), zero
217 ; RV32-NEXT: addi sp, sp, 16
220 ; RV64-LABEL: vp_splat_nxv2i64:
222 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
223 ; RV64-NEXT: vmv.v.x v8, a0
225 %splat = call <vscale x 2 x i64> @llvm.experimental.vp.splat.nxv2i64(i64 %val, <vscale x 2 x i1> %m, i32 %evl)
226 ret <vscale x 2 x i64> %splat
229 define <vscale x 4 x i64> @vp_splat_nxv4i64(i64 %val, <vscale x 4 x i1> %m, i32 zeroext %evl) {
230 ; RV32-LABEL: vp_splat_nxv4i64:
232 ; RV32-NEXT: addi sp, sp, -16
233 ; RV32-NEXT: .cfi_def_cfa_offset 16
234 ; RV32-NEXT: sw a1, 12(sp)
235 ; RV32-NEXT: sw a0, 8(sp)
236 ; RV32-NEXT: addi a0, sp, 8
237 ; RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
238 ; RV32-NEXT: vlse64.v v8, (a0), zero
239 ; RV32-NEXT: addi sp, sp, 16
242 ; RV64-LABEL: vp_splat_nxv4i64:
244 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
245 ; RV64-NEXT: vmv.v.x v8, a0
247 %splat = call <vscale x 4 x i64> @llvm.experimental.vp.splat.nxv4i64(i64 %val, <vscale x 4 x i1> %m, i32 %evl)
248 ret <vscale x 4 x i64> %splat
251 define <vscale x 8 x i64> @vp_splat_nxv8i64(i64 %val, <vscale x 8 x i1> %m, i32 zeroext %evl) {
252 ; RV32-LABEL: vp_splat_nxv8i64:
254 ; RV32-NEXT: addi sp, sp, -16
255 ; RV32-NEXT: .cfi_def_cfa_offset 16
256 ; RV32-NEXT: sw a1, 12(sp)
257 ; RV32-NEXT: sw a0, 8(sp)
258 ; RV32-NEXT: addi a0, sp, 8
259 ; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
260 ; RV32-NEXT: vlse64.v v8, (a0), zero
261 ; RV32-NEXT: addi sp, sp, 16
264 ; RV64-LABEL: vp_splat_nxv8i64:
266 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
267 ; RV64-NEXT: vmv.v.x v8, a0
269 %splat = call <vscale x 8 x i64> @llvm.experimental.vp.splat.nxv8i64(i64 %val, <vscale x 8 x i1> %m, i32 %evl)
270 ret <vscale x 8 x i64> %splat
273 define <vscale x 1 x half> @vp_splat_nxv1f16(half %val, <vscale x 1 x i1> %m, i32 zeroext %evl) {
274 ; CHECK-LABEL: vp_splat_nxv1f16:
276 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
277 ; CHECK-NEXT: vfmv.v.f v8, fa0
279 %splat = call <vscale x 1 x half> @llvm.experimental.vp.splat.nxv1f16(half %val, <vscale x 1 x i1> %m, i32 %evl)
280 ret <vscale x 1 x half> %splat
283 define <vscale x 2 x half> @vp_splat_nxv2f16(half %val, <vscale x 2 x i1> %m, i32 zeroext %evl) {
284 ; CHECK-LABEL: vp_splat_nxv2f16:
286 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
287 ; CHECK-NEXT: vfmv.v.f v8, fa0
289 %splat = call <vscale x 2 x half> @llvm.experimental.vp.splat.nxv2f16(half %val, <vscale x 2 x i1> %m, i32 %evl)
290 ret <vscale x 2 x half> %splat
293 define <vscale x 4 x half> @vp_splat_nxv4f16(half %val, <vscale x 4 x i1> %m, i32 zeroext %evl) {
294 ; CHECK-LABEL: vp_splat_nxv4f16:
296 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
297 ; CHECK-NEXT: vfmv.v.f v8, fa0
299 %splat = call <vscale x 4 x half> @llvm.experimental.vp.splat.nxv4f16(half %val, <vscale x 4 x i1> %m, i32 %evl)
300 ret <vscale x 4 x half> %splat
303 define <vscale x 8 x half> @vp_splat_nxv8f16(half %val, <vscale x 8 x i1> %m, i32 zeroext %evl) {
304 ; CHECK-LABEL: vp_splat_nxv8f16:
306 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
307 ; CHECK-NEXT: vfmv.v.f v8, fa0
309 %splat = call <vscale x 8 x half> @llvm.experimental.vp.splat.nxv8f16(half %val, <vscale x 8 x i1> %m, i32 %evl)
310 ret <vscale x 8 x half> %splat
313 define <vscale x 16 x half> @vp_splat_nxv16f16(half %val, <vscale x 16 x i1> %m, i32 zeroext %evl) {
314 ; CHECK-LABEL: vp_splat_nxv16f16:
316 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
317 ; CHECK-NEXT: vfmv.v.f v8, fa0
319 %splat = call <vscale x 16 x half> @llvm.experimental.vp.splat.nxv16f16(half %val, <vscale x 16 x i1> %m, i32 %evl)
320 ret <vscale x 16 x half> %splat
323 define <vscale x 32 x half> @vp_splat_nxv32f16(half %val, <vscale x 32 x i1> %m, i32 zeroext %evl) {
324 ; CHECK-LABEL: vp_splat_nxv32f16:
326 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
327 ; CHECK-NEXT: vfmv.v.f v8, fa0
329 %splat = call <vscale x 32 x half> @llvm.experimental.vp.splat.nxv32f16(half %val, <vscale x 32 x i1> %m, i32 %evl)
330 ret <vscale x 32 x half> %splat
333 define <vscale x 1 x float> @vp_splat_nxv1f32(float %val, <vscale x 1 x i1> %m, i32 zeroext %evl) {
334 ; CHECK-LABEL: vp_splat_nxv1f32:
336 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
337 ; CHECK-NEXT: vfmv.v.f v8, fa0
339 %splat = call <vscale x 1 x float> @llvm.experimental.vp.splat.nxv1f32(float %val, <vscale x 1 x i1> %m, i32 %evl)
340 ret <vscale x 1 x float> %splat
343 define <vscale x 2 x float> @vp_splat_nxv2f32(float %val, <vscale x 2 x i1> %m, i32 zeroext %evl) {
344 ; CHECK-LABEL: vp_splat_nxv2f32:
346 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
347 ; CHECK-NEXT: vfmv.v.f v8, fa0
349 %splat = call <vscale x 2 x float> @llvm.experimental.vp.splat.nxv2f32(float %val, <vscale x 2 x i1> %m, i32 %evl)
350 ret <vscale x 2 x float> %splat
353 define <vscale x 4 x float> @vp_splat_nxv4f32(float %val, <vscale x 4 x i1> %m, i32 zeroext %evl) {
354 ; CHECK-LABEL: vp_splat_nxv4f32:
356 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
357 ; CHECK-NEXT: vfmv.v.f v8, fa0
359 %splat = call <vscale x 4 x float> @llvm.experimental.vp.splat.nxv4f32(float %val, <vscale x 4 x i1> %m, i32 %evl)
360 ret <vscale x 4 x float> %splat
363 define <vscale x 8 x float> @vp_splat_nxv8f32(float %val, <vscale x 8 x i1> %m, i32 zeroext %evl) {
364 ; CHECK-LABEL: vp_splat_nxv8f32:
366 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
367 ; CHECK-NEXT: vfmv.v.f v8, fa0
369 %splat = call <vscale x 8 x float> @llvm.experimental.vp.splat.nxv8f32(float %val, <vscale x 8 x i1> %m, i32 %evl)
370 ret <vscale x 8 x float> %splat
373 define <vscale x 16 x float> @vp_splat_nxv16f32(float %val, <vscale x 16 x i1> %m, i32 zeroext %evl) {
374 ; CHECK-LABEL: vp_splat_nxv16f32:
376 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
377 ; CHECK-NEXT: vfmv.v.f v8, fa0
379 %splat = call <vscale x 16 x float> @llvm.experimental.vp.splat.nxv16f32(float %val, <vscale x 16 x i1> %m, i32 %evl)
380 ret <vscale x 16 x float> %splat
383 define <vscale x 1 x double> @vp_splat_nxv1f64(double %val, <vscale x 1 x i1> %m, i32 zeroext %evl) {
384 ; CHECK-LABEL: vp_splat_nxv1f64:
386 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
387 ; CHECK-NEXT: vfmv.v.f v8, fa0
389 %splat = call <vscale x 1 x double> @llvm.experimental.vp.splat.nxv1f64(double %val, <vscale x 1 x i1> %m, i32 %evl)
390 ret <vscale x 1 x double> %splat
393 define <vscale x 2 x double> @vp_splat_nxv2f64(double %val, <vscale x 2 x i1> %m, i32 zeroext %evl) {
394 ; CHECK-LABEL: vp_splat_nxv2f64:
396 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
397 ; CHECK-NEXT: vfmv.v.f v8, fa0
399 %splat = call <vscale x 2 x double> @llvm.experimental.vp.splat.nxv2f64(double %val, <vscale x 2 x i1> %m, i32 %evl)
400 ret <vscale x 2 x double> %splat
403 define <vscale x 4 x double> @vp_splat_nxv4f64(double %val, <vscale x 4 x i1> %m, i32 zeroext %evl) {
404 ; CHECK-LABEL: vp_splat_nxv4f64:
406 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
407 ; CHECK-NEXT: vfmv.v.f v8, fa0
409 %splat = call <vscale x 4 x double> @llvm.experimental.vp.splat.nxv4f64(double %val, <vscale x 4 x i1> %m, i32 %evl)
410 ret <vscale x 4 x double> %splat
413 define <vscale x 8 x double> @vp_splat_nxv8f64(double %val, <vscale x 8 x i1> %m, i32 zeroext %evl) {
414 ; CHECK-LABEL: vp_splat_nxv8f64:
416 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
417 ; CHECK-NEXT: vfmv.v.f v8, fa0
419 %splat = call <vscale x 8 x double> @llvm.experimental.vp.splat.nxv8f64(double %val, <vscale x 8 x i1> %m, i32 %evl)
420 ret <vscale x 8 x double> %splat
423 define <vscale x 16 x i31> @vp_splat_nxv16i31(i31 %val, <vscale x 16 x i1> %m, i32 zeroext %evl) {
424 ; CHECK-LABEL: vp_splat_nxv16i31:
426 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
427 ; CHECK-NEXT: vmv.v.x v8, a0
429 %splat = call <vscale x 16 x i31> @llvm.experimental.vp.splat.nxv16i31(i31 %val, <vscale x 16 x i1> %m, i32 %evl)
430 ret <vscale x 16 x i31> %splat
433 define <vscale x 15 x i32> @vp_splat_nxv15i32(i32 %val, <vscale x 15 x i1> %m, i32 zeroext %evl) {
434 ; CHECK-LABEL: vp_splat_nxv15i32:
436 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
437 ; CHECK-NEXT: vmv.v.x v8, a0
439 %splat = call <vscale x 15 x i32> @llvm.experimental.vp.splat.nxv15i32(i32 %val, <vscale x 15 x i1> %m, i32 %evl)
440 ret <vscale x 15 x i32> %splat
444 define <vscale x 32 x i32> @vp_splat_nxv32i32(i32 %val, <vscale x 32 x i1> %m, i32 zeroext %evl) {
445 ; CHECK-LABEL: vp_splat_nxv32i32:
447 ; CHECK-NEXT: csrr a2, vlenb
448 ; CHECK-NEXT: slli a2, a2, 1
449 ; CHECK-NEXT: sub a3, a1, a2
450 ; CHECK-NEXT: sltu a4, a1, a3
451 ; CHECK-NEXT: addi a4, a4, -1
452 ; CHECK-NEXT: and a3, a4, a3
453 ; CHECK-NEXT: vsetvli zero, a3, e32, m8, ta, ma
454 ; CHECK-NEXT: vmv.v.x v16, a0
455 ; CHECK-NEXT: bltu a1, a2, .LBB39_2
456 ; CHECK-NEXT: # %bb.1:
457 ; CHECK-NEXT: mv a1, a2
458 ; CHECK-NEXT: .LBB39_2:
459 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
460 ; CHECK-NEXT: vmv.v.x v8, a0
462 %splat = call <vscale x 32 x i32> @llvm.experimental.vp.splat.nxv32i32(i32 %val, <vscale x 32 x i1> %m, i32 %evl)
463 ret <vscale x 32 x i32> %splat