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> @vfnmacc_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: vfnmacc_vv_nxv1f32:
18 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
19 ; ZVFH-NEXT: vfwnmacc.vv v10, v8, v9, v0.t
20 ; ZVFH-NEXT: vmv1r.v v8, v10
23 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv1f32:
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: vfnmadd.vv v8, v11, v10, v0.t
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 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
35 %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> %negc, <vscale x 1 x i1> %m, i32 %evl)
36 ret <vscale x 1 x float> %v
39 define <vscale x 1 x float> @vfnmacc_vv_nxv1f32_unmasked(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
40 ; ZVFH-LABEL: vfnmacc_vv_nxv1f32_unmasked:
42 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
43 ; ZVFH-NEXT: vfwnmacc.vv v10, v8, v9
44 ; ZVFH-NEXT: vmv1r.v v8, v10
47 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv1f32_unmasked:
49 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
50 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v8
51 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9
52 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
53 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v11, v10
55 %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)
56 %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)
57 %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)
58 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
59 %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> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
60 ret <vscale x 1 x float> %v
63 define <vscale x 1 x float> @vfnmacc_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) {
64 ; ZVFH-LABEL: vfnmacc_vf_nxv1f32:
66 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
67 ; ZVFH-NEXT: vfwnmacc.vf v9, fa0, v8, v0.t
68 ; ZVFH-NEXT: vmv1r.v v8, v9
71 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv1f32:
73 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
74 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
75 ; ZVFHMIN-NEXT: vfmv.v.f v10, fa5
76 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
77 ; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v10
78 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
79 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t
80 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v11, v0.t
81 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
82 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v10, v9, v0.t
84 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
85 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
86 %splat = insertelement <vscale x 1 x i1> poison, i1 -1, i32 0
87 %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)
88 %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)
89 %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)
90 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
91 %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> %negc, <vscale x 1 x i1> %m, i32 %evl)
92 ret <vscale x 1 x float> %v
95 define <vscale x 1 x float> @vfnmacc_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) {
96 ; ZVFH-LABEL: vfnmacc_vf_nxv1f32_commute:
98 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
99 ; ZVFH-NEXT: vfwnmacc.vf v9, fa0, v8, v0.t
100 ; ZVFH-NEXT: vmv1r.v v8, v9
103 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv1f32_commute:
105 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
106 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
107 ; ZVFHMIN-NEXT: vfmv.v.f v10, fa5
108 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
109 ; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v10
110 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
111 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t
112 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v11, v0.t
113 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
114 ; ZVFHMIN-NEXT: vfnmadd.vv v10, v8, v9, v0.t
115 ; ZVFHMIN-NEXT: vmv1r.v v8, v10
117 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
118 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
119 %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)
120 %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)
121 %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)
122 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)
123 %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> %negc, <vscale x 1 x i1> %m, i32 %evl)
124 ret <vscale x 1 x float> %v
127 define <vscale x 1 x float> @vfnmacc_vf_nxv1f32_unmasked(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
128 ; ZVFH-LABEL: vfnmacc_vf_nxv1f32_unmasked:
130 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
131 ; ZVFH-NEXT: vfwnmacc.vf v9, fa0, v8
132 ; ZVFH-NEXT: vmv1r.v v8, v9
135 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv1f32_unmasked:
137 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
138 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
139 ; ZVFHMIN-NEXT: vfmv.v.f v10, fa5
140 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
141 ; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v10
142 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
143 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
144 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v11
145 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
146 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v10, v9
148 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
149 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
150 %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)
151 %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)
152 %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)
153 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
154 %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> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
155 ret <vscale x 1 x float> %v
158 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)
159 declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
160 declare <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
162 define <vscale x 2 x float> @vfnmacc_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) {
163 ; ZVFH-LABEL: vfnmacc_vv_nxv2f32:
165 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
166 ; ZVFH-NEXT: vfwnmacc.vv v10, v8, v9, v0.t
167 ; ZVFH-NEXT: vmv1r.v v8, v10
170 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv2f32:
172 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
173 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v8, v0.t
174 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t
175 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
176 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v11, v10, v0.t
178 %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)
179 %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)
180 %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)
181 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
182 %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> %negc, <vscale x 2 x i1> %m, i32 %evl)
183 ret <vscale x 2 x float> %v
186 define <vscale x 2 x float> @vfnmacc_vv_nxv2f32_unmasked(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
187 ; ZVFH-LABEL: vfnmacc_vv_nxv2f32_unmasked:
189 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
190 ; ZVFH-NEXT: vfwnmacc.vv v10, v8, v9
191 ; ZVFH-NEXT: vmv1r.v v8, v10
194 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv2f32_unmasked:
196 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
197 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v8
198 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9
199 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
200 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v11, v10
202 %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)
203 %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)
204 %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)
205 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
206 %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> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
207 ret <vscale x 2 x float> %v
210 define <vscale x 2 x float> @vfnmacc_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) {
211 ; ZVFH-LABEL: vfnmacc_vf_nxv2f32:
213 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
214 ; ZVFH-NEXT: vfwnmacc.vf v9, fa0, v8, v0.t
215 ; ZVFH-NEXT: vmv1r.v v8, v9
218 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv2f32:
220 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
221 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m1, ta, ma
222 ; ZVFHMIN-NEXT: vfmv.v.f v10, fa5
223 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
224 ; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v10
225 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
226 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t
227 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v11, v0.t
228 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
229 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v10, v9, v0.t
231 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
232 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
233 %splat = insertelement <vscale x 2 x i1> poison, i1 -1, i32 0
234 %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)
235 %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)
236 %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)
237 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
238 %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> %negc, <vscale x 2 x i1> %m, i32 %evl)
239 ret <vscale x 2 x float> %v
242 define <vscale x 2 x float> @vfnmacc_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) {
243 ; ZVFH-LABEL: vfnmacc_vf_nxv2f32_commute:
245 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
246 ; ZVFH-NEXT: vfwnmacc.vf v9, fa0, v8, v0.t
247 ; ZVFH-NEXT: vmv1r.v v8, v9
250 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv2f32_commute:
252 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
253 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m1, ta, ma
254 ; ZVFHMIN-NEXT: vfmv.v.f v10, fa5
255 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
256 ; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v10
257 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
258 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t
259 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v11, v0.t
260 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
261 ; ZVFHMIN-NEXT: vfnmadd.vv v10, v8, v9, v0.t
262 ; ZVFHMIN-NEXT: vmv.v.v v8, v10
264 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
265 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
266 %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)
267 %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)
268 %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)
269 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)
270 %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> %negc, <vscale x 2 x i1> %m, i32 %evl)
271 ret <vscale x 2 x float> %v
274 define <vscale x 2 x float> @vfnmacc_vf_nxv2f32_unmasked(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
275 ; ZVFH-LABEL: vfnmacc_vf_nxv2f32_unmasked:
277 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
278 ; ZVFH-NEXT: vfwnmacc.vf v9, fa0, v8
279 ; ZVFH-NEXT: vmv1r.v v8, v9
282 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv2f32_unmasked:
284 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
285 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m1, ta, ma
286 ; ZVFHMIN-NEXT: vfmv.v.f v10, fa5
287 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
288 ; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v10
289 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
290 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
291 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v11
292 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
293 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v10, v9
295 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
296 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
297 %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)
298 %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)
299 %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)
300 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
301 %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> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
302 ret <vscale x 2 x float> %v
305 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)
306 declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
307 declare <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
309 define <vscale x 4 x float> @vfnmacc_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) {
310 ; ZVFH-LABEL: vfnmacc_vv_nxv4f32:
312 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
313 ; ZVFH-NEXT: vfwnmacc.vv v10, v8, v9, v0.t
314 ; ZVFH-NEXT: vmv2r.v v8, v10
317 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv4f32:
319 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma
320 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8, v0.t
321 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9, v0.t
322 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
323 ; ZVFHMIN-NEXT: vfnmadd.vv v12, v14, v10, v0.t
324 ; ZVFHMIN-NEXT: vmv.v.v v8, v12
326 %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)
327 %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)
328 %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)
329 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
330 %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> %negc, <vscale x 4 x i1> %m, i32 %evl)
331 ret <vscale x 4 x float> %v
334 define <vscale x 4 x float> @vfnmacc_vv_nxv4f32_unmasked(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
335 ; ZVFH-LABEL: vfnmacc_vv_nxv4f32_unmasked:
337 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
338 ; ZVFH-NEXT: vfwnmacc.vv v10, v8, v9
339 ; ZVFH-NEXT: vmv2r.v v8, v10
342 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv4f32_unmasked:
344 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma
345 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8
346 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9
347 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
348 ; ZVFHMIN-NEXT: vfnmadd.vv v12, v14, v10
349 ; ZVFHMIN-NEXT: vmv.v.v v8, v12
351 %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)
352 %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)
353 %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)
354 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
355 %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> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
356 ret <vscale x 4 x float> %v
359 define <vscale x 4 x float> @vfnmacc_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) {
360 ; ZVFH-LABEL: vfnmacc_vf_nxv4f32:
362 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
363 ; ZVFH-NEXT: vfwnmacc.vf v10, fa0, v8, v0.t
364 ; ZVFH-NEXT: vmv2r.v v8, v10
367 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv4f32:
369 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
370 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma
371 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
372 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
373 ; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12
374 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma
375 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t
376 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14, v0.t
377 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
378 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v12, v10, v0.t
380 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
381 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
382 %splat = insertelement <vscale x 4 x i1> poison, i1 -1, i32 0
383 %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)
384 %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)
385 %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)
386 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
387 %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> %negc, <vscale x 4 x i1> %m, i32 %evl)
388 ret <vscale x 4 x float> %v
391 define <vscale x 4 x float> @vfnmacc_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) {
392 ; ZVFH-LABEL: vfnmacc_vf_nxv4f32_commute:
394 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
395 ; ZVFH-NEXT: vfwnmacc.vf v10, fa0, v8, v0.t
396 ; ZVFH-NEXT: vmv2r.v v8, v10
399 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv4f32_commute:
401 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
402 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma
403 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
404 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
405 ; ZVFHMIN-NEXT: vfncvt.f.f.w v9, v12
406 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma
407 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t
408 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v9, v0.t
409 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
410 ; ZVFHMIN-NEXT: vfnmadd.vv v12, v14, v10, v0.t
411 ; ZVFHMIN-NEXT: vmv.v.v v8, v12
413 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
414 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
415 %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)
416 %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)
417 %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)
418 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)
419 %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> %negc, <vscale x 4 x i1> %m, i32 %evl)
420 ret <vscale x 4 x float> %v
423 define <vscale x 4 x float> @vfnmacc_vf_nxv4f32_unmasked(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
424 ; ZVFH-LABEL: vfnmacc_vf_nxv4f32_unmasked:
426 ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma
427 ; ZVFH-NEXT: vfwnmacc.vf v10, fa0, v8
428 ; ZVFH-NEXT: vmv2r.v v8, v10
431 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv4f32_unmasked:
433 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
434 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma
435 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
436 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
437 ; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12
438 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma
439 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
440 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14
441 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
442 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v12, v10
444 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
445 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
446 %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)
447 %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)
448 %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)
449 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
450 %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> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
451 ret <vscale x 4 x float> %v
454 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)
455 declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
456 declare <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
458 define <vscale x 8 x float> @vfnmacc_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) {
459 ; ZVFH-LABEL: vfnmacc_vv_nxv8f32:
461 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
462 ; ZVFH-NEXT: vfwnmacc.vv v12, v8, v10, v0.t
463 ; ZVFH-NEXT: vmv4r.v v8, v12
466 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv8f32:
468 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma
469 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8, v0.t
470 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10, v0.t
471 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
472 ; ZVFHMIN-NEXT: vfnmadd.vv v16, v20, v12, v0.t
473 ; ZVFHMIN-NEXT: vmv.v.v v8, v16
475 %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)
476 %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)
477 %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)
478 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
479 %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> %negc, <vscale x 8 x i1> %m, i32 %evl)
480 ret <vscale x 8 x float> %v
483 define <vscale x 8 x float> @vfnmacc_vv_nxv8f32_unmasked(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
484 ; ZVFH-LABEL: vfnmacc_vv_nxv8f32_unmasked:
486 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
487 ; ZVFH-NEXT: vfwnmacc.vv v12, v8, v10
488 ; ZVFH-NEXT: vmv4r.v v8, v12
491 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv8f32_unmasked:
493 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma
494 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8
495 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
496 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
497 ; ZVFHMIN-NEXT: vfnmadd.vv v16, v20, v12
498 ; ZVFHMIN-NEXT: vmv.v.v v8, v16
500 %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)
501 %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)
502 %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)
503 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
504 %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> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
505 ret <vscale x 8 x float> %v
508 define <vscale x 8 x float> @vfnmacc_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) {
509 ; ZVFH-LABEL: vfnmacc_vf_nxv8f32:
511 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
512 ; ZVFH-NEXT: vfwnmacc.vf v12, fa0, v8, v0.t
513 ; ZVFH-NEXT: vmv4r.v v8, v12
516 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv8f32:
518 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
519 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma
520 ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5
521 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
522 ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16
523 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma
524 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t
525 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20, v0.t
526 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
527 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v16, v12, v0.t
529 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
530 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
531 %splat = insertelement <vscale x 8 x i1> poison, i1 -1, i32 0
532 %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)
533 %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)
534 %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)
535 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
536 %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> %negc, <vscale x 8 x i1> %m, i32 %evl)
537 ret <vscale x 8 x float> %v
540 define <vscale x 8 x float> @vfnmacc_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) {
541 ; ZVFH-LABEL: vfnmacc_vf_nxv8f32_commute:
543 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
544 ; ZVFH-NEXT: vfwnmacc.vf v12, fa0, v8, v0.t
545 ; ZVFH-NEXT: vmv4r.v v8, v12
548 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv8f32_commute:
550 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
551 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma
552 ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5
553 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
554 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v16
555 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma
556 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t
557 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v10, v0.t
558 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
559 ; ZVFHMIN-NEXT: vfnmadd.vv v16, v20, v12, v0.t
560 ; ZVFHMIN-NEXT: vmv.v.v v8, v16
562 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
563 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
564 %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)
565 %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)
566 %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)
567 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)
568 %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> %negc, <vscale x 8 x i1> %m, i32 %evl)
569 ret <vscale x 8 x float> %v
572 define <vscale x 8 x float> @vfnmacc_vf_nxv8f32_unmasked(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
573 ; ZVFH-LABEL: vfnmacc_vf_nxv8f32_unmasked:
575 ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma
576 ; ZVFH-NEXT: vfwnmacc.vf v12, fa0, v8
577 ; ZVFH-NEXT: vmv4r.v v8, v12
580 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv8f32_unmasked:
582 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
583 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma
584 ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5
585 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
586 ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16
587 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma
588 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
589 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20
590 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
591 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v16, v12
593 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
594 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
595 %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)
596 %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)
597 %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)
598 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
599 %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> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
600 ret <vscale x 8 x float> %v
603 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)
604 declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
605 declare <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
607 define <vscale x 16 x float> @vfnmacc_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) {
608 ; ZVFH-LABEL: vfnmacc_vv_nxv16f32:
610 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
611 ; ZVFH-NEXT: vfwnmacc.vv v16, v8, v12, v0.t
612 ; ZVFH-NEXT: vmv8r.v v8, v16
615 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv16f32:
617 ; ZVFHMIN-NEXT: addi sp, sp, -16
618 ; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16
619 ; ZVFHMIN-NEXT: csrr a1, vlenb
620 ; ZVFHMIN-NEXT: slli a1, a1, 3
621 ; ZVFHMIN-NEXT: sub sp, sp, a1
622 ; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
623 ; ZVFHMIN-NEXT: addi a1, sp, 16
624 ; ZVFHMIN-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
625 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma
626 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t
627 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12, v0.t
628 ; ZVFHMIN-NEXT: addi a0, sp, 16
629 ; ZVFHMIN-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
630 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
631 ; ZVFHMIN-NEXT: vfnmadd.vv v24, v16, v8, v0.t
632 ; ZVFHMIN-NEXT: vmv.v.v v8, v24
633 ; ZVFHMIN-NEXT: csrr a0, vlenb
634 ; ZVFHMIN-NEXT: slli a0, a0, 3
635 ; ZVFHMIN-NEXT: add sp, sp, a0
636 ; ZVFHMIN-NEXT: addi sp, sp, 16
638 %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)
639 %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)
640 %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)
641 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
642 %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> %negc, <vscale x 16 x i1> %m, i32 %evl)
643 ret <vscale x 16 x float> %v
646 define <vscale x 16 x float> @vfnmacc_vv_nxv16f32_unmasked(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
647 ; ZVFH-LABEL: vfnmacc_vv_nxv16f32_unmasked:
649 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
650 ; ZVFH-NEXT: vfwnmacc.vv v16, v8, v12
651 ; ZVFH-NEXT: vmv8r.v v8, v16
654 ; ZVFHMIN-LABEL: vfnmacc_vv_nxv16f32_unmasked:
656 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma
657 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8
658 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12
659 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
660 ; ZVFHMIN-NEXT: vfnmadd.vv v24, v0, v16
661 ; ZVFHMIN-NEXT: vmv.v.v v8, v24
663 %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)
664 %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)
665 %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)
666 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
667 %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> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
668 ret <vscale x 16 x float> %v
671 define <vscale x 16 x float> @vfnmacc_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) {
672 ; ZVFH-LABEL: vfnmacc_vf_nxv16f32:
674 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
675 ; ZVFH-NEXT: vfwnmacc.vf v16, fa0, v8, v0.t
676 ; ZVFH-NEXT: vmv8r.v v8, v16
679 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv16f32:
681 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
682 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma
683 ; ZVFHMIN-NEXT: vfmv.v.f v24, fa5
684 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
685 ; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24
686 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma
687 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8, v0.t
688 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v4, v0.t
689 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
690 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v24, v16, v0.t
692 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
693 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
694 %splat = insertelement <vscale x 16 x i1> poison, i1 -1, i32 0
695 %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)
696 %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)
697 %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)
698 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
699 %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> %negc, <vscale x 16 x i1> %m, i32 %evl)
700 ret <vscale x 16 x float> %v
703 define <vscale x 16 x float> @vfnmacc_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) {
704 ; ZVFH-LABEL: vfnmacc_vf_nxv16f32_commute:
706 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
707 ; ZVFH-NEXT: vfwnmacc.vf v16, fa0, v8, v0.t
708 ; ZVFH-NEXT: vmv8r.v v8, v16
711 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv16f32_commute:
713 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
714 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma
715 ; ZVFHMIN-NEXT: vfmv.v.f v24, fa5
716 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
717 ; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24
718 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma
719 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8, v0.t
720 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v4, v0.t
721 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
722 ; ZVFHMIN-NEXT: vfnmadd.vv v24, v8, v16, v0.t
723 ; ZVFHMIN-NEXT: vmv.v.v v8, v24
725 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
726 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
727 %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)
728 %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)
729 %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)
730 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)
731 %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> %negc, <vscale x 16 x i1> %m, i32 %evl)
732 ret <vscale x 16 x float> %v
735 define <vscale x 16 x float> @vfnmacc_vf_nxv16f32_unmasked(<vscale x 16 x half> %a, half %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
736 ; ZVFH-LABEL: vfnmacc_vf_nxv16f32_unmasked:
738 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
739 ; ZVFH-NEXT: vfwnmacc.vf v16, fa0, v8
740 ; ZVFH-NEXT: vmv8r.v v8, v16
743 ; ZVFHMIN-LABEL: vfnmacc_vf_nxv16f32_unmasked:
745 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
746 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma
747 ; ZVFHMIN-NEXT: vfmv.v.f v24, fa5
748 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma
749 ; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24
750 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma
751 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8
752 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v4
753 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma
754 ; ZVFHMIN-NEXT: vfnmadd.vv v8, v24, v16
756 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
757 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
758 %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)
759 %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)
760 %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)
761 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
762 %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> %negc, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
763 ret <vscale x 16 x float> %v
766 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)
767 declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
768 declare <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
770 define <vscale x 1 x double> @vfnmacc_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) {
771 ; CHECK-LABEL: vfnmacc_vv_nxv1f64:
773 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
774 ; CHECK-NEXT: vfwnmacc.vv v10, v8, v9, v0.t
775 ; CHECK-NEXT: vmv1r.v v8, v10
777 %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)
778 %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)
779 %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)
780 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
781 %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> %negc, <vscale x 1 x i1> %m, i32 %evl)
782 ret <vscale x 1 x double> %v
785 define <vscale x 1 x double> @vfnmacc_vv_nxv1f64_unmasked(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
786 ; CHECK-LABEL: vfnmacc_vv_nxv1f64_unmasked:
788 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
789 ; CHECK-NEXT: vfwnmacc.vv v10, v8, v9
790 ; CHECK-NEXT: vmv1r.v v8, v10
792 %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)
793 %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)
794 %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)
795 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
796 %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> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
797 ret <vscale x 1 x double> %v
800 define <vscale x 1 x double> @vfnmacc_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) {
801 ; CHECK-LABEL: vfnmacc_vf_nxv1f64:
803 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
804 ; CHECK-NEXT: vfwnmacc.vf v9, fa0, v8, v0.t
805 ; CHECK-NEXT: vmv1r.v v8, v9
807 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
808 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
809 %splat = insertelement <vscale x 1 x i1> poison, i1 -1, i32 0
810 %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)
811 %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)
812 %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)
813 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
814 %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> %negc, <vscale x 1 x i1> %m, i32 %evl)
815 ret <vscale x 1 x double> %v
818 define <vscale x 1 x double> @vfnmacc_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) {
819 ; CHECK-LABEL: vfnmacc_vf_nxv1f64_commute:
821 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
822 ; CHECK-NEXT: vfwnmacc.vf v9, fa0, v8, v0.t
823 ; CHECK-NEXT: vmv1r.v v8, v9
825 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
826 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
827 %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)
828 %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)
829 %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)
830 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
831 %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> %negc, <vscale x 1 x i1> %m, i32 %evl)
832 ret <vscale x 1 x double> %v
835 define <vscale x 1 x double> @vfnmacc_vf_nxv1f64_unmasked(<vscale x 1 x float> %a, float %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
836 ; CHECK-LABEL: vfnmacc_vf_nxv1f64_unmasked:
838 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
839 ; CHECK-NEXT: vfwnmacc.vf v9, fa0, v8
840 ; CHECK-NEXT: vmv1r.v v8, v9
842 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
843 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
844 %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)
845 %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)
846 %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)
847 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
848 %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> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
849 ret <vscale x 1 x double> %v
852 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)
853 declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
854 declare <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
856 define <vscale x 2 x double> @vfnmacc_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) {
857 ; CHECK-LABEL: vfnmacc_vv_nxv2f64:
859 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
860 ; CHECK-NEXT: vfwnmacc.vv v10, v8, v9, v0.t
861 ; CHECK-NEXT: vmv2r.v v8, v10
863 %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)
864 %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)
865 %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)
866 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
867 %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> %negc, <vscale x 2 x i1> %m, i32 %evl)
868 ret <vscale x 2 x double> %v
871 define <vscale x 2 x double> @vfnmacc_vv_nxv2f64_unmasked(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
872 ; CHECK-LABEL: vfnmacc_vv_nxv2f64_unmasked:
874 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
875 ; CHECK-NEXT: vfwnmacc.vv v10, v8, v9
876 ; CHECK-NEXT: vmv2r.v v8, v10
878 %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)
879 %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)
880 %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)
881 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
882 %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> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
883 ret <vscale x 2 x double> %v
886 define <vscale x 2 x double> @vfnmacc_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) {
887 ; CHECK-LABEL: vfnmacc_vf_nxv2f64:
889 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
890 ; CHECK-NEXT: vfwnmacc.vf v10, fa0, v8, v0.t
891 ; CHECK-NEXT: vmv2r.v v8, v10
893 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
894 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
895 %splat = insertelement <vscale x 2 x i1> poison, i1 -1, i32 0
896 %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)
897 %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)
898 %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)
899 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
900 %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> %negc, <vscale x 2 x i1> %m, i32 %evl)
901 ret <vscale x 2 x double> %v
904 define <vscale x 2 x double> @vfnmacc_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) {
905 ; CHECK-LABEL: vfnmacc_vf_nxv2f64_commute:
907 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
908 ; CHECK-NEXT: vfwnmacc.vf v10, fa0, v8, v0.t
909 ; CHECK-NEXT: vmv2r.v v8, v10
911 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
912 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
913 %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)
914 %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)
915 %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)
916 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
917 %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> %negc, <vscale x 2 x i1> %m, i32 %evl)
918 ret <vscale x 2 x double> %v
921 define <vscale x 2 x double> @vfnmacc_vf_nxv2f64_unmasked(<vscale x 2 x float> %a, float %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
922 ; CHECK-LABEL: vfnmacc_vf_nxv2f64_unmasked:
924 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
925 ; CHECK-NEXT: vfwnmacc.vf v10, fa0, v8
926 ; CHECK-NEXT: vmv2r.v v8, v10
928 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
929 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
930 %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)
931 %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)
932 %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)
933 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
934 %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> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
935 ret <vscale x 2 x double> %v
938 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)
939 declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
940 declare <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
942 define <vscale x 4 x double> @vfnmacc_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) {
943 ; CHECK-LABEL: vfnmacc_vv_nxv4f64:
945 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
946 ; CHECK-NEXT: vfwnmacc.vv v12, v8, v10, v0.t
947 ; CHECK-NEXT: vmv4r.v v8, v12
949 %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)
950 %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)
951 %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)
952 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
953 %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> %negc, <vscale x 4 x i1> %m, i32 %evl)
954 ret <vscale x 4 x double> %v
957 define <vscale x 4 x double> @vfnmacc_vv_nxv4f64_unmasked(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
958 ; CHECK-LABEL: vfnmacc_vv_nxv4f64_unmasked:
960 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
961 ; CHECK-NEXT: vfwnmacc.vv v12, v8, v10
962 ; CHECK-NEXT: vmv4r.v v8, v12
964 %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)
965 %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)
966 %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)
967 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
968 %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> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
969 ret <vscale x 4 x double> %v
972 define <vscale x 4 x double> @vfnmacc_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) {
973 ; CHECK-LABEL: vfnmacc_vf_nxv4f64:
975 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
976 ; CHECK-NEXT: vfwnmacc.vf v12, fa0, v8, v0.t
977 ; CHECK-NEXT: vmv4r.v v8, v12
979 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
980 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
981 %splat = insertelement <vscale x 4 x i1> poison, i1 -1, i32 0
982 %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)
983 %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)
984 %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)
985 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
986 %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> %negc, <vscale x 4 x i1> %m, i32 %evl)
987 ret <vscale x 4 x double> %v
990 define <vscale x 4 x double> @vfnmacc_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) {
991 ; CHECK-LABEL: vfnmacc_vf_nxv4f64_commute:
993 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
994 ; CHECK-NEXT: vfwnmacc.vf v12, fa0, v8, v0.t
995 ; CHECK-NEXT: vmv4r.v v8, v12
997 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
998 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
999 %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)
1000 %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)
1001 %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)
1002 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
1003 %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> %negc, <vscale x 4 x i1> %m, i32 %evl)
1004 ret <vscale x 4 x double> %v
1007 define <vscale x 4 x double> @vfnmacc_vf_nxv4f64_unmasked(<vscale x 4 x float> %a, float %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
1008 ; CHECK-LABEL: vfnmacc_vf_nxv4f64_unmasked:
1010 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1011 ; CHECK-NEXT: vfwnmacc.vf v12, fa0, v8
1012 ; CHECK-NEXT: vmv4r.v v8, v12
1014 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
1015 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1016 %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)
1017 %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)
1018 %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)
1019 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1020 %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> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1021 ret <vscale x 4 x double> %v
1024 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)
1025 declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
1026 declare <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
1028 define <vscale x 8 x double> @vfnmacc_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) {
1029 ; CHECK-LABEL: vfnmacc_vv_nxv8f64:
1031 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1032 ; CHECK-NEXT: vfwnmacc.vv v16, v8, v12, v0.t
1033 ; CHECK-NEXT: vmv8r.v v8, v16
1035 %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)
1036 %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)
1037 %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)
1038 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
1039 %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> %negc, <vscale x 8 x i1> %m, i32 %evl)
1040 ret <vscale x 8 x double> %v
1043 define <vscale x 8 x double> @vfnmacc_vv_nxv8f64_unmasked(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
1044 ; CHECK-LABEL: vfnmacc_vv_nxv8f64_unmasked:
1046 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1047 ; CHECK-NEXT: vfwnmacc.vv v16, v8, v12
1048 ; CHECK-NEXT: vmv8r.v v8, v16
1050 %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)
1051 %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)
1052 %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)
1053 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1054 %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> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1055 ret <vscale x 8 x double> %v
1058 define <vscale x 8 x double> @vfnmacc_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) {
1059 ; CHECK-LABEL: vfnmacc_vf_nxv8f64:
1061 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1062 ; CHECK-NEXT: vfwnmacc.vf v16, fa0, v8, v0.t
1063 ; CHECK-NEXT: vmv8r.v v8, v16
1065 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1066 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1067 %splat = insertelement <vscale x 8 x i1> poison, i1 -1, i32 0
1068 %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)
1069 %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)
1070 %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)
1071 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
1072 %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> %negc, <vscale x 8 x i1> %m, i32 %evl)
1073 ret <vscale x 8 x double> %v
1076 define <vscale x 8 x double> @vfnmacc_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) {
1077 ; CHECK-LABEL: vfnmacc_vf_nxv8f64_commute:
1079 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1080 ; CHECK-NEXT: vfwnmacc.vf v16, fa0, v8, v0.t
1081 ; CHECK-NEXT: vmv8r.v v8, v16
1083 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1084 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1085 %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)
1086 %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)
1087 %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)
1088 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
1089 %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> %negc, <vscale x 8 x i1> %m, i32 %evl)
1090 ret <vscale x 8 x double> %v
1093 define <vscale x 8 x double> @vfnmacc_vf_nxv8f64_unmasked(<vscale x 8 x float> %a, float %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
1094 ; CHECK-LABEL: vfnmacc_vf_nxv8f64_unmasked:
1096 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1097 ; CHECK-NEXT: vfwnmacc.vf v16, fa0, v8
1098 ; CHECK-NEXT: vmv8r.v v8, v16
1100 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1101 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1102 %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)
1103 %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)
1104 %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)
1105 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1106 %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> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1107 ret <vscale x 8 x double> %v
1110 declare <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
1112 define <vscale x 1 x double> @vfnmacc_vv_nxv1f64_nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1113 ; CHECK-LABEL: vfnmacc_vv_nxv1f64_nxv1f16:
1115 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1116 ; CHECK-NEXT: vfwcvt.f.f.v v11, v8, v0.t
1117 ; CHECK-NEXT: vfwcvt.f.f.v v8, v9, v0.t
1118 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
1119 ; CHECK-NEXT: vfwnmacc.vv v10, v11, v8, v0.t
1120 ; CHECK-NEXT: vmv1r.v v8, v10
1122 %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)
1123 %bext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)
1124 %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)
1125 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)
1126 %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> %negc, <vscale x 1 x i1> %m, i32 %evl)
1127 ret <vscale x 1 x double> %v
1130 define <vscale x 1 x double> @vfnmacc_vv_nxv1f64_nxv1f16_unmasked(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
1131 ; CHECK-LABEL: vfnmacc_vv_nxv1f64_nxv1f16_unmasked:
1133 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1134 ; CHECK-NEXT: vfwcvt.f.f.v v11, v8
1135 ; CHECK-NEXT: vfwcvt.f.f.v v8, v9
1136 ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
1137 ; CHECK-NEXT: vfwnmacc.vv v10, v11, v8
1138 ; CHECK-NEXT: vmv1r.v v8, v10
1140 %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1141 %bext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1142 %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)
1143 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1144 %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> %negc, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1145 ret <vscale x 1 x double> %v
1148 declare <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
1150 define <vscale x 2 x double> @vfnmacc_vv_nxv2f64_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1151 ; CHECK-LABEL: vfnmacc_vv_nxv2f64_nxv2f16:
1153 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1154 ; CHECK-NEXT: vfwcvt.f.f.v v12, v8, v0.t
1155 ; CHECK-NEXT: vfwcvt.f.f.v v8, v9, v0.t
1156 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
1157 ; CHECK-NEXT: vfwnmacc.vv v10, v12, v8, v0.t
1158 ; CHECK-NEXT: vmv2r.v v8, v10
1160 %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)
1161 %bext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)
1162 %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)
1163 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)
1164 %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> %negc, <vscale x 2 x i1> %m, i32 %evl)
1165 ret <vscale x 2 x double> %v
1168 define <vscale x 2 x double> @vfnmacc_vv_nxv2f64_nxv2f16_unmasked(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
1169 ; CHECK-LABEL: vfnmacc_vv_nxv2f64_nxv2f16_unmasked:
1171 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1172 ; CHECK-NEXT: vfwcvt.f.f.v v12, v8
1173 ; CHECK-NEXT: vfwcvt.f.f.v v8, v9
1174 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
1175 ; CHECK-NEXT: vfwnmacc.vv v10, v12, v8
1176 ; CHECK-NEXT: vmv2r.v v8, v10
1178 %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1179 %bext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1180 %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)
1181 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1182 %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> %negc, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1183 ret <vscale x 2 x double> %v
1186 declare <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
1188 define <vscale x 4 x double> @vfnmacc_vv_nxv4f64_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1189 ; CHECK-LABEL: vfnmacc_vv_nxv4f64_nxv4f16:
1191 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1192 ; CHECK-NEXT: vfwcvt.f.f.v v10, v8, v0.t
1193 ; CHECK-NEXT: vfwcvt.f.f.v v16, v9, v0.t
1194 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
1195 ; CHECK-NEXT: vfwnmacc.vv v12, v10, v16, v0.t
1196 ; CHECK-NEXT: vmv4r.v v8, v12
1198 %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)
1199 %bext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)
1200 %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)
1201 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)
1202 %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> %negc, <vscale x 4 x i1> %m, i32 %evl)
1203 ret <vscale x 4 x double> %v
1206 define <vscale x 4 x double> @vfnmacc_vv_nxv4f64_nxv4f16_unmasked(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
1207 ; CHECK-LABEL: vfnmacc_vv_nxv4f64_nxv4f16_unmasked:
1209 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1210 ; CHECK-NEXT: vfwcvt.f.f.v v10, v8
1211 ; CHECK-NEXT: vfwcvt.f.f.v v16, v9
1212 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma
1213 ; CHECK-NEXT: vfwnmacc.vv v12, v10, v16
1214 ; CHECK-NEXT: vmv4r.v v8, v12
1216 %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1217 %bext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1218 %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)
1219 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1220 %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> %negc, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1221 ret <vscale x 4 x double> %v
1224 declare <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
1226 define <vscale x 8 x double> @vfnmacc_vv_nxv8f64_nxv4f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1227 ; CHECK-LABEL: vfnmacc_vv_nxv8f64_nxv4f16:
1229 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
1230 ; CHECK-NEXT: vfwcvt.f.f.v v12, v8, v0.t
1231 ; CHECK-NEXT: vfwcvt.f.f.v v24, v10, v0.t
1232 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1233 ; CHECK-NEXT: vfwnmacc.vv v16, v12, v24, v0.t
1234 ; CHECK-NEXT: vmv8r.v v8, v16
1236 %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)
1237 %bext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)
1238 %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)
1239 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)
1240 %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> %negc, <vscale x 8 x i1> %m, i32 %evl)
1241 ret <vscale x 8 x double> %v
1244 define <vscale x 8 x double> @vfnmacc_vv_nxv8f64_nxv4f16_unmasked(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
1245 ; CHECK-LABEL: vfnmacc_vv_nxv8f64_nxv4f16_unmasked:
1247 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
1248 ; CHECK-NEXT: vfwcvt.f.f.v v12, v8
1249 ; CHECK-NEXT: vfwcvt.f.f.v v24, v10
1250 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1251 ; CHECK-NEXT: vfwnmacc.vv v16, v12, v24
1252 ; CHECK-NEXT: vmv8r.v v8, v16
1254 %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1255 %bext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1256 %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)
1257 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1258 %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> %negc, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1259 ret <vscale x 8 x double> %v