brintos

brintos / llvm-project-archived public Read only

0
0
Text · 73.8 KiB · 6ecddef Raw
1374 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+m -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+m -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s6 7define <2 x half> @vfnmsac_vv_v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {8; CHECK-LABEL: vfnmsac_vv_v2f16:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu11; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t12; CHECK-NEXT:    vmv1r.v v8, v1013; CHECK-NEXT:    ret14  %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)15  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)16  %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)17  ret <2 x half> %u18}19 20define <2 x half> @vfnmsac_vv_v2f16_unmasked(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {21; CHECK-LABEL: vfnmsac_vv_v2f16_unmasked:22; CHECK:       # %bb.0:23; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma24; CHECK-NEXT:    vfnmsac.vv v10, v8, v925; CHECK-NEXT:    vmv1r.v v8, v1026; CHECK-NEXT:    ret27  %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)28  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)29  %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> splat (i1 -1), <2 x half> %v, <2 x half> %c, i32 %evl)30  ret <2 x half> %u31}32 33define <2 x half> @vfnmsac_vf_v2f16(<2 x half> %a, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {34; CHECK-LABEL: vfnmsac_vf_v2f16:35; CHECK:       # %bb.0:36; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu37; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t38; CHECK-NEXT:    vmv1r.v v8, v939; CHECK-NEXT:    ret40  %elt.head = insertelement <2 x half> poison, half %b, i32 041  %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer42  %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)43  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)44  %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)45  ret <2 x half> %u46}47 48define <2 x half> @vfnmsac_vf_v2f16_commute(<2 x half> %a, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {49; CHECK-LABEL: vfnmsac_vf_v2f16_commute:50; CHECK:       # %bb.0:51; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, mu52; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t53; CHECK-NEXT:    vmv1r.v v8, v954; CHECK-NEXT:    ret55  %elt.head = insertelement <2 x half> poison, half %b, i32 056  %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer57  %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)58  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %nega, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)59  %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)60  ret <2 x half> %u61}62 63define <2 x half> @vfnmsac_vf_v2f16_unmasked(<2 x half> %a, half %b, <2 x half> %c, i32 zeroext %evl) {64; CHECK-LABEL: vfnmsac_vf_v2f16_unmasked:65; CHECK:       # %bb.0:66; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma67; CHECK-NEXT:    vfnmsac.vf v9, fa0, v868; CHECK-NEXT:    vmv1r.v v8, v969; CHECK-NEXT:    ret70  %elt.head = insertelement <2 x half> poison, half %b, i32 071  %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer72  %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)73  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)74  %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> splat (i1 -1), <2 x half> %v, <2 x half> %c, i32 %evl)75  ret <2 x half> %u76}77 78define <2 x half> @vfnmsac_vv_v2f16_ta(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {79; CHECK-LABEL: vfnmsac_vv_v2f16_ta:80; CHECK:       # %bb.0:81; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu82; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t83; CHECK-NEXT:    vmv1r.v v8, v1084; CHECK-NEXT:    ret85  %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)86  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)87  %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)88  ret <2 x half> %u89}90 91define <2 x half> @vfnmsac_vf_v2f16_ta(<2 x half> %a, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {92; CHECK-LABEL: vfnmsac_vf_v2f16_ta:93; CHECK:       # %bb.0:94; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu95; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t96; CHECK-NEXT:    vmv1r.v v8, v997; CHECK-NEXT:    ret98  %elt.head = insertelement <2 x half> poison, half %b, i32 099  %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer100  %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)101  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %nega, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)102  %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)103  ret <2 x half> %u104}105 106define <2 x half> @vfnmsac_vf_v2f16_commute_ta(<2 x half> %a, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {107; CHECK-LABEL: vfnmsac_vf_v2f16_commute_ta:108; CHECK:       # %bb.0:109; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu110; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t111; CHECK-NEXT:    vmv1r.v v8, v9112; CHECK-NEXT:    ret113  %elt.head = insertelement <2 x half> poison, half %b, i32 0114  %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer115  %nega = call <2 x half> @llvm.vp.fneg.v2f16(<2 x half> %a, <2 x i1> splat (i1 -1), i32 %evl)116  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %nega, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)117  %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)118  ret <2 x half> %u119}120 121define <4 x half> @vfnmsac_vv_v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {122; CHECK-LABEL: vfnmsac_vv_v4f16:123; CHECK:       # %bb.0:124; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu125; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t126; CHECK-NEXT:    vmv1r.v v8, v10127; CHECK-NEXT:    ret128  %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)129  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)130  %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)131  ret <4 x half> %u132}133 134define <4 x half> @vfnmsac_vv_v4f16_unmasked(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {135; CHECK-LABEL: vfnmsac_vv_v4f16_unmasked:136; CHECK:       # %bb.0:137; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma138; CHECK-NEXT:    vfnmsac.vv v10, v8, v9139; CHECK-NEXT:    vmv1r.v v8, v10140; CHECK-NEXT:    ret141  %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)142  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)143  %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> splat (i1 -1), <4 x half> %v, <4 x half> %c, i32 %evl)144  ret <4 x half> %u145}146 147define <4 x half> @vfnmsac_vf_v4f16(<4 x half> %a, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {148; CHECK-LABEL: vfnmsac_vf_v4f16:149; CHECK:       # %bb.0:150; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu151; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t152; CHECK-NEXT:    vmv1r.v v8, v9153; CHECK-NEXT:    ret154  %elt.head = insertelement <4 x half> poison, half %b, i32 0155  %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer156  %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)157  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)158  %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)159  ret <4 x half> %u160}161 162define <4 x half> @vfnmsac_vf_v4f16_commute(<4 x half> %a, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {163; CHECK-LABEL: vfnmsac_vf_v4f16_commute:164; CHECK:       # %bb.0:165; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu166; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t167; CHECK-NEXT:    vmv1r.v v8, v9168; CHECK-NEXT:    ret169  %elt.head = insertelement <4 x half> poison, half %b, i32 0170  %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer171  %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)172  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %nega, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)173  %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)174  ret <4 x half> %u175}176 177define <4 x half> @vfnmsac_vf_v4f16_unmasked(<4 x half> %a, half %b, <4 x half> %c, i32 zeroext %evl) {178; CHECK-LABEL: vfnmsac_vf_v4f16_unmasked:179; CHECK:       # %bb.0:180; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma181; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8182; CHECK-NEXT:    vmv1r.v v8, v9183; CHECK-NEXT:    ret184  %elt.head = insertelement <4 x half> poison, half %b, i32 0185  %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer186  %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)187  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)188  %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> splat (i1 -1), <4 x half> %v, <4 x half> %c, i32 %evl)189  ret <4 x half> %u190}191 192define <4 x half> @vfnmsac_vv_v4f16_ta(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {193; CHECK-LABEL: vfnmsac_vv_v4f16_ta:194; CHECK:       # %bb.0:195; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu196; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t197; CHECK-NEXT:    vmv1r.v v8, v10198; CHECK-NEXT:    ret199  %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)200  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)201  %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)202  ret <4 x half> %u203}204 205define <4 x half> @vfnmsac_vf_v4f16_ta(<4 x half> %a, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {206; CHECK-LABEL: vfnmsac_vf_v4f16_ta:207; CHECK:       # %bb.0:208; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu209; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t210; CHECK-NEXT:    vmv1r.v v8, v9211; CHECK-NEXT:    ret212  %elt.head = insertelement <4 x half> poison, half %b, i32 0213  %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer214  %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)215  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %nega, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)216  %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)217  ret <4 x half> %u218}219 220define <4 x half> @vfnmsac_vf_v4f16_commute_ta(<4 x half> %a, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {221; CHECK-LABEL: vfnmsac_vf_v4f16_commute_ta:222; CHECK:       # %bb.0:223; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu224; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t225; CHECK-NEXT:    vmv1r.v v8, v9226; CHECK-NEXT:    ret227  %elt.head = insertelement <4 x half> poison, half %b, i32 0228  %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer229  %nega = call <4 x half> @llvm.vp.fneg.v4f16(<4 x half> %a, <4 x i1> splat (i1 -1), i32 %evl)230  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %nega, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)231  %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)232  ret <4 x half> %u233}234 235define <8 x half> @vfnmsac_vv_v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {236; CHECK-LABEL: vfnmsac_vv_v8f16:237; CHECK:       # %bb.0:238; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu239; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t240; CHECK-NEXT:    vmv1r.v v8, v10241; CHECK-NEXT:    ret242  %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)243  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)244  %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)245  ret <8 x half> %u246}247 248define <8 x half> @vfnmsac_vv_v8f16_unmasked(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {249; CHECK-LABEL: vfnmsac_vv_v8f16_unmasked:250; CHECK:       # %bb.0:251; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma252; CHECK-NEXT:    vfnmsac.vv v10, v8, v9253; CHECK-NEXT:    vmv1r.v v8, v10254; CHECK-NEXT:    ret255  %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)256  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)257  %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> splat (i1 -1), <8 x half> %v, <8 x half> %c, i32 %evl)258  ret <8 x half> %u259}260 261define <8 x half> @vfnmsac_vf_v8f16(<8 x half> %a, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {262; CHECK-LABEL: vfnmsac_vf_v8f16:263; CHECK:       # %bb.0:264; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu265; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t266; CHECK-NEXT:    vmv1r.v v8, v9267; CHECK-NEXT:    ret268  %elt.head = insertelement <8 x half> poison, half %b, i32 0269  %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer270  %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)271  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)272  %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)273  ret <8 x half> %u274}275 276define <8 x half> @vfnmsac_vf_v8f16_commute(<8 x half> %a, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {277; CHECK-LABEL: vfnmsac_vf_v8f16_commute:278; CHECK:       # %bb.0:279; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, mu280; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t281; CHECK-NEXT:    vmv1r.v v8, v9282; CHECK-NEXT:    ret283  %elt.head = insertelement <8 x half> poison, half %b, i32 0284  %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer285  %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)286  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %nega, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)287  %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)288  ret <8 x half> %u289}290 291define <8 x half> @vfnmsac_vf_v8f16_unmasked(<8 x half> %a, half %b, <8 x half> %c, i32 zeroext %evl) {292; CHECK-LABEL: vfnmsac_vf_v8f16_unmasked:293; CHECK:       # %bb.0:294; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma295; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8296; CHECK-NEXT:    vmv1r.v v8, v9297; CHECK-NEXT:    ret298  %elt.head = insertelement <8 x half> poison, half %b, i32 0299  %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer300  %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)301  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)302  %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> splat (i1 -1), <8 x half> %v, <8 x half> %c, i32 %evl)303  ret <8 x half> %u304}305 306define <8 x half> @vfnmsac_vv_v8f16_ta(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {307; CHECK-LABEL: vfnmsac_vv_v8f16_ta:308; CHECK:       # %bb.0:309; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu310; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t311; CHECK-NEXT:    vmv.v.v v8, v10312; CHECK-NEXT:    ret313  %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)314  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)315  %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)316  ret <8 x half> %u317}318 319define <8 x half> @vfnmsac_vf_v8f16_ta(<8 x half> %a, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {320; CHECK-LABEL: vfnmsac_vf_v8f16_ta:321; CHECK:       # %bb.0:322; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu323; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t324; CHECK-NEXT:    vmv.v.v v8, v9325; CHECK-NEXT:    ret326  %elt.head = insertelement <8 x half> poison, half %b, i32 0327  %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer328  %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)329  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %nega, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)330  %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)331  ret <8 x half> %u332}333 334define <8 x half> @vfnmsac_vf_v8f16_commute_ta(<8 x half> %a, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {335; CHECK-LABEL: vfnmsac_vf_v8f16_commute_ta:336; CHECK:       # %bb.0:337; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu338; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t339; CHECK-NEXT:    vmv.v.v v8, v9340; CHECK-NEXT:    ret341  %elt.head = insertelement <8 x half> poison, half %b, i32 0342  %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer343  %nega = call <8 x half> @llvm.vp.fneg.v8f16(<8 x half> %a, <8 x i1> splat (i1 -1), i32 %evl)344  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %nega, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)345  %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)346  ret <8 x half> %u347}348 349define <16 x half> @vfnmsac_vv_v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {350; CHECK-LABEL: vfnmsac_vv_v16f16:351; CHECK:       # %bb.0:352; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu353; CHECK-NEXT:    vfnmsac.vv v12, v8, v10, v0.t354; CHECK-NEXT:    vmv2r.v v8, v12355; CHECK-NEXT:    ret356  %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)357  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)358  %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)359  ret <16 x half> %u360}361 362define <16 x half> @vfnmsac_vv_v16f16_unmasked(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {363; CHECK-LABEL: vfnmsac_vv_v16f16_unmasked:364; CHECK:       # %bb.0:365; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma366; CHECK-NEXT:    vfnmsac.vv v12, v8, v10367; CHECK-NEXT:    vmv2r.v v8, v12368; CHECK-NEXT:    ret369  %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)370  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)371  %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> splat (i1 -1), <16 x half> %v, <16 x half> %c, i32 %evl)372  ret <16 x half> %u373}374 375define <16 x half> @vfnmsac_vf_v16f16(<16 x half> %a, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {376; CHECK-LABEL: vfnmsac_vf_v16f16:377; CHECK:       # %bb.0:378; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu379; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t380; CHECK-NEXT:    vmv2r.v v8, v10381; CHECK-NEXT:    ret382  %elt.head = insertelement <16 x half> poison, half %b, i32 0383  %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer384  %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)385  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)386  %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)387  ret <16 x half> %u388}389 390define <16 x half> @vfnmsac_vf_v16f16_commute(<16 x half> %a, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {391; CHECK-LABEL: vfnmsac_vf_v16f16_commute:392; CHECK:       # %bb.0:393; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, mu394; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t395; CHECK-NEXT:    vmv2r.v v8, v10396; CHECK-NEXT:    ret397  %elt.head = insertelement <16 x half> poison, half %b, i32 0398  %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer399  %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)400  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %nega, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)401  %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)402  ret <16 x half> %u403}404 405define <16 x half> @vfnmsac_vf_v16f16_unmasked(<16 x half> %a, half %b, <16 x half> %c, i32 zeroext %evl) {406; CHECK-LABEL: vfnmsac_vf_v16f16_unmasked:407; CHECK:       # %bb.0:408; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma409; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8410; CHECK-NEXT:    vmv2r.v v8, v10411; CHECK-NEXT:    ret412  %elt.head = insertelement <16 x half> poison, half %b, i32 0413  %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer414  %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)415  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)416  %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> splat (i1 -1), <16 x half> %v, <16 x half> %c, i32 %evl)417  ret <16 x half> %u418}419 420define <16 x half> @vfnmsac_vv_v16f16_ta(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {421; CHECK-LABEL: vfnmsac_vv_v16f16_ta:422; CHECK:       # %bb.0:423; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu424; CHECK-NEXT:    vfnmsac.vv v12, v8, v10, v0.t425; CHECK-NEXT:    vmv.v.v v8, v12426; CHECK-NEXT:    ret427  %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)428  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)429  %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)430  ret <16 x half> %u431}432 433define <16 x half> @vfnmsac_vf_v16f16_ta(<16 x half> %a, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {434; CHECK-LABEL: vfnmsac_vf_v16f16_ta:435; CHECK:       # %bb.0:436; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu437; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t438; CHECK-NEXT:    vmv.v.v v8, v10439; CHECK-NEXT:    ret440  %elt.head = insertelement <16 x half> poison, half %b, i32 0441  %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer442  %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)443  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %nega, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)444  %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)445  ret <16 x half> %u446}447 448define <16 x half> @vfnmsac_vf_v16f16_commute_ta(<16 x half> %a, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {449; CHECK-LABEL: vfnmsac_vf_v16f16_commute_ta:450; CHECK:       # %bb.0:451; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu452; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t453; CHECK-NEXT:    vmv.v.v v8, v10454; CHECK-NEXT:    ret455  %elt.head = insertelement <16 x half> poison, half %b, i32 0456  %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer457  %nega = call <16 x half> @llvm.vp.fneg.v16f16(<16 x half> %a, <16 x i1> splat (i1 -1), i32 %evl)458  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %nega, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)459  %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)460  ret <16 x half> %u461}462 463define <32 x half> @vfnmsac_vv_v26f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {464; CHECK-LABEL: vfnmsac_vv_v26f16:465; CHECK:       # %bb.0:466; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu467; CHECK-NEXT:    vfnmsac.vv v16, v8, v12, v0.t468; CHECK-NEXT:    vmv4r.v v8, v16469; CHECK-NEXT:    ret470  %nega = call <32 x half> @llvm.vp.fneg.v26f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)471  %v = call <32 x half> @llvm.vp.fma.v26f16(<32 x half> %nega, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)472  %u = call <32 x half> @llvm.vp.merge.v26f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)473  ret <32 x half> %u474}475 476define <32 x half> @vfnmsac_vv_v26f16_unmasked(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {477; CHECK-LABEL: vfnmsac_vv_v26f16_unmasked:478; CHECK:       # %bb.0:479; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma480; CHECK-NEXT:    vfnmsac.vv v16, v8, v12481; CHECK-NEXT:    vmv4r.v v8, v16482; CHECK-NEXT:    ret483  %nega = call <32 x half> @llvm.vp.fneg.v26f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)484  %v = call <32 x half> @llvm.vp.fma.v26f16(<32 x half> %nega, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)485  %u = call <32 x half> @llvm.vp.merge.v26f16(<32 x i1> splat (i1 -1), <32 x half> %v, <32 x half> %c, i32 %evl)486  ret <32 x half> %u487}488 489define <32 x half> @vfnmsac_vf_v26f16(<32 x half> %a, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {490; CHECK-LABEL: vfnmsac_vf_v26f16:491; CHECK:       # %bb.0:492; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu493; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t494; CHECK-NEXT:    vmv4r.v v8, v12495; CHECK-NEXT:    ret496  %elt.head = insertelement <32 x half> poison, half %b, i32 0497  %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer498  %nega = call <32 x half> @llvm.vp.fneg.v26f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)499  %v = call <32 x half> @llvm.vp.fma.v26f16(<32 x half> %nega, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)500  %u = call <32 x half> @llvm.vp.merge.v26f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)501  ret <32 x half> %u502}503 504define <32 x half> @vfnmsac_vf_v26f16_commute(<32 x half> %a, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {505; CHECK-LABEL: vfnmsac_vf_v26f16_commute:506; CHECK:       # %bb.0:507; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, mu508; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t509; CHECK-NEXT:    vmv4r.v v8, v12510; CHECK-NEXT:    ret511  %elt.head = insertelement <32 x half> poison, half %b, i32 0512  %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer513  %nega = call <32 x half> @llvm.vp.fneg.v26f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)514  %v = call <32 x half> @llvm.vp.fma.v26f16(<32 x half> %vb, <32 x half> %nega, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)515  %u = call <32 x half> @llvm.vp.merge.v26f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)516  ret <32 x half> %u517}518 519define <32 x half> @vfnmsac_vf_v26f16_unmasked(<32 x half> %a, half %b, <32 x half> %c, i32 zeroext %evl) {520; CHECK-LABEL: vfnmsac_vf_v26f16_unmasked:521; CHECK:       # %bb.0:522; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma523; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8524; CHECK-NEXT:    vmv4r.v v8, v12525; CHECK-NEXT:    ret526  %elt.head = insertelement <32 x half> poison, half %b, i32 0527  %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer528  %nega = call <32 x half> @llvm.vp.fneg.v26f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)529  %v = call <32 x half> @llvm.vp.fma.v26f16(<32 x half> %nega, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)530  %u = call <32 x half> @llvm.vp.merge.v26f16(<32 x i1> splat (i1 -1), <32 x half> %v, <32 x half> %c, i32 %evl)531  ret <32 x half> %u532}533 534define <32 x half> @vfnmsac_vv_v26f16_ta(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {535; CHECK-LABEL: vfnmsac_vv_v26f16_ta:536; CHECK:       # %bb.0:537; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu538; CHECK-NEXT:    vfnmsac.vv v16, v8, v12, v0.t539; CHECK-NEXT:    vmv.v.v v8, v16540; CHECK-NEXT:    ret541  %nega = call <32 x half> @llvm.vp.fneg.v26f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)542  %v = call <32 x half> @llvm.vp.fma.v26f16(<32 x half> %nega, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)543  %u = call <32 x half> @llvm.vp.select.v26f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)544  ret <32 x half> %u545}546 547define <32 x half> @vfnmsac_vf_v26f16_ta(<32 x half> %a, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {548; CHECK-LABEL: vfnmsac_vf_v26f16_ta:549; CHECK:       # %bb.0:550; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu551; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t552; CHECK-NEXT:    vmv.v.v v8, v12553; CHECK-NEXT:    ret554  %elt.head = insertelement <32 x half> poison, half %b, i32 0555  %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer556  %nega = call <32 x half> @llvm.vp.fneg.v26f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)557  %v = call <32 x half> @llvm.vp.fma.v26f16(<32 x half> %nega, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)558  %u = call <32 x half> @llvm.vp.select.v26f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)559  ret <32 x half> %u560}561 562define <32 x half> @vfnmsac_vf_v26f16_commute_ta(<32 x half> %a, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {563; CHECK-LABEL: vfnmsac_vf_v26f16_commute_ta:564; CHECK:       # %bb.0:565; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu566; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t567; CHECK-NEXT:    vmv.v.v v8, v12568; CHECK-NEXT:    ret569  %elt.head = insertelement <32 x half> poison, half %b, i32 0570  %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer571  %nega = call <32 x half> @llvm.vp.fneg.v26f16(<32 x half> %a, <32 x i1> splat (i1 -1), i32 %evl)572  %v = call <32 x half> @llvm.vp.fma.v26f16(<32 x half> %vb, <32 x half> %nega, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)573  %u = call <32 x half> @llvm.vp.select.v26f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)574  ret <32 x half> %u575}576 577define <2 x float> @vfnmsac_vv_v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {578; CHECK-LABEL: vfnmsac_vv_v2f32:579; CHECK:       # %bb.0:580; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu581; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t582; CHECK-NEXT:    vmv1r.v v8, v10583; CHECK-NEXT:    ret584  %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)585  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)586  %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)587  ret <2 x float> %u588}589 590define <2 x float> @vfnmsac_vv_v2f32_unmasked(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {591; CHECK-LABEL: vfnmsac_vv_v2f32_unmasked:592; CHECK:       # %bb.0:593; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma594; CHECK-NEXT:    vfnmsac.vv v10, v8, v9595; CHECK-NEXT:    vmv1r.v v8, v10596; CHECK-NEXT:    ret597  %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)598  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)599  %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> splat (i1 -1), <2 x float> %v, <2 x float> %c, i32 %evl)600  ret <2 x float> %u601}602 603define <2 x float> @vfnmsac_vf_v2f32(<2 x float> %a, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {604; CHECK-LABEL: vfnmsac_vf_v2f32:605; CHECK:       # %bb.0:606; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu607; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t608; CHECK-NEXT:    vmv1r.v v8, v9609; CHECK-NEXT:    ret610  %elt.head = insertelement <2 x float> poison, float %b, i32 0611  %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer612  %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)613  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)614  %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)615  ret <2 x float> %u616}617 618define <2 x float> @vfnmsac_vf_v2f32_commute(<2 x float> %a, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {619; CHECK-LABEL: vfnmsac_vf_v2f32_commute:620; CHECK:       # %bb.0:621; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, mu622; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t623; CHECK-NEXT:    vmv1r.v v8, v9624; CHECK-NEXT:    ret625  %elt.head = insertelement <2 x float> poison, float %b, i32 0626  %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer627  %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)628  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %nega, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)629  %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)630  ret <2 x float> %u631}632 633define <2 x float> @vfnmsac_vf_v2f32_unmasked(<2 x float> %a, float %b, <2 x float> %c, i32 zeroext %evl) {634; CHECK-LABEL: vfnmsac_vf_v2f32_unmasked:635; CHECK:       # %bb.0:636; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma637; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8638; CHECK-NEXT:    vmv1r.v v8, v9639; CHECK-NEXT:    ret640  %elt.head = insertelement <2 x float> poison, float %b, i32 0641  %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer642  %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)643  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)644  %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> splat (i1 -1), <2 x float> %v, <2 x float> %c, i32 %evl)645  ret <2 x float> %u646}647 648define <2 x float> @vfnmsac_vv_v2f32_ta(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {649; CHECK-LABEL: vfnmsac_vv_v2f32_ta:650; CHECK:       # %bb.0:651; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu652; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t653; CHECK-NEXT:    vmv1r.v v8, v10654; CHECK-NEXT:    ret655  %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)656  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)657  %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)658  ret <2 x float> %u659}660 661define <2 x float> @vfnmsac_vf_v2f32_ta(<2 x float> %a, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {662; CHECK-LABEL: vfnmsac_vf_v2f32_ta:663; CHECK:       # %bb.0:664; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu665; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t666; CHECK-NEXT:    vmv1r.v v8, v9667; CHECK-NEXT:    ret668  %elt.head = insertelement <2 x float> poison, float %b, i32 0669  %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer670  %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)671  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %nega, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)672  %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)673  ret <2 x float> %u674}675 676define <2 x float> @vfnmsac_vf_v2f32_commute_ta(<2 x float> %a, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {677; CHECK-LABEL: vfnmsac_vf_v2f32_commute_ta:678; CHECK:       # %bb.0:679; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu680; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t681; CHECK-NEXT:    vmv1r.v v8, v9682; CHECK-NEXT:    ret683  %elt.head = insertelement <2 x float> poison, float %b, i32 0684  %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer685  %nega = call <2 x float> @llvm.vp.fneg.v2f32(<2 x float> %a, <2 x i1> splat (i1 -1), i32 %evl)686  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %nega, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)687  %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)688  ret <2 x float> %u689}690 691define <4 x float> @vfnmsac_vv_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {692; CHECK-LABEL: vfnmsac_vv_v4f32:693; CHECK:       # %bb.0:694; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu695; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t696; CHECK-NEXT:    vmv1r.v v8, v10697; CHECK-NEXT:    ret698  %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)699  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)700  %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)701  ret <4 x float> %u702}703 704define <4 x float> @vfnmsac_vv_v4f32_unmasked(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {705; CHECK-LABEL: vfnmsac_vv_v4f32_unmasked:706; CHECK:       # %bb.0:707; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma708; CHECK-NEXT:    vfnmsac.vv v10, v8, v9709; CHECK-NEXT:    vmv1r.v v8, v10710; CHECK-NEXT:    ret711  %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)712  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)713  %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> splat (i1 -1), <4 x float> %v, <4 x float> %c, i32 %evl)714  ret <4 x float> %u715}716 717define <4 x float> @vfnmsac_vf_v4f32(<4 x float> %a, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {718; CHECK-LABEL: vfnmsac_vf_v4f32:719; CHECK:       # %bb.0:720; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu721; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t722; CHECK-NEXT:    vmv1r.v v8, v9723; CHECK-NEXT:    ret724  %elt.head = insertelement <4 x float> poison, float %b, i32 0725  %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer726  %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)727  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)728  %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)729  ret <4 x float> %u730}731 732define <4 x float> @vfnmsac_vf_v4f32_commute(<4 x float> %a, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {733; CHECK-LABEL: vfnmsac_vf_v4f32_commute:734; CHECK:       # %bb.0:735; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu736; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t737; CHECK-NEXT:    vmv1r.v v8, v9738; CHECK-NEXT:    ret739  %elt.head = insertelement <4 x float> poison, float %b, i32 0740  %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer741  %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)742  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %nega, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)743  %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)744  ret <4 x float> %u745}746 747define <4 x float> @vfnmsac_vf_v4f32_unmasked(<4 x float> %a, float %b, <4 x float> %c, i32 zeroext %evl) {748; CHECK-LABEL: vfnmsac_vf_v4f32_unmasked:749; CHECK:       # %bb.0:750; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma751; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8752; CHECK-NEXT:    vmv1r.v v8, v9753; CHECK-NEXT:    ret754  %elt.head = insertelement <4 x float> poison, float %b, i32 0755  %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer756  %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)757  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)758  %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> splat (i1 -1), <4 x float> %v, <4 x float> %c, i32 %evl)759  ret <4 x float> %u760}761 762define <4 x float> @vfnmsac_vv_v4f32_ta(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {763; CHECK-LABEL: vfnmsac_vv_v4f32_ta:764; CHECK:       # %bb.0:765; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu766; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t767; CHECK-NEXT:    vmv.v.v v8, v10768; CHECK-NEXT:    ret769  %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)770  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)771  %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)772  ret <4 x float> %u773}774 775define <4 x float> @vfnmsac_vf_v4f32_ta(<4 x float> %a, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {776; CHECK-LABEL: vfnmsac_vf_v4f32_ta:777; CHECK:       # %bb.0:778; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu779; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t780; CHECK-NEXT:    vmv.v.v v8, v9781; CHECK-NEXT:    ret782  %elt.head = insertelement <4 x float> poison, float %b, i32 0783  %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer784  %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)785  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %nega, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)786  %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)787  ret <4 x float> %u788}789 790define <4 x float> @vfnmsac_vf_v4f32_commute_ta(<4 x float> %a, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {791; CHECK-LABEL: vfnmsac_vf_v4f32_commute_ta:792; CHECK:       # %bb.0:793; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu794; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t795; CHECK-NEXT:    vmv.v.v v8, v9796; CHECK-NEXT:    ret797  %elt.head = insertelement <4 x float> poison, float %b, i32 0798  %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer799  %nega = call <4 x float> @llvm.vp.fneg.v4f32(<4 x float> %a, <4 x i1> splat (i1 -1), i32 %evl)800  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %nega, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)801  %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)802  ret <4 x float> %u803}804 805define <8 x float> @vfnmsac_vv_v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {806; CHECK-LABEL: vfnmsac_vv_v8f32:807; CHECK:       # %bb.0:808; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu809; CHECK-NEXT:    vfnmsac.vv v12, v8, v10, v0.t810; CHECK-NEXT:    vmv2r.v v8, v12811; CHECK-NEXT:    ret812  %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)813  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)814  %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)815  ret <8 x float> %u816}817 818define <8 x float> @vfnmsac_vv_v8f32_unmasked(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {819; CHECK-LABEL: vfnmsac_vv_v8f32_unmasked:820; CHECK:       # %bb.0:821; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma822; CHECK-NEXT:    vfnmsac.vv v12, v8, v10823; CHECK-NEXT:    vmv2r.v v8, v12824; CHECK-NEXT:    ret825  %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)826  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)827  %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> splat (i1 -1), <8 x float> %v, <8 x float> %c, i32 %evl)828  ret <8 x float> %u829}830 831define <8 x float> @vfnmsac_vf_v8f32(<8 x float> %a, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {832; CHECK-LABEL: vfnmsac_vf_v8f32:833; CHECK:       # %bb.0:834; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu835; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t836; CHECK-NEXT:    vmv2r.v v8, v10837; CHECK-NEXT:    ret838  %elt.head = insertelement <8 x float> poison, float %b, i32 0839  %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer840  %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)841  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)842  %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)843  ret <8 x float> %u844}845 846define <8 x float> @vfnmsac_vf_v8f32_commute(<8 x float> %a, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {847; CHECK-LABEL: vfnmsac_vf_v8f32_commute:848; CHECK:       # %bb.0:849; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, mu850; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t851; CHECK-NEXT:    vmv2r.v v8, v10852; CHECK-NEXT:    ret853  %elt.head = insertelement <8 x float> poison, float %b, i32 0854  %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer855  %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)856  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %nega, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)857  %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)858  ret <8 x float> %u859}860 861define <8 x float> @vfnmsac_vf_v8f32_unmasked(<8 x float> %a, float %b, <8 x float> %c, i32 zeroext %evl) {862; CHECK-LABEL: vfnmsac_vf_v8f32_unmasked:863; CHECK:       # %bb.0:864; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma865; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8866; CHECK-NEXT:    vmv2r.v v8, v10867; CHECK-NEXT:    ret868  %elt.head = insertelement <8 x float> poison, float %b, i32 0869  %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer870  %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)871  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)872  %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> splat (i1 -1), <8 x float> %v, <8 x float> %c, i32 %evl)873  ret <8 x float> %u874}875 876define <8 x float> @vfnmsac_vv_v8f32_ta(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {877; CHECK-LABEL: vfnmsac_vv_v8f32_ta:878; CHECK:       # %bb.0:879; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu880; CHECK-NEXT:    vfnmsac.vv v12, v8, v10, v0.t881; CHECK-NEXT:    vmv.v.v v8, v12882; CHECK-NEXT:    ret883  %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)884  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)885  %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)886  ret <8 x float> %u887}888 889define <8 x float> @vfnmsac_vf_v8f32_ta(<8 x float> %a, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {890; CHECK-LABEL: vfnmsac_vf_v8f32_ta:891; CHECK:       # %bb.0:892; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu893; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t894; CHECK-NEXT:    vmv.v.v v8, v10895; CHECK-NEXT:    ret896  %elt.head = insertelement <8 x float> poison, float %b, i32 0897  %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer898  %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)899  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %nega, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)900  %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)901  ret <8 x float> %u902}903 904define <8 x float> @vfnmsac_vf_v8f32_commute_ta(<8 x float> %a, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {905; CHECK-LABEL: vfnmsac_vf_v8f32_commute_ta:906; CHECK:       # %bb.0:907; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu908; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t909; CHECK-NEXT:    vmv.v.v v8, v10910; CHECK-NEXT:    ret911  %elt.head = insertelement <8 x float> poison, float %b, i32 0912  %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer913  %nega = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %a, <8 x i1> splat (i1 -1), i32 %evl)914  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %nega, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)915  %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)916  ret <8 x float> %u917}918 919define <16 x float> @vfnmsac_vv_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {920; CHECK-LABEL: vfnmsac_vv_v16f32:921; CHECK:       # %bb.0:922; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu923; CHECK-NEXT:    vfnmsac.vv v16, v8, v12, v0.t924; CHECK-NEXT:    vmv4r.v v8, v16925; CHECK-NEXT:    ret926  %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)927  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)928  %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)929  ret <16 x float> %u930}931 932define <16 x float> @vfnmsac_vv_v16f32_unmasked(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {933; CHECK-LABEL: vfnmsac_vv_v16f32_unmasked:934; CHECK:       # %bb.0:935; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma936; CHECK-NEXT:    vfnmsac.vv v16, v8, v12937; CHECK-NEXT:    vmv4r.v v8, v16938; CHECK-NEXT:    ret939  %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)940  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)941  %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> splat (i1 -1), <16 x float> %v, <16 x float> %c, i32 %evl)942  ret <16 x float> %u943}944 945define <16 x float> @vfnmsac_vf_v16f32(<16 x float> %a, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {946; CHECK-LABEL: vfnmsac_vf_v16f32:947; CHECK:       # %bb.0:948; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu949; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t950; CHECK-NEXT:    vmv4r.v v8, v12951; CHECK-NEXT:    ret952  %elt.head = insertelement <16 x float> poison, float %b, i32 0953  %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer954  %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)955  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)956  %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)957  ret <16 x float> %u958}959 960define <16 x float> @vfnmsac_vf_v16f32_commute(<16 x float> %a, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {961; CHECK-LABEL: vfnmsac_vf_v16f32_commute:962; CHECK:       # %bb.0:963; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, mu964; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t965; CHECK-NEXT:    vmv4r.v v8, v12966; CHECK-NEXT:    ret967  %elt.head = insertelement <16 x float> poison, float %b, i32 0968  %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer969  %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)970  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %nega, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)971  %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)972  ret <16 x float> %u973}974 975define <16 x float> @vfnmsac_vf_v16f32_unmasked(<16 x float> %a, float %b, <16 x float> %c, i32 zeroext %evl) {976; CHECK-LABEL: vfnmsac_vf_v16f32_unmasked:977; CHECK:       # %bb.0:978; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma979; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8980; CHECK-NEXT:    vmv4r.v v8, v12981; CHECK-NEXT:    ret982  %elt.head = insertelement <16 x float> poison, float %b, i32 0983  %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer984  %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)985  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)986  %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> splat (i1 -1), <16 x float> %v, <16 x float> %c, i32 %evl)987  ret <16 x float> %u988}989 990define <16 x float> @vfnmsac_vv_v16f32_ta(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {991; CHECK-LABEL: vfnmsac_vv_v16f32_ta:992; CHECK:       # %bb.0:993; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu994; CHECK-NEXT:    vfnmsac.vv v16, v8, v12, v0.t995; CHECK-NEXT:    vmv.v.v v8, v16996; CHECK-NEXT:    ret997  %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)998  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)999  %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)1000  ret <16 x float> %u1001}1002 1003define <16 x float> @vfnmsac_vf_v16f32_ta(<16 x float> %a, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {1004; CHECK-LABEL: vfnmsac_vf_v16f32_ta:1005; CHECK:       # %bb.0:1006; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu1007; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t1008; CHECK-NEXT:    vmv.v.v v8, v121009; CHECK-NEXT:    ret1010  %elt.head = insertelement <16 x float> poison, float %b, i32 01011  %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer1012  %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1013  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %nega, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1014  %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)1015  ret <16 x float> %u1016}1017 1018define <16 x float> @vfnmsac_vf_v16f32_commute_ta(<16 x float> %a, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {1019; CHECK-LABEL: vfnmsac_vf_v16f32_commute_ta:1020; CHECK:       # %bb.0:1021; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu1022; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t1023; CHECK-NEXT:    vmv.v.v v8, v121024; CHECK-NEXT:    ret1025  %elt.head = insertelement <16 x float> poison, float %b, i32 01026  %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer1027  %nega = call <16 x float> @llvm.vp.fneg.v16f32(<16 x float> %a, <16 x i1> splat (i1 -1), i32 %evl)1028  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %nega, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)1029  %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)1030  ret <16 x float> %u1031}1032 1033define <2 x double> @vfnmsac_vv_v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1034; CHECK-LABEL: vfnmsac_vv_v2f64:1035; CHECK:       # %bb.0:1036; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu1037; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t1038; CHECK-NEXT:    vmv1r.v v8, v101039; CHECK-NEXT:    ret1040  %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1041  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1042  %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1043  ret <2 x double> %u1044}1045 1046define <2 x double> @vfnmsac_vv_v2f64_unmasked(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1047; CHECK-LABEL: vfnmsac_vv_v2f64_unmasked:1048; CHECK:       # %bb.0:1049; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma1050; CHECK-NEXT:    vfnmsac.vv v10, v8, v91051; CHECK-NEXT:    vmv1r.v v8, v101052; CHECK-NEXT:    ret1053  %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1054  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1055  %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> splat (i1 -1), <2 x double> %v, <2 x double> %c, i32 %evl)1056  ret <2 x double> %u1057}1058 1059define <2 x double> @vfnmsac_vf_v2f64(<2 x double> %a, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1060; CHECK-LABEL: vfnmsac_vf_v2f64:1061; CHECK:       # %bb.0:1062; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu1063; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t1064; CHECK-NEXT:    vmv1r.v v8, v91065; CHECK-NEXT:    ret1066  %elt.head = insertelement <2 x double> poison, double %b, i32 01067  %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1068  %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1069  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1070  %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1071  ret <2 x double> %u1072}1073 1074define <2 x double> @vfnmsac_vf_v2f64_commute(<2 x double> %a, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1075; CHECK-LABEL: vfnmsac_vf_v2f64_commute:1076; CHECK:       # %bb.0:1077; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, mu1078; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t1079; CHECK-NEXT:    vmv1r.v v8, v91080; CHECK-NEXT:    ret1081  %elt.head = insertelement <2 x double> poison, double %b, i32 01082  %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1083  %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1084  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %nega, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1085  %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1086  ret <2 x double> %u1087}1088 1089define <2 x double> @vfnmsac_vf_v2f64_unmasked(<2 x double> %a, double %b, <2 x double> %c, i32 zeroext %evl) {1090; CHECK-LABEL: vfnmsac_vf_v2f64_unmasked:1091; CHECK:       # %bb.0:1092; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma1093; CHECK-NEXT:    vfnmsac.vf v9, fa0, v81094; CHECK-NEXT:    vmv1r.v v8, v91095; CHECK-NEXT:    ret1096  %elt.head = insertelement <2 x double> poison, double %b, i32 01097  %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1098  %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1099  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1100  %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> splat (i1 -1), <2 x double> %v, <2 x double> %c, i32 %evl)1101  ret <2 x double> %u1102}1103 1104define <2 x double> @vfnmsac_vv_v2f64_ta(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1105; CHECK-LABEL: vfnmsac_vv_v2f64_ta:1106; CHECK:       # %bb.0:1107; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu1108; CHECK-NEXT:    vfnmsac.vv v10, v8, v9, v0.t1109; CHECK-NEXT:    vmv.v.v v8, v101110; CHECK-NEXT:    ret1111  %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1112  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1113  %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1114  ret <2 x double> %u1115}1116 1117define <2 x double> @vfnmsac_vf_v2f64_ta(<2 x double> %a, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1118; CHECK-LABEL: vfnmsac_vf_v2f64_ta:1119; CHECK:       # %bb.0:1120; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu1121; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t1122; CHECK-NEXT:    vmv.v.v v8, v91123; CHECK-NEXT:    ret1124  %elt.head = insertelement <2 x double> poison, double %b, i32 01125  %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1126  %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1127  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %nega, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1128  %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1129  ret <2 x double> %u1130}1131 1132define <2 x double> @vfnmsac_vf_v2f64_commute_ta(<2 x double> %a, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1133; CHECK-LABEL: vfnmsac_vf_v2f64_commute_ta:1134; CHECK:       # %bb.0:1135; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu1136; CHECK-NEXT:    vfnmsac.vf v9, fa0, v8, v0.t1137; CHECK-NEXT:    vmv.v.v v8, v91138; CHECK-NEXT:    ret1139  %elt.head = insertelement <2 x double> poison, double %b, i32 01140  %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1141  %nega = call <2 x double> @llvm.vp.fneg.v2f64(<2 x double> %a, <2 x i1> splat (i1 -1), i32 %evl)1142  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %nega, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1143  %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1144  ret <2 x double> %u1145}1146 1147define <4 x double> @vfnmsac_vv_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1148; CHECK-LABEL: vfnmsac_vv_v4f64:1149; CHECK:       # %bb.0:1150; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu1151; CHECK-NEXT:    vfnmsac.vv v12, v8, v10, v0.t1152; CHECK-NEXT:    vmv2r.v v8, v121153; CHECK-NEXT:    ret1154  %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1155  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1156  %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1157  ret <4 x double> %u1158}1159 1160define <4 x double> @vfnmsac_vv_v4f64_unmasked(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1161; CHECK-LABEL: vfnmsac_vv_v4f64_unmasked:1162; CHECK:       # %bb.0:1163; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma1164; CHECK-NEXT:    vfnmsac.vv v12, v8, v101165; CHECK-NEXT:    vmv2r.v v8, v121166; CHECK-NEXT:    ret1167  %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1168  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1169  %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> splat (i1 -1), <4 x double> %v, <4 x double> %c, i32 %evl)1170  ret <4 x double> %u1171}1172 1173define <4 x double> @vfnmsac_vf_v4f64(<4 x double> %a, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1174; CHECK-LABEL: vfnmsac_vf_v4f64:1175; CHECK:       # %bb.0:1176; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu1177; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t1178; CHECK-NEXT:    vmv2r.v v8, v101179; CHECK-NEXT:    ret1180  %elt.head = insertelement <4 x double> poison, double %b, i32 01181  %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1182  %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1183  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1184  %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1185  ret <4 x double> %u1186}1187 1188define <4 x double> @vfnmsac_vf_v4f64_commute(<4 x double> %a, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1189; CHECK-LABEL: vfnmsac_vf_v4f64_commute:1190; CHECK:       # %bb.0:1191; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, mu1192; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t1193; CHECK-NEXT:    vmv2r.v v8, v101194; CHECK-NEXT:    ret1195  %elt.head = insertelement <4 x double> poison, double %b, i32 01196  %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1197  %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1198  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %nega, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1199  %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1200  ret <4 x double> %u1201}1202 1203define <4 x double> @vfnmsac_vf_v4f64_unmasked(<4 x double> %a, double %b, <4 x double> %c, i32 zeroext %evl) {1204; CHECK-LABEL: vfnmsac_vf_v4f64_unmasked:1205; CHECK:       # %bb.0:1206; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma1207; CHECK-NEXT:    vfnmsac.vf v10, fa0, v81208; CHECK-NEXT:    vmv2r.v v8, v101209; CHECK-NEXT:    ret1210  %elt.head = insertelement <4 x double> poison, double %b, i32 01211  %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1212  %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1213  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1214  %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> splat (i1 -1), <4 x double> %v, <4 x double> %c, i32 %evl)1215  ret <4 x double> %u1216}1217 1218define <4 x double> @vfnmsac_vv_v4f64_ta(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1219; CHECK-LABEL: vfnmsac_vv_v4f64_ta:1220; CHECK:       # %bb.0:1221; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu1222; CHECK-NEXT:    vfnmsac.vv v12, v8, v10, v0.t1223; CHECK-NEXT:    vmv.v.v v8, v121224; CHECK-NEXT:    ret1225  %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1226  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1227  %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1228  ret <4 x double> %u1229}1230 1231define <4 x double> @vfnmsac_vf_v4f64_ta(<4 x double> %a, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1232; CHECK-LABEL: vfnmsac_vf_v4f64_ta:1233; CHECK:       # %bb.0:1234; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu1235; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t1236; CHECK-NEXT:    vmv.v.v v8, v101237; CHECK-NEXT:    ret1238  %elt.head = insertelement <4 x double> poison, double %b, i32 01239  %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1240  %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1241  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %nega, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1242  %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1243  ret <4 x double> %u1244}1245 1246define <4 x double> @vfnmsac_vf_v4f64_commute_ta(<4 x double> %a, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1247; CHECK-LABEL: vfnmsac_vf_v4f64_commute_ta:1248; CHECK:       # %bb.0:1249; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu1250; CHECK-NEXT:    vfnmsac.vf v10, fa0, v8, v0.t1251; CHECK-NEXT:    vmv.v.v v8, v101252; CHECK-NEXT:    ret1253  %elt.head = insertelement <4 x double> poison, double %b, i32 01254  %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1255  %nega = call <4 x double> @llvm.vp.fneg.v4f64(<4 x double> %a, <4 x i1> splat (i1 -1), i32 %evl)1256  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %nega, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1257  %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1258  ret <4 x double> %u1259}1260 1261define <8 x double> @vfnmsac_vv_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1262; CHECK-LABEL: vfnmsac_vv_v8f64:1263; CHECK:       # %bb.0:1264; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu1265; CHECK-NEXT:    vfnmsac.vv v16, v8, v12, v0.t1266; CHECK-NEXT:    vmv4r.v v8, v161267; CHECK-NEXT:    ret1268  %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1269  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1270  %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1271  ret <8 x double> %u1272}1273 1274define <8 x double> @vfnmsac_vv_v8f64_unmasked(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1275; CHECK-LABEL: vfnmsac_vv_v8f64_unmasked:1276; CHECK:       # %bb.0:1277; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma1278; CHECK-NEXT:    vfnmsac.vv v16, v8, v121279; CHECK-NEXT:    vmv4r.v v8, v161280; CHECK-NEXT:    ret1281  %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1282  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1283  %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> splat (i1 -1), <8 x double> %v, <8 x double> %c, i32 %evl)1284  ret <8 x double> %u1285}1286 1287define <8 x double> @vfnmsac_vf_v8f64(<8 x double> %a, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1288; CHECK-LABEL: vfnmsac_vf_v8f64:1289; CHECK:       # %bb.0:1290; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu1291; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t1292; CHECK-NEXT:    vmv4r.v v8, v121293; CHECK-NEXT:    ret1294  %elt.head = insertelement <8 x double> poison, double %b, i32 01295  %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1296  %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1297  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1298  %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1299  ret <8 x double> %u1300}1301 1302define <8 x double> @vfnmsac_vf_v8f64_commute(<8 x double> %a, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1303; CHECK-LABEL: vfnmsac_vf_v8f64_commute:1304; CHECK:       # %bb.0:1305; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, mu1306; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t1307; CHECK-NEXT:    vmv4r.v v8, v121308; CHECK-NEXT:    ret1309  %elt.head = insertelement <8 x double> poison, double %b, i32 01310  %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1311  %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1312  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %nega, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1313  %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1314  ret <8 x double> %u1315}1316 1317define <8 x double> @vfnmsac_vf_v8f64_unmasked(<8 x double> %a, double %b, <8 x double> %c, i32 zeroext %evl) {1318; CHECK-LABEL: vfnmsac_vf_v8f64_unmasked:1319; CHECK:       # %bb.0:1320; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma1321; CHECK-NEXT:    vfnmsac.vf v12, fa0, v81322; CHECK-NEXT:    vmv4r.v v8, v121323; CHECK-NEXT:    ret1324  %elt.head = insertelement <8 x double> poison, double %b, i32 01325  %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1326  %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1327  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1328  %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> splat (i1 -1), <8 x double> %v, <8 x double> %c, i32 %evl)1329  ret <8 x double> %u1330}1331 1332define <8 x double> @vfnmsac_vv_v8f64_ta(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1333; CHECK-LABEL: vfnmsac_vv_v8f64_ta:1334; CHECK:       # %bb.0:1335; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu1336; CHECK-NEXT:    vfnmsac.vv v16, v8, v12, v0.t1337; CHECK-NEXT:    vmv.v.v v8, v161338; CHECK-NEXT:    ret1339  %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1340  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1341  %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1342  ret <8 x double> %u1343}1344 1345define <8 x double> @vfnmsac_vf_v8f64_ta(<8 x double> %a, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1346; CHECK-LABEL: vfnmsac_vf_v8f64_ta:1347; CHECK:       # %bb.0:1348; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu1349; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t1350; CHECK-NEXT:    vmv.v.v v8, v121351; CHECK-NEXT:    ret1352  %elt.head = insertelement <8 x double> poison, double %b, i32 01353  %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1354  %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1355  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %nega, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1356  %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1357  ret <8 x double> %u1358}1359 1360define <8 x double> @vfnmsac_vf_v8f64_commute_ta(<8 x double> %a, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1361; CHECK-LABEL: vfnmsac_vf_v8f64_commute_ta:1362; CHECK:       # %bb.0:1363; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu1364; CHECK-NEXT:    vfnmsac.vf v12, fa0, v8, v0.t1365; CHECK-NEXT:    vmv.v.v v8, v121366; CHECK-NEXT:    ret1367  %elt.head = insertelement <8 x double> poison, double %b, i32 01368  %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1369  %nega = call <8 x double> @llvm.vp.fneg.v8f64(<8 x double> %a, <8 x i1> splat (i1 -1), i32 %evl)1370  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %nega, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1371  %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1372  ret <8 x double> %u1373}1374