brintos

brintos / llvm-project-archived public Read only

0
0
Text · 57.2 KiB · ef00edb Raw
960 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=ilp32d \7; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=lp64d \9; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN10 11define <vscale x 1 x float> @vfnmsac_vv_nxv1f32(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {12; ZVFH-LABEL: vfnmsac_vv_nxv1f32:13; ZVFH:       # %bb.0:14; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma15; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t16; ZVFH-NEXT:    vmv1r.v v8, v1017; ZVFH-NEXT:    ret18;19; ZVFHMIN-LABEL: vfnmsac_vv_nxv1f32:20; ZVFHMIN:       # %bb.0:21; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma22; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t23; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t24; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma25; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v10, v0.t26; ZVFHMIN-NEXT:    ret27  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)28  %bext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)29  %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> %m, i32 %evl)30  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %bext, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)31  ret <vscale x 1 x float> %v32}33 34define <vscale x 1 x float> @vfnmsac_vv_nxv1f32_unmasked(<vscale x 1 x half> %a, <vscale x 1 x half> %b, <vscale x 1 x float> %c, i32 zeroext %evl) {35; ZVFH-LABEL: vfnmsac_vv_nxv1f32_unmasked:36; ZVFH:       # %bb.0:37; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma38; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v939; ZVFH-NEXT:    vmv1r.v v8, v1040; ZVFH-NEXT:    ret41;42; ZVFHMIN-LABEL: vfnmsac_vv_nxv1f32_unmasked:43; ZVFHMIN:       # %bb.0:44; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma45; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v846; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v947; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma48; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v1049; ZVFHMIN-NEXT:    ret50  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)51  %bext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)52  %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> splat (i1 -1), i32 %evl)53  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %bext, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)54  ret <vscale x 1 x float> %v55}56 57define <vscale x 1 x float> @vfnmsac_vf_nxv1f32(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {58; ZVFH-LABEL: vfnmsac_vf_nxv1f32:59; ZVFH:       # %bb.0:60; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma61; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t62; ZVFH-NEXT:    vmv1r.v v8, v963; ZVFH-NEXT:    ret64;65; ZVFHMIN-LABEL: vfnmsac_vf_nxv1f32:66; ZVFHMIN:       # %bb.0:67; ZVFHMIN-NEXT:    fmv.x.h a1, fa068; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma69; ZVFHMIN-NEXT:    vmv.v.x v10, a170; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t71; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t72; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma73; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v9, v0.t74; ZVFHMIN-NEXT:    ret75  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 076  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer77  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)78  %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)79  %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> %m, i32 %evl)80  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %vbext, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)81  ret <vscale x 1 x float> %v82}83 84define <vscale x 1 x float> @vfnmsac_vf_nxv1f32_commute(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {85; ZVFH-LABEL: vfnmsac_vf_nxv1f32_commute:86; ZVFH:       # %bb.0:87; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma88; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t89; ZVFH-NEXT:    vmv1r.v v8, v990; ZVFH-NEXT:    ret91;92; ZVFHMIN-LABEL: vfnmsac_vf_nxv1f32_commute:93; ZVFHMIN:       # %bb.0:94; ZVFHMIN-NEXT:    fmv.x.h a1, fa095; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma96; ZVFHMIN-NEXT:    vmv.v.x v11, a197; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t98; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v11, v0.t99; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma100; ZVFHMIN-NEXT:    vfnmsub.vv v10, v8, v9, v0.t101; ZVFHMIN-NEXT:    vmv1r.v v8, v10102; ZVFHMIN-NEXT:    ret103  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0104  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer105  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> %m, i32 %evl)106  %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)107  %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> %m, i32 %evl)108  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %vbext, <vscale x 1 x float> %nega, <vscale x 1 x float> %c, <vscale x 1 x i1> %m, i32 %evl)109  ret <vscale x 1 x float> %v110}111 112define <vscale x 1 x float> @vfnmsac_vf_nxv1f32_unmasked(<vscale x 1 x half> %a, half %b, <vscale x 1 x float> %c, i32 zeroext %evl) {113; ZVFH-LABEL: vfnmsac_vf_nxv1f32_unmasked:114; ZVFH:       # %bb.0:115; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma116; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8117; ZVFH-NEXT:    vmv1r.v v8, v9118; ZVFH-NEXT:    ret119;120; ZVFHMIN-LABEL: vfnmsac_vf_nxv1f32_unmasked:121; ZVFHMIN:       # %bb.0:122; ZVFHMIN-NEXT:    fmv.x.h a1, fa0123; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma124; ZVFHMIN-NEXT:    vmv.v.x v10, a1125; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8126; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10127; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma128; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v9129; ZVFHMIN-NEXT:    ret130  %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0131  %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer132  %aext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)133  %vbext = call <vscale x 1 x float> @llvm.vp.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)134  %nega = call <vscale x 1 x float> @llvm.vp.fneg.nxv1f32(<vscale x 1 x float> %aext, <vscale x 1 x i1> splat (i1 -1), i32 %evl)135  %v = call <vscale x 1 x float> @llvm.vp.fma.nxv1f32(<vscale x 1 x float> %nega, <vscale x 1 x float> %vbext, <vscale x 1 x float> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)136  ret <vscale x 1 x float> %v137}138 139define <vscale x 2 x float> @vfnmsac_vv_nxv2f32(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {140; ZVFH-LABEL: vfnmsac_vv_nxv2f32:141; ZVFH:       # %bb.0:142; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma143; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t144; ZVFH-NEXT:    vmv1r.v v8, v10145; ZVFH-NEXT:    ret146;147; ZVFHMIN-LABEL: vfnmsac_vv_nxv2f32:148; ZVFHMIN:       # %bb.0:149; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma150; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t151; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9, v0.t152; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma153; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v10, v0.t154; ZVFHMIN-NEXT:    ret155  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)156  %bext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)157  %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> %m, i32 %evl)158  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %bext, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)159  ret <vscale x 2 x float> %v160}161 162define <vscale x 2 x float> @vfnmsac_vv_nxv2f32_unmasked(<vscale x 2 x half> %a, <vscale x 2 x half> %b, <vscale x 2 x float> %c, i32 zeroext %evl) {163; ZVFH-LABEL: vfnmsac_vv_nxv2f32_unmasked:164; ZVFH:       # %bb.0:165; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma166; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9167; ZVFH-NEXT:    vmv1r.v v8, v10168; ZVFH-NEXT:    ret169;170; ZVFHMIN-LABEL: vfnmsac_vv_nxv2f32_unmasked:171; ZVFHMIN:       # %bb.0:172; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma173; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8174; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9175; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma176; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v10177; ZVFHMIN-NEXT:    ret178  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)179  %bext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)180  %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> splat (i1 -1), i32 %evl)181  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %bext, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)182  ret <vscale x 2 x float> %v183}184 185define <vscale x 2 x float> @vfnmsac_vf_nxv2f32(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {186; ZVFH-LABEL: vfnmsac_vf_nxv2f32:187; ZVFH:       # %bb.0:188; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma189; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t190; ZVFH-NEXT:    vmv1r.v v8, v9191; ZVFH-NEXT:    ret192;193; ZVFHMIN-LABEL: vfnmsac_vf_nxv2f32:194; ZVFHMIN:       # %bb.0:195; ZVFHMIN-NEXT:    fmv.x.h a1, fa0196; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma197; ZVFHMIN-NEXT:    vmv.v.x v10, a1198; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t199; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10, v0.t200; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma201; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v9, v0.t202; ZVFHMIN-NEXT:    ret203  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0204  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer205  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)206  %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)207  %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> %m, i32 %evl)208  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %vbext, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)209  ret <vscale x 2 x float> %v210}211 212define <vscale x 2 x float> @vfnmsac_vf_nxv2f32_commute(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {213; ZVFH-LABEL: vfnmsac_vf_nxv2f32_commute:214; ZVFH:       # %bb.0:215; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma216; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t217; ZVFH-NEXT:    vmv1r.v v8, v9218; ZVFH-NEXT:    ret219;220; ZVFHMIN-LABEL: vfnmsac_vf_nxv2f32_commute:221; ZVFHMIN:       # %bb.0:222; ZVFHMIN-NEXT:    fmv.x.h a1, fa0223; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma224; ZVFHMIN-NEXT:    vmv.v.x v11, a1225; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t226; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v11, v0.t227; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma228; ZVFHMIN-NEXT:    vfnmsub.vv v10, v8, v9, v0.t229; ZVFHMIN-NEXT:    vmv.v.v v8, v10230; ZVFHMIN-NEXT:    ret231  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0232  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer233  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> %m, i32 %evl)234  %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)235  %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> %m, i32 %evl)236  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %vbext, <vscale x 2 x float> %nega, <vscale x 2 x float> %c, <vscale x 2 x i1> %m, i32 %evl)237  ret <vscale x 2 x float> %v238}239 240define <vscale x 2 x float> @vfnmsac_vf_nxv2f32_unmasked(<vscale x 2 x half> %a, half %b, <vscale x 2 x float> %c, i32 zeroext %evl) {241; ZVFH-LABEL: vfnmsac_vf_nxv2f32_unmasked:242; ZVFH:       # %bb.0:243; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma244; ZVFH-NEXT:    vfwnmsac.vf v9, fa0, v8245; ZVFH-NEXT:    vmv1r.v v8, v9246; ZVFH-NEXT:    ret247;248; ZVFHMIN-LABEL: vfnmsac_vf_nxv2f32_unmasked:249; ZVFHMIN:       # %bb.0:250; ZVFHMIN-NEXT:    fmv.x.h a1, fa0251; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma252; ZVFHMIN-NEXT:    vmv.v.x v10, a1253; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8254; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10255; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma256; ZVFHMIN-NEXT:    vfnmsub.vv v8, v11, v9257; ZVFHMIN-NEXT:    ret258  %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0259  %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer260  %aext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)261  %vbext = call <vscale x 2 x float> @llvm.vp.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)262  %nega = call <vscale x 2 x float> @llvm.vp.fneg.nxv2f32(<vscale x 2 x float> %aext, <vscale x 2 x i1> splat (i1 -1), i32 %evl)263  %v = call <vscale x 2 x float> @llvm.vp.fma.nxv2f32(<vscale x 2 x float> %nega, <vscale x 2 x float> %vbext, <vscale x 2 x float> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)264  ret <vscale x 2 x float> %v265}266 267define <vscale x 4 x float> @vfnmsac_vv_nxv4f32(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {268; ZVFH-LABEL: vfnmsac_vv_nxv4f32:269; ZVFH:       # %bb.0:270; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma271; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t272; ZVFH-NEXT:    vmv2r.v v8, v10273; ZVFH-NEXT:    ret274;275; ZVFHMIN-LABEL: vfnmsac_vv_nxv4f32:276; ZVFHMIN:       # %bb.0:277; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma278; ZVFHMIN-NEXT:    vmv1r.v v12, v9279; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8, v0.t280; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12, v0.t281; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma282; ZVFHMIN-NEXT:    vfnmsub.vv v8, v14, v10, v0.t283; ZVFHMIN-NEXT:    ret284  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)285  %bext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)286  %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> %m, i32 %evl)287  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %bext, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)288  ret <vscale x 4 x float> %v289}290 291define <vscale x 4 x float> @vfnmsac_vv_nxv4f32_unmasked(<vscale x 4 x half> %a, <vscale x 4 x half> %b, <vscale x 4 x float> %c, i32 zeroext %evl) {292; ZVFH-LABEL: vfnmsac_vv_nxv4f32_unmasked:293; ZVFH:       # %bb.0:294; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma295; ZVFH-NEXT:    vfwnmsac.vv v10, v8, v9296; ZVFH-NEXT:    vmv2r.v v8, v10297; ZVFH-NEXT:    ret298;299; ZVFHMIN-LABEL: vfnmsac_vv_nxv4f32_unmasked:300; ZVFHMIN:       # %bb.0:301; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma302; ZVFHMIN-NEXT:    vmv1r.v v12, v9303; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v8304; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12305; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma306; ZVFHMIN-NEXT:    vfnmsub.vv v8, v14, v10307; ZVFHMIN-NEXT:    ret308  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)309  %bext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)310  %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> splat (i1 -1), i32 %evl)311  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %bext, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)312  ret <vscale x 4 x float> %v313}314 315define <vscale x 4 x float> @vfnmsac_vf_nxv4f32(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {316; ZVFH-LABEL: vfnmsac_vf_nxv4f32:317; ZVFH:       # %bb.0:318; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma319; ZVFH-NEXT:    vfwnmsac.vf v10, fa0, v8, v0.t320; ZVFH-NEXT:    vmv2r.v v8, v10321; ZVFH-NEXT:    ret322;323; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32:324; ZVFHMIN:       # %bb.0:325; ZVFHMIN-NEXT:    fmv.x.h a1, fa0326; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma327; ZVFHMIN-NEXT:    vmv.v.x v14, a1328; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t329; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v14, v0.t330; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma331; ZVFHMIN-NEXT:    vfnmsub.vv v8, v12, v10, v0.t332; ZVFHMIN-NEXT:    ret333  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0334  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer335  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)336  %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)337  %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> %m, i32 %evl)338  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %vbext, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)339  ret <vscale x 4 x float> %v340}341 342define <vscale x 4 x float> @vfnmsac_vf_nxv4f32_commute(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {343; ZVFH-LABEL: vfnmsac_vf_nxv4f32_commute:344; ZVFH:       # %bb.0:345; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma346; ZVFH-NEXT:    vfwnmsac.vf v10, fa0, v8, v0.t347; ZVFH-NEXT:    vmv2r.v v8, v10348; ZVFH-NEXT:    ret349;350; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32_commute:351; ZVFHMIN:       # %bb.0:352; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma353; ZVFHMIN-NEXT:    vmv1r.v v12, v8354; ZVFHMIN-NEXT:    fmv.x.h a0, fa0355; ZVFHMIN-NEXT:    vmv.v.x v14, a0356; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12, v0.t357; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v14, v0.t358; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma359; ZVFHMIN-NEXT:    vfnmsub.vv v8, v12, v10, v0.t360; ZVFHMIN-NEXT:    ret361  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0362  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer363  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> %m, i32 %evl)364  %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)365  %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> %m, i32 %evl)366  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %vbext, <vscale x 4 x float> %nega, <vscale x 4 x float> %c, <vscale x 4 x i1> %m, i32 %evl)367  ret <vscale x 4 x float> %v368}369 370define <vscale x 4 x float> @vfnmsac_vf_nxv4f32_unmasked(<vscale x 4 x half> %a, half %b, <vscale x 4 x float> %c, i32 zeroext %evl) {371; ZVFH-LABEL: vfnmsac_vf_nxv4f32_unmasked:372; ZVFH:       # %bb.0:373; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma374; ZVFH-NEXT:    vfwnmsac.vf v10, fa0, v8375; ZVFH-NEXT:    vmv2r.v v8, v10376; ZVFH-NEXT:    ret377;378; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32_unmasked:379; ZVFHMIN:       # %bb.0:380; ZVFHMIN-NEXT:    fmv.x.h a1, fa0381; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma382; ZVFHMIN-NEXT:    vmv.v.x v14, a1383; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8384; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v14385; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma386; ZVFHMIN-NEXT:    vfnmsub.vv v8, v12, v10387; ZVFHMIN-NEXT:    ret388  %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0389  %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer390  %aext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)391  %vbext = call <vscale x 4 x float> @llvm.vp.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)392  %nega = call <vscale x 4 x float> @llvm.vp.fneg.nxv4f32(<vscale x 4 x float> %aext, <vscale x 4 x i1> splat (i1 -1), i32 %evl)393  %v = call <vscale x 4 x float> @llvm.vp.fma.nxv4f32(<vscale x 4 x float> %nega, <vscale x 4 x float> %vbext, <vscale x 4 x float> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)394  ret <vscale x 4 x float> %v395}396 397define <vscale x 8 x float> @vfnmsac_vv_nxv8f32(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {398; ZVFH-LABEL: vfnmsac_vv_nxv8f32:399; ZVFH:       # %bb.0:400; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma401; ZVFH-NEXT:    vfwnmsac.vv v12, v8, v10, v0.t402; ZVFH-NEXT:    vmv4r.v v8, v12403; ZVFH-NEXT:    ret404;405; ZVFHMIN-LABEL: vfnmsac_vv_nxv8f32:406; ZVFHMIN:       # %bb.0:407; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma408; ZVFHMIN-NEXT:    vmv2r.v v16, v10409; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8, v0.t410; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t411; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma412; ZVFHMIN-NEXT:    vfnmsub.vv v8, v20, v12, v0.t413; ZVFHMIN-NEXT:    ret414  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)415  %bext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)416  %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> %m, i32 %evl)417  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %bext, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)418  ret <vscale x 8 x float> %v419}420 421define <vscale x 8 x float> @vfnmsac_vv_nxv8f32_unmasked(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x float> %c, i32 zeroext %evl) {422; ZVFH-LABEL: vfnmsac_vv_nxv8f32_unmasked:423; ZVFH:       # %bb.0:424; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma425; ZVFH-NEXT:    vfwnmsac.vv v12, v8, v10426; ZVFH-NEXT:    vmv4r.v v8, v12427; ZVFH-NEXT:    ret428;429; ZVFHMIN-LABEL: vfnmsac_vv_nxv8f32_unmasked:430; ZVFHMIN:       # %bb.0:431; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma432; ZVFHMIN-NEXT:    vmv2r.v v16, v10433; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8434; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16435; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma436; ZVFHMIN-NEXT:    vfnmsub.vv v8, v20, v12437; ZVFHMIN-NEXT:    ret438  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)439  %bext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)440  %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> splat (i1 -1), i32 %evl)441  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %bext, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)442  ret <vscale x 8 x float> %v443}444 445define <vscale x 8 x float> @vfnmsac_vf_nxv8f32(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {446; ZVFH-LABEL: vfnmsac_vf_nxv8f32:447; ZVFH:       # %bb.0:448; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma449; ZVFH-NEXT:    vfwnmsac.vf v12, fa0, v8, v0.t450; ZVFH-NEXT:    vmv4r.v v8, v12451; ZVFH-NEXT:    ret452;453; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32:454; ZVFHMIN:       # %bb.0:455; ZVFHMIN-NEXT:    fmv.x.h a1, fa0456; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma457; ZVFHMIN-NEXT:    vmv.v.x v20, a1458; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t459; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20, v0.t460; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma461; ZVFHMIN-NEXT:    vfnmsub.vv v8, v16, v12, v0.t462; ZVFHMIN-NEXT:    ret463  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0464  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer465  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)466  %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)467  %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> %m, i32 %evl)468  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %vbext, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)469  ret <vscale x 8 x float> %v470}471 472define <vscale x 8 x float> @vfnmsac_vf_nxv8f32_commute(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {473; ZVFH-LABEL: vfnmsac_vf_nxv8f32_commute:474; ZVFH:       # %bb.0:475; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma476; ZVFH-NEXT:    vfwnmsac.vf v12, fa0, v8, v0.t477; ZVFH-NEXT:    vmv4r.v v8, v12478; ZVFH-NEXT:    ret479;480; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32_commute:481; ZVFHMIN:       # %bb.0:482; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma483; ZVFHMIN-NEXT:    vmv2r.v v16, v8484; ZVFHMIN-NEXT:    fmv.x.h a0, fa0485; ZVFHMIN-NEXT:    vmv.v.x v20, a0486; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16, v0.t487; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v20, v0.t488; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma489; ZVFHMIN-NEXT:    vfnmsub.vv v8, v16, v12, v0.t490; ZVFHMIN-NEXT:    ret491  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0492  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer493  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> %m, i32 %evl)494  %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)495  %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> %m, i32 %evl)496  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %vbext, <vscale x 8 x float> %nega, <vscale x 8 x float> %c, <vscale x 8 x i1> %m, i32 %evl)497  ret <vscale x 8 x float> %v498}499 500define <vscale x 8 x float> @vfnmsac_vf_nxv8f32_unmasked(<vscale x 8 x half> %a, half %b, <vscale x 8 x float> %c, i32 zeroext %evl) {501; ZVFH-LABEL: vfnmsac_vf_nxv8f32_unmasked:502; ZVFH:       # %bb.0:503; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma504; ZVFH-NEXT:    vfwnmsac.vf v12, fa0, v8505; ZVFH-NEXT:    vmv4r.v v8, v12506; ZVFH-NEXT:    ret507;508; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32_unmasked:509; ZVFHMIN:       # %bb.0:510; ZVFHMIN-NEXT:    fmv.x.h a1, fa0511; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma512; ZVFHMIN-NEXT:    vmv.v.x v20, a1513; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8514; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v20515; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma516; ZVFHMIN-NEXT:    vfnmsub.vv v8, v16, v12517; ZVFHMIN-NEXT:    ret518  %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0519  %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer520  %aext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)521  %vbext = call <vscale x 8 x float> @llvm.vp.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)522  %nega = call <vscale x 8 x float> @llvm.vp.fneg.nxv8f32(<vscale x 8 x float> %aext, <vscale x 8 x i1> splat (i1 -1), i32 %evl)523  %v = call <vscale x 8 x float> @llvm.vp.fma.nxv8f32(<vscale x 8 x float> %nega, <vscale x 8 x float> %vbext, <vscale x 8 x float> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)524  ret <vscale x 8 x float> %v525}526 527define <vscale x 16 x float> @vfnmsac_vv_nxv16f32(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {528; ZVFH-LABEL: vfnmsac_vv_nxv16f32:529; ZVFH:       # %bb.0:530; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma531; ZVFH-NEXT:    vfwnmsac.vv v16, v8, v12, v0.t532; ZVFH-NEXT:    vmv8r.v v8, v16533; ZVFH-NEXT:    ret534;535; ZVFHMIN-LABEL: vfnmsac_vv_nxv16f32:536; ZVFHMIN:       # %bb.0:537; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma538; ZVFHMIN-NEXT:    vmv4r.v v4, v12539; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t540; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t541; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma542; ZVFHMIN-NEXT:    vfnmsub.vv v8, v24, v16, v0.t543; ZVFHMIN-NEXT:    ret544  %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> %m, i32 %evl)545  %bext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)546  %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> %m, i32 %evl)547  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %bext, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)548  ret <vscale x 16 x float> %v549}550 551define <vscale x 16 x float> @vfnmsac_vv_nxv16f32_unmasked(<vscale x 16 x half> %a, <vscale x 16 x half> %b, <vscale x 16 x float> %c, i32 zeroext %evl) {552; ZVFH-LABEL: vfnmsac_vv_nxv16f32_unmasked:553; ZVFH:       # %bb.0:554; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma555; ZVFH-NEXT:    vfwnmsac.vv v16, v8, v12556; ZVFH-NEXT:    vmv8r.v v8, v16557; ZVFH-NEXT:    ret558;559; ZVFHMIN-LABEL: vfnmsac_vv_nxv16f32_unmasked:560; ZVFHMIN:       # %bb.0:561; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma562; ZVFHMIN-NEXT:    vmv4r.v v24, v12563; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8564; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24565; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma566; ZVFHMIN-NEXT:    vfnmsub.vv v8, v0, v16567; ZVFHMIN-NEXT:    ret568  %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)569  %bext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 -1), i32 %evl)570  %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> splat (i1 -1), i32 %evl)571  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %bext, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)572  ret <vscale x 16 x float> %v573}574 575define <vscale x 16 x float> @vfnmsac_vf_nxv16f32(<vscale x 16 x half> %a, half %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {576; ZVFH-LABEL: vfnmsac_vf_nxv16f32:577; ZVFH:       # %bb.0:578; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma579; ZVFH-NEXT:    vfwnmsac.vf v16, fa0, v8, v0.t580; ZVFH-NEXT:    vmv8r.v v8, v16581; ZVFH-NEXT:    ret582;583; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32:584; ZVFHMIN:       # %bb.0:585; ZVFHMIN-NEXT:    fmv.x.h a1, fa0586; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma587; ZVFHMIN-NEXT:    vmv.v.x v4, a1588; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8, v0.t589; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4, v0.t590; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma591; ZVFHMIN-NEXT:    vfnmsub.vv v8, v24, v16, v0.t592; ZVFHMIN-NEXT:    ret593  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0594  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer595  %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> %m, i32 %evl)596  %vbext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)597  %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> %m, i32 %evl)598  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %vbext, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)599  ret <vscale x 16 x float> %v600}601 602define <vscale x 16 x float> @vfnmsac_vf_nxv16f32_commute(<vscale x 16 x half> %a, half %b, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 zeroext %evl) {603; ZVFH-LABEL: vfnmsac_vf_nxv16f32_commute:604; ZVFH:       # %bb.0:605; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma606; ZVFH-NEXT:    vfwnmsac.vf v16, fa0, v8, v0.t607; ZVFH-NEXT:    vmv8r.v v8, v16608; ZVFH-NEXT:    ret609;610; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32_commute:611; ZVFHMIN:       # %bb.0:612; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma613; ZVFHMIN-NEXT:    vmv4r.v v24, v8614; ZVFHMIN-NEXT:    fmv.x.h a0, fa0615; ZVFHMIN-NEXT:    vmv.v.x v4, a0616; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v24, v0.t617; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v4, v0.t618; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma619; ZVFHMIN-NEXT:    vfnmsub.vv v8, v24, v16, v0.t620; ZVFHMIN-NEXT:    ret621  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0622  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer623  %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> %m, i32 %evl)624  %vbext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)625  %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> %m, i32 %evl)626  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %vbext, <vscale x 16 x float> %nega, <vscale x 16 x float> %c, <vscale x 16 x i1> %m, i32 %evl)627  ret <vscale x 16 x float> %v628}629 630define <vscale x 16 x float> @vfnmsac_vf_nxv16f32_unmasked(<vscale x 16 x half> %a, half %b, <vscale x 16 x float> %c, i32 zeroext %evl) {631; ZVFH-LABEL: vfnmsac_vf_nxv16f32_unmasked:632; ZVFH:       # %bb.0:633; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma634; ZVFH-NEXT:    vfwnmsac.vf v16, fa0, v8635; ZVFH-NEXT:    vmv8r.v v8, v16636; ZVFH-NEXT:    ret637;638; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32_unmasked:639; ZVFHMIN:       # %bb.0:640; ZVFHMIN-NEXT:    fmv.x.h a1, fa0641; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma642; ZVFHMIN-NEXT:    vmv.v.x v4, a1643; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8644; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4645; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma646; ZVFHMIN-NEXT:    vfnmsub.vv v8, v24, v16647; ZVFHMIN-NEXT:    ret648  %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0649  %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer650  %aext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x i1> splat (i1 -1), i32 %evl)651  %vbext = call <vscale x 16 x float> @llvm.vp.fpext.nxv16f32.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 -1), i32 %evl)652  %nega = call <vscale x 16 x float> @llvm.vp.fneg.nxv16f32(<vscale x 16 x float> %aext, <vscale x 16 x i1> splat (i1 -1), i32 %evl)653  %v = call <vscale x 16 x float> @llvm.vp.fma.nxv16f32(<vscale x 16 x float> %nega, <vscale x 16 x float> %vbext, <vscale x 16 x float> %c, <vscale x 16 x i1> splat (i1 -1), i32 %evl)654  ret <vscale x 16 x float> %v655}656 657define <vscale x 1 x double> @vfnmsac_vv_nxv1f64(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {658; CHECK-LABEL: vfnmsac_vv_nxv1f64:659; CHECK:       # %bb.0:660; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma661; CHECK-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t662; CHECK-NEXT:    vmv1r.v v8, v10663; CHECK-NEXT:    ret664  %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> %m, i32 %evl)665  %bext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)666  %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> %m, i32 %evl)667  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %bext, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)668  ret <vscale x 1 x double> %v669}670 671define <vscale x 1 x double> @vfnmsac_vv_nxv1f64_unmasked(<vscale x 1 x float> %a, <vscale x 1 x float> %b, <vscale x 1 x double> %c, i32 zeroext %evl) {672; CHECK-LABEL: vfnmsac_vv_nxv1f64_unmasked:673; CHECK:       # %bb.0:674; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma675; CHECK-NEXT:    vfwnmsac.vv v10, v8, v9676; CHECK-NEXT:    vmv1r.v v8, v10677; CHECK-NEXT:    ret678  %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)679  %bext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 -1), i32 %evl)680  %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> splat (i1 -1), i32 %evl)681  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %bext, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)682  ret <vscale x 1 x double> %v683}684 685define <vscale x 1 x double> @vfnmsac_vf_nxv1f64(<vscale x 1 x float> %a, float %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {686; CHECK-LABEL: vfnmsac_vf_nxv1f64:687; CHECK:       # %bb.0:688; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma689; CHECK-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t690; CHECK-NEXT:    vmv1r.v v8, v9691; CHECK-NEXT:    ret692  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0693  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer694  %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> %m, i32 %evl)695  %vbext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)696  %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> %m, i32 %evl)697  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %vbext, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)698  ret <vscale x 1 x double> %v699}700 701define <vscale x 1 x double> @vfnmsac_vf_nxv1f64_commute(<vscale x 1 x float> %a, float %b, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {702; CHECK-LABEL: vfnmsac_vf_nxv1f64_commute:703; CHECK:       # %bb.0:704; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma705; CHECK-NEXT:    vfwnmsac.vf v9, fa0, v8, v0.t706; CHECK-NEXT:    vmv1r.v v8, v9707; CHECK-NEXT:    ret708  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0709  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer710  %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> %m, i32 %evl)711  %vbext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)712  %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> %m, i32 %evl)713  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %vbext, <vscale x 1 x double> %nega, <vscale x 1 x double> %c, <vscale x 1 x i1> %m, i32 %evl)714  ret <vscale x 1 x double> %v715}716 717define <vscale x 1 x double> @vfnmsac_vf_nxv1f64_unmasked(<vscale x 1 x float> %a, float %b, <vscale x 1 x double> %c, i32 zeroext %evl) {718; CHECK-LABEL: vfnmsac_vf_nxv1f64_unmasked:719; CHECK:       # %bb.0:720; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma721; CHECK-NEXT:    vfwnmsac.vf v9, fa0, v8722; CHECK-NEXT:    vmv1r.v v8, v9723; CHECK-NEXT:    ret724  %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0725  %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer726  %aext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x i1> splat (i1 -1), i32 %evl)727  %vbext = call <vscale x 1 x double> @llvm.vp.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 -1), i32 %evl)728  %nega = call <vscale x 1 x double> @llvm.vp.fneg.nxv1f64(<vscale x 1 x double> %aext, <vscale x 1 x i1> splat (i1 -1), i32 %evl)729  %v = call <vscale x 1 x double> @llvm.vp.fma.nxv1f64(<vscale x 1 x double> %nega, <vscale x 1 x double> %vbext, <vscale x 1 x double> %c, <vscale x 1 x i1> splat (i1 -1), i32 %evl)730  ret <vscale x 1 x double> %v731}732 733define <vscale x 2 x double> @vfnmsac_vv_nxv2f64(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {734; CHECK-LABEL: vfnmsac_vv_nxv2f64:735; CHECK:       # %bb.0:736; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma737; CHECK-NEXT:    vfwnmsac.vv v10, v8, v9, v0.t738; CHECK-NEXT:    vmv2r.v v8, v10739; CHECK-NEXT:    ret740  %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> %m, i32 %evl)741  %bext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)742  %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> %m, i32 %evl)743  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %bext, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)744  ret <vscale x 2 x double> %v745}746 747define <vscale x 2 x double> @vfnmsac_vv_nxv2f64_unmasked(<vscale x 2 x float> %a, <vscale x 2 x float> %b, <vscale x 2 x double> %c, i32 zeroext %evl) {748; CHECK-LABEL: vfnmsac_vv_nxv2f64_unmasked:749; CHECK:       # %bb.0:750; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma751; CHECK-NEXT:    vfwnmsac.vv v10, v8, v9752; CHECK-NEXT:    vmv2r.v v8, v10753; CHECK-NEXT:    ret754  %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)755  %bext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 -1), i32 %evl)756  %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> splat (i1 -1), i32 %evl)757  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %bext, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)758  ret <vscale x 2 x double> %v759}760 761define <vscale x 2 x double> @vfnmsac_vf_nxv2f64(<vscale x 2 x float> %a, float %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {762; CHECK-LABEL: vfnmsac_vf_nxv2f64:763; CHECK:       # %bb.0:764; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma765; CHECK-NEXT:    vfwnmsac.vf v10, fa0, v8, v0.t766; CHECK-NEXT:    vmv2r.v v8, v10767; CHECK-NEXT:    ret768  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0769  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer770  %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> %m, i32 %evl)771  %vbext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)772  %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> %m, i32 %evl)773  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %vbext, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)774  ret <vscale x 2 x double> %v775}776 777define <vscale x 2 x double> @vfnmsac_vf_nxv2f64_commute(<vscale x 2 x float> %a, float %b, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 zeroext %evl) {778; CHECK-LABEL: vfnmsac_vf_nxv2f64_commute:779; CHECK:       # %bb.0:780; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma781; CHECK-NEXT:    vfwnmsac.vf v10, fa0, v8, v0.t782; CHECK-NEXT:    vmv2r.v v8, v10783; CHECK-NEXT:    ret784  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0785  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer786  %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> %m, i32 %evl)787  %vbext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)788  %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> %m, i32 %evl)789  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %vbext, <vscale x 2 x double> %nega, <vscale x 2 x double> %c, <vscale x 2 x i1> %m, i32 %evl)790  ret <vscale x 2 x double> %v791}792 793define <vscale x 2 x double> @vfnmsac_vf_nxv2f64_unmasked(<vscale x 2 x float> %a, float %b, <vscale x 2 x double> %c, i32 zeroext %evl) {794; CHECK-LABEL: vfnmsac_vf_nxv2f64_unmasked:795; CHECK:       # %bb.0:796; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma797; CHECK-NEXT:    vfwnmsac.vf v10, fa0, v8798; CHECK-NEXT:    vmv2r.v v8, v10799; CHECK-NEXT:    ret800  %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0801  %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer802  %aext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i32 %evl)803  %vbext = call <vscale x 2 x double> @llvm.vp.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 -1), i32 %evl)804  %nega = call <vscale x 2 x double> @llvm.vp.fneg.nxv2f64(<vscale x 2 x double> %aext, <vscale x 2 x i1> splat (i1 -1), i32 %evl)805  %v = call <vscale x 2 x double> @llvm.vp.fma.nxv2f64(<vscale x 2 x double> %nega, <vscale x 2 x double> %vbext, <vscale x 2 x double> %c, <vscale x 2 x i1> splat (i1 -1), i32 %evl)806  ret <vscale x 2 x double> %v807}808 809define <vscale x 4 x double> @vfnmsac_vv_nxv4f64(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {810; CHECK-LABEL: vfnmsac_vv_nxv4f64:811; CHECK:       # %bb.0:812; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma813; CHECK-NEXT:    vfwnmsac.vv v12, v8, v10, v0.t814; CHECK-NEXT:    vmv4r.v v8, v12815; CHECK-NEXT:    ret816  %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> %m, i32 %evl)817  %bext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)818  %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> %m, i32 %evl)819  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %bext, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)820  ret <vscale x 4 x double> %v821}822 823define <vscale x 4 x double> @vfnmsac_vv_nxv4f64_unmasked(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x double> %c, i32 zeroext %evl) {824; CHECK-LABEL: vfnmsac_vv_nxv4f64_unmasked:825; CHECK:       # %bb.0:826; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma827; CHECK-NEXT:    vfwnmsac.vv v12, v8, v10828; CHECK-NEXT:    vmv4r.v v8, v12829; CHECK-NEXT:    ret830  %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)831  %bext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 -1), i32 %evl)832  %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> splat (i1 -1), i32 %evl)833  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %bext, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)834  ret <vscale x 4 x double> %v835}836 837define <vscale x 4 x double> @vfnmsac_vf_nxv4f64(<vscale x 4 x float> %a, float %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {838; CHECK-LABEL: vfnmsac_vf_nxv4f64:839; CHECK:       # %bb.0:840; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma841; CHECK-NEXT:    vfwnmsac.vf v12, fa0, v8, v0.t842; CHECK-NEXT:    vmv4r.v v8, v12843; CHECK-NEXT:    ret844  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0845  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer846  %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> %m, i32 %evl)847  %vbext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)848  %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> %m, i32 %evl)849  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %vbext, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)850  ret <vscale x 4 x double> %v851}852 853define <vscale x 4 x double> @vfnmsac_vf_nxv4f64_commute(<vscale x 4 x float> %a, float %b, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 zeroext %evl) {854; CHECK-LABEL: vfnmsac_vf_nxv4f64_commute:855; CHECK:       # %bb.0:856; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma857; CHECK-NEXT:    vfwnmsac.vf v12, fa0, v8, v0.t858; CHECK-NEXT:    vmv4r.v v8, v12859; CHECK-NEXT:    ret860  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0861  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer862  %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> %m, i32 %evl)863  %vbext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)864  %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> %m, i32 %evl)865  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %vbext, <vscale x 4 x double> %nega, <vscale x 4 x double> %c, <vscale x 4 x i1> %m, i32 %evl)866  ret <vscale x 4 x double> %v867}868 869define <vscale x 4 x double> @vfnmsac_vf_nxv4f64_unmasked(<vscale x 4 x float> %a, float %b, <vscale x 4 x double> %c, i32 zeroext %evl) {870; CHECK-LABEL: vfnmsac_vf_nxv4f64_unmasked:871; CHECK:       # %bb.0:872; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma873; CHECK-NEXT:    vfwnmsac.vf v12, fa0, v8874; CHECK-NEXT:    vmv4r.v v8, v12875; CHECK-NEXT:    ret876  %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0877  %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer878  %aext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x i1> splat (i1 -1), i32 %evl)879  %vbext = call <vscale x 4 x double> @llvm.vp.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 -1), i32 %evl)880  %nega = call <vscale x 4 x double> @llvm.vp.fneg.nxv4f64(<vscale x 4 x double> %aext, <vscale x 4 x i1> splat (i1 -1), i32 %evl)881  %v = call <vscale x 4 x double> @llvm.vp.fma.nxv4f64(<vscale x 4 x double> %nega, <vscale x 4 x double> %vbext, <vscale x 4 x double> %c, <vscale x 4 x i1> splat (i1 -1), i32 %evl)882  ret <vscale x 4 x double> %v883}884 885define <vscale x 8 x double> @vfnmsac_vv_nxv8f64(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {886; CHECK-LABEL: vfnmsac_vv_nxv8f64:887; CHECK:       # %bb.0:888; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma889; CHECK-NEXT:    vfwnmsac.vv v16, v8, v12, v0.t890; CHECK-NEXT:    vmv8r.v v8, v16891; CHECK-NEXT:    ret892  %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> %m, i32 %evl)893  %bext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)894  %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> %m, i32 %evl)895  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %bext, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)896  ret <vscale x 8 x double> %v897}898 899define <vscale x 8 x double> @vfnmsac_vv_nxv8f64_unmasked(<vscale x 8 x float> %a, <vscale x 8 x float> %b, <vscale x 8 x double> %c, i32 zeroext %evl) {900; CHECK-LABEL: vfnmsac_vv_nxv8f64_unmasked:901; CHECK:       # %bb.0:902; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma903; CHECK-NEXT:    vfwnmsac.vv v16, v8, v12904; CHECK-NEXT:    vmv8r.v v8, v16905; CHECK-NEXT:    ret906  %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)907  %bext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 -1), i32 %evl)908  %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> splat (i1 -1), i32 %evl)909  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %bext, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)910  ret <vscale x 8 x double> %v911}912 913define <vscale x 8 x double> @vfnmsac_vf_nxv8f64(<vscale x 8 x float> %a, float %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {914; CHECK-LABEL: vfnmsac_vf_nxv8f64:915; CHECK:       # %bb.0:916; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma917; CHECK-NEXT:    vfwnmsac.vf v16, fa0, v8, v0.t918; CHECK-NEXT:    vmv8r.v v8, v16919; CHECK-NEXT:    ret920  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0921  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer922  %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> %m, i32 %evl)923  %vbext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)924  %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> %m, i32 %evl)925  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %vbext, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)926  ret <vscale x 8 x double> %v927}928 929define <vscale x 8 x double> @vfnmsac_vf_nxv8f64_commute(<vscale x 8 x float> %a, float %b, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 zeroext %evl) {930; CHECK-LABEL: vfnmsac_vf_nxv8f64_commute:931; CHECK:       # %bb.0:932; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma933; CHECK-NEXT:    vfwnmsac.vf v16, fa0, v8, v0.t934; CHECK-NEXT:    vmv8r.v v8, v16935; CHECK-NEXT:    ret936  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0937  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer938  %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> %m, i32 %evl)939  %vbext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)940  %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> %m, i32 %evl)941  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %vbext, <vscale x 8 x double> %nega, <vscale x 8 x double> %c, <vscale x 8 x i1> %m, i32 %evl)942  ret <vscale x 8 x double> %v943}944 945define <vscale x 8 x double> @vfnmsac_vf_nxv8f64_unmasked(<vscale x 8 x float> %a, float %b, <vscale x 8 x double> %c, i32 zeroext %evl) {946; CHECK-LABEL: vfnmsac_vf_nxv8f64_unmasked:947; CHECK:       # %bb.0:948; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma949; CHECK-NEXT:    vfwnmsac.vf v16, fa0, v8950; CHECK-NEXT:    vmv8r.v v8, v16951; CHECK-NEXT:    ret952  %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0953  %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer954  %aext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x i1> splat (i1 -1), i32 %evl)955  %vbext = call <vscale x 8 x double> @llvm.vp.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 -1), i32 %evl)956  %nega = call <vscale x 8 x double> @llvm.vp.fneg.nxv8f64(<vscale x 8 x double> %aext, <vscale x 8 x i1> splat (i1 -1), i32 %evl)957  %v = call <vscale x 8 x double> @llvm.vp.fma.nxv8f64(<vscale x 8 x double> %nega, <vscale x 8 x double> %vbext, <vscale x 8 x double> %c, <vscale x 8 x i1> splat (i1 -1), i32 %evl)958  ret <vscale x 8 x double> %v959}960