1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+m -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+m -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s 6 7declare <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32) 8 9define <vscale x 1 x half> @vfma_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 10; CHECK-LABEL: vfma_vv_nxv1f16: 11; CHECK: # %bb.0: 12; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 13; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t 14; CHECK-NEXT: vmv1r.v v8, v9 15; CHECK-NEXT: ret 16 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl) 17 ret <vscale x 1 x half> %v 18} 19 20define <vscale x 1 x half> @vfma_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) { 21; CHECK-LABEL: vfma_vv_nxv1f16_unmasked: 22; CHECK: # %bb.0: 23; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 24; CHECK-NEXT: vfmadd.vv v8, v9, v10 25; CHECK-NEXT: ret 26 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 27 ret <vscale x 1 x half> %v 28} 29 30define <vscale x 1 x half> @vfma_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 31; CHECK-LABEL: vfma_vf_nxv1f16: 32; CHECK: # %bb.0: 33; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 34; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 35; CHECK-NEXT: ret 36 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 37 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 38 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 39 ret <vscale x 1 x half> %v 40} 41 42define <vscale x 1 x half> @vfma_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 43; CHECK-LABEL: vfma_vf_nxv1f16_commute: 44; CHECK: # %bb.0: 45; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 46; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 47; CHECK-NEXT: ret 48 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 49 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 50 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 51 ret <vscale x 1 x half> %v 52} 53 54define <vscale x 1 x half> @vfma_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 55; CHECK-LABEL: vfma_vf_nxv1f16_unmasked: 56; CHECK: # %bb.0: 57; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 58; CHECK-NEXT: vfmadd.vf v8, fa0, v9 59; CHECK-NEXT: ret 60 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 61 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 62 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 63 ret <vscale x 1 x half> %v 64} 65 66define <vscale x 1 x half> @vfma_vf_nxv1f16_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 67; CHECK-LABEL: vfma_vf_nxv1f16_unmasked_commute: 68; CHECK: # %bb.0: 69; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 70; CHECK-NEXT: vfmadd.vf v8, fa0, v9 71; CHECK-NEXT: ret 72 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 73 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 74 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 75 ret <vscale x 1 x half> %v 76} 77 78declare <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32) 79 80define <vscale x 2 x half> @vfma_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 81; CHECK-LABEL: vfma_vv_nxv2f16: 82; CHECK: # %bb.0: 83; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 84; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t 85; CHECK-NEXT: vmv1r.v v8, v9 86; CHECK-NEXT: ret 87 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl) 88 ret <vscale x 2 x half> %v 89} 90 91define <vscale x 2 x half> @vfma_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) { 92; CHECK-LABEL: vfma_vv_nxv2f16_unmasked: 93; CHECK: # %bb.0: 94; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 95; CHECK-NEXT: vfmadd.vv v8, v9, v10 96; CHECK-NEXT: ret 97 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 98 ret <vscale x 2 x half> %v 99} 100 101define <vscale x 2 x half> @vfma_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 102; CHECK-LABEL: vfma_vf_nxv2f16: 103; CHECK: # %bb.0: 104; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 105; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 106; CHECK-NEXT: ret 107 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 108 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 109 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 110 ret <vscale x 2 x half> %v 111} 112 113define <vscale x 2 x half> @vfma_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 114; CHECK-LABEL: vfma_vf_nxv2f16_commute: 115; CHECK: # %bb.0: 116; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 117; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 118; CHECK-NEXT: ret 119 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 120 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 121 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 122 ret <vscale x 2 x half> %v 123} 124 125define <vscale x 2 x half> @vfma_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 126; CHECK-LABEL: vfma_vf_nxv2f16_unmasked: 127; CHECK: # %bb.0: 128; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 129; CHECK-NEXT: vfmadd.vf v8, fa0, v9 130; CHECK-NEXT: ret 131 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 132 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 133 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 134 ret <vscale x 2 x half> %v 135} 136 137define <vscale x 2 x half> @vfma_vf_nxv2f16_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 138; CHECK-LABEL: vfma_vf_nxv2f16_unmasked_commute: 139; CHECK: # %bb.0: 140; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 141; CHECK-NEXT: vfmadd.vf v8, fa0, v9 142; CHECK-NEXT: ret 143 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 144 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 145 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 146 ret <vscale x 2 x half> %v 147} 148 149declare <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32) 150 151define <vscale x 4 x half> @vfma_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 152; CHECK-LABEL: vfma_vv_nxv4f16: 153; CHECK: # %bb.0: 154; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 155; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t 156; CHECK-NEXT: vmv.v.v v8, v9 157; CHECK-NEXT: ret 158 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl) 159 ret <vscale x 4 x half> %v 160} 161 162define <vscale x 4 x half> @vfma_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) { 163; CHECK-LABEL: vfma_vv_nxv4f16_unmasked: 164; CHECK: # %bb.0: 165; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 166; CHECK-NEXT: vfmadd.vv v8, v9, v10 167; CHECK-NEXT: ret 168 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 169 ret <vscale x 4 x half> %v 170} 171 172define <vscale x 4 x half> @vfma_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 173; CHECK-LABEL: vfma_vf_nxv4f16: 174; CHECK: # %bb.0: 175; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 176; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 177; CHECK-NEXT: ret 178 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 179 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 180 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 181 ret <vscale x 4 x half> %v 182} 183 184define <vscale x 4 x half> @vfma_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 185; CHECK-LABEL: vfma_vf_nxv4f16_commute: 186; CHECK: # %bb.0: 187; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 188; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 189; CHECK-NEXT: ret 190 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 191 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 192 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 193 ret <vscale x 4 x half> %v 194} 195 196define <vscale x 4 x half> @vfma_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 197; CHECK-LABEL: vfma_vf_nxv4f16_unmasked: 198; CHECK: # %bb.0: 199; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 200; CHECK-NEXT: vfmadd.vf v8, fa0, v9 201; CHECK-NEXT: ret 202 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 203 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 204 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 205 ret <vscale x 4 x half> %v 206} 207 208define <vscale x 4 x half> @vfma_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 209; CHECK-LABEL: vfma_vf_nxv4f16_unmasked_commute: 210; CHECK: # %bb.0: 211; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 212; CHECK-NEXT: vfmadd.vf v8, fa0, v9 213; CHECK-NEXT: ret 214 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 215 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 216 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 217 ret <vscale x 4 x half> %v 218} 219 220declare <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32) 221 222define <vscale x 8 x half> @vfma_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 223; CHECK-LABEL: vfma_vv_nxv8f16: 224; CHECK: # %bb.0: 225; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 226; CHECK-NEXT: vfmadd.vv v10, v8, v12, v0.t 227; CHECK-NEXT: vmv.v.v v8, v10 228; CHECK-NEXT: ret 229 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl) 230 ret <vscale x 8 x half> %v 231} 232 233define <vscale x 8 x half> @vfma_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) { 234; CHECK-LABEL: vfma_vv_nxv8f16_unmasked: 235; CHECK: # %bb.0: 236; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 237; CHECK-NEXT: vfmadd.vv v8, v10, v12 238; CHECK-NEXT: ret 239 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 240 ret <vscale x 8 x half> %v 241} 242 243define <vscale x 8 x half> @vfma_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 244; CHECK-LABEL: vfma_vf_nxv8f16: 245; CHECK: # %bb.0: 246; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 247; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t 248; CHECK-NEXT: ret 249 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 250 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 251 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 252 ret <vscale x 8 x half> %v 253} 254 255define <vscale x 8 x half> @vfma_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 256; CHECK-LABEL: vfma_vf_nxv8f16_commute: 257; CHECK: # %bb.0: 258; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 259; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t 260; CHECK-NEXT: ret 261 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 262 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 263 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 264 ret <vscale x 8 x half> %v 265} 266 267define <vscale x 8 x half> @vfma_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 268; CHECK-LABEL: vfma_vf_nxv8f16_unmasked: 269; CHECK: # %bb.0: 270; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 271; CHECK-NEXT: vfmadd.vf v8, fa0, v10 272; CHECK-NEXT: ret 273 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 274 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 275 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 276 ret <vscale x 8 x half> %v 277} 278 279define <vscale x 8 x half> @vfma_vf_nxv8f16_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 280; CHECK-LABEL: vfma_vf_nxv8f16_unmasked_commute: 281; CHECK: # %bb.0: 282; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 283; CHECK-NEXT: vfmadd.vf v8, fa0, v10 284; CHECK-NEXT: ret 285 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 286 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 287 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 288 ret <vscale x 8 x half> %v 289} 290 291declare <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32) 292 293define <vscale x 16 x half> @vfma_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 294; CHECK-LABEL: vfma_vv_nxv16f16: 295; CHECK: # %bb.0: 296; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 297; CHECK-NEXT: vfmadd.vv v12, v8, v16, v0.t 298; CHECK-NEXT: vmv.v.v v8, v12 299; CHECK-NEXT: ret 300 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl) 301 ret <vscale x 16 x half> %v 302} 303 304define <vscale x 16 x half> @vfma_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) { 305; CHECK-LABEL: vfma_vv_nxv16f16_unmasked: 306; CHECK: # %bb.0: 307; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 308; CHECK-NEXT: vfmadd.vv v8, v12, v16 309; CHECK-NEXT: ret 310 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 311 ret <vscale x 16 x half> %v 312} 313 314define <vscale x 16 x half> @vfma_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 315; CHECK-LABEL: vfma_vf_nxv16f16: 316; CHECK: # %bb.0: 317; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 318; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t 319; CHECK-NEXT: ret 320 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 321 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 322 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 323 ret <vscale x 16 x half> %v 324} 325 326define <vscale x 16 x half> @vfma_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 327; CHECK-LABEL: vfma_vf_nxv16f16_commute: 328; CHECK: # %bb.0: 329; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 330; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t 331; CHECK-NEXT: ret 332 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 333 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 334 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 335 ret <vscale x 16 x half> %v 336} 337 338define <vscale x 16 x half> @vfma_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 339; CHECK-LABEL: vfma_vf_nxv16f16_unmasked: 340; CHECK: # %bb.0: 341; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 342; CHECK-NEXT: vfmadd.vf v8, fa0, v12 343; CHECK-NEXT: ret 344 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 345 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 346 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 347 ret <vscale x 16 x half> %v 348} 349 350define <vscale x 16 x half> @vfma_vf_nxv16f16_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 351; CHECK-LABEL: vfma_vf_nxv16f16_unmasked_commute: 352; CHECK: # %bb.0: 353; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 354; CHECK-NEXT: vfmadd.vf v8, fa0, v12 355; CHECK-NEXT: ret 356 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 357 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 358 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 359 ret <vscale x 16 x half> %v 360} 361 362declare <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32) 363 364define <vscale x 32 x half> @vfma_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) { 365; CHECK-LABEL: vfma_vv_nxv32f16: 366; CHECK: # %bb.0: 367; CHECK-NEXT: vl8re16.v v24, (a0) 368; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 369; CHECK-NEXT: vfmadd.vv v16, v8, v24, v0.t 370; CHECK-NEXT: vmv.v.v v8, v16 371; CHECK-NEXT: ret 372 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl) 373 ret <vscale x 32 x half> %v 374} 375 376define <vscale x 32 x half> @vfma_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) { 377; CHECK-LABEL: vfma_vv_nxv32f16_unmasked: 378; CHECK: # %bb.0: 379; CHECK-NEXT: vl8re16.v v24, (a0) 380; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 381; CHECK-NEXT: vfmadd.vv v8, v16, v24 382; CHECK-NEXT: ret 383 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl) 384 ret <vscale x 32 x half> %v 385} 386 387define <vscale x 32 x half> @vfma_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 388; CHECK-LABEL: vfma_vf_nxv32f16: 389; CHECK: # %bb.0: 390; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 391; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t 392; CHECK-NEXT: ret 393 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 394 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 395 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 396 ret <vscale x 32 x half> %v 397} 398 399define <vscale x 32 x half> @vfma_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 400; CHECK-LABEL: vfma_vf_nxv32f16_commute: 401; CHECK: # %bb.0: 402; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 403; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t 404; CHECK-NEXT: ret 405 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 406 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 407 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 408 ret <vscale x 32 x half> %v 409} 410 411define <vscale x 32 x half> @vfma_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 412; CHECK-LABEL: vfma_vf_nxv32f16_unmasked: 413; CHECK: # %bb.0: 414; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 415; CHECK-NEXT: vfmadd.vf v8, fa0, v16 416; CHECK-NEXT: ret 417 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 418 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 419 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 420 ret <vscale x 32 x half> %v 421} 422 423define <vscale x 32 x half> @vfma_vf_nxv32f16_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 424; CHECK-LABEL: vfma_vf_nxv32f16_unmasked_commute: 425; CHECK: # %bb.0: 426; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 427; CHECK-NEXT: vfmadd.vf v8, fa0, v16 428; CHECK-NEXT: ret 429 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 430 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 431 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 432 ret <vscale x 32 x half> %v 433} 434 435declare <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32) 436 437define <vscale x 1 x float> @vfma_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 438; CHECK-LABEL: vfma_vv_nxv1f32: 439; CHECK: # %bb.0: 440; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 441; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t 442; CHECK-NEXT: vmv1r.v v8, v9 443; CHECK-NEXT: ret 444 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl) 445 ret <vscale x 1 x float> %v 446} 447 448define <vscale x 1 x float> @vfma_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) { 449; CHECK-LABEL: vfma_vv_nxv1f32_unmasked: 450; CHECK: # %bb.0: 451; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 452; CHECK-NEXT: vfmadd.vv v8, v9, v10 453; CHECK-NEXT: ret 454 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 455 ret <vscale x 1 x float> %v 456} 457 458define <vscale x 1 x float> @vfma_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 459; CHECK-LABEL: vfma_vf_nxv1f32: 460; CHECK: # %bb.0: 461; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 462; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 463; CHECK-NEXT: ret 464 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 465 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 466 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 467 ret <vscale x 1 x float> %v 468} 469 470define <vscale x 1 x float> @vfma_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 471; CHECK-LABEL: vfma_vf_nxv1f32_commute: 472; CHECK: # %bb.0: 473; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 474; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 475; CHECK-NEXT: ret 476 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 477 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 478 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 479 ret <vscale x 1 x float> %v 480} 481 482define <vscale x 1 x float> @vfma_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 483; CHECK-LABEL: vfma_vf_nxv1f32_unmasked: 484; CHECK: # %bb.0: 485; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 486; CHECK-NEXT: vfmadd.vf v8, fa0, v9 487; CHECK-NEXT: ret 488 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 489 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 490 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 491 ret <vscale x 1 x float> %v 492} 493 494define <vscale x 1 x float> @vfma_vf_nxv1f32_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 495; CHECK-LABEL: vfma_vf_nxv1f32_unmasked_commute: 496; CHECK: # %bb.0: 497; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 498; CHECK-NEXT: vfmadd.vf v8, fa0, v9 499; CHECK-NEXT: ret 500 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 501 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 502 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 503 ret <vscale x 1 x float> %v 504} 505 506declare <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32) 507 508define <vscale x 2 x float> @vfma_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 509; CHECK-LABEL: vfma_vv_nxv2f32: 510; CHECK: # %bb.0: 511; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 512; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t 513; CHECK-NEXT: vmv.v.v v8, v9 514; CHECK-NEXT: ret 515 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl) 516 ret <vscale x 2 x float> %v 517} 518 519define <vscale x 2 x float> @vfma_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) { 520; CHECK-LABEL: vfma_vv_nxv2f32_unmasked: 521; CHECK: # %bb.0: 522; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 523; CHECK-NEXT: vfmadd.vv v8, v9, v10 524; CHECK-NEXT: ret 525 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 526 ret <vscale x 2 x float> %v 527} 528 529define <vscale x 2 x float> @vfma_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 530; CHECK-LABEL: vfma_vf_nxv2f32: 531; CHECK: # %bb.0: 532; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 533; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 534; CHECK-NEXT: ret 535 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 536 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 537 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 538 ret <vscale x 2 x float> %v 539} 540 541define <vscale x 2 x float> @vfma_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 542; CHECK-LABEL: vfma_vf_nxv2f32_commute: 543; CHECK: # %bb.0: 544; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 545; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 546; CHECK-NEXT: ret 547 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 548 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 549 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 550 ret <vscale x 2 x float> %v 551} 552 553define <vscale x 2 x float> @vfma_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 554; CHECK-LABEL: vfma_vf_nxv2f32_unmasked: 555; CHECK: # %bb.0: 556; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 557; CHECK-NEXT: vfmadd.vf v8, fa0, v9 558; CHECK-NEXT: ret 559 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 560 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 561 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 562 ret <vscale x 2 x float> %v 563} 564 565define <vscale x 2 x float> @vfma_vf_nxv2f32_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 566; CHECK-LABEL: vfma_vf_nxv2f32_unmasked_commute: 567; CHECK: # %bb.0: 568; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 569; CHECK-NEXT: vfmadd.vf v8, fa0, v9 570; CHECK-NEXT: ret 571 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 572 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 573 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 574 ret <vscale x 2 x float> %v 575} 576 577declare <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32) 578 579define <vscale x 4 x float> @vfma_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 580; CHECK-LABEL: vfma_vv_nxv4f32: 581; CHECK: # %bb.0: 582; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 583; CHECK-NEXT: vfmadd.vv v10, v8, v12, v0.t 584; CHECK-NEXT: vmv.v.v v8, v10 585; CHECK-NEXT: ret 586 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl) 587 ret <vscale x 4 x float> %v 588} 589 590define <vscale x 4 x float> @vfma_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) { 591; CHECK-LABEL: vfma_vv_nxv4f32_unmasked: 592; CHECK: # %bb.0: 593; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 594; CHECK-NEXT: vfmadd.vv v8, v10, v12 595; CHECK-NEXT: ret 596 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 597 ret <vscale x 4 x float> %v 598} 599 600define <vscale x 4 x float> @vfma_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 601; CHECK-LABEL: vfma_vf_nxv4f32: 602; CHECK: # %bb.0: 603; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 604; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t 605; CHECK-NEXT: ret 606 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 607 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 608 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 609 ret <vscale x 4 x float> %v 610} 611 612define <vscale x 4 x float> @vfma_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 613; CHECK-LABEL: vfma_vf_nxv4f32_commute: 614; CHECK: # %bb.0: 615; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 616; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t 617; CHECK-NEXT: ret 618 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 619 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 620 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 621 ret <vscale x 4 x float> %v 622} 623 624define <vscale x 4 x float> @vfma_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 625; CHECK-LABEL: vfma_vf_nxv4f32_unmasked: 626; CHECK: # %bb.0: 627; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 628; CHECK-NEXT: vfmadd.vf v8, fa0, v10 629; CHECK-NEXT: ret 630 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 631 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 632 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 633 ret <vscale x 4 x float> %v 634} 635 636define <vscale x 4 x float> @vfma_vf_nxv4f32_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 637; CHECK-LABEL: vfma_vf_nxv4f32_unmasked_commute: 638; CHECK: # %bb.0: 639; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 640; CHECK-NEXT: vfmadd.vf v8, fa0, v10 641; CHECK-NEXT: ret 642 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 643 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 644 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 645 ret <vscale x 4 x float> %v 646} 647 648declare <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32) 649 650define <vscale x 8 x float> @vfma_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 651; CHECK-LABEL: vfma_vv_nxv8f32: 652; CHECK: # %bb.0: 653; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 654; CHECK-NEXT: vfmadd.vv v12, v8, v16, v0.t 655; CHECK-NEXT: vmv.v.v v8, v12 656; CHECK-NEXT: ret 657 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl) 658 ret <vscale x 8 x float> %v 659} 660 661define <vscale x 8 x float> @vfma_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) { 662; CHECK-LABEL: vfma_vv_nxv8f32_unmasked: 663; CHECK: # %bb.0: 664; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 665; CHECK-NEXT: vfmadd.vv v8, v12, v16 666; CHECK-NEXT: ret 667 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 668 ret <vscale x 8 x float> %v 669} 670 671define <vscale x 8 x float> @vfma_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 672; CHECK-LABEL: vfma_vf_nxv8f32: 673; CHECK: # %bb.0: 674; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 675; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t 676; CHECK-NEXT: ret 677 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 678 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 679 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 680 ret <vscale x 8 x float> %v 681} 682 683define <vscale x 8 x float> @vfma_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 684; CHECK-LABEL: vfma_vf_nxv8f32_commute: 685; CHECK: # %bb.0: 686; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 687; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t 688; CHECK-NEXT: ret 689 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 690 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 691 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 692 ret <vscale x 8 x float> %v 693} 694 695define <vscale x 8 x float> @vfma_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 696; CHECK-LABEL: vfma_vf_nxv8f32_unmasked: 697; CHECK: # %bb.0: 698; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 699; CHECK-NEXT: vfmadd.vf v8, fa0, v12 700; CHECK-NEXT: ret 701 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 702 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 703 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 704 ret <vscale x 8 x float> %v 705} 706 707define <vscale x 8 x float> @vfma_vf_nxv8f32_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 708; CHECK-LABEL: vfma_vf_nxv8f32_unmasked_commute: 709; CHECK: # %bb.0: 710; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 711; CHECK-NEXT: vfmadd.vf v8, fa0, v12 712; CHECK-NEXT: ret 713 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 714 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 715 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 716 ret <vscale x 8 x float> %v 717} 718 719declare <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32) 720 721define <vscale x 16 x float> @vfma_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 722; CHECK-LABEL: vfma_vv_nxv16f32: 723; CHECK: # %bb.0: 724; CHECK-NEXT: vl8re32.v v24, (a0) 725; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 726; CHECK-NEXT: vfmadd.vv v16, v8, v24, v0.t 727; CHECK-NEXT: vmv.v.v v8, v16 728; CHECK-NEXT: ret 729 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl) 730 ret <vscale x 16 x float> %v 731} 732 733define <vscale x 16 x float> @vfma_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) { 734; CHECK-LABEL: vfma_vv_nxv16f32_unmasked: 735; CHECK: # %bb.0: 736; CHECK-NEXT: vl8re32.v v24, (a0) 737; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 738; CHECK-NEXT: vfmadd.vv v8, v16, v24 739; CHECK-NEXT: ret 740 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 741 ret <vscale x 16 x float> %v 742} 743 744define <vscale x 16 x float> @vfma_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 745; CHECK-LABEL: vfma_vf_nxv16f32: 746; CHECK: # %bb.0: 747; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 748; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t 749; CHECK-NEXT: ret 750 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 751 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 752 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 753 ret <vscale x 16 x float> %v 754} 755 756define <vscale x 16 x float> @vfma_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 757; CHECK-LABEL: vfma_vf_nxv16f32_commute: 758; CHECK: # %bb.0: 759; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 760; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t 761; CHECK-NEXT: ret 762 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 763 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 764 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 765 ret <vscale x 16 x float> %v 766} 767 768define <vscale x 16 x float> @vfma_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 769; CHECK-LABEL: vfma_vf_nxv16f32_unmasked: 770; CHECK: # %bb.0: 771; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 772; CHECK-NEXT: vfmadd.vf v8, fa0, v16 773; CHECK-NEXT: ret 774 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 775 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 776 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 777 ret <vscale x 16 x float> %v 778} 779 780define <vscale x 16 x float> @vfma_vf_nxv16f32_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 781; CHECK-LABEL: vfma_vf_nxv16f32_unmasked_commute: 782; CHECK: # %bb.0: 783; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 784; CHECK-NEXT: vfmadd.vf v8, fa0, v16 785; CHECK-NEXT: ret 786 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 787 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 788 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 789 ret <vscale x 16 x float> %v 790} 791 792declare <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32) 793 794define <vscale x 1 x double> @vfma_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 795; CHECK-LABEL: vfma_vv_nxv1f64: 796; CHECK: # %bb.0: 797; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 798; CHECK-NEXT: vfmadd.vv v9, v8, v10, v0.t 799; CHECK-NEXT: vmv.v.v v8, v9 800; CHECK-NEXT: ret 801 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl) 802 ret <vscale x 1 x double> %v 803} 804 805define <vscale x 1 x double> @vfma_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) { 806; CHECK-LABEL: vfma_vv_nxv1f64_unmasked: 807; CHECK: # %bb.0: 808; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 809; CHECK-NEXT: vfmadd.vv v8, v9, v10 810; CHECK-NEXT: ret 811 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 812 ret <vscale x 1 x double> %v 813} 814 815define <vscale x 1 x double> @vfma_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 816; CHECK-LABEL: vfma_vf_nxv1f64: 817; CHECK: # %bb.0: 818; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 819; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 820; CHECK-NEXT: ret 821 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 822 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 823 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 824 ret <vscale x 1 x double> %v 825} 826 827define <vscale x 1 x double> @vfma_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 828; CHECK-LABEL: vfma_vf_nxv1f64_commute: 829; CHECK: # %bb.0: 830; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 831; CHECK-NEXT: vfmadd.vf v8, fa0, v9, v0.t 832; CHECK-NEXT: ret 833 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 834 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 835 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 836 ret <vscale x 1 x double> %v 837} 838 839define <vscale x 1 x double> @vfma_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 840; CHECK-LABEL: vfma_vf_nxv1f64_unmasked: 841; CHECK: # %bb.0: 842; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 843; CHECK-NEXT: vfmadd.vf v8, fa0, v9 844; CHECK-NEXT: ret 845 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 846 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 847 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 848 ret <vscale x 1 x double> %v 849} 850 851define <vscale x 1 x double> @vfma_vf_nxv1f64_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 852; CHECK-LABEL: vfma_vf_nxv1f64_unmasked_commute: 853; CHECK: # %bb.0: 854; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 855; CHECK-NEXT: vfmadd.vf v8, fa0, v9 856; CHECK-NEXT: ret 857 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 858 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 859 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 860 ret <vscale x 1 x double> %v 861} 862 863declare <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32) 864 865define <vscale x 2 x double> @vfma_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 866; CHECK-LABEL: vfma_vv_nxv2f64: 867; CHECK: # %bb.0: 868; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 869; CHECK-NEXT: vfmadd.vv v10, v8, v12, v0.t 870; CHECK-NEXT: vmv.v.v v8, v10 871; CHECK-NEXT: ret 872 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl) 873 ret <vscale x 2 x double> %v 874} 875 876define <vscale x 2 x double> @vfma_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) { 877; CHECK-LABEL: vfma_vv_nxv2f64_unmasked: 878; CHECK: # %bb.0: 879; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 880; CHECK-NEXT: vfmadd.vv v8, v10, v12 881; CHECK-NEXT: ret 882 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 883 ret <vscale x 2 x double> %v 884} 885 886define <vscale x 2 x double> @vfma_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 887; CHECK-LABEL: vfma_vf_nxv2f64: 888; CHECK: # %bb.0: 889; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 890; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t 891; CHECK-NEXT: ret 892 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 893 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 894 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 895 ret <vscale x 2 x double> %v 896} 897 898define <vscale x 2 x double> @vfma_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 899; CHECK-LABEL: vfma_vf_nxv2f64_commute: 900; CHECK: # %bb.0: 901; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 902; CHECK-NEXT: vfmadd.vf v8, fa0, v10, v0.t 903; CHECK-NEXT: ret 904 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 905 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 906 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 907 ret <vscale x 2 x double> %v 908} 909 910define <vscale x 2 x double> @vfma_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 911; CHECK-LABEL: vfma_vf_nxv2f64_unmasked: 912; CHECK: # %bb.0: 913; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 914; CHECK-NEXT: vfmadd.vf v8, fa0, v10 915; CHECK-NEXT: ret 916 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 917 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 918 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 919 ret <vscale x 2 x double> %v 920} 921 922define <vscale x 2 x double> @vfma_vf_nxv2f64_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 923; CHECK-LABEL: vfma_vf_nxv2f64_unmasked_commute: 924; CHECK: # %bb.0: 925; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 926; CHECK-NEXT: vfmadd.vf v8, fa0, v10 927; CHECK-NEXT: ret 928 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 929 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 930 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 931 ret <vscale x 2 x double> %v 932} 933 934declare <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32) 935 936define <vscale x 4 x double> @vfma_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 937; CHECK-LABEL: vfma_vv_nxv4f64: 938; CHECK: # %bb.0: 939; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 940; CHECK-NEXT: vfmadd.vv v12, v8, v16, v0.t 941; CHECK-NEXT: vmv.v.v v8, v12 942; CHECK-NEXT: ret 943 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl) 944 ret <vscale x 4 x double> %v 945} 946 947define <vscale x 4 x double> @vfma_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) { 948; CHECK-LABEL: vfma_vv_nxv4f64_unmasked: 949; CHECK: # %bb.0: 950; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 951; CHECK-NEXT: vfmadd.vv v8, v12, v16 952; CHECK-NEXT: ret 953 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 954 ret <vscale x 4 x double> %v 955} 956 957define <vscale x 4 x double> @vfma_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 958; CHECK-LABEL: vfma_vf_nxv4f64: 959; CHECK: # %bb.0: 960; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 961; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t 962; CHECK-NEXT: ret 963 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 964 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 965 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 966 ret <vscale x 4 x double> %v 967} 968 969define <vscale x 4 x double> @vfma_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 970; CHECK-LABEL: vfma_vf_nxv4f64_commute: 971; CHECK: # %bb.0: 972; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 973; CHECK-NEXT: vfmadd.vf v8, fa0, v12, v0.t 974; CHECK-NEXT: ret 975 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 976 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 977 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 978 ret <vscale x 4 x double> %v 979} 980 981define <vscale x 4 x double> @vfma_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 982; CHECK-LABEL: vfma_vf_nxv4f64_unmasked: 983; CHECK: # %bb.0: 984; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 985; CHECK-NEXT: vfmadd.vf v8, fa0, v12 986; CHECK-NEXT: ret 987 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 988 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 989 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 990 ret <vscale x 4 x double> %v 991} 992 993define <vscale x 4 x double> @vfma_vf_nxv4f64_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 994; CHECK-LABEL: vfma_vf_nxv4f64_unmasked_commute: 995; CHECK: # %bb.0: 996; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 997; CHECK-NEXT: vfmadd.vf v8, fa0, v12 998; CHECK-NEXT: ret 999 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 1000 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 1001 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 1002 ret <vscale x 4 x double> %v 1003} 1004 1005declare <vscale x 7 x double> @llvm.vp.fmuladd.nxv7f64(<vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x i1>, i32) 1006 1007define <vscale x 7 x double> @vfma_vv_nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, <vscale x 7 x i1> %m, i32 zeroext %evl) { 1008; CHECK-LABEL: vfma_vv_nxv7f64: 1009; CHECK: # %bb.0: 1010; CHECK-NEXT: vl8re64.v v24, (a0) 1011; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1012; CHECK-NEXT: vfmadd.vv v16, v8, v24, v0.t 1013; CHECK-NEXT: vmv.v.v v8, v16 1014; CHECK-NEXT: ret 1015 %v = call <vscale x 7 x double> @llvm.vp.fmuladd.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, <vscale x 7 x i1> %m, i32 %evl) 1016 ret <vscale x 7 x double> %v 1017} 1018 1019define <vscale x 7 x double> @vfma_vv_nxv7f64_unmasked(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, i32 zeroext %evl) { 1020; CHECK-LABEL: vfma_vv_nxv7f64_unmasked: 1021; CHECK: # %bb.0: 1022; CHECK-NEXT: vl8re64.v v24, (a0) 1023; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1024; CHECK-NEXT: vfmadd.vv v8, v16, v24 1025; CHECK-NEXT: ret 1026 %v = call <vscale x 7 x double> @llvm.vp.fmuladd.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x double> %c, <vscale x 7 x i1> splat (i1 true), i32 %evl) 1027 ret <vscale x 7 x double> %v 1028} 1029 1030declare <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32) 1031 1032define <vscale x 8 x double> @vfma_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1033; CHECK-LABEL: vfma_vv_nxv8f64: 1034; CHECK: # %bb.0: 1035; CHECK-NEXT: vl8re64.v v24, (a0) 1036; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1037; CHECK-NEXT: vfmadd.vv v16, v8, v24, v0.t 1038; CHECK-NEXT: vmv.v.v v8, v16 1039; CHECK-NEXT: ret 1040 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl) 1041 ret <vscale x 8 x double> %v 1042} 1043 1044define <vscale x 8 x double> @vfma_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) { 1045; CHECK-LABEL: vfma_vv_nxv8f64_unmasked: 1046; CHECK: # %bb.0: 1047; CHECK-NEXT: vl8re64.v v24, (a0) 1048; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1049; CHECK-NEXT: vfmadd.vv v8, v16, v24 1050; CHECK-NEXT: ret 1051 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 1052 ret <vscale x 8 x double> %v 1053} 1054 1055define <vscale x 8 x double> @vfma_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1056; CHECK-LABEL: vfma_vf_nxv8f64: 1057; CHECK: # %bb.0: 1058; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1059; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t 1060; CHECK-NEXT: ret 1061 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 1062 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 1063 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 1064 ret <vscale x 8 x double> %v 1065} 1066 1067define <vscale x 8 x double> @vfma_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1068; CHECK-LABEL: vfma_vf_nxv8f64_commute: 1069; CHECK: # %bb.0: 1070; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1071; CHECK-NEXT: vfmadd.vf v8, fa0, v16, v0.t 1072; CHECK-NEXT: ret 1073 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 1074 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 1075 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 1076 ret <vscale x 8 x double> %v 1077} 1078 1079define <vscale x 8 x double> @vfma_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 1080; CHECK-LABEL: vfma_vf_nxv8f64_unmasked: 1081; CHECK: # %bb.0: 1082; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1083; CHECK-NEXT: vfmadd.vf v8, fa0, v16 1084; CHECK-NEXT: ret 1085 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 1086 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 1087 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 1088 ret <vscale x 8 x double> %v 1089} 1090 1091define <vscale x 8 x double> @vfma_vf_nxv8f64_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 1092; CHECK-LABEL: vfma_vf_nxv8f64_unmasked_commute: 1093; CHECK: # %bb.0: 1094; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1095; CHECK-NEXT: vfmadd.vf v8, fa0, v16 1096; CHECK-NEXT: ret 1097 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 1098 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 1099 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 1100 ret <vscale x 8 x double> %v 1101} 1102 1103declare <vscale x 16 x double> @llvm.vp.fmuladd.nxv16f64(<vscale x 16 x double>, <vscale x 16 x double>, <vscale x 16 x double>, <vscale x 16 x i1>, i32) 1104 1105define <vscale x 16 x double> @vfma_vv_nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 1106; CHECK-LABEL: vfma_vv_nxv16f64: 1107; CHECK: # %bb.0: 1108; CHECK-NEXT: addi sp, sp, -16 1109; CHECK-NEXT: .cfi_def_cfa_offset 16 1110; CHECK-NEXT: csrr a1, vlenb 1111; CHECK-NEXT: li a3, 48 1112; CHECK-NEXT: mul a1, a1, a3 1113; CHECK-NEXT: sub sp, sp, a1 1114; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x30, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 48 * vlenb 1115; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma 1116; CHECK-NEXT: vmv1r.v v7, v0 1117; CHECK-NEXT: csrr a1, vlenb 1118; CHECK-NEXT: li a3, 24 1119; CHECK-NEXT: mul a1, a1, a3 1120; CHECK-NEXT: add a1, sp, a1 1121; CHECK-NEXT: addi a1, a1, 16 1122; CHECK-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill 1123; CHECK-NEXT: csrr a1, vlenb 1124; CHECK-NEXT: slli a1, a1, 5 1125; CHECK-NEXT: add a1, sp, a1 1126; CHECK-NEXT: addi a1, a1, 16 1127; CHECK-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill 1128; CHECK-NEXT: csrr a1, vlenb 1129; CHECK-NEXT: srli a3, a1, 3 1130; CHECK-NEXT: slli a5, a1, 3 1131; CHECK-NEXT: sub a6, a4, a1 1132; CHECK-NEXT: add a7, a2, a5 1133; CHECK-NEXT: add a5, a0, a5 1134; CHECK-NEXT: vl8re64.v v8, (a7) 1135; CHECK-NEXT: csrr a7, vlenb 1136; CHECK-NEXT: slli a7, a7, 3 1137; CHECK-NEXT: add a7, sp, a7 1138; CHECK-NEXT: addi a7, a7, 16 1139; CHECK-NEXT: vs8r.v v8, (a7) # Unknown-size Folded Spill 1140; CHECK-NEXT: sltu a7, a4, a6 1141; CHECK-NEXT: addi a7, a7, -1 1142; CHECK-NEXT: vl8re64.v v8, (a5) 1143; CHECK-NEXT: csrr a5, vlenb 1144; CHECK-NEXT: li t0, 40 1145; CHECK-NEXT: mul a5, a5, t0 1146; CHECK-NEXT: add a5, sp, a5 1147; CHECK-NEXT: addi a5, a5, 16 1148; CHECK-NEXT: vs8r.v v8, (a5) # Unknown-size Folded Spill 1149; CHECK-NEXT: vl8re64.v v8, (a2) 1150; CHECK-NEXT: csrr a2, vlenb 1151; CHECK-NEXT: slli a2, a2, 4 1152; CHECK-NEXT: add a2, sp, a2 1153; CHECK-NEXT: addi a2, a2, 16 1154; CHECK-NEXT: vs8r.v v8, (a2) # Unknown-size Folded Spill 1155; CHECK-NEXT: vl8re64.v v8, (a0) 1156; CHECK-NEXT: addi a0, sp, 16 1157; CHECK-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill 1158; CHECK-NEXT: vslidedown.vx v0, v0, a3 1159; CHECK-NEXT: and a0, a7, a6 1160; CHECK-NEXT: csrr a2, vlenb 1161; CHECK-NEXT: li a3, 24 1162; CHECK-NEXT: mul a2, a2, a3 1163; CHECK-NEXT: add a2, sp, a2 1164; CHECK-NEXT: addi a2, a2, 16 1165; CHECK-NEXT: vl8r.v v24, (a2) # Unknown-size Folded Reload 1166; CHECK-NEXT: csrr a2, vlenb 1167; CHECK-NEXT: slli a2, a2, 3 1168; CHECK-NEXT: add a2, sp, a2 1169; CHECK-NEXT: addi a2, a2, 16 1170; CHECK-NEXT: vl8r.v v16, (a2) # Unknown-size Folded Reload 1171; CHECK-NEXT: csrr a2, vlenb 1172; CHECK-NEXT: li a3, 40 1173; CHECK-NEXT: mul a2, a2, a3 1174; CHECK-NEXT: add a2, sp, a2 1175; CHECK-NEXT: addi a2, a2, 16 1176; CHECK-NEXT: vl8r.v v8, (a2) # Unknown-size Folded Reload 1177; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1178; CHECK-NEXT: vfmadd.vv v8, v24, v16, v0.t 1179; CHECK-NEXT: csrr a0, vlenb 1180; CHECK-NEXT: li a2, 40 1181; CHECK-NEXT: mul a0, a0, a2 1182; CHECK-NEXT: add a0, sp, a0 1183; CHECK-NEXT: addi a0, a0, 16 1184; CHECK-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill 1185; CHECK-NEXT: bltu a4, a1, .LBB92_2 1186; CHECK-NEXT: # %bb.1: 1187; CHECK-NEXT: mv a4, a1 1188; CHECK-NEXT: .LBB92_2: 1189; CHECK-NEXT: vmv1r.v v0, v7 1190; CHECK-NEXT: csrr a0, vlenb 1191; CHECK-NEXT: slli a0, a0, 5 1192; CHECK-NEXT: add a0, sp, a0 1193; CHECK-NEXT: addi a0, a0, 16 1194; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload 1195; CHECK-NEXT: csrr a0, vlenb 1196; CHECK-NEXT: slli a0, a0, 4 1197; CHECK-NEXT: add a0, sp, a0 1198; CHECK-NEXT: addi a0, a0, 16 1199; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 1200; CHECK-NEXT: addi a0, sp, 16 1201; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 1202; CHECK-NEXT: vsetvli zero, a4, e64, m8, ta, ma 1203; CHECK-NEXT: vfmadd.vv v8, v24, v16, v0.t 1204; CHECK-NEXT: csrr a0, vlenb 1205; CHECK-NEXT: li a1, 40 1206; CHECK-NEXT: mul a0, a0, a1 1207; CHECK-NEXT: add a0, sp, a0 1208; CHECK-NEXT: addi a0, a0, 16 1209; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 1210; CHECK-NEXT: csrr a0, vlenb 1211; CHECK-NEXT: li a1, 48 1212; CHECK-NEXT: mul a0, a0, a1 1213; CHECK-NEXT: add sp, sp, a0 1214; CHECK-NEXT: .cfi_def_cfa sp, 16 1215; CHECK-NEXT: addi sp, sp, 16 1216; CHECK-NEXT: .cfi_def_cfa_offset 0 1217; CHECK-NEXT: ret 1218 %v = call <vscale x 16 x double> @llvm.vp.fmuladd.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, <vscale x 16 x i1> %m, i32 %evl) 1219 ret <vscale x 16 x double> %v 1220} 1221 1222define <vscale x 16 x double> @vfma_vv_nxv16f64_unmasked(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, i32 zeroext %evl) { 1223; CHECK-LABEL: vfma_vv_nxv16f64_unmasked: 1224; CHECK: # %bb.0: 1225; CHECK-NEXT: addi sp, sp, -16 1226; CHECK-NEXT: .cfi_def_cfa_offset 16 1227; CHECK-NEXT: csrr a1, vlenb 1228; CHECK-NEXT: slli a1, a1, 5 1229; CHECK-NEXT: sub sp, sp, a1 1230; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb 1231; CHECK-NEXT: csrr a1, vlenb 1232; CHECK-NEXT: slli a1, a1, 4 1233; CHECK-NEXT: add a1, sp, a1 1234; CHECK-NEXT: addi a1, a1, 16 1235; CHECK-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill 1236; CHECK-NEXT: csrr a1, vlenb 1237; CHECK-NEXT: li a3, 24 1238; CHECK-NEXT: mul a1, a1, a3 1239; CHECK-NEXT: add a1, sp, a1 1240; CHECK-NEXT: addi a1, a1, 16 1241; CHECK-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill 1242; CHECK-NEXT: csrr a1, vlenb 1243; CHECK-NEXT: slli a3, a1, 3 1244; CHECK-NEXT: add a5, a2, a3 1245; CHECK-NEXT: vl8re64.v v8, (a5) 1246; CHECK-NEXT: csrr a5, vlenb 1247; CHECK-NEXT: slli a5, a5, 3 1248; CHECK-NEXT: add a5, sp, a5 1249; CHECK-NEXT: addi a5, a5, 16 1250; CHECK-NEXT: vs8r.v v8, (a5) # Unknown-size Folded Spill 1251; CHECK-NEXT: sub a5, a4, a1 1252; CHECK-NEXT: add a3, a0, a3 1253; CHECK-NEXT: vl8re64.v v24, (a3) 1254; CHECK-NEXT: sltu a3, a4, a5 1255; CHECK-NEXT: vl8re64.v v8, (a2) 1256; CHECK-NEXT: addi a2, sp, 16 1257; CHECK-NEXT: vs8r.v v8, (a2) # Unknown-size Folded Spill 1258; CHECK-NEXT: vl8re64.v v0, (a0) 1259; CHECK-NEXT: addi a3, a3, -1 1260; CHECK-NEXT: and a3, a3, a5 1261; CHECK-NEXT: csrr a0, vlenb 1262; CHECK-NEXT: slli a0, a0, 4 1263; CHECK-NEXT: add a0, sp, a0 1264; CHECK-NEXT: addi a0, a0, 16 1265; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 1266; CHECK-NEXT: csrr a0, vlenb 1267; CHECK-NEXT: slli a0, a0, 3 1268; CHECK-NEXT: add a0, sp, a0 1269; CHECK-NEXT: addi a0, a0, 16 1270; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 1271; CHECK-NEXT: vsetvli zero, a3, e64, m8, ta, ma 1272; CHECK-NEXT: vfmadd.vv v24, v16, v8 1273; CHECK-NEXT: bltu a4, a1, .LBB93_2 1274; CHECK-NEXT: # %bb.1: 1275; CHECK-NEXT: mv a4, a1 1276; CHECK-NEXT: .LBB93_2: 1277; CHECK-NEXT: csrr a0, vlenb 1278; CHECK-NEXT: li a1, 24 1279; CHECK-NEXT: mul a0, a0, a1 1280; CHECK-NEXT: add a0, sp, a0 1281; CHECK-NEXT: addi a0, a0, 16 1282; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 1283; CHECK-NEXT: addi a0, sp, 16 1284; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload 1285; CHECK-NEXT: vsetvli zero, a4, e64, m8, ta, ma 1286; CHECK-NEXT: vfmadd.vv v0, v16, v8 1287; CHECK-NEXT: vmv.v.v v8, v0 1288; CHECK-NEXT: vmv8r.v v16, v24 1289; CHECK-NEXT: csrr a0, vlenb 1290; CHECK-NEXT: slli a0, a0, 5 1291; CHECK-NEXT: add sp, sp, a0 1292; CHECK-NEXT: .cfi_def_cfa sp, 16 1293; CHECK-NEXT: addi sp, sp, 16 1294; CHECK-NEXT: .cfi_def_cfa_offset 0 1295; CHECK-NEXT: ret 1296 %v = call <vscale x 16 x double> @llvm.vp.fmuladd.nxv16f64(<vscale x 16 x double> %va, <vscale x 16 x double> %b, <vscale x 16 x double> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 1297 ret <vscale x 16 x double> %v 1298} 1299 1300declare <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half>, <vscale x 1 x i1>, i32) 1301 1302define <vscale x 1 x half> @vfmsub_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1303; CHECK-LABEL: vfmsub_vv_nxv1f16: 1304; CHECK: # %bb.0: 1305; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1306; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t 1307; CHECK-NEXT: vmv1r.v v8, v9 1308; CHECK-NEXT: ret 1309 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl) 1310 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl) 1311 ret <vscale x 1 x half> %v 1312} 1313 1314define <vscale x 1 x half> @vfmsub_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) { 1315; CHECK-LABEL: vfmsub_vv_nxv1f16_unmasked: 1316; CHECK: # %bb.0: 1317; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1318; CHECK-NEXT: vfmsub.vv v8, v9, v10 1319; CHECK-NEXT: ret 1320 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1321 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1322 ret <vscale x 1 x half> %v 1323} 1324 1325define <vscale x 1 x half> @vfmsub_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1326; CHECK-LABEL: vfmsub_vf_nxv1f16: 1327; CHECK: # %bb.0: 1328; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1329; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 1330; CHECK-NEXT: ret 1331 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1332 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1333 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1334 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl) 1335 ret <vscale x 1 x half> %v 1336} 1337 1338define <vscale x 1 x half> @vfmsub_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1339; CHECK-LABEL: vfmsub_vf_nxv1f16_commute: 1340; CHECK: # %bb.0: 1341; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1342; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 1343; CHECK-NEXT: ret 1344 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1345 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1346 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1347 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl) 1348 ret <vscale x 1 x half> %v 1349} 1350 1351define <vscale x 1 x half> @vfmsub_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1352; CHECK-LABEL: vfmsub_vf_nxv1f16_unmasked: 1353; CHECK: # %bb.0: 1354; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1355; CHECK-NEXT: vfmsub.vf v8, fa0, v9 1356; CHECK-NEXT: ret 1357 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1358 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1359 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1360 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1361 ret <vscale x 1 x half> %v 1362} 1363 1364define <vscale x 1 x half> @vfmsub_vf_nxv1f16_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1365; CHECK-LABEL: vfmsub_vf_nxv1f16_unmasked_commute: 1366; CHECK: # %bb.0: 1367; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1368; CHECK-NEXT: vfmsub.vf v8, fa0, v9 1369; CHECK-NEXT: ret 1370 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1371 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1372 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1373 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1374 ret <vscale x 1 x half> %v 1375} 1376 1377define <vscale x 1 x half> @vfnmadd_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1378; CHECK-LABEL: vfnmadd_vv_nxv1f16: 1379; CHECK: # %bb.0: 1380; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1381; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 1382; CHECK-NEXT: vmv1r.v v8, v9 1383; CHECK-NEXT: ret 1384 %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl) 1385 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl) 1386 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl) 1387 ret <vscale x 1 x half> %v 1388} 1389 1390define <vscale x 1 x half> @vfnmadd_vv_nxv1f16_commuted(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1391; CHECK-LABEL: vfnmadd_vv_nxv1f16_commuted: 1392; CHECK: # %bb.0: 1393; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1394; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 1395; CHECK-NEXT: ret 1396 %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl) 1397 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl) 1398 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl) 1399 ret <vscale x 1 x half> %v 1400} 1401 1402define <vscale x 1 x half> @vfnmadd_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) { 1403; CHECK-LABEL: vfnmadd_vv_nxv1f16_unmasked: 1404; CHECK: # %bb.0: 1405; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1406; CHECK-NEXT: vfnmadd.vv v8, v9, v10 1407; CHECK-NEXT: ret 1408 %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1409 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1410 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1411 ret <vscale x 1 x half> %v 1412} 1413 1414define <vscale x 1 x half> @vfnmadd_vv_nxv1f16_unmasked_commuted(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) { 1415; CHECK-LABEL: vfnmadd_vv_nxv1f16_unmasked_commuted: 1416; CHECK: # %bb.0: 1417; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1418; CHECK-NEXT: vfnmadd.vv v8, v9, v10 1419; CHECK-NEXT: ret 1420 %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1421 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1422 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1423 ret <vscale x 1 x half> %v 1424} 1425 1426define <vscale x 1 x half> @vfnmadd_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1427; CHECK-LABEL: vfnmadd_vf_nxv1f16: 1428; CHECK: # %bb.0: 1429; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1430; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 1431; CHECK-NEXT: ret 1432 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1433 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1434 %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl) 1435 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1436 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl) 1437 ret <vscale x 1 x half> %v 1438} 1439 1440define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1441; CHECK-LABEL: vfnmadd_vf_nxv1f16_commute: 1442; CHECK: # %bb.0: 1443; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1444; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 1445; CHECK-NEXT: ret 1446 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1447 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1448 %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl) 1449 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1450 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl) 1451 ret <vscale x 1 x half> %v 1452} 1453 1454define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1455; CHECK-LABEL: vfnmadd_vf_nxv1f16_unmasked: 1456; CHECK: # %bb.0: 1457; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1458; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 1459; CHECK-NEXT: ret 1460 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1461 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1462 %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1463 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1464 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1465 ret <vscale x 1 x half> %v 1466} 1467 1468define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1469; CHECK-LABEL: vfnmadd_vf_nxv1f16_unmasked_commute: 1470; CHECK: # %bb.0: 1471; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1472; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 1473; CHECK-NEXT: ret 1474 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1475 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1476 %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1477 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1478 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1479 ret <vscale x 1 x half> %v 1480} 1481 1482define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_neg_splat(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1483; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat: 1484; CHECK: # %bb.0: 1485; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1486; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 1487; CHECK-NEXT: ret 1488 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1489 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1490 %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl) 1491 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1492 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl) 1493 ret <vscale x 1 x half> %v 1494} 1495 1496define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_neg_splat_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1497; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_commute: 1498; CHECK: # %bb.0: 1499; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1500; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 1501; CHECK-NEXT: ret 1502 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1503 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1504 %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl) 1505 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1506 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> %m, i32 %evl) 1507 ret <vscale x 1 x half> %v 1508} 1509 1510define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_neg_splat_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1511; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked: 1512; CHECK: # %bb.0: 1513; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1514; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 1515; CHECK-NEXT: ret 1516 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1517 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1518 %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1519 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1520 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1521 ret <vscale x 1 x half> %v 1522} 1523 1524define <vscale x 1 x half> @vfnmadd_vf_nxv1f16_neg_splat_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1525; CHECK-LABEL: vfnmadd_vf_nxv1f16_neg_splat_unmasked_commute: 1526; CHECK: # %bb.0: 1527; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1528; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 1529; CHECK-NEXT: ret 1530 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1531 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1532 %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1533 %negvc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1534 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1535 ret <vscale x 1 x half> %v 1536} 1537 1538define <vscale x 1 x half> @vfnmsub_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1539; CHECK-LABEL: vfnmsub_vv_nxv1f16: 1540; CHECK: # %bb.0: 1541; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1542; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 1543; CHECK-NEXT: vmv1r.v v8, v9 1544; CHECK-NEXT: ret 1545 %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl) 1546 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl) 1547 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl) 1548 ret <vscale x 1 x half> %v 1549} 1550 1551define <vscale x 1 x half> @vfnmsub_vv_nxv1f16_commuted(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1552; CHECK-LABEL: vfnmsub_vv_nxv1f16_commuted: 1553; CHECK: # %bb.0: 1554; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1555; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 1556; CHECK-NEXT: ret 1557 %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl) 1558 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> %m, i32 %evl) 1559 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> %m, i32 %evl) 1560 ret <vscale x 1 x half> %v 1561} 1562 1563define <vscale x 1 x half> @vfnmsub_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) { 1564; CHECK-LABEL: vfnmsub_vv_nxv1f16_unmasked: 1565; CHECK: # %bb.0: 1566; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1567; CHECK-NEXT: vfnmadd.vv v8, v9, v10 1568; CHECK-NEXT: ret 1569 %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1570 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1571 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negb, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1572 ret <vscale x 1 x half> %v 1573} 1574 1575define <vscale x 1 x half> @vfnmsub_vv_nxv1f16_unmasked_commuted(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x half> %c, i32 zeroext %evl) { 1576; CHECK-LABEL: vfnmsub_vv_nxv1f16_unmasked_commuted: 1577; CHECK: # %bb.0: 1578; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1579; CHECK-NEXT: vfnmadd.vv v8, v9, v10 1580; CHECK-NEXT: ret 1581 %negb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1582 %negc = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1583 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negb, <vscale x 1 x half> %va, <vscale x 1 x half> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1584 ret <vscale x 1 x half> %v 1585} 1586 1587define <vscale x 1 x half> @vfnmsub_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1588; CHECK-LABEL: vfnmsub_vf_nxv1f16: 1589; CHECK: # %bb.0: 1590; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1591; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 1592; CHECK-NEXT: ret 1593 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1594 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1595 %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl) 1596 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1597 ret <vscale x 1 x half> %v 1598} 1599 1600define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1601; CHECK-LABEL: vfnmsub_vf_nxv1f16_commute: 1602; CHECK: # %bb.0: 1603; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1604; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 1605; CHECK-NEXT: ret 1606 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1607 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1608 %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl) 1609 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1610 ret <vscale x 1 x half> %v 1611} 1612 1613define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1614; CHECK-LABEL: vfnmsub_vf_nxv1f16_unmasked: 1615; CHECK: # %bb.0: 1616; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1617; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 1618; CHECK-NEXT: ret 1619 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1620 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1621 %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1622 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negva, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1623 ret <vscale x 1 x half> %v 1624} 1625 1626define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1627; CHECK-LABEL: vfnmsub_vf_nxv1f16_unmasked_commute: 1628; CHECK: # %bb.0: 1629; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1630; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 1631; CHECK-NEXT: ret 1632 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1633 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1634 %negva = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1635 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %negva, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1636 ret <vscale x 1 x half> %v 1637} 1638 1639define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_neg_splat(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1640; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat: 1641; CHECK: # %bb.0: 1642; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1643; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 1644; CHECK-NEXT: ret 1645 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1646 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1647 %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl) 1648 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1649 ret <vscale x 1 x half> %v 1650} 1651 1652define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_neg_splat_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1653; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_commute: 1654; CHECK: # %bb.0: 1655; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1656; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 1657; CHECK-NEXT: ret 1658 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1659 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1660 %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl) 1661 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> %m, i32 %evl) 1662 ret <vscale x 1 x half> %v 1663} 1664 1665define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_neg_splat_unmasked(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1666; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked: 1667; CHECK: # %bb.0: 1668; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1669; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 1670; CHECK-NEXT: ret 1671 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1672 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1673 %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1674 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %negvb, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1675 ret <vscale x 1 x half> %v 1676} 1677 1678define <vscale x 1 x half> @vfnmsub_vf_nxv1f16_neg_splat_unmasked_commute(<vscale x 1 x half> %va, half %b, <vscale x 1 x half> %vc, i32 zeroext %evl) { 1679; CHECK-LABEL: vfnmsub_vf_nxv1f16_neg_splat_unmasked_commute: 1680; CHECK: # %bb.0: 1681; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 1682; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 1683; CHECK-NEXT: ret 1684 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 1685 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 1686 %negvb = call <vscale x 1 x half> @llvm.vp.fneg.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1687 %v = call <vscale x 1 x half> @llvm.vp.fmuladd.nxv1f16(<vscale x 1 x half> %negvb, <vscale x 1 x half> %va, <vscale x 1 x half> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 1688 ret <vscale x 1 x half> %v 1689} 1690 1691declare <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32) 1692 1693define <vscale x 2 x half> @vfmsub_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1694; CHECK-LABEL: vfmsub_vv_nxv2f16: 1695; CHECK: # %bb.0: 1696; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1697; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t 1698; CHECK-NEXT: vmv1r.v v8, v9 1699; CHECK-NEXT: ret 1700 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl) 1701 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl) 1702 ret <vscale x 2 x half> %v 1703} 1704 1705define <vscale x 2 x half> @vfmsub_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) { 1706; CHECK-LABEL: vfmsub_vv_nxv2f16_unmasked: 1707; CHECK: # %bb.0: 1708; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1709; CHECK-NEXT: vfmsub.vv v8, v9, v10 1710; CHECK-NEXT: ret 1711 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1712 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1713 ret <vscale x 2 x half> %v 1714} 1715 1716define <vscale x 2 x half> @vfmsub_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1717; CHECK-LABEL: vfmsub_vf_nxv2f16: 1718; CHECK: # %bb.0: 1719; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1720; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 1721; CHECK-NEXT: ret 1722 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1723 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1724 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 1725 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl) 1726 ret <vscale x 2 x half> %v 1727} 1728 1729define <vscale x 2 x half> @vfmsub_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1730; CHECK-LABEL: vfmsub_vf_nxv2f16_commute: 1731; CHECK: # %bb.0: 1732; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1733; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 1734; CHECK-NEXT: ret 1735 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1736 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1737 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 1738 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl) 1739 ret <vscale x 2 x half> %v 1740} 1741 1742define <vscale x 2 x half> @vfmsub_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 1743; CHECK-LABEL: vfmsub_vf_nxv2f16_unmasked: 1744; CHECK: # %bb.0: 1745; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1746; CHECK-NEXT: vfmsub.vf v8, fa0, v9 1747; CHECK-NEXT: ret 1748 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1749 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1750 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1751 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1752 ret <vscale x 2 x half> %v 1753} 1754 1755define <vscale x 2 x half> @vfmsub_vf_nxv2f16_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 1756; CHECK-LABEL: vfmsub_vf_nxv2f16_unmasked_commute: 1757; CHECK: # %bb.0: 1758; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1759; CHECK-NEXT: vfmsub.vf v8, fa0, v9 1760; CHECK-NEXT: ret 1761 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1762 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1763 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1764 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1765 ret <vscale x 2 x half> %v 1766} 1767 1768define <vscale x 2 x half> @vfnmadd_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1769; CHECK-LABEL: vfnmadd_vv_nxv2f16: 1770; CHECK: # %bb.0: 1771; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1772; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 1773; CHECK-NEXT: vmv1r.v v8, v9 1774; CHECK-NEXT: ret 1775 %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl) 1776 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl) 1777 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl) 1778 ret <vscale x 2 x half> %v 1779} 1780 1781define <vscale x 2 x half> @vfnmadd_vv_nxv2f16_commuted(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1782; CHECK-LABEL: vfnmadd_vv_nxv2f16_commuted: 1783; CHECK: # %bb.0: 1784; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1785; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 1786; CHECK-NEXT: ret 1787 %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl) 1788 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl) 1789 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl) 1790 ret <vscale x 2 x half> %v 1791} 1792 1793define <vscale x 2 x half> @vfnmadd_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) { 1794; CHECK-LABEL: vfnmadd_vv_nxv2f16_unmasked: 1795; CHECK: # %bb.0: 1796; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1797; CHECK-NEXT: vfnmadd.vv v8, v9, v10 1798; CHECK-NEXT: ret 1799 %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1800 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1801 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1802 ret <vscale x 2 x half> %v 1803} 1804 1805define <vscale x 2 x half> @vfnmadd_vv_nxv2f16_unmasked_commuted(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) { 1806; CHECK-LABEL: vfnmadd_vv_nxv2f16_unmasked_commuted: 1807; CHECK: # %bb.0: 1808; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1809; CHECK-NEXT: vfnmadd.vv v8, v9, v10 1810; CHECK-NEXT: ret 1811 %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1812 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1813 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1814 ret <vscale x 2 x half> %v 1815} 1816 1817define <vscale x 2 x half> @vfnmadd_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1818; CHECK-LABEL: vfnmadd_vf_nxv2f16: 1819; CHECK: # %bb.0: 1820; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1821; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 1822; CHECK-NEXT: ret 1823 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1824 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1825 %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 1826 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 1827 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl) 1828 ret <vscale x 2 x half> %v 1829} 1830 1831define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1832; CHECK-LABEL: vfnmadd_vf_nxv2f16_commute: 1833; CHECK: # %bb.0: 1834; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1835; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 1836; CHECK-NEXT: ret 1837 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1838 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1839 %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 1840 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 1841 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl) 1842 ret <vscale x 2 x half> %v 1843} 1844 1845define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 1846; CHECK-LABEL: vfnmadd_vf_nxv2f16_unmasked: 1847; CHECK: # %bb.0: 1848; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1849; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 1850; CHECK-NEXT: ret 1851 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1852 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1853 %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1854 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1855 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1856 ret <vscale x 2 x half> %v 1857} 1858 1859define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 1860; CHECK-LABEL: vfnmadd_vf_nxv2f16_unmasked_commute: 1861; CHECK: # %bb.0: 1862; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1863; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 1864; CHECK-NEXT: ret 1865 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1866 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1867 %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1868 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1869 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1870 ret <vscale x 2 x half> %v 1871} 1872 1873define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_neg_splat(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1874; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat: 1875; CHECK: # %bb.0: 1876; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1877; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 1878; CHECK-NEXT: ret 1879 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1880 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1881 %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl) 1882 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 1883 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl) 1884 ret <vscale x 2 x half> %v 1885} 1886 1887define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_neg_splat_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1888; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_commute: 1889; CHECK: # %bb.0: 1890; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1891; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 1892; CHECK-NEXT: ret 1893 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1894 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1895 %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl) 1896 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 1897 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> %m, i32 %evl) 1898 ret <vscale x 2 x half> %v 1899} 1900 1901define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_neg_splat_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 1902; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked: 1903; CHECK: # %bb.0: 1904; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1905; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 1906; CHECK-NEXT: ret 1907 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1908 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1909 %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1910 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1911 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1912 ret <vscale x 2 x half> %v 1913} 1914 1915define <vscale x 2 x half> @vfnmadd_vf_nxv2f16_neg_splat_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 1916; CHECK-LABEL: vfnmadd_vf_nxv2f16_neg_splat_unmasked_commute: 1917; CHECK: # %bb.0: 1918; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1919; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 1920; CHECK-NEXT: ret 1921 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1922 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1923 %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1924 %negvc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1925 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1926 ret <vscale x 2 x half> %v 1927} 1928 1929define <vscale x 2 x half> @vfnmsub_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1930; CHECK-LABEL: vfnmsub_vv_nxv2f16: 1931; CHECK: # %bb.0: 1932; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1933; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 1934; CHECK-NEXT: vmv1r.v v8, v9 1935; CHECK-NEXT: ret 1936 %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl) 1937 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl) 1938 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl) 1939 ret <vscale x 2 x half> %v 1940} 1941 1942define <vscale x 2 x half> @vfnmsub_vv_nxv2f16_commuted(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1943; CHECK-LABEL: vfnmsub_vv_nxv2f16_commuted: 1944; CHECK: # %bb.0: 1945; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1946; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 1947; CHECK-NEXT: ret 1948 %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl) 1949 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> %m, i32 %evl) 1950 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> %m, i32 %evl) 1951 ret <vscale x 2 x half> %v 1952} 1953 1954define <vscale x 2 x half> @vfnmsub_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) { 1955; CHECK-LABEL: vfnmsub_vv_nxv2f16_unmasked: 1956; CHECK: # %bb.0: 1957; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1958; CHECK-NEXT: vfnmadd.vv v8, v9, v10 1959; CHECK-NEXT: ret 1960 %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1961 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1962 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negb, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1963 ret <vscale x 2 x half> %v 1964} 1965 1966define <vscale x 2 x half> @vfnmsub_vv_nxv2f16_unmasked_commuted(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x half> %c, i32 zeroext %evl) { 1967; CHECK-LABEL: vfnmsub_vv_nxv2f16_unmasked_commuted: 1968; CHECK: # %bb.0: 1969; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1970; CHECK-NEXT: vfnmadd.vv v8, v9, v10 1971; CHECK-NEXT: ret 1972 %negb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1973 %negc = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1974 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negb, <vscale x 2 x half> %va, <vscale x 2 x half> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 1975 ret <vscale x 2 x half> %v 1976} 1977 1978define <vscale x 2 x half> @vfnmsub_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1979; CHECK-LABEL: vfnmsub_vf_nxv2f16: 1980; CHECK: # %bb.0: 1981; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1982; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 1983; CHECK-NEXT: ret 1984 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1985 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1986 %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 1987 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 1988 ret <vscale x 2 x half> %v 1989} 1990 1991define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1992; CHECK-LABEL: vfnmsub_vf_nxv2f16_commute: 1993; CHECK: # %bb.0: 1994; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 1995; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 1996; CHECK-NEXT: ret 1997 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 1998 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 1999 %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 2000 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 2001 ret <vscale x 2 x half> %v 2002} 2003 2004define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 2005; CHECK-LABEL: vfnmsub_vf_nxv2f16_unmasked: 2006; CHECK: # %bb.0: 2007; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 2008; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 2009; CHECK-NEXT: ret 2010 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 2011 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 2012 %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 2013 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negva, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 2014 ret <vscale x 2 x half> %v 2015} 2016 2017define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 2018; CHECK-LABEL: vfnmsub_vf_nxv2f16_unmasked_commute: 2019; CHECK: # %bb.0: 2020; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 2021; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 2022; CHECK-NEXT: ret 2023 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 2024 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 2025 %negva = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 2026 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %negva, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 2027 ret <vscale x 2 x half> %v 2028} 2029 2030define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_neg_splat(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 2031; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat: 2032; CHECK: # %bb.0: 2033; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 2034; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 2035; CHECK-NEXT: ret 2036 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 2037 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 2038 %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl) 2039 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 2040 ret <vscale x 2 x half> %v 2041} 2042 2043define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_neg_splat_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 2044; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_commute: 2045; CHECK: # %bb.0: 2046; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 2047; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 2048; CHECK-NEXT: ret 2049 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 2050 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 2051 %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl) 2052 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> %m, i32 %evl) 2053 ret <vscale x 2 x half> %v 2054} 2055 2056define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_neg_splat_unmasked(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 2057; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked: 2058; CHECK: # %bb.0: 2059; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 2060; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 2061; CHECK-NEXT: ret 2062 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 2063 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 2064 %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 2065 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %negvb, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 2066 ret <vscale x 2 x half> %v 2067} 2068 2069define <vscale x 2 x half> @vfnmsub_vf_nxv2f16_neg_splat_unmasked_commute(<vscale x 2 x half> %va, half %b, <vscale x 2 x half> %vc, i32 zeroext %evl) { 2070; CHECK-LABEL: vfnmsub_vf_nxv2f16_neg_splat_unmasked_commute: 2071; CHECK: # %bb.0: 2072; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 2073; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 2074; CHECK-NEXT: ret 2075 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 2076 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 2077 %negvb = call <vscale x 2 x half> @llvm.vp.fneg.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 2078 %v = call <vscale x 2 x half> @llvm.vp.fmuladd.nxv2f16(<vscale x 2 x half> %negvb, <vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 2079 ret <vscale x 2 x half> %v 2080} 2081 2082declare <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half>, <vscale x 4 x i1>, i32) 2083 2084define <vscale x 4 x half> @vfmsub_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2085; CHECK-LABEL: vfmsub_vv_nxv4f16: 2086; CHECK: # %bb.0: 2087; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2088; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t 2089; CHECK-NEXT: vmv.v.v v8, v9 2090; CHECK-NEXT: ret 2091 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl) 2092 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl) 2093 ret <vscale x 4 x half> %v 2094} 2095 2096define <vscale x 4 x half> @vfmsub_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) { 2097; CHECK-LABEL: vfmsub_vv_nxv4f16_unmasked: 2098; CHECK: # %bb.0: 2099; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2100; CHECK-NEXT: vfmsub.vv v8, v9, v10 2101; CHECK-NEXT: ret 2102 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2103 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2104 ret <vscale x 4 x half> %v 2105} 2106 2107define <vscale x 4 x half> @vfmsub_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2108; CHECK-LABEL: vfmsub_vf_nxv4f16: 2109; CHECK: # %bb.0: 2110; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2111; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 2112; CHECK-NEXT: ret 2113 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2114 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2115 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2116 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl) 2117 ret <vscale x 4 x half> %v 2118} 2119 2120define <vscale x 4 x half> @vfmsub_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2121; CHECK-LABEL: vfmsub_vf_nxv4f16_commute: 2122; CHECK: # %bb.0: 2123; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2124; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 2125; CHECK-NEXT: ret 2126 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2127 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2128 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2129 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl) 2130 ret <vscale x 4 x half> %v 2131} 2132 2133define <vscale x 4 x half> @vfmsub_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2134; CHECK-LABEL: vfmsub_vf_nxv4f16_unmasked: 2135; CHECK: # %bb.0: 2136; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2137; CHECK-NEXT: vfmsub.vf v8, fa0, v9 2138; CHECK-NEXT: ret 2139 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2140 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2141 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2142 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2143 ret <vscale x 4 x half> %v 2144} 2145 2146define <vscale x 4 x half> @vfmsub_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2147; CHECK-LABEL: vfmsub_vf_nxv4f16_unmasked_commute: 2148; CHECK: # %bb.0: 2149; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2150; CHECK-NEXT: vfmsub.vf v8, fa0, v9 2151; CHECK-NEXT: ret 2152 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2153 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2154 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2155 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2156 ret <vscale x 4 x half> %v 2157} 2158 2159define <vscale x 4 x half> @vfnmadd_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2160; CHECK-LABEL: vfnmadd_vv_nxv4f16: 2161; CHECK: # %bb.0: 2162; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2163; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 2164; CHECK-NEXT: vmv.v.v v8, v9 2165; CHECK-NEXT: ret 2166 %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl) 2167 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl) 2168 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl) 2169 ret <vscale x 4 x half> %v 2170} 2171 2172define <vscale x 4 x half> @vfnmadd_vv_nxv4f16_commuted(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2173; CHECK-LABEL: vfnmadd_vv_nxv4f16_commuted: 2174; CHECK: # %bb.0: 2175; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2176; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 2177; CHECK-NEXT: ret 2178 %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl) 2179 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl) 2180 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl) 2181 ret <vscale x 4 x half> %v 2182} 2183 2184define <vscale x 4 x half> @vfnmadd_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) { 2185; CHECK-LABEL: vfnmadd_vv_nxv4f16_unmasked: 2186; CHECK: # %bb.0: 2187; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2188; CHECK-NEXT: vfnmadd.vv v8, v9, v10 2189; CHECK-NEXT: ret 2190 %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2191 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2192 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2193 ret <vscale x 4 x half> %v 2194} 2195 2196define <vscale x 4 x half> @vfnmadd_vv_nxv4f16_unmasked_commuted(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) { 2197; CHECK-LABEL: vfnmadd_vv_nxv4f16_unmasked_commuted: 2198; CHECK: # %bb.0: 2199; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2200; CHECK-NEXT: vfnmadd.vv v8, v9, v10 2201; CHECK-NEXT: ret 2202 %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2203 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2204 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2205 ret <vscale x 4 x half> %v 2206} 2207 2208define <vscale x 4 x half> @vfnmadd_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2209; CHECK-LABEL: vfnmadd_vf_nxv4f16: 2210; CHECK: # %bb.0: 2211; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2212; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 2213; CHECK-NEXT: ret 2214 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2215 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2216 %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl) 2217 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2218 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl) 2219 ret <vscale x 4 x half> %v 2220} 2221 2222define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2223; CHECK-LABEL: vfnmadd_vf_nxv4f16_commute: 2224; CHECK: # %bb.0: 2225; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2226; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 2227; CHECK-NEXT: ret 2228 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2229 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2230 %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl) 2231 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2232 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl) 2233 ret <vscale x 4 x half> %v 2234} 2235 2236define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2237; CHECK-LABEL: vfnmadd_vf_nxv4f16_unmasked: 2238; CHECK: # %bb.0: 2239; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2240; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 2241; CHECK-NEXT: ret 2242 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2243 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2244 %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2245 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2246 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2247 ret <vscale x 4 x half> %v 2248} 2249 2250define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2251; CHECK-LABEL: vfnmadd_vf_nxv4f16_unmasked_commute: 2252; CHECK: # %bb.0: 2253; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2254; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 2255; CHECK-NEXT: ret 2256 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2257 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2258 %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2259 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2260 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2261 ret <vscale x 4 x half> %v 2262} 2263 2264define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_neg_splat(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2265; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat: 2266; CHECK: # %bb.0: 2267; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2268; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 2269; CHECK-NEXT: ret 2270 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2271 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2272 %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl) 2273 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2274 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl) 2275 ret <vscale x 4 x half> %v 2276} 2277 2278define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_neg_splat_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2279; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_commute: 2280; CHECK: # %bb.0: 2281; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2282; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 2283; CHECK-NEXT: ret 2284 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2285 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2286 %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl) 2287 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2288 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> %m, i32 %evl) 2289 ret <vscale x 4 x half> %v 2290} 2291 2292define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_neg_splat_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2293; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked: 2294; CHECK: # %bb.0: 2295; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2296; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 2297; CHECK-NEXT: ret 2298 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2299 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2300 %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2301 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2302 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2303 ret <vscale x 4 x half> %v 2304} 2305 2306define <vscale x 4 x half> @vfnmadd_vf_nxv4f16_neg_splat_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2307; CHECK-LABEL: vfnmadd_vf_nxv4f16_neg_splat_unmasked_commute: 2308; CHECK: # %bb.0: 2309; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2310; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 2311; CHECK-NEXT: ret 2312 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2313 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2314 %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2315 %negvc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2316 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2317 ret <vscale x 4 x half> %v 2318} 2319 2320define <vscale x 4 x half> @vfnmsub_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2321; CHECK-LABEL: vfnmsub_vv_nxv4f16: 2322; CHECK: # %bb.0: 2323; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2324; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 2325; CHECK-NEXT: vmv.v.v v8, v9 2326; CHECK-NEXT: ret 2327 %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl) 2328 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl) 2329 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl) 2330 ret <vscale x 4 x half> %v 2331} 2332 2333define <vscale x 4 x half> @vfnmsub_vv_nxv4f16_commuted(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2334; CHECK-LABEL: vfnmsub_vv_nxv4f16_commuted: 2335; CHECK: # %bb.0: 2336; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2337; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 2338; CHECK-NEXT: ret 2339 %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl) 2340 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> %m, i32 %evl) 2341 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> %m, i32 %evl) 2342 ret <vscale x 4 x half> %v 2343} 2344 2345define <vscale x 4 x half> @vfnmsub_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) { 2346; CHECK-LABEL: vfnmsub_vv_nxv4f16_unmasked: 2347; CHECK: # %bb.0: 2348; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2349; CHECK-NEXT: vfnmadd.vv v8, v9, v10 2350; CHECK-NEXT: ret 2351 %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2352 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2353 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negb, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2354 ret <vscale x 4 x half> %v 2355} 2356 2357define <vscale x 4 x half> @vfnmsub_vv_nxv4f16_unmasked_commuted(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x half> %c, i32 zeroext %evl) { 2358; CHECK-LABEL: vfnmsub_vv_nxv4f16_unmasked_commuted: 2359; CHECK: # %bb.0: 2360; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2361; CHECK-NEXT: vfnmadd.vv v8, v9, v10 2362; CHECK-NEXT: ret 2363 %negb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2364 %negc = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2365 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negb, <vscale x 4 x half> %va, <vscale x 4 x half> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2366 ret <vscale x 4 x half> %v 2367} 2368 2369define <vscale x 4 x half> @vfnmsub_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2370; CHECK-LABEL: vfnmsub_vf_nxv4f16: 2371; CHECK: # %bb.0: 2372; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2373; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 2374; CHECK-NEXT: ret 2375 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2376 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2377 %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl) 2378 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2379 ret <vscale x 4 x half> %v 2380} 2381 2382define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2383; CHECK-LABEL: vfnmsub_vf_nxv4f16_commute: 2384; CHECK: # %bb.0: 2385; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2386; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 2387; CHECK-NEXT: ret 2388 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2389 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2390 %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl) 2391 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2392 ret <vscale x 4 x half> %v 2393} 2394 2395define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2396; CHECK-LABEL: vfnmsub_vf_nxv4f16_unmasked: 2397; CHECK: # %bb.0: 2398; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2399; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 2400; CHECK-NEXT: ret 2401 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2402 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2403 %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2404 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negva, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2405 ret <vscale x 4 x half> %v 2406} 2407 2408define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2409; CHECK-LABEL: vfnmsub_vf_nxv4f16_unmasked_commute: 2410; CHECK: # %bb.0: 2411; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2412; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 2413; CHECK-NEXT: ret 2414 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2415 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2416 %negva = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2417 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %negva, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2418 ret <vscale x 4 x half> %v 2419} 2420 2421define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_neg_splat(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2422; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat: 2423; CHECK: # %bb.0: 2424; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2425; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 2426; CHECK-NEXT: ret 2427 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2428 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2429 %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl) 2430 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2431 ret <vscale x 4 x half> %v 2432} 2433 2434define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_neg_splat_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 2435; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_commute: 2436; CHECK: # %bb.0: 2437; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2438; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 2439; CHECK-NEXT: ret 2440 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2441 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2442 %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl) 2443 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> %m, i32 %evl) 2444 ret <vscale x 4 x half> %v 2445} 2446 2447define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_neg_splat_unmasked(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2448; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked: 2449; CHECK: # %bb.0: 2450; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2451; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 2452; CHECK-NEXT: ret 2453 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2454 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2455 %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2456 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %negvb, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2457 ret <vscale x 4 x half> %v 2458} 2459 2460define <vscale x 4 x half> @vfnmsub_vf_nxv4f16_neg_splat_unmasked_commute(<vscale x 4 x half> %va, half %b, <vscale x 4 x half> %vc, i32 zeroext %evl) { 2461; CHECK-LABEL: vfnmsub_vf_nxv4f16_neg_splat_unmasked_commute: 2462; CHECK: # %bb.0: 2463; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 2464; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 2465; CHECK-NEXT: ret 2466 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 2467 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 2468 %negvb = call <vscale x 4 x half> @llvm.vp.fneg.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2469 %v = call <vscale x 4 x half> @llvm.vp.fmuladd.nxv4f16(<vscale x 4 x half> %negvb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 2470 ret <vscale x 4 x half> %v 2471} 2472 2473declare <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, i32) 2474 2475define <vscale x 8 x half> @vfmsub_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2476; CHECK-LABEL: vfmsub_vv_nxv8f16: 2477; CHECK: # %bb.0: 2478; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2479; CHECK-NEXT: vfmsub.vv v10, v8, v12, v0.t 2480; CHECK-NEXT: vmv.v.v v8, v10 2481; CHECK-NEXT: ret 2482 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl) 2483 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl) 2484 ret <vscale x 8 x half> %v 2485} 2486 2487define <vscale x 8 x half> @vfmsub_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) { 2488; CHECK-LABEL: vfmsub_vv_nxv8f16_unmasked: 2489; CHECK: # %bb.0: 2490; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2491; CHECK-NEXT: vfmsub.vv v8, v10, v12 2492; CHECK-NEXT: ret 2493 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2494 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2495 ret <vscale x 8 x half> %v 2496} 2497 2498define <vscale x 8 x half> @vfmsub_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2499; CHECK-LABEL: vfmsub_vf_nxv8f16: 2500; CHECK: # %bb.0: 2501; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2502; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t 2503; CHECK-NEXT: ret 2504 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2505 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2506 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2507 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl) 2508 ret <vscale x 8 x half> %v 2509} 2510 2511define <vscale x 8 x half> @vfmsub_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2512; CHECK-LABEL: vfmsub_vf_nxv8f16_commute: 2513; CHECK: # %bb.0: 2514; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2515; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t 2516; CHECK-NEXT: ret 2517 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2518 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2519 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2520 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl) 2521 ret <vscale x 8 x half> %v 2522} 2523 2524define <vscale x 8 x half> @vfmsub_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2525; CHECK-LABEL: vfmsub_vf_nxv8f16_unmasked: 2526; CHECK: # %bb.0: 2527; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2528; CHECK-NEXT: vfmsub.vf v8, fa0, v10 2529; CHECK-NEXT: ret 2530 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2531 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2532 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2533 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2534 ret <vscale x 8 x half> %v 2535} 2536 2537define <vscale x 8 x half> @vfmsub_vf_nxv8f16_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2538; CHECK-LABEL: vfmsub_vf_nxv8f16_unmasked_commute: 2539; CHECK: # %bb.0: 2540; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2541; CHECK-NEXT: vfmsub.vf v8, fa0, v10 2542; CHECK-NEXT: ret 2543 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2544 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2545 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2546 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2547 ret <vscale x 8 x half> %v 2548} 2549 2550define <vscale x 8 x half> @vfnmadd_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2551; CHECK-LABEL: vfnmadd_vv_nxv8f16: 2552; CHECK: # %bb.0: 2553; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2554; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t 2555; CHECK-NEXT: vmv.v.v v8, v10 2556; CHECK-NEXT: ret 2557 %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl) 2558 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl) 2559 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl) 2560 ret <vscale x 8 x half> %v 2561} 2562 2563define <vscale x 8 x half> @vfnmadd_vv_nxv8f16_commuted(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2564; CHECK-LABEL: vfnmadd_vv_nxv8f16_commuted: 2565; CHECK: # %bb.0: 2566; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2567; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t 2568; CHECK-NEXT: ret 2569 %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl) 2570 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl) 2571 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl) 2572 ret <vscale x 8 x half> %v 2573} 2574 2575define <vscale x 8 x half> @vfnmadd_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) { 2576; CHECK-LABEL: vfnmadd_vv_nxv8f16_unmasked: 2577; CHECK: # %bb.0: 2578; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2579; CHECK-NEXT: vfnmadd.vv v8, v10, v12 2580; CHECK-NEXT: ret 2581 %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2582 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2583 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2584 ret <vscale x 8 x half> %v 2585} 2586 2587define <vscale x 8 x half> @vfnmadd_vv_nxv8f16_unmasked_commuted(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) { 2588; CHECK-LABEL: vfnmadd_vv_nxv8f16_unmasked_commuted: 2589; CHECK: # %bb.0: 2590; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2591; CHECK-NEXT: vfnmadd.vv v8, v10, v12 2592; CHECK-NEXT: ret 2593 %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2594 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2595 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2596 ret <vscale x 8 x half> %v 2597} 2598 2599define <vscale x 8 x half> @vfnmadd_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2600; CHECK-LABEL: vfnmadd_vf_nxv8f16: 2601; CHECK: # %bb.0: 2602; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2603; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 2604; CHECK-NEXT: ret 2605 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2606 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2607 %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl) 2608 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2609 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl) 2610 ret <vscale x 8 x half> %v 2611} 2612 2613define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2614; CHECK-LABEL: vfnmadd_vf_nxv8f16_commute: 2615; CHECK: # %bb.0: 2616; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2617; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 2618; CHECK-NEXT: ret 2619 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2620 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2621 %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl) 2622 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2623 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl) 2624 ret <vscale x 8 x half> %v 2625} 2626 2627define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2628; CHECK-LABEL: vfnmadd_vf_nxv8f16_unmasked: 2629; CHECK: # %bb.0: 2630; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2631; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 2632; CHECK-NEXT: ret 2633 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2634 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2635 %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2636 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2637 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2638 ret <vscale x 8 x half> %v 2639} 2640 2641define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2642; CHECK-LABEL: vfnmadd_vf_nxv8f16_unmasked_commute: 2643; CHECK: # %bb.0: 2644; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2645; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 2646; CHECK-NEXT: ret 2647 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2648 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2649 %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2650 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2651 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2652 ret <vscale x 8 x half> %v 2653} 2654 2655define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_neg_splat(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2656; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat: 2657; CHECK: # %bb.0: 2658; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2659; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 2660; CHECK-NEXT: ret 2661 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2662 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2663 %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl) 2664 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2665 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl) 2666 ret <vscale x 8 x half> %v 2667} 2668 2669define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_neg_splat_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2670; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_commute: 2671; CHECK: # %bb.0: 2672; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2673; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 2674; CHECK-NEXT: ret 2675 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2676 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2677 %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl) 2678 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2679 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> %m, i32 %evl) 2680 ret <vscale x 8 x half> %v 2681} 2682 2683define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_neg_splat_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2684; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked: 2685; CHECK: # %bb.0: 2686; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2687; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 2688; CHECK-NEXT: ret 2689 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2690 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2691 %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2692 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2693 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2694 ret <vscale x 8 x half> %v 2695} 2696 2697define <vscale x 8 x half> @vfnmadd_vf_nxv8f16_neg_splat_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2698; CHECK-LABEL: vfnmadd_vf_nxv8f16_neg_splat_unmasked_commute: 2699; CHECK: # %bb.0: 2700; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2701; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 2702; CHECK-NEXT: ret 2703 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2704 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2705 %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2706 %negvc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2707 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2708 ret <vscale x 8 x half> %v 2709} 2710 2711define <vscale x 8 x half> @vfnmsub_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2712; CHECK-LABEL: vfnmsub_vv_nxv8f16: 2713; CHECK: # %bb.0: 2714; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2715; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t 2716; CHECK-NEXT: vmv.v.v v8, v10 2717; CHECK-NEXT: ret 2718 %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl) 2719 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl) 2720 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl) 2721 ret <vscale x 8 x half> %v 2722} 2723 2724define <vscale x 8 x half> @vfnmsub_vv_nxv8f16_commuted(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2725; CHECK-LABEL: vfnmsub_vv_nxv8f16_commuted: 2726; CHECK: # %bb.0: 2727; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2728; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t 2729; CHECK-NEXT: ret 2730 %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl) 2731 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> %m, i32 %evl) 2732 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> %m, i32 %evl) 2733 ret <vscale x 8 x half> %v 2734} 2735 2736define <vscale x 8 x half> @vfnmsub_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) { 2737; CHECK-LABEL: vfnmsub_vv_nxv8f16_unmasked: 2738; CHECK: # %bb.0: 2739; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2740; CHECK-NEXT: vfnmadd.vv v8, v10, v12 2741; CHECK-NEXT: ret 2742 %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2743 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2744 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negb, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2745 ret <vscale x 8 x half> %v 2746} 2747 2748define <vscale x 8 x half> @vfnmsub_vv_nxv8f16_unmasked_commuted(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x half> %c, i32 zeroext %evl) { 2749; CHECK-LABEL: vfnmsub_vv_nxv8f16_unmasked_commuted: 2750; CHECK: # %bb.0: 2751; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2752; CHECK-NEXT: vfnmadd.vv v8, v10, v12 2753; CHECK-NEXT: ret 2754 %negb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2755 %negc = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2756 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negb, <vscale x 8 x half> %va, <vscale x 8 x half> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2757 ret <vscale x 8 x half> %v 2758} 2759 2760define <vscale x 8 x half> @vfnmsub_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2761; CHECK-LABEL: vfnmsub_vf_nxv8f16: 2762; CHECK: # %bb.0: 2763; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2764; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 2765; CHECK-NEXT: ret 2766 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2767 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2768 %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl) 2769 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2770 ret <vscale x 8 x half> %v 2771} 2772 2773define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2774; CHECK-LABEL: vfnmsub_vf_nxv8f16_commute: 2775; CHECK: # %bb.0: 2776; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2777; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 2778; CHECK-NEXT: ret 2779 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2780 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2781 %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl) 2782 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2783 ret <vscale x 8 x half> %v 2784} 2785 2786define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2787; CHECK-LABEL: vfnmsub_vf_nxv8f16_unmasked: 2788; CHECK: # %bb.0: 2789; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2790; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 2791; CHECK-NEXT: ret 2792 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2793 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2794 %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2795 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negva, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2796 ret <vscale x 8 x half> %v 2797} 2798 2799define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2800; CHECK-LABEL: vfnmsub_vf_nxv8f16_unmasked_commute: 2801; CHECK: # %bb.0: 2802; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2803; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 2804; CHECK-NEXT: ret 2805 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2806 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2807 %negva = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2808 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %negva, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2809 ret <vscale x 8 x half> %v 2810} 2811 2812define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_neg_splat(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2813; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat: 2814; CHECK: # %bb.0: 2815; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2816; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 2817; CHECK-NEXT: ret 2818 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2819 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2820 %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl) 2821 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2822 ret <vscale x 8 x half> %v 2823} 2824 2825define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_neg_splat_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 2826; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_commute: 2827; CHECK: # %bb.0: 2828; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2829; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 2830; CHECK-NEXT: ret 2831 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2832 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2833 %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl) 2834 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> %m, i32 %evl) 2835 ret <vscale x 8 x half> %v 2836} 2837 2838define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_neg_splat_unmasked(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2839; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked: 2840; CHECK: # %bb.0: 2841; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2842; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 2843; CHECK-NEXT: ret 2844 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2845 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2846 %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2847 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %negvb, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2848 ret <vscale x 8 x half> %v 2849} 2850 2851define <vscale x 8 x half> @vfnmsub_vf_nxv8f16_neg_splat_unmasked_commute(<vscale x 8 x half> %va, half %b, <vscale x 8 x half> %vc, i32 zeroext %evl) { 2852; CHECK-LABEL: vfnmsub_vf_nxv8f16_neg_splat_unmasked_commute: 2853; CHECK: # %bb.0: 2854; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 2855; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 2856; CHECK-NEXT: ret 2857 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 2858 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 2859 %negvb = call <vscale x 8 x half> @llvm.vp.fneg.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2860 %v = call <vscale x 8 x half> @llvm.vp.fmuladd.nxv8f16(<vscale x 8 x half> %negvb, <vscale x 8 x half> %va, <vscale x 8 x half> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 2861 ret <vscale x 8 x half> %v 2862} 2863 2864declare <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half>, <vscale x 16 x i1>, i32) 2865 2866define <vscale x 16 x half> @vfmsub_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 2867; CHECK-LABEL: vfmsub_vv_nxv16f16: 2868; CHECK: # %bb.0: 2869; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2870; CHECK-NEXT: vfmsub.vv v12, v8, v16, v0.t 2871; CHECK-NEXT: vmv.v.v v8, v12 2872; CHECK-NEXT: ret 2873 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl) 2874 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl) 2875 ret <vscale x 16 x half> %v 2876} 2877 2878define <vscale x 16 x half> @vfmsub_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) { 2879; CHECK-LABEL: vfmsub_vv_nxv16f16_unmasked: 2880; CHECK: # %bb.0: 2881; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2882; CHECK-NEXT: vfmsub.vv v8, v12, v16 2883; CHECK-NEXT: ret 2884 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2885 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2886 ret <vscale x 16 x half> %v 2887} 2888 2889define <vscale x 16 x half> @vfmsub_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 2890; CHECK-LABEL: vfmsub_vf_nxv16f16: 2891; CHECK: # %bb.0: 2892; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2893; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t 2894; CHECK-NEXT: ret 2895 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2896 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2897 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 2898 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl) 2899 ret <vscale x 16 x half> %v 2900} 2901 2902define <vscale x 16 x half> @vfmsub_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 2903; CHECK-LABEL: vfmsub_vf_nxv16f16_commute: 2904; CHECK: # %bb.0: 2905; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2906; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t 2907; CHECK-NEXT: ret 2908 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2909 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2910 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 2911 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl) 2912 ret <vscale x 16 x half> %v 2913} 2914 2915define <vscale x 16 x half> @vfmsub_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 2916; CHECK-LABEL: vfmsub_vf_nxv16f16_unmasked: 2917; CHECK: # %bb.0: 2918; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2919; CHECK-NEXT: vfmsub.vf v8, fa0, v12 2920; CHECK-NEXT: ret 2921 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2922 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2923 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2924 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2925 ret <vscale x 16 x half> %v 2926} 2927 2928define <vscale x 16 x half> @vfmsub_vf_nxv16f16_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 2929; CHECK-LABEL: vfmsub_vf_nxv16f16_unmasked_commute: 2930; CHECK: # %bb.0: 2931; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2932; CHECK-NEXT: vfmsub.vf v8, fa0, v12 2933; CHECK-NEXT: ret 2934 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2935 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2936 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2937 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2938 ret <vscale x 16 x half> %v 2939} 2940 2941define <vscale x 16 x half> @vfnmadd_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 2942; CHECK-LABEL: vfnmadd_vv_nxv16f16: 2943; CHECK: # %bb.0: 2944; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2945; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t 2946; CHECK-NEXT: vmv.v.v v8, v12 2947; CHECK-NEXT: ret 2948 %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl) 2949 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl) 2950 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl) 2951 ret <vscale x 16 x half> %v 2952} 2953 2954define <vscale x 16 x half> @vfnmadd_vv_nxv16f16_commuted(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 2955; CHECK-LABEL: vfnmadd_vv_nxv16f16_commuted: 2956; CHECK: # %bb.0: 2957; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2958; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t 2959; CHECK-NEXT: ret 2960 %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl) 2961 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl) 2962 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl) 2963 ret <vscale x 16 x half> %v 2964} 2965 2966define <vscale x 16 x half> @vfnmadd_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) { 2967; CHECK-LABEL: vfnmadd_vv_nxv16f16_unmasked: 2968; CHECK: # %bb.0: 2969; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2970; CHECK-NEXT: vfnmadd.vv v8, v12, v16 2971; CHECK-NEXT: ret 2972 %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2973 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2974 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2975 ret <vscale x 16 x half> %v 2976} 2977 2978define <vscale x 16 x half> @vfnmadd_vv_nxv16f16_unmasked_commuted(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) { 2979; CHECK-LABEL: vfnmadd_vv_nxv16f16_unmasked_commuted: 2980; CHECK: # %bb.0: 2981; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2982; CHECK-NEXT: vfnmadd.vv v8, v12, v16 2983; CHECK-NEXT: ret 2984 %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2985 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2986 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 2987 ret <vscale x 16 x half> %v 2988} 2989 2990define <vscale x 16 x half> @vfnmadd_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 2991; CHECK-LABEL: vfnmadd_vf_nxv16f16: 2992; CHECK: # %bb.0: 2993; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 2994; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 2995; CHECK-NEXT: ret 2996 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 2997 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 2998 %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl) 2999 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 3000 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl) 3001 ret <vscale x 16 x half> %v 3002} 3003 3004define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3005; CHECK-LABEL: vfnmadd_vf_nxv16f16_commute: 3006; CHECK: # %bb.0: 3007; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3008; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 3009; CHECK-NEXT: ret 3010 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3011 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3012 %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl) 3013 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 3014 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl) 3015 ret <vscale x 16 x half> %v 3016} 3017 3018define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 3019; CHECK-LABEL: vfnmadd_vf_nxv16f16_unmasked: 3020; CHECK: # %bb.0: 3021; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3022; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 3023; CHECK-NEXT: ret 3024 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3025 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3026 %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3027 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3028 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3029 ret <vscale x 16 x half> %v 3030} 3031 3032define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 3033; CHECK-LABEL: vfnmadd_vf_nxv16f16_unmasked_commute: 3034; CHECK: # %bb.0: 3035; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3036; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 3037; CHECK-NEXT: ret 3038 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3039 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3040 %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3041 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3042 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3043 ret <vscale x 16 x half> %v 3044} 3045 3046define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_neg_splat(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3047; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat: 3048; CHECK: # %bb.0: 3049; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3050; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 3051; CHECK-NEXT: ret 3052 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3053 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3054 %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl) 3055 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 3056 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl) 3057 ret <vscale x 16 x half> %v 3058} 3059 3060define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_neg_splat_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3061; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_commute: 3062; CHECK: # %bb.0: 3063; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3064; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 3065; CHECK-NEXT: ret 3066 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3067 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3068 %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl) 3069 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 3070 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> %m, i32 %evl) 3071 ret <vscale x 16 x half> %v 3072} 3073 3074define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_neg_splat_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 3075; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked: 3076; CHECK: # %bb.0: 3077; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3078; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 3079; CHECK-NEXT: ret 3080 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3081 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3082 %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3083 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3084 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3085 ret <vscale x 16 x half> %v 3086} 3087 3088define <vscale x 16 x half> @vfnmadd_vf_nxv16f16_neg_splat_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 3089; CHECK-LABEL: vfnmadd_vf_nxv16f16_neg_splat_unmasked_commute: 3090; CHECK: # %bb.0: 3091; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3092; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 3093; CHECK-NEXT: ret 3094 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3095 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3096 %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3097 %negvc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3098 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3099 ret <vscale x 16 x half> %v 3100} 3101 3102define <vscale x 16 x half> @vfnmsub_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3103; CHECK-LABEL: vfnmsub_vv_nxv16f16: 3104; CHECK: # %bb.0: 3105; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3106; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t 3107; CHECK-NEXT: vmv.v.v v8, v12 3108; CHECK-NEXT: ret 3109 %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl) 3110 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl) 3111 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl) 3112 ret <vscale x 16 x half> %v 3113} 3114 3115define <vscale x 16 x half> @vfnmsub_vv_nxv16f16_commuted(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3116; CHECK-LABEL: vfnmsub_vv_nxv16f16_commuted: 3117; CHECK: # %bb.0: 3118; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3119; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t 3120; CHECK-NEXT: ret 3121 %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl) 3122 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> %m, i32 %evl) 3123 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> %m, i32 %evl) 3124 ret <vscale x 16 x half> %v 3125} 3126 3127define <vscale x 16 x half> @vfnmsub_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) { 3128; CHECK-LABEL: vfnmsub_vv_nxv16f16_unmasked: 3129; CHECK: # %bb.0: 3130; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3131; CHECK-NEXT: vfnmadd.vv v8, v12, v16 3132; CHECK-NEXT: ret 3133 %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3134 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3135 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negb, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3136 ret <vscale x 16 x half> %v 3137} 3138 3139define <vscale x 16 x half> @vfnmsub_vv_nxv16f16_unmasked_commuted(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x half> %c, i32 zeroext %evl) { 3140; CHECK-LABEL: vfnmsub_vv_nxv16f16_unmasked_commuted: 3141; CHECK: # %bb.0: 3142; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3143; CHECK-NEXT: vfnmadd.vv v8, v12, v16 3144; CHECK-NEXT: ret 3145 %negb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3146 %negc = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3147 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negb, <vscale x 16 x half> %va, <vscale x 16 x half> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3148 ret <vscale x 16 x half> %v 3149} 3150 3151define <vscale x 16 x half> @vfnmsub_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3152; CHECK-LABEL: vfnmsub_vf_nxv16f16: 3153; CHECK: # %bb.0: 3154; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3155; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 3156; CHECK-NEXT: ret 3157 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3158 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3159 %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl) 3160 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 3161 ret <vscale x 16 x half> %v 3162} 3163 3164define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3165; CHECK-LABEL: vfnmsub_vf_nxv16f16_commute: 3166; CHECK: # %bb.0: 3167; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3168; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 3169; CHECK-NEXT: ret 3170 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3171 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3172 %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl) 3173 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 3174 ret <vscale x 16 x half> %v 3175} 3176 3177define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 3178; CHECK-LABEL: vfnmsub_vf_nxv16f16_unmasked: 3179; CHECK: # %bb.0: 3180; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3181; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 3182; CHECK-NEXT: ret 3183 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3184 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3185 %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3186 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negva, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3187 ret <vscale x 16 x half> %v 3188} 3189 3190define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 3191; CHECK-LABEL: vfnmsub_vf_nxv16f16_unmasked_commute: 3192; CHECK: # %bb.0: 3193; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3194; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 3195; CHECK-NEXT: ret 3196 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3197 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3198 %negva = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3199 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %negva, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3200 ret <vscale x 16 x half> %v 3201} 3202 3203define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_neg_splat(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3204; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat: 3205; CHECK: # %bb.0: 3206; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3207; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 3208; CHECK-NEXT: ret 3209 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3210 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3211 %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl) 3212 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 3213 ret <vscale x 16 x half> %v 3214} 3215 3216define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_neg_splat_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 3217; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_commute: 3218; CHECK: # %bb.0: 3219; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3220; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 3221; CHECK-NEXT: ret 3222 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3223 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3224 %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl) 3225 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> %m, i32 %evl) 3226 ret <vscale x 16 x half> %v 3227} 3228 3229define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_neg_splat_unmasked(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 3230; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked: 3231; CHECK: # %bb.0: 3232; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3233; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 3234; CHECK-NEXT: ret 3235 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3236 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3237 %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3238 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %negvb, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3239 ret <vscale x 16 x half> %v 3240} 3241 3242define <vscale x 16 x half> @vfnmsub_vf_nxv16f16_neg_splat_unmasked_commute(<vscale x 16 x half> %va, half %b, <vscale x 16 x half> %vc, i32 zeroext %evl) { 3243; CHECK-LABEL: vfnmsub_vf_nxv16f16_neg_splat_unmasked_commute: 3244; CHECK: # %bb.0: 3245; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 3246; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 3247; CHECK-NEXT: ret 3248 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 3249 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 3250 %negvb = call <vscale x 16 x half> @llvm.vp.fneg.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3251 %v = call <vscale x 16 x half> @llvm.vp.fmuladd.nxv16f16(<vscale x 16 x half> %negvb, <vscale x 16 x half> %va, <vscale x 16 x half> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 3252 ret <vscale x 16 x half> %v 3253} 3254 3255declare <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half>, <vscale x 32 x i1>, i32) 3256 3257define <vscale x 32 x half> @vfmsub_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3258; CHECK-LABEL: vfmsub_vv_nxv32f16: 3259; CHECK: # %bb.0: 3260; CHECK-NEXT: vl8re16.v v24, (a0) 3261; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3262; CHECK-NEXT: vfmsub.vv v16, v8, v24, v0.t 3263; CHECK-NEXT: vmv.v.v v8, v16 3264; CHECK-NEXT: ret 3265 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl) 3266 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl) 3267 ret <vscale x 32 x half> %v 3268} 3269 3270define <vscale x 32 x half> @vfmsub_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) { 3271; CHECK-LABEL: vfmsub_vv_nxv32f16_unmasked: 3272; CHECK: # %bb.0: 3273; CHECK-NEXT: vl8re16.v v24, (a0) 3274; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3275; CHECK-NEXT: vfmsub.vv v8, v16, v24 3276; CHECK-NEXT: ret 3277 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3278 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3279 ret <vscale x 32 x half> %v 3280} 3281 3282define <vscale x 32 x half> @vfmsub_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3283; CHECK-LABEL: vfmsub_vf_nxv32f16: 3284; CHECK: # %bb.0: 3285; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3286; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t 3287; CHECK-NEXT: ret 3288 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3289 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3290 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3291 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl) 3292 ret <vscale x 32 x half> %v 3293} 3294 3295define <vscale x 32 x half> @vfmsub_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3296; CHECK-LABEL: vfmsub_vf_nxv32f16_commute: 3297; CHECK: # %bb.0: 3298; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3299; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t 3300; CHECK-NEXT: ret 3301 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3302 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3303 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3304 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl) 3305 ret <vscale x 32 x half> %v 3306} 3307 3308define <vscale x 32 x half> @vfmsub_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3309; CHECK-LABEL: vfmsub_vf_nxv32f16_unmasked: 3310; CHECK: # %bb.0: 3311; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3312; CHECK-NEXT: vfmsub.vf v8, fa0, v16 3313; CHECK-NEXT: ret 3314 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3315 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3316 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3317 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3318 ret <vscale x 32 x half> %v 3319} 3320 3321define <vscale x 32 x half> @vfmsub_vf_nxv32f16_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3322; CHECK-LABEL: vfmsub_vf_nxv32f16_unmasked_commute: 3323; CHECK: # %bb.0: 3324; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3325; CHECK-NEXT: vfmsub.vf v8, fa0, v16 3326; CHECK-NEXT: ret 3327 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3328 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3329 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3330 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3331 ret <vscale x 32 x half> %v 3332} 3333 3334define <vscale x 32 x half> @vfnmadd_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3335; CHECK-LABEL: vfnmadd_vv_nxv32f16: 3336; CHECK: # %bb.0: 3337; CHECK-NEXT: vl8re16.v v24, (a0) 3338; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3339; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t 3340; CHECK-NEXT: vmv.v.v v8, v16 3341; CHECK-NEXT: ret 3342 %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl) 3343 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl) 3344 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl) 3345 ret <vscale x 32 x half> %v 3346} 3347 3348define <vscale x 32 x half> @vfnmadd_vv_nxv32f16_commuted(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3349; CHECK-LABEL: vfnmadd_vv_nxv32f16_commuted: 3350; CHECK: # %bb.0: 3351; CHECK-NEXT: vl8re16.v v24, (a0) 3352; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3353; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t 3354; CHECK-NEXT: ret 3355 %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl) 3356 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl) 3357 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl) 3358 ret <vscale x 32 x half> %v 3359} 3360 3361define <vscale x 32 x half> @vfnmadd_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) { 3362; CHECK-LABEL: vfnmadd_vv_nxv32f16_unmasked: 3363; CHECK: # %bb.0: 3364; CHECK-NEXT: vl8re16.v v24, (a0) 3365; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3366; CHECK-NEXT: vfnmadd.vv v8, v16, v24 3367; CHECK-NEXT: ret 3368 %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3369 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3370 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3371 ret <vscale x 32 x half> %v 3372} 3373 3374define <vscale x 32 x half> @vfnmadd_vv_nxv32f16_unmasked_commuted(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) { 3375; CHECK-LABEL: vfnmadd_vv_nxv32f16_unmasked_commuted: 3376; CHECK: # %bb.0: 3377; CHECK-NEXT: vl8re16.v v24, (a0) 3378; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3379; CHECK-NEXT: vfnmadd.vv v8, v16, v24 3380; CHECK-NEXT: ret 3381 %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3382 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3383 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3384 ret <vscale x 32 x half> %v 3385} 3386 3387define <vscale x 32 x half> @vfnmadd_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3388; CHECK-LABEL: vfnmadd_vf_nxv32f16: 3389; CHECK: # %bb.0: 3390; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3391; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 3392; CHECK-NEXT: ret 3393 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3394 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3395 %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl) 3396 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3397 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl) 3398 ret <vscale x 32 x half> %v 3399} 3400 3401define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3402; CHECK-LABEL: vfnmadd_vf_nxv32f16_commute: 3403; CHECK: # %bb.0: 3404; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3405; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 3406; CHECK-NEXT: ret 3407 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3408 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3409 %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl) 3410 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3411 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl) 3412 ret <vscale x 32 x half> %v 3413} 3414 3415define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3416; CHECK-LABEL: vfnmadd_vf_nxv32f16_unmasked: 3417; CHECK: # %bb.0: 3418; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3419; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 3420; CHECK-NEXT: ret 3421 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3422 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3423 %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3424 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3425 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3426 ret <vscale x 32 x half> %v 3427} 3428 3429define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3430; CHECK-LABEL: vfnmadd_vf_nxv32f16_unmasked_commute: 3431; CHECK: # %bb.0: 3432; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3433; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 3434; CHECK-NEXT: ret 3435 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3436 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3437 %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3438 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3439 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3440 ret <vscale x 32 x half> %v 3441} 3442 3443define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_neg_splat(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3444; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat: 3445; CHECK: # %bb.0: 3446; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3447; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 3448; CHECK-NEXT: ret 3449 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3450 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3451 %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl) 3452 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3453 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl) 3454 ret <vscale x 32 x half> %v 3455} 3456 3457define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_neg_splat_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3458; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_commute: 3459; CHECK: # %bb.0: 3460; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3461; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 3462; CHECK-NEXT: ret 3463 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3464 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3465 %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl) 3466 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3467 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> %m, i32 %evl) 3468 ret <vscale x 32 x half> %v 3469} 3470 3471define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_neg_splat_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3472; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked: 3473; CHECK: # %bb.0: 3474; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3475; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 3476; CHECK-NEXT: ret 3477 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3478 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3479 %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3480 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3481 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3482 ret <vscale x 32 x half> %v 3483} 3484 3485define <vscale x 32 x half> @vfnmadd_vf_nxv32f16_neg_splat_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3486; CHECK-LABEL: vfnmadd_vf_nxv32f16_neg_splat_unmasked_commute: 3487; CHECK: # %bb.0: 3488; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3489; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 3490; CHECK-NEXT: ret 3491 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3492 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3493 %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3494 %negvc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3495 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %negvc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3496 ret <vscale x 32 x half> %v 3497} 3498 3499define <vscale x 32 x half> @vfnmsub_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3500; CHECK-LABEL: vfnmsub_vv_nxv32f16: 3501; CHECK: # %bb.0: 3502; CHECK-NEXT: vl8re16.v v24, (a0) 3503; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3504; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t 3505; CHECK-NEXT: vmv.v.v v8, v16 3506; CHECK-NEXT: ret 3507 %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl) 3508 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl) 3509 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl) 3510 ret <vscale x 32 x half> %v 3511} 3512 3513define <vscale x 32 x half> @vfnmsub_vv_nxv32f16_commuted(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3514; CHECK-LABEL: vfnmsub_vv_nxv32f16_commuted: 3515; CHECK: # %bb.0: 3516; CHECK-NEXT: vl8re16.v v24, (a0) 3517; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3518; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t 3519; CHECK-NEXT: ret 3520 %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl) 3521 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> %m, i32 %evl) 3522 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> %m, i32 %evl) 3523 ret <vscale x 32 x half> %v 3524} 3525 3526define <vscale x 32 x half> @vfnmsub_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) { 3527; CHECK-LABEL: vfnmsub_vv_nxv32f16_unmasked: 3528; CHECK: # %bb.0: 3529; CHECK-NEXT: vl8re16.v v24, (a0) 3530; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3531; CHECK-NEXT: vfnmadd.vv v8, v16, v24 3532; CHECK-NEXT: ret 3533 %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3534 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3535 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negb, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3536 ret <vscale x 32 x half> %v 3537} 3538 3539define <vscale x 32 x half> @vfnmsub_vv_nxv32f16_unmasked_commuted(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x half> %c, i32 zeroext %evl) { 3540; CHECK-LABEL: vfnmsub_vv_nxv32f16_unmasked_commuted: 3541; CHECK: # %bb.0: 3542; CHECK-NEXT: vl8re16.v v24, (a0) 3543; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 3544; CHECK-NEXT: vfnmadd.vv v8, v16, v24 3545; CHECK-NEXT: ret 3546 %negb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3547 %negc = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %c, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3548 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negb, <vscale x 32 x half> %va, <vscale x 32 x half> %negc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3549 ret <vscale x 32 x half> %v 3550} 3551 3552define <vscale x 32 x half> @vfnmsub_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3553; CHECK-LABEL: vfnmsub_vf_nxv32f16: 3554; CHECK: # %bb.0: 3555; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3556; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 3557; CHECK-NEXT: ret 3558 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3559 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3560 %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl) 3561 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3562 ret <vscale x 32 x half> %v 3563} 3564 3565define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3566; CHECK-LABEL: vfnmsub_vf_nxv32f16_commute: 3567; CHECK: # %bb.0: 3568; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3569; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 3570; CHECK-NEXT: ret 3571 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3572 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3573 %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl) 3574 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3575 ret <vscale x 32 x half> %v 3576} 3577 3578define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3579; CHECK-LABEL: vfnmsub_vf_nxv32f16_unmasked: 3580; CHECK: # %bb.0: 3581; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3582; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 3583; CHECK-NEXT: ret 3584 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3585 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3586 %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3587 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negva, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3588 ret <vscale x 32 x half> %v 3589} 3590 3591define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3592; CHECK-LABEL: vfnmsub_vf_nxv32f16_unmasked_commute: 3593; CHECK: # %bb.0: 3594; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3595; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 3596; CHECK-NEXT: ret 3597 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3598 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3599 %negva = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3600 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %negva, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3601 ret <vscale x 32 x half> %v 3602} 3603 3604define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_neg_splat(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3605; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat: 3606; CHECK: # %bb.0: 3607; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3608; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 3609; CHECK-NEXT: ret 3610 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3611 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3612 %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl) 3613 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3614 ret <vscale x 32 x half> %v 3615} 3616 3617define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_neg_splat_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 zeroext %evl) { 3618; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_commute: 3619; CHECK: # %bb.0: 3620; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3621; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 3622; CHECK-NEXT: ret 3623 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3624 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3625 %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl) 3626 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> %m, i32 %evl) 3627 ret <vscale x 32 x half> %v 3628} 3629 3630define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_neg_splat_unmasked(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3631; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked: 3632; CHECK: # %bb.0: 3633; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3634; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 3635; CHECK-NEXT: ret 3636 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3637 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3638 %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3639 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %negvb, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3640 ret <vscale x 32 x half> %v 3641} 3642 3643define <vscale x 32 x half> @vfnmsub_vf_nxv32f16_neg_splat_unmasked_commute(<vscale x 32 x half> %va, half %b, <vscale x 32 x half> %vc, i32 zeroext %evl) { 3644; CHECK-LABEL: vfnmsub_vf_nxv32f16_neg_splat_unmasked_commute: 3645; CHECK: # %bb.0: 3646; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 3647; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 3648; CHECK-NEXT: ret 3649 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 3650 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 3651 %negvb = call <vscale x 32 x half> @llvm.vp.fneg.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3652 %v = call <vscale x 32 x half> @llvm.vp.fmuladd.nxv32f16(<vscale x 32 x half> %negvb, <vscale x 32 x half> %va, <vscale x 32 x half> %vc, <vscale x 32 x i1> splat (i1 true), i32 %evl) 3653 ret <vscale x 32 x half> %v 3654} 3655 3656declare <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float>, <vscale x 1 x i1>, i32) 3657 3658define <vscale x 1 x float> @vfmsub_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3659; CHECK-LABEL: vfmsub_vv_nxv1f32: 3660; CHECK: # %bb.0: 3661; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3662; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t 3663; CHECK-NEXT: vmv1r.v v8, v9 3664; CHECK-NEXT: ret 3665 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl) 3666 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl) 3667 ret <vscale x 1 x float> %v 3668} 3669 3670define <vscale x 1 x float> @vfmsub_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) { 3671; CHECK-LABEL: vfmsub_vv_nxv1f32_unmasked: 3672; CHECK: # %bb.0: 3673; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3674; CHECK-NEXT: vfmsub.vv v8, v9, v10 3675; CHECK-NEXT: ret 3676 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3677 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3678 ret <vscale x 1 x float> %v 3679} 3680 3681define <vscale x 1 x float> @vfmsub_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3682; CHECK-LABEL: vfmsub_vf_nxv1f32: 3683; CHECK: # %bb.0: 3684; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3685; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 3686; CHECK-NEXT: ret 3687 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3688 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3689 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 3690 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl) 3691 ret <vscale x 1 x float> %v 3692} 3693 3694define <vscale x 1 x float> @vfmsub_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3695; CHECK-LABEL: vfmsub_vf_nxv1f32_commute: 3696; CHECK: # %bb.0: 3697; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3698; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 3699; CHECK-NEXT: ret 3700 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3701 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3702 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 3703 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl) 3704 ret <vscale x 1 x float> %v 3705} 3706 3707define <vscale x 1 x float> @vfmsub_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 3708; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked: 3709; CHECK: # %bb.0: 3710; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3711; CHECK-NEXT: vfmsub.vf v8, fa0, v9 3712; CHECK-NEXT: ret 3713 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3714 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3715 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3716 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3717 ret <vscale x 1 x float> %v 3718} 3719 3720define <vscale x 1 x float> @vfmsub_vf_nxv1f32_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 3721; CHECK-LABEL: vfmsub_vf_nxv1f32_unmasked_commute: 3722; CHECK: # %bb.0: 3723; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3724; CHECK-NEXT: vfmsub.vf v8, fa0, v9 3725; CHECK-NEXT: ret 3726 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3727 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3728 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3729 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3730 ret <vscale x 1 x float> %v 3731} 3732 3733define <vscale x 1 x float> @vfnmadd_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3734; CHECK-LABEL: vfnmadd_vv_nxv1f32: 3735; CHECK: # %bb.0: 3736; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3737; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 3738; CHECK-NEXT: vmv1r.v v8, v9 3739; CHECK-NEXT: ret 3740 %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl) 3741 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl) 3742 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl) 3743 ret <vscale x 1 x float> %v 3744} 3745 3746define <vscale x 1 x float> @vfnmadd_vv_nxv1f32_commuted(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3747; CHECK-LABEL: vfnmadd_vv_nxv1f32_commuted: 3748; CHECK: # %bb.0: 3749; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3750; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 3751; CHECK-NEXT: ret 3752 %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl) 3753 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl) 3754 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl) 3755 ret <vscale x 1 x float> %v 3756} 3757 3758define <vscale x 1 x float> @vfnmadd_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) { 3759; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked: 3760; CHECK: # %bb.0: 3761; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3762; CHECK-NEXT: vfnmadd.vv v8, v9, v10 3763; CHECK-NEXT: ret 3764 %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3765 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3766 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3767 ret <vscale x 1 x float> %v 3768} 3769 3770define <vscale x 1 x float> @vfnmadd_vv_nxv1f32_unmasked_commuted(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) { 3771; CHECK-LABEL: vfnmadd_vv_nxv1f32_unmasked_commuted: 3772; CHECK: # %bb.0: 3773; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3774; CHECK-NEXT: vfnmadd.vv v8, v9, v10 3775; CHECK-NEXT: ret 3776 %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3777 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3778 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3779 ret <vscale x 1 x float> %v 3780} 3781 3782define <vscale x 1 x float> @vfnmadd_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3783; CHECK-LABEL: vfnmadd_vf_nxv1f32: 3784; CHECK: # %bb.0: 3785; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3786; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 3787; CHECK-NEXT: ret 3788 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3789 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3790 %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl) 3791 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 3792 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl) 3793 ret <vscale x 1 x float> %v 3794} 3795 3796define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3797; CHECK-LABEL: vfnmadd_vf_nxv1f32_commute: 3798; CHECK: # %bb.0: 3799; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3800; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 3801; CHECK-NEXT: ret 3802 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3803 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3804 %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl) 3805 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 3806 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl) 3807 ret <vscale x 1 x float> %v 3808} 3809 3810define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 3811; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked: 3812; CHECK: # %bb.0: 3813; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3814; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 3815; CHECK-NEXT: ret 3816 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3817 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3818 %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3819 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3820 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3821 ret <vscale x 1 x float> %v 3822} 3823 3824define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 3825; CHECK-LABEL: vfnmadd_vf_nxv1f32_unmasked_commute: 3826; CHECK: # %bb.0: 3827; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3828; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 3829; CHECK-NEXT: ret 3830 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3831 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3832 %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3833 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3834 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3835 ret <vscale x 1 x float> %v 3836} 3837 3838define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_neg_splat(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3839; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat: 3840; CHECK: # %bb.0: 3841; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3842; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 3843; CHECK-NEXT: ret 3844 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3845 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3846 %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl) 3847 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 3848 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl) 3849 ret <vscale x 1 x float> %v 3850} 3851 3852define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_neg_splat_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3853; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_commute: 3854; CHECK: # %bb.0: 3855; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3856; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 3857; CHECK-NEXT: ret 3858 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3859 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3860 %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl) 3861 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 3862 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> %m, i32 %evl) 3863 ret <vscale x 1 x float> %v 3864} 3865 3866define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_neg_splat_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 3867; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked: 3868; CHECK: # %bb.0: 3869; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3870; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 3871; CHECK-NEXT: ret 3872 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3873 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3874 %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3875 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3876 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3877 ret <vscale x 1 x float> %v 3878} 3879 3880define <vscale x 1 x float> @vfnmadd_vf_nxv1f32_neg_splat_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 3881; CHECK-LABEL: vfnmadd_vf_nxv1f32_neg_splat_unmasked_commute: 3882; CHECK: # %bb.0: 3883; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3884; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 3885; CHECK-NEXT: ret 3886 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3887 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3888 %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3889 %negvc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3890 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3891 ret <vscale x 1 x float> %v 3892} 3893 3894define <vscale x 1 x float> @vfnmsub_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3895; CHECK-LABEL: vfnmsub_vv_nxv1f32: 3896; CHECK: # %bb.0: 3897; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3898; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 3899; CHECK-NEXT: vmv1r.v v8, v9 3900; CHECK-NEXT: ret 3901 %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl) 3902 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl) 3903 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl) 3904 ret <vscale x 1 x float> %v 3905} 3906 3907define <vscale x 1 x float> @vfnmsub_vv_nxv1f32_commuted(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3908; CHECK-LABEL: vfnmsub_vv_nxv1f32_commuted: 3909; CHECK: # %bb.0: 3910; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3911; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 3912; CHECK-NEXT: ret 3913 %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl) 3914 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl) 3915 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> %m, i32 %evl) 3916 ret <vscale x 1 x float> %v 3917} 3918 3919define <vscale x 1 x float> @vfnmsub_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) { 3920; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked: 3921; CHECK: # %bb.0: 3922; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3923; CHECK-NEXT: vfnmadd.vv v8, v9, v10 3924; CHECK-NEXT: ret 3925 %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3926 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3927 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negb, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3928 ret <vscale x 1 x float> %v 3929} 3930 3931define <vscale x 1 x float> @vfnmsub_vv_nxv1f32_unmasked_commuted(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x float> %c, i32 zeroext %evl) { 3932; CHECK-LABEL: vfnmsub_vv_nxv1f32_unmasked_commuted: 3933; CHECK: # %bb.0: 3934; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3935; CHECK-NEXT: vfnmadd.vv v8, v9, v10 3936; CHECK-NEXT: ret 3937 %negb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3938 %negc = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3939 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negb, <vscale x 1 x float> %va, <vscale x 1 x float> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3940 ret <vscale x 1 x float> %v 3941} 3942 3943define <vscale x 1 x float> @vfnmsub_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3944; CHECK-LABEL: vfnmsub_vf_nxv1f32: 3945; CHECK: # %bb.0: 3946; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3947; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 3948; CHECK-NEXT: ret 3949 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3950 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3951 %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl) 3952 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 3953 ret <vscale x 1 x float> %v 3954} 3955 3956define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3957; CHECK-LABEL: vfnmsub_vf_nxv1f32_commute: 3958; CHECK: # %bb.0: 3959; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3960; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 3961; CHECK-NEXT: ret 3962 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3963 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3964 %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl) 3965 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 3966 ret <vscale x 1 x float> %v 3967} 3968 3969define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 3970; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked: 3971; CHECK: # %bb.0: 3972; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3973; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 3974; CHECK-NEXT: ret 3975 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3976 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3977 %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3978 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negva, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3979 ret <vscale x 1 x float> %v 3980} 3981 3982define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 3983; CHECK-LABEL: vfnmsub_vf_nxv1f32_unmasked_commute: 3984; CHECK: # %bb.0: 3985; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3986; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 3987; CHECK-NEXT: ret 3988 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 3989 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 3990 %negva = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3991 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %negva, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 3992 ret <vscale x 1 x float> %v 3993} 3994 3995define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_neg_splat(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 3996; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat: 3997; CHECK: # %bb.0: 3998; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 3999; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 4000; CHECK-NEXT: ret 4001 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4002 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4003 %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl) 4004 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 4005 ret <vscale x 1 x float> %v 4006} 4007 4008define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_neg_splat_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 4009; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_commute: 4010; CHECK: # %bb.0: 4011; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 4012; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 4013; CHECK-NEXT: ret 4014 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4015 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4016 %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl) 4017 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> %m, i32 %evl) 4018 ret <vscale x 1 x float> %v 4019} 4020 4021define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_neg_splat_unmasked(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 4022; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked: 4023; CHECK: # %bb.0: 4024; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 4025; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 4026; CHECK-NEXT: ret 4027 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4028 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4029 %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 4030 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %negvb, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 4031 ret <vscale x 1 x float> %v 4032} 4033 4034define <vscale x 1 x float> @vfnmsub_vf_nxv1f32_neg_splat_unmasked_commute(<vscale x 1 x float> %va, float %b, <vscale x 1 x float> %vc, i32 zeroext %evl) { 4035; CHECK-LABEL: vfnmsub_vf_nxv1f32_neg_splat_unmasked_commute: 4036; CHECK: # %bb.0: 4037; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 4038; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 4039; CHECK-NEXT: ret 4040 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 4041 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 4042 %negvb = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 4043 %v = call <vscale x 1 x float> @llvm.vp.fmuladd.nxv1f32(<vscale x 1 x float> %negvb, <vscale x 1 x float> %va, <vscale x 1 x float> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 4044 ret <vscale x 1 x float> %v 4045} 4046 4047declare <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32) 4048 4049define <vscale x 2 x float> @vfmsub_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4050; CHECK-LABEL: vfmsub_vv_nxv2f32: 4051; CHECK: # %bb.0: 4052; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4053; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t 4054; CHECK-NEXT: vmv.v.v v8, v9 4055; CHECK-NEXT: ret 4056 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl) 4057 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl) 4058 ret <vscale x 2 x float> %v 4059} 4060 4061define <vscale x 2 x float> @vfmsub_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) { 4062; CHECK-LABEL: vfmsub_vv_nxv2f32_unmasked: 4063; CHECK: # %bb.0: 4064; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4065; CHECK-NEXT: vfmsub.vv v8, v9, v10 4066; CHECK-NEXT: ret 4067 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4068 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4069 ret <vscale x 2 x float> %v 4070} 4071 4072define <vscale x 2 x float> @vfmsub_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4073; CHECK-LABEL: vfmsub_vf_nxv2f32: 4074; CHECK: # %bb.0: 4075; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4076; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 4077; CHECK-NEXT: ret 4078 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4079 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4080 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4081 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl) 4082 ret <vscale x 2 x float> %v 4083} 4084 4085define <vscale x 2 x float> @vfmsub_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4086; CHECK-LABEL: vfmsub_vf_nxv2f32_commute: 4087; CHECK: # %bb.0: 4088; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4089; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 4090; CHECK-NEXT: ret 4091 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4092 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4093 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4094 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl) 4095 ret <vscale x 2 x float> %v 4096} 4097 4098define <vscale x 2 x float> @vfmsub_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4099; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked: 4100; CHECK: # %bb.0: 4101; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4102; CHECK-NEXT: vfmsub.vf v8, fa0, v9 4103; CHECK-NEXT: ret 4104 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4105 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4106 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4107 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4108 ret <vscale x 2 x float> %v 4109} 4110 4111define <vscale x 2 x float> @vfmsub_vf_nxv2f32_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4112; CHECK-LABEL: vfmsub_vf_nxv2f32_unmasked_commute: 4113; CHECK: # %bb.0: 4114; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4115; CHECK-NEXT: vfmsub.vf v8, fa0, v9 4116; CHECK-NEXT: ret 4117 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4118 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4119 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4120 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4121 ret <vscale x 2 x float> %v 4122} 4123 4124define <vscale x 2 x float> @vfnmadd_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4125; CHECK-LABEL: vfnmadd_vv_nxv2f32: 4126; CHECK: # %bb.0: 4127; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4128; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 4129; CHECK-NEXT: vmv.v.v v8, v9 4130; CHECK-NEXT: ret 4131 %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl) 4132 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl) 4133 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl) 4134 ret <vscale x 2 x float> %v 4135} 4136 4137define <vscale x 2 x float> @vfnmadd_vv_nxv2f32_commuted(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4138; CHECK-LABEL: vfnmadd_vv_nxv2f32_commuted: 4139; CHECK: # %bb.0: 4140; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4141; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 4142; CHECK-NEXT: ret 4143 %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl) 4144 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl) 4145 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl) 4146 ret <vscale x 2 x float> %v 4147} 4148 4149define <vscale x 2 x float> @vfnmadd_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) { 4150; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked: 4151; CHECK: # %bb.0: 4152; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4153; CHECK-NEXT: vfnmadd.vv v8, v9, v10 4154; CHECK-NEXT: ret 4155 %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4156 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4157 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4158 ret <vscale x 2 x float> %v 4159} 4160 4161define <vscale x 2 x float> @vfnmadd_vv_nxv2f32_unmasked_commuted(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) { 4162; CHECK-LABEL: vfnmadd_vv_nxv2f32_unmasked_commuted: 4163; CHECK: # %bb.0: 4164; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4165; CHECK-NEXT: vfnmadd.vv v8, v9, v10 4166; CHECK-NEXT: ret 4167 %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4168 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4169 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4170 ret <vscale x 2 x float> %v 4171} 4172 4173define <vscale x 2 x float> @vfnmadd_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4174; CHECK-LABEL: vfnmadd_vf_nxv2f32: 4175; CHECK: # %bb.0: 4176; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4177; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 4178; CHECK-NEXT: ret 4179 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4180 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4181 %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 4182 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4183 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl) 4184 ret <vscale x 2 x float> %v 4185} 4186 4187define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4188; CHECK-LABEL: vfnmadd_vf_nxv2f32_commute: 4189; CHECK: # %bb.0: 4190; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4191; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 4192; CHECK-NEXT: ret 4193 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4194 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4195 %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 4196 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4197 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl) 4198 ret <vscale x 2 x float> %v 4199} 4200 4201define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4202; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked: 4203; CHECK: # %bb.0: 4204; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4205; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 4206; CHECK-NEXT: ret 4207 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4208 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4209 %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4210 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4211 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4212 ret <vscale x 2 x float> %v 4213} 4214 4215define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4216; CHECK-LABEL: vfnmadd_vf_nxv2f32_unmasked_commute: 4217; CHECK: # %bb.0: 4218; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4219; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 4220; CHECK-NEXT: ret 4221 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4222 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4223 %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4224 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4225 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4226 ret <vscale x 2 x float> %v 4227} 4228 4229define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_neg_splat(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4230; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat: 4231; CHECK: # %bb.0: 4232; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4233; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 4234; CHECK-NEXT: ret 4235 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4236 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4237 %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl) 4238 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4239 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl) 4240 ret <vscale x 2 x float> %v 4241} 4242 4243define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_neg_splat_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4244; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_commute: 4245; CHECK: # %bb.0: 4246; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4247; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 4248; CHECK-NEXT: ret 4249 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4250 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4251 %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl) 4252 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4253 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> %m, i32 %evl) 4254 ret <vscale x 2 x float> %v 4255} 4256 4257define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_neg_splat_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4258; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked: 4259; CHECK: # %bb.0: 4260; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4261; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 4262; CHECK-NEXT: ret 4263 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4264 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4265 %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4266 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4267 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4268 ret <vscale x 2 x float> %v 4269} 4270 4271define <vscale x 2 x float> @vfnmadd_vf_nxv2f32_neg_splat_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4272; CHECK-LABEL: vfnmadd_vf_nxv2f32_neg_splat_unmasked_commute: 4273; CHECK: # %bb.0: 4274; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4275; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 4276; CHECK-NEXT: ret 4277 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4278 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4279 %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4280 %negvc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4281 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4282 ret <vscale x 2 x float> %v 4283} 4284 4285define <vscale x 2 x float> @vfnmsub_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4286; CHECK-LABEL: vfnmsub_vv_nxv2f32: 4287; CHECK: # %bb.0: 4288; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4289; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 4290; CHECK-NEXT: vmv.v.v v8, v9 4291; CHECK-NEXT: ret 4292 %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl) 4293 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl) 4294 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl) 4295 ret <vscale x 2 x float> %v 4296} 4297 4298define <vscale x 2 x float> @vfnmsub_vv_nxv2f32_commuted(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4299; CHECK-LABEL: vfnmsub_vv_nxv2f32_commuted: 4300; CHECK: # %bb.0: 4301; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4302; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 4303; CHECK-NEXT: ret 4304 %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl) 4305 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl) 4306 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> %m, i32 %evl) 4307 ret <vscale x 2 x float> %v 4308} 4309 4310define <vscale x 2 x float> @vfnmsub_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) { 4311; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked: 4312; CHECK: # %bb.0: 4313; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4314; CHECK-NEXT: vfnmadd.vv v8, v9, v10 4315; CHECK-NEXT: ret 4316 %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4317 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4318 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negb, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4319 ret <vscale x 2 x float> %v 4320} 4321 4322define <vscale x 2 x float> @vfnmsub_vv_nxv2f32_unmasked_commuted(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x float> %c, i32 zeroext %evl) { 4323; CHECK-LABEL: vfnmsub_vv_nxv2f32_unmasked_commuted: 4324; CHECK: # %bb.0: 4325; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4326; CHECK-NEXT: vfnmadd.vv v8, v9, v10 4327; CHECK-NEXT: ret 4328 %negb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4329 %negc = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4330 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negb, <vscale x 2 x float> %va, <vscale x 2 x float> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4331 ret <vscale x 2 x float> %v 4332} 4333 4334define <vscale x 2 x float> @vfnmsub_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4335; CHECK-LABEL: vfnmsub_vf_nxv2f32: 4336; CHECK: # %bb.0: 4337; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4338; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 4339; CHECK-NEXT: ret 4340 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4341 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4342 %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 4343 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4344 ret <vscale x 2 x float> %v 4345} 4346 4347define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4348; CHECK-LABEL: vfnmsub_vf_nxv2f32_commute: 4349; CHECK: # %bb.0: 4350; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4351; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 4352; CHECK-NEXT: ret 4353 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4354 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4355 %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 4356 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4357 ret <vscale x 2 x float> %v 4358} 4359 4360define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4361; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked: 4362; CHECK: # %bb.0: 4363; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4364; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 4365; CHECK-NEXT: ret 4366 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4367 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4368 %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4369 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negva, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4370 ret <vscale x 2 x float> %v 4371} 4372 4373define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4374; CHECK-LABEL: vfnmsub_vf_nxv2f32_unmasked_commute: 4375; CHECK: # %bb.0: 4376; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4377; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 4378; CHECK-NEXT: ret 4379 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4380 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4381 %negva = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4382 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %negva, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4383 ret <vscale x 2 x float> %v 4384} 4385 4386define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_neg_splat(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4387; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat: 4388; CHECK: # %bb.0: 4389; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4390; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 4391; CHECK-NEXT: ret 4392 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4393 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4394 %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl) 4395 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4396 ret <vscale x 2 x float> %v 4397} 4398 4399define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_neg_splat_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 4400; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_commute: 4401; CHECK: # %bb.0: 4402; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4403; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 4404; CHECK-NEXT: ret 4405 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4406 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4407 %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl) 4408 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> %m, i32 %evl) 4409 ret <vscale x 2 x float> %v 4410} 4411 4412define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_neg_splat_unmasked(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4413; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked: 4414; CHECK: # %bb.0: 4415; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4416; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 4417; CHECK-NEXT: ret 4418 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4419 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4420 %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4421 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %negvb, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4422 ret <vscale x 2 x float> %v 4423} 4424 4425define <vscale x 2 x float> @vfnmsub_vf_nxv2f32_neg_splat_unmasked_commute(<vscale x 2 x float> %va, float %b, <vscale x 2 x float> %vc, i32 zeroext %evl) { 4426; CHECK-LABEL: vfnmsub_vf_nxv2f32_neg_splat_unmasked_commute: 4427; CHECK: # %bb.0: 4428; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 4429; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 4430; CHECK-NEXT: ret 4431 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 4432 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 4433 %negvb = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4434 %v = call <vscale x 2 x float> @llvm.vp.fmuladd.nxv2f32(<vscale x 2 x float> %negvb, <vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 4435 ret <vscale x 2 x float> %v 4436} 4437 4438declare <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, i32) 4439 4440define <vscale x 4 x float> @vfmsub_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4441; CHECK-LABEL: vfmsub_vv_nxv4f32: 4442; CHECK: # %bb.0: 4443; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4444; CHECK-NEXT: vfmsub.vv v10, v8, v12, v0.t 4445; CHECK-NEXT: vmv.v.v v8, v10 4446; CHECK-NEXT: ret 4447 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl) 4448 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl) 4449 ret <vscale x 4 x float> %v 4450} 4451 4452define <vscale x 4 x float> @vfmsub_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) { 4453; CHECK-LABEL: vfmsub_vv_nxv4f32_unmasked: 4454; CHECK: # %bb.0: 4455; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4456; CHECK-NEXT: vfmsub.vv v8, v10, v12 4457; CHECK-NEXT: ret 4458 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4459 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4460 ret <vscale x 4 x float> %v 4461} 4462 4463define <vscale x 4 x float> @vfmsub_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4464; CHECK-LABEL: vfmsub_vf_nxv4f32: 4465; CHECK: # %bb.0: 4466; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4467; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t 4468; CHECK-NEXT: ret 4469 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4470 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4471 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4472 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl) 4473 ret <vscale x 4 x float> %v 4474} 4475 4476define <vscale x 4 x float> @vfmsub_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4477; CHECK-LABEL: vfmsub_vf_nxv4f32_commute: 4478; CHECK: # %bb.0: 4479; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4480; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t 4481; CHECK-NEXT: ret 4482 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4483 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4484 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4485 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl) 4486 ret <vscale x 4 x float> %v 4487} 4488 4489define <vscale x 4 x float> @vfmsub_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4490; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked: 4491; CHECK: # %bb.0: 4492; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4493; CHECK-NEXT: vfmsub.vf v8, fa0, v10 4494; CHECK-NEXT: ret 4495 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4496 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4497 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4498 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4499 ret <vscale x 4 x float> %v 4500} 4501 4502define <vscale x 4 x float> @vfmsub_vf_nxv4f32_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4503; CHECK-LABEL: vfmsub_vf_nxv4f32_unmasked_commute: 4504; CHECK: # %bb.0: 4505; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4506; CHECK-NEXT: vfmsub.vf v8, fa0, v10 4507; CHECK-NEXT: ret 4508 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4509 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4510 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4511 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4512 ret <vscale x 4 x float> %v 4513} 4514 4515define <vscale x 4 x float> @vfnmadd_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4516; CHECK-LABEL: vfnmadd_vv_nxv4f32: 4517; CHECK: # %bb.0: 4518; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4519; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t 4520; CHECK-NEXT: vmv.v.v v8, v10 4521; CHECK-NEXT: ret 4522 %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl) 4523 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl) 4524 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl) 4525 ret <vscale x 4 x float> %v 4526} 4527 4528define <vscale x 4 x float> @vfnmadd_vv_nxv4f32_commuted(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4529; CHECK-LABEL: vfnmadd_vv_nxv4f32_commuted: 4530; CHECK: # %bb.0: 4531; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4532; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t 4533; CHECK-NEXT: ret 4534 %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl) 4535 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl) 4536 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl) 4537 ret <vscale x 4 x float> %v 4538} 4539 4540define <vscale x 4 x float> @vfnmadd_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) { 4541; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked: 4542; CHECK: # %bb.0: 4543; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4544; CHECK-NEXT: vfnmadd.vv v8, v10, v12 4545; CHECK-NEXT: ret 4546 %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4547 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4548 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4549 ret <vscale x 4 x float> %v 4550} 4551 4552define <vscale x 4 x float> @vfnmadd_vv_nxv4f32_unmasked_commuted(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) { 4553; CHECK-LABEL: vfnmadd_vv_nxv4f32_unmasked_commuted: 4554; CHECK: # %bb.0: 4555; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4556; CHECK-NEXT: vfnmadd.vv v8, v10, v12 4557; CHECK-NEXT: ret 4558 %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4559 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4560 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4561 ret <vscale x 4 x float> %v 4562} 4563 4564define <vscale x 4 x float> @vfnmadd_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4565; CHECK-LABEL: vfnmadd_vf_nxv4f32: 4566; CHECK: # %bb.0: 4567; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4568; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 4569; CHECK-NEXT: ret 4570 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4571 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4572 %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl) 4573 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4574 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl) 4575 ret <vscale x 4 x float> %v 4576} 4577 4578define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4579; CHECK-LABEL: vfnmadd_vf_nxv4f32_commute: 4580; CHECK: # %bb.0: 4581; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4582; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 4583; CHECK-NEXT: ret 4584 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4585 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4586 %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl) 4587 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4588 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl) 4589 ret <vscale x 4 x float> %v 4590} 4591 4592define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4593; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked: 4594; CHECK: # %bb.0: 4595; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4596; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 4597; CHECK-NEXT: ret 4598 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4599 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4600 %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4601 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4602 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4603 ret <vscale x 4 x float> %v 4604} 4605 4606define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4607; CHECK-LABEL: vfnmadd_vf_nxv4f32_unmasked_commute: 4608; CHECK: # %bb.0: 4609; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4610; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 4611; CHECK-NEXT: ret 4612 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4613 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4614 %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4615 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4616 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4617 ret <vscale x 4 x float> %v 4618} 4619 4620define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_neg_splat(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4621; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat: 4622; CHECK: # %bb.0: 4623; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4624; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 4625; CHECK-NEXT: ret 4626 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4627 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4628 %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl) 4629 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4630 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl) 4631 ret <vscale x 4 x float> %v 4632} 4633 4634define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_neg_splat_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4635; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_commute: 4636; CHECK: # %bb.0: 4637; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4638; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 4639; CHECK-NEXT: ret 4640 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4641 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4642 %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl) 4643 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4644 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> %m, i32 %evl) 4645 ret <vscale x 4 x float> %v 4646} 4647 4648define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_neg_splat_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4649; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked: 4650; CHECK: # %bb.0: 4651; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4652; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 4653; CHECK-NEXT: ret 4654 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4655 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4656 %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4657 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4658 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4659 ret <vscale x 4 x float> %v 4660} 4661 4662define <vscale x 4 x float> @vfnmadd_vf_nxv4f32_neg_splat_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4663; CHECK-LABEL: vfnmadd_vf_nxv4f32_neg_splat_unmasked_commute: 4664; CHECK: # %bb.0: 4665; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4666; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 4667; CHECK-NEXT: ret 4668 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4669 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4670 %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4671 %negvc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4672 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4673 ret <vscale x 4 x float> %v 4674} 4675 4676define <vscale x 4 x float> @vfnmsub_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4677; CHECK-LABEL: vfnmsub_vv_nxv4f32: 4678; CHECK: # %bb.0: 4679; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4680; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t 4681; CHECK-NEXT: vmv.v.v v8, v10 4682; CHECK-NEXT: ret 4683 %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl) 4684 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl) 4685 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl) 4686 ret <vscale x 4 x float> %v 4687} 4688 4689define <vscale x 4 x float> @vfnmsub_vv_nxv4f32_commuted(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4690; CHECK-LABEL: vfnmsub_vv_nxv4f32_commuted: 4691; CHECK: # %bb.0: 4692; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4693; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t 4694; CHECK-NEXT: ret 4695 %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl) 4696 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl) 4697 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> %m, i32 %evl) 4698 ret <vscale x 4 x float> %v 4699} 4700 4701define <vscale x 4 x float> @vfnmsub_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) { 4702; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked: 4703; CHECK: # %bb.0: 4704; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4705; CHECK-NEXT: vfnmadd.vv v8, v10, v12 4706; CHECK-NEXT: ret 4707 %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4708 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4709 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negb, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4710 ret <vscale x 4 x float> %v 4711} 4712 4713define <vscale x 4 x float> @vfnmsub_vv_nxv4f32_unmasked_commuted(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x float> %c, i32 zeroext %evl) { 4714; CHECK-LABEL: vfnmsub_vv_nxv4f32_unmasked_commuted: 4715; CHECK: # %bb.0: 4716; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4717; CHECK-NEXT: vfnmadd.vv v8, v10, v12 4718; CHECK-NEXT: ret 4719 %negb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4720 %negc = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4721 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negb, <vscale x 4 x float> %va, <vscale x 4 x float> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4722 ret <vscale x 4 x float> %v 4723} 4724 4725define <vscale x 4 x float> @vfnmsub_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4726; CHECK-LABEL: vfnmsub_vf_nxv4f32: 4727; CHECK: # %bb.0: 4728; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4729; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 4730; CHECK-NEXT: ret 4731 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4732 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4733 %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl) 4734 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4735 ret <vscale x 4 x float> %v 4736} 4737 4738define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4739; CHECK-LABEL: vfnmsub_vf_nxv4f32_commute: 4740; CHECK: # %bb.0: 4741; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4742; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 4743; CHECK-NEXT: ret 4744 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4745 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4746 %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl) 4747 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4748 ret <vscale x 4 x float> %v 4749} 4750 4751define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4752; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked: 4753; CHECK: # %bb.0: 4754; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4755; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 4756; CHECK-NEXT: ret 4757 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4758 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4759 %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4760 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negva, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4761 ret <vscale x 4 x float> %v 4762} 4763 4764define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4765; CHECK-LABEL: vfnmsub_vf_nxv4f32_unmasked_commute: 4766; CHECK: # %bb.0: 4767; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4768; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 4769; CHECK-NEXT: ret 4770 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4771 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4772 %negva = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4773 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %negva, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4774 ret <vscale x 4 x float> %v 4775} 4776 4777define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_neg_splat(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4778; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat: 4779; CHECK: # %bb.0: 4780; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4781; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 4782; CHECK-NEXT: ret 4783 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4784 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4785 %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl) 4786 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4787 ret <vscale x 4 x float> %v 4788} 4789 4790define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_neg_splat_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 4791; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_commute: 4792; CHECK: # %bb.0: 4793; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4794; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 4795; CHECK-NEXT: ret 4796 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4797 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4798 %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl) 4799 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> %m, i32 %evl) 4800 ret <vscale x 4 x float> %v 4801} 4802 4803define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_neg_splat_unmasked(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4804; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked: 4805; CHECK: # %bb.0: 4806; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4807; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 4808; CHECK-NEXT: ret 4809 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4810 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4811 %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4812 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %negvb, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4813 ret <vscale x 4 x float> %v 4814} 4815 4816define <vscale x 4 x float> @vfnmsub_vf_nxv4f32_neg_splat_unmasked_commute(<vscale x 4 x float> %va, float %b, <vscale x 4 x float> %vc, i32 zeroext %evl) { 4817; CHECK-LABEL: vfnmsub_vf_nxv4f32_neg_splat_unmasked_commute: 4818; CHECK: # %bb.0: 4819; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 4820; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 4821; CHECK-NEXT: ret 4822 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 4823 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 4824 %negvb = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4825 %v = call <vscale x 4 x float> @llvm.vp.fmuladd.nxv4f32(<vscale x 4 x float> %negvb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 4826 ret <vscale x 4 x float> %v 4827} 4828 4829declare <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float>, <vscale x 8 x i1>, i32) 4830 4831define <vscale x 8 x float> @vfmsub_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4832; CHECK-LABEL: vfmsub_vv_nxv8f32: 4833; CHECK: # %bb.0: 4834; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4835; CHECK-NEXT: vfmsub.vv v12, v8, v16, v0.t 4836; CHECK-NEXT: vmv.v.v v8, v12 4837; CHECK-NEXT: ret 4838 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl) 4839 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl) 4840 ret <vscale x 8 x float> %v 4841} 4842 4843define <vscale x 8 x float> @vfmsub_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) { 4844; CHECK-LABEL: vfmsub_vv_nxv8f32_unmasked: 4845; CHECK: # %bb.0: 4846; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4847; CHECK-NEXT: vfmsub.vv v8, v12, v16 4848; CHECK-NEXT: ret 4849 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4850 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4851 ret <vscale x 8 x float> %v 4852} 4853 4854define <vscale x 8 x float> @vfmsub_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4855; CHECK-LABEL: vfmsub_vf_nxv8f32: 4856; CHECK: # %bb.0: 4857; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4858; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t 4859; CHECK-NEXT: ret 4860 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 4861 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 4862 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 4863 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl) 4864 ret <vscale x 8 x float> %v 4865} 4866 4867define <vscale x 8 x float> @vfmsub_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4868; CHECK-LABEL: vfmsub_vf_nxv8f32_commute: 4869; CHECK: # %bb.0: 4870; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4871; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t 4872; CHECK-NEXT: ret 4873 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 4874 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 4875 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 4876 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl) 4877 ret <vscale x 8 x float> %v 4878} 4879 4880define <vscale x 8 x float> @vfmsub_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 4881; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked: 4882; CHECK: # %bb.0: 4883; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4884; CHECK-NEXT: vfmsub.vf v8, fa0, v12 4885; CHECK-NEXT: ret 4886 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 4887 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 4888 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4889 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4890 ret <vscale x 8 x float> %v 4891} 4892 4893define <vscale x 8 x float> @vfmsub_vf_nxv8f32_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 4894; CHECK-LABEL: vfmsub_vf_nxv8f32_unmasked_commute: 4895; CHECK: # %bb.0: 4896; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4897; CHECK-NEXT: vfmsub.vf v8, fa0, v12 4898; CHECK-NEXT: ret 4899 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 4900 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 4901 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4902 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4903 ret <vscale x 8 x float> %v 4904} 4905 4906define <vscale x 8 x float> @vfnmadd_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4907; CHECK-LABEL: vfnmadd_vv_nxv8f32: 4908; CHECK: # %bb.0: 4909; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4910; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t 4911; CHECK-NEXT: vmv.v.v v8, v12 4912; CHECK-NEXT: ret 4913 %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl) 4914 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl) 4915 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl) 4916 ret <vscale x 8 x float> %v 4917} 4918 4919define <vscale x 8 x float> @vfnmadd_vv_nxv8f32_commuted(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4920; CHECK-LABEL: vfnmadd_vv_nxv8f32_commuted: 4921; CHECK: # %bb.0: 4922; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4923; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t 4924; CHECK-NEXT: ret 4925 %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl) 4926 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl) 4927 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl) 4928 ret <vscale x 8 x float> %v 4929} 4930 4931define <vscale x 8 x float> @vfnmadd_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) { 4932; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked: 4933; CHECK: # %bb.0: 4934; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4935; CHECK-NEXT: vfnmadd.vv v8, v12, v16 4936; CHECK-NEXT: ret 4937 %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4938 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4939 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4940 ret <vscale x 8 x float> %v 4941} 4942 4943define <vscale x 8 x float> @vfnmadd_vv_nxv8f32_unmasked_commuted(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) { 4944; CHECK-LABEL: vfnmadd_vv_nxv8f32_unmasked_commuted: 4945; CHECK: # %bb.0: 4946; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4947; CHECK-NEXT: vfnmadd.vv v8, v12, v16 4948; CHECK-NEXT: ret 4949 %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4950 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4951 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4952 ret <vscale x 8 x float> %v 4953} 4954 4955define <vscale x 8 x float> @vfnmadd_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4956; CHECK-LABEL: vfnmadd_vf_nxv8f32: 4957; CHECK: # %bb.0: 4958; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4959; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 4960; CHECK-NEXT: ret 4961 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 4962 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 4963 %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl) 4964 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 4965 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl) 4966 ret <vscale x 8 x float> %v 4967} 4968 4969define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 4970; CHECK-LABEL: vfnmadd_vf_nxv8f32_commute: 4971; CHECK: # %bb.0: 4972; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4973; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 4974; CHECK-NEXT: ret 4975 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 4976 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 4977 %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl) 4978 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 4979 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl) 4980 ret <vscale x 8 x float> %v 4981} 4982 4983define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 4984; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked: 4985; CHECK: # %bb.0: 4986; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 4987; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 4988; CHECK-NEXT: ret 4989 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 4990 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 4991 %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4992 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4993 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 4994 ret <vscale x 8 x float> %v 4995} 4996 4997define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 4998; CHECK-LABEL: vfnmadd_vf_nxv8f32_unmasked_commute: 4999; CHECK: # %bb.0: 5000; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5001; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 5002; CHECK-NEXT: ret 5003 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5004 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5005 %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5006 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5007 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5008 ret <vscale x 8 x float> %v 5009} 5010 5011define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_neg_splat(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5012; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat: 5013; CHECK: # %bb.0: 5014; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5015; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 5016; CHECK-NEXT: ret 5017 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5018 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5019 %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl) 5020 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 5021 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl) 5022 ret <vscale x 8 x float> %v 5023} 5024 5025define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_neg_splat_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5026; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_commute: 5027; CHECK: # %bb.0: 5028; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5029; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 5030; CHECK-NEXT: ret 5031 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5032 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5033 %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl) 5034 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 5035 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> %m, i32 %evl) 5036 ret <vscale x 8 x float> %v 5037} 5038 5039define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_neg_splat_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 5040; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked: 5041; CHECK: # %bb.0: 5042; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5043; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 5044; CHECK-NEXT: ret 5045 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5046 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5047 %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5048 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5049 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5050 ret <vscale x 8 x float> %v 5051} 5052 5053define <vscale x 8 x float> @vfnmadd_vf_nxv8f32_neg_splat_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 5054; CHECK-LABEL: vfnmadd_vf_nxv8f32_neg_splat_unmasked_commute: 5055; CHECK: # %bb.0: 5056; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5057; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 5058; CHECK-NEXT: ret 5059 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5060 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5061 %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5062 %negvc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5063 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5064 ret <vscale x 8 x float> %v 5065} 5066 5067define <vscale x 8 x float> @vfnmsub_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5068; CHECK-LABEL: vfnmsub_vv_nxv8f32: 5069; CHECK: # %bb.0: 5070; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5071; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t 5072; CHECK-NEXT: vmv.v.v v8, v12 5073; CHECK-NEXT: ret 5074 %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl) 5075 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl) 5076 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl) 5077 ret <vscale x 8 x float> %v 5078} 5079 5080define <vscale x 8 x float> @vfnmsub_vv_nxv8f32_commuted(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5081; CHECK-LABEL: vfnmsub_vv_nxv8f32_commuted: 5082; CHECK: # %bb.0: 5083; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5084; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t 5085; CHECK-NEXT: ret 5086 %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl) 5087 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl) 5088 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> %m, i32 %evl) 5089 ret <vscale x 8 x float> %v 5090} 5091 5092define <vscale x 8 x float> @vfnmsub_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) { 5093; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked: 5094; CHECK: # %bb.0: 5095; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5096; CHECK-NEXT: vfnmadd.vv v8, v12, v16 5097; CHECK-NEXT: ret 5098 %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5099 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5100 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negb, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5101 ret <vscale x 8 x float> %v 5102} 5103 5104define <vscale x 8 x float> @vfnmsub_vv_nxv8f32_unmasked_commuted(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x float> %c, i32 zeroext %evl) { 5105; CHECK-LABEL: vfnmsub_vv_nxv8f32_unmasked_commuted: 5106; CHECK: # %bb.0: 5107; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5108; CHECK-NEXT: vfnmadd.vv v8, v12, v16 5109; CHECK-NEXT: ret 5110 %negb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5111 %negc = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5112 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negb, <vscale x 8 x float> %va, <vscale x 8 x float> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5113 ret <vscale x 8 x float> %v 5114} 5115 5116define <vscale x 8 x float> @vfnmsub_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5117; CHECK-LABEL: vfnmsub_vf_nxv8f32: 5118; CHECK: # %bb.0: 5119; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5120; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 5121; CHECK-NEXT: ret 5122 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5123 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5124 %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl) 5125 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 5126 ret <vscale x 8 x float> %v 5127} 5128 5129define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5130; CHECK-LABEL: vfnmsub_vf_nxv8f32_commute: 5131; CHECK: # %bb.0: 5132; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5133; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 5134; CHECK-NEXT: ret 5135 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5136 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5137 %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl) 5138 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 5139 ret <vscale x 8 x float> %v 5140} 5141 5142define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 5143; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked: 5144; CHECK: # %bb.0: 5145; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5146; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 5147; CHECK-NEXT: ret 5148 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5149 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5150 %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5151 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negva, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5152 ret <vscale x 8 x float> %v 5153} 5154 5155define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 5156; CHECK-LABEL: vfnmsub_vf_nxv8f32_unmasked_commute: 5157; CHECK: # %bb.0: 5158; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5159; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 5160; CHECK-NEXT: ret 5161 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5162 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5163 %negva = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5164 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %negva, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5165 ret <vscale x 8 x float> %v 5166} 5167 5168define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_neg_splat(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5169; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat: 5170; CHECK: # %bb.0: 5171; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5172; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 5173; CHECK-NEXT: ret 5174 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5175 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5176 %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl) 5177 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 5178 ret <vscale x 8 x float> %v 5179} 5180 5181define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_neg_splat_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 5182; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_commute: 5183; CHECK: # %bb.0: 5184; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5185; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 5186; CHECK-NEXT: ret 5187 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5188 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5189 %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl) 5190 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> %m, i32 %evl) 5191 ret <vscale x 8 x float> %v 5192} 5193 5194define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_neg_splat_unmasked(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 5195; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked: 5196; CHECK: # %bb.0: 5197; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5198; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 5199; CHECK-NEXT: ret 5200 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5201 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5202 %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5203 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %negvb, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5204 ret <vscale x 8 x float> %v 5205} 5206 5207define <vscale x 8 x float> @vfnmsub_vf_nxv8f32_neg_splat_unmasked_commute(<vscale x 8 x float> %va, float %b, <vscale x 8 x float> %vc, i32 zeroext %evl) { 5208; CHECK-LABEL: vfnmsub_vf_nxv8f32_neg_splat_unmasked_commute: 5209; CHECK: # %bb.0: 5210; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 5211; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 5212; CHECK-NEXT: ret 5213 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 5214 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 5215 %negvb = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5216 %v = call <vscale x 8 x float> @llvm.vp.fmuladd.nxv8f32(<vscale x 8 x float> %negvb, <vscale x 8 x float> %va, <vscale x 8 x float> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 5217 ret <vscale x 8 x float> %v 5218} 5219 5220declare <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float>, <vscale x 16 x i1>, i32) 5221 5222define <vscale x 16 x float> @vfmsub_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5223; CHECK-LABEL: vfmsub_vv_nxv16f32: 5224; CHECK: # %bb.0: 5225; CHECK-NEXT: vl8re32.v v24, (a0) 5226; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5227; CHECK-NEXT: vfmsub.vv v16, v8, v24, v0.t 5228; CHECK-NEXT: vmv.v.v v8, v16 5229; CHECK-NEXT: ret 5230 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl) 5231 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl) 5232 ret <vscale x 16 x float> %v 5233} 5234 5235define <vscale x 16 x float> @vfmsub_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) { 5236; CHECK-LABEL: vfmsub_vv_nxv16f32_unmasked: 5237; CHECK: # %bb.0: 5238; CHECK-NEXT: vl8re32.v v24, (a0) 5239; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5240; CHECK-NEXT: vfmsub.vv v8, v16, v24 5241; CHECK-NEXT: ret 5242 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5243 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5244 ret <vscale x 16 x float> %v 5245} 5246 5247define <vscale x 16 x float> @vfmsub_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5248; CHECK-LABEL: vfmsub_vf_nxv16f32: 5249; CHECK: # %bb.0: 5250; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5251; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t 5252; CHECK-NEXT: ret 5253 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5254 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5255 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5256 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl) 5257 ret <vscale x 16 x float> %v 5258} 5259 5260define <vscale x 16 x float> @vfmsub_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5261; CHECK-LABEL: vfmsub_vf_nxv16f32_commute: 5262; CHECK: # %bb.0: 5263; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5264; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t 5265; CHECK-NEXT: ret 5266 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5267 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5268 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5269 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl) 5270 ret <vscale x 16 x float> %v 5271} 5272 5273define <vscale x 16 x float> @vfmsub_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5274; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked: 5275; CHECK: # %bb.0: 5276; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5277; CHECK-NEXT: vfmsub.vf v8, fa0, v16 5278; CHECK-NEXT: ret 5279 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5280 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5281 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5282 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5283 ret <vscale x 16 x float> %v 5284} 5285 5286define <vscale x 16 x float> @vfmsub_vf_nxv16f32_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5287; CHECK-LABEL: vfmsub_vf_nxv16f32_unmasked_commute: 5288; CHECK: # %bb.0: 5289; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5290; CHECK-NEXT: vfmsub.vf v8, fa0, v16 5291; CHECK-NEXT: ret 5292 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5293 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5294 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5295 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5296 ret <vscale x 16 x float> %v 5297} 5298 5299define <vscale x 16 x float> @vfnmadd_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5300; CHECK-LABEL: vfnmadd_vv_nxv16f32: 5301; CHECK: # %bb.0: 5302; CHECK-NEXT: vl8re32.v v24, (a0) 5303; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5304; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t 5305; CHECK-NEXT: vmv.v.v v8, v16 5306; CHECK-NEXT: ret 5307 %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl) 5308 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl) 5309 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl) 5310 ret <vscale x 16 x float> %v 5311} 5312 5313define <vscale x 16 x float> @vfnmadd_vv_nxv16f32_commuted(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5314; CHECK-LABEL: vfnmadd_vv_nxv16f32_commuted: 5315; CHECK: # %bb.0: 5316; CHECK-NEXT: vl8re32.v v24, (a0) 5317; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5318; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t 5319; CHECK-NEXT: ret 5320 %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl) 5321 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl) 5322 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl) 5323 ret <vscale x 16 x float> %v 5324} 5325 5326define <vscale x 16 x float> @vfnmadd_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) { 5327; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked: 5328; CHECK: # %bb.0: 5329; CHECK-NEXT: vl8re32.v v24, (a0) 5330; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5331; CHECK-NEXT: vfnmadd.vv v8, v16, v24 5332; CHECK-NEXT: ret 5333 %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5334 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5335 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5336 ret <vscale x 16 x float> %v 5337} 5338 5339define <vscale x 16 x float> @vfnmadd_vv_nxv16f32_unmasked_commuted(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) { 5340; CHECK-LABEL: vfnmadd_vv_nxv16f32_unmasked_commuted: 5341; CHECK: # %bb.0: 5342; CHECK-NEXT: vl8re32.v v24, (a0) 5343; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5344; CHECK-NEXT: vfnmadd.vv v8, v16, v24 5345; CHECK-NEXT: ret 5346 %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5347 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5348 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5349 ret <vscale x 16 x float> %v 5350} 5351 5352define <vscale x 16 x float> @vfnmadd_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5353; CHECK-LABEL: vfnmadd_vf_nxv16f32: 5354; CHECK: # %bb.0: 5355; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5356; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 5357; CHECK-NEXT: ret 5358 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5359 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5360 %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl) 5361 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5362 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl) 5363 ret <vscale x 16 x float> %v 5364} 5365 5366define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5367; CHECK-LABEL: vfnmadd_vf_nxv16f32_commute: 5368; CHECK: # %bb.0: 5369; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5370; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 5371; CHECK-NEXT: ret 5372 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5373 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5374 %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl) 5375 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5376 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl) 5377 ret <vscale x 16 x float> %v 5378} 5379 5380define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5381; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked: 5382; CHECK: # %bb.0: 5383; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5384; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 5385; CHECK-NEXT: ret 5386 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5387 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5388 %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5389 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5390 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5391 ret <vscale x 16 x float> %v 5392} 5393 5394define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5395; CHECK-LABEL: vfnmadd_vf_nxv16f32_unmasked_commute: 5396; CHECK: # %bb.0: 5397; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5398; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 5399; CHECK-NEXT: ret 5400 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5401 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5402 %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5403 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5404 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5405 ret <vscale x 16 x float> %v 5406} 5407 5408define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_neg_splat(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5409; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat: 5410; CHECK: # %bb.0: 5411; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5412; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 5413; CHECK-NEXT: ret 5414 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5415 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5416 %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl) 5417 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5418 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl) 5419 ret <vscale x 16 x float> %v 5420} 5421 5422define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_neg_splat_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5423; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_commute: 5424; CHECK: # %bb.0: 5425; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5426; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 5427; CHECK-NEXT: ret 5428 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5429 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5430 %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl) 5431 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5432 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> %m, i32 %evl) 5433 ret <vscale x 16 x float> %v 5434} 5435 5436define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_neg_splat_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5437; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked: 5438; CHECK: # %bb.0: 5439; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5440; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 5441; CHECK-NEXT: ret 5442 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5443 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5444 %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5445 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5446 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5447 ret <vscale x 16 x float> %v 5448} 5449 5450define <vscale x 16 x float> @vfnmadd_vf_nxv16f32_neg_splat_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5451; CHECK-LABEL: vfnmadd_vf_nxv16f32_neg_splat_unmasked_commute: 5452; CHECK: # %bb.0: 5453; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5454; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 5455; CHECK-NEXT: ret 5456 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5457 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5458 %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5459 %negvc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5460 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %negvc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5461 ret <vscale x 16 x float> %v 5462} 5463 5464define <vscale x 16 x float> @vfnmsub_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5465; CHECK-LABEL: vfnmsub_vv_nxv16f32: 5466; CHECK: # %bb.0: 5467; CHECK-NEXT: vl8re32.v v24, (a0) 5468; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5469; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t 5470; CHECK-NEXT: vmv.v.v v8, v16 5471; CHECK-NEXT: ret 5472 %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl) 5473 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl) 5474 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl) 5475 ret <vscale x 16 x float> %v 5476} 5477 5478define <vscale x 16 x float> @vfnmsub_vv_nxv16f32_commuted(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5479; CHECK-LABEL: vfnmsub_vv_nxv16f32_commuted: 5480; CHECK: # %bb.0: 5481; CHECK-NEXT: vl8re32.v v24, (a0) 5482; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5483; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t 5484; CHECK-NEXT: ret 5485 %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl) 5486 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl) 5487 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> %m, i32 %evl) 5488 ret <vscale x 16 x float> %v 5489} 5490 5491define <vscale x 16 x float> @vfnmsub_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) { 5492; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked: 5493; CHECK: # %bb.0: 5494; CHECK-NEXT: vl8re32.v v24, (a0) 5495; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5496; CHECK-NEXT: vfnmadd.vv v8, v16, v24 5497; CHECK-NEXT: ret 5498 %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5499 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5500 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negb, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5501 ret <vscale x 16 x float> %v 5502} 5503 5504define <vscale x 16 x float> @vfnmsub_vv_nxv16f32_unmasked_commuted(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x float> %c, i32 zeroext %evl) { 5505; CHECK-LABEL: vfnmsub_vv_nxv16f32_unmasked_commuted: 5506; CHECK: # %bb.0: 5507; CHECK-NEXT: vl8re32.v v24, (a0) 5508; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 5509; CHECK-NEXT: vfnmadd.vv v8, v16, v24 5510; CHECK-NEXT: ret 5511 %negb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5512 %negc = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5513 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negb, <vscale x 16 x float> %va, <vscale x 16 x float> %negc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5514 ret <vscale x 16 x float> %v 5515} 5516 5517define <vscale x 16 x float> @vfnmsub_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5518; CHECK-LABEL: vfnmsub_vf_nxv16f32: 5519; CHECK: # %bb.0: 5520; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5521; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 5522; CHECK-NEXT: ret 5523 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5524 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5525 %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl) 5526 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5527 ret <vscale x 16 x float> %v 5528} 5529 5530define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5531; CHECK-LABEL: vfnmsub_vf_nxv16f32_commute: 5532; CHECK: # %bb.0: 5533; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5534; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 5535; CHECK-NEXT: ret 5536 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5537 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5538 %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl) 5539 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5540 ret <vscale x 16 x float> %v 5541} 5542 5543define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5544; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked: 5545; CHECK: # %bb.0: 5546; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5547; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 5548; CHECK-NEXT: ret 5549 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5550 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5551 %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5552 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negva, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5553 ret <vscale x 16 x float> %v 5554} 5555 5556define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5557; CHECK-LABEL: vfnmsub_vf_nxv16f32_unmasked_commute: 5558; CHECK: # %bb.0: 5559; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5560; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 5561; CHECK-NEXT: ret 5562 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5563 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5564 %negva = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5565 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %negva, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5566 ret <vscale x 16 x float> %v 5567} 5568 5569define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_neg_splat(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5570; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat: 5571; CHECK: # %bb.0: 5572; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5573; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 5574; CHECK-NEXT: ret 5575 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5576 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5577 %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl) 5578 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5579 ret <vscale x 16 x float> %v 5580} 5581 5582define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_neg_splat_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 zeroext %evl) { 5583; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_commute: 5584; CHECK: # %bb.0: 5585; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5586; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 5587; CHECK-NEXT: ret 5588 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5589 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5590 %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl) 5591 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> %m, i32 %evl) 5592 ret <vscale x 16 x float> %v 5593} 5594 5595define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_neg_splat_unmasked(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5596; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked: 5597; CHECK: # %bb.0: 5598; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5599; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 5600; CHECK-NEXT: ret 5601 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5602 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5603 %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5604 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %negvb, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5605 ret <vscale x 16 x float> %v 5606} 5607 5608define <vscale x 16 x float> @vfnmsub_vf_nxv16f32_neg_splat_unmasked_commute(<vscale x 16 x float> %va, float %b, <vscale x 16 x float> %vc, i32 zeroext %evl) { 5609; CHECK-LABEL: vfnmsub_vf_nxv16f32_neg_splat_unmasked_commute: 5610; CHECK: # %bb.0: 5611; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 5612; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 5613; CHECK-NEXT: ret 5614 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 5615 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 5616 %negvb = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5617 %v = call <vscale x 16 x float> @llvm.vp.fmuladd.nxv16f32(<vscale x 16 x float> %negvb, <vscale x 16 x float> %va, <vscale x 16 x float> %vc, <vscale x 16 x i1> splat (i1 true), i32 %evl) 5618 ret <vscale x 16 x float> %v 5619} 5620 5621declare <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double>, <vscale x 1 x i1>, i32) 5622 5623define <vscale x 1 x double> @vfmsub_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5624; CHECK-LABEL: vfmsub_vv_nxv1f64: 5625; CHECK: # %bb.0: 5626; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5627; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t 5628; CHECK-NEXT: vmv.v.v v8, v9 5629; CHECK-NEXT: ret 5630 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl) 5631 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl) 5632 ret <vscale x 1 x double> %v 5633} 5634 5635define <vscale x 1 x double> @vfmsub_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) { 5636; CHECK-LABEL: vfmsub_vv_nxv1f64_unmasked: 5637; CHECK: # %bb.0: 5638; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5639; CHECK-NEXT: vfmsub.vv v8, v9, v10 5640; CHECK-NEXT: ret 5641 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5642 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5643 ret <vscale x 1 x double> %v 5644} 5645 5646define <vscale x 1 x double> @vfmsub_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5647; CHECK-LABEL: vfmsub_vf_nxv1f64: 5648; CHECK: # %bb.0: 5649; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5650; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 5651; CHECK-NEXT: ret 5652 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5653 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5654 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5655 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl) 5656 ret <vscale x 1 x double> %v 5657} 5658 5659define <vscale x 1 x double> @vfmsub_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5660; CHECK-LABEL: vfmsub_vf_nxv1f64_commute: 5661; CHECK: # %bb.0: 5662; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5663; CHECK-NEXT: vfmsub.vf v8, fa0, v9, v0.t 5664; CHECK-NEXT: ret 5665 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5666 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5667 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5668 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl) 5669 ret <vscale x 1 x double> %v 5670} 5671 5672define <vscale x 1 x double> @vfmsub_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5673; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked: 5674; CHECK: # %bb.0: 5675; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5676; CHECK-NEXT: vfmsub.vf v8, fa0, v9 5677; CHECK-NEXT: ret 5678 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5679 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5680 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5681 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5682 ret <vscale x 1 x double> %v 5683} 5684 5685define <vscale x 1 x double> @vfmsub_vf_nxv1f64_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5686; CHECK-LABEL: vfmsub_vf_nxv1f64_unmasked_commute: 5687; CHECK: # %bb.0: 5688; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5689; CHECK-NEXT: vfmsub.vf v8, fa0, v9 5690; CHECK-NEXT: ret 5691 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5692 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5693 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5694 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5695 ret <vscale x 1 x double> %v 5696} 5697 5698define <vscale x 1 x double> @vfnmadd_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5699; CHECK-LABEL: vfnmadd_vv_nxv1f64: 5700; CHECK: # %bb.0: 5701; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5702; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 5703; CHECK-NEXT: vmv.v.v v8, v9 5704; CHECK-NEXT: ret 5705 %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl) 5706 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl) 5707 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl) 5708 ret <vscale x 1 x double> %v 5709} 5710 5711define <vscale x 1 x double> @vfnmadd_vv_nxv1f64_commuted(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5712; CHECK-LABEL: vfnmadd_vv_nxv1f64_commuted: 5713; CHECK: # %bb.0: 5714; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5715; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 5716; CHECK-NEXT: ret 5717 %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl) 5718 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl) 5719 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl) 5720 ret <vscale x 1 x double> %v 5721} 5722 5723define <vscale x 1 x double> @vfnmadd_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) { 5724; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked: 5725; CHECK: # %bb.0: 5726; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5727; CHECK-NEXT: vfnmadd.vv v8, v9, v10 5728; CHECK-NEXT: ret 5729 %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5730 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5731 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5732 ret <vscale x 1 x double> %v 5733} 5734 5735define <vscale x 1 x double> @vfnmadd_vv_nxv1f64_unmasked_commuted(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) { 5736; CHECK-LABEL: vfnmadd_vv_nxv1f64_unmasked_commuted: 5737; CHECK: # %bb.0: 5738; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5739; CHECK-NEXT: vfnmadd.vv v8, v9, v10 5740; CHECK-NEXT: ret 5741 %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5742 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5743 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5744 ret <vscale x 1 x double> %v 5745} 5746 5747define <vscale x 1 x double> @vfnmadd_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5748; CHECK-LABEL: vfnmadd_vf_nxv1f64: 5749; CHECK: # %bb.0: 5750; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5751; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 5752; CHECK-NEXT: ret 5753 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5754 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5755 %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl) 5756 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5757 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl) 5758 ret <vscale x 1 x double> %v 5759} 5760 5761define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5762; CHECK-LABEL: vfnmadd_vf_nxv1f64_commute: 5763; CHECK: # %bb.0: 5764; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5765; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 5766; CHECK-NEXT: ret 5767 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5768 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5769 %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl) 5770 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5771 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl) 5772 ret <vscale x 1 x double> %v 5773} 5774 5775define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5776; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked: 5777; CHECK: # %bb.0: 5778; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5779; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 5780; CHECK-NEXT: ret 5781 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5782 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5783 %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5784 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5785 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5786 ret <vscale x 1 x double> %v 5787} 5788 5789define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5790; CHECK-LABEL: vfnmadd_vf_nxv1f64_unmasked_commute: 5791; CHECK: # %bb.0: 5792; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5793; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 5794; CHECK-NEXT: ret 5795 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5796 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5797 %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5798 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5799 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5800 ret <vscale x 1 x double> %v 5801} 5802 5803define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_neg_splat(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5804; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat: 5805; CHECK: # %bb.0: 5806; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5807; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 5808; CHECK-NEXT: ret 5809 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5810 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5811 %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl) 5812 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5813 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl) 5814 ret <vscale x 1 x double> %v 5815} 5816 5817define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_neg_splat_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5818; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_commute: 5819; CHECK: # %bb.0: 5820; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5821; CHECK-NEXT: vfnmadd.vf v8, fa0, v9, v0.t 5822; CHECK-NEXT: ret 5823 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5824 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5825 %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl) 5826 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5827 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> %m, i32 %evl) 5828 ret <vscale x 1 x double> %v 5829} 5830 5831define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_neg_splat_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5832; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked: 5833; CHECK: # %bb.0: 5834; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5835; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 5836; CHECK-NEXT: ret 5837 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5838 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5839 %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5840 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5841 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5842 ret <vscale x 1 x double> %v 5843} 5844 5845define <vscale x 1 x double> @vfnmadd_vf_nxv1f64_neg_splat_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5846; CHECK-LABEL: vfnmadd_vf_nxv1f64_neg_splat_unmasked_commute: 5847; CHECK: # %bb.0: 5848; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5849; CHECK-NEXT: vfnmadd.vf v8, fa0, v9 5850; CHECK-NEXT: ret 5851 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5852 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5853 %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5854 %negvc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5855 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %negvc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5856 ret <vscale x 1 x double> %v 5857} 5858 5859define <vscale x 1 x double> @vfnmsub_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5860; CHECK-LABEL: vfnmsub_vv_nxv1f64: 5861; CHECK: # %bb.0: 5862; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5863; CHECK-NEXT: vfnmadd.vv v9, v8, v10, v0.t 5864; CHECK-NEXT: vmv.v.v v8, v9 5865; CHECK-NEXT: ret 5866 %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl) 5867 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl) 5868 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl) 5869 ret <vscale x 1 x double> %v 5870} 5871 5872define <vscale x 1 x double> @vfnmsub_vv_nxv1f64_commuted(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5873; CHECK-LABEL: vfnmsub_vv_nxv1f64_commuted: 5874; CHECK: # %bb.0: 5875; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5876; CHECK-NEXT: vfnmadd.vv v8, v9, v10, v0.t 5877; CHECK-NEXT: ret 5878 %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl) 5879 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl) 5880 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> %m, i32 %evl) 5881 ret <vscale x 1 x double> %v 5882} 5883 5884define <vscale x 1 x double> @vfnmsub_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) { 5885; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked: 5886; CHECK: # %bb.0: 5887; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5888; CHECK-NEXT: vfnmadd.vv v8, v9, v10 5889; CHECK-NEXT: ret 5890 %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5891 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5892 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negb, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5893 ret <vscale x 1 x double> %v 5894} 5895 5896define <vscale x 1 x double> @vfnmsub_vv_nxv1f64_unmasked_commuted(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x double> %c, i32 zeroext %evl) { 5897; CHECK-LABEL: vfnmsub_vv_nxv1f64_unmasked_commuted: 5898; CHECK: # %bb.0: 5899; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5900; CHECK-NEXT: vfnmadd.vv v8, v9, v10 5901; CHECK-NEXT: ret 5902 %negb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5903 %negc = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5904 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negb, <vscale x 1 x double> %va, <vscale x 1 x double> %negc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5905 ret <vscale x 1 x double> %v 5906} 5907 5908define <vscale x 1 x double> @vfnmsub_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5909; CHECK-LABEL: vfnmsub_vf_nxv1f64: 5910; CHECK: # %bb.0: 5911; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5912; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 5913; CHECK-NEXT: ret 5914 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5915 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5916 %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl) 5917 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5918 ret <vscale x 1 x double> %v 5919} 5920 5921define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5922; CHECK-LABEL: vfnmsub_vf_nxv1f64_commute: 5923; CHECK: # %bb.0: 5924; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5925; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 5926; CHECK-NEXT: ret 5927 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5928 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5929 %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl) 5930 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5931 ret <vscale x 1 x double> %v 5932} 5933 5934define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5935; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked: 5936; CHECK: # %bb.0: 5937; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5938; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 5939; CHECK-NEXT: ret 5940 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5941 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5942 %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5943 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negva, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5944 ret <vscale x 1 x double> %v 5945} 5946 5947define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5948; CHECK-LABEL: vfnmsub_vf_nxv1f64_unmasked_commute: 5949; CHECK: # %bb.0: 5950; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5951; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 5952; CHECK-NEXT: ret 5953 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5954 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5955 %negva = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5956 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %negva, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5957 ret <vscale x 1 x double> %v 5958} 5959 5960define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_neg_splat(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5961; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat: 5962; CHECK: # %bb.0: 5963; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5964; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 5965; CHECK-NEXT: ret 5966 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5967 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5968 %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl) 5969 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5970 ret <vscale x 1 x double> %v 5971} 5972 5973define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_neg_splat_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 zeroext %evl) { 5974; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_commute: 5975; CHECK: # %bb.0: 5976; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5977; CHECK-NEXT: vfnmsub.vf v8, fa0, v9, v0.t 5978; CHECK-NEXT: ret 5979 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5980 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5981 %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl) 5982 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> %m, i32 %evl) 5983 ret <vscale x 1 x double> %v 5984} 5985 5986define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_neg_splat_unmasked(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 5987; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked: 5988; CHECK: # %bb.0: 5989; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 5990; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 5991; CHECK-NEXT: ret 5992 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 5993 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 5994 %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5995 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %negvb, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 5996 ret <vscale x 1 x double> %v 5997} 5998 5999define <vscale x 1 x double> @vfnmsub_vf_nxv1f64_neg_splat_unmasked_commute(<vscale x 1 x double> %va, double %b, <vscale x 1 x double> %vc, i32 zeroext %evl) { 6000; CHECK-LABEL: vfnmsub_vf_nxv1f64_neg_splat_unmasked_commute: 6001; CHECK: # %bb.0: 6002; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 6003; CHECK-NEXT: vfnmsub.vf v8, fa0, v9 6004; CHECK-NEXT: ret 6005 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 6006 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 6007 %negvb = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl) 6008 %v = call <vscale x 1 x double> @llvm.vp.fmuladd.nxv1f64(<vscale x 1 x double> %negvb, <vscale x 1 x double> %va, <vscale x 1 x double> %vc, <vscale x 1 x i1> splat (i1 true), i32 %evl) 6009 ret <vscale x 1 x double> %v 6010} 6011 6012declare <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32) 6013 6014define <vscale x 2 x double> @vfmsub_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6015; CHECK-LABEL: vfmsub_vv_nxv2f64: 6016; CHECK: # %bb.0: 6017; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6018; CHECK-NEXT: vfmsub.vv v10, v8, v12, v0.t 6019; CHECK-NEXT: vmv.v.v v8, v10 6020; CHECK-NEXT: ret 6021 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl) 6022 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl) 6023 ret <vscale x 2 x double> %v 6024} 6025 6026define <vscale x 2 x double> @vfmsub_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) { 6027; CHECK-LABEL: vfmsub_vv_nxv2f64_unmasked: 6028; CHECK: # %bb.0: 6029; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6030; CHECK-NEXT: vfmsub.vv v8, v10, v12 6031; CHECK-NEXT: ret 6032 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6033 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6034 ret <vscale x 2 x double> %v 6035} 6036 6037define <vscale x 2 x double> @vfmsub_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6038; CHECK-LABEL: vfmsub_vf_nxv2f64: 6039; CHECK: # %bb.0: 6040; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6041; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t 6042; CHECK-NEXT: ret 6043 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6044 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6045 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6046 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl) 6047 ret <vscale x 2 x double> %v 6048} 6049 6050define <vscale x 2 x double> @vfmsub_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6051; CHECK-LABEL: vfmsub_vf_nxv2f64_commute: 6052; CHECK: # %bb.0: 6053; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6054; CHECK-NEXT: vfmsub.vf v8, fa0, v10, v0.t 6055; CHECK-NEXT: ret 6056 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6057 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6058 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6059 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl) 6060 ret <vscale x 2 x double> %v 6061} 6062 6063define <vscale x 2 x double> @vfmsub_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6064; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked: 6065; CHECK: # %bb.0: 6066; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6067; CHECK-NEXT: vfmsub.vf v8, fa0, v10 6068; CHECK-NEXT: ret 6069 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6070 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6071 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6072 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6073 ret <vscale x 2 x double> %v 6074} 6075 6076define <vscale x 2 x double> @vfmsub_vf_nxv2f64_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6077; CHECK-LABEL: vfmsub_vf_nxv2f64_unmasked_commute: 6078; CHECK: # %bb.0: 6079; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6080; CHECK-NEXT: vfmsub.vf v8, fa0, v10 6081; CHECK-NEXT: ret 6082 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6083 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6084 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6085 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6086 ret <vscale x 2 x double> %v 6087} 6088 6089define <vscale x 2 x double> @vfnmadd_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6090; CHECK-LABEL: vfnmadd_vv_nxv2f64: 6091; CHECK: # %bb.0: 6092; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6093; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t 6094; CHECK-NEXT: vmv.v.v v8, v10 6095; CHECK-NEXT: ret 6096 %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl) 6097 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl) 6098 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl) 6099 ret <vscale x 2 x double> %v 6100} 6101 6102define <vscale x 2 x double> @vfnmadd_vv_nxv2f64_commuted(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6103; CHECK-LABEL: vfnmadd_vv_nxv2f64_commuted: 6104; CHECK: # %bb.0: 6105; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6106; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t 6107; CHECK-NEXT: ret 6108 %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl) 6109 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl) 6110 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl) 6111 ret <vscale x 2 x double> %v 6112} 6113 6114define <vscale x 2 x double> @vfnmadd_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) { 6115; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked: 6116; CHECK: # %bb.0: 6117; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6118; CHECK-NEXT: vfnmadd.vv v8, v10, v12 6119; CHECK-NEXT: ret 6120 %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6121 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6122 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6123 ret <vscale x 2 x double> %v 6124} 6125 6126define <vscale x 2 x double> @vfnmadd_vv_nxv2f64_unmasked_commuted(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) { 6127; CHECK-LABEL: vfnmadd_vv_nxv2f64_unmasked_commuted: 6128; CHECK: # %bb.0: 6129; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6130; CHECK-NEXT: vfnmadd.vv v8, v10, v12 6131; CHECK-NEXT: ret 6132 %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6133 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6134 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6135 ret <vscale x 2 x double> %v 6136} 6137 6138define <vscale x 2 x double> @vfnmadd_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6139; CHECK-LABEL: vfnmadd_vf_nxv2f64: 6140; CHECK: # %bb.0: 6141; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6142; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 6143; CHECK-NEXT: ret 6144 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6145 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6146 %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 6147 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6148 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl) 6149 ret <vscale x 2 x double> %v 6150} 6151 6152define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6153; CHECK-LABEL: vfnmadd_vf_nxv2f64_commute: 6154; CHECK: # %bb.0: 6155; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6156; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 6157; CHECK-NEXT: ret 6158 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6159 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6160 %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 6161 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6162 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl) 6163 ret <vscale x 2 x double> %v 6164} 6165 6166define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6167; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked: 6168; CHECK: # %bb.0: 6169; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6170; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 6171; CHECK-NEXT: ret 6172 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6173 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6174 %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6175 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6176 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6177 ret <vscale x 2 x double> %v 6178} 6179 6180define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6181; CHECK-LABEL: vfnmadd_vf_nxv2f64_unmasked_commute: 6182; CHECK: # %bb.0: 6183; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6184; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 6185; CHECK-NEXT: ret 6186 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6187 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6188 %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6189 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6190 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6191 ret <vscale x 2 x double> %v 6192} 6193 6194define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_neg_splat(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6195; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat: 6196; CHECK: # %bb.0: 6197; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6198; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 6199; CHECK-NEXT: ret 6200 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6201 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6202 %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl) 6203 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6204 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl) 6205 ret <vscale x 2 x double> %v 6206} 6207 6208define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_neg_splat_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6209; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_commute: 6210; CHECK: # %bb.0: 6211; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6212; CHECK-NEXT: vfnmadd.vf v8, fa0, v10, v0.t 6213; CHECK-NEXT: ret 6214 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6215 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6216 %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl) 6217 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6218 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> %m, i32 %evl) 6219 ret <vscale x 2 x double> %v 6220} 6221 6222define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_neg_splat_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6223; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked: 6224; CHECK: # %bb.0: 6225; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6226; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 6227; CHECK-NEXT: ret 6228 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6229 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6230 %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6231 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6232 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6233 ret <vscale x 2 x double> %v 6234} 6235 6236define <vscale x 2 x double> @vfnmadd_vf_nxv2f64_neg_splat_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6237; CHECK-LABEL: vfnmadd_vf_nxv2f64_neg_splat_unmasked_commute: 6238; CHECK: # %bb.0: 6239; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6240; CHECK-NEXT: vfnmadd.vf v8, fa0, v10 6241; CHECK-NEXT: ret 6242 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6243 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6244 %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6245 %negvc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6246 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %negvc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6247 ret <vscale x 2 x double> %v 6248} 6249 6250define <vscale x 2 x double> @vfnmsub_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6251; CHECK-LABEL: vfnmsub_vv_nxv2f64: 6252; CHECK: # %bb.0: 6253; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6254; CHECK-NEXT: vfnmadd.vv v10, v8, v12, v0.t 6255; CHECK-NEXT: vmv.v.v v8, v10 6256; CHECK-NEXT: ret 6257 %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl) 6258 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl) 6259 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl) 6260 ret <vscale x 2 x double> %v 6261} 6262 6263define <vscale x 2 x double> @vfnmsub_vv_nxv2f64_commuted(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6264; CHECK-LABEL: vfnmsub_vv_nxv2f64_commuted: 6265; CHECK: # %bb.0: 6266; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6267; CHECK-NEXT: vfnmadd.vv v8, v10, v12, v0.t 6268; CHECK-NEXT: ret 6269 %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl) 6270 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl) 6271 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> %m, i32 %evl) 6272 ret <vscale x 2 x double> %v 6273} 6274 6275define <vscale x 2 x double> @vfnmsub_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) { 6276; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked: 6277; CHECK: # %bb.0: 6278; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6279; CHECK-NEXT: vfnmadd.vv v8, v10, v12 6280; CHECK-NEXT: ret 6281 %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6282 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6283 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negb, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6284 ret <vscale x 2 x double> %v 6285} 6286 6287define <vscale x 2 x double> @vfnmsub_vv_nxv2f64_unmasked_commuted(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x double> %c, i32 zeroext %evl) { 6288; CHECK-LABEL: vfnmsub_vv_nxv2f64_unmasked_commuted: 6289; CHECK: # %bb.0: 6290; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6291; CHECK-NEXT: vfnmadd.vv v8, v10, v12 6292; CHECK-NEXT: ret 6293 %negb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6294 %negc = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6295 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negb, <vscale x 2 x double> %va, <vscale x 2 x double> %negc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6296 ret <vscale x 2 x double> %v 6297} 6298 6299define <vscale x 2 x double> @vfnmsub_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6300; CHECK-LABEL: vfnmsub_vf_nxv2f64: 6301; CHECK: # %bb.0: 6302; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6303; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 6304; CHECK-NEXT: ret 6305 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6306 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6307 %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 6308 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6309 ret <vscale x 2 x double> %v 6310} 6311 6312define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6313; CHECK-LABEL: vfnmsub_vf_nxv2f64_commute: 6314; CHECK: # %bb.0: 6315; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6316; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 6317; CHECK-NEXT: ret 6318 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6319 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6320 %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 6321 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6322 ret <vscale x 2 x double> %v 6323} 6324 6325define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6326; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked: 6327; CHECK: # %bb.0: 6328; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6329; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 6330; CHECK-NEXT: ret 6331 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6332 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6333 %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6334 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negva, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6335 ret <vscale x 2 x double> %v 6336} 6337 6338define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6339; CHECK-LABEL: vfnmsub_vf_nxv2f64_unmasked_commute: 6340; CHECK: # %bb.0: 6341; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6342; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 6343; CHECK-NEXT: ret 6344 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6345 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6346 %negva = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6347 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %negva, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6348 ret <vscale x 2 x double> %v 6349} 6350 6351define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_neg_splat(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6352; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat: 6353; CHECK: # %bb.0: 6354; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6355; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 6356; CHECK-NEXT: ret 6357 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6358 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6359 %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl) 6360 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6361 ret <vscale x 2 x double> %v 6362} 6363 6364define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_neg_splat_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 zeroext %evl) { 6365; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_commute: 6366; CHECK: # %bb.0: 6367; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6368; CHECK-NEXT: vfnmsub.vf v8, fa0, v10, v0.t 6369; CHECK-NEXT: ret 6370 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6371 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6372 %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl) 6373 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> %m, i32 %evl) 6374 ret <vscale x 2 x double> %v 6375} 6376 6377define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_neg_splat_unmasked(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6378; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked: 6379; CHECK: # %bb.0: 6380; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6381; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 6382; CHECK-NEXT: ret 6383 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6384 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6385 %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6386 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %negvb, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6387 ret <vscale x 2 x double> %v 6388} 6389 6390define <vscale x 2 x double> @vfnmsub_vf_nxv2f64_neg_splat_unmasked_commute(<vscale x 2 x double> %va, double %b, <vscale x 2 x double> %vc, i32 zeroext %evl) { 6391; CHECK-LABEL: vfnmsub_vf_nxv2f64_neg_splat_unmasked_commute: 6392; CHECK: # %bb.0: 6393; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 6394; CHECK-NEXT: vfnmsub.vf v8, fa0, v10 6395; CHECK-NEXT: ret 6396 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 6397 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 6398 %negvb = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6399 %v = call <vscale x 2 x double> @llvm.vp.fmuladd.nxv2f64(<vscale x 2 x double> %negvb, <vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x i1> splat (i1 true), i32 %evl) 6400 ret <vscale x 2 x double> %v 6401} 6402 6403declare <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double>, <vscale x 4 x i1>, i32) 6404 6405define <vscale x 4 x double> @vfmsub_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6406; CHECK-LABEL: vfmsub_vv_nxv4f64: 6407; CHECK: # %bb.0: 6408; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6409; CHECK-NEXT: vfmsub.vv v12, v8, v16, v0.t 6410; CHECK-NEXT: vmv.v.v v8, v12 6411; CHECK-NEXT: ret 6412 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl) 6413 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl) 6414 ret <vscale x 4 x double> %v 6415} 6416 6417define <vscale x 4 x double> @vfmsub_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) { 6418; CHECK-LABEL: vfmsub_vv_nxv4f64_unmasked: 6419; CHECK: # %bb.0: 6420; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6421; CHECK-NEXT: vfmsub.vv v8, v12, v16 6422; CHECK-NEXT: ret 6423 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6424 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6425 ret <vscale x 4 x double> %v 6426} 6427 6428define <vscale x 4 x double> @vfmsub_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6429; CHECK-LABEL: vfmsub_vf_nxv4f64: 6430; CHECK: # %bb.0: 6431; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6432; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t 6433; CHECK-NEXT: ret 6434 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6435 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6436 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6437 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl) 6438 ret <vscale x 4 x double> %v 6439} 6440 6441define <vscale x 4 x double> @vfmsub_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6442; CHECK-LABEL: vfmsub_vf_nxv4f64_commute: 6443; CHECK: # %bb.0: 6444; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6445; CHECK-NEXT: vfmsub.vf v8, fa0, v12, v0.t 6446; CHECK-NEXT: ret 6447 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6448 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6449 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6450 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl) 6451 ret <vscale x 4 x double> %v 6452} 6453 6454define <vscale x 4 x double> @vfmsub_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6455; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked: 6456; CHECK: # %bb.0: 6457; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6458; CHECK-NEXT: vfmsub.vf v8, fa0, v12 6459; CHECK-NEXT: ret 6460 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6461 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6462 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6463 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6464 ret <vscale x 4 x double> %v 6465} 6466 6467define <vscale x 4 x double> @vfmsub_vf_nxv4f64_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6468; CHECK-LABEL: vfmsub_vf_nxv4f64_unmasked_commute: 6469; CHECK: # %bb.0: 6470; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6471; CHECK-NEXT: vfmsub.vf v8, fa0, v12 6472; CHECK-NEXT: ret 6473 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6474 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6475 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6476 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6477 ret <vscale x 4 x double> %v 6478} 6479 6480define <vscale x 4 x double> @vfnmadd_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6481; CHECK-LABEL: vfnmadd_vv_nxv4f64: 6482; CHECK: # %bb.0: 6483; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6484; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t 6485; CHECK-NEXT: vmv.v.v v8, v12 6486; CHECK-NEXT: ret 6487 %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl) 6488 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl) 6489 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl) 6490 ret <vscale x 4 x double> %v 6491} 6492 6493define <vscale x 4 x double> @vfnmadd_vv_nxv4f64_commuted(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6494; CHECK-LABEL: vfnmadd_vv_nxv4f64_commuted: 6495; CHECK: # %bb.0: 6496; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6497; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t 6498; CHECK-NEXT: ret 6499 %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl) 6500 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl) 6501 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl) 6502 ret <vscale x 4 x double> %v 6503} 6504 6505define <vscale x 4 x double> @vfnmadd_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) { 6506; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked: 6507; CHECK: # %bb.0: 6508; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6509; CHECK-NEXT: vfnmadd.vv v8, v12, v16 6510; CHECK-NEXT: ret 6511 %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6512 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6513 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6514 ret <vscale x 4 x double> %v 6515} 6516 6517define <vscale x 4 x double> @vfnmadd_vv_nxv4f64_unmasked_commuted(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) { 6518; CHECK-LABEL: vfnmadd_vv_nxv4f64_unmasked_commuted: 6519; CHECK: # %bb.0: 6520; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6521; CHECK-NEXT: vfnmadd.vv v8, v12, v16 6522; CHECK-NEXT: ret 6523 %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6524 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6525 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6526 ret <vscale x 4 x double> %v 6527} 6528 6529define <vscale x 4 x double> @vfnmadd_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6530; CHECK-LABEL: vfnmadd_vf_nxv4f64: 6531; CHECK: # %bb.0: 6532; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6533; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 6534; CHECK-NEXT: ret 6535 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6536 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6537 %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl) 6538 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6539 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl) 6540 ret <vscale x 4 x double> %v 6541} 6542 6543define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6544; CHECK-LABEL: vfnmadd_vf_nxv4f64_commute: 6545; CHECK: # %bb.0: 6546; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6547; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 6548; CHECK-NEXT: ret 6549 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6550 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6551 %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl) 6552 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6553 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl) 6554 ret <vscale x 4 x double> %v 6555} 6556 6557define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6558; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked: 6559; CHECK: # %bb.0: 6560; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6561; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 6562; CHECK-NEXT: ret 6563 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6564 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6565 %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6566 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6567 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6568 ret <vscale x 4 x double> %v 6569} 6570 6571define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6572; CHECK-LABEL: vfnmadd_vf_nxv4f64_unmasked_commute: 6573; CHECK: # %bb.0: 6574; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6575; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 6576; CHECK-NEXT: ret 6577 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6578 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6579 %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6580 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6581 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6582 ret <vscale x 4 x double> %v 6583} 6584 6585define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_neg_splat(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6586; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat: 6587; CHECK: # %bb.0: 6588; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6589; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 6590; CHECK-NEXT: ret 6591 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6592 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6593 %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl) 6594 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6595 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl) 6596 ret <vscale x 4 x double> %v 6597} 6598 6599define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_neg_splat_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6600; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_commute: 6601; CHECK: # %bb.0: 6602; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6603; CHECK-NEXT: vfnmadd.vf v8, fa0, v12, v0.t 6604; CHECK-NEXT: ret 6605 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6606 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6607 %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl) 6608 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6609 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> %m, i32 %evl) 6610 ret <vscale x 4 x double> %v 6611} 6612 6613define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_neg_splat_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6614; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked: 6615; CHECK: # %bb.0: 6616; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6617; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 6618; CHECK-NEXT: ret 6619 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6620 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6621 %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6622 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6623 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6624 ret <vscale x 4 x double> %v 6625} 6626 6627define <vscale x 4 x double> @vfnmadd_vf_nxv4f64_neg_splat_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6628; CHECK-LABEL: vfnmadd_vf_nxv4f64_neg_splat_unmasked_commute: 6629; CHECK: # %bb.0: 6630; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6631; CHECK-NEXT: vfnmadd.vf v8, fa0, v12 6632; CHECK-NEXT: ret 6633 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6634 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6635 %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6636 %negvc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6637 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %negvc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6638 ret <vscale x 4 x double> %v 6639} 6640 6641define <vscale x 4 x double> @vfnmsub_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6642; CHECK-LABEL: vfnmsub_vv_nxv4f64: 6643; CHECK: # %bb.0: 6644; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6645; CHECK-NEXT: vfnmadd.vv v12, v8, v16, v0.t 6646; CHECK-NEXT: vmv.v.v v8, v12 6647; CHECK-NEXT: ret 6648 %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl) 6649 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl) 6650 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl) 6651 ret <vscale x 4 x double> %v 6652} 6653 6654define <vscale x 4 x double> @vfnmsub_vv_nxv4f64_commuted(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6655; CHECK-LABEL: vfnmsub_vv_nxv4f64_commuted: 6656; CHECK: # %bb.0: 6657; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6658; CHECK-NEXT: vfnmadd.vv v8, v12, v16, v0.t 6659; CHECK-NEXT: ret 6660 %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl) 6661 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl) 6662 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> %m, i32 %evl) 6663 ret <vscale x 4 x double> %v 6664} 6665 6666define <vscale x 4 x double> @vfnmsub_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) { 6667; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked: 6668; CHECK: # %bb.0: 6669; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6670; CHECK-NEXT: vfnmadd.vv v8, v12, v16 6671; CHECK-NEXT: ret 6672 %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6673 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6674 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negb, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6675 ret <vscale x 4 x double> %v 6676} 6677 6678define <vscale x 4 x double> @vfnmsub_vv_nxv4f64_unmasked_commuted(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x double> %c, i32 zeroext %evl) { 6679; CHECK-LABEL: vfnmsub_vv_nxv4f64_unmasked_commuted: 6680; CHECK: # %bb.0: 6681; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6682; CHECK-NEXT: vfnmadd.vv v8, v12, v16 6683; CHECK-NEXT: ret 6684 %negb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6685 %negc = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6686 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negb, <vscale x 4 x double> %va, <vscale x 4 x double> %negc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6687 ret <vscale x 4 x double> %v 6688} 6689 6690define <vscale x 4 x double> @vfnmsub_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6691; CHECK-LABEL: vfnmsub_vf_nxv4f64: 6692; CHECK: # %bb.0: 6693; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6694; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 6695; CHECK-NEXT: ret 6696 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6697 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6698 %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl) 6699 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6700 ret <vscale x 4 x double> %v 6701} 6702 6703define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6704; CHECK-LABEL: vfnmsub_vf_nxv4f64_commute: 6705; CHECK: # %bb.0: 6706; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6707; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 6708; CHECK-NEXT: ret 6709 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6710 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6711 %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl) 6712 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6713 ret <vscale x 4 x double> %v 6714} 6715 6716define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6717; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked: 6718; CHECK: # %bb.0: 6719; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6720; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 6721; CHECK-NEXT: ret 6722 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6723 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6724 %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6725 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negva, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6726 ret <vscale x 4 x double> %v 6727} 6728 6729define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6730; CHECK-LABEL: vfnmsub_vf_nxv4f64_unmasked_commute: 6731; CHECK: # %bb.0: 6732; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6733; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 6734; CHECK-NEXT: ret 6735 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6736 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6737 %negva = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6738 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %negva, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6739 ret <vscale x 4 x double> %v 6740} 6741 6742define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_neg_splat(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6743; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat: 6744; CHECK: # %bb.0: 6745; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6746; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 6747; CHECK-NEXT: ret 6748 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6749 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6750 %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl) 6751 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6752 ret <vscale x 4 x double> %v 6753} 6754 6755define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_neg_splat_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 zeroext %evl) { 6756; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_commute: 6757; CHECK: # %bb.0: 6758; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6759; CHECK-NEXT: vfnmsub.vf v8, fa0, v12, v0.t 6760; CHECK-NEXT: ret 6761 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6762 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6763 %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl) 6764 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> %m, i32 %evl) 6765 ret <vscale x 4 x double> %v 6766} 6767 6768define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_neg_splat_unmasked(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6769; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked: 6770; CHECK: # %bb.0: 6771; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6772; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 6773; CHECK-NEXT: ret 6774 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6775 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6776 %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6777 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %negvb, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6778 ret <vscale x 4 x double> %v 6779} 6780 6781define <vscale x 4 x double> @vfnmsub_vf_nxv4f64_neg_splat_unmasked_commute(<vscale x 4 x double> %va, double %b, <vscale x 4 x double> %vc, i32 zeroext %evl) { 6782; CHECK-LABEL: vfnmsub_vf_nxv4f64_neg_splat_unmasked_commute: 6783; CHECK: # %bb.0: 6784; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 6785; CHECK-NEXT: vfnmsub.vf v8, fa0, v12 6786; CHECK-NEXT: ret 6787 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 6788 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 6789 %negvb = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6790 %v = call <vscale x 4 x double> @llvm.vp.fmuladd.nxv4f64(<vscale x 4 x double> %negvb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, <vscale x 4 x i1> splat (i1 true), i32 %evl) 6791 ret <vscale x 4 x double> %v 6792} 6793 6794declare <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double>, <vscale x 8 x i1>, i32) 6795 6796define <vscale x 8 x double> @vfmsub_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6797; CHECK-LABEL: vfmsub_vv_nxv8f64: 6798; CHECK: # %bb.0: 6799; CHECK-NEXT: vl8re64.v v24, (a0) 6800; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 6801; CHECK-NEXT: vfmsub.vv v16, v8, v24, v0.t 6802; CHECK-NEXT: vmv.v.v v8, v16 6803; CHECK-NEXT: ret 6804 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl) 6805 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl) 6806 ret <vscale x 8 x double> %v 6807} 6808 6809define <vscale x 8 x double> @vfmsub_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) { 6810; CHECK-LABEL: vfmsub_vv_nxv8f64_unmasked: 6811; CHECK: # %bb.0: 6812; CHECK-NEXT: vl8re64.v v24, (a0) 6813; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 6814; CHECK-NEXT: vfmsub.vv v8, v16, v24 6815; CHECK-NEXT: ret 6816 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6817 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6818 ret <vscale x 8 x double> %v 6819} 6820 6821define <vscale x 8 x double> @vfmsub_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6822; CHECK-LABEL: vfmsub_vf_nxv8f64: 6823; CHECK: # %bb.0: 6824; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6825; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t 6826; CHECK-NEXT: ret 6827 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6828 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6829 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 6830 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl) 6831 ret <vscale x 8 x double> %v 6832} 6833 6834define <vscale x 8 x double> @vfmsub_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6835; CHECK-LABEL: vfmsub_vf_nxv8f64_commute: 6836; CHECK: # %bb.0: 6837; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6838; CHECK-NEXT: vfmsub.vf v8, fa0, v16, v0.t 6839; CHECK-NEXT: ret 6840 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6841 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6842 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 6843 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl) 6844 ret <vscale x 8 x double> %v 6845} 6846 6847define <vscale x 8 x double> @vfmsub_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 6848; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked: 6849; CHECK: # %bb.0: 6850; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6851; CHECK-NEXT: vfmsub.vf v8, fa0, v16 6852; CHECK-NEXT: ret 6853 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6854 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6855 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6856 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6857 ret <vscale x 8 x double> %v 6858} 6859 6860define <vscale x 8 x double> @vfmsub_vf_nxv8f64_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 6861; CHECK-LABEL: vfmsub_vf_nxv8f64_unmasked_commute: 6862; CHECK: # %bb.0: 6863; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6864; CHECK-NEXT: vfmsub.vf v8, fa0, v16 6865; CHECK-NEXT: ret 6866 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6867 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6868 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6869 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6870 ret <vscale x 8 x double> %v 6871} 6872 6873define <vscale x 8 x double> @vfnmadd_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6874; CHECK-LABEL: vfnmadd_vv_nxv8f64: 6875; CHECK: # %bb.0: 6876; CHECK-NEXT: vl8re64.v v24, (a0) 6877; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 6878; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t 6879; CHECK-NEXT: vmv.v.v v8, v16 6880; CHECK-NEXT: ret 6881 %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl) 6882 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl) 6883 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl) 6884 ret <vscale x 8 x double> %v 6885} 6886 6887define <vscale x 8 x double> @vfnmadd_vv_nxv8f64_commuted(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6888; CHECK-LABEL: vfnmadd_vv_nxv8f64_commuted: 6889; CHECK: # %bb.0: 6890; CHECK-NEXT: vl8re64.v v24, (a0) 6891; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 6892; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t 6893; CHECK-NEXT: ret 6894 %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl) 6895 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl) 6896 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl) 6897 ret <vscale x 8 x double> %v 6898} 6899 6900define <vscale x 8 x double> @vfnmadd_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) { 6901; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked: 6902; CHECK: # %bb.0: 6903; CHECK-NEXT: vl8re64.v v24, (a0) 6904; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 6905; CHECK-NEXT: vfnmadd.vv v8, v16, v24 6906; CHECK-NEXT: ret 6907 %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6908 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6909 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6910 ret <vscale x 8 x double> %v 6911} 6912 6913define <vscale x 8 x double> @vfnmadd_vv_nxv8f64_unmasked_commuted(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) { 6914; CHECK-LABEL: vfnmadd_vv_nxv8f64_unmasked_commuted: 6915; CHECK: # %bb.0: 6916; CHECK-NEXT: vl8re64.v v24, (a0) 6917; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 6918; CHECK-NEXT: vfnmadd.vv v8, v16, v24 6919; CHECK-NEXT: ret 6920 %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6921 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6922 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6923 ret <vscale x 8 x double> %v 6924} 6925 6926define <vscale x 8 x double> @vfnmadd_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6927; CHECK-LABEL: vfnmadd_vf_nxv8f64: 6928; CHECK: # %bb.0: 6929; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6930; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 6931; CHECK-NEXT: ret 6932 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6933 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6934 %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl) 6935 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 6936 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl) 6937 ret <vscale x 8 x double> %v 6938} 6939 6940define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6941; CHECK-LABEL: vfnmadd_vf_nxv8f64_commute: 6942; CHECK: # %bb.0: 6943; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6944; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 6945; CHECK-NEXT: ret 6946 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6947 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6948 %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl) 6949 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 6950 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl) 6951 ret <vscale x 8 x double> %v 6952} 6953 6954define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 6955; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked: 6956; CHECK: # %bb.0: 6957; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6958; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 6959; CHECK-NEXT: ret 6960 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6961 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6962 %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6963 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6964 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6965 ret <vscale x 8 x double> %v 6966} 6967 6968define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 6969; CHECK-LABEL: vfnmadd_vf_nxv8f64_unmasked_commute: 6970; CHECK: # %bb.0: 6971; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6972; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 6973; CHECK-NEXT: ret 6974 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6975 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6976 %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6977 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6978 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 6979 ret <vscale x 8 x double> %v 6980} 6981 6982define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_neg_splat(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6983; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat: 6984; CHECK: # %bb.0: 6985; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 6986; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 6987; CHECK-NEXT: ret 6988 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 6989 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 6990 %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl) 6991 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 6992 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl) 6993 ret <vscale x 8 x double> %v 6994} 6995 6996define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_neg_splat_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 6997; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_commute: 6998; CHECK: # %bb.0: 6999; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7000; CHECK-NEXT: vfnmadd.vf v8, fa0, v16, v0.t 7001; CHECK-NEXT: ret 7002 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7003 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7004 %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl) 7005 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 7006 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> %m, i32 %evl) 7007 ret <vscale x 8 x double> %v 7008} 7009 7010define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_neg_splat_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 7011; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked: 7012; CHECK: # %bb.0: 7013; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7014; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 7015; CHECK-NEXT: ret 7016 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7017 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7018 %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7019 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7020 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7021 ret <vscale x 8 x double> %v 7022} 7023 7024define <vscale x 8 x double> @vfnmadd_vf_nxv8f64_neg_splat_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 7025; CHECK-LABEL: vfnmadd_vf_nxv8f64_neg_splat_unmasked_commute: 7026; CHECK: # %bb.0: 7027; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7028; CHECK-NEXT: vfnmadd.vf v8, fa0, v16 7029; CHECK-NEXT: ret 7030 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7031 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7032 %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7033 %negvc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7034 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %negvc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7035 ret <vscale x 8 x double> %v 7036} 7037 7038define <vscale x 8 x double> @vfnmsub_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 7039; CHECK-LABEL: vfnmsub_vv_nxv8f64: 7040; CHECK: # %bb.0: 7041; CHECK-NEXT: vl8re64.v v24, (a0) 7042; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 7043; CHECK-NEXT: vfnmadd.vv v16, v8, v24, v0.t 7044; CHECK-NEXT: vmv.v.v v8, v16 7045; CHECK-NEXT: ret 7046 %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl) 7047 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl) 7048 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl) 7049 ret <vscale x 8 x double> %v 7050} 7051 7052define <vscale x 8 x double> @vfnmsub_vv_nxv8f64_commuted(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) { 7053; CHECK-LABEL: vfnmsub_vv_nxv8f64_commuted: 7054; CHECK: # %bb.0: 7055; CHECK-NEXT: vl8re64.v v24, (a0) 7056; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 7057; CHECK-NEXT: vfnmadd.vv v8, v16, v24, v0.t 7058; CHECK-NEXT: ret 7059 %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl) 7060 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl) 7061 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> %m, i32 %evl) 7062 ret <vscale x 8 x double> %v 7063} 7064 7065define <vscale x 8 x double> @vfnmsub_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) { 7066; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked: 7067; CHECK: # %bb.0: 7068; CHECK-NEXT: vl8re64.v v24, (a0) 7069; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 7070; CHECK-NEXT: vfnmadd.vv v8, v16, v24 7071; CHECK-NEXT: ret 7072 %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7073 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7074 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negb, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7075 ret <vscale x 8 x double> %v 7076} 7077 7078define <vscale x 8 x double> @vfnmsub_vv_nxv8f64_unmasked_commuted(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x double> %c, i32 zeroext %evl) { 7079; CHECK-LABEL: vfnmsub_vv_nxv8f64_unmasked_commuted: 7080; CHECK: # %bb.0: 7081; CHECK-NEXT: vl8re64.v v24, (a0) 7082; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 7083; CHECK-NEXT: vfnmadd.vv v8, v16, v24 7084; CHECK-NEXT: ret 7085 %negb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7086 %negc = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7087 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negb, <vscale x 8 x double> %va, <vscale x 8 x double> %negc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7088 ret <vscale x 8 x double> %v 7089} 7090 7091define <vscale x 8 x double> @vfnmsub_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 7092; CHECK-LABEL: vfnmsub_vf_nxv8f64: 7093; CHECK: # %bb.0: 7094; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7095; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 7096; CHECK-NEXT: ret 7097 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7098 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7099 %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl) 7100 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 7101 ret <vscale x 8 x double> %v 7102} 7103 7104define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 7105; CHECK-LABEL: vfnmsub_vf_nxv8f64_commute: 7106; CHECK: # %bb.0: 7107; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7108; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 7109; CHECK-NEXT: ret 7110 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7111 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7112 %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl) 7113 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 7114 ret <vscale x 8 x double> %v 7115} 7116 7117define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 7118; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked: 7119; CHECK: # %bb.0: 7120; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7121; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 7122; CHECK-NEXT: ret 7123 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7124 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7125 %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7126 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negva, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7127 ret <vscale x 8 x double> %v 7128} 7129 7130define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 7131; CHECK-LABEL: vfnmsub_vf_nxv8f64_unmasked_commute: 7132; CHECK: # %bb.0: 7133; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7134; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 7135; CHECK-NEXT: ret 7136 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7137 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7138 %negva = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7139 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %negva, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7140 ret <vscale x 8 x double> %v 7141} 7142 7143define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_neg_splat(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 7144; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat: 7145; CHECK: # %bb.0: 7146; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7147; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 7148; CHECK-NEXT: ret 7149 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7150 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7151 %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl) 7152 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 7153 ret <vscale x 8 x double> %v 7154} 7155 7156define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_neg_splat_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 zeroext %evl) { 7157; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_commute: 7158; CHECK: # %bb.0: 7159; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7160; CHECK-NEXT: vfnmsub.vf v8, fa0, v16, v0.t 7161; CHECK-NEXT: ret 7162 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7163 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7164 %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl) 7165 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> %m, i32 %evl) 7166 ret <vscale x 8 x double> %v 7167} 7168 7169define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_neg_splat_unmasked(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 7170; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked: 7171; CHECK: # %bb.0: 7172; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7173; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 7174; CHECK-NEXT: ret 7175 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7176 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7177 %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7178 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %negvb, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7179 ret <vscale x 8 x double> %v 7180} 7181 7182define <vscale x 8 x double> @vfnmsub_vf_nxv8f64_neg_splat_unmasked_commute(<vscale x 8 x double> %va, double %b, <vscale x 8 x double> %vc, i32 zeroext %evl) { 7183; CHECK-LABEL: vfnmsub_vf_nxv8f64_neg_splat_unmasked_commute: 7184; CHECK: # %bb.0: 7185; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 7186; CHECK-NEXT: vfnmsub.vf v8, fa0, v16 7187; CHECK-NEXT: ret 7188 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 7189 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 7190 %negvb = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7191 %v = call <vscale x 8 x double> @llvm.vp.fmuladd.nxv8f64(<vscale x 8 x double> %negvb, <vscale x 8 x double> %va, <vscale x 8 x double> %vc, <vscale x 8 x i1> splat (i1 true), i32 %evl) 7192 ret <vscale x 8 x double> %v 7193} 7194