brintos

brintos / llvm-project-archived public Read only

0
0
Text · 82.0 KiB · eb5078c Raw
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