Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vp-splat.ll
blob5fbdefda9f40289085ac4d1a2e162a619e4447fa
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:
7 ; CHECK:       # %bb.0:
8 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
9 ; CHECK-NEXT:    vmv.v.x v8, a0
10 ; CHECK-NEXT:    ret
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:
17 ; CHECK:       # %bb.0:
18 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
19 ; CHECK-NEXT:    vmv.v.x v8, a0
20 ; CHECK-NEXT:    ret
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:
27 ; CHECK:       # %bb.0:
28 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
29 ; CHECK-NEXT:    vmv.v.x v8, a0
30 ; CHECK-NEXT:    ret
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:
37 ; CHECK:       # %bb.0:
38 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
39 ; CHECK-NEXT:    vmv.v.x v8, a0
40 ; CHECK-NEXT:    ret
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:
47 ; CHECK:       # %bb.0:
48 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
49 ; CHECK-NEXT:    vmv.v.x v8, a0
50 ; CHECK-NEXT:    ret
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:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
59 ; CHECK-NEXT:    vmv.v.x v8, a0
60 ; CHECK-NEXT:    ret
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:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
69 ; CHECK-NEXT:    vmv.v.x v8, a0
70 ; CHECK-NEXT:    ret
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:
77 ; CHECK:       # %bb.0:
78 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
79 ; CHECK-NEXT:    vmv.v.x v8, a0
80 ; CHECK-NEXT:    ret
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:
87 ; CHECK:       # %bb.0:
88 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
89 ; CHECK-NEXT:    vmv.v.x v8, a0
90 ; CHECK-NEXT:    ret
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:
97 ; CHECK:       # %bb.0:
98 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
99 ; CHECK-NEXT:    vmv.v.x v8, a0
100 ; CHECK-NEXT:    ret
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:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
109 ; CHECK-NEXT:    vmv.v.x v8, a0
110 ; CHECK-NEXT:    ret
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:
117 ; CHECK:       # %bb.0:
118 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
119 ; CHECK-NEXT:    vmv.v.x v8, a0
120 ; CHECK-NEXT:    ret
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:
127 ; CHECK:       # %bb.0:
128 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
129 ; CHECK-NEXT:    vmv.v.x v8, a0
130 ; CHECK-NEXT:    ret
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:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
139 ; CHECK-NEXT:    vmv.v.x v8, a0
140 ; CHECK-NEXT:    ret
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:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
149 ; CHECK-NEXT:    vmv.v.x v8, a0
150 ; CHECK-NEXT:    ret
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:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
159 ; CHECK-NEXT:    vmv.v.x v8, a0
160 ; CHECK-NEXT:    ret
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:
167 ; CHECK:       # %bb.0:
168 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
169 ; CHECK-NEXT:    vmv.v.x v8, a0
170 ; CHECK-NEXT:    ret
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:
177 ; CHECK:       # %bb.0:
178 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
179 ; CHECK-NEXT:    vmv.v.x v8, a0
180 ; CHECK-NEXT:    ret
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:
187 ; RV32:       # %bb.0:
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
196 ; RV32-NEXT:    ret
198 ; RV64-LABEL: vp_splat_nxv1i64:
199 ; RV64:       # %bb.0:
200 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
201 ; RV64-NEXT:    vmv.v.x v8, a0
202 ; RV64-NEXT:    ret
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:
209 ; RV32:       # %bb.0:
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
218 ; RV32-NEXT:    ret
220 ; RV64-LABEL: vp_splat_nxv2i64:
221 ; RV64:       # %bb.0:
222 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
223 ; RV64-NEXT:    vmv.v.x v8, a0
224 ; RV64-NEXT:    ret
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:
231 ; RV32:       # %bb.0:
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
240 ; RV32-NEXT:    ret
242 ; RV64-LABEL: vp_splat_nxv4i64:
243 ; RV64:       # %bb.0:
244 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
245 ; RV64-NEXT:    vmv.v.x v8, a0
246 ; RV64-NEXT:    ret
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:
253 ; RV32:       # %bb.0:
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
262 ; RV32-NEXT:    ret
264 ; RV64-LABEL: vp_splat_nxv8i64:
265 ; RV64:       # %bb.0:
266 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
267 ; RV64-NEXT:    vmv.v.x v8, a0
268 ; RV64-NEXT:    ret
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:
275 ; CHECK:       # %bb.0:
276 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
277 ; CHECK-NEXT:    vfmv.v.f v8, fa0
278 ; CHECK-NEXT:    ret
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:
285 ; CHECK:       # %bb.0:
286 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
287 ; CHECK-NEXT:    vfmv.v.f v8, fa0
288 ; CHECK-NEXT:    ret
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:
295 ; CHECK:       # %bb.0:
296 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
297 ; CHECK-NEXT:    vfmv.v.f v8, fa0
298 ; CHECK-NEXT:    ret
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:
305 ; CHECK:       # %bb.0:
306 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
307 ; CHECK-NEXT:    vfmv.v.f v8, fa0
308 ; CHECK-NEXT:    ret
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:
315 ; CHECK:       # %bb.0:
316 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
317 ; CHECK-NEXT:    vfmv.v.f v8, fa0
318 ; CHECK-NEXT:    ret
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:
325 ; CHECK:       # %bb.0:
326 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
327 ; CHECK-NEXT:    vfmv.v.f v8, fa0
328 ; CHECK-NEXT:    ret
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:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
337 ; CHECK-NEXT:    vfmv.v.f v8, fa0
338 ; CHECK-NEXT:    ret
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:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
347 ; CHECK-NEXT:    vfmv.v.f v8, fa0
348 ; CHECK-NEXT:    ret
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:
355 ; CHECK:       # %bb.0:
356 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
357 ; CHECK-NEXT:    vfmv.v.f v8, fa0
358 ; CHECK-NEXT:    ret
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:
365 ; CHECK:       # %bb.0:
366 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
367 ; CHECK-NEXT:    vfmv.v.f v8, fa0
368 ; CHECK-NEXT:    ret
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:
375 ; CHECK:       # %bb.0:
376 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
377 ; CHECK-NEXT:    vfmv.v.f v8, fa0
378 ; CHECK-NEXT:    ret
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:
385 ; CHECK:       # %bb.0:
386 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
387 ; CHECK-NEXT:    vfmv.v.f v8, fa0
388 ; CHECK-NEXT:    ret
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:
395 ; CHECK:       # %bb.0:
396 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
397 ; CHECK-NEXT:    vfmv.v.f v8, fa0
398 ; CHECK-NEXT:    ret
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:
405 ; CHECK:       # %bb.0:
406 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
407 ; CHECK-NEXT:    vfmv.v.f v8, fa0
408 ; CHECK-NEXT:    ret
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:
415 ; CHECK:       # %bb.0:
416 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
417 ; CHECK-NEXT:    vfmv.v.f v8, fa0
418 ; CHECK-NEXT:    ret
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:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
427 ; CHECK-NEXT:    vmv.v.x v8, a0
428 ; CHECK-NEXT:    ret
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:
435 ; CHECK:       # %bb.0:
436 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
437 ; CHECK-NEXT:    vmv.v.x v8, a0
438 ; CHECK-NEXT:    ret
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
443 ; Split case.
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:
446 ; CHECK:       # %bb.0:
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
461 ; CHECK-NEXT:    ret
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