brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.8 KiB · c78dfb2 Raw
372 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s6 7; This tests a mix of vfnmsac and vfnmsub by using different operand orders to8; trigger commuting in TwoAddressInstructionPass.9 10define <vscale x 1 x half> @vfnmsub_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc) {11; CHECK-LABEL: vfnmsub_vv_nxv1f16:12; CHECK:       # %bb.0:13; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma14; CHECK-NEXT:    vfnmsub.vv v8, v9, v1015; CHECK-NEXT:    ret16  %neg = fneg <vscale x 1 x half> %va17  %vd = call <vscale x 1 x half> @llvm.fma.v1f16(<vscale x 1 x half> %neg, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc)18  ret <vscale x 1 x half> %vd19}20 21define <vscale x 1 x half> @vfnmsub_vf_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, half %c) {22; CHECK-LABEL: vfnmsub_vf_nxv1f16:23; CHECK:       # %bb.0:24; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma25; CHECK-NEXT:    vfnmsub.vf v8, fa0, v926; CHECK-NEXT:    ret27  %head = insertelement <vscale x 1 x half> poison, half %c, i32 028  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer29  %neg = fneg <vscale x 1 x half> %va30  %vd = call <vscale x 1 x half> @llvm.fma.v1f16(<vscale x 1 x half> %neg, <vscale x 1 x half> %splat, <vscale x 1 x half> %vb)31  ret <vscale x 1 x half> %vd32}33 34define <vscale x 2 x half> @vfnmsub_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc) {35; CHECK-LABEL: vfnmsub_vv_nxv2f16:36; CHECK:       # %bb.0:37; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma38; CHECK-NEXT:    vfnmsub.vv v8, v10, v939; CHECK-NEXT:    ret40  %neg = fneg <vscale x 2 x half> %va41  %vd = call <vscale x 2 x half> @llvm.fma.v2f16(<vscale x 2 x half> %neg, <vscale x 2 x half> %vc, <vscale x 2 x half> %vb)42  ret <vscale x 2 x half> %vd43}44 45define <vscale x 2 x half> @vfnmsub_vf_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, half %c) {46; CHECK-LABEL: vfnmsub_vf_nxv2f16:47; CHECK:       # %bb.0:48; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma49; CHECK-NEXT:    vfnmsub.vf v8, fa0, v950; CHECK-NEXT:    ret51  %head = insertelement <vscale x 2 x half> poison, half %c, i32 052  %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer53  %neg = fneg <vscale x 2 x half> %va54  %vd = call <vscale x 2 x half> @llvm.fma.v2f16(<vscale x 2 x half> %splat, <vscale x 2 x half> %neg, <vscale x 2 x half> %vb)55  ret <vscale x 2 x half> %vd56}57 58define <vscale x 4 x half> @vfnmsub_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc) {59; CHECK-LABEL: vfnmsub_vv_nxv4f16:60; CHECK:       # %bb.0:61; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma62; CHECK-NEXT:    vfnmsub.vv v8, v9, v1063; CHECK-NEXT:    ret64  %neg = fneg <vscale x 4 x half> %vb65  %vd = call <vscale x 4 x half> @llvm.fma.v4f16(<vscale x 4 x half> %neg, <vscale x 4 x half> %va, <vscale x 4 x half> %vc)66  ret <vscale x 4 x half> %vd67}68 69define <vscale x 4 x half> @vfnmsub_vf_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, half %c) {70; CHECK-LABEL: vfnmsub_vf_nxv4f16:71; CHECK:       # %bb.0:72; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma73; CHECK-NEXT:    vfnmsub.vf v8, fa0, v974; CHECK-NEXT:    ret75  %head = insertelement <vscale x 4 x half> poison, half %c, i32 076  %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer77  %neg = fneg <vscale x 4 x half> %splat78  %vd = call <vscale x 4 x half> @llvm.fma.v4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %neg, <vscale x 4 x half> %vb)79  ret <vscale x 4 x half> %vd80}81 82define <vscale x 8 x half> @vfnmsub_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc) {83; CHECK-LABEL: vfnmsub_vv_nxv8f16:84; CHECK:       # %bb.0:85; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma86; CHECK-NEXT:    vfnmsac.vv v8, v12, v1087; CHECK-NEXT:    ret88  %neg = fneg <vscale x 8 x half> %vb89  %vd = call <vscale x 8 x half> @llvm.fma.v8f16(<vscale x 8 x half> %neg, <vscale x 8 x half> %vc, <vscale x 8 x half> %va)90  ret <vscale x 8 x half> %vd91}92 93define <vscale x 8 x half> @vfnmsub_vf_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, half %c) {94; CHECK-LABEL: vfnmsub_vf_nxv8f16:95; CHECK:       # %bb.0:96; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma97; CHECK-NEXT:    vfnmsac.vf v8, fa0, v1098; CHECK-NEXT:    ret99  %head = insertelement <vscale x 8 x half> poison, half %c, i32 0100  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer101  %neg = fneg <vscale x 8 x half> %splat102  %vd = call <vscale x 8 x half> @llvm.fma.v8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %neg, <vscale x 8 x half> %va)103  ret <vscale x 8 x half> %vd104}105 106define <vscale x 16 x half> @vfnmsub_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc) {107; CHECK-LABEL: vfnmsub_vv_nxv16f16:108; CHECK:       # %bb.0:109; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma110; CHECK-NEXT:    vfnmsub.vv v8, v16, v12111; CHECK-NEXT:    ret112  %neg = fneg <vscale x 16 x half> %vc113  %vd = call <vscale x 16 x half> @llvm.fma.v16f16(<vscale x 16 x half> %neg, <vscale x 16 x half> %va, <vscale x 16 x half> %vb)114  ret <vscale x 16 x half> %vd115}116 117define <vscale x 16 x half> @vfnmsub_vf_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, half %c) {118; CHECK-LABEL: vfnmsub_vf_nxv16f16:119; CHECK:       # %bb.0:120; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma121; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12122; CHECK-NEXT:    ret123  %head = insertelement <vscale x 16 x half> poison, half %c, i32 0124  %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer125  %neg = fneg <vscale x 16 x half> %splat126  %vd = call <vscale x 16 x half> @llvm.fma.v16f16(<vscale x 16 x half> %neg, <vscale x 16 x half> %va, <vscale x 16 x half> %vb)127  ret <vscale x 16 x half> %vd128}129 130define <vscale x 32 x half> @vfnmsub_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc) {131; CHECK-LABEL: vfnmsub_vv_nxv32f16:132; CHECK:       # %bb.0:133; CHECK-NEXT:    vl8re16.v v24, (a0)134; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma135; CHECK-NEXT:    vfnmsub.vv v8, v24, v16136; CHECK-NEXT:    ret137  %neg = fneg <vscale x 32 x half> %vc138  %vd = call <vscale x 32 x half> @llvm.fma.v32f16(<vscale x 32 x half> %neg, <vscale x 32 x half> %va, <vscale x 32 x half> %vb)139  ret <vscale x 32 x half> %vd140}141 142define <vscale x 32 x half> @vfnmsub_vf_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, half %c) {143; CHECK-LABEL: vfnmsub_vf_nxv32f16:144; CHECK:       # %bb.0:145; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma146; CHECK-NEXT:    vfnmsac.vf v8, fa0, v16147; CHECK-NEXT:    ret148  %head = insertelement <vscale x 32 x half> poison, half %c, i32 0149  %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer150  %neg = fneg <vscale x 32 x half> %splat151  %vd = call <vscale x 32 x half> @llvm.fma.v32f16(<vscale x 32 x half> %neg, <vscale x 32 x half> %vb, <vscale x 32 x half> %va)152  ret <vscale x 32 x half> %vd153}154 155define <vscale x 1 x float> @vfnmsub_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc) {156; CHECK-LABEL: vfnmsub_vv_nxv1f32:157; CHECK:       # %bb.0:158; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma159; CHECK-NEXT:    vfnmsub.vv v8, v9, v10160; CHECK-NEXT:    ret161  %neg = fneg <vscale x 1 x float> %vb162  %vd = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %neg, <vscale x 1 x float> %vc)163  ret <vscale x 1 x float> %vd164}165 166define <vscale x 1 x float> @vfnmsub_vf_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, float %c) {167; CHECK-LABEL: vfnmsub_vf_nxv1f32:168; CHECK:       # %bb.0:169; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma170; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9171; CHECK-NEXT:    ret172  %head = insertelement <vscale x 1 x float> poison, float %c, i32 0173  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer174  %neg = fneg <vscale x 1 x float> %va175  %vd = call <vscale x 1 x float> @llvm.fma.v1f32(<vscale x 1 x float> %neg, <vscale x 1 x float> %splat, <vscale x 1 x float> %vb)176  ret <vscale x 1 x float> %vd177}178 179define <vscale x 2 x float> @vfnmsub_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc) {180; CHECK-LABEL: vfnmsub_vv_nxv2f32:181; CHECK:       # %bb.0:182; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma183; CHECK-NEXT:    vfnmsub.vv v8, v10, v9184; CHECK-NEXT:    ret185  %neg = fneg <vscale x 2 x float> %vc186  %vd = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %neg, <vscale x 2 x float> %vb)187  ret <vscale x 2 x float> %vd188}189 190define <vscale x 2 x float> @vfnmsub_vf_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, float %c) {191; CHECK-LABEL: vfnmsub_vf_nxv2f32:192; CHECK:       # %bb.0:193; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma194; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9195; CHECK-NEXT:    ret196  %head = insertelement <vscale x 2 x float> poison, float %c, i32 0197  %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer198  %neg = fneg <vscale x 2 x float> %va199  %vd = call <vscale x 2 x float> @llvm.fma.v2f32(<vscale x 2 x float> %splat, <vscale x 2 x float> %neg, <vscale x 2 x float> %vb)200  ret <vscale x 2 x float> %vd201}202 203define <vscale x 4 x float> @vfnmsub_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc) {204; CHECK-LABEL: vfnmsub_vv_nxv4f32:205; CHECK:       # %bb.0:206; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma207; CHECK-NEXT:    vfnmsub.vv v8, v10, v12208; CHECK-NEXT:    ret209  %neg = fneg <vscale x 4 x float> %va210  %vd = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %neg, <vscale x 4 x float> %vc)211  ret <vscale x 4 x float> %vd212}213 214define <vscale x 4 x float> @vfnmsub_vf_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, float %c) {215; CHECK-LABEL: vfnmsub_vf_nxv4f32:216; CHECK:       # %bb.0:217; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma218; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10219; CHECK-NEXT:    ret220  %head = insertelement <vscale x 4 x float> poison, float %c, i32 0221  %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer222  %neg = fneg <vscale x 4 x float> %splat223  %vd = call <vscale x 4 x float> @llvm.fma.v4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %neg, <vscale x 4 x float> %vb)224  ret <vscale x 4 x float> %vd225}226 227define <vscale x 8 x float> @vfnmsub_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc) {228; CHECK-LABEL: vfnmsub_vv_nxv8f32:229; CHECK:       # %bb.0:230; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma231; CHECK-NEXT:    vfnmsac.vv v8, v16, v12232; CHECK-NEXT:    ret233  %neg = fneg <vscale x 8 x float> %vc234  %vd = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %neg, <vscale x 8 x float> %va)235  ret <vscale x 8 x float> %vd236}237 238define <vscale x 8 x float> @vfnmsub_vf_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, float %c) {239; CHECK-LABEL: vfnmsub_vf_nxv8f32:240; CHECK:       # %bb.0:241; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma242; CHECK-NEXT:    vfnmsac.vf v8, fa0, v12243; CHECK-NEXT:    ret244  %head = insertelement <vscale x 8 x float> poison, float %c, i32 0245  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer246  %neg = fneg <vscale x 8 x float> %splat247  %vd = call <vscale x 8 x float> @llvm.fma.v8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %neg, <vscale x 8 x float> %va)248  ret <vscale x 8 x float> %vd249}250 251define <vscale x 16 x float> @vfnmsub_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc) {252; CHECK-LABEL: vfnmsub_vv_nxv16f32:253; CHECK:       # %bb.0:254; CHECK-NEXT:    vl8re32.v v24, (a0)255; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma256; CHECK-NEXT:    vfnmsub.vv v8, v24, v16257; CHECK-NEXT:    ret258  %neg = fneg <vscale x 16 x float> %va259  %vd = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %vc, <vscale x 16 x float> %neg, <vscale x 16 x float> %vb)260  ret <vscale x 16 x float> %vd261}262 263define <vscale x 16 x float> @vfnmsub_vf_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, float %c) {264; CHECK-LABEL: vfnmsub_vf_nxv16f32:265; CHECK:       # %bb.0:266; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma267; CHECK-NEXT:    vfnmsub.vf v8, fa0, v16268; CHECK-NEXT:    ret269  %head = insertelement <vscale x 16 x float> poison, float %c, i32 0270  %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer271  %neg = fneg <vscale x 16 x float> %splat272  %vd = call <vscale x 16 x float> @llvm.fma.v16f32(<vscale x 16 x float> %neg, <vscale x 16 x float> %va, <vscale x 16 x float> %vb)273  ret <vscale x 16 x float> %vd274}275 276define <vscale x 1 x double> @vfnmsub_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc) {277; CHECK-LABEL: vfnmsub_vv_nxv1f64:278; CHECK:       # %bb.0:279; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma280; CHECK-NEXT:    vfnmsac.vv v8, v10, v9281; CHECK-NEXT:    ret282  %neg = fneg <vscale x 1 x double> %vb283  %vd = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %vc, <vscale x 1 x double> %neg, <vscale x 1 x double> %va)284  ret <vscale x 1 x double> %vd285}286 287define <vscale x 1 x double> @vfnmsub_vf_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, double %c) {288; CHECK-LABEL: vfnmsub_vf_nxv1f64:289; CHECK:       # %bb.0:290; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma291; CHECK-NEXT:    vfnmsub.vf v8, fa0, v9292; CHECK-NEXT:    ret293  %head = insertelement <vscale x 1 x double> poison, double %c, i32 0294  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer295  %neg = fneg <vscale x 1 x double> %va296  %vd = call <vscale x 1 x double> @llvm.fma.v1f64(<vscale x 1 x double> %neg, <vscale x 1 x double> %splat, <vscale x 1 x double> %vb)297  ret <vscale x 1 x double> %vd298}299 300define <vscale x 2 x double> @vfnmsub_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc) {301; CHECK-LABEL: vfnmsub_vv_nxv2f64:302; CHECK:       # %bb.0:303; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma304; CHECK-NEXT:    vfnmsub.vv v8, v12, v10305; CHECK-NEXT:    ret306  %neg = fneg <vscale x 2 x double> %va307  %vd = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %neg, <vscale x 2 x double> %vc, <vscale x 2 x double> %vb)308  ret <vscale x 2 x double> %vd309}310 311define <vscale x 2 x double> @vfnmsub_vf_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, double %c) {312; CHECK-LABEL: vfnmsub_vf_nxv2f64:313; CHECK:       # %bb.0:314; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma315; CHECK-NEXT:    vfnmsub.vf v8, fa0, v10316; CHECK-NEXT:    ret317  %head = insertelement <vscale x 2 x double> poison, double %c, i32 0318  %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer319  %neg = fneg <vscale x 2 x double> %va320  %vd = call <vscale x 2 x double> @llvm.fma.v2f64(<vscale x 2 x double> %splat, <vscale x 2 x double> %neg, <vscale x 2 x double> %vb)321  ret <vscale x 2 x double> %vd322}323 324define <vscale x 4 x double> @vfnmsub_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc) {325; CHECK-LABEL: vfnmsub_vv_nxv4f64:326; CHECK:       # %bb.0:327; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma328; CHECK-NEXT:    vfnmsub.vv v8, v12, v16329; CHECK-NEXT:    ret330  %neg = fneg <vscale x 4 x double> %vb331  %vd = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %neg, <vscale x 4 x double> %va, <vscale x 4 x double> %vc)332  ret <vscale x 4 x double> %vd333}334 335define <vscale x 4 x double> @vfnmsub_vf_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, double %c) {336; CHECK-LABEL: vfnmsub_vf_nxv4f64:337; CHECK:       # %bb.0:338; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma339; CHECK-NEXT:    vfnmsub.vf v8, fa0, v12340; CHECK-NEXT:    ret341  %head = insertelement <vscale x 4 x double> poison, double %c, i32 0342  %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer343  %neg = fneg <vscale x 4 x double> %splat344  %vd = call <vscale x 4 x double> @llvm.fma.v4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %neg, <vscale x 4 x double> %vb)345  ret <vscale x 4 x double> %vd346}347 348define <vscale x 8 x double> @vfnmsub_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc) {349; CHECK-LABEL: vfnmsub_vv_nxv8f64:350; CHECK:       # %bb.0:351; CHECK-NEXT:    vl8re64.v v24, (a0)352; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma353; CHECK-NEXT:    vfnmsac.vv v8, v16, v24354; CHECK-NEXT:    ret355  %neg = fneg <vscale x 8 x double> %vb356  %vd = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %neg, <vscale x 8 x double> %vc, <vscale x 8 x double> %va)357  ret <vscale x 8 x double> %vd358}359 360define <vscale x 8 x double> @vfnmsub_vf_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, double %c) {361; CHECK-LABEL: vfnmsub_vf_nxv8f64:362; CHECK:       # %bb.0:363; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma364; CHECK-NEXT:    vfnmsac.vf v8, fa0, v16365; CHECK-NEXT:    ret366  %head = insertelement <vscale x 8 x double> poison, double %c, i32 0367  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer368  %neg = fneg <vscale x 8 x double> %splat369  %vd = call <vscale x 8 x double> @llvm.fma.v8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %neg, <vscale x 8 x double> %va)370  ret <vscale x 8 x double> %vd371}372