Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfabs-vp.ll
blob0f7e3f1e0ea5a2163132650f87663c83c61d273b
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
6 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=ilp32d \
7 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
8 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=lp64d \
9 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
11 declare <vscale x 1 x half> @llvm.vp.fabs.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
13 define <vscale x 1 x half> @vfabs_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14 ; ZVFH-LABEL: vfabs_vv_nxv1f16:
15 ; ZVFH:       # %bb.0:
16 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
17 ; ZVFH-NEXT:    vfabs.v v8, v8, v0.t
18 ; ZVFH-NEXT:    ret
20 ; ZVFHMIN-LABEL: vfabs_vv_nxv1f16:
21 ; ZVFHMIN:       # %bb.0:
22 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
23 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
24 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
25 ; ZVFHMIN-NEXT:    vfabs.v v9, v9, v0.t
26 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
27 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
28 ; ZVFHMIN-NEXT:    ret
29   %v = call <vscale x 1 x half> @llvm.vp.fabs.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl)
30   ret <vscale x 1 x half> %v
33 define <vscale x 1 x half> @vfabs_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, i32 zeroext %evl) {
34 ; ZVFH-LABEL: vfabs_vv_nxv1f16_unmasked:
35 ; ZVFH:       # %bb.0:
36 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
37 ; ZVFH-NEXT:    vfabs.v v8, v8
38 ; ZVFH-NEXT:    ret
40 ; ZVFHMIN-LABEL: vfabs_vv_nxv1f16_unmasked:
41 ; ZVFHMIN:       # %bb.0:
42 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
43 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
44 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
45 ; ZVFHMIN-NEXT:    vfabs.v v9, v9
46 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
47 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
48 ; ZVFHMIN-NEXT:    ret
49   %v = call <vscale x 1 x half> @llvm.vp.fabs.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
50   ret <vscale x 1 x half> %v
53 declare <vscale x 2 x half> @llvm.vp.fabs.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
55 define <vscale x 2 x half> @vfabs_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
56 ; ZVFH-LABEL: vfabs_vv_nxv2f16:
57 ; ZVFH:       # %bb.0:
58 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
59 ; ZVFH-NEXT:    vfabs.v v8, v8, v0.t
60 ; ZVFH-NEXT:    ret
62 ; ZVFHMIN-LABEL: vfabs_vv_nxv2f16:
63 ; ZVFHMIN:       # %bb.0:
64 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
65 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
66 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
67 ; ZVFHMIN-NEXT:    vfabs.v v9, v9, v0.t
68 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
69 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
70 ; ZVFHMIN-NEXT:    ret
71   %v = call <vscale x 2 x half> @llvm.vp.fabs.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
72   ret <vscale x 2 x half> %v
75 define <vscale x 2 x half> @vfabs_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) {
76 ; ZVFH-LABEL: vfabs_vv_nxv2f16_unmasked:
77 ; ZVFH:       # %bb.0:
78 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
79 ; ZVFH-NEXT:    vfabs.v v8, v8
80 ; ZVFH-NEXT:    ret
82 ; ZVFHMIN-LABEL: vfabs_vv_nxv2f16_unmasked:
83 ; ZVFHMIN:       # %bb.0:
84 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
85 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
86 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
87 ; ZVFHMIN-NEXT:    vfabs.v v9, v9
88 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
89 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
90 ; ZVFHMIN-NEXT:    ret
91   %v = call <vscale x 2 x half> @llvm.vp.fabs.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
92   ret <vscale x 2 x half> %v
95 declare <vscale x 4 x half> @llvm.vp.fabs.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
97 define <vscale x 4 x half> @vfabs_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
98 ; ZVFH-LABEL: vfabs_vv_nxv4f16:
99 ; ZVFH:       # %bb.0:
100 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
101 ; ZVFH-NEXT:    vfabs.v v8, v8, v0.t
102 ; ZVFH-NEXT:    ret
104 ; ZVFHMIN-LABEL: vfabs_vv_nxv4f16:
105 ; ZVFHMIN:       # %bb.0:
106 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
107 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
108 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
109 ; ZVFHMIN-NEXT:    vfabs.v v10, v10, v0.t
110 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
111 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
112 ; ZVFHMIN-NEXT:    ret
113   %v = call <vscale x 4 x half> @llvm.vp.fabs.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl)
114   ret <vscale x 4 x half> %v
117 define <vscale x 4 x half> @vfabs_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, i32 zeroext %evl) {
118 ; ZVFH-LABEL: vfabs_vv_nxv4f16_unmasked:
119 ; ZVFH:       # %bb.0:
120 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
121 ; ZVFH-NEXT:    vfabs.v v8, v8
122 ; ZVFH-NEXT:    ret
124 ; ZVFHMIN-LABEL: vfabs_vv_nxv4f16_unmasked:
125 ; ZVFHMIN:       # %bb.0:
126 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
127 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
128 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
129 ; ZVFHMIN-NEXT:    vfabs.v v10, v10
130 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
131 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
132 ; ZVFHMIN-NEXT:    ret
133   %v = call <vscale x 4 x half> @llvm.vp.fabs.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
134   ret <vscale x 4 x half> %v
137 declare <vscale x 8 x half> @llvm.vp.fabs.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
139 define <vscale x 8 x half> @vfabs_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
140 ; ZVFH-LABEL: vfabs_vv_nxv8f16:
141 ; ZVFH:       # %bb.0:
142 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
143 ; ZVFH-NEXT:    vfabs.v v8, v8, v0.t
144 ; ZVFH-NEXT:    ret
146 ; ZVFHMIN-LABEL: vfabs_vv_nxv8f16:
147 ; ZVFHMIN:       # %bb.0:
148 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
149 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
150 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
151 ; ZVFHMIN-NEXT:    vfabs.v v12, v12, v0.t
152 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
153 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
154 ; ZVFHMIN-NEXT:    ret
155   %v = call <vscale x 8 x half> @llvm.vp.fabs.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl)
156   ret <vscale x 8 x half> %v
159 define <vscale x 8 x half> @vfabs_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, i32 zeroext %evl) {
160 ; ZVFH-LABEL: vfabs_vv_nxv8f16_unmasked:
161 ; ZVFH:       # %bb.0:
162 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
163 ; ZVFH-NEXT:    vfabs.v v8, v8
164 ; ZVFH-NEXT:    ret
166 ; ZVFHMIN-LABEL: vfabs_vv_nxv8f16_unmasked:
167 ; ZVFHMIN:       # %bb.0:
168 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
169 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
170 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
171 ; ZVFHMIN-NEXT:    vfabs.v v12, v12
172 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
173 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
174 ; ZVFHMIN-NEXT:    ret
175   %v = call <vscale x 8 x half> @llvm.vp.fabs.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
176   ret <vscale x 8 x half> %v
179 declare <vscale x 16 x half> @llvm.vp.fabs.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
181 define <vscale x 16 x half> @vfabs_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
182 ; ZVFH-LABEL: vfabs_vv_nxv16f16:
183 ; ZVFH:       # %bb.0:
184 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
185 ; ZVFH-NEXT:    vfabs.v v8, v8, v0.t
186 ; ZVFH-NEXT:    ret
188 ; ZVFHMIN-LABEL: vfabs_vv_nxv16f16:
189 ; ZVFHMIN:       # %bb.0:
190 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
191 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
192 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
193 ; ZVFHMIN-NEXT:    vfabs.v v16, v16, v0.t
194 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
195 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
196 ; ZVFHMIN-NEXT:    ret
197   %v = call <vscale x 16 x half> @llvm.vp.fabs.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl)
198   ret <vscale x 16 x half> %v
201 define <vscale x 16 x half> @vfabs_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, i32 zeroext %evl) {
202 ; ZVFH-LABEL: vfabs_vv_nxv16f16_unmasked:
203 ; ZVFH:       # %bb.0:
204 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
205 ; ZVFH-NEXT:    vfabs.v v8, v8
206 ; ZVFH-NEXT:    ret
208 ; ZVFHMIN-LABEL: vfabs_vv_nxv16f16_unmasked:
209 ; ZVFHMIN:       # %bb.0:
210 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
211 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
212 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
213 ; ZVFHMIN-NEXT:    vfabs.v v16, v16
214 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
215 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
216 ; ZVFHMIN-NEXT:    ret
217   %v = call <vscale x 16 x half> @llvm.vp.fabs.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
218   ret <vscale x 16 x half> %v
221 declare <vscale x 32 x half> @llvm.vp.fabs.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
223 define <vscale x 32 x half> @vfabs_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
224 ; ZVFH-LABEL: vfabs_vv_nxv32f16:
225 ; ZVFH:       # %bb.0:
226 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
227 ; ZVFH-NEXT:    vfabs.v v8, v8, v0.t
228 ; ZVFH-NEXT:    ret
230 ; ZVFHMIN-LABEL: vfabs_vv_nxv32f16:
231 ; ZVFHMIN:       # %bb.0:
232 ; ZVFHMIN-NEXT:    vmv1r.v v16, v0
233 ; ZVFHMIN-NEXT:    csrr a2, vlenb
234 ; ZVFHMIN-NEXT:    slli a1, a2, 1
235 ; ZVFHMIN-NEXT:    sub a3, a0, a1
236 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
237 ; ZVFHMIN-NEXT:    addi a4, a4, -1
238 ; ZVFHMIN-NEXT:    and a3, a4, a3
239 ; ZVFHMIN-NEXT:    srli a2, a2, 2
240 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
241 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
242 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
243 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
244 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
245 ; ZVFHMIN-NEXT:    vfabs.v v24, v24, v0.t
246 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
247 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24
248 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB10_2
249 ; ZVFHMIN-NEXT:  # %bb.1:
250 ; ZVFHMIN-NEXT:    mv a0, a1
251 ; ZVFHMIN-NEXT:  .LBB10_2:
252 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8
253 ; ZVFHMIN-NEXT:    vmv1r.v v0, v16
254 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
255 ; ZVFHMIN-NEXT:    vfabs.v v16, v24, v0.t
256 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
257 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
258 ; ZVFHMIN-NEXT:    ret
259   %v = call <vscale x 32 x half> @llvm.vp.fabs.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl)
260   ret <vscale x 32 x half> %v
263 define <vscale x 32 x half> @vfabs_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, i32 zeroext %evl) {
264 ; ZVFH-LABEL: vfabs_vv_nxv32f16_unmasked:
265 ; ZVFH:       # %bb.0:
266 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
267 ; ZVFH-NEXT:    vfabs.v v8, v8
268 ; ZVFH-NEXT:    ret
270 ; ZVFHMIN-LABEL: vfabs_vv_nxv32f16_unmasked:
271 ; ZVFHMIN:       # %bb.0:
272 ; ZVFHMIN-NEXT:    csrr a2, vlenb
273 ; ZVFHMIN-NEXT:    slli a1, a2, 1
274 ; ZVFHMIN-NEXT:    sub a3, a0, a1
275 ; ZVFHMIN-NEXT:    sltu a4, a0, a3
276 ; ZVFHMIN-NEXT:    addi a4, a4, -1
277 ; ZVFHMIN-NEXT:    and a3, a4, a3
278 ; ZVFHMIN-NEXT:    srli a2, a2, 2
279 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, m4, ta, ma
280 ; ZVFHMIN-NEXT:    vmset.m v16
281 ; ZVFHMIN-NEXT:    vsetvli a4, zero, e8, mf2, ta, ma
282 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v16, a2
283 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
284 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12
285 ; ZVFHMIN-NEXT:    vsetvli zero, a3, e32, m8, ta, ma
286 ; ZVFHMIN-NEXT:    vfabs.v v16, v16, v0.t
287 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
288 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16
289 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB11_2
290 ; ZVFHMIN-NEXT:  # %bb.1:
291 ; ZVFHMIN-NEXT:    mv a0, a1
292 ; ZVFHMIN-NEXT:  .LBB11_2:
293 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
294 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
295 ; ZVFHMIN-NEXT:    vfabs.v v16, v16
296 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
297 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16
298 ; ZVFHMIN-NEXT:    ret
299   %v = call <vscale x 32 x half> @llvm.vp.fabs.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
300   ret <vscale x 32 x half> %v
303 declare <vscale x 1 x float> @llvm.vp.fabs.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
305 define <vscale x 1 x float> @vfabs_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
306 ; CHECK-LABEL: vfabs_vv_nxv1f32:
307 ; CHECK:       # %bb.0:
308 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
309 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
310 ; CHECK-NEXT:    ret
311   %v = call <vscale x 1 x float> @llvm.vp.fabs.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl)
312   ret <vscale x 1 x float> %v
315 define <vscale x 1 x float> @vfabs_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, i32 zeroext %evl) {
316 ; CHECK-LABEL: vfabs_vv_nxv1f32_unmasked:
317 ; CHECK:       # %bb.0:
318 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
319 ; CHECK-NEXT:    vfabs.v v8, v8
320 ; CHECK-NEXT:    ret
321   %v = call <vscale x 1 x float> @llvm.vp.fabs.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
322   ret <vscale x 1 x float> %v
325 declare <vscale x 2 x float> @llvm.vp.fabs.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
327 define <vscale x 2 x float> @vfabs_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
328 ; CHECK-LABEL: vfabs_vv_nxv2f32:
329 ; CHECK:       # %bb.0:
330 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
331 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
332 ; CHECK-NEXT:    ret
333   %v = call <vscale x 2 x float> @llvm.vp.fabs.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
334   ret <vscale x 2 x float> %v
337 define <vscale x 2 x float> @vfabs_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) {
338 ; CHECK-LABEL: vfabs_vv_nxv2f32_unmasked:
339 ; CHECK:       # %bb.0:
340 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
341 ; CHECK-NEXT:    vfabs.v v8, v8
342 ; CHECK-NEXT:    ret
343   %v = call <vscale x 2 x float> @llvm.vp.fabs.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
344   ret <vscale x 2 x float> %v
347 declare <vscale x 4 x float> @llvm.vp.fabs.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
349 define <vscale x 4 x float> @vfabs_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
350 ; CHECK-LABEL: vfabs_vv_nxv4f32:
351 ; CHECK:       # %bb.0:
352 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
353 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
354 ; CHECK-NEXT:    ret
355   %v = call <vscale x 4 x float> @llvm.vp.fabs.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl)
356   ret <vscale x 4 x float> %v
359 define <vscale x 4 x float> @vfabs_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, i32 zeroext %evl) {
360 ; CHECK-LABEL: vfabs_vv_nxv4f32_unmasked:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
363 ; CHECK-NEXT:    vfabs.v v8, v8
364 ; CHECK-NEXT:    ret
365   %v = call <vscale x 4 x float> @llvm.vp.fabs.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
366   ret <vscale x 4 x float> %v
369 declare <vscale x 8 x float> @llvm.vp.fabs.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
371 define <vscale x 8 x float> @vfabs_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
372 ; CHECK-LABEL: vfabs_vv_nxv8f32:
373 ; CHECK:       # %bb.0:
374 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
375 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
376 ; CHECK-NEXT:    ret
377   %v = call <vscale x 8 x float> @llvm.vp.fabs.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl)
378   ret <vscale x 8 x float> %v
381 define <vscale x 8 x float> @vfabs_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, i32 zeroext %evl) {
382 ; CHECK-LABEL: vfabs_vv_nxv8f32_unmasked:
383 ; CHECK:       # %bb.0:
384 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
385 ; CHECK-NEXT:    vfabs.v v8, v8
386 ; CHECK-NEXT:    ret
387   %v = call <vscale x 8 x float> @llvm.vp.fabs.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
388   ret <vscale x 8 x float> %v
391 declare <vscale x 16 x float> @llvm.vp.fabs.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
393 define <vscale x 16 x float> @vfabs_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
394 ; CHECK-LABEL: vfabs_vv_nxv16f32:
395 ; CHECK:       # %bb.0:
396 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
397 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
398 ; CHECK-NEXT:    ret
399   %v = call <vscale x 16 x float> @llvm.vp.fabs.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl)
400   ret <vscale x 16 x float> %v
403 define <vscale x 16 x float> @vfabs_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, i32 zeroext %evl) {
404 ; CHECK-LABEL: vfabs_vv_nxv16f32_unmasked:
405 ; CHECK:       # %bb.0:
406 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
407 ; CHECK-NEXT:    vfabs.v v8, v8
408 ; CHECK-NEXT:    ret
409   %v = call <vscale x 16 x float> @llvm.vp.fabs.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
410   ret <vscale x 16 x float> %v
413 declare <vscale x 1 x double> @llvm.vp.fabs.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
415 define <vscale x 1 x double> @vfabs_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
416 ; CHECK-LABEL: vfabs_vv_nxv1f64:
417 ; CHECK:       # %bb.0:
418 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
419 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
420 ; CHECK-NEXT:    ret
421   %v = call <vscale x 1 x double> @llvm.vp.fabs.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl)
422   ret <vscale x 1 x double> %v
425 define <vscale x 1 x double> @vfabs_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, i32 zeroext %evl) {
426 ; CHECK-LABEL: vfabs_vv_nxv1f64_unmasked:
427 ; CHECK:       # %bb.0:
428 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
429 ; CHECK-NEXT:    vfabs.v v8, v8
430 ; CHECK-NEXT:    ret
431   %v = call <vscale x 1 x double> @llvm.vp.fabs.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
432   ret <vscale x 1 x double> %v
435 declare <vscale x 2 x double> @llvm.vp.fabs.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
437 define <vscale x 2 x double> @vfabs_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
438 ; CHECK-LABEL: vfabs_vv_nxv2f64:
439 ; CHECK:       # %bb.0:
440 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
441 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
442 ; CHECK-NEXT:    ret
443   %v = call <vscale x 2 x double> @llvm.vp.fabs.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
444   ret <vscale x 2 x double> %v
447 define <vscale x 2 x double> @vfabs_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) {
448 ; CHECK-LABEL: vfabs_vv_nxv2f64_unmasked:
449 ; CHECK:       # %bb.0:
450 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
451 ; CHECK-NEXT:    vfabs.v v8, v8
452 ; CHECK-NEXT:    ret
453   %v = call <vscale x 2 x double> @llvm.vp.fabs.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
454   ret <vscale x 2 x double> %v
457 declare <vscale x 4 x double> @llvm.vp.fabs.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
459 define <vscale x 4 x double> @vfabs_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
460 ; CHECK-LABEL: vfabs_vv_nxv4f64:
461 ; CHECK:       # %bb.0:
462 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
463 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
464 ; CHECK-NEXT:    ret
465   %v = call <vscale x 4 x double> @llvm.vp.fabs.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl)
466   ret <vscale x 4 x double> %v
469 define <vscale x 4 x double> @vfabs_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, i32 zeroext %evl) {
470 ; CHECK-LABEL: vfabs_vv_nxv4f64_unmasked:
471 ; CHECK:       # %bb.0:
472 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
473 ; CHECK-NEXT:    vfabs.v v8, v8
474 ; CHECK-NEXT:    ret
475   %v = call <vscale x 4 x double> @llvm.vp.fabs.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
476   ret <vscale x 4 x double> %v
479 declare <vscale x 7 x double> @llvm.vp.fabs.nxv7f64(<vscale x 7 x double>, <vscale x 7 x i1>, i32)
481 define <vscale x 7 x double> @vfabs_vv_nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> %m, i32 zeroext %evl) {
482 ; CHECK-LABEL: vfabs_vv_nxv7f64:
483 ; CHECK:       # %bb.0:
484 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
485 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
486 ; CHECK-NEXT:    ret
487   %v = call <vscale x 7 x double> @llvm.vp.fabs.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> %m, i32 %evl)
488   ret <vscale x 7 x double> %v
491 define <vscale x 7 x double> @vfabs_vv_nxv7f64_unmasked(<vscale x 7 x double> %va, i32 zeroext %evl) {
492 ; CHECK-LABEL: vfabs_vv_nxv7f64_unmasked:
493 ; CHECK:       # %bb.0:
494 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
495 ; CHECK-NEXT:    vfabs.v v8, v8
496 ; CHECK-NEXT:    ret
497   %v = call <vscale x 7 x double> @llvm.vp.fabs.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x i1> splat (i1 true), i32 %evl)
498   ret <vscale x 7 x double> %v
501 declare <vscale x 8 x double> @llvm.vp.fabs.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
503 define <vscale x 8 x double> @vfabs_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
504 ; CHECK-LABEL: vfabs_vv_nxv8f64:
505 ; CHECK:       # %bb.0:
506 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
507 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
508 ; CHECK-NEXT:    ret
509   %v = call <vscale x 8 x double> @llvm.vp.fabs.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl)
510   ret <vscale x 8 x double> %v
513 define <vscale x 8 x double> @vfabs_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, i32 zeroext %evl) {
514 ; CHECK-LABEL: vfabs_vv_nxv8f64_unmasked:
515 ; CHECK:       # %bb.0:
516 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
517 ; CHECK-NEXT:    vfabs.v v8, v8
518 ; CHECK-NEXT:    ret
519   %v = call <vscale x 8 x double> @llvm.vp.fabs.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
520   ret <vscale x 8 x double> %v
523 ; Test splitting.
524 declare <vscale x 16 x double> @llvm.vp.fabs.nxv16f64(<vscale x 16 x double>, <vscale x 16 x i1>, i32)
526 define <vscale x 16 x double> @vfabs_vv_nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
527 ; CHECK-LABEL: vfabs_vv_nxv16f64:
528 ; CHECK:       # %bb.0:
529 ; CHECK-NEXT:    vmv1r.v v24, v0
530 ; CHECK-NEXT:    csrr a1, vlenb
531 ; CHECK-NEXT:    srli a2, a1, 3
532 ; CHECK-NEXT:    vsetvli a3, zero, e8, mf4, ta, ma
533 ; CHECK-NEXT:    vslidedown.vx v0, v0, a2
534 ; CHECK-NEXT:    sub a2, a0, a1
535 ; CHECK-NEXT:    sltu a3, a0, a2
536 ; CHECK-NEXT:    addi a3, a3, -1
537 ; CHECK-NEXT:    and a2, a3, a2
538 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
539 ; CHECK-NEXT:    vfabs.v v16, v16, v0.t
540 ; CHECK-NEXT:    bltu a0, a1, .LBB32_2
541 ; CHECK-NEXT:  # %bb.1:
542 ; CHECK-NEXT:    mv a0, a1
543 ; CHECK-NEXT:  .LBB32_2:
544 ; CHECK-NEXT:    vmv1r.v v0, v24
545 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
546 ; CHECK-NEXT:    vfabs.v v8, v8, v0.t
547 ; CHECK-NEXT:    ret
548   %v = call <vscale x 16 x double> @llvm.vp.fabs.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> %m, i32 %evl)
549   ret <vscale x 16 x double> %v
552 define <vscale x 16 x double> @vfabs_vv_nxv16f64_unmasked(<vscale x 16 x double> %va, i32 zeroext %evl) {
553 ; CHECK-LABEL: vfabs_vv_nxv16f64_unmasked:
554 ; CHECK:       # %bb.0:
555 ; CHECK-NEXT:    csrr a1, vlenb
556 ; CHECK-NEXT:    sub a2, a0, a1
557 ; CHECK-NEXT:    sltu a3, a0, a2
558 ; CHECK-NEXT:    addi a3, a3, -1
559 ; CHECK-NEXT:    and a2, a3, a2
560 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
561 ; CHECK-NEXT:    vfabs.v v16, v16
562 ; CHECK-NEXT:    bltu a0, a1, .LBB33_2
563 ; CHECK-NEXT:  # %bb.1:
564 ; CHECK-NEXT:    mv a0, a1
565 ; CHECK-NEXT:  .LBB33_2:
566 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
567 ; CHECK-NEXT:    vfabs.v v8, v8
568 ; CHECK-NEXT:    ret
569   %v = call <vscale x 16 x double> @llvm.vp.fabs.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
570   ret <vscale x 16 x double> %v