[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfwnmsac-vp.ll
blob4956da531c8ca78f25c9e6c5efcd34da1b0c16ba
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
6 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=ilp32d \
7 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
8 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=lp64d \
9 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
11 declare <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32)
12 declare <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
13 declare <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
15 define <vscale x 1 x float> @vfnmsac_vv_nxv1f32(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
16 ; ZVFH-LABEL: vfnmsac_vv_nxv1f32:
17 ; ZVFH:       # %bb.0:
18 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
19 ; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t
20 ; ZVFH-NEXT:    vmv1r.v v8, v10
21 ; ZVFH-NEXT:    ret
23 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv1f32:
24 ; ZVFHMIN:       # %bb.0:
25 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
26 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
27 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
28 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
29 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v10, v0.t
30 ; ZVFHMIN-NEXT:    ret
31   %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)
32   %bext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
33   %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> %m, i32 %evl)
34   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %bext, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
35   ret <vscale x 1 x float> %v
38 define <vscale x 1 x float> @vfnmsac_vv_nxv1f32_unmasked(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
39 ; ZVFH-LABEL: vfnmsac_vv_nxv1f32_unmasked:
40 ; ZVFH:       # %bb.0:
41 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
42 ; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9
43 ; ZVFH-NEXT:    vmv1r.v v8, v10
44 ; ZVFH-NEXT:    ret
46 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv1f32_unmasked:
47 ; ZVFHMIN:       # %bb.0:
48 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
49 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
50 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9
51 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
52 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v10
53 ; ZVFHMIN-NEXT:    ret
54   %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
55   %bext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
56   %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
57   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %bext, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
58   ret <vscale x 1 x float> %v
61 define <vscale x 1 x float> @vfnmsac_vf_nxv1f32(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
62 ; ZVFH-LABEL: vfnmsac_vf_nxv1f32:
63 ; ZVFH:       # %bb.0:
64 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
65 ; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t
66 ; ZVFH-NEXT:    vmv1r.v v8, v9
67 ; ZVFH-NEXT:    ret
69 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv1f32:
70 ; ZVFHMIN:       # %bb.0:
71 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
72 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
73 ; ZVFHMIN-NEXT:    vmv.v.x v10, a1
74 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
75 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
76 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
77 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v9, v0.t
78 ; ZVFHMIN-NEXT:    ret
79   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
80   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
81   %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)
82   %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
83   %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> %m, i32 %evl)
84   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %vbext, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
85   ret <vscale x 1 x float> %v
88 define <vscale x 1 x float> @vfnmsac_vf_nxv1f32_commute(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
89 ; ZVFH-LABEL: vfnmsac_vf_nxv1f32_commute:
90 ; ZVFH:       # %bb.0:
91 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
92 ; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t
93 ; ZVFH-NEXT:    vmv1r.v v8, v9
94 ; ZVFH-NEXT:    ret
96 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv1f32_commute:
97 ; ZVFHMIN:       # %bb.0:
98 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
99 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
100 ; ZVFHMIN-NEXT:    vmv.v.x v11, a1
101 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
102 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v11, v0.t
103 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
104 ; ZVFHMIN-NEXT:    vfnmsub.vv v10, v8, v9, v0.t
105 ; ZVFHMIN-NEXT:    vmv1r.v v8, v10
106 ; ZVFHMIN-NEXT:    ret
107   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
108   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
109   %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)
110   %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)
111   %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> %m, i32 %evl)
112   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vbext, <vscale x 1 x float> %nega, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
113   ret <vscale x 1 x float> %v
116 define <vscale x 1 x float> @vfnmsac_vf_nxv1f32_unmasked(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
117 ; ZVFH-LABEL: vfnmsac_vf_nxv1f32_unmasked:
118 ; ZVFH:       # %bb.0:
119 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
120 ; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8
121 ; ZVFH-NEXT:    vmv1r.v v8, v9
122 ; ZVFH-NEXT:    ret
124 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv1f32_unmasked:
125 ; ZVFHMIN:       # %bb.0:
126 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
127 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
128 ; ZVFHMIN-NEXT:    vmv.v.x v10, a1
129 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
130 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
131 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
132 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v9
133 ; ZVFHMIN-NEXT:    ret
134   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
135   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
136   %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
137   %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
138   %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
139   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %vbext, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
140   ret <vscale x 1 x float> %v
143 declare <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32)
144 declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
145 declare <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
147 define <vscale x 2 x float> @vfnmsac_vv_nxv2f32(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
148 ; ZVFH-LABEL: vfnmsac_vv_nxv2f32:
149 ; ZVFH:       # %bb.0:
150 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
151 ; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t
152 ; ZVFH-NEXT:    vmv1r.v v8, v10
153 ; ZVFH-NEXT:    ret
155 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv2f32:
156 ; ZVFHMIN:       # %bb.0:
157 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
158 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
159 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t
160 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
161 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v10, v0.t
162 ; ZVFHMIN-NEXT:    ret
163   %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)
164   %bext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
165   %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> %m, i32 %evl)
166   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %bext, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
167   ret <vscale x 2 x float> %v
170 define <vscale x 2 x float> @vfnmsac_vv_nxv2f32_unmasked(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
171 ; ZVFH-LABEL: vfnmsac_vv_nxv2f32_unmasked:
172 ; ZVFH:       # %bb.0:
173 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
174 ; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9
175 ; ZVFH-NEXT:    vmv1r.v v8, v10
176 ; ZVFH-NEXT:    ret
178 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv2f32_unmasked:
179 ; ZVFHMIN:       # %bb.0:
180 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
181 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
182 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9
183 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
184 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v10
185 ; ZVFHMIN-NEXT:    ret
186   %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
187   %bext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
188   %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
189   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %bext, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
190   ret <vscale x 2 x float> %v
193 define <vscale x 2 x float> @vfnmsac_vf_nxv2f32(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
194 ; ZVFH-LABEL: vfnmsac_vf_nxv2f32:
195 ; ZVFH:       # %bb.0:
196 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
197 ; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t
198 ; ZVFH-NEXT:    vmv1r.v v8, v9
199 ; ZVFH-NEXT:    ret
201 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv2f32:
202 ; ZVFHMIN:       # %bb.0:
203 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
204 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
205 ; ZVFHMIN-NEXT:    vmv.v.x v10, a1
206 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t
207 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t
208 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
209 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v9, v0.t
210 ; ZVFHMIN-NEXT:    ret
211   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
212   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
213   %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)
214   %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
215   %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> %m, i32 %evl)
216   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %vbext, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
217   ret <vscale x 2 x float> %v
220 define <vscale x 2 x float> @vfnmsac_vf_nxv2f32_commute(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
221 ; ZVFH-LABEL: vfnmsac_vf_nxv2f32_commute:
222 ; ZVFH:       # %bb.0:
223 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
224 ; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t
225 ; ZVFH-NEXT:    vmv1r.v v8, v9
226 ; ZVFH-NEXT:    ret
228 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv2f32_commute:
229 ; ZVFHMIN:       # %bb.0:
230 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
231 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
232 ; ZVFHMIN-NEXT:    vmv.v.x v11, a1
233 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
234 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v11, v0.t
235 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
236 ; ZVFHMIN-NEXT:    vfnmsub.vv v10, v8, v9, v0.t
237 ; ZVFHMIN-NEXT:    vmv.v.v v8, v10
238 ; ZVFHMIN-NEXT:    ret
239   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
240   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
241   %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)
242   %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)
243   %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> %m, i32 %evl)
244   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vbext, <vscale x 2 x float> %nega, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
245   ret <vscale x 2 x float> %v
248 define <vscale x 2 x float> @vfnmsac_vf_nxv2f32_unmasked(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
249 ; ZVFH-LABEL: vfnmsac_vf_nxv2f32_unmasked:
250 ; ZVFH:       # %bb.0:
251 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
252 ; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8
253 ; ZVFH-NEXT:    vmv1r.v v8, v9
254 ; ZVFH-NEXT:    ret
256 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv2f32_unmasked:
257 ; ZVFHMIN:       # %bb.0:
258 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
259 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
260 ; ZVFHMIN-NEXT:    vmv.v.x v10, a1
261 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8
262 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
263 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
264 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v9
265 ; ZVFHMIN-NEXT:    ret
266   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
267   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
268   %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
269   %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
270   %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
271   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %vbext, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
272   ret <vscale x 2 x float> %v
275 declare <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32)
276 declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
277 declare <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
279 define <vscale x 4 x float> @vfnmsac_vv_nxv4f32(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
280 ; ZVFH-LABEL: vfnmsac_vv_nxv4f32:
281 ; ZVFH:       # %bb.0:
282 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
283 ; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t
284 ; ZVFH-NEXT:    vmv2r.v v8, v10
285 ; ZVFH-NEXT:    ret
287 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv4f32:
288 ; ZVFHMIN:       # %bb.0:
289 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
290 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
291 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t
292 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
293 ; ZVFHMIN-NEXT:    vfnmsub.vv v12, v14, v10, v0.t
294 ; ZVFHMIN-NEXT:    vmv.v.v v8, v12
295 ; ZVFHMIN-NEXT:    ret
296   %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)
297   %bext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
298   %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> %m, i32 %evl)
299   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %bext, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
300   ret <vscale x 4 x float> %v
303 define <vscale x 4 x float> @vfnmsac_vv_nxv4f32_unmasked(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
304 ; ZVFH-LABEL: vfnmsac_vv_nxv4f32_unmasked:
305 ; ZVFH:       # %bb.0:
306 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
307 ; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9
308 ; ZVFH-NEXT:    vmv2r.v v8, v10
309 ; ZVFH-NEXT:    ret
311 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv4f32_unmasked:
312 ; ZVFHMIN:       # %bb.0:
313 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
314 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
315 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
316 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
317 ; ZVFHMIN-NEXT:    vfnmsub.vv v12, v14, v10
318 ; ZVFHMIN-NEXT:    vmv.v.v v8, v12
319 ; ZVFHMIN-NEXT:    ret
320   %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
321   %bext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
322   %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
323   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %bext, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
324   ret <vscale x 4 x float> %v
327 define <vscale x 4 x float> @vfnmsac_vf_nxv4f32(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
328 ; ZVFH-LABEL: vfnmsac_vf_nxv4f32:
329 ; ZVFH:       # %bb.0:
330 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
331 ; ZVFH-NEXT:    vfwnmsac.vf v10, fa0, v8, v0.t
332 ; ZVFH-NEXT:    vmv2r.v v8, v10
333 ; ZVFH-NEXT:    ret
335 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32:
336 ; ZVFHMIN:       # %bb.0:
337 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
338 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
339 ; ZVFHMIN-NEXT:    vmv.v.x v12, a1
340 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t
341 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12, v0.t
342 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
343 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v14, v10, v0.t
344 ; ZVFHMIN-NEXT:    ret
345   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
346   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
347   %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)
348   %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
349   %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> %m, i32 %evl)
350   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %vbext, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
351   ret <vscale x 4 x float> %v
354 define <vscale x 4 x float> @vfnmsac_vf_nxv4f32_commute(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
355 ; ZVFH-LABEL: vfnmsac_vf_nxv4f32_commute:
356 ; ZVFH:       # %bb.0:
357 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
358 ; ZVFH-NEXT:    vfwnmsac.vf v10, fa0, v8, v0.t
359 ; ZVFH-NEXT:    vmv2r.v v8, v10
360 ; ZVFH-NEXT:    ret
362 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32_commute:
363 ; ZVFHMIN:       # %bb.0:
364 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
365 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
366 ; ZVFHMIN-NEXT:    vmv.v.x v9, a1
367 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t
368 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t
369 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
370 ; ZVFHMIN-NEXT:    vfnmsub.vv v12, v14, v10, v0.t
371 ; ZVFHMIN-NEXT:    vmv.v.v v8, v12
372 ; ZVFHMIN-NEXT:    ret
373   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
374   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
375   %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)
376   %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)
377   %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> %m, i32 %evl)
378   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vbext, <vscale x 4 x float> %nega, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
379   ret <vscale x 4 x float> %v
382 define <vscale x 4 x float> @vfnmsac_vf_nxv4f32_unmasked(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
383 ; ZVFH-LABEL: vfnmsac_vf_nxv4f32_unmasked:
384 ; ZVFH:       # %bb.0:
385 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
386 ; ZVFH-NEXT:    vfwnmsac.vf v10, fa0, v8
387 ; ZVFH-NEXT:    vmv2r.v v8, v10
388 ; ZVFH-NEXT:    ret
390 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32_unmasked:
391 ; ZVFHMIN:       # %bb.0:
392 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
393 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
394 ; ZVFHMIN-NEXT:    vmv.v.x v12, a1
395 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8
396 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12
397 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
398 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v14, v10
399 ; ZVFHMIN-NEXT:    ret
400   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
401   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
402   %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
403   %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
404   %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
405   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %vbext, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
406   ret <vscale x 4 x float> %v
409 declare <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32)
410 declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
411 declare <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
413 define <vscale x 8 x float> @vfnmsac_vv_nxv8f32(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
414 ; ZVFH-LABEL: vfnmsac_vv_nxv8f32:
415 ; ZVFH:       # %bb.0:
416 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
417 ; ZVFH-NEXT:    vfwnmsac.vv v12, v8, v10, v0.t
418 ; ZVFH-NEXT:    vmv4r.v v8, v12
419 ; ZVFH-NEXT:    ret
421 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv8f32:
422 ; ZVFHMIN:       # %bb.0:
423 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
424 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
425 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10, v0.t
426 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
427 ; ZVFHMIN-NEXT:    vfnmsub.vv v16, v20, v12, v0.t
428 ; ZVFHMIN-NEXT:    vmv.v.v v8, v16
429 ; ZVFHMIN-NEXT:    ret
430   %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)
431   %bext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
432   %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> %m, i32 %evl)
433   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %bext, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
434   ret <vscale x 8 x float> %v
437 define <vscale x 8 x float> @vfnmsac_vv_nxv8f32_unmasked(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
438 ; ZVFH-LABEL: vfnmsac_vv_nxv8f32_unmasked:
439 ; ZVFH:       # %bb.0:
440 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
441 ; ZVFH-NEXT:    vfwnmsac.vv v12, v8, v10
442 ; ZVFH-NEXT:    vmv4r.v v8, v12
443 ; ZVFH-NEXT:    ret
445 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv8f32_unmasked:
446 ; ZVFHMIN:       # %bb.0:
447 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
448 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
449 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
450 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
451 ; ZVFHMIN-NEXT:    vfnmsub.vv v16, v20, v12
452 ; ZVFHMIN-NEXT:    vmv.v.v v8, v16
453 ; ZVFHMIN-NEXT:    ret
454   %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
455   %bext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
456   %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
457   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %bext, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
458   ret <vscale x 8 x float> %v
461 define <vscale x 8 x float> @vfnmsac_vf_nxv8f32(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
462 ; ZVFH-LABEL: vfnmsac_vf_nxv8f32:
463 ; ZVFH:       # %bb.0:
464 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
465 ; ZVFH-NEXT:    vfwnmsac.vf v12, fa0, v8, v0.t
466 ; ZVFH-NEXT:    vmv4r.v v8, v12
467 ; ZVFH-NEXT:    ret
469 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32:
470 ; ZVFHMIN:       # %bb.0:
471 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
472 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
473 ; ZVFHMIN-NEXT:    vmv.v.x v16, a1
474 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t
475 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t
476 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
477 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v20, v12, v0.t
478 ; ZVFHMIN-NEXT:    ret
479   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
480   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
481   %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)
482   %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
483   %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> %m, i32 %evl)
484   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %vbext, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
485   ret <vscale x 8 x float> %v
488 define <vscale x 8 x float> @vfnmsac_vf_nxv8f32_commute(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
489 ; ZVFH-LABEL: vfnmsac_vf_nxv8f32_commute:
490 ; ZVFH:       # %bb.0:
491 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
492 ; ZVFH-NEXT:    vfwnmsac.vf v12, fa0, v8, v0.t
493 ; ZVFH-NEXT:    vmv4r.v v8, v12
494 ; ZVFH-NEXT:    ret
496 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32_commute:
497 ; ZVFHMIN:       # %bb.0:
498 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
499 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
500 ; ZVFHMIN-NEXT:    vmv.v.x v10, a1
501 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
502 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t
503 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
504 ; ZVFHMIN-NEXT:    vfnmsub.vv v16, v20, v12, v0.t
505 ; ZVFHMIN-NEXT:    vmv.v.v v8, v16
506 ; ZVFHMIN-NEXT:    ret
507   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
508   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
509   %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)
510   %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)
511   %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> %m, i32 %evl)
512   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vbext, <vscale x 8 x float> %nega, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
513   ret <vscale x 8 x float> %v
516 define <vscale x 8 x float> @vfnmsac_vf_nxv8f32_unmasked(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
517 ; ZVFH-LABEL: vfnmsac_vf_nxv8f32_unmasked:
518 ; ZVFH:       # %bb.0:
519 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
520 ; ZVFH-NEXT:    vfwnmsac.vf v12, fa0, v8
521 ; ZVFH-NEXT:    vmv4r.v v8, v12
522 ; ZVFH-NEXT:    ret
524 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32_unmasked:
525 ; ZVFHMIN:       # %bb.0:
526 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
527 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
528 ; ZVFHMIN-NEXT:    vmv.v.x v16, a1
529 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8
530 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16
531 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
532 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v20, v12
533 ; ZVFHMIN-NEXT:    ret
534   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
535   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
536   %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
537   %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
538   %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
539   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %vbext, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
540   ret <vscale x 8 x float> %v
543 declare <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32)
544 declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
545 declare <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
547 define <vscale x 16 x float> @vfnmsac_vv_nxv16f32(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
548 ; ZVFH-LABEL: vfnmsac_vv_nxv16f32:
549 ; ZVFH:       # %bb.0:
550 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
551 ; ZVFH-NEXT:    vfwnmsac.vv v16, v8, v12, v0.t
552 ; ZVFH-NEXT:    vmv8r.v v8, v16
553 ; ZVFH-NEXT:    ret
555 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv16f32:
556 ; ZVFHMIN:       # %bb.0:
557 ; ZVFHMIN-NEXT:    addi sp, sp, -16
558 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16
559 ; ZVFHMIN-NEXT:    csrr a1, vlenb
560 ; ZVFHMIN-NEXT:    slli a1, a1, 3
561 ; ZVFHMIN-NEXT:    sub sp, sp, a1
562 ; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
563 ; ZVFHMIN-NEXT:    addi a1, sp, 16
564 ; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
565 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
566 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t
567 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12, v0.t
568 ; ZVFHMIN-NEXT:    addi a0, sp, 16
569 ; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
570 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
571 ; ZVFHMIN-NEXT:    vfnmsub.vv v24, v16, v8, v0.t
572 ; ZVFHMIN-NEXT:    vmv.v.v v8, v24
573 ; ZVFHMIN-NEXT:    csrr a0, vlenb
574 ; ZVFHMIN-NEXT:    slli a0, a0, 3
575 ; ZVFHMIN-NEXT:    add sp, sp, a0
576 ; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16
577 ; ZVFHMIN-NEXT:    addi sp, sp, 16
578 ; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0
579 ; ZVFHMIN-NEXT:    ret
580   %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> %m, i32 %evl)
581   %bext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)
582   %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> %m, i32 %evl)
583   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %bext, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
584   ret <vscale x 16 x float> %v
587 define <vscale x 16 x float> @vfnmsac_vv_nxv16f32_unmasked(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
588 ; ZVFH-LABEL: vfnmsac_vv_nxv16f32_unmasked:
589 ; ZVFH:       # %bb.0:
590 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
591 ; ZVFH-NEXT:    vfwnmsac.vv v16, v8, v12
592 ; ZVFH-NEXT:    vmv8r.v v8, v16
593 ; ZVFH-NEXT:    ret
595 ; ZVFHMIN-LABEL: vfnmsac_vv_nxv16f32_unmasked:
596 ; ZVFHMIN:       # %bb.0:
597 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
598 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
599 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12
600 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
601 ; ZVFHMIN-NEXT:    vfnmsub.vv v24, v0, v16
602 ; ZVFHMIN-NEXT:    vmv.v.v v8, v24
603 ; ZVFHMIN-NEXT:    ret
604   %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
605   %bext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
606   %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
607   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %bext, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
608   ret <vscale x 16 x float> %v
611 define <vscale x 16 x float> @vfnmsac_vf_nxv16f32(<vscale x 16 x half> %a, half %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
612 ; ZVFH-LABEL: vfnmsac_vf_nxv16f32:
613 ; ZVFH:       # %bb.0:
614 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
615 ; ZVFH-NEXT:    vfwnmsac.vf v16, fa0, v8, v0.t
616 ; ZVFH-NEXT:    vmv8r.v v8, v16
617 ; ZVFH-NEXT:    ret
619 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32:
620 ; ZVFHMIN:       # %bb.0:
621 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
622 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
623 ; ZVFHMIN-NEXT:    vmv.v.x v4, a1
624 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
625 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
626 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
627 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v24, v16, v0.t
628 ; ZVFHMIN-NEXT:    ret
629   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
630   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
631   %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> %m, i32 %evl)
632   %vbext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
633   %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> %m, i32 %evl)
634   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %vbext, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
635   ret <vscale x 16 x float> %v
638 define <vscale x 16 x float> @vfnmsac_vf_nxv16f32_commute(<vscale x 16 x half> %a, half %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
639 ; ZVFH-LABEL: vfnmsac_vf_nxv16f32_commute:
640 ; ZVFH:       # %bb.0:
641 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
642 ; ZVFH-NEXT:    vfwnmsac.vf v16, fa0, v8, v0.t
643 ; ZVFH-NEXT:    vmv8r.v v8, v16
644 ; ZVFH-NEXT:    ret
646 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32_commute:
647 ; ZVFHMIN:       # %bb.0:
648 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
649 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
650 ; ZVFHMIN-NEXT:    vmv.v.x v4, a1
651 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t
652 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t
653 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
654 ; ZVFHMIN-NEXT:    vfnmsub.vv v24, v8, v16, v0.t
655 ; ZVFHMIN-NEXT:    vmv.v.v v8, v24
656 ; ZVFHMIN-NEXT:    ret
657   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
658   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
659   %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> %m, i32 %evl)
660   %vbext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)
661   %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> %m, i32 %evl)
662   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vbext, <vscale x 16 x float> %nega, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
663   ret <vscale x 16 x float> %v
666 define <vscale x 16 x float> @vfnmsac_vf_nxv16f32_unmasked(<vscale x 16 x half> %a, half %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
667 ; ZVFH-LABEL: vfnmsac_vf_nxv16f32_unmasked:
668 ; ZVFH:       # %bb.0:
669 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
670 ; ZVFH-NEXT:    vfwnmsac.vf v16, fa0, v8
671 ; ZVFH-NEXT:    vmv8r.v v8, v16
672 ; ZVFH-NEXT:    ret
674 ; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32_unmasked:
675 ; ZVFHMIN:       # %bb.0:
676 ; ZVFHMIN-NEXT:    fmv.x.h a1, fa0
677 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
678 ; ZVFHMIN-NEXT:    vmv.v.x v24, a1
679 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8
680 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24
681 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma
682 ; ZVFHMIN-NEXT:    vfnmsub.vv v8, v0, v16
683 ; ZVFHMIN-NEXT:    ret
684   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
685   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
686   %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
687   %vbext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
688   %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
689   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %vbext, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
690   ret <vscale x 16 x float> %v
693 declare <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32)
694 declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
695 declare <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
697 define <vscale x 1 x double> @vfnmsac_vv_nxv1f64(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
698 ; CHECK-LABEL: vfnmsac_vv_nxv1f64:
699 ; CHECK:       # %bb.0:
700 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
701 ; CHECK-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t
702 ; CHECK-NEXT:    vmv1r.v v8, v10
703 ; CHECK-NEXT:    ret
704   %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> %m, i32 %evl)
705   %bext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)
706   %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> %m, i32 %evl)
707   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %bext, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
708   ret <vscale x 1 x double> %v
711 define <vscale x 1 x double> @vfnmsac_vv_nxv1f64_unmasked(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
712 ; CHECK-LABEL: vfnmsac_vv_nxv1f64_unmasked:
713 ; CHECK:       # %bb.0:
714 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
715 ; CHECK-NEXT:    vfwnmsac.vv v10, v8, v9
716 ; CHECK-NEXT:    vmv1r.v v8, v10
717 ; CHECK-NEXT:    ret
718   %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
719   %bext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
720   %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
721   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %bext, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
722   ret <vscale x 1 x double> %v
725 define <vscale x 1 x double> @vfnmsac_vf_nxv1f64(<vscale x 1 x float> %a, float %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
726 ; CHECK-LABEL: vfnmsac_vf_nxv1f64:
727 ; CHECK:       # %bb.0:
728 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
729 ; CHECK-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t
730 ; CHECK-NEXT:    vmv1r.v v8, v9
731 ; CHECK-NEXT:    ret
732   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
733   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
734   %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> %m, i32 %evl)
735   %vbext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
736   %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> %m, i32 %evl)
737   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %vbext, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
738   ret <vscale x 1 x double> %v
741 define <vscale x 1 x double> @vfnmsac_vf_nxv1f64_commute(<vscale x 1 x float> %a, float %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
742 ; CHECK-LABEL: vfnmsac_vf_nxv1f64_commute:
743 ; CHECK:       # %bb.0:
744 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
745 ; CHECK-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t
746 ; CHECK-NEXT:    vmv1r.v v8, v9
747 ; CHECK-NEXT:    ret
748   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
749   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
750   %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> %m, i32 %evl)
751   %vbext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)
752   %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> %m, i32 %evl)
753   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vbext, <vscale x 1 x double> %nega, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
754   ret <vscale x 1 x double> %v
757 define <vscale x 1 x double> @vfnmsac_vf_nxv1f64_unmasked(<vscale x 1 x float> %a, float %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
758 ; CHECK-LABEL: vfnmsac_vf_nxv1f64_unmasked:
759 ; CHECK:       # %bb.0:
760 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
761 ; CHECK-NEXT:    vfwnmsac.vf v9, fa0, v8
762 ; CHECK-NEXT:    vmv1r.v v8, v9
763 ; CHECK-NEXT:    ret
764   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
765   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
766   %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
767   %vbext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
768   %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
769   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %vbext, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
770   ret <vscale x 1 x double> %v
773 declare <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32)
774 declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
775 declare <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
777 define <vscale x 2 x double> @vfnmsac_vv_nxv2f64(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
778 ; CHECK-LABEL: vfnmsac_vv_nxv2f64:
779 ; CHECK:       # %bb.0:
780 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
781 ; CHECK-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t
782 ; CHECK-NEXT:    vmv2r.v v8, v10
783 ; CHECK-NEXT:    ret
784   %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> %m, i32 %evl)
785   %bext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)
786   %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> %m, i32 %evl)
787   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %bext, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
788   ret <vscale x 2 x double> %v
791 define <vscale x 2 x double> @vfnmsac_vv_nxv2f64_unmasked(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
792 ; CHECK-LABEL: vfnmsac_vv_nxv2f64_unmasked:
793 ; CHECK:       # %bb.0:
794 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
795 ; CHECK-NEXT:    vfwnmsac.vv v10, v8, v9
796 ; CHECK-NEXT:    vmv2r.v v8, v10
797 ; CHECK-NEXT:    ret
798   %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
799   %bext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
800   %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
801   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %bext, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
802   ret <vscale x 2 x double> %v
805 define <vscale x 2 x double> @vfnmsac_vf_nxv2f64(<vscale x 2 x float> %a, float %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
806 ; CHECK-LABEL: vfnmsac_vf_nxv2f64:
807 ; CHECK:       # %bb.0:
808 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
809 ; CHECK-NEXT:    vfwnmsac.vf v10, fa0, v8, v0.t
810 ; CHECK-NEXT:    vmv2r.v v8, v10
811 ; CHECK-NEXT:    ret
812   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
813   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
814   %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> %m, i32 %evl)
815   %vbext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
816   %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> %m, i32 %evl)
817   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %vbext, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
818   ret <vscale x 2 x double> %v
821 define <vscale x 2 x double> @vfnmsac_vf_nxv2f64_commute(<vscale x 2 x float> %a, float %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
822 ; CHECK-LABEL: vfnmsac_vf_nxv2f64_commute:
823 ; CHECK:       # %bb.0:
824 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
825 ; CHECK-NEXT:    vfwnmsac.vf v10, fa0, v8, v0.t
826 ; CHECK-NEXT:    vmv2r.v v8, v10
827 ; CHECK-NEXT:    ret
828   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
829   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
830   %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> %m, i32 %evl)
831   %vbext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)
832   %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> %m, i32 %evl)
833   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vbext, <vscale x 2 x double> %nega, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
834   ret <vscale x 2 x double> %v
837 define <vscale x 2 x double> @vfnmsac_vf_nxv2f64_unmasked(<vscale x 2 x float> %a, float %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
838 ; CHECK-LABEL: vfnmsac_vf_nxv2f64_unmasked:
839 ; CHECK:       # %bb.0:
840 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
841 ; CHECK-NEXT:    vfwnmsac.vf v10, fa0, v8
842 ; CHECK-NEXT:    vmv2r.v v8, v10
843 ; CHECK-NEXT:    ret
844   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
845   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
846   %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
847   %vbext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
848   %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
849   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %vbext, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
850   ret <vscale x 2 x double> %v
853 declare <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32)
854 declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
855 declare <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
857 define <vscale x 4 x double> @vfnmsac_vv_nxv4f64(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
858 ; CHECK-LABEL: vfnmsac_vv_nxv4f64:
859 ; CHECK:       # %bb.0:
860 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
861 ; CHECK-NEXT:    vfwnmsac.vv v12, v8, v10, v0.t
862 ; CHECK-NEXT:    vmv4r.v v8, v12
863 ; CHECK-NEXT:    ret
864   %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> %m, i32 %evl)
865   %bext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)
866   %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> %m, i32 %evl)
867   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %bext, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
868   ret <vscale x 4 x double> %v
871 define <vscale x 4 x double> @vfnmsac_vv_nxv4f64_unmasked(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
872 ; CHECK-LABEL: vfnmsac_vv_nxv4f64_unmasked:
873 ; CHECK:       # %bb.0:
874 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
875 ; CHECK-NEXT:    vfwnmsac.vv v12, v8, v10
876 ; CHECK-NEXT:    vmv4r.v v8, v12
877 ; CHECK-NEXT:    ret
878   %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
879   %bext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
880   %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
881   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %bext, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
882   ret <vscale x 4 x double> %v
885 define <vscale x 4 x double> @vfnmsac_vf_nxv4f64(<vscale x 4 x float> %a, float %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
886 ; CHECK-LABEL: vfnmsac_vf_nxv4f64:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
889 ; CHECK-NEXT:    vfwnmsac.vf v12, fa0, v8, v0.t
890 ; CHECK-NEXT:    vmv4r.v v8, v12
891 ; CHECK-NEXT:    ret
892   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
893   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
894   %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> %m, i32 %evl)
895   %vbext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
896   %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> %m, i32 %evl)
897   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %vbext, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
898   ret <vscale x 4 x double> %v
901 define <vscale x 4 x double> @vfnmsac_vf_nxv4f64_commute(<vscale x 4 x float> %a, float %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
902 ; CHECK-LABEL: vfnmsac_vf_nxv4f64_commute:
903 ; CHECK:       # %bb.0:
904 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
905 ; CHECK-NEXT:    vfwnmsac.vf v12, fa0, v8, v0.t
906 ; CHECK-NEXT:    vmv4r.v v8, v12
907 ; CHECK-NEXT:    ret
908   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
909   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
910   %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> %m, i32 %evl)
911   %vbext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)
912   %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> %m, i32 %evl)
913   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vbext, <vscale x 4 x double> %nega, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
914   ret <vscale x 4 x double> %v
917 define <vscale x 4 x double> @vfnmsac_vf_nxv4f64_unmasked(<vscale x 4 x float> %a, float %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
918 ; CHECK-LABEL: vfnmsac_vf_nxv4f64_unmasked:
919 ; CHECK:       # %bb.0:
920 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
921 ; CHECK-NEXT:    vfwnmsac.vf v12, fa0, v8
922 ; CHECK-NEXT:    vmv4r.v v8, v12
923 ; CHECK-NEXT:    ret
924   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
925   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
926   %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
927   %vbext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
928   %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
929   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %vbext, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
930   ret <vscale x 4 x double> %v
933 declare <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32)
934 declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
935 declare <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
937 define <vscale x 8 x double> @vfnmsac_vv_nxv8f64(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
938 ; CHECK-LABEL: vfnmsac_vv_nxv8f64:
939 ; CHECK:       # %bb.0:
940 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
941 ; CHECK-NEXT:    vfwnmsac.vv v16, v8, v12, v0.t
942 ; CHECK-NEXT:    vmv8r.v v8, v16
943 ; CHECK-NEXT:    ret
944   %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> %m, i32 %evl)
945   %bext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)
946   %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> %m, i32 %evl)
947   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %bext, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
948   ret <vscale x 8 x double> %v
951 define <vscale x 8 x double> @vfnmsac_vv_nxv8f64_unmasked(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
952 ; CHECK-LABEL: vfnmsac_vv_nxv8f64_unmasked:
953 ; CHECK:       # %bb.0:
954 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
955 ; CHECK-NEXT:    vfwnmsac.vv v16, v8, v12
956 ; CHECK-NEXT:    vmv8r.v v8, v16
957 ; CHECK-NEXT:    ret
958   %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
959   %bext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
960   %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
961   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %bext, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
962   ret <vscale x 8 x double> %v
965 define <vscale x 8 x double> @vfnmsac_vf_nxv8f64(<vscale x 8 x float> %a, float %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
966 ; CHECK-LABEL: vfnmsac_vf_nxv8f64:
967 ; CHECK:       # %bb.0:
968 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
969 ; CHECK-NEXT:    vfwnmsac.vf v16, fa0, v8, v0.t
970 ; CHECK-NEXT:    vmv8r.v v8, v16
971 ; CHECK-NEXT:    ret
972   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
973   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
974   %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> %m, i32 %evl)
975   %vbext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
976   %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> %m, i32 %evl)
977   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %vbext, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
978   ret <vscale x 8 x double> %v
981 define <vscale x 8 x double> @vfnmsac_vf_nxv8f64_commute(<vscale x 8 x float> %a, float %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
982 ; CHECK-LABEL: vfnmsac_vf_nxv8f64_commute:
983 ; CHECK:       # %bb.0:
984 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
985 ; CHECK-NEXT:    vfwnmsac.vf v16, fa0, v8, v0.t
986 ; CHECK-NEXT:    vmv8r.v v8, v16
987 ; CHECK-NEXT:    ret
988   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
989   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
990   %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> %m, i32 %evl)
991   %vbext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)
992   %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> %m, i32 %evl)
993   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vbext, <vscale x 8 x double> %nega, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
994   ret <vscale x 8 x double> %v
997 define <vscale x 8 x double> @vfnmsac_vf_nxv8f64_unmasked(<vscale x 8 x float> %a, float %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
998 ; CHECK-LABEL: vfnmsac_vf_nxv8f64_unmasked:
999 ; CHECK:       # %bb.0:
1000 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1001 ; CHECK-NEXT:    vfwnmsac.vf v16, fa0, v8
1002 ; CHECK-NEXT:    vmv8r.v v8, v16
1003 ; CHECK-NEXT:    ret
1004   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1005   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1006   %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1007   %vbext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1008   %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1009   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %vbext, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1010   ret <vscale x 8 x double> %v