1772 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \3; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \7; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=lp64d \9; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN10 11define <vscale x 1 x float> @vfwmacc_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc) {12; ZVFH-LABEL: vfwmacc_vv_nxv1f32:13; ZVFH: # %bb.0:14; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma15; ZVFH-NEXT: vfwmacc.vv v8, v9, v1016; ZVFH-NEXT: ret17;18; ZVFHMIN-LABEL: vfwmacc_vv_nxv1f32:19; ZVFHMIN: # %bb.0:20; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma21; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v922; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v1023; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma24; ZVFHMIN-NEXT: vfmacc.vv v8, v11, v925; ZVFHMIN-NEXT: ret26 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>27 %ve = fpext <vscale x 1 x half> %vc to <vscale x 1 x float>28 %vf = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vd, <vscale x 1 x float> %ve, <vscale x 1 x float> %va)29 ret <vscale x 1 x float> %vf30}31 32define <vscale x 1 x float> @vfwmacc_vf_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, half %c) {33; ZVFH-LABEL: vfwmacc_vf_nxv1f32:34; ZVFH: # %bb.0:35; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma36; ZVFH-NEXT: vfwmacc.vf v8, fa0, v937; ZVFH-NEXT: ret38;39; ZVFHMIN-LABEL: vfwmacc_vf_nxv1f32:40; ZVFHMIN: # %bb.0:41; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma42; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v943; ZVFHMIN-NEXT: fcvt.s.h fa5, fa044; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma45; ZVFHMIN-NEXT: vfmacc.vf v8, fa5, v1046; ZVFHMIN-NEXT: ret47 %head = insertelement <vscale x 1 x half> poison, half %c, i32 048 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer49 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>50 %ve = fpext <vscale x 1 x half> %splat to <vscale x 1 x float>51 %vf = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vd, <vscale x 1 x float> %ve, <vscale x 1 x float> %va)52 ret <vscale x 1 x float> %vf53}54 55define <vscale x 1 x float> @vfwnmacc_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc) {56; ZVFH-LABEL: vfwnmacc_vv_nxv1f32:57; ZVFH: # %bb.0:58; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma59; ZVFH-NEXT: vfwnmacc.vv v8, v9, v1060; ZVFH-NEXT: ret61;62; ZVFHMIN-LABEL: vfwnmacc_vv_nxv1f32:63; ZVFHMIN: # %bb.0:64; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma65; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v966; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v1067; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma68; ZVFHMIN-NEXT: vfnmacc.vv v8, v11, v969; ZVFHMIN-NEXT: ret70 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>71 %ve = fpext <vscale x 1 x half> %vc to <vscale x 1 x float>72 %vf = fneg <vscale x 1 x float> %va73 %vg = fneg <vscale x 1 x float> %vd74 %vh = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vg, <vscale x 1 x float> %ve, <vscale x 1 x float> %vf)75 ret <vscale x 1 x float> %vh76}77 78define <vscale x 1 x float> @vfwnmacc_vf_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, half %c) {79; ZVFH-LABEL: vfwnmacc_vf_nxv1f32:80; ZVFH: # %bb.0:81; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma82; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v983; ZVFH-NEXT: ret84;85; ZVFHMIN-LABEL: vfwnmacc_vf_nxv1f32:86; ZVFHMIN: # %bb.0:87; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma88; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v989; ZVFHMIN-NEXT: fcvt.s.h fa5, fa090; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma91; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v1092; ZVFHMIN-NEXT: ret93 %head = insertelement <vscale x 1 x half> poison, half %c, i32 094 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer95 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>96 %ve = fpext <vscale x 1 x half> %splat to <vscale x 1 x float>97 %vf = fneg <vscale x 1 x float> %va98 %vg = fneg <vscale x 1 x float> %vd99 %vh = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vg, <vscale x 1 x float> %ve, <vscale x 1 x float> %vf)100 ret <vscale x 1 x float> %vh101}102 103define <vscale x 1 x float> @vfwnmacc_fv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, half %c) {104; ZVFH-LABEL: vfwnmacc_fv_nxv1f32:105; ZVFH: # %bb.0:106; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma107; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v9108; ZVFH-NEXT: ret109;110; ZVFHMIN-LABEL: vfwnmacc_fv_nxv1f32:111; ZVFHMIN: # %bb.0:112; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma113; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9114; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0115; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma116; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v10117; ZVFHMIN-NEXT: ret118 %head = insertelement <vscale x 1 x half> poison, half %c, i32 0119 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer120 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>121 %ve = fpext <vscale x 1 x half> %splat to <vscale x 1 x float>122 %vf = fneg <vscale x 1 x float> %va123 %vg = fneg <vscale x 1 x float> %ve124 %vh = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vd, <vscale x 1 x float> %vg, <vscale x 1 x float> %vf)125 ret <vscale x 1 x float> %vh126}127 128define <vscale x 1 x float> @vfwmsac_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc) {129; ZVFH-LABEL: vfwmsac_vv_nxv1f32:130; ZVFH: # %bb.0:131; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma132; ZVFH-NEXT: vfwmsac.vv v8, v9, v10133; ZVFH-NEXT: ret134;135; ZVFHMIN-LABEL: vfwmsac_vv_nxv1f32:136; ZVFHMIN: # %bb.0:137; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma138; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v9139; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v10140; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma141; ZVFHMIN-NEXT: vfmsac.vv v8, v11, v9142; ZVFHMIN-NEXT: ret143 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>144 %ve = fpext <vscale x 1 x half> %vc to <vscale x 1 x float>145 %vf = fneg <vscale x 1 x float> %va146 %vg = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vd, <vscale x 1 x float> %ve, <vscale x 1 x float> %vf)147 ret <vscale x 1 x float> %vg148}149 150define <vscale x 1 x float> @vfwmsac_vf_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, half %c) {151; ZVFH-LABEL: vfwmsac_vf_nxv1f32:152; ZVFH: # %bb.0:153; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma154; ZVFH-NEXT: vfwmsac.vf v8, fa0, v9155; ZVFH-NEXT: ret156;157; ZVFHMIN-LABEL: vfwmsac_vf_nxv1f32:158; ZVFHMIN: # %bb.0:159; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma160; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9161; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0162; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma163; ZVFHMIN-NEXT: vfmsac.vf v8, fa5, v10164; ZVFHMIN-NEXT: ret165 %head = insertelement <vscale x 1 x half> poison, half %c, i32 0166 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer167 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>168 %ve = fpext <vscale x 1 x half> %splat to <vscale x 1 x float>169 %vf = fneg <vscale x 1 x float> %va170 %vg = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vd, <vscale x 1 x float> %ve, <vscale x 1 x float> %vf)171 ret <vscale x 1 x float> %vg172}173 174define <vscale x 1 x float> @vfwnmsac_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc) {175; ZVFH-LABEL: vfwnmsac_vv_nxv1f32:176; ZVFH: # %bb.0:177; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma178; ZVFH-NEXT: vfwnmsac.vv v8, v9, v10179; ZVFH-NEXT: ret180;181; ZVFHMIN-LABEL: vfwnmsac_vv_nxv1f32:182; ZVFHMIN: # %bb.0:183; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma184; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v9185; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v10186; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma187; ZVFHMIN-NEXT: vfnmsac.vv v8, v11, v9188; ZVFHMIN-NEXT: ret189 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>190 %ve = fpext <vscale x 1 x half> %vc to <vscale x 1 x float>191 %vf = fneg <vscale x 1 x float> %vd192 %vg = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vf, <vscale x 1 x float> %ve, <vscale x 1 x float> %va)193 ret <vscale x 1 x float> %vg194}195 196define <vscale x 1 x float> @vfwnmsac_vf_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, half %c) {197; ZVFH-LABEL: vfwnmsac_vf_nxv1f32:198; ZVFH: # %bb.0:199; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma200; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v9201; ZVFH-NEXT: ret202;203; ZVFHMIN-LABEL: vfwnmsac_vf_nxv1f32:204; ZVFHMIN: # %bb.0:205; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma206; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9207; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0208; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma209; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v10210; ZVFHMIN-NEXT: ret211 %head = insertelement <vscale x 1 x half> poison, half %c, i32 0212 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer213 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>214 %ve = fpext <vscale x 1 x half> %splat to <vscale x 1 x float>215 %vf = fneg <vscale x 1 x float> %vd216 %vg = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vf, <vscale x 1 x float> %ve, <vscale x 1 x float> %va)217 ret <vscale x 1 x float> %vg218}219 220define <vscale x 1 x float> @vfwnmsac_fv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x half> %vb, half %c) {221; ZVFH-LABEL: vfwnmsac_fv_nxv1f32:222; ZVFH: # %bb.0:223; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma224; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v9225; ZVFH-NEXT: ret226;227; ZVFHMIN-LABEL: vfwnmsac_fv_nxv1f32:228; ZVFHMIN: # %bb.0:229; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma230; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9231; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0232; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma233; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v10234; ZVFHMIN-NEXT: ret235 %head = insertelement <vscale x 1 x half> poison, half %c, i32 0236 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer237 %vd = fpext <vscale x 1 x half> %vb to <vscale x 1 x float>238 %ve = fpext <vscale x 1 x half> %splat to <vscale x 1 x float>239 %vf = fneg <vscale x 1 x float> %ve240 %vg = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %vd, <vscale x 1 x float> %vf, <vscale x 1 x float> %va)241 ret <vscale x 1 x float> %vg242}243 244define <vscale x 2 x float> @vfwmacc_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc) {245; ZVFH-LABEL: vfwmacc_vv_nxv2f32:246; ZVFH: # %bb.0:247; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma248; ZVFH-NEXT: vfwmacc.vv v8, v9, v10249; ZVFH-NEXT: ret250;251; ZVFHMIN-LABEL: vfwmacc_vv_nxv2f32:252; ZVFHMIN: # %bb.0:253; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma254; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v9255; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v10256; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma257; ZVFHMIN-NEXT: vfmacc.vv v8, v11, v9258; ZVFHMIN-NEXT: ret259 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>260 %ve = fpext <vscale x 2 x half> %vc to <vscale x 2 x float>261 %vf = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vd, <vscale x 2 x float> %ve, <vscale x 2 x float> %va)262 ret <vscale x 2 x float> %vf263}264 265define <vscale x 2 x float> @vfwmacc_vf_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, half %c) {266; ZVFH-LABEL: vfwmacc_vf_nxv2f32:267; ZVFH: # %bb.0:268; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma269; ZVFH-NEXT: vfwmacc.vf v8, fa0, v9270; ZVFH-NEXT: ret271;272; ZVFHMIN-LABEL: vfwmacc_vf_nxv2f32:273; ZVFHMIN: # %bb.0:274; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma275; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9276; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0277; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma278; ZVFHMIN-NEXT: vfmacc.vf v8, fa5, v10279; ZVFHMIN-NEXT: ret280 %head = insertelement <vscale x 2 x half> poison, half %c, i32 0281 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer282 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>283 %ve = fpext <vscale x 2 x half> %splat to <vscale x 2 x float>284 %vf = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vd, <vscale x 2 x float> %ve, <vscale x 2 x float> %va)285 ret <vscale x 2 x float> %vf286}287 288define <vscale x 2 x float> @vfwnmacc_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc) {289; ZVFH-LABEL: vfwnmacc_vv_nxv2f32:290; ZVFH: # %bb.0:291; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma292; ZVFH-NEXT: vfwnmacc.vv v8, v9, v10293; ZVFH-NEXT: ret294;295; ZVFHMIN-LABEL: vfwnmacc_vv_nxv2f32:296; ZVFHMIN: # %bb.0:297; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma298; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v9299; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v10300; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma301; ZVFHMIN-NEXT: vfnmacc.vv v8, v11, v9302; ZVFHMIN-NEXT: ret303 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>304 %ve = fpext <vscale x 2 x half> %vc to <vscale x 2 x float>305 %vf = fneg <vscale x 2 x float> %va306 %vg = fneg <vscale x 2 x float> %vd307 %vh = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vg, <vscale x 2 x float> %ve, <vscale x 2 x float> %vf)308 ret <vscale x 2 x float> %vh309}310 311define <vscale x 2 x float> @vfwnmacc_vf_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, half %c) {312; ZVFH-LABEL: vfwnmacc_vf_nxv2f32:313; ZVFH: # %bb.0:314; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma315; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v9316; ZVFH-NEXT: ret317;318; ZVFHMIN-LABEL: vfwnmacc_vf_nxv2f32:319; ZVFHMIN: # %bb.0:320; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma321; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9322; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0323; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma324; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v10325; ZVFHMIN-NEXT: ret326 %head = insertelement <vscale x 2 x half> poison, half %c, i32 0327 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer328 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>329 %ve = fpext <vscale x 2 x half> %splat to <vscale x 2 x float>330 %vf = fneg <vscale x 2 x float> %va331 %vg = fneg <vscale x 2 x float> %vd332 %vh = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vg, <vscale x 2 x float> %ve, <vscale x 2 x float> %vf)333 ret <vscale x 2 x float> %vh334}335 336define <vscale x 2 x float> @vfwnmacc_fv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, half %c) {337; ZVFH-LABEL: vfwnmacc_fv_nxv2f32:338; ZVFH: # %bb.0:339; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma340; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v9341; ZVFH-NEXT: ret342;343; ZVFHMIN-LABEL: vfwnmacc_fv_nxv2f32:344; ZVFHMIN: # %bb.0:345; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma346; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9347; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0348; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma349; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v10350; ZVFHMIN-NEXT: ret351 %head = insertelement <vscale x 2 x half> poison, half %c, i32 0352 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer353 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>354 %ve = fpext <vscale x 2 x half> %splat to <vscale x 2 x float>355 %vf = fneg <vscale x 2 x float> %va356 %vg = fneg <vscale x 2 x float> %ve357 %vh = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vd, <vscale x 2 x float> %vg, <vscale x 2 x float> %vf)358 ret <vscale x 2 x float> %vh359}360 361define <vscale x 2 x float> @vfwmsac_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc) {362; ZVFH-LABEL: vfwmsac_vv_nxv2f32:363; ZVFH: # %bb.0:364; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma365; ZVFH-NEXT: vfwmsac.vv v8, v9, v10366; ZVFH-NEXT: ret367;368; ZVFHMIN-LABEL: vfwmsac_vv_nxv2f32:369; ZVFHMIN: # %bb.0:370; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma371; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v9372; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v10373; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma374; ZVFHMIN-NEXT: vfmsac.vv v8, v11, v9375; ZVFHMIN-NEXT: ret376 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>377 %ve = fpext <vscale x 2 x half> %vc to <vscale x 2 x float>378 %vf = fneg <vscale x 2 x float> %va379 %vg = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vd, <vscale x 2 x float> %ve, <vscale x 2 x float> %vf)380 ret <vscale x 2 x float> %vg381}382 383define <vscale x 2 x float> @vfwmsac_vf_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, half %c) {384; ZVFH-LABEL: vfwmsac_vf_nxv2f32:385; ZVFH: # %bb.0:386; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma387; ZVFH-NEXT: vfwmsac.vf v8, fa0, v9388; ZVFH-NEXT: ret389;390; ZVFHMIN-LABEL: vfwmsac_vf_nxv2f32:391; ZVFHMIN: # %bb.0:392; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma393; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9394; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0395; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma396; ZVFHMIN-NEXT: vfmsac.vf v8, fa5, v10397; ZVFHMIN-NEXT: ret398 %head = insertelement <vscale x 2 x half> poison, half %c, i32 0399 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer400 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>401 %ve = fpext <vscale x 2 x half> %splat to <vscale x 2 x float>402 %vf = fneg <vscale x 2 x float> %va403 %vg = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vd, <vscale x 2 x float> %ve, <vscale x 2 x float> %vf)404 ret <vscale x 2 x float> %vg405}406 407define <vscale x 2 x float> @vfwnmsac_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc) {408; ZVFH-LABEL: vfwnmsac_vv_nxv2f32:409; ZVFH: # %bb.0:410; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma411; ZVFH-NEXT: vfwnmsac.vv v8, v9, v10412; ZVFH-NEXT: ret413;414; ZVFHMIN-LABEL: vfwnmsac_vv_nxv2f32:415; ZVFHMIN: # %bb.0:416; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma417; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v9418; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v10419; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma420; ZVFHMIN-NEXT: vfnmsac.vv v8, v11, v9421; ZVFHMIN-NEXT: ret422 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>423 %ve = fpext <vscale x 2 x half> %vc to <vscale x 2 x float>424 %vf = fneg <vscale x 2 x float> %vd425 %vg = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vf, <vscale x 2 x float> %ve, <vscale x 2 x float> %va)426 ret <vscale x 2 x float> %vg427}428 429define <vscale x 2 x float> @vfwnmsac_vf_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, half %c) {430; ZVFH-LABEL: vfwnmsac_vf_nxv2f32:431; ZVFH: # %bb.0:432; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma433; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v9434; ZVFH-NEXT: ret435;436; ZVFHMIN-LABEL: vfwnmsac_vf_nxv2f32:437; ZVFHMIN: # %bb.0:438; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma439; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9440; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0441; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma442; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v10443; ZVFHMIN-NEXT: ret444 %head = insertelement <vscale x 2 x half> poison, half %c, i32 0445 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer446 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>447 %ve = fpext <vscale x 2 x half> %splat to <vscale x 2 x float>448 %vf = fneg <vscale x 2 x float> %vd449 %vg = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vf, <vscale x 2 x float> %ve, <vscale x 2 x float> %va)450 ret <vscale x 2 x float> %vg451}452 453define <vscale x 2 x float> @vfwnmsac_fv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x half> %vb, half %c) {454; ZVFH-LABEL: vfwnmsac_fv_nxv2f32:455; ZVFH: # %bb.0:456; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma457; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v9458; ZVFH-NEXT: ret459;460; ZVFHMIN-LABEL: vfwnmsac_fv_nxv2f32:461; ZVFHMIN: # %bb.0:462; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma463; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9464; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0465; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma466; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v10467; ZVFHMIN-NEXT: ret468 %head = insertelement <vscale x 2 x half> poison, half %c, i32 0469 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer470 %vd = fpext <vscale x 2 x half> %vb to <vscale x 2 x float>471 %ve = fpext <vscale x 2 x half> %splat to <vscale x 2 x float>472 %vf = fneg <vscale x 2 x float> %ve473 %vg = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %vd, <vscale x 2 x float> %vf, <vscale x 2 x float> %va)474 ret <vscale x 2 x float> %vg475}476 477define <vscale x 4 x float> @vfwmacc_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc) {478; ZVFH-LABEL: vfwmacc_vv_nxv4f32:479; ZVFH: # %bb.0:480; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma481; ZVFH-NEXT: vfwmacc.vv v8, v10, v11482; ZVFH-NEXT: ret483;484; ZVFHMIN-LABEL: vfwmacc_vv_nxv4f32:485; ZVFHMIN: # %bb.0:486; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma487; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10488; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11489; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma490; ZVFHMIN-NEXT: vfmacc.vv v8, v12, v14491; ZVFHMIN-NEXT: ret492 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>493 %ve = fpext <vscale x 4 x half> %vc to <vscale x 4 x float>494 %vf = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vd, <vscale x 4 x float> %ve, <vscale x 4 x float> %va)495 ret <vscale x 4 x float> %vf496}497 498define <vscale x 4 x float> @vfwmacc_vf_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, half %c) {499; ZVFH-LABEL: vfwmacc_vf_nxv4f32:500; ZVFH: # %bb.0:501; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma502; ZVFH-NEXT: vfwmacc.vf v8, fa0, v10503; ZVFH-NEXT: ret504;505; ZVFHMIN-LABEL: vfwmacc_vf_nxv4f32:506; ZVFHMIN: # %bb.0:507; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma508; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10509; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0510; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma511; ZVFHMIN-NEXT: vfmacc.vf v8, fa5, v12512; ZVFHMIN-NEXT: ret513 %head = insertelement <vscale x 4 x half> poison, half %c, i32 0514 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer515 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>516 %ve = fpext <vscale x 4 x half> %splat to <vscale x 4 x float>517 %vf = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vd, <vscale x 4 x float> %ve, <vscale x 4 x float> %va)518 ret <vscale x 4 x float> %vf519}520 521define <vscale x 4 x float> @vfwnmacc_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc) {522; ZVFH-LABEL: vfwnmacc_vv_nxv4f32:523; ZVFH: # %bb.0:524; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma525; ZVFH-NEXT: vfwnmacc.vv v8, v10, v11526; ZVFH-NEXT: ret527;528; ZVFHMIN-LABEL: vfwnmacc_vv_nxv4f32:529; ZVFHMIN: # %bb.0:530; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma531; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10532; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11533; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma534; ZVFHMIN-NEXT: vfnmacc.vv v8, v12, v14535; ZVFHMIN-NEXT: ret536 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>537 %ve = fpext <vscale x 4 x half> %vc to <vscale x 4 x float>538 %vf = fneg <vscale x 4 x float> %va539 %vg = fneg <vscale x 4 x float> %vd540 %vh = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vg, <vscale x 4 x float> %ve, <vscale x 4 x float> %vf)541 ret <vscale x 4 x float> %vh542}543 544define <vscale x 4 x float> @vfwnmacc_vf_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, half %c) {545; ZVFH-LABEL: vfwnmacc_vf_nxv4f32:546; ZVFH: # %bb.0:547; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma548; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v10549; ZVFH-NEXT: ret550;551; ZVFHMIN-LABEL: vfwnmacc_vf_nxv4f32:552; ZVFHMIN: # %bb.0:553; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma554; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10555; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0556; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma557; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v12558; ZVFHMIN-NEXT: ret559 %head = insertelement <vscale x 4 x half> poison, half %c, i32 0560 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer561 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>562 %ve = fpext <vscale x 4 x half> %splat to <vscale x 4 x float>563 %vf = fneg <vscale x 4 x float> %va564 %vg = fneg <vscale x 4 x float> %vd565 %vh = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vg, <vscale x 4 x float> %ve, <vscale x 4 x float> %vf)566 ret <vscale x 4 x float> %vh567}568 569define <vscale x 4 x float> @vfwnmacc_fv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, half %c) {570; ZVFH-LABEL: vfwnmacc_fv_nxv4f32:571; ZVFH: # %bb.0:572; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma573; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v10574; ZVFH-NEXT: ret575;576; ZVFHMIN-LABEL: vfwnmacc_fv_nxv4f32:577; ZVFHMIN: # %bb.0:578; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma579; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10580; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0581; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma582; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v12583; ZVFHMIN-NEXT: ret584 %head = insertelement <vscale x 4 x half> poison, half %c, i32 0585 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer586 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>587 %ve = fpext <vscale x 4 x half> %splat to <vscale x 4 x float>588 %vf = fneg <vscale x 4 x float> %va589 %vg = fneg <vscale x 4 x float> %ve590 %vh = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vd, <vscale x 4 x float> %vg, <vscale x 4 x float> %vf)591 ret <vscale x 4 x float> %vh592}593 594define <vscale x 4 x float> @vfwmsac_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc) {595; ZVFH-LABEL: vfwmsac_vv_nxv4f32:596; ZVFH: # %bb.0:597; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma598; ZVFH-NEXT: vfwmsac.vv v8, v10, v11599; ZVFH-NEXT: ret600;601; ZVFHMIN-LABEL: vfwmsac_vv_nxv4f32:602; ZVFHMIN: # %bb.0:603; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma604; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10605; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11606; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma607; ZVFHMIN-NEXT: vfmsac.vv v8, v12, v14608; ZVFHMIN-NEXT: ret609 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>610 %ve = fpext <vscale x 4 x half> %vc to <vscale x 4 x float>611 %vf = fneg <vscale x 4 x float> %va612 %vg = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vd, <vscale x 4 x float> %ve, <vscale x 4 x float> %vf)613 ret <vscale x 4 x float> %vg614}615 616define <vscale x 4 x float> @vfwmsac_vf_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, half %c) {617; ZVFH-LABEL: vfwmsac_vf_nxv4f32:618; ZVFH: # %bb.0:619; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma620; ZVFH-NEXT: vfwmsac.vf v8, fa0, v10621; ZVFH-NEXT: ret622;623; ZVFHMIN-LABEL: vfwmsac_vf_nxv4f32:624; ZVFHMIN: # %bb.0:625; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma626; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10627; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0628; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma629; ZVFHMIN-NEXT: vfmsac.vf v8, fa5, v12630; ZVFHMIN-NEXT: ret631 %head = insertelement <vscale x 4 x half> poison, half %c, i32 0632 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer633 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>634 %ve = fpext <vscale x 4 x half> %splat to <vscale x 4 x float>635 %vf = fneg <vscale x 4 x float> %va636 %vg = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vd, <vscale x 4 x float> %ve, <vscale x 4 x float> %vf)637 ret <vscale x 4 x float> %vg638}639 640define <vscale x 4 x float> @vfwnmsac_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc) {641; ZVFH-LABEL: vfwnmsac_vv_nxv4f32:642; ZVFH: # %bb.0:643; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma644; ZVFH-NEXT: vfwnmsac.vv v8, v10, v11645; ZVFH-NEXT: ret646;647; ZVFHMIN-LABEL: vfwnmsac_vv_nxv4f32:648; ZVFHMIN: # %bb.0:649; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma650; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10651; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11652; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma653; ZVFHMIN-NEXT: vfnmsac.vv v8, v12, v14654; ZVFHMIN-NEXT: ret655 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>656 %ve = fpext <vscale x 4 x half> %vc to <vscale x 4 x float>657 %vf = fneg <vscale x 4 x float> %vd658 %vg = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vf, <vscale x 4 x float> %ve, <vscale x 4 x float> %va)659 ret <vscale x 4 x float> %vg660}661 662define <vscale x 4 x float> @vfwnmsac_vf_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, half %c) {663; ZVFH-LABEL: vfwnmsac_vf_nxv4f32:664; ZVFH: # %bb.0:665; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma666; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v10667; ZVFH-NEXT: ret668;669; ZVFHMIN-LABEL: vfwnmsac_vf_nxv4f32:670; ZVFHMIN: # %bb.0:671; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma672; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10673; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0674; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma675; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v12676; ZVFHMIN-NEXT: ret677 %head = insertelement <vscale x 4 x half> poison, half %c, i32 0678 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer679 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>680 %ve = fpext <vscale x 4 x half> %splat to <vscale x 4 x float>681 %vf = fneg <vscale x 4 x float> %vd682 %vg = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vf, <vscale x 4 x float> %ve, <vscale x 4 x float> %va)683 ret <vscale x 4 x float> %vg684}685 686define <vscale x 4 x float> @vfwnmsac_fv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x half> %vb, half %c) {687; ZVFH-LABEL: vfwnmsac_fv_nxv4f32:688; ZVFH: # %bb.0:689; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma690; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v10691; ZVFH-NEXT: ret692;693; ZVFHMIN-LABEL: vfwnmsac_fv_nxv4f32:694; ZVFHMIN: # %bb.0:695; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma696; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10697; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0698; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma699; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v12700; ZVFHMIN-NEXT: ret701 %head = insertelement <vscale x 4 x half> poison, half %c, i32 0702 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer703 %vd = fpext <vscale x 4 x half> %vb to <vscale x 4 x float>704 %ve = fpext <vscale x 4 x half> %splat to <vscale x 4 x float>705 %vf = fneg <vscale x 4 x float> %ve706 %vg = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vd, <vscale x 4 x float> %vf, <vscale x 4 x float> %va)707 ret <vscale x 4 x float> %vg708}709 710define <vscale x 8 x float> @vfwmacc_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc) {711; ZVFH-LABEL: vfwmacc_vv_nxv8f32:712; ZVFH: # %bb.0:713; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma714; ZVFH-NEXT: vfwmacc.vv v8, v12, v14715; ZVFH-NEXT: ret716;717; ZVFHMIN-LABEL: vfwmacc_vv_nxv8f32:718; ZVFHMIN: # %bb.0:719; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma720; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12721; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14722; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma723; ZVFHMIN-NEXT: vfmacc.vv v8, v16, v20724; ZVFHMIN-NEXT: ret725 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>726 %ve = fpext <vscale x 8 x half> %vc to <vscale x 8 x float>727 %vf = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vd, <vscale x 8 x float> %ve, <vscale x 8 x float> %va)728 ret <vscale x 8 x float> %vf729}730 731define <vscale x 8 x float> @vfwmacc_vf_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, half %c) {732; ZVFH-LABEL: vfwmacc_vf_nxv8f32:733; ZVFH: # %bb.0:734; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma735; ZVFH-NEXT: vfwmacc.vf v8, fa0, v12736; ZVFH-NEXT: ret737;738; ZVFHMIN-LABEL: vfwmacc_vf_nxv8f32:739; ZVFHMIN: # %bb.0:740; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma741; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12742; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0743; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma744; ZVFHMIN-NEXT: vfmacc.vf v8, fa5, v16745; ZVFHMIN-NEXT: ret746 %head = insertelement <vscale x 8 x half> poison, half %c, i32 0747 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer748 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>749 %ve = fpext <vscale x 8 x half> %splat to <vscale x 8 x float>750 %vf = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vd, <vscale x 8 x float> %ve, <vscale x 8 x float> %va)751 ret <vscale x 8 x float> %vf752}753 754define <vscale x 8 x float> @vfwnmacc_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc) {755; ZVFH-LABEL: vfwnmacc_vv_nxv8f32:756; ZVFH: # %bb.0:757; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma758; ZVFH-NEXT: vfwnmacc.vv v8, v12, v14759; ZVFH-NEXT: ret760;761; ZVFHMIN-LABEL: vfwnmacc_vv_nxv8f32:762; ZVFHMIN: # %bb.0:763; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma764; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12765; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14766; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma767; ZVFHMIN-NEXT: vfnmacc.vv v8, v16, v20768; ZVFHMIN-NEXT: ret769 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>770 %ve = fpext <vscale x 8 x half> %vc to <vscale x 8 x float>771 %vf = fneg <vscale x 8 x float> %va772 %vg = fneg <vscale x 8 x float> %vd773 %vh = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vg, <vscale x 8 x float> %ve, <vscale x 8 x float> %vf)774 ret <vscale x 8 x float> %vh775}776 777define <vscale x 8 x float> @vfwnmacc_vf_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, half %c) {778; ZVFH-LABEL: vfwnmacc_vf_nxv8f32:779; ZVFH: # %bb.0:780; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma781; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v12782; ZVFH-NEXT: ret783;784; ZVFHMIN-LABEL: vfwnmacc_vf_nxv8f32:785; ZVFHMIN: # %bb.0:786; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma787; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12788; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0789; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma790; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v16791; ZVFHMIN-NEXT: ret792 %head = insertelement <vscale x 8 x half> poison, half %c, i32 0793 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer794 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>795 %ve = fpext <vscale x 8 x half> %splat to <vscale x 8 x float>796 %vf = fneg <vscale x 8 x float> %va797 %vg = fneg <vscale x 8 x float> %vd798 %vh = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vg, <vscale x 8 x float> %ve, <vscale x 8 x float> %vf)799 ret <vscale x 8 x float> %vh800}801 802define <vscale x 8 x float> @vfwnmacc_fv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, half %c) {803; ZVFH-LABEL: vfwnmacc_fv_nxv8f32:804; ZVFH: # %bb.0:805; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma806; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v12807; ZVFH-NEXT: ret808;809; ZVFHMIN-LABEL: vfwnmacc_fv_nxv8f32:810; ZVFHMIN: # %bb.0:811; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma812; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12813; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0814; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma815; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v16816; ZVFHMIN-NEXT: ret817 %head = insertelement <vscale x 8 x half> poison, half %c, i32 0818 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer819 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>820 %ve = fpext <vscale x 8 x half> %splat to <vscale x 8 x float>821 %vf = fneg <vscale x 8 x float> %va822 %vg = fneg <vscale x 8 x float> %ve823 %vh = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vd, <vscale x 8 x float> %vg, <vscale x 8 x float> %vf)824 ret <vscale x 8 x float> %vh825}826 827define <vscale x 8 x float> @vfwmsac_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc) {828; ZVFH-LABEL: vfwmsac_vv_nxv8f32:829; ZVFH: # %bb.0:830; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma831; ZVFH-NEXT: vfwmsac.vv v8, v12, v14832; ZVFH-NEXT: ret833;834; ZVFHMIN-LABEL: vfwmsac_vv_nxv8f32:835; ZVFHMIN: # %bb.0:836; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma837; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12838; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14839; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma840; ZVFHMIN-NEXT: vfmsac.vv v8, v16, v20841; ZVFHMIN-NEXT: ret842 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>843 %ve = fpext <vscale x 8 x half> %vc to <vscale x 8 x float>844 %vf = fneg <vscale x 8 x float> %va845 %vg = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vd, <vscale x 8 x float> %ve, <vscale x 8 x float> %vf)846 ret <vscale x 8 x float> %vg847}848 849define <vscale x 8 x float> @vfwmsac_vf_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, half %c) {850; ZVFH-LABEL: vfwmsac_vf_nxv8f32:851; ZVFH: # %bb.0:852; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma853; ZVFH-NEXT: vfwmsac.vf v8, fa0, v12854; ZVFH-NEXT: ret855;856; ZVFHMIN-LABEL: vfwmsac_vf_nxv8f32:857; ZVFHMIN: # %bb.0:858; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma859; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12860; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0861; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma862; ZVFHMIN-NEXT: vfmsac.vf v8, fa5, v16863; ZVFHMIN-NEXT: ret864 %head = insertelement <vscale x 8 x half> poison, half %c, i32 0865 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer866 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>867 %ve = fpext <vscale x 8 x half> %splat to <vscale x 8 x float>868 %vf = fneg <vscale x 8 x float> %va869 %vg = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vd, <vscale x 8 x float> %ve, <vscale x 8 x float> %vf)870 ret <vscale x 8 x float> %vg871}872 873define <vscale x 8 x float> @vfwnmsac_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc) {874; ZVFH-LABEL: vfwnmsac_vv_nxv8f32:875; ZVFH: # %bb.0:876; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma877; ZVFH-NEXT: vfwnmsac.vv v8, v12, v14878; ZVFH-NEXT: ret879;880; ZVFHMIN-LABEL: vfwnmsac_vv_nxv8f32:881; ZVFHMIN: # %bb.0:882; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma883; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12884; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14885; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma886; ZVFHMIN-NEXT: vfnmsac.vv v8, v16, v20887; ZVFHMIN-NEXT: ret888 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>889 %ve = fpext <vscale x 8 x half> %vc to <vscale x 8 x float>890 %vf = fneg <vscale x 8 x float> %vd891 %vg = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vf, <vscale x 8 x float> %ve, <vscale x 8 x float> %va)892 ret <vscale x 8 x float> %vg893}894 895define <vscale x 8 x float> @vfwnmsac_vf_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, half %c) {896; ZVFH-LABEL: vfwnmsac_vf_nxv8f32:897; ZVFH: # %bb.0:898; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma899; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v12900; ZVFH-NEXT: ret901;902; ZVFHMIN-LABEL: vfwnmsac_vf_nxv8f32:903; ZVFHMIN: # %bb.0:904; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma905; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12906; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0907; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma908; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v16909; ZVFHMIN-NEXT: ret910 %head = insertelement <vscale x 8 x half> poison, half %c, i32 0911 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer912 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>913 %ve = fpext <vscale x 8 x half> %splat to <vscale x 8 x float>914 %vf = fneg <vscale x 8 x float> %vd915 %vg = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vf, <vscale x 8 x float> %ve, <vscale x 8 x float> %va)916 ret <vscale x 8 x float> %vg917}918 919define <vscale x 8 x float> @vfwnmsac_fv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x half> %vb, half %c) {920; ZVFH-LABEL: vfwnmsac_fv_nxv8f32:921; ZVFH: # %bb.0:922; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma923; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v12924; ZVFH-NEXT: ret925;926; ZVFHMIN-LABEL: vfwnmsac_fv_nxv8f32:927; ZVFHMIN: # %bb.0:928; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma929; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12930; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0931; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma932; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v16933; ZVFHMIN-NEXT: ret934 %head = insertelement <vscale x 8 x half> poison, half %c, i32 0935 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer936 %vd = fpext <vscale x 8 x half> %vb to <vscale x 8 x float>937 %ve = fpext <vscale x 8 x half> %splat to <vscale x 8 x float>938 %vf = fneg <vscale x 8 x float> %ve939 %vg = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vd, <vscale x 8 x float> %vf, <vscale x 8 x float> %va)940 ret <vscale x 8 x float> %vg941}942 943define <vscale x 16 x float> @vfwmacc_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc) {944; ZVFH-LABEL: vfwmacc_vv_nxv16f32:945; ZVFH: # %bb.0:946; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma947; ZVFH-NEXT: vfwmacc.vv v8, v16, v20948; ZVFH-NEXT: ret949;950; ZVFHMIN-LABEL: vfwmacc_vv_nxv16f32:951; ZVFHMIN: # %bb.0:952; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma953; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16954; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v20955; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma956; ZVFHMIN-NEXT: vfmacc.vv v8, v24, v0957; ZVFHMIN-NEXT: ret958 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>959 %ve = fpext <vscale x 16 x half> %vc to <vscale x 16 x float>960 %vf = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vd, <vscale x 16 x float> %ve, <vscale x 16 x float> %va)961 ret <vscale x 16 x float> %vf962}963 964define <vscale x 16 x float> @vfwmacc_vf_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, half %c) {965; ZVFH-LABEL: vfwmacc_vf_nxv16f32:966; ZVFH: # %bb.0:967; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma968; ZVFH-NEXT: vfwmacc.vf v8, fa0, v16969; ZVFH-NEXT: ret970;971; ZVFHMIN-LABEL: vfwmacc_vf_nxv16f32:972; ZVFHMIN: # %bb.0:973; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma974; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16975; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0976; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma977; ZVFHMIN-NEXT: vfmacc.vf v8, fa5, v24978; ZVFHMIN-NEXT: ret979 %head = insertelement <vscale x 16 x half> poison, half %c, i32 0980 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer981 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>982 %ve = fpext <vscale x 16 x half> %splat to <vscale x 16 x float>983 %vf = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vd, <vscale x 16 x float> %ve, <vscale x 16 x float> %va)984 ret <vscale x 16 x float> %vf985}986 987define <vscale x 16 x float> @vfwnmacc_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc) {988; ZVFH-LABEL: vfwnmacc_vv_nxv16f32:989; ZVFH: # %bb.0:990; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma991; ZVFH-NEXT: vfwnmacc.vv v8, v16, v20992; ZVFH-NEXT: ret993;994; ZVFHMIN-LABEL: vfwnmacc_vv_nxv16f32:995; ZVFHMIN: # %bb.0:996; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma997; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16998; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v20999; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1000; ZVFHMIN-NEXT: vfnmacc.vv v8, v24, v01001; ZVFHMIN-NEXT: ret1002 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>1003 %ve = fpext <vscale x 16 x half> %vc to <vscale x 16 x float>1004 %vf = fneg <vscale x 16 x float> %va1005 %vg = fneg <vscale x 16 x float> %vd1006 %vh = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vg, <vscale x 16 x float> %ve, <vscale x 16 x float> %vf)1007 ret <vscale x 16 x float> %vh1008}1009 1010define <vscale x 16 x float> @vfwnmacc_vf_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, half %c) {1011; ZVFH-LABEL: vfwnmacc_vf_nxv16f32:1012; ZVFH: # %bb.0:1013; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma1014; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v161015; ZVFH-NEXT: ret1016;1017; ZVFHMIN-LABEL: vfwnmacc_vf_nxv16f32:1018; ZVFHMIN: # %bb.0:1019; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1020; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v161021; ZVFHMIN-NEXT: fcvt.s.h fa5, fa01022; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1023; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v241024; ZVFHMIN-NEXT: ret1025 %head = insertelement <vscale x 16 x half> poison, half %c, i32 01026 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer1027 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>1028 %ve = fpext <vscale x 16 x half> %splat to <vscale x 16 x float>1029 %vf = fneg <vscale x 16 x float> %va1030 %vg = fneg <vscale x 16 x float> %vd1031 %vh = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vg, <vscale x 16 x float> %ve, <vscale x 16 x float> %vf)1032 ret <vscale x 16 x float> %vh1033}1034 1035define <vscale x 16 x float> @vfwnmacc_fv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, half %c) {1036; ZVFH-LABEL: vfwnmacc_fv_nxv16f32:1037; ZVFH: # %bb.0:1038; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma1039; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v161040; ZVFH-NEXT: ret1041;1042; ZVFHMIN-LABEL: vfwnmacc_fv_nxv16f32:1043; ZVFHMIN: # %bb.0:1044; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1045; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v161046; ZVFHMIN-NEXT: fcvt.s.h fa5, fa01047; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1048; ZVFHMIN-NEXT: vfnmacc.vf v8, fa5, v241049; ZVFHMIN-NEXT: ret1050 %head = insertelement <vscale x 16 x half> poison, half %c, i32 01051 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer1052 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>1053 %ve = fpext <vscale x 16 x half> %splat to <vscale x 16 x float>1054 %vf = fneg <vscale x 16 x float> %va1055 %vg = fneg <vscale x 16 x float> %ve1056 %vh = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vd, <vscale x 16 x float> %vg, <vscale x 16 x float> %vf)1057 ret <vscale x 16 x float> %vh1058}1059 1060define <vscale x 16 x float> @vfwmsac_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc) {1061; ZVFH-LABEL: vfwmsac_vv_nxv16f32:1062; ZVFH: # %bb.0:1063; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma1064; ZVFH-NEXT: vfwmsac.vv v8, v16, v201065; ZVFH-NEXT: ret1066;1067; ZVFHMIN-LABEL: vfwmsac_vv_nxv16f32:1068; ZVFHMIN: # %bb.0:1069; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1070; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v161071; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v201072; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1073; ZVFHMIN-NEXT: vfmsac.vv v8, v24, v01074; ZVFHMIN-NEXT: ret1075 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>1076 %ve = fpext <vscale x 16 x half> %vc to <vscale x 16 x float>1077 %vf = fneg <vscale x 16 x float> %va1078 %vg = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vd, <vscale x 16 x float> %ve, <vscale x 16 x float> %vf)1079 ret <vscale x 16 x float> %vg1080}1081 1082define <vscale x 16 x float> @vfwmsac_vf_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, half %c) {1083; ZVFH-LABEL: vfwmsac_vf_nxv16f32:1084; ZVFH: # %bb.0:1085; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma1086; ZVFH-NEXT: vfwmsac.vf v8, fa0, v161087; ZVFH-NEXT: ret1088;1089; ZVFHMIN-LABEL: vfwmsac_vf_nxv16f32:1090; ZVFHMIN: # %bb.0:1091; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1092; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v161093; ZVFHMIN-NEXT: fcvt.s.h fa5, fa01094; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1095; ZVFHMIN-NEXT: vfmsac.vf v8, fa5, v241096; ZVFHMIN-NEXT: ret1097 %head = insertelement <vscale x 16 x half> poison, half %c, i32 01098 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer1099 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>1100 %ve = fpext <vscale x 16 x half> %splat to <vscale x 16 x float>1101 %vf = fneg <vscale x 16 x float> %va1102 %vg = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vd, <vscale x 16 x float> %ve, <vscale x 16 x float> %vf)1103 ret <vscale x 16 x float> %vg1104}1105 1106define <vscale x 16 x float> @vfwnmsac_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc) {1107; ZVFH-LABEL: vfwnmsac_vv_nxv16f32:1108; ZVFH: # %bb.0:1109; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma1110; ZVFH-NEXT: vfwnmsac.vv v8, v16, v201111; ZVFH-NEXT: ret1112;1113; ZVFHMIN-LABEL: vfwnmsac_vv_nxv16f32:1114; ZVFHMIN: # %bb.0:1115; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1116; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v161117; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v201118; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1119; ZVFHMIN-NEXT: vfnmsac.vv v8, v24, v01120; ZVFHMIN-NEXT: ret1121 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>1122 %ve = fpext <vscale x 16 x half> %vc to <vscale x 16 x float>1123 %vf = fneg <vscale x 16 x float> %vd1124 %vg = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vf, <vscale x 16 x float> %ve, <vscale x 16 x float> %va)1125 ret <vscale x 16 x float> %vg1126}1127 1128define <vscale x 16 x float> @vfwnmsac_vf_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, half %c) {1129; ZVFH-LABEL: vfwnmsac_vf_nxv16f32:1130; ZVFH: # %bb.0:1131; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma1132; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v161133; ZVFH-NEXT: ret1134;1135; ZVFHMIN-LABEL: vfwnmsac_vf_nxv16f32:1136; ZVFHMIN: # %bb.0:1137; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1138; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v161139; ZVFHMIN-NEXT: fcvt.s.h fa5, fa01140; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1141; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v241142; ZVFHMIN-NEXT: ret1143 %head = insertelement <vscale x 16 x half> poison, half %c, i32 01144 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer1145 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>1146 %ve = fpext <vscale x 16 x half> %splat to <vscale x 16 x float>1147 %vf = fneg <vscale x 16 x float> %vd1148 %vg = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vf, <vscale x 16 x float> %ve, <vscale x 16 x float> %va)1149 ret <vscale x 16 x float> %vg1150}1151 1152define <vscale x 16 x float> @vfwnmsac_fv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x half> %vb, half %c) {1153; ZVFH-LABEL: vfwnmsac_fv_nxv16f32:1154; ZVFH: # %bb.0:1155; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma1156; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v161157; ZVFH-NEXT: ret1158;1159; ZVFHMIN-LABEL: vfwnmsac_fv_nxv16f32:1160; ZVFHMIN: # %bb.0:1161; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1162; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v161163; ZVFHMIN-NEXT: fcvt.s.h fa5, fa01164; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1165; ZVFHMIN-NEXT: vfnmsac.vf v8, fa5, v241166; ZVFHMIN-NEXT: ret1167 %head = insertelement <vscale x 16 x half> poison, half %c, i32 01168 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer1169 %vd = fpext <vscale x 16 x half> %vb to <vscale x 16 x float>1170 %ve = fpext <vscale x 16 x half> %splat to <vscale x 16 x float>1171 %vf = fneg <vscale x 16 x float> %ve1172 %vg = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vd, <vscale x 16 x float> %vf, <vscale x 16 x float> %va)1173 ret <vscale x 16 x float> %vg1174}1175 1176define <vscale x 1 x double> @vfwmacc_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc) {1177; CHECK-LABEL: vfwmacc_vv_nxv1f64:1178; CHECK: # %bb.0:1179; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1180; CHECK-NEXT: vfwmacc.vv v8, v9, v101181; CHECK-NEXT: ret1182 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1183 %ve = fpext <vscale x 1 x float> %vc to <vscale x 1 x double>1184 %vf = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vd, <vscale x 1 x double> %ve, <vscale x 1 x double> %va)1185 ret <vscale x 1 x double> %vf1186}1187 1188define <vscale x 1 x double> @vfwmacc_vf_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, float %c) {1189; CHECK-LABEL: vfwmacc_vf_nxv1f64:1190; CHECK: # %bb.0:1191; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1192; CHECK-NEXT: vfwmacc.vf v8, fa0, v91193; CHECK-NEXT: ret1194 %head = insertelement <vscale x 1 x float> poison, float %c, i32 01195 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1196 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1197 %ve = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>1198 %vf = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vd, <vscale x 1 x double> %ve, <vscale x 1 x double> %va)1199 ret <vscale x 1 x double> %vf1200}1201 1202define <vscale x 1 x double> @vfwnmacc_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc) {1203; CHECK-LABEL: vfwnmacc_vv_nxv1f64:1204; CHECK: # %bb.0:1205; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1206; CHECK-NEXT: vfwnmacc.vv v8, v9, v101207; CHECK-NEXT: ret1208 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1209 %ve = fpext <vscale x 1 x float> %vc to <vscale x 1 x double>1210 %vf = fneg <vscale x 1 x double> %va1211 %vg = fneg <vscale x 1 x double> %vd1212 %vh = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vg, <vscale x 1 x double> %ve, <vscale x 1 x double> %vf)1213 ret <vscale x 1 x double> %vh1214}1215 1216define <vscale x 1 x double> @vfwnmacc_vf_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, float %c) {1217; CHECK-LABEL: vfwnmacc_vf_nxv1f64:1218; CHECK: # %bb.0:1219; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1220; CHECK-NEXT: vfwnmacc.vf v8, fa0, v91221; CHECK-NEXT: ret1222 %head = insertelement <vscale x 1 x float> poison, float %c, i32 01223 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1224 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1225 %ve = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>1226 %vf = fneg <vscale x 1 x double> %va1227 %vg = fneg <vscale x 1 x double> %vd1228 %vh = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vg, <vscale x 1 x double> %ve, <vscale x 1 x double> %vf)1229 ret <vscale x 1 x double> %vh1230}1231 1232define <vscale x 1 x double> @vfwnmacc_fv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, float %c) {1233; CHECK-LABEL: vfwnmacc_fv_nxv1f64:1234; CHECK: # %bb.0:1235; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1236; CHECK-NEXT: vfwnmacc.vf v8, fa0, v91237; CHECK-NEXT: ret1238 %head = insertelement <vscale x 1 x float> poison, float %c, i32 01239 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1240 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1241 %ve = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>1242 %vf = fneg <vscale x 1 x double> %va1243 %vg = fneg <vscale x 1 x double> %ve1244 %vh = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vd, <vscale x 1 x double> %vg, <vscale x 1 x double> %vf)1245 ret <vscale x 1 x double> %vh1246}1247 1248define <vscale x 1 x double> @vfwmsac_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc) {1249; CHECK-LABEL: vfwmsac_vv_nxv1f64:1250; CHECK: # %bb.0:1251; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1252; CHECK-NEXT: vfwmsac.vv v8, v9, v101253; CHECK-NEXT: ret1254 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1255 %ve = fpext <vscale x 1 x float> %vc to <vscale x 1 x double>1256 %vf = fneg <vscale x 1 x double> %va1257 %vg = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vd, <vscale x 1 x double> %ve, <vscale x 1 x double> %vf)1258 ret <vscale x 1 x double> %vg1259}1260 1261define <vscale x 1 x double> @vfwmsac_vf_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, float %c) {1262; CHECK-LABEL: vfwmsac_vf_nxv1f64:1263; CHECK: # %bb.0:1264; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1265; CHECK-NEXT: vfwmsac.vf v8, fa0, v91266; CHECK-NEXT: ret1267 %head = insertelement <vscale x 1 x float> poison, float %c, i32 01268 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1269 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1270 %ve = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>1271 %vf = fneg <vscale x 1 x double> %va1272 %vg = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vd, <vscale x 1 x double> %ve, <vscale x 1 x double> %vf)1273 ret <vscale x 1 x double> %vg1274}1275 1276define <vscale x 1 x double> @vfwnmsac_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc) {1277; CHECK-LABEL: vfwnmsac_vv_nxv1f64:1278; CHECK: # %bb.0:1279; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1280; CHECK-NEXT: vfwnmsac.vv v8, v9, v101281; CHECK-NEXT: ret1282 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1283 %ve = fpext <vscale x 1 x float> %vc to <vscale x 1 x double>1284 %vf = fneg <vscale x 1 x double> %vd1285 %vg = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vf, <vscale x 1 x double> %ve, <vscale x 1 x double> %va)1286 ret <vscale x 1 x double> %vg1287}1288 1289define <vscale x 1 x double> @vfwnmsac_vf_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, float %c) {1290; CHECK-LABEL: vfwnmsac_vf_nxv1f64:1291; CHECK: # %bb.0:1292; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1293; CHECK-NEXT: vfwnmsac.vf v8, fa0, v91294; CHECK-NEXT: ret1295 %head = insertelement <vscale x 1 x float> poison, float %c, i32 01296 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1297 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1298 %ve = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>1299 %vf = fneg <vscale x 1 x double> %vd1300 %vg = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vf, <vscale x 1 x double> %ve, <vscale x 1 x double> %va)1301 ret <vscale x 1 x double> %vg1302}1303 1304define <vscale x 1 x double> @vfwnmsac_fv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb, float %c) {1305; CHECK-LABEL: vfwnmsac_fv_nxv1f64:1306; CHECK: # %bb.0:1307; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1308; CHECK-NEXT: vfwnmsac.vf v8, fa0, v91309; CHECK-NEXT: ret1310 %head = insertelement <vscale x 1 x float> poison, float %c, i32 01311 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1312 %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>1313 %ve = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>1314 %vf = fneg <vscale x 1 x double> %ve1315 %vg = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vd, <vscale x 1 x double> %vf, <vscale x 1 x double> %va)1316 ret <vscale x 1 x double> %vg1317}1318 1319define <vscale x 2 x double> @vfwmacc_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc) {1320; CHECK-LABEL: vfwmacc_vv_nxv2f64:1321; CHECK: # %bb.0:1322; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1323; CHECK-NEXT: vfwmacc.vv v8, v10, v111324; CHECK-NEXT: ret1325 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1326 %ve = fpext <vscale x 2 x float> %vc to <vscale x 2 x double>1327 %vf = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vd, <vscale x 2 x double> %ve, <vscale x 2 x double> %va)1328 ret <vscale x 2 x double> %vf1329}1330 1331define <vscale x 2 x double> @vfwmacc_vf_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, float %c) {1332; CHECK-LABEL: vfwmacc_vf_nxv2f64:1333; CHECK: # %bb.0:1334; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1335; CHECK-NEXT: vfwmacc.vf v8, fa0, v101336; CHECK-NEXT: ret1337 %head = insertelement <vscale x 2 x float> poison, float %c, i32 01338 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1339 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1340 %ve = fpext <vscale x 2 x float> %splat to <vscale x 2 x double>1341 %vf = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vd, <vscale x 2 x double> %ve, <vscale x 2 x double> %va)1342 ret <vscale x 2 x double> %vf1343}1344 1345define <vscale x 2 x double> @vfwnmacc_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc) {1346; CHECK-LABEL: vfwnmacc_vv_nxv2f64:1347; CHECK: # %bb.0:1348; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1349; CHECK-NEXT: vfwnmacc.vv v8, v10, v111350; CHECK-NEXT: ret1351 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1352 %ve = fpext <vscale x 2 x float> %vc to <vscale x 2 x double>1353 %vf = fneg <vscale x 2 x double> %va1354 %vg = fneg <vscale x 2 x double> %vd1355 %vh = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vg, <vscale x 2 x double> %ve, <vscale x 2 x double> %vf)1356 ret <vscale x 2 x double> %vh1357}1358 1359define <vscale x 2 x double> @vfwnmacc_vf_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, float %c) {1360; CHECK-LABEL: vfwnmacc_vf_nxv2f64:1361; CHECK: # %bb.0:1362; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1363; CHECK-NEXT: vfwnmacc.vf v8, fa0, v101364; CHECK-NEXT: ret1365 %head = insertelement <vscale x 2 x float> poison, float %c, i32 01366 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1367 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1368 %ve = fpext <vscale x 2 x float> %splat to <vscale x 2 x double>1369 %vf = fneg <vscale x 2 x double> %va1370 %vg = fneg <vscale x 2 x double> %vd1371 %vh = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vg, <vscale x 2 x double> %ve, <vscale x 2 x double> %vf)1372 ret <vscale x 2 x double> %vh1373}1374 1375define <vscale x 2 x double> @vfwnmacc_fv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, float %c) {1376; CHECK-LABEL: vfwnmacc_fv_nxv2f64:1377; CHECK: # %bb.0:1378; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1379; CHECK-NEXT: vfwnmacc.vf v8, fa0, v101380; CHECK-NEXT: ret1381 %head = insertelement <vscale x 2 x float> poison, float %c, i32 01382 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1383 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1384 %ve = fpext <vscale x 2 x float> %splat to <vscale x 2 x double>1385 %vf = fneg <vscale x 2 x double> %va1386 %vg = fneg <vscale x 2 x double> %ve1387 %vh = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vd, <vscale x 2 x double> %vg, <vscale x 2 x double> %vf)1388 ret <vscale x 2 x double> %vh1389}1390 1391define <vscale x 2 x double> @vfwmsac_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc) {1392; CHECK-LABEL: vfwmsac_vv_nxv2f64:1393; CHECK: # %bb.0:1394; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1395; CHECK-NEXT: vfwmsac.vv v8, v10, v111396; CHECK-NEXT: ret1397 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1398 %ve = fpext <vscale x 2 x float> %vc to <vscale x 2 x double>1399 %vf = fneg <vscale x 2 x double> %va1400 %vg = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vd, <vscale x 2 x double> %ve, <vscale x 2 x double> %vf)1401 ret <vscale x 2 x double> %vg1402}1403 1404define <vscale x 2 x double> @vfwmsac_vf_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, float %c) {1405; CHECK-LABEL: vfwmsac_vf_nxv2f64:1406; CHECK: # %bb.0:1407; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1408; CHECK-NEXT: vfwmsac.vf v8, fa0, v101409; CHECK-NEXT: ret1410 %head = insertelement <vscale x 2 x float> poison, float %c, i32 01411 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1412 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1413 %ve = fpext <vscale x 2 x float> %splat to <vscale x 2 x double>1414 %vf = fneg <vscale x 2 x double> %va1415 %vg = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vd, <vscale x 2 x double> %ve, <vscale x 2 x double> %vf)1416 ret <vscale x 2 x double> %vg1417}1418 1419define <vscale x 2 x double> @vfwnmsac_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc) {1420; CHECK-LABEL: vfwnmsac_vv_nxv2f64:1421; CHECK: # %bb.0:1422; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1423; CHECK-NEXT: vfwnmsac.vv v8, v10, v111424; CHECK-NEXT: ret1425 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1426 %ve = fpext <vscale x 2 x float> %vc to <vscale x 2 x double>1427 %vf = fneg <vscale x 2 x double> %vd1428 %vg = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vf, <vscale x 2 x double> %ve, <vscale x 2 x double> %va)1429 ret <vscale x 2 x double> %vg1430}1431 1432define <vscale x 2 x double> @vfwnmsac_vf_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, float %c) {1433; CHECK-LABEL: vfwnmsac_vf_nxv2f64:1434; CHECK: # %bb.0:1435; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1436; CHECK-NEXT: vfwnmsac.vf v8, fa0, v101437; CHECK-NEXT: ret1438 %head = insertelement <vscale x 2 x float> poison, float %c, i32 01439 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1440 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1441 %ve = fpext <vscale x 2 x float> %splat to <vscale x 2 x double>1442 %vf = fneg <vscale x 2 x double> %vd1443 %vg = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vf, <vscale x 2 x double> %ve, <vscale x 2 x double> %va)1444 ret <vscale x 2 x double> %vg1445}1446 1447define <vscale x 2 x double> @vfwnmsac_fv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb, float %c) {1448; CHECK-LABEL: vfwnmsac_fv_nxv2f64:1449; CHECK: # %bb.0:1450; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1451; CHECK-NEXT: vfwnmsac.vf v8, fa0, v101452; CHECK-NEXT: ret1453 %head = insertelement <vscale x 2 x float> poison, float %c, i32 01454 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1455 %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>1456 %ve = fpext <vscale x 2 x float> %splat to <vscale x 2 x double>1457 %vf = fneg <vscale x 2 x double> %ve1458 %vg = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %vd, <vscale x 2 x double> %vf, <vscale x 2 x double> %va)1459 ret <vscale x 2 x double> %vg1460}1461 1462define <vscale x 4 x double> @vfwmacc_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc) {1463; CHECK-LABEL: vfwmacc_vv_nxv4f64:1464; CHECK: # %bb.0:1465; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1466; CHECK-NEXT: vfwmacc.vv v8, v12, v141467; CHECK-NEXT: ret1468 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1469 %ve = fpext <vscale x 4 x float> %vc to <vscale x 4 x double>1470 %vf = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vd, <vscale x 4 x double> %ve, <vscale x 4 x double> %va)1471 ret <vscale x 4 x double> %vf1472}1473 1474define <vscale x 4 x double> @vfwmacc_vf_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, float %c) {1475; CHECK-LABEL: vfwmacc_vf_nxv4f64:1476; CHECK: # %bb.0:1477; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1478; CHECK-NEXT: vfwmacc.vf v8, fa0, v121479; CHECK-NEXT: ret1480 %head = insertelement <vscale x 4 x float> poison, float %c, i32 01481 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1482 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1483 %ve = fpext <vscale x 4 x float> %splat to <vscale x 4 x double>1484 %vf = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vd, <vscale x 4 x double> %ve, <vscale x 4 x double> %va)1485 ret <vscale x 4 x double> %vf1486}1487 1488define <vscale x 4 x double> @vfwnmacc_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc) {1489; CHECK-LABEL: vfwnmacc_vv_nxv4f64:1490; CHECK: # %bb.0:1491; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1492; CHECK-NEXT: vfwnmacc.vv v8, v12, v141493; CHECK-NEXT: ret1494 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1495 %ve = fpext <vscale x 4 x float> %vc to <vscale x 4 x double>1496 %vf = fneg <vscale x 4 x double> %va1497 %vg = fneg <vscale x 4 x double> %vd1498 %vh = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vg, <vscale x 4 x double> %ve, <vscale x 4 x double> %vf)1499 ret <vscale x 4 x double> %vh1500}1501 1502define <vscale x 4 x double> @vfwnmacc_vf_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, float %c) {1503; CHECK-LABEL: vfwnmacc_vf_nxv4f64:1504; CHECK: # %bb.0:1505; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1506; CHECK-NEXT: vfwnmacc.vf v8, fa0, v121507; CHECK-NEXT: ret1508 %head = insertelement <vscale x 4 x float> poison, float %c, i32 01509 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1510 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1511 %ve = fpext <vscale x 4 x float> %splat to <vscale x 4 x double>1512 %vf = fneg <vscale x 4 x double> %va1513 %vg = fneg <vscale x 4 x double> %vd1514 %vh = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vg, <vscale x 4 x double> %ve, <vscale x 4 x double> %vf)1515 ret <vscale x 4 x double> %vh1516}1517 1518define <vscale x 4 x double> @vfwnmacc_fv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, float %c) {1519; CHECK-LABEL: vfwnmacc_fv_nxv4f64:1520; CHECK: # %bb.0:1521; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1522; CHECK-NEXT: vfwnmacc.vf v8, fa0, v121523; CHECK-NEXT: ret1524 %head = insertelement <vscale x 4 x float> poison, float %c, i32 01525 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1526 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1527 %ve = fpext <vscale x 4 x float> %splat to <vscale x 4 x double>1528 %vf = fneg <vscale x 4 x double> %va1529 %vg = fneg <vscale x 4 x double> %ve1530 %vh = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vd, <vscale x 4 x double> %vg, <vscale x 4 x double> %vf)1531 ret <vscale x 4 x double> %vh1532}1533 1534define <vscale x 4 x double> @vfwmsac_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc) {1535; CHECK-LABEL: vfwmsac_vv_nxv4f64:1536; CHECK: # %bb.0:1537; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1538; CHECK-NEXT: vfwmsac.vv v8, v12, v141539; CHECK-NEXT: ret1540 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1541 %ve = fpext <vscale x 4 x float> %vc to <vscale x 4 x double>1542 %vf = fneg <vscale x 4 x double> %va1543 %vg = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vd, <vscale x 4 x double> %ve, <vscale x 4 x double> %vf)1544 ret <vscale x 4 x double> %vg1545}1546 1547define <vscale x 4 x double> @vfwmsac_vf_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, float %c) {1548; CHECK-LABEL: vfwmsac_vf_nxv4f64:1549; CHECK: # %bb.0:1550; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1551; CHECK-NEXT: vfwmsac.vf v8, fa0, v121552; CHECK-NEXT: ret1553 %head = insertelement <vscale x 4 x float> poison, float %c, i32 01554 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1555 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1556 %ve = fpext <vscale x 4 x float> %splat to <vscale x 4 x double>1557 %vf = fneg <vscale x 4 x double> %va1558 %vg = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vd, <vscale x 4 x double> %ve, <vscale x 4 x double> %vf)1559 ret <vscale x 4 x double> %vg1560}1561 1562define <vscale x 4 x double> @vfwnmsac_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc) {1563; CHECK-LABEL: vfwnmsac_vv_nxv4f64:1564; CHECK: # %bb.0:1565; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1566; CHECK-NEXT: vfwnmsac.vv v8, v12, v141567; CHECK-NEXT: ret1568 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1569 %ve = fpext <vscale x 4 x float> %vc to <vscale x 4 x double>1570 %vf = fneg <vscale x 4 x double> %vd1571 %vg = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vf, <vscale x 4 x double> %ve, <vscale x 4 x double> %va)1572 ret <vscale x 4 x double> %vg1573}1574 1575define <vscale x 4 x double> @vfwnmsac_vf_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, float %c) {1576; CHECK-LABEL: vfwnmsac_vf_nxv4f64:1577; CHECK: # %bb.0:1578; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1579; CHECK-NEXT: vfwnmsac.vf v8, fa0, v121580; CHECK-NEXT: ret1581 %head = insertelement <vscale x 4 x float> poison, float %c, i32 01582 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1583 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1584 %ve = fpext <vscale x 4 x float> %splat to <vscale x 4 x double>1585 %vf = fneg <vscale x 4 x double> %vd1586 %vg = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vf, <vscale x 4 x double> %ve, <vscale x 4 x double> %va)1587 ret <vscale x 4 x double> %vg1588}1589 1590define <vscale x 4 x double> @vfwnmsac_fv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb, float %c) {1591; CHECK-LABEL: vfwnmsac_fv_nxv4f64:1592; CHECK: # %bb.0:1593; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1594; CHECK-NEXT: vfwnmsac.vf v8, fa0, v121595; CHECK-NEXT: ret1596 %head = insertelement <vscale x 4 x float> poison, float %c, i32 01597 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1598 %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>1599 %ve = fpext <vscale x 4 x float> %splat to <vscale x 4 x double>1600 %vf = fneg <vscale x 4 x double> %ve1601 %vg = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %vd, <vscale x 4 x double> %vf, <vscale x 4 x double> %va)1602 ret <vscale x 4 x double> %vg1603}1604 1605define <vscale x 8 x double> @vfwmacc_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc) {1606; CHECK-LABEL: vfwmacc_vv_nxv8f64:1607; CHECK: # %bb.0:1608; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1609; CHECK-NEXT: vfwmacc.vv v8, v16, v201610; CHECK-NEXT: ret1611 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1612 %ve = fpext <vscale x 8 x float> %vc to <vscale x 8 x double>1613 %vf = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vd, <vscale x 8 x double> %ve, <vscale x 8 x double> %va)1614 ret <vscale x 8 x double> %vf1615}1616 1617define <vscale x 8 x double> @vfwmacc_vf_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, float %c) {1618; CHECK-LABEL: vfwmacc_vf_nxv8f64:1619; CHECK: # %bb.0:1620; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1621; CHECK-NEXT: vfwmacc.vf v8, fa0, v161622; CHECK-NEXT: ret1623 %head = insertelement <vscale x 8 x float> poison, float %c, i32 01624 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1625 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1626 %ve = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>1627 %vf = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vd, <vscale x 8 x double> %ve, <vscale x 8 x double> %va)1628 ret <vscale x 8 x double> %vf1629}1630 1631define <vscale x 8 x double> @vfwnmacc_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc) {1632; CHECK-LABEL: vfwnmacc_vv_nxv8f64:1633; CHECK: # %bb.0:1634; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1635; CHECK-NEXT: vfwnmacc.vv v8, v16, v201636; CHECK-NEXT: ret1637 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1638 %ve = fpext <vscale x 8 x float> %vc to <vscale x 8 x double>1639 %vf = fneg <vscale x 8 x double> %va1640 %vg = fneg <vscale x 8 x double> %vd1641 %vh = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vg, <vscale x 8 x double> %ve, <vscale x 8 x double> %vf)1642 ret <vscale x 8 x double> %vh1643}1644 1645define <vscale x 8 x double> @vfwnmacc_vf_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, float %c) {1646; CHECK-LABEL: vfwnmacc_vf_nxv8f64:1647; CHECK: # %bb.0:1648; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1649; CHECK-NEXT: vfwnmacc.vf v8, fa0, v161650; CHECK-NEXT: ret1651 %head = insertelement <vscale x 8 x float> poison, float %c, i32 01652 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1653 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1654 %ve = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>1655 %vf = fneg <vscale x 8 x double> %va1656 %vg = fneg <vscale x 8 x double> %vd1657 %vh = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vg, <vscale x 8 x double> %ve, <vscale x 8 x double> %vf)1658 ret <vscale x 8 x double> %vh1659}1660 1661define <vscale x 8 x double> @vfwnmacc_fv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, float %c) {1662; CHECK-LABEL: vfwnmacc_fv_nxv8f64:1663; CHECK: # %bb.0:1664; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1665; CHECK-NEXT: vfwnmacc.vf v8, fa0, v161666; CHECK-NEXT: ret1667 %head = insertelement <vscale x 8 x float> poison, float %c, i32 01668 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1669 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1670 %ve = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>1671 %vf = fneg <vscale x 8 x double> %va1672 %vg = fneg <vscale x 8 x double> %ve1673 %vh = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vd, <vscale x 8 x double> %vg, <vscale x 8 x double> %vf)1674 ret <vscale x 8 x double> %vh1675}1676 1677define <vscale x 8 x double> @vfwmsac_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc) {1678; CHECK-LABEL: vfwmsac_vv_nxv8f64:1679; CHECK: # %bb.0:1680; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1681; CHECK-NEXT: vfwmsac.vv v8, v16, v201682; CHECK-NEXT: ret1683 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1684 %ve = fpext <vscale x 8 x float> %vc to <vscale x 8 x double>1685 %vf = fneg <vscale x 8 x double> %va1686 %vg = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vd, <vscale x 8 x double> %ve, <vscale x 8 x double> %vf)1687 ret <vscale x 8 x double> %vg1688}1689 1690define <vscale x 8 x double> @vfwmsac_vf_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, float %c) {1691; CHECK-LABEL: vfwmsac_vf_nxv8f64:1692; CHECK: # %bb.0:1693; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1694; CHECK-NEXT: vfwmsac.vf v8, fa0, v161695; CHECK-NEXT: ret1696 %head = insertelement <vscale x 8 x float> poison, float %c, i32 01697 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1698 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1699 %ve = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>1700 %vf = fneg <vscale x 8 x double> %va1701 %vg = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vd, <vscale x 8 x double> %ve, <vscale x 8 x double> %vf)1702 ret <vscale x 8 x double> %vg1703}1704 1705define <vscale x 8 x double> @vfwnmsac_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc) {1706; CHECK-LABEL: vfwnmsac_vv_nxv8f64:1707; CHECK: # %bb.0:1708; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1709; CHECK-NEXT: vfwnmsac.vv v8, v16, v201710; CHECK-NEXT: ret1711 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1712 %ve = fpext <vscale x 8 x float> %vc to <vscale x 8 x double>1713 %vf = fneg <vscale x 8 x double> %vd1714 %vg = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vf, <vscale x 8 x double> %ve, <vscale x 8 x double> %va)1715 ret <vscale x 8 x double> %vg1716}1717 1718define <vscale x 8 x double> @vfwnmsac_vf_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, float %c) {1719; CHECK-LABEL: vfwnmsac_vf_nxv8f64:1720; CHECK: # %bb.0:1721; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1722; CHECK-NEXT: vfwnmsac.vf v8, fa0, v161723; CHECK-NEXT: ret1724 %head = insertelement <vscale x 8 x float> poison, float %c, i32 01725 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1726 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1727 %ve = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>1728 %vf = fneg <vscale x 8 x double> %vd1729 %vg = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vf, <vscale x 8 x double> %ve, <vscale x 8 x double> %va)1730 ret <vscale x 8 x double> %vg1731}1732 1733define <vscale x 8 x double> @vfwnmsac_fv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb, float %c) {1734; CHECK-LABEL: vfwnmsac_fv_nxv8f64:1735; CHECK: # %bb.0:1736; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1737; CHECK-NEXT: vfwnmsac.vf v8, fa0, v161738; CHECK-NEXT: ret1739 %head = insertelement <vscale x 8 x float> poison, float %c, i32 01740 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1741 %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>1742 %ve = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>1743 %vf = fneg <vscale x 8 x double> %ve1744 %vg = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vd, <vscale x 8 x double> %vf, <vscale x 8 x double> %va)1745 ret <vscale x 8 x double> %vg1746}1747 1748define <vscale x 1 x double> @vfwma_vv_nxv1f64_same_op(<vscale x 1 x float> %va, <vscale x 1 x double> %vb) {1749; CHECK-LABEL: vfwma_vv_nxv1f64_same_op:1750; CHECK: # %bb.0:1751; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1752; CHECK-NEXT: vfwmacc.vv v9, v8, v81753; CHECK-NEXT: vmv1r.v v8, v91754; CHECK-NEXT: ret1755 %vc = fpext <vscale x 1 x float> %va to <vscale x 1 x double>1756 %vd = call <vscale x 1 x double> @llvm.fma(<vscale x 1 x double> %vc, <vscale x 1 x double> %vc, <vscale x 1 x double> %vb)1757 ret <vscale x 1 x double> %vd1758}1759 1760define <vscale x 1 x double> @vfwmsac_vv_nxv1f64_same_op(<vscale x 1 x float> %va, <vscale x 1 x double> %vb) {1761; CHECK-LABEL: vfwmsac_vv_nxv1f64_same_op:1762; CHECK: # %bb.0:1763; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1764; CHECK-NEXT: vfwmsac.vv v9, v8, v81765; CHECK-NEXT: vmv1r.v v8, v91766; CHECK-NEXT: ret1767 %vc = fpext <vscale x 1 x float> %va to <vscale x 1 x double>1768 %vd = fneg <vscale x 1 x double> %vb1769 %ve = call <vscale x 1 x double> @llvm.fma(<vscale x 1 x double> %vc, <vscale x 1 x double> %vc, <vscale x 1 x double> %vd)1770 ret <vscale x 1 x double> %ve1771}1772