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