Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfmacc-vp.ll
blob54855e6152b95e6e615b42206aa312124a0fd696
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
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s
7 declare <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32)
8 declare <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32)
9 declare <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1>, <vscale x 1 x half>, <vscale x 1 x half>, i32)
10 declare <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1>, <vscale x 1 x half>, <vscale x 1 x half>, i32)
12 define <vscale x 1 x half> @vfmacc_vv_nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
13 ; CHECK-LABEL: vfmacc_vv_nxv1f16:
14 ; CHECK:       # %bb.0:
15 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
16 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
17 ; CHECK-NEXT:    vmv1r.v v8, v10
18 ; CHECK-NEXT:    ret
19   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
20   %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)
21   ret <vscale x 1 x half> %u
24 define <vscale x 1 x half> @vfmacc_vv_nxv1f16_unmasked(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
25 ; CHECK-LABEL: vfmacc_vv_nxv1f16_unmasked:
26 ; CHECK:       # %bb.0:
27 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
28 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
29 ; CHECK-NEXT:    vmv1r.v v8, v10
30 ; CHECK-NEXT:    ret
31   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
32   %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)
33   ret <vscale x 1 x half> %u
36 define <vscale x 1 x half> @vfmacc_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
37 ; CHECK-LABEL: vfmacc_vf_nxv1f16:
38 ; CHECK:       # %bb.0:
39 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
40 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
41 ; CHECK-NEXT:    vmv1r.v v8, v9
42 ; CHECK-NEXT:    ret
43   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
44   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
45   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
46   %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)
47   ret <vscale x 1 x half> %u
50 define <vscale x 1 x half> @vfmacc_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
51 ; CHECK-LABEL: vfmacc_vf_nxv1f16_commute:
52 ; CHECK:       # %bb.0:
53 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu
54 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
55 ; CHECK-NEXT:    vmv1r.v v8, v9
56 ; CHECK-NEXT:    ret
57   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
58   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
59   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
60   %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)
61   ret <vscale x 1 x half> %u
64 define <vscale x 1 x half> @vfmacc_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, i32 zeroext %evl) {
65 ; CHECK-LABEL: vfmacc_vf_nxv1f16_unmasked:
66 ; CHECK:       # %bb.0:
67 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
68 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
69 ; CHECK-NEXT:    vmv1r.v v8, v9
70 ; CHECK-NEXT:    ret
71   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
72   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
73   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
74   %u = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)
75   ret <vscale x 1 x half> %u
78 define <vscale x 1 x half> @vfmacc_vv_nxv1f16_ta(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
79 ; CHECK-LABEL: vfmacc_vv_nxv1f16_ta:
80 ; CHECK:       # %bb.0:
81 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
82 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
83 ; CHECK-NEXT:    vmv1r.v v8, v10
84 ; CHECK-NEXT:    ret
85   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
86   %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)
87   ret <vscale x 1 x half> %u
90 define <vscale x 1 x half> @vfmacc_vf_nxv1f16_ta(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
91 ; CHECK-LABEL: vfmacc_vf_nxv1f16_ta:
92 ; CHECK:       # %bb.0:
93 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
94 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
95 ; CHECK-NEXT:    vmv1r.v v8, v9
96 ; CHECK-NEXT:    ret
97   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
98   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
99   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
100   %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)
101   ret <vscale x 1 x half> %u
104 define <vscale x 1 x half> @vfmacc_vf_nxv1f16_commute_ta(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
105 ; CHECK-LABEL: vfmacc_vf_nxv1f16_commute_ta:
106 ; CHECK:       # %bb.0:
107 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
108 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
109 ; CHECK-NEXT:    vmv1r.v v8, v9
110 ; CHECK-NEXT:    ret
111   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
112   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
113   %v = call <vscale x 1 x half> @llvm.vp.fma.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
114   %u = call <vscale x 1 x half> @llvm.vp.select.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %v, <vscale x 1 x half> %c, i32 %evl)
115   ret <vscale x 1 x half> %u
118 declare <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32)
119 declare <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
120 declare <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1>, <vscale x 2 x half>, <vscale x 2 x half>, i32)
121 declare <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1>, <vscale x 2 x half>, <vscale x 2 x half>, i32)
123 define <vscale x 2 x half> @vfmacc_vv_nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
124 ; CHECK-LABEL: vfmacc_vv_nxv2f16:
125 ; CHECK:       # %bb.0:
126 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
127 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
128 ; CHECK-NEXT:    vmv1r.v v8, v10
129 ; CHECK-NEXT:    ret
130   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
131   %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)
132   ret <vscale x 2 x half> %u
135 define <vscale x 2 x half> @vfmacc_vv_nxv2f16_unmasked(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
136 ; CHECK-LABEL: vfmacc_vv_nxv2f16_unmasked:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
139 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
140 ; CHECK-NEXT:    vmv1r.v v8, v10
141 ; CHECK-NEXT:    ret
142   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
143   %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)
144   ret <vscale x 2 x half> %u
147 define <vscale x 2 x half> @vfmacc_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
148 ; CHECK-LABEL: vfmacc_vf_nxv2f16:
149 ; CHECK:       # %bb.0:
150 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
151 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
152 ; CHECK-NEXT:    vmv1r.v v8, v9
153 ; CHECK-NEXT:    ret
154   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
155   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
156   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
157   %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)
158   ret <vscale x 2 x half> %u
161 define <vscale x 2 x half> @vfmacc_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
162 ; CHECK-LABEL: vfmacc_vf_nxv2f16_commute:
163 ; CHECK:       # %bb.0:
164 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
165 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
166 ; CHECK-NEXT:    vmv1r.v v8, v9
167 ; CHECK-NEXT:    ret
168   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
169   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
170   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
171   %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)
172   ret <vscale x 2 x half> %u
175 define <vscale x 2 x half> @vfmacc_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, i32 zeroext %evl) {
176 ; CHECK-LABEL: vfmacc_vf_nxv2f16_unmasked:
177 ; CHECK:       # %bb.0:
178 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
179 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
180 ; CHECK-NEXT:    vmv1r.v v8, v9
181 ; CHECK-NEXT:    ret
182   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
183   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
184   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
185   %u = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)
186   ret <vscale x 2 x half> %u
189 define <vscale x 2 x half> @vfmacc_vv_nxv2f16_ta(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
190 ; CHECK-LABEL: vfmacc_vv_nxv2f16_ta:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
193 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
194 ; CHECK-NEXT:    vmv1r.v v8, v10
195 ; CHECK-NEXT:    ret
196   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
197   %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)
198   ret <vscale x 2 x half> %u
201 define <vscale x 2 x half> @vfmacc_vf_nxv2f16_ta(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
202 ; CHECK-LABEL: vfmacc_vf_nxv2f16_ta:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
205 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
206 ; CHECK-NEXT:    vmv1r.v v8, v9
207 ; CHECK-NEXT:    ret
208   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
209   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
210   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
211   %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)
212   ret <vscale x 2 x half> %u
215 define <vscale x 2 x half> @vfmacc_vf_nxv2f16_commute_ta(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
216 ; CHECK-LABEL: vfmacc_vf_nxv2f16_commute_ta:
217 ; CHECK:       # %bb.0:
218 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
219 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
220 ; CHECK-NEXT:    vmv1r.v v8, v9
221 ; CHECK-NEXT:    ret
222   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
223   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
224   %v = call <vscale x 2 x half> @llvm.vp.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
225   %u = call <vscale x 2 x half> @llvm.vp.select.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %v, <vscale x 2 x half> %c, i32 %evl)
226   ret <vscale x 2 x half> %u
229 declare <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32)
230 declare <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32)
231 declare <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1>, <vscale x 4 x half>, <vscale x 4 x half>, i32)
232 declare <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1>, <vscale x 4 x half>, <vscale x 4 x half>, i32)
234 define <vscale x 4 x half> @vfmacc_vv_nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
235 ; CHECK-LABEL: vfmacc_vv_nxv4f16:
236 ; CHECK:       # %bb.0:
237 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
238 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
239 ; CHECK-NEXT:    vmv1r.v v8, v10
240 ; CHECK-NEXT:    ret
241   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
242   %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)
243   ret <vscale x 4 x half> %u
246 define <vscale x 4 x half> @vfmacc_vv_nxv4f16_unmasked(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
247 ; CHECK-LABEL: vfmacc_vv_nxv4f16_unmasked:
248 ; CHECK:       # %bb.0:
249 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
250 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
251 ; CHECK-NEXT:    vmv1r.v v8, v10
252 ; CHECK-NEXT:    ret
253   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
254   %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)
255   ret <vscale x 4 x half> %u
258 define <vscale x 4 x half> @vfmacc_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
259 ; CHECK-LABEL: vfmacc_vf_nxv4f16:
260 ; CHECK:       # %bb.0:
261 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
262 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
263 ; CHECK-NEXT:    vmv1r.v v8, v9
264 ; CHECK-NEXT:    ret
265   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
266   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
267   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
268   %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)
269   ret <vscale x 4 x half> %u
272 define <vscale x 4 x half> @vfmacc_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
273 ; CHECK-LABEL: vfmacc_vf_nxv4f16_commute:
274 ; CHECK:       # %bb.0:
275 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu
276 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
277 ; CHECK-NEXT:    vmv1r.v v8, v9
278 ; CHECK-NEXT:    ret
279   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
280   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
281   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
282   %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)
283   ret <vscale x 4 x half> %u
286 define <vscale x 4 x half> @vfmacc_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, i32 zeroext %evl) {
287 ; CHECK-LABEL: vfmacc_vf_nxv4f16_unmasked:
288 ; CHECK:       # %bb.0:
289 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
290 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
291 ; CHECK-NEXT:    vmv1r.v v8, v9
292 ; CHECK-NEXT:    ret
293   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
294   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
295   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
296   %u = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)
297   ret <vscale x 4 x half> %u
300 define <vscale x 4 x half> @vfmacc_vv_nxv4f16_ta(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
301 ; CHECK-LABEL: vfmacc_vv_nxv4f16_ta:
302 ; CHECK:       # %bb.0:
303 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
304 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
305 ; CHECK-NEXT:    vmv.v.v v8, v10
306 ; CHECK-NEXT:    ret
307   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
308   %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)
309   ret <vscale x 4 x half> %u
312 define <vscale x 4 x half> @vfmacc_vf_nxv4f16_ta(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
313 ; CHECK-LABEL: vfmacc_vf_nxv4f16_ta:
314 ; CHECK:       # %bb.0:
315 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
316 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
317 ; CHECK-NEXT:    vmv.v.v v8, v9
318 ; CHECK-NEXT:    ret
319   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
320   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
321   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
322   %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)
323   ret <vscale x 4 x half> %u
326 define <vscale x 4 x half> @vfmacc_vf_nxv4f16_commute_ta(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
327 ; CHECK-LABEL: vfmacc_vf_nxv4f16_commute_ta:
328 ; CHECK:       # %bb.0:
329 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
330 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
331 ; CHECK-NEXT:    vmv.v.v v8, v9
332 ; CHECK-NEXT:    ret
333   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
334   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
335   %v = call <vscale x 4 x half> @llvm.vp.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
336   %u = call <vscale x 4 x half> @llvm.vp.select.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %v, <vscale x 4 x half> %c, i32 %evl)
337   ret <vscale x 4 x half> %u
340 declare <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32)
341 declare <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32)
342 declare <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
343 declare <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
345 define <vscale x 8 x half> @vfmacc_vv_nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
346 ; CHECK-LABEL: vfmacc_vv_nxv8f16:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
349 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
350 ; CHECK-NEXT:    vmv2r.v v8, v12
351 ; CHECK-NEXT:    ret
352   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
353   %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)
354   ret <vscale x 8 x half> %u
357 define <vscale x 8 x half> @vfmacc_vv_nxv8f16_unmasked(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
358 ; CHECK-LABEL: vfmacc_vv_nxv8f16_unmasked:
359 ; CHECK:       # %bb.0:
360 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
361 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
362 ; CHECK-NEXT:    vmv2r.v v8, v12
363 ; CHECK-NEXT:    ret
364   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
365   %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)
366   ret <vscale x 8 x half> %u
369 define <vscale x 8 x half> @vfmacc_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
370 ; CHECK-LABEL: vfmacc_vf_nxv8f16:
371 ; CHECK:       # %bb.0:
372 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
373 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
374 ; CHECK-NEXT:    vmv2r.v v8, v10
375 ; CHECK-NEXT:    ret
376   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
377   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
378   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
379   %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)
380   ret <vscale x 8 x half> %u
383 define <vscale x 8 x half> @vfmacc_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
384 ; CHECK-LABEL: vfmacc_vf_nxv8f16_commute:
385 ; CHECK:       # %bb.0:
386 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu
387 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
388 ; CHECK-NEXT:    vmv2r.v v8, v10
389 ; CHECK-NEXT:    ret
390   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
391   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
392   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
393   %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)
394   ret <vscale x 8 x half> %u
397 define <vscale x 8 x half> @vfmacc_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, i32 zeroext %evl) {
398 ; CHECK-LABEL: vfmacc_vf_nxv8f16_unmasked:
399 ; CHECK:       # %bb.0:
400 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
401 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
402 ; CHECK-NEXT:    vmv2r.v v8, v10
403 ; CHECK-NEXT:    ret
404   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
405   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
406   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
407   %u = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)
408   ret <vscale x 8 x half> %u
411 define <vscale x 8 x half> @vfmacc_vv_nxv8f16_ta(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
412 ; CHECK-LABEL: vfmacc_vv_nxv8f16_ta:
413 ; CHECK:       # %bb.0:
414 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
415 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
416 ; CHECK-NEXT:    vmv.v.v v8, v12
417 ; CHECK-NEXT:    ret
418   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
419   %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)
420   ret <vscale x 8 x half> %u
423 define <vscale x 8 x half> @vfmacc_vf_nxv8f16_ta(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
424 ; CHECK-LABEL: vfmacc_vf_nxv8f16_ta:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
427 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
428 ; CHECK-NEXT:    vmv.v.v v8, v10
429 ; CHECK-NEXT:    ret
430   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
431   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
432   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
433   %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)
434   ret <vscale x 8 x half> %u
437 define <vscale x 8 x half> @vfmacc_vf_nxv8f16_commute_ta(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
438 ; CHECK-LABEL: vfmacc_vf_nxv8f16_commute_ta:
439 ; CHECK:       # %bb.0:
440 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
441 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
442 ; CHECK-NEXT:    vmv.v.v v8, v10
443 ; CHECK-NEXT:    ret
444   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
445   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
446   %v = call <vscale x 8 x half> @llvm.vp.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
447   %u = call <vscale x 8 x half> @llvm.vp.select.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %v, <vscale x 8 x half> %c, i32 %evl)
448   ret <vscale x 8 x half> %u
451 declare <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32)
452 declare <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32)
453 declare <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1>, <vscale x 16 x half>, <vscale x 16 x half>, i32)
454 declare <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1>, <vscale x 16 x half>, <vscale x 16 x half>, i32)
456 define <vscale x 16 x half> @vfmacc_vv_nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
457 ; CHECK-LABEL: vfmacc_vv_nxv16f16:
458 ; CHECK:       # %bb.0:
459 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
460 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
461 ; CHECK-NEXT:    vmv4r.v v8, v16
462 ; CHECK-NEXT:    ret
463   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
464   %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)
465   ret <vscale x 16 x half> %u
468 define <vscale x 16 x half> @vfmacc_vv_nxv16f16_unmasked(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
469 ; CHECK-LABEL: vfmacc_vv_nxv16f16_unmasked:
470 ; CHECK:       # %bb.0:
471 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
472 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
473 ; CHECK-NEXT:    vmv4r.v v8, v16
474 ; CHECK-NEXT:    ret
475   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
476   %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)
477   ret <vscale x 16 x half> %u
480 define <vscale x 16 x half> @vfmacc_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
481 ; CHECK-LABEL: vfmacc_vf_nxv16f16:
482 ; CHECK:       # %bb.0:
483 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
484 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
485 ; CHECK-NEXT:    vmv4r.v v8, v12
486 ; CHECK-NEXT:    ret
487   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
488   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
489   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
490   %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)
491   ret <vscale x 16 x half> %u
494 define <vscale x 16 x half> @vfmacc_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
495 ; CHECK-LABEL: vfmacc_vf_nxv16f16_commute:
496 ; CHECK:       # %bb.0:
497 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu
498 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
499 ; CHECK-NEXT:    vmv4r.v v8, v12
500 ; CHECK-NEXT:    ret
501   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
502   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
503   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
504   %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)
505   ret <vscale x 16 x half> %u
508 define <vscale x 16 x half> @vfmacc_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, i32 zeroext %evl) {
509 ; CHECK-LABEL: vfmacc_vf_nxv16f16_unmasked:
510 ; CHECK:       # %bb.0:
511 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
512 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
513 ; CHECK-NEXT:    vmv4r.v v8, v12
514 ; CHECK-NEXT:    ret
515   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
516   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
517   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
518   %u = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)
519   ret <vscale x 16 x half> %u
522 define <vscale x 16 x half> @vfmacc_vv_nxv16f16_ta(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
523 ; CHECK-LABEL: vfmacc_vv_nxv16f16_ta:
524 ; CHECK:       # %bb.0:
525 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
526 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
527 ; CHECK-NEXT:    vmv.v.v v8, v16
528 ; CHECK-NEXT:    ret
529   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
530   %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)
531   ret <vscale x 16 x half> %u
534 define <vscale x 16 x half> @vfmacc_vf_nxv16f16_ta(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
535 ; CHECK-LABEL: vfmacc_vf_nxv16f16_ta:
536 ; CHECK:       # %bb.0:
537 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
538 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
539 ; CHECK-NEXT:    vmv.v.v v8, v12
540 ; CHECK-NEXT:    ret
541   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
542   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
543   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
544   %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)
545   ret <vscale x 16 x half> %u
548 define <vscale x 16 x half> @vfmacc_vf_nxv16f16_commute_ta(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
549 ; CHECK-LABEL: vfmacc_vf_nxv16f16_commute_ta:
550 ; CHECK:       # %bb.0:
551 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
552 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
553 ; CHECK-NEXT:    vmv.v.v v8, v12
554 ; CHECK-NEXT:    ret
555   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
556   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
557   %v = call <vscale x 16 x half> @llvm.vp.fma.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
558   %u = call <vscale x 16 x half> @llvm.vp.select.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %v, <vscale x 16 x half> %c, i32 %evl)
559   ret <vscale x 16 x half> %u
562 declare <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32)
563 declare <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32)
564 declare <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1>, <vscale x 32 x half>, <vscale x 32 x half>, i32)
565 declare <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1>, <vscale x 32 x half>, <vscale x 32 x half>, i32)
567 define <vscale x 32 x half> @vfmacc_vv_nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
568 ; CHECK-LABEL: vfmacc_vv_nxv32f16:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vl8re16.v v24, (a0)
571 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, mu
572 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t
573 ; CHECK-NEXT:    vmv8r.v v8, v24
574 ; CHECK-NEXT:    ret
575   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
576   %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)
577   ret <vscale x 32 x half> %u
580 define <vscale x 32 x half> @vfmacc_vv_nxv32f16_unmasked(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
581 ; CHECK-LABEL: vfmacc_vv_nxv32f16_unmasked:
582 ; CHECK:       # %bb.0:
583 ; CHECK-NEXT:    vl8re16.v v24, (a0)
584 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, tu, ma
585 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16
586 ; CHECK-NEXT:    vmv8r.v v8, v24
587 ; CHECK-NEXT:    ret
588   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
589   %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)
590   ret <vscale x 32 x half> %u
593 define <vscale x 32 x half> @vfmacc_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
594 ; CHECK-LABEL: vfmacc_vf_nxv32f16:
595 ; CHECK:       # %bb.0:
596 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, mu
597 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
598 ; CHECK-NEXT:    vmv8r.v v8, v16
599 ; CHECK-NEXT:    ret
600   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
601   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
602   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
603   %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)
604   ret <vscale x 32 x half> %u
607 define <vscale x 32 x half> @vfmacc_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
608 ; CHECK-LABEL: vfmacc_vf_nxv32f16_commute:
609 ; CHECK:       # %bb.0:
610 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, mu
611 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
612 ; CHECK-NEXT:    vmv8r.v v8, v16
613 ; CHECK-NEXT:    ret
614   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
615   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
616   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
617   %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)
618   ret <vscale x 32 x half> %u
621 define <vscale x 32 x half> @vfmacc_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, i32 zeroext %evl) {
622 ; CHECK-LABEL: vfmacc_vf_nxv32f16_unmasked:
623 ; CHECK:       # %bb.0:
624 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, ma
625 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8
626 ; CHECK-NEXT:    vmv8r.v v8, v16
627 ; CHECK-NEXT:    ret
628   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
629   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
630   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
631   %u = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> splat (i1 -1), <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)
632   ret <vscale x 32 x half> %u
635 define <vscale x 32 x half> @vfmacc_vv_nxv32f16_ta(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
636 ; CHECK-LABEL: vfmacc_vv_nxv32f16_ta:
637 ; CHECK:       # %bb.0:
638 ; CHECK-NEXT:    vl8re16.v v24, (a0)
639 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
640 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t
641 ; CHECK-NEXT:    vmv.v.v v8, v24
642 ; CHECK-NEXT:    ret
643   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
644   %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)
645   ret <vscale x 32 x half> %u
648 define <vscale x 32 x half> @vfmacc_vf_nxv32f16_ta(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
649 ; CHECK-LABEL: vfmacc_vf_nxv32f16_ta:
650 ; CHECK:       # %bb.0:
651 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, mu
652 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
653 ; CHECK-NEXT:    vmv.v.v v8, v16
654 ; CHECK-NEXT:    ret
655   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
656   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
657   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
658   %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)
659   ret <vscale x 32 x half> %u
662 define <vscale x 32 x half> @vfmacc_vf_nxv32f16_commute_ta(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) {
663 ; CHECK-LABEL: vfmacc_vf_nxv32f16_commute_ta:
664 ; CHECK:       # %bb.0:
665 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, mu
666 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
667 ; CHECK-NEXT:    vmv.v.v v8, v16
668 ; CHECK-NEXT:    ret
669   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
670   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
671   %v = call <vscale x 32 x half> @llvm.vp.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 -1), i32 %evl)
672   %u = call <vscale x 32 x half> @llvm.vp.select.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %v, <vscale x 32 x half> %c, i32 %evl)
673   ret <vscale x 32 x half> %u
676 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)
677 declare <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32)
678 declare <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1>, <vscale x 1 x float>, <vscale x 1 x float>, i32)
679 declare <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1>, <vscale x 1 x float>, <vscale x 1 x float>, i32)
681 define <vscale x 1 x float> @vfmacc_vv_nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
682 ; CHECK-LABEL: vfmacc_vv_nxv1f32:
683 ; CHECK:       # %bb.0:
684 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
685 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
686 ; CHECK-NEXT:    vmv1r.v v8, v10
687 ; CHECK-NEXT:    ret
688   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
689   %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)
690   ret <vscale x 1 x float> %u
693 define <vscale x 1 x float> @vfmacc_vv_nxv1f32_unmasked(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
694 ; CHECK-LABEL: vfmacc_vv_nxv1f32_unmasked:
695 ; CHECK:       # %bb.0:
696 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
697 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
698 ; CHECK-NEXT:    vmv1r.v v8, v10
699 ; CHECK-NEXT:    ret
700   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
701   %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)
702   ret <vscale x 1 x float> %u
705 define <vscale x 1 x float> @vfmacc_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
706 ; CHECK-LABEL: vfmacc_vf_nxv1f32:
707 ; CHECK:       # %bb.0:
708 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
709 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
710 ; CHECK-NEXT:    vmv1r.v v8, v9
711 ; CHECK-NEXT:    ret
712   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
713   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
714   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
715   %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)
716   ret <vscale x 1 x float> %u
719 define <vscale x 1 x float> @vfmacc_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
720 ; CHECK-LABEL: vfmacc_vf_nxv1f32_commute:
721 ; CHECK:       # %bb.0:
722 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu
723 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
724 ; CHECK-NEXT:    vmv1r.v v8, v9
725 ; CHECK-NEXT:    ret
726   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
727   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
728   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
729   %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)
730   ret <vscale x 1 x float> %u
733 define <vscale x 1 x float> @vfmacc_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, i32 zeroext %evl) {
734 ; CHECK-LABEL: vfmacc_vf_nxv1f32_unmasked:
735 ; CHECK:       # %bb.0:
736 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
737 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
738 ; CHECK-NEXT:    vmv1r.v v8, v9
739 ; CHECK-NEXT:    ret
740   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
741   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
742   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
743   %u = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)
744   ret <vscale x 1 x float> %u
747 define <vscale x 1 x float> @vfmacc_vv_nxv1f32_ta(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
748 ; CHECK-LABEL: vfmacc_vv_nxv1f32_ta:
749 ; CHECK:       # %bb.0:
750 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
751 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
752 ; CHECK-NEXT:    vmv1r.v v8, v10
753 ; CHECK-NEXT:    ret
754   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
755   %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)
756   ret <vscale x 1 x float> %u
759 define <vscale x 1 x float> @vfmacc_vf_nxv1f32_ta(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
760 ; CHECK-LABEL: vfmacc_vf_nxv1f32_ta:
761 ; CHECK:       # %bb.0:
762 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
763 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
764 ; CHECK-NEXT:    vmv1r.v v8, v9
765 ; CHECK-NEXT:    ret
766   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
767   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
768   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
769   %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)
770   ret <vscale x 1 x float> %u
773 define <vscale x 1 x float> @vfmacc_vf_nxv1f32_commute_ta(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
774 ; CHECK-LABEL: vfmacc_vf_nxv1f32_commute_ta:
775 ; CHECK:       # %bb.0:
776 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
777 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
778 ; CHECK-NEXT:    vmv1r.v v8, v9
779 ; CHECK-NEXT:    ret
780   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
781   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
782   %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
783   %u = call <vscale x 1 x float> @llvm.vp.select.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %v, <vscale x 1 x float> %c, i32 %evl)
784   ret <vscale x 1 x float> %u
787 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)
788 declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
789 declare <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1>, <vscale x 2 x float>, <vscale x 2 x float>, i32)
790 declare <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1>, <vscale x 2 x float>, <vscale x 2 x float>, i32)
792 define <vscale x 2 x float> @vfmacc_vv_nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
793 ; CHECK-LABEL: vfmacc_vv_nxv2f32:
794 ; CHECK:       # %bb.0:
795 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
796 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
797 ; CHECK-NEXT:    vmv1r.v v8, v10
798 ; CHECK-NEXT:    ret
799   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
800   %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)
801   ret <vscale x 2 x float> %u
804 define <vscale x 2 x float> @vfmacc_vv_nxv2f32_unmasked(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
805 ; CHECK-LABEL: vfmacc_vv_nxv2f32_unmasked:
806 ; CHECK:       # %bb.0:
807 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
808 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
809 ; CHECK-NEXT:    vmv1r.v v8, v10
810 ; CHECK-NEXT:    ret
811   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
812   %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)
813   ret <vscale x 2 x float> %u
816 define <vscale x 2 x float> @vfmacc_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
817 ; CHECK-LABEL: vfmacc_vf_nxv2f32:
818 ; CHECK:       # %bb.0:
819 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
820 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
821 ; CHECK-NEXT:    vmv1r.v v8, v9
822 ; CHECK-NEXT:    ret
823   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
824   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
825   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
826   %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)
827   ret <vscale x 2 x float> %u
830 define <vscale x 2 x float> @vfmacc_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
831 ; CHECK-LABEL: vfmacc_vf_nxv2f32_commute:
832 ; CHECK:       # %bb.0:
833 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
834 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
835 ; CHECK-NEXT:    vmv1r.v v8, v9
836 ; CHECK-NEXT:    ret
837   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
838   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
839   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
840   %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)
841   ret <vscale x 2 x float> %u
844 define <vscale x 2 x float> @vfmacc_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, i32 zeroext %evl) {
845 ; CHECK-LABEL: vfmacc_vf_nxv2f32_unmasked:
846 ; CHECK:       # %bb.0:
847 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
848 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
849 ; CHECK-NEXT:    vmv1r.v v8, v9
850 ; CHECK-NEXT:    ret
851   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
852   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
853   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
854   %u = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)
855   ret <vscale x 2 x float> %u
858 define <vscale x 2 x float> @vfmacc_vv_nxv2f32_ta(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
859 ; CHECK-LABEL: vfmacc_vv_nxv2f32_ta:
860 ; CHECK:       # %bb.0:
861 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
862 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
863 ; CHECK-NEXT:    vmv.v.v v8, v10
864 ; CHECK-NEXT:    ret
865   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
866   %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)
867   ret <vscale x 2 x float> %u
870 define <vscale x 2 x float> @vfmacc_vf_nxv2f32_ta(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
871 ; CHECK-LABEL: vfmacc_vf_nxv2f32_ta:
872 ; CHECK:       # %bb.0:
873 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
874 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
875 ; CHECK-NEXT:    vmv.v.v v8, v9
876 ; CHECK-NEXT:    ret
877   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
878   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
879   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
880   %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)
881   ret <vscale x 2 x float> %u
884 define <vscale x 2 x float> @vfmacc_vf_nxv2f32_commute_ta(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
885 ; CHECK-LABEL: vfmacc_vf_nxv2f32_commute_ta:
886 ; CHECK:       # %bb.0:
887 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
888 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
889 ; CHECK-NEXT:    vmv.v.v v8, v9
890 ; CHECK-NEXT:    ret
891   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
892   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
893   %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
894   %u = call <vscale x 2 x float> @llvm.vp.select.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %v, <vscale x 2 x float> %c, i32 %evl)
895   ret <vscale x 2 x float> %u
898 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)
899 declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32)
900 declare <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, i32)
901 declare <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, i32)
903 define <vscale x 4 x float> @vfmacc_vv_nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
904 ; CHECK-LABEL: vfmacc_vv_nxv4f32:
905 ; CHECK:       # %bb.0:
906 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
907 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
908 ; CHECK-NEXT:    vmv2r.v v8, v12
909 ; CHECK-NEXT:    ret
910   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
911   %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)
912   ret <vscale x 4 x float> %u
915 define <vscale x 4 x float> @vfmacc_vv_nxv4f32_unmasked(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
916 ; CHECK-LABEL: vfmacc_vv_nxv4f32_unmasked:
917 ; CHECK:       # %bb.0:
918 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
919 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
920 ; CHECK-NEXT:    vmv2r.v v8, v12
921 ; CHECK-NEXT:    ret
922   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
923   %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)
924   ret <vscale x 4 x float> %u
927 define <vscale x 4 x float> @vfmacc_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
928 ; CHECK-LABEL: vfmacc_vf_nxv4f32:
929 ; CHECK:       # %bb.0:
930 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
931 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
932 ; CHECK-NEXT:    vmv2r.v v8, v10
933 ; CHECK-NEXT:    ret
934   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
935   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
936   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
937   %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)
938   ret <vscale x 4 x float> %u
941 define <vscale x 4 x float> @vfmacc_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
942 ; CHECK-LABEL: vfmacc_vf_nxv4f32_commute:
943 ; CHECK:       # %bb.0:
944 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu
945 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
946 ; CHECK-NEXT:    vmv2r.v v8, v10
947 ; CHECK-NEXT:    ret
948   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
949   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
950   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
951   %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)
952   ret <vscale x 4 x float> %u
955 define <vscale x 4 x float> @vfmacc_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, i32 zeroext %evl) {
956 ; CHECK-LABEL: vfmacc_vf_nxv4f32_unmasked:
957 ; CHECK:       # %bb.0:
958 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
959 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
960 ; CHECK-NEXT:    vmv2r.v v8, v10
961 ; CHECK-NEXT:    ret
962   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
963   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
964   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
965   %u = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)
966   ret <vscale x 4 x float> %u
969 define <vscale x 4 x float> @vfmacc_vv_nxv4f32_ta(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
970 ; CHECK-LABEL: vfmacc_vv_nxv4f32_ta:
971 ; CHECK:       # %bb.0:
972 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
973 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
974 ; CHECK-NEXT:    vmv.v.v v8, v12
975 ; CHECK-NEXT:    ret
976   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
977   %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)
978   ret <vscale x 4 x float> %u
981 define <vscale x 4 x float> @vfmacc_vf_nxv4f32_ta(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
982 ; CHECK-LABEL: vfmacc_vf_nxv4f32_ta:
983 ; CHECK:       # %bb.0:
984 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
985 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
986 ; CHECK-NEXT:    vmv.v.v v8, v10
987 ; CHECK-NEXT:    ret
988   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
989   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
990   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
991   %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)
992   ret <vscale x 4 x float> %u
995 define <vscale x 4 x float> @vfmacc_vf_nxv4f32_commute_ta(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
996 ; CHECK-LABEL: vfmacc_vf_nxv4f32_commute_ta:
997 ; CHECK:       # %bb.0:
998 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
999 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1000 ; CHECK-NEXT:    vmv.v.v v8, v10
1001 ; CHECK-NEXT:    ret
1002   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
1003   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1004   %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1005   %u = call <vscale x 4 x float> @llvm.vp.select.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %v, <vscale x 4 x float> %c, i32 %evl)
1006   ret <vscale x 4 x float> %u
1009 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)
1010 declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32)
1011 declare <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1>, <vscale x 8 x float>, <vscale x 8 x float>, i32)
1012 declare <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1>, <vscale x 8 x float>, <vscale x 8 x float>, i32)
1014 define <vscale x 8 x float> @vfmacc_vv_nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1015 ; CHECK-LABEL: vfmacc_vv_nxv8f32:
1016 ; CHECK:       # %bb.0:
1017 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
1018 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1019 ; CHECK-NEXT:    vmv4r.v v8, v16
1020 ; CHECK-NEXT:    ret
1021   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1022   %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)
1023   ret <vscale x 8 x float> %u
1026 define <vscale x 8 x float> @vfmacc_vv_nxv8f32_unmasked(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1027 ; CHECK-LABEL: vfmacc_vv_nxv8f32_unmasked:
1028 ; CHECK:       # %bb.0:
1029 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
1030 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
1031 ; CHECK-NEXT:    vmv4r.v v8, v16
1032 ; CHECK-NEXT:    ret
1033   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1034   %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)
1035   ret <vscale x 8 x float> %u
1038 define <vscale x 8 x float> @vfmacc_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1039 ; CHECK-LABEL: vfmacc_vf_nxv8f32:
1040 ; CHECK:       # %bb.0:
1041 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
1042 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1043 ; CHECK-NEXT:    vmv4r.v v8, v12
1044 ; CHECK-NEXT:    ret
1045   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1046   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1047   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1048   %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)
1049   ret <vscale x 8 x float> %u
1052 define <vscale x 8 x float> @vfmacc_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1053 ; CHECK-LABEL: vfmacc_vf_nxv8f32_commute:
1054 ; CHECK:       # %bb.0:
1055 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu
1056 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1057 ; CHECK-NEXT:    vmv4r.v v8, v12
1058 ; CHECK-NEXT:    ret
1059   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1060   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1061   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1062   %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)
1063   ret <vscale x 8 x float> %u
1066 define <vscale x 8 x float> @vfmacc_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, i32 zeroext %evl) {
1067 ; CHECK-LABEL: vfmacc_vf_nxv8f32_unmasked:
1068 ; CHECK:       # %bb.0:
1069 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
1070 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
1071 ; CHECK-NEXT:    vmv4r.v v8, v12
1072 ; CHECK-NEXT:    ret
1073   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1074   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1075   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1076   %u = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)
1077   ret <vscale x 8 x float> %u
1080 define <vscale x 8 x float> @vfmacc_vv_nxv8f32_ta(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1081 ; CHECK-LABEL: vfmacc_vv_nxv8f32_ta:
1082 ; CHECK:       # %bb.0:
1083 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1084 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1085 ; CHECK-NEXT:    vmv.v.v v8, v16
1086 ; CHECK-NEXT:    ret
1087   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1088   %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)
1089   ret <vscale x 8 x float> %u
1092 define <vscale x 8 x float> @vfmacc_vf_nxv8f32_ta(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1093 ; CHECK-LABEL: vfmacc_vf_nxv8f32_ta:
1094 ; CHECK:       # %bb.0:
1095 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1096 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1097 ; CHECK-NEXT:    vmv.v.v v8, v12
1098 ; CHECK-NEXT:    ret
1099   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1100   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1101   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1102   %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)
1103   ret <vscale x 8 x float> %u
1106 define <vscale x 8 x float> @vfmacc_vf_nxv8f32_commute_ta(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1107 ; CHECK-LABEL: vfmacc_vf_nxv8f32_commute_ta:
1108 ; CHECK:       # %bb.0:
1109 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1110 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1111 ; CHECK-NEXT:    vmv.v.v v8, v12
1112 ; CHECK-NEXT:    ret
1113   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1114   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1115   %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1116   %u = call <vscale x 8 x float> @llvm.vp.select.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %v, <vscale x 8 x float> %c, i32 %evl)
1117   ret <vscale x 8 x float> %u
1120 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)
1121 declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32)
1122 declare <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1>, <vscale x 16 x float>, <vscale x 16 x float>, i32)
1123 declare <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1>, <vscale x 16 x float>, <vscale x 16 x float>, i32)
1125 define <vscale x 16 x float> @vfmacc_vv_nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1126 ; CHECK-LABEL: vfmacc_vv_nxv16f32:
1127 ; CHECK:       # %bb.0:
1128 ; CHECK-NEXT:    vl8re32.v v24, (a0)
1129 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, mu
1130 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t
1131 ; CHECK-NEXT:    vmv8r.v v8, v24
1132 ; CHECK-NEXT:    ret
1133   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1134   %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)
1135   ret <vscale x 16 x float> %u
1138 define <vscale x 16 x float> @vfmacc_vv_nxv16f32_unmasked(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1139 ; CHECK-LABEL: vfmacc_vv_nxv16f32_unmasked:
1140 ; CHECK:       # %bb.0:
1141 ; CHECK-NEXT:    vl8re32.v v24, (a0)
1142 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, tu, ma
1143 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16
1144 ; CHECK-NEXT:    vmv8r.v v8, v24
1145 ; CHECK-NEXT:    ret
1146   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1147   %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)
1148   ret <vscale x 16 x float> %u
1151 define <vscale x 16 x float> @vfmacc_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1152 ; CHECK-LABEL: vfmacc_vf_nxv16f32:
1153 ; CHECK:       # %bb.0:
1154 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, mu
1155 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
1156 ; CHECK-NEXT:    vmv8r.v v8, v16
1157 ; CHECK-NEXT:    ret
1158   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1159   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1160   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1161   %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)
1162   ret <vscale x 16 x float> %u
1165 define <vscale x 16 x float> @vfmacc_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1166 ; CHECK-LABEL: vfmacc_vf_nxv16f32_commute:
1167 ; CHECK:       # %bb.0:
1168 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, mu
1169 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
1170 ; CHECK-NEXT:    vmv8r.v v8, v16
1171 ; CHECK-NEXT:    ret
1172   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1173   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1174   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1175   %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)
1176   ret <vscale x 16 x float> %u
1179 define <vscale x 16 x float> @vfmacc_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, i32 zeroext %evl) {
1180 ; CHECK-LABEL: vfmacc_vf_nxv16f32_unmasked:
1181 ; CHECK:       # %bb.0:
1182 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, ma
1183 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8
1184 ; CHECK-NEXT:    vmv8r.v v8, v16
1185 ; CHECK-NEXT:    ret
1186   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1187   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1188   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1189   %u = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> splat (i1 -1), <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)
1190   ret <vscale x 16 x float> %u
1193 define <vscale x 16 x float> @vfmacc_vv_nxv16f32_ta(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1194 ; CHECK-LABEL: vfmacc_vv_nxv16f32_ta:
1195 ; CHECK:       # %bb.0:
1196 ; CHECK-NEXT:    vl8re32.v v24, (a0)
1197 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
1198 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t
1199 ; CHECK-NEXT:    vmv.v.v v8, v24
1200 ; CHECK-NEXT:    ret
1201   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1202   %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)
1203   ret <vscale x 16 x float> %u
1206 define <vscale x 16 x float> @vfmacc_vf_nxv16f32_ta(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1207 ; CHECK-LABEL: vfmacc_vf_nxv16f32_ta:
1208 ; CHECK:       # %bb.0:
1209 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, mu
1210 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
1211 ; CHECK-NEXT:    vmv.v.v v8, v16
1212 ; CHECK-NEXT:    ret
1213   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1214   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1215   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1216   %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)
1217   ret <vscale x 16 x float> %u
1220 define <vscale x 16 x float> @vfmacc_vf_nxv16f32_commute_ta(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1221 ; CHECK-LABEL: vfmacc_vf_nxv16f32_commute_ta:
1222 ; CHECK:       # %bb.0:
1223 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, mu
1224 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
1225 ; CHECK-NEXT:    vmv.v.v v8, v16
1226 ; CHECK-NEXT:    ret
1227   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
1228   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
1229   %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)
1230   %u = call <vscale x 16 x float> @llvm.vp.select.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %v, <vscale x 16 x float> %c, i32 %evl)
1231   ret <vscale x 16 x float> %u
1234 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)
1235 declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32)
1236 declare <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1>, <vscale x 1 x double>, <vscale x 1 x double>, i32)
1237 declare <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1>, <vscale x 1 x double>, <vscale x 1 x double>, i32)
1239 define <vscale x 1 x double> @vfmacc_vv_nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1240 ; CHECK-LABEL: vfmacc_vv_nxv1f64:
1241 ; CHECK:       # %bb.0:
1242 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1243 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
1244 ; CHECK-NEXT:    vmv1r.v v8, v10
1245 ; CHECK-NEXT:    ret
1246   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1247   %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)
1248   ret <vscale x 1 x double> %u
1251 define <vscale x 1 x double> @vfmacc_vv_nxv1f64_unmasked(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1252 ; CHECK-LABEL: vfmacc_vv_nxv1f64_unmasked:
1253 ; CHECK:       # %bb.0:
1254 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
1255 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9
1256 ; CHECK-NEXT:    vmv1r.v v8, v10
1257 ; CHECK-NEXT:    ret
1258   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1259   %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)
1260   ret <vscale x 1 x double> %u
1263 define <vscale x 1 x double> @vfmacc_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1264 ; CHECK-LABEL: vfmacc_vf_nxv1f64:
1265 ; CHECK:       # %bb.0:
1266 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1267 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1268 ; CHECK-NEXT:    vmv1r.v v8, v9
1269 ; CHECK-NEXT:    ret
1270   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1271   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1272   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1273   %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)
1274   ret <vscale x 1 x double> %u
1277 define <vscale x 1 x double> @vfmacc_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1278 ; CHECK-LABEL: vfmacc_vf_nxv1f64_commute:
1279 ; CHECK:       # %bb.0:
1280 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu
1281 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1282 ; CHECK-NEXT:    vmv1r.v v8, v9
1283 ; CHECK-NEXT:    ret
1284   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1285   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1286   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1287   %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)
1288   ret <vscale x 1 x double> %u
1291 define <vscale x 1 x double> @vfmacc_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, i32 zeroext %evl) {
1292 ; CHECK-LABEL: vfmacc_vf_nxv1f64_unmasked:
1293 ; CHECK:       # %bb.0:
1294 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
1295 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8
1296 ; CHECK-NEXT:    vmv1r.v v8, v9
1297 ; CHECK-NEXT:    ret
1298   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1299   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1300   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1301   %u = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> splat (i1 -1), <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)
1302   ret <vscale x 1 x double> %u
1305 define <vscale x 1 x double> @vfmacc_vv_nxv1f64_ta(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1306 ; CHECK-LABEL: vfmacc_vv_nxv1f64_ta:
1307 ; CHECK:       # %bb.0:
1308 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1309 ; CHECK-NEXT:    vfmacc.vv v10, v8, v9, v0.t
1310 ; CHECK-NEXT:    vmv.v.v v8, v10
1311 ; CHECK-NEXT:    ret
1312   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1313   %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)
1314   ret <vscale x 1 x double> %u
1317 define <vscale x 1 x double> @vfmacc_vf_nxv1f64_ta(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1318 ; CHECK-LABEL: vfmacc_vf_nxv1f64_ta:
1319 ; CHECK:       # %bb.0:
1320 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1321 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1322 ; CHECK-NEXT:    vmv.v.v v8, v9
1323 ; CHECK-NEXT:    ret
1324   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1325   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1326   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1327   %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)
1328   ret <vscale x 1 x double> %u
1331 define <vscale x 1 x double> @vfmacc_vf_nxv1f64_commute_ta(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1332 ; CHECK-LABEL: vfmacc_vf_nxv1f64_commute_ta:
1333 ; CHECK:       # %bb.0:
1334 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1335 ; CHECK-NEXT:    vfmacc.vf v9, fa0, v8, v0.t
1336 ; CHECK-NEXT:    vmv.v.v v8, v9
1337 ; CHECK-NEXT:    ret
1338   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
1339   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
1340   %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)
1341   %u = call <vscale x 1 x double> @llvm.vp.select.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %v, <vscale x 1 x double> %c, i32 %evl)
1342   ret <vscale x 1 x double> %u
1345 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)
1346 declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
1347 declare <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, i32)
1348 declare <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, i32)
1350 define <vscale x 2 x double> @vfmacc_vv_nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1351 ; CHECK-LABEL: vfmacc_vv_nxv2f64:
1352 ; CHECK:       # %bb.0:
1353 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1354 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
1355 ; CHECK-NEXT:    vmv2r.v v8, v12
1356 ; CHECK-NEXT:    ret
1357   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1358   %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)
1359   ret <vscale x 2 x double> %u
1362 define <vscale x 2 x double> @vfmacc_vv_nxv2f64_unmasked(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1363 ; CHECK-LABEL: vfmacc_vv_nxv2f64_unmasked:
1364 ; CHECK:       # %bb.0:
1365 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
1366 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10
1367 ; CHECK-NEXT:    vmv2r.v v8, v12
1368 ; CHECK-NEXT:    ret
1369   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1370   %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)
1371   ret <vscale x 2 x double> %u
1374 define <vscale x 2 x double> @vfmacc_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1375 ; CHECK-LABEL: vfmacc_vf_nxv2f64:
1376 ; CHECK:       # %bb.0:
1377 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1378 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1379 ; CHECK-NEXT:    vmv2r.v v8, v10
1380 ; CHECK-NEXT:    ret
1381   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1382   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1383   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1384   %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)
1385   ret <vscale x 2 x double> %u
1388 define <vscale x 2 x double> @vfmacc_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1389 ; CHECK-LABEL: vfmacc_vf_nxv2f64_commute:
1390 ; CHECK:       # %bb.0:
1391 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu
1392 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1393 ; CHECK-NEXT:    vmv2r.v v8, v10
1394 ; CHECK-NEXT:    ret
1395   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1396   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1397   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1398   %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)
1399   ret <vscale x 2 x double> %u
1402 define <vscale x 2 x double> @vfmacc_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, i32 zeroext %evl) {
1403 ; CHECK-LABEL: vfmacc_vf_nxv2f64_unmasked:
1404 ; CHECK:       # %bb.0:
1405 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
1406 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8
1407 ; CHECK-NEXT:    vmv2r.v v8, v10
1408 ; CHECK-NEXT:    ret
1409   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1410   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1411   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1412   %u = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> splat (i1 -1), <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)
1413   ret <vscale x 2 x double> %u
1416 define <vscale x 2 x double> @vfmacc_vv_nxv2f64_ta(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1417 ; CHECK-LABEL: vfmacc_vv_nxv2f64_ta:
1418 ; CHECK:       # %bb.0:
1419 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1420 ; CHECK-NEXT:    vfmacc.vv v12, v8, v10, v0.t
1421 ; CHECK-NEXT:    vmv.v.v v8, v12
1422 ; CHECK-NEXT:    ret
1423   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1424   %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)
1425   ret <vscale x 2 x double> %u
1428 define <vscale x 2 x double> @vfmacc_vf_nxv2f64_ta(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1429 ; CHECK-LABEL: vfmacc_vf_nxv2f64_ta:
1430 ; CHECK:       # %bb.0:
1431 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1432 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1433 ; CHECK-NEXT:    vmv.v.v v8, v10
1434 ; CHECK-NEXT:    ret
1435   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1436   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1437   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1438   %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)
1439   ret <vscale x 2 x double> %u
1442 define <vscale x 2 x double> @vfmacc_vf_nxv2f64_commute_ta(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1443 ; CHECK-LABEL: vfmacc_vf_nxv2f64_commute_ta:
1444 ; CHECK:       # %bb.0:
1445 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1446 ; CHECK-NEXT:    vfmacc.vf v10, fa0, v8, v0.t
1447 ; CHECK-NEXT:    vmv.v.v v8, v10
1448 ; CHECK-NEXT:    ret
1449   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
1450   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1451   %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)
1452   %u = call <vscale x 2 x double> @llvm.vp.select.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %v, <vscale x 2 x double> %c, i32 %evl)
1453   ret <vscale x 2 x double> %u
1456 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)
1457 declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32)
1458 declare <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1>, <vscale x 4 x double>, <vscale x 4 x double>, i32)
1459 declare <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1>, <vscale x 4 x double>, <vscale x 4 x double>, i32)
1461 define <vscale x 4 x double> @vfmacc_vv_nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1462 ; CHECK-LABEL: vfmacc_vv_nxv4f64:
1463 ; CHECK:       # %bb.0:
1464 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1465 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1466 ; CHECK-NEXT:    vmv4r.v v8, v16
1467 ; CHECK-NEXT:    ret
1468   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1469   %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)
1470   ret <vscale x 4 x double> %u
1473 define <vscale x 4 x double> @vfmacc_vv_nxv4f64_unmasked(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1474 ; CHECK-LABEL: vfmacc_vv_nxv4f64_unmasked:
1475 ; CHECK:       # %bb.0:
1476 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
1477 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12
1478 ; CHECK-NEXT:    vmv4r.v v8, v16
1479 ; CHECK-NEXT:    ret
1480   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1481   %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)
1482   ret <vscale x 4 x double> %u
1485 define <vscale x 4 x double> @vfmacc_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1486 ; CHECK-LABEL: vfmacc_vf_nxv4f64:
1487 ; CHECK:       # %bb.0:
1488 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1489 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1490 ; CHECK-NEXT:    vmv4r.v v8, v12
1491 ; CHECK-NEXT:    ret
1492   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1493   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1494   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1495   %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)
1496   ret <vscale x 4 x double> %u
1499 define <vscale x 4 x double> @vfmacc_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1500 ; CHECK-LABEL: vfmacc_vf_nxv4f64_commute:
1501 ; CHECK:       # %bb.0:
1502 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu
1503 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1504 ; CHECK-NEXT:    vmv4r.v v8, v12
1505 ; CHECK-NEXT:    ret
1506   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1507   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1508   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1509   %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)
1510   ret <vscale x 4 x double> %u
1513 define <vscale x 4 x double> @vfmacc_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, i32 zeroext %evl) {
1514 ; CHECK-LABEL: vfmacc_vf_nxv4f64_unmasked:
1515 ; CHECK:       # %bb.0:
1516 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
1517 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8
1518 ; CHECK-NEXT:    vmv4r.v v8, v12
1519 ; CHECK-NEXT:    ret
1520   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1521   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1522   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1523   %u = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> splat (i1 -1), <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)
1524   ret <vscale x 4 x double> %u
1527 define <vscale x 4 x double> @vfmacc_vv_nxv4f64_ta(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1528 ; CHECK-LABEL: vfmacc_vv_nxv4f64_ta:
1529 ; CHECK:       # %bb.0:
1530 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1531 ; CHECK-NEXT:    vfmacc.vv v16, v8, v12, v0.t
1532 ; CHECK-NEXT:    vmv.v.v v8, v16
1533 ; CHECK-NEXT:    ret
1534   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1535   %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)
1536   ret <vscale x 4 x double> %u
1539 define <vscale x 4 x double> @vfmacc_vf_nxv4f64_ta(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1540 ; CHECK-LABEL: vfmacc_vf_nxv4f64_ta:
1541 ; CHECK:       # %bb.0:
1542 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1543 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1544 ; CHECK-NEXT:    vmv.v.v v8, v12
1545 ; CHECK-NEXT:    ret
1546   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1547   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1548   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1549   %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)
1550   ret <vscale x 4 x double> %u
1553 define <vscale x 4 x double> @vfmacc_vf_nxv4f64_commute_ta(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1554 ; CHECK-LABEL: vfmacc_vf_nxv4f64_commute_ta:
1555 ; CHECK:       # %bb.0:
1556 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1557 ; CHECK-NEXT:    vfmacc.vf v12, fa0, v8, v0.t
1558 ; CHECK-NEXT:    vmv.v.v v8, v12
1559 ; CHECK-NEXT:    ret
1560   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
1561   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
1562   %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)
1563   %u = call <vscale x 4 x double> @llvm.vp.select.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %v, <vscale x 4 x double> %c, i32 %evl)
1564   ret <vscale x 4 x double> %u
1567 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)
1568 declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32)
1569 declare <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1>, <vscale x 8 x double>, <vscale x 8 x double>, i32)
1570 declare <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1>, <vscale x 8 x double>, <vscale x 8 x double>, i32)
1572 define <vscale x 8 x double> @vfmacc_vv_nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1573 ; CHECK-LABEL: vfmacc_vv_nxv8f64:
1574 ; CHECK:       # %bb.0:
1575 ; CHECK-NEXT:    vl8re64.v v24, (a0)
1576 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, mu
1577 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t
1578 ; CHECK-NEXT:    vmv8r.v v8, v24
1579 ; CHECK-NEXT:    ret
1580   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1581   %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)
1582   ret <vscale x 8 x double> %u
1585 define <vscale x 8 x double> @vfmacc_vv_nxv8f64_unmasked(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1586 ; CHECK-LABEL: vfmacc_vv_nxv8f64_unmasked:
1587 ; CHECK:       # %bb.0:
1588 ; CHECK-NEXT:    vl8re64.v v24, (a0)
1589 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, ma
1590 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16
1591 ; CHECK-NEXT:    vmv8r.v v8, v24
1592 ; CHECK-NEXT:    ret
1593   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1594   %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)
1595   ret <vscale x 8 x double> %u
1598 define <vscale x 8 x double> @vfmacc_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1599 ; CHECK-LABEL: vfmacc_vf_nxv8f64:
1600 ; CHECK:       # %bb.0:
1601 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, mu
1602 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
1603 ; CHECK-NEXT:    vmv8r.v v8, v16
1604 ; CHECK-NEXT:    ret
1605   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1606   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1607   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1608   %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)
1609   ret <vscale x 8 x double> %u
1612 define <vscale x 8 x double> @vfmacc_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1613 ; CHECK-LABEL: vfmacc_vf_nxv8f64_commute:
1614 ; CHECK:       # %bb.0:
1615 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, mu
1616 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
1617 ; CHECK-NEXT:    vmv8r.v v8, v16
1618 ; CHECK-NEXT:    ret
1619   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1620   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1621   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1622   %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)
1623   ret <vscale x 8 x double> %u
1626 define <vscale x 8 x double> @vfmacc_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, i32 zeroext %evl) {
1627 ; CHECK-LABEL: vfmacc_vf_nxv8f64_unmasked:
1628 ; CHECK:       # %bb.0:
1629 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma
1630 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8
1631 ; CHECK-NEXT:    vmv8r.v v8, v16
1632 ; CHECK-NEXT:    ret
1633   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1634   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1635   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1636   %u = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> splat (i1 -1), <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)
1637   ret <vscale x 8 x double> %u
1640 define <vscale x 8 x double> @vfmacc_vv_nxv8f64_ta(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1641 ; CHECK-LABEL: vfmacc_vv_nxv8f64_ta:
1642 ; CHECK:       # %bb.0:
1643 ; CHECK-NEXT:    vl8re64.v v24, (a0)
1644 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
1645 ; CHECK-NEXT:    vfmacc.vv v24, v8, v16, v0.t
1646 ; CHECK-NEXT:    vmv.v.v v8, v24
1647 ; CHECK-NEXT:    ret
1648   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1649   %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)
1650   ret <vscale x 8 x double> %u
1653 define <vscale x 8 x double> @vfmacc_vf_nxv8f64_ta(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1654 ; CHECK-LABEL: vfmacc_vf_nxv8f64_ta:
1655 ; CHECK:       # %bb.0:
1656 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, mu
1657 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
1658 ; CHECK-NEXT:    vmv.v.v v8, v16
1659 ; CHECK-NEXT:    ret
1660   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1661   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1662   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1663   %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)
1664   ret <vscale x 8 x double> %u
1667 define <vscale x 8 x double> @vfmacc_vf_nxv8f64_commute_ta(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1668 ; CHECK-LABEL: vfmacc_vf_nxv8f64_commute_ta:
1669 ; CHECK:       # %bb.0:
1670 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, mu
1671 ; CHECK-NEXT:    vfmacc.vf v16, fa0, v8, v0.t
1672 ; CHECK-NEXT:    vmv.v.v v8, v16
1673 ; CHECK-NEXT:    ret
1674   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
1675   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
1676   %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)
1677   %u = call <vscale x 8 x double> @llvm.vp.select.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %v, <vscale x 8 x double> %c, i32 %evl)
1678   ret <vscale x 8 x double> %u