brintos

brintos / llvm-project-archived public Read only

0
0
Text · 84.3 KiB · b5f844b Raw
2069 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 7define <1 x float> @vfwmacc_vv_v1f32(<1 x float> %va, <1 x half> %vb, <1 x half> %vc) {8; CHECK-LABEL: vfwmacc_vv_v1f32:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma11; CHECK-NEXT:    vfwmacc.vv v8, v9, v1012; CHECK-NEXT:    ret13  %vd = fpext <1 x half> %vb to <1 x float>14  %ve = fpext <1 x half> %vc to <1 x float>15  %vf = call <1 x float> @llvm.fma.v1f32(<1 x float> %vd, <1 x float> %ve, <1 x float> %va)16  ret <1 x float> %vf17}18 19define <1 x float> @vfwmacc_vf_v1f32(<1 x float> %va, <1 x half> %vb, half %c) {20; CHECK-LABEL: vfwmacc_vf_v1f32:21; CHECK:       # %bb.0:22; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma23; CHECK-NEXT:    vfwmacc.vf v8, fa0, v924; CHECK-NEXT:    ret25  %head = insertelement <1 x half> poison, half %c, i32 026  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer27  %vd = fpext <1 x half> %vb to <1 x float>28  %ve = fpext <1 x half> %splat to <1 x float>29  %vf = call <1 x float> @llvm.fma.v1f32(<1 x float> %vd, <1 x float> %ve, <1 x float> %va)30  ret <1 x float> %vf31}32 33define <1 x float> @vfwnmacc_vv_v1f32(<1 x float> %va, <1 x half> %vb, <1 x half> %vc) {34; CHECK-LABEL: vfwnmacc_vv_v1f32:35; CHECK:       # %bb.0:36; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma37; CHECK-NEXT:    vfwnmacc.vv v8, v9, v1038; CHECK-NEXT:    ret39  %vd = fpext <1 x half> %vb to <1 x float>40  %ve = fpext <1 x half> %vc to <1 x float>41  %vf = fneg <1 x float> %va42  %vg = fneg <1 x float> %vd43  %vh = call <1 x float> @llvm.fma.v1f32(<1 x float> %vg, <1 x float> %ve, <1 x float> %vf)44  ret <1 x float> %vh45}46 47define <1 x float> @vfwnmacc_vf_v1f32(<1 x float> %va, <1 x half> %vb, half %c) {48; CHECK-LABEL: vfwnmacc_vf_v1f32:49; CHECK:       # %bb.0:50; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma51; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v952; CHECK-NEXT:    ret53  %head = insertelement <1 x half> poison, half %c, i32 054  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer55  %vd = fpext <1 x half> %vb to <1 x float>56  %ve = fpext <1 x half> %splat to <1 x float>57  %vf = fneg <1 x float> %va58  %vg = fneg <1 x float> %vd59  %vh = call <1 x float> @llvm.fma.v1f32(<1 x float> %vg, <1 x float> %ve, <1 x float> %vf)60  ret <1 x float> %vh61}62 63define <1 x float> @vfwnmacc_fv_v1f32(<1 x float> %va, <1 x half> %vb, half %c) {64; CHECK-LABEL: vfwnmacc_fv_v1f32:65; CHECK:       # %bb.0:66; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma67; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v968; CHECK-NEXT:    ret69  %head = insertelement <1 x half> poison, half %c, i32 070  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer71  %vd = fpext <1 x half> %vb to <1 x float>72  %ve = fpext <1 x half> %splat to <1 x float>73  %vf = fneg <1 x float> %va74  %vg = fneg <1 x float> %ve75  %vh = call <1 x float> @llvm.fma.v1f32(<1 x float> %vd, <1 x float> %vg, <1 x float> %vf)76  ret <1 x float> %vh77}78 79define <1 x float> @vfwmsac_vv_v1f32(<1 x float> %va, <1 x half> %vb, <1 x half> %vc) {80; CHECK-LABEL: vfwmsac_vv_v1f32:81; CHECK:       # %bb.0:82; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma83; CHECK-NEXT:    vfwmsac.vv v8, v9, v1084; CHECK-NEXT:    ret85  %vd = fpext <1 x half> %vb to <1 x float>86  %ve = fpext <1 x half> %vc to <1 x float>87  %vf = fneg <1 x float> %va88  %vg = call <1 x float> @llvm.fma.v1f32(<1 x float> %vd, <1 x float> %ve, <1 x float> %vf)89  ret <1 x float> %vg90}91 92define <1 x float> @vfwmsac_vf_v1f32(<1 x float> %va, <1 x half> %vb, half %c) {93; CHECK-LABEL: vfwmsac_vf_v1f32:94; CHECK:       # %bb.0:95; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma96; CHECK-NEXT:    vfwmsac.vf v8, fa0, v997; CHECK-NEXT:    ret98  %head = insertelement <1 x half> poison, half %c, i32 099  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer100  %vd = fpext <1 x half> %vb to <1 x float>101  %ve = fpext <1 x half> %splat to <1 x float>102  %vf = fneg <1 x float> %va103  %vg = call <1 x float> @llvm.fma.v1f32(<1 x float> %vd, <1 x float> %ve, <1 x float> %vf)104  ret <1 x float> %vg105}106 107define <1 x float> @vfwnmsac_vv_v1f32(<1 x float> %va, <1 x half> %vb, <1 x half> %vc) {108; CHECK-LABEL: vfwnmsac_vv_v1f32:109; CHECK:       # %bb.0:110; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma111; CHECK-NEXT:    vfwnmsac.vv v8, v9, v10112; CHECK-NEXT:    ret113  %vd = fpext <1 x half> %vb to <1 x float>114  %ve = fpext <1 x half> %vc to <1 x float>115  %vf = fneg <1 x float> %vd116  %vg = call <1 x float> @llvm.fma.v1f32(<1 x float> %vf, <1 x float> %ve, <1 x float> %va)117  ret <1 x float> %vg118}119 120define <1 x float> @vfwnmsac_vf_v1f32(<1 x float> %va, <1 x half> %vb, half %c) {121; CHECK-LABEL: vfwnmsac_vf_v1f32:122; CHECK:       # %bb.0:123; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma124; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9125; CHECK-NEXT:    ret126  %head = insertelement <1 x half> poison, half %c, i32 0127  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer128  %vd = fpext <1 x half> %vb to <1 x float>129  %ve = fpext <1 x half> %splat to <1 x float>130  %vf = fneg <1 x float> %vd131  %vg = call <1 x float> @llvm.fma.v1f32(<1 x float> %vf, <1 x float> %ve, <1 x float> %va)132  ret <1 x float> %vg133}134 135define <1 x float> @vfwnmsac_fv_v1f32(<1 x float> %va, <1 x half> %vb, half %c) {136; CHECK-LABEL: vfwnmsac_fv_v1f32:137; CHECK:       # %bb.0:138; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma139; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9140; CHECK-NEXT:    ret141  %head = insertelement <1 x half> poison, half %c, i32 0142  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer143  %vd = fpext <1 x half> %vb to <1 x float>144  %ve = fpext <1 x half> %splat to <1 x float>145  %vf = fneg <1 x float> %ve146  %vg = call <1 x float> @llvm.fma.v1f32(<1 x float> %vd, <1 x float> %vf, <1 x float> %va)147  ret <1 x float> %vg148}149 150define <2 x float> @vfwmacc_vv_v2f32(<2 x float> %va, <2 x half> %vb, <2 x half> %vc) {151; CHECK-LABEL: vfwmacc_vv_v2f32:152; CHECK:       # %bb.0:153; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma154; CHECK-NEXT:    vfwmacc.vv v8, v9, v10155; CHECK-NEXT:    ret156  %vd = fpext <2 x half> %vb to <2 x float>157  %ve = fpext <2 x half> %vc to <2 x float>158  %vf = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %ve, <2 x float> %va)159  ret <2 x float> %vf160}161 162define <2 x float> @vfwmacc_vf_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {163; CHECK-LABEL: vfwmacc_vf_v2f32:164; CHECK:       # %bb.0:165; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma166; CHECK-NEXT:    vfwmacc.vf v8, fa0, v9167; CHECK-NEXT:    ret168  %head = insertelement <2 x half> poison, half %c, i32 0169  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer170  %vd = fpext <2 x half> %vb to <2 x float>171  %ve = fpext <2 x half> %splat to <2 x float>172  %vf = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %ve, <2 x float> %va)173  ret <2 x float> %vf174}175 176define <2 x float> @vfwnmacc_vv_v2f32(<2 x float> %va, <2 x half> %vb, <2 x half> %vc) {177; CHECK-LABEL: vfwnmacc_vv_v2f32:178; CHECK:       # %bb.0:179; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma180; CHECK-NEXT:    vfwnmacc.vv v8, v9, v10181; CHECK-NEXT:    ret182  %vd = fpext <2 x half> %vb to <2 x float>183  %ve = fpext <2 x half> %vc to <2 x float>184  %vf = fneg <2 x float> %va185  %vg = fneg <2 x float> %vd186  %vh = call <2 x float> @llvm.fma.v2f32(<2 x float> %vg, <2 x float> %ve, <2 x float> %vf)187  ret <2 x float> %vh188}189 190define <2 x float> @vfwnmacc_vf_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {191; CHECK-LABEL: vfwnmacc_vf_v2f32:192; CHECK:       # %bb.0:193; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma194; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v9195; CHECK-NEXT:    ret196  %head = insertelement <2 x half> poison, half %c, i32 0197  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer198  %vd = fpext <2 x half> %vb to <2 x float>199  %ve = fpext <2 x half> %splat to <2 x float>200  %vf = fneg <2 x float> %va201  %vg = fneg <2 x float> %vd202  %vh = call <2 x float> @llvm.fma.v2f32(<2 x float> %vg, <2 x float> %ve, <2 x float> %vf)203  ret <2 x float> %vh204}205 206define <2 x float> @vfwnmacc_fv_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {207; CHECK-LABEL: vfwnmacc_fv_v2f32:208; CHECK:       # %bb.0:209; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma210; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v9211; CHECK-NEXT:    ret212  %head = insertelement <2 x half> poison, half %c, i32 0213  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer214  %vd = fpext <2 x half> %vb to <2 x float>215  %ve = fpext <2 x half> %splat to <2 x float>216  %vf = fneg <2 x float> %va217  %vg = fneg <2 x float> %ve218  %vh = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %vg, <2 x float> %vf)219  ret <2 x float> %vh220}221 222define <2 x float> @vfwmsac_vv_v2f32(<2 x float> %va, <2 x half> %vb, <2 x half> %vc) {223; CHECK-LABEL: vfwmsac_vv_v2f32:224; CHECK:       # %bb.0:225; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma226; CHECK-NEXT:    vfwmsac.vv v8, v9, v10227; CHECK-NEXT:    ret228  %vd = fpext <2 x half> %vb to <2 x float>229  %ve = fpext <2 x half> %vc to <2 x float>230  %vf = fneg <2 x float> %va231  %vg = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %ve, <2 x float> %vf)232  ret <2 x float> %vg233}234 235define <2 x float> @vfwmsac_vf_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {236; CHECK-LABEL: vfwmsac_vf_v2f32:237; CHECK:       # %bb.0:238; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma239; CHECK-NEXT:    vfwmsac.vf v8, fa0, v9240; CHECK-NEXT:    ret241  %head = insertelement <2 x half> poison, half %c, i32 0242  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer243  %vd = fpext <2 x half> %vb to <2 x float>244  %ve = fpext <2 x half> %splat to <2 x float>245  %vf = fneg <2 x float> %va246  %vg = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %ve, <2 x float> %vf)247  ret <2 x float> %vg248}249 250define <2 x float> @vfwnmsac_vv_v2f32(<2 x float> %va, <2 x half> %vb, <2 x half> %vc) {251; CHECK-LABEL: vfwnmsac_vv_v2f32:252; CHECK:       # %bb.0:253; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma254; CHECK-NEXT:    vfwnmsac.vv v8, v9, v10255; CHECK-NEXT:    ret256  %vd = fpext <2 x half> %vb to <2 x float>257  %ve = fpext <2 x half> %vc to <2 x float>258  %vf = fneg <2 x float> %vd259  %vg = call <2 x float> @llvm.fma.v2f32(<2 x float> %vf, <2 x float> %ve, <2 x float> %va)260  ret <2 x float> %vg261}262 263define <2 x float> @vfwnmsac_vf_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {264; CHECK-LABEL: vfwnmsac_vf_v2f32:265; CHECK:       # %bb.0:266; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma267; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9268; CHECK-NEXT:    ret269  %head = insertelement <2 x half> poison, half %c, i32 0270  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer271  %vd = fpext <2 x half> %vb to <2 x float>272  %ve = fpext <2 x half> %splat to <2 x float>273  %vf = fneg <2 x float> %vd274  %vg = call <2 x float> @llvm.fma.v2f32(<2 x float> %vf, <2 x float> %ve, <2 x float> %va)275  ret <2 x float> %vg276}277 278define <2 x float> @vfwnmsac_fv_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {279; CHECK-LABEL: vfwnmsac_fv_v2f32:280; CHECK:       # %bb.0:281; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma282; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9283; CHECK-NEXT:    ret284  %head = insertelement <2 x half> poison, half %c, i32 0285  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer286  %vd = fpext <2 x half> %vb to <2 x float>287  %ve = fpext <2 x half> %splat to <2 x float>288  %vf = fneg <2 x float> %ve289  %vg = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %vf, <2 x float> %va)290  ret <2 x float> %vg291}292 293define <4 x float> @vfwmacc_vv_v4f32(<4 x float> %va, <4 x half> %vb, <4 x half> %vc) {294; CHECK-LABEL: vfwmacc_vv_v4f32:295; CHECK:       # %bb.0:296; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma297; CHECK-NEXT:    vfwmacc.vv v8, v9, v10298; CHECK-NEXT:    ret299  %vd = fpext <4 x half> %vb to <4 x float>300  %ve = fpext <4 x half> %vc to <4 x float>301  %vf = call <4 x float> @llvm.fma.v4f32(<4 x float> %vd, <4 x float> %ve, <4 x float> %va)302  ret <4 x float> %vf303}304 305define <4 x float> @vfwmacc_vf_v4f32(<4 x float> %va, <4 x half> %vb, half %c) {306; CHECK-LABEL: vfwmacc_vf_v4f32:307; CHECK:       # %bb.0:308; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma309; CHECK-NEXT:    vfwmacc.vf v8, fa0, v9310; CHECK-NEXT:    ret311  %head = insertelement <4 x half> poison, half %c, i32 0312  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer313  %vd = fpext <4 x half> %vb to <4 x float>314  %ve = fpext <4 x half> %splat to <4 x float>315  %vf = call <4 x float> @llvm.fma.v4f32(<4 x float> %vd, <4 x float> %ve, <4 x float> %va)316  ret <4 x float> %vf317}318 319define <4 x float> @vfwnmacc_vv_v4f32(<4 x float> %va, <4 x half> %vb, <4 x half> %vc) {320; CHECK-LABEL: vfwnmacc_vv_v4f32:321; CHECK:       # %bb.0:322; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma323; CHECK-NEXT:    vfwnmacc.vv v8, v9, v10324; CHECK-NEXT:    ret325  %vd = fpext <4 x half> %vb to <4 x float>326  %ve = fpext <4 x half> %vc to <4 x float>327  %vf = fneg <4 x float> %va328  %vg = fneg <4 x float> %vd329  %vh = call <4 x float> @llvm.fma.v4f32(<4 x float> %vg, <4 x float> %ve, <4 x float> %vf)330  ret <4 x float> %vh331}332 333define <4 x float> @vfwnmacc_vf_v4f32(<4 x float> %va, <4 x half> %vb, half %c) {334; CHECK-LABEL: vfwnmacc_vf_v4f32:335; CHECK:       # %bb.0:336; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma337; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v9338; CHECK-NEXT:    ret339  %head = insertelement <4 x half> poison, half %c, i32 0340  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer341  %vd = fpext <4 x half> %vb to <4 x float>342  %ve = fpext <4 x half> %splat to <4 x float>343  %vf = fneg <4 x float> %va344  %vg = fneg <4 x float> %vd345  %vh = call <4 x float> @llvm.fma.v4f32(<4 x float> %vg, <4 x float> %ve, <4 x float> %vf)346  ret <4 x float> %vh347}348 349define <4 x float> @vfwnmacc_fv_v4f32(<4 x float> %va, <4 x half> %vb, half %c) {350; CHECK-LABEL: vfwnmacc_fv_v4f32:351; CHECK:       # %bb.0:352; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma353; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v9354; CHECK-NEXT:    ret355  %head = insertelement <4 x half> poison, half %c, i32 0356  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer357  %vd = fpext <4 x half> %vb to <4 x float>358  %ve = fpext <4 x half> %splat to <4 x float>359  %vf = fneg <4 x float> %va360  %vg = fneg <4 x float> %ve361  %vh = call <4 x float> @llvm.fma.v4f32(<4 x float> %vd, <4 x float> %vg, <4 x float> %vf)362  ret <4 x float> %vh363}364 365define <4 x float> @vfwmsac_vv_v4f32(<4 x float> %va, <4 x half> %vb, <4 x half> %vc) {366; CHECK-LABEL: vfwmsac_vv_v4f32:367; CHECK:       # %bb.0:368; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma369; CHECK-NEXT:    vfwmsac.vv v8, v9, v10370; CHECK-NEXT:    ret371  %vd = fpext <4 x half> %vb to <4 x float>372  %ve = fpext <4 x half> %vc to <4 x float>373  %vf = fneg <4 x float> %va374  %vg = call <4 x float> @llvm.fma.v4f32(<4 x float> %vd, <4 x float> %ve, <4 x float> %vf)375  ret <4 x float> %vg376}377 378define <4 x float> @vfwmsac_vf_v4f32(<4 x float> %va, <4 x half> %vb, half %c) {379; CHECK-LABEL: vfwmsac_vf_v4f32:380; CHECK:       # %bb.0:381; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma382; CHECK-NEXT:    vfwmsac.vf v8, fa0, v9383; CHECK-NEXT:    ret384  %head = insertelement <4 x half> poison, half %c, i32 0385  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer386  %vd = fpext <4 x half> %vb to <4 x float>387  %ve = fpext <4 x half> %splat to <4 x float>388  %vf = fneg <4 x float> %va389  %vg = call <4 x float> @llvm.fma.v4f32(<4 x float> %vd, <4 x float> %ve, <4 x float> %vf)390  ret <4 x float> %vg391}392 393define <4 x float> @vfwnmsac_vv_v4f32(<4 x float> %va, <4 x half> %vb, <4 x half> %vc) {394; CHECK-LABEL: vfwnmsac_vv_v4f32:395; CHECK:       # %bb.0:396; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma397; CHECK-NEXT:    vfwnmsac.vv v8, v9, v10398; CHECK-NEXT:    ret399  %vd = fpext <4 x half> %vb to <4 x float>400  %ve = fpext <4 x half> %vc to <4 x float>401  %vf = fneg <4 x float> %vd402  %vg = call <4 x float> @llvm.fma.v4f32(<4 x float> %vf, <4 x float> %ve, <4 x float> %va)403  ret <4 x float> %vg404}405 406define <4 x float> @vfwnmsac_vf_v4f32(<4 x float> %va, <4 x half> %vb, half %c) {407; CHECK-LABEL: vfwnmsac_vf_v4f32:408; CHECK:       # %bb.0:409; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma410; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9411; CHECK-NEXT:    ret412  %head = insertelement <4 x half> poison, half %c, i32 0413  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer414  %vd = fpext <4 x half> %vb to <4 x float>415  %ve = fpext <4 x half> %splat to <4 x float>416  %vf = fneg <4 x float> %vd417  %vg = call <4 x float> @llvm.fma.v4f32(<4 x float> %vf, <4 x float> %ve, <4 x float> %va)418  ret <4 x float> %vg419}420 421define <4 x float> @vfwnmsac_fv_v4f32(<4 x float> %va, <4 x half> %vb, half %c) {422; CHECK-LABEL: vfwnmsac_fv_v4f32:423; CHECK:       # %bb.0:424; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma425; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9426; CHECK-NEXT:    ret427  %head = insertelement <4 x half> poison, half %c, i32 0428  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer429  %vd = fpext <4 x half> %vb to <4 x float>430  %ve = fpext <4 x half> %splat to <4 x float>431  %vf = fneg <4 x float> %ve432  %vg = call <4 x float> @llvm.fma.v4f32(<4 x float> %vd, <4 x float> %vf, <4 x float> %va)433  ret <4 x float> %vg434}435 436define <8 x float> @vfwmacc_vv_v8f32(<8 x float> %va, <8 x half> %vb, <8 x half> %vc) {437; CHECK-LABEL: vfwmacc_vv_v8f32:438; CHECK:       # %bb.0:439; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma440; CHECK-NEXT:    vfwmacc.vv v8, v10, v11441; CHECK-NEXT:    ret442  %vd = fpext <8 x half> %vb to <8 x float>443  %ve = fpext <8 x half> %vc to <8 x float>444  %vf = call <8 x float> @llvm.fma.v8f32(<8 x float> %vd, <8 x float> %ve, <8 x float> %va)445  ret <8 x float> %vf446}447 448define <8 x float> @vfwmacc_vf_v8f32(<8 x float> %va, <8 x half> %vb, half %c) {449; CHECK-LABEL: vfwmacc_vf_v8f32:450; CHECK:       # %bb.0:451; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma452; CHECK-NEXT:    vfwmacc.vf v8, fa0, v10453; CHECK-NEXT:    ret454  %head = insertelement <8 x half> poison, half %c, i32 0455  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer456  %vd = fpext <8 x half> %vb to <8 x float>457  %ve = fpext <8 x half> %splat to <8 x float>458  %vf = call <8 x float> @llvm.fma.v8f32(<8 x float> %vd, <8 x float> %ve, <8 x float> %va)459  ret <8 x float> %vf460}461 462define <8 x float> @vfwnmacc_vv_v8f32(<8 x float> %va, <8 x half> %vb, <8 x half> %vc) {463; CHECK-LABEL: vfwnmacc_vv_v8f32:464; CHECK:       # %bb.0:465; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma466; CHECK-NEXT:    vfwnmacc.vv v8, v10, v11467; CHECK-NEXT:    ret468  %vd = fpext <8 x half> %vb to <8 x float>469  %ve = fpext <8 x half> %vc to <8 x float>470  %vf = fneg <8 x float> %va471  %vg = fneg <8 x float> %vd472  %vh = call <8 x float> @llvm.fma.v8f32(<8 x float> %vg, <8 x float> %ve, <8 x float> %vf)473  ret <8 x float> %vh474}475 476define <8 x float> @vfwnmacc_vf_v8f32(<8 x float> %va, <8 x half> %vb, half %c) {477; CHECK-LABEL: vfwnmacc_vf_v8f32:478; CHECK:       # %bb.0:479; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma480; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v10481; CHECK-NEXT:    ret482  %head = insertelement <8 x half> poison, half %c, i32 0483  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer484  %vd = fpext <8 x half> %vb to <8 x float>485  %ve = fpext <8 x half> %splat to <8 x float>486  %vf = fneg <8 x float> %va487  %vg = fneg <8 x float> %vd488  %vh = call <8 x float> @llvm.fma.v8f32(<8 x float> %vg, <8 x float> %ve, <8 x float> %vf)489  ret <8 x float> %vh490}491 492define <8 x float> @vfwnmacc_fv_v8f32(<8 x float> %va, <8 x half> %vb, half %c) {493; CHECK-LABEL: vfwnmacc_fv_v8f32:494; CHECK:       # %bb.0:495; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma496; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v10497; CHECK-NEXT:    ret498  %head = insertelement <8 x half> poison, half %c, i32 0499  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer500  %vd = fpext <8 x half> %vb to <8 x float>501  %ve = fpext <8 x half> %splat to <8 x float>502  %vf = fneg <8 x float> %va503  %vg = fneg <8 x float> %ve504  %vh = call <8 x float> @llvm.fma.v8f32(<8 x float> %vd, <8 x float> %vg, <8 x float> %vf)505  ret <8 x float> %vh506}507 508define <8 x float> @vfwmsac_vv_v8f32(<8 x float> %va, <8 x half> %vb, <8 x half> %vc) {509; CHECK-LABEL: vfwmsac_vv_v8f32:510; CHECK:       # %bb.0:511; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma512; CHECK-NEXT:    vfwmsac.vv v8, v10, v11513; CHECK-NEXT:    ret514  %vd = fpext <8 x half> %vb to <8 x float>515  %ve = fpext <8 x half> %vc to <8 x float>516  %vf = fneg <8 x float> %va517  %vg = call <8 x float> @llvm.fma.v8f32(<8 x float> %vd, <8 x float> %ve, <8 x float> %vf)518  ret <8 x float> %vg519}520 521define <8 x float> @vfwmsac_vf_v8f32(<8 x float> %va, <8 x half> %vb, half %c) {522; CHECK-LABEL: vfwmsac_vf_v8f32:523; CHECK:       # %bb.0:524; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma525; CHECK-NEXT:    vfwmsac.vf v8, fa0, v10526; CHECK-NEXT:    ret527  %head = insertelement <8 x half> poison, half %c, i32 0528  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer529  %vd = fpext <8 x half> %vb to <8 x float>530  %ve = fpext <8 x half> %splat to <8 x float>531  %vf = fneg <8 x float> %va532  %vg = call <8 x float> @llvm.fma.v8f32(<8 x float> %vd, <8 x float> %ve, <8 x float> %vf)533  ret <8 x float> %vg534}535 536define <8 x float> @vfwnmsac_vv_v8f32(<8 x float> %va, <8 x half> %vb, <8 x half> %vc) {537; CHECK-LABEL: vfwnmsac_vv_v8f32:538; CHECK:       # %bb.0:539; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma540; CHECK-NEXT:    vfwnmsac.vv v8, v10, v11541; CHECK-NEXT:    ret542  %vd = fpext <8 x half> %vb to <8 x float>543  %ve = fpext <8 x half> %vc to <8 x float>544  %vf = fneg <8 x float> %vd545  %vg = call <8 x float> @llvm.fma.v8f32(<8 x float> %vf, <8 x float> %ve, <8 x float> %va)546  ret <8 x float> %vg547}548 549define <8 x float> @vfwnmsac_vf_v8f32(<8 x float> %va, <8 x half> %vb, half %c) {550; CHECK-LABEL: vfwnmsac_vf_v8f32:551; CHECK:       # %bb.0:552; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma553; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v10554; CHECK-NEXT:    ret555  %head = insertelement <8 x half> poison, half %c, i32 0556  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer557  %vd = fpext <8 x half> %vb to <8 x float>558  %ve = fpext <8 x half> %splat to <8 x float>559  %vf = fneg <8 x float> %vd560  %vg = call <8 x float> @llvm.fma.v8f32(<8 x float> %vf, <8 x float> %ve, <8 x float> %va)561  ret <8 x float> %vg562}563 564define <8 x float> @vfwnmsac_fv_v8f32(<8 x float> %va, <8 x half> %vb, half %c) {565; CHECK-LABEL: vfwnmsac_fv_v8f32:566; CHECK:       # %bb.0:567; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma568; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v10569; CHECK-NEXT:    ret570  %head = insertelement <8 x half> poison, half %c, i32 0571  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer572  %vd = fpext <8 x half> %vb to <8 x float>573  %ve = fpext <8 x half> %splat to <8 x float>574  %vf = fneg <8 x float> %ve575  %vg = call <8 x float> @llvm.fma.v8f32(<8 x float> %vd, <8 x float> %vf, <8 x float> %va)576  ret <8 x float> %vg577}578 579define <16 x float> @vfwmacc_vv_v16f32(<16 x float> %va, <16 x half> %vb, <16 x half> %vc) {580; CHECK-LABEL: vfwmacc_vv_v16f32:581; CHECK:       # %bb.0:582; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma583; CHECK-NEXT:    vfwmacc.vv v8, v12, v14584; CHECK-NEXT:    ret585  %vd = fpext <16 x half> %vb to <16 x float>586  %ve = fpext <16 x half> %vc to <16 x float>587  %vf = call <16 x float> @llvm.fma.v16f32(<16 x float> %vd, <16 x float> %ve, <16 x float> %va)588  ret <16 x float> %vf589}590 591define <16 x float> @vfwmacc_vf_v16f32(<16 x float> %va, <16 x half> %vb, half %c) {592; CHECK-LABEL: vfwmacc_vf_v16f32:593; CHECK:       # %bb.0:594; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma595; CHECK-NEXT:    vfwmacc.vf v8, fa0, v12596; CHECK-NEXT:    ret597  %head = insertelement <16 x half> poison, half %c, i32 0598  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer599  %vd = fpext <16 x half> %vb to <16 x float>600  %ve = fpext <16 x half> %splat to <16 x float>601  %vf = call <16 x float> @llvm.fma.v16f32(<16 x float> %vd, <16 x float> %ve, <16 x float> %va)602  ret <16 x float> %vf603}604 605define <16 x float> @vfwnmacc_vv_v16f32(<16 x float> %va, <16 x half> %vb, <16 x half> %vc) {606; CHECK-LABEL: vfwnmacc_vv_v16f32:607; CHECK:       # %bb.0:608; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma609; CHECK-NEXT:    vfwnmacc.vv v8, v12, v14610; CHECK-NEXT:    ret611  %vd = fpext <16 x half> %vb to <16 x float>612  %ve = fpext <16 x half> %vc to <16 x float>613  %vf = fneg <16 x float> %va614  %vg = fneg <16 x float> %vd615  %vh = call <16 x float> @llvm.fma.v16f32(<16 x float> %vg, <16 x float> %ve, <16 x float> %vf)616  ret <16 x float> %vh617}618 619define <16 x float> @vfwnmacc_vf_v16f32(<16 x float> %va, <16 x half> %vb, half %c) {620; CHECK-LABEL: vfwnmacc_vf_v16f32:621; CHECK:       # %bb.0:622; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma623; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v12624; CHECK-NEXT:    ret625  %head = insertelement <16 x half> poison, half %c, i32 0626  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer627  %vd = fpext <16 x half> %vb to <16 x float>628  %ve = fpext <16 x half> %splat to <16 x float>629  %vf = fneg <16 x float> %va630  %vg = fneg <16 x float> %vd631  %vh = call <16 x float> @llvm.fma.v16f32(<16 x float> %vg, <16 x float> %ve, <16 x float> %vf)632  ret <16 x float> %vh633}634 635define <16 x float> @vfwnmacc_fv_v16f32(<16 x float> %va, <16 x half> %vb, half %c) {636; CHECK-LABEL: vfwnmacc_fv_v16f32:637; CHECK:       # %bb.0:638; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma639; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v12640; CHECK-NEXT:    ret641  %head = insertelement <16 x half> poison, half %c, i32 0642  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer643  %vd = fpext <16 x half> %vb to <16 x float>644  %ve = fpext <16 x half> %splat to <16 x float>645  %vf = fneg <16 x float> %va646  %vg = fneg <16 x float> %ve647  %vh = call <16 x float> @llvm.fma.v16f32(<16 x float> %vd, <16 x float> %vg, <16 x float> %vf)648  ret <16 x float> %vh649}650 651define <16 x float> @vfwmsac_vv_v16f32(<16 x float> %va, <16 x half> %vb, <16 x half> %vc) {652; CHECK-LABEL: vfwmsac_vv_v16f32:653; CHECK:       # %bb.0:654; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma655; CHECK-NEXT:    vfwmsac.vv v8, v12, v14656; CHECK-NEXT:    ret657  %vd = fpext <16 x half> %vb to <16 x float>658  %ve = fpext <16 x half> %vc to <16 x float>659  %vf = fneg <16 x float> %va660  %vg = call <16 x float> @llvm.fma.v16f32(<16 x float> %vd, <16 x float> %ve, <16 x float> %vf)661  ret <16 x float> %vg662}663 664define <16 x float> @vfwmsac_vf_v16f32(<16 x float> %va, <16 x half> %vb, half %c) {665; CHECK-LABEL: vfwmsac_vf_v16f32:666; CHECK:       # %bb.0:667; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma668; CHECK-NEXT:    vfwmsac.vf v8, fa0, v12669; CHECK-NEXT:    ret670  %head = insertelement <16 x half> poison, half %c, i32 0671  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer672  %vd = fpext <16 x half> %vb to <16 x float>673  %ve = fpext <16 x half> %splat to <16 x float>674  %vf = fneg <16 x float> %va675  %vg = call <16 x float> @llvm.fma.v16f32(<16 x float> %vd, <16 x float> %ve, <16 x float> %vf)676  ret <16 x float> %vg677}678 679define <16 x float> @vfwnmsac_vv_v16f32(<16 x float> %va, <16 x half> %vb, <16 x half> %vc) {680; CHECK-LABEL: vfwnmsac_vv_v16f32:681; CHECK:       # %bb.0:682; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma683; CHECK-NEXT:    vfwnmsac.vv v8, v12, v14684; CHECK-NEXT:    ret685  %vd = fpext <16 x half> %vb to <16 x float>686  %ve = fpext <16 x half> %vc to <16 x float>687  %vf = fneg <16 x float> %vd688  %vg = call <16 x float> @llvm.fma.v16f32(<16 x float> %vf, <16 x float> %ve, <16 x float> %va)689  ret <16 x float> %vg690}691 692define <16 x float> @vfwnmsac_vf_v16f32(<16 x float> %va, <16 x half> %vb, half %c) {693; CHECK-LABEL: vfwnmsac_vf_v16f32:694; CHECK:       # %bb.0:695; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma696; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v12697; CHECK-NEXT:    ret698  %head = insertelement <16 x half> poison, half %c, i32 0699  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer700  %vd = fpext <16 x half> %vb to <16 x float>701  %ve = fpext <16 x half> %splat to <16 x float>702  %vf = fneg <16 x float> %vd703  %vg = call <16 x float> @llvm.fma.v16f32(<16 x float> %vf, <16 x float> %ve, <16 x float> %va)704  ret <16 x float> %vg705}706 707define <16 x float> @vfwnmsac_fv_v16f32(<16 x float> %va, <16 x half> %vb, half %c) {708; CHECK-LABEL: vfwnmsac_fv_v16f32:709; CHECK:       # %bb.0:710; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma711; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v12712; CHECK-NEXT:    ret713  %head = insertelement <16 x half> poison, half %c, i32 0714  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer715  %vd = fpext <16 x half> %vb to <16 x float>716  %ve = fpext <16 x half> %splat to <16 x float>717  %vf = fneg <16 x float> %ve718  %vg = call <16 x float> @llvm.fma.v16f32(<16 x float> %vd, <16 x float> %vf, <16 x float> %va)719  ret <16 x float> %vg720}721 722define <1 x double> @vfwmacc_vv_v1f64(<1 x double> %va, <1 x float> %vb, <1 x float> %vc) {723; CHECK-LABEL: vfwmacc_vv_v1f64:724; CHECK:       # %bb.0:725; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma726; CHECK-NEXT:    vfwmacc.vv v8, v9, v10727; CHECK-NEXT:    ret728  %vd = fpext <1 x float> %vb to <1 x double>729  %ve = fpext <1 x float> %vc to <1 x double>730  %vf = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %ve, <1 x double> %va)731  ret <1 x double> %vf732}733 734define <1 x double> @vfwmacc_vf_v1f64(<1 x double> %va, <1 x float> %vb, float %c) {735; CHECK-LABEL: vfwmacc_vf_v1f64:736; CHECK:       # %bb.0:737; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma738; CHECK-NEXT:    vfwmacc.vf v8, fa0, v9739; CHECK-NEXT:    ret740  %head = insertelement <1 x float> poison, float %c, i32 0741  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer742  %vd = fpext <1 x float> %vb to <1 x double>743  %ve = fpext <1 x float> %splat to <1 x double>744  %vf = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %ve, <1 x double> %va)745  ret <1 x double> %vf746}747 748define <1 x double> @vfwnmacc_vv_v1f64(<1 x double> %va, <1 x float> %vb, <1 x float> %vc) {749; CHECK-LABEL: vfwnmacc_vv_v1f64:750; CHECK:       # %bb.0:751; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma752; CHECK-NEXT:    vfwnmacc.vv v8, v9, v10753; CHECK-NEXT:    ret754  %vd = fpext <1 x float> %vb to <1 x double>755  %ve = fpext <1 x float> %vc to <1 x double>756  %vf = fneg <1 x double> %va757  %vg = fneg <1 x double> %vd758  %vh = call <1 x double> @llvm.fma.v1f64(<1 x double> %vg, <1 x double> %ve, <1 x double> %vf)759  ret <1 x double> %vh760}761 762define <1 x double> @vfwnmacc_vf_v1f64(<1 x double> %va, <1 x float> %vb, float %c) {763; CHECK-LABEL: vfwnmacc_vf_v1f64:764; CHECK:       # %bb.0:765; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma766; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v9767; CHECK-NEXT:    ret768  %head = insertelement <1 x float> poison, float %c, i32 0769  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer770  %vd = fpext <1 x float> %vb to <1 x double>771  %ve = fpext <1 x float> %splat to <1 x double>772  %vf = fneg <1 x double> %va773  %vg = fneg <1 x double> %vd774  %vh = call <1 x double> @llvm.fma.v1f64(<1 x double> %vg, <1 x double> %ve, <1 x double> %vf)775  ret <1 x double> %vh776}777 778define <1 x double> @vfwnmacc_fv_v1f64(<1 x double> %va, <1 x float> %vb, float %c) {779; CHECK-LABEL: vfwnmacc_fv_v1f64:780; CHECK:       # %bb.0:781; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma782; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v9783; CHECK-NEXT:    ret784  %head = insertelement <1 x float> poison, float %c, i32 0785  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer786  %vd = fpext <1 x float> %vb to <1 x double>787  %ve = fpext <1 x float> %splat to <1 x double>788  %vf = fneg <1 x double> %va789  %vg = fneg <1 x double> %ve790  %vh = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %vg, <1 x double> %vf)791  ret <1 x double> %vh792}793 794define <1 x double> @vfwmsac_vv_v1f64(<1 x double> %va, <1 x float> %vb, <1 x float> %vc) {795; CHECK-LABEL: vfwmsac_vv_v1f64:796; CHECK:       # %bb.0:797; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma798; CHECK-NEXT:    vfwmsac.vv v8, v9, v10799; CHECK-NEXT:    ret800  %vd = fpext <1 x float> %vb to <1 x double>801  %ve = fpext <1 x float> %vc to <1 x double>802  %vf = fneg <1 x double> %va803  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %ve, <1 x double> %vf)804  ret <1 x double> %vg805}806 807define <1 x double> @vfwmsac_vf_v1f64(<1 x double> %va, <1 x float> %vb, float %c) {808; CHECK-LABEL: vfwmsac_vf_v1f64:809; CHECK:       # %bb.0:810; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma811; CHECK-NEXT:    vfwmsac.vf v8, fa0, v9812; CHECK-NEXT:    ret813  %head = insertelement <1 x float> poison, float %c, i32 0814  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer815  %vd = fpext <1 x float> %vb to <1 x double>816  %ve = fpext <1 x float> %splat to <1 x double>817  %vf = fneg <1 x double> %va818  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %ve, <1 x double> %vf)819  ret <1 x double> %vg820}821 822define <1 x double> @vfwnmsac_vv_v1f64(<1 x double> %va, <1 x float> %vb, <1 x float> %vc) {823; CHECK-LABEL: vfwnmsac_vv_v1f64:824; CHECK:       # %bb.0:825; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma826; CHECK-NEXT:    vfwnmsac.vv v8, v9, v10827; CHECK-NEXT:    ret828  %vd = fpext <1 x float> %vb to <1 x double>829  %ve = fpext <1 x float> %vc to <1 x double>830  %vf = fneg <1 x double> %vd831  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vf, <1 x double> %ve, <1 x double> %va)832  ret <1 x double> %vg833}834 835define <1 x double> @vfwnmsac_vf_v1f64(<1 x double> %va, <1 x float> %vb, float %c) {836; CHECK-LABEL: vfwnmsac_vf_v1f64:837; CHECK:       # %bb.0:838; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma839; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9840; CHECK-NEXT:    ret841  %head = insertelement <1 x float> poison, float %c, i32 0842  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer843  %vd = fpext <1 x float> %vb to <1 x double>844  %ve = fpext <1 x float> %splat to <1 x double>845  %vf = fneg <1 x double> %vd846  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vf, <1 x double> %ve, <1 x double> %va)847  ret <1 x double> %vg848}849 850define <1 x double> @vfwnmsac_fv_v1f64(<1 x double> %va, <1 x float> %vb, float %c) {851; CHECK-LABEL: vfwnmsac_fv_v1f64:852; CHECK:       # %bb.0:853; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma854; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9855; CHECK-NEXT:    ret856  %head = insertelement <1 x float> poison, float %c, i32 0857  %splat = shufflevector <1 x float> %head, <1 x float> poison, <1 x i32> zeroinitializer858  %vd = fpext <1 x float> %vb to <1 x double>859  %ve = fpext <1 x float> %splat to <1 x double>860  %vf = fneg <1 x double> %ve861  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %vf, <1 x double> %va)862  ret <1 x double> %vg863}864 865define <2 x double> @vfwmacc_vv_v2f64(<2 x double> %va, <2 x float> %vb, <2 x float> %vc) {866; CHECK-LABEL: vfwmacc_vv_v2f64:867; CHECK:       # %bb.0:868; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma869; CHECK-NEXT:    vfwmacc.vv v8, v9, v10870; CHECK-NEXT:    ret871  %vd = fpext <2 x float> %vb to <2 x double>872  %ve = fpext <2 x float> %vc to <2 x double>873  %vf = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %ve, <2 x double> %va)874  ret <2 x double> %vf875}876 877define <2 x double> @vfwmacc_vf_v2f64(<2 x double> %va, <2 x float> %vb, float %c) {878; CHECK-LABEL: vfwmacc_vf_v2f64:879; CHECK:       # %bb.0:880; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma881; CHECK-NEXT:    vfwmacc.vf v8, fa0, v9882; CHECK-NEXT:    ret883  %head = insertelement <2 x float> poison, float %c, i32 0884  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer885  %vd = fpext <2 x float> %vb to <2 x double>886  %ve = fpext <2 x float> %splat to <2 x double>887  %vf = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %ve, <2 x double> %va)888  ret <2 x double> %vf889}890 891define <2 x double> @vfwnmacc_vv_v2f64(<2 x double> %va, <2 x float> %vb, <2 x float> %vc) {892; CHECK-LABEL: vfwnmacc_vv_v2f64:893; CHECK:       # %bb.0:894; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma895; CHECK-NEXT:    vfwnmacc.vv v8, v9, v10896; CHECK-NEXT:    ret897  %vd = fpext <2 x float> %vb to <2 x double>898  %ve = fpext <2 x float> %vc to <2 x double>899  %vf = fneg <2 x double> %va900  %vg = fneg <2 x double> %vd901  %vh = call <2 x double> @llvm.fma.v2f64(<2 x double> %vg, <2 x double> %ve, <2 x double> %vf)902  ret <2 x double> %vh903}904 905define <2 x double> @vfwnmacc_vf_v2f64(<2 x double> %va, <2 x float> %vb, float %c) {906; CHECK-LABEL: vfwnmacc_vf_v2f64:907; CHECK:       # %bb.0:908; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma909; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v9910; CHECK-NEXT:    ret911  %head = insertelement <2 x float> poison, float %c, i32 0912  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer913  %vd = fpext <2 x float> %vb to <2 x double>914  %ve = fpext <2 x float> %splat to <2 x double>915  %vf = fneg <2 x double> %va916  %vg = fneg <2 x double> %vd917  %vh = call <2 x double> @llvm.fma.v2f64(<2 x double> %vg, <2 x double> %ve, <2 x double> %vf)918  ret <2 x double> %vh919}920 921define <2 x double> @vfwnmacc_fv_v2f64(<2 x double> %va, <2 x float> %vb, float %c) {922; CHECK-LABEL: vfwnmacc_fv_v2f64:923; CHECK:       # %bb.0:924; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma925; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v9926; CHECK-NEXT:    ret927  %head = insertelement <2 x float> poison, float %c, i32 0928  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer929  %vd = fpext <2 x float> %vb to <2 x double>930  %ve = fpext <2 x float> %splat to <2 x double>931  %vf = fneg <2 x double> %va932  %vg = fneg <2 x double> %ve933  %vh = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %vg, <2 x double> %vf)934  ret <2 x double> %vh935}936 937define <2 x double> @vfwmsac_vv_v2f64(<2 x double> %va, <2 x float> %vb, <2 x float> %vc) {938; CHECK-LABEL: vfwmsac_vv_v2f64:939; CHECK:       # %bb.0:940; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma941; CHECK-NEXT:    vfwmsac.vv v8, v9, v10942; CHECK-NEXT:    ret943  %vd = fpext <2 x float> %vb to <2 x double>944  %ve = fpext <2 x float> %vc to <2 x double>945  %vf = fneg <2 x double> %va946  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %ve, <2 x double> %vf)947  ret <2 x double> %vg948}949 950define <2 x double> @vfwmsac_vf_v2f64(<2 x double> %va, <2 x float> %vb, float %c) {951; CHECK-LABEL: vfwmsac_vf_v2f64:952; CHECK:       # %bb.0:953; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma954; CHECK-NEXT:    vfwmsac.vf v8, fa0, v9955; CHECK-NEXT:    ret956  %head = insertelement <2 x float> poison, float %c, i32 0957  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer958  %vd = fpext <2 x float> %vb to <2 x double>959  %ve = fpext <2 x float> %splat to <2 x double>960  %vf = fneg <2 x double> %va961  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %ve, <2 x double> %vf)962  ret <2 x double> %vg963}964 965define <2 x double> @vfwnmsac_vv_v2f64(<2 x double> %va, <2 x float> %vb, <2 x float> %vc) {966; CHECK-LABEL: vfwnmsac_vv_v2f64:967; CHECK:       # %bb.0:968; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma969; CHECK-NEXT:    vfwnmsac.vv v8, v9, v10970; CHECK-NEXT:    ret971  %vd = fpext <2 x float> %vb to <2 x double>972  %ve = fpext <2 x float> %vc to <2 x double>973  %vf = fneg <2 x double> %vd974  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vf, <2 x double> %ve, <2 x double> %va)975  ret <2 x double> %vg976}977 978define <2 x double> @vfwnmsac_vf_v2f64(<2 x double> %va, <2 x float> %vb, float %c) {979; CHECK-LABEL: vfwnmsac_vf_v2f64:980; CHECK:       # %bb.0:981; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma982; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9983; CHECK-NEXT:    ret984  %head = insertelement <2 x float> poison, float %c, i32 0985  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer986  %vd = fpext <2 x float> %vb to <2 x double>987  %ve = fpext <2 x float> %splat to <2 x double>988  %vf = fneg <2 x double> %vd989  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vf, <2 x double> %ve, <2 x double> %va)990  ret <2 x double> %vg991}992 993define <2 x double> @vfwnmsac_fv_v2f64(<2 x double> %va, <2 x float> %vb, float %c) {994; CHECK-LABEL: vfwnmsac_fv_v2f64:995; CHECK:       # %bb.0:996; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma997; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v9998; CHECK-NEXT:    ret999  %head = insertelement <2 x float> poison, float %c, i32 01000  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer1001  %vd = fpext <2 x float> %vb to <2 x double>1002  %ve = fpext <2 x float> %splat to <2 x double>1003  %vf = fneg <2 x double> %ve1004  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %vf, <2 x double> %va)1005  ret <2 x double> %vg1006}1007 1008define <4 x double> @vfwmacc_vv_v4f64(<4 x double> %va, <4 x float> %vb, <4 x float> %vc) {1009; CHECK-LABEL: vfwmacc_vv_v4f64:1010; CHECK:       # %bb.0:1011; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1012; CHECK-NEXT:    vfwmacc.vv v8, v10, v111013; CHECK-NEXT:    ret1014  %vd = fpext <4 x float> %vb to <4 x double>1015  %ve = fpext <4 x float> %vc to <4 x double>1016  %vf = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %ve, <4 x double> %va)1017  ret <4 x double> %vf1018}1019 1020define <4 x double> @vfwmacc_vf_v4f64(<4 x double> %va, <4 x float> %vb, float %c) {1021; CHECK-LABEL: vfwmacc_vf_v4f64:1022; CHECK:       # %bb.0:1023; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1024; CHECK-NEXT:    vfwmacc.vf v8, fa0, v101025; CHECK-NEXT:    ret1026  %head = insertelement <4 x float> poison, float %c, i32 01027  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer1028  %vd = fpext <4 x float> %vb to <4 x double>1029  %ve = fpext <4 x float> %splat to <4 x double>1030  %vf = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %ve, <4 x double> %va)1031  ret <4 x double> %vf1032}1033 1034define <4 x double> @vfwnmacc_vv_v4f64(<4 x double> %va, <4 x float> %vb, <4 x float> %vc) {1035; CHECK-LABEL: vfwnmacc_vv_v4f64:1036; CHECK:       # %bb.0:1037; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1038; CHECK-NEXT:    vfwnmacc.vv v8, v10, v111039; CHECK-NEXT:    ret1040  %vd = fpext <4 x float> %vb to <4 x double>1041  %ve = fpext <4 x float> %vc to <4 x double>1042  %vf = fneg <4 x double> %va1043  %vg = fneg <4 x double> %vd1044  %vh = call <4 x double> @llvm.fma.v4f64(<4 x double> %vg, <4 x double> %ve, <4 x double> %vf)1045  ret <4 x double> %vh1046}1047 1048define <4 x double> @vfwnmacc_vf_v4f64(<4 x double> %va, <4 x float> %vb, float %c) {1049; CHECK-LABEL: vfwnmacc_vf_v4f64:1050; CHECK:       # %bb.0:1051; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1052; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v101053; CHECK-NEXT:    ret1054  %head = insertelement <4 x float> poison, float %c, i32 01055  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer1056  %vd = fpext <4 x float> %vb to <4 x double>1057  %ve = fpext <4 x float> %splat to <4 x double>1058  %vf = fneg <4 x double> %va1059  %vg = fneg <4 x double> %vd1060  %vh = call <4 x double> @llvm.fma.v4f64(<4 x double> %vg, <4 x double> %ve, <4 x double> %vf)1061  ret <4 x double> %vh1062}1063 1064define <4 x double> @vfwnmacc_fv_v4f64(<4 x double> %va, <4 x float> %vb, float %c) {1065; CHECK-LABEL: vfwnmacc_fv_v4f64:1066; CHECK:       # %bb.0:1067; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1068; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v101069; CHECK-NEXT:    ret1070  %head = insertelement <4 x float> poison, float %c, i32 01071  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer1072  %vd = fpext <4 x float> %vb to <4 x double>1073  %ve = fpext <4 x float> %splat to <4 x double>1074  %vf = fneg <4 x double> %va1075  %vg = fneg <4 x double> %ve1076  %vh = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %vg, <4 x double> %vf)1077  ret <4 x double> %vh1078}1079 1080define <4 x double> @vfwmsac_vv_v4f64(<4 x double> %va, <4 x float> %vb, <4 x float> %vc) {1081; CHECK-LABEL: vfwmsac_vv_v4f64:1082; CHECK:       # %bb.0:1083; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1084; CHECK-NEXT:    vfwmsac.vv v8, v10, v111085; CHECK-NEXT:    ret1086  %vd = fpext <4 x float> %vb to <4 x double>1087  %ve = fpext <4 x float> %vc to <4 x double>1088  %vf = fneg <4 x double> %va1089  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %ve, <4 x double> %vf)1090  ret <4 x double> %vg1091}1092 1093define <4 x double> @vfwmsac_vf_v4f64(<4 x double> %va, <4 x float> %vb, float %c) {1094; CHECK-LABEL: vfwmsac_vf_v4f64:1095; CHECK:       # %bb.0:1096; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1097; CHECK-NEXT:    vfwmsac.vf v8, fa0, v101098; CHECK-NEXT:    ret1099  %head = insertelement <4 x float> poison, float %c, i32 01100  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer1101  %vd = fpext <4 x float> %vb to <4 x double>1102  %ve = fpext <4 x float> %splat to <4 x double>1103  %vf = fneg <4 x double> %va1104  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %ve, <4 x double> %vf)1105  ret <4 x double> %vg1106}1107 1108define <4 x double> @vfwnmsac_vv_v4f64(<4 x double> %va, <4 x float> %vb, <4 x float> %vc) {1109; CHECK-LABEL: vfwnmsac_vv_v4f64:1110; CHECK:       # %bb.0:1111; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1112; CHECK-NEXT:    vfwnmsac.vv v8, v10, v111113; CHECK-NEXT:    ret1114  %vd = fpext <4 x float> %vb to <4 x double>1115  %ve = fpext <4 x float> %vc to <4 x double>1116  %vf = fneg <4 x double> %vd1117  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vf, <4 x double> %ve, <4 x double> %va)1118  ret <4 x double> %vg1119}1120 1121define <4 x double> @vfwnmsac_vf_v4f64(<4 x double> %va, <4 x float> %vb, float %c) {1122; CHECK-LABEL: vfwnmsac_vf_v4f64:1123; CHECK:       # %bb.0:1124; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1125; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v101126; CHECK-NEXT:    ret1127  %head = insertelement <4 x float> poison, float %c, i32 01128  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer1129  %vd = fpext <4 x float> %vb to <4 x double>1130  %ve = fpext <4 x float> %splat to <4 x double>1131  %vf = fneg <4 x double> %vd1132  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vf, <4 x double> %ve, <4 x double> %va)1133  ret <4 x double> %vg1134}1135 1136define <4 x double> @vfwnmsac_fv_v4f64(<4 x double> %va, <4 x float> %vb, float %c) {1137; CHECK-LABEL: vfwnmsac_fv_v4f64:1138; CHECK:       # %bb.0:1139; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1140; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v101141; CHECK-NEXT:    ret1142  %head = insertelement <4 x float> poison, float %c, i32 01143  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer1144  %vd = fpext <4 x float> %vb to <4 x double>1145  %ve = fpext <4 x float> %splat to <4 x double>1146  %vf = fneg <4 x double> %ve1147  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %vf, <4 x double> %va)1148  ret <4 x double> %vg1149}1150 1151define <8 x double> @vfwmacc_vv_v8f64(<8 x double> %va, <8 x float> %vb, <8 x float> %vc) {1152; CHECK-LABEL: vfwmacc_vv_v8f64:1153; CHECK:       # %bb.0:1154; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1155; CHECK-NEXT:    vfwmacc.vv v8, v12, v141156; CHECK-NEXT:    ret1157  %vd = fpext <8 x float> %vb to <8 x double>1158  %ve = fpext <8 x float> %vc to <8 x double>1159  %vf = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %ve, <8 x double> %va)1160  ret <8 x double> %vf1161}1162 1163define <8 x double> @vfwmacc_vf_v8f64(<8 x double> %va, <8 x float> %vb, float %c) {1164; CHECK-LABEL: vfwmacc_vf_v8f64:1165; CHECK:       # %bb.0:1166; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1167; CHECK-NEXT:    vfwmacc.vf v8, fa0, v121168; CHECK-NEXT:    ret1169  %head = insertelement <8 x float> poison, float %c, i32 01170  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer1171  %vd = fpext <8 x float> %vb to <8 x double>1172  %ve = fpext <8 x float> %splat to <8 x double>1173  %vf = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %ve, <8 x double> %va)1174  ret <8 x double> %vf1175}1176 1177define <8 x double> @vfwnmacc_vv_v8f64(<8 x double> %va, <8 x float> %vb, <8 x float> %vc) {1178; CHECK-LABEL: vfwnmacc_vv_v8f64:1179; CHECK:       # %bb.0:1180; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1181; CHECK-NEXT:    vfwnmacc.vv v8, v12, v141182; CHECK-NEXT:    ret1183  %vd = fpext <8 x float> %vb to <8 x double>1184  %ve = fpext <8 x float> %vc to <8 x double>1185  %vf = fneg <8 x double> %va1186  %vg = fneg <8 x double> %vd1187  %vh = call <8 x double> @llvm.fma.v8f64(<8 x double> %vg, <8 x double> %ve, <8 x double> %vf)1188  ret <8 x double> %vh1189}1190 1191define <8 x double> @vfwnmacc_vf_v8f64(<8 x double> %va, <8 x float> %vb, float %c) {1192; CHECK-LABEL: vfwnmacc_vf_v8f64:1193; CHECK:       # %bb.0:1194; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1195; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v121196; CHECK-NEXT:    ret1197  %head = insertelement <8 x float> poison, float %c, i32 01198  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer1199  %vd = fpext <8 x float> %vb to <8 x double>1200  %ve = fpext <8 x float> %splat to <8 x double>1201  %vf = fneg <8 x double> %va1202  %vg = fneg <8 x double> %vd1203  %vh = call <8 x double> @llvm.fma.v8f64(<8 x double> %vg, <8 x double> %ve, <8 x double> %vf)1204  ret <8 x double> %vh1205}1206 1207define <8 x double> @vfwnmacc_fv_v8f64(<8 x double> %va, <8 x float> %vb, float %c) {1208; CHECK-LABEL: vfwnmacc_fv_v8f64:1209; CHECK:       # %bb.0:1210; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1211; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v121212; CHECK-NEXT:    ret1213  %head = insertelement <8 x float> poison, float %c, i32 01214  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer1215  %vd = fpext <8 x float> %vb to <8 x double>1216  %ve = fpext <8 x float> %splat to <8 x double>1217  %vf = fneg <8 x double> %va1218  %vg = fneg <8 x double> %ve1219  %vh = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %vg, <8 x double> %vf)1220  ret <8 x double> %vh1221}1222 1223define <8 x double> @vfwmsac_vv_v8f64(<8 x double> %va, <8 x float> %vb, <8 x float> %vc) {1224; CHECK-LABEL: vfwmsac_vv_v8f64:1225; CHECK:       # %bb.0:1226; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1227; CHECK-NEXT:    vfwmsac.vv v8, v12, v141228; CHECK-NEXT:    ret1229  %vd = fpext <8 x float> %vb to <8 x double>1230  %ve = fpext <8 x float> %vc to <8 x double>1231  %vf = fneg <8 x double> %va1232  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %ve, <8 x double> %vf)1233  ret <8 x double> %vg1234}1235 1236define <8 x double> @vfwmsac_vf_v8f64(<8 x double> %va, <8 x float> %vb, float %c) {1237; CHECK-LABEL: vfwmsac_vf_v8f64:1238; CHECK:       # %bb.0:1239; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1240; CHECK-NEXT:    vfwmsac.vf v8, fa0, v121241; CHECK-NEXT:    ret1242  %head = insertelement <8 x float> poison, float %c, i32 01243  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer1244  %vd = fpext <8 x float> %vb to <8 x double>1245  %ve = fpext <8 x float> %splat to <8 x double>1246  %vf = fneg <8 x double> %va1247  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %ve, <8 x double> %vf)1248  ret <8 x double> %vg1249}1250 1251define <8 x double> @vfwnmsac_vv_v8f64(<8 x double> %va, <8 x float> %vb, <8 x float> %vc) {1252; CHECK-LABEL: vfwnmsac_vv_v8f64:1253; CHECK:       # %bb.0:1254; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1255; CHECK-NEXT:    vfwnmsac.vv v8, v12, v141256; CHECK-NEXT:    ret1257  %vd = fpext <8 x float> %vb to <8 x double>1258  %ve = fpext <8 x float> %vc to <8 x double>1259  %vf = fneg <8 x double> %vd1260  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vf, <8 x double> %ve, <8 x double> %va)1261  ret <8 x double> %vg1262}1263 1264define <8 x double> @vfwnmsac_vf_v8f64(<8 x double> %va, <8 x float> %vb, float %c) {1265; CHECK-LABEL: vfwnmsac_vf_v8f64:1266; CHECK:       # %bb.0:1267; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1268; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v121269; CHECK-NEXT:    ret1270  %head = insertelement <8 x float> poison, float %c, i32 01271  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer1272  %vd = fpext <8 x float> %vb to <8 x double>1273  %ve = fpext <8 x float> %splat to <8 x double>1274  %vf = fneg <8 x double> %vd1275  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vf, <8 x double> %ve, <8 x double> %va)1276  ret <8 x double> %vg1277}1278 1279define <8 x double> @vfwnmsac_fv_v8f64(<8 x double> %va, <8 x float> %vb, float %c) {1280; CHECK-LABEL: vfwnmsac_fv_v8f64:1281; CHECK:       # %bb.0:1282; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1283; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v121284; CHECK-NEXT:    ret1285  %head = insertelement <8 x float> poison, float %c, i32 01286  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer1287  %vd = fpext <8 x float> %vb to <8 x double>1288  %ve = fpext <8 x float> %splat to <8 x double>1289  %vf = fneg <8 x double> %ve1290  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %vf, <8 x double> %va)1291  ret <8 x double> %vg1292}1293 1294define <1 x double> @vfwmacc_vv_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, <1 x half> %vc) {1295; CHECK-LABEL: vfwmacc_vv_v1f64_v1f16:1296; CHECK:       # %bb.0:1297; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1298; CHECK-NEXT:    vfwcvt.f.f.v v11, v91299; CHECK-NEXT:    vfwcvt.f.f.v v9, v101300; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1301; CHECK-NEXT:    vfwmacc.vv v8, v11, v91302; CHECK-NEXT:    ret1303  %vd = fpext <1 x half> %vb to <1 x double>1304  %ve = fpext <1 x half> %vc to <1 x double>1305  %vf = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %ve, <1 x double> %va)1306  ret <1 x double> %vf1307}1308 1309define <1 x double> @vfwmacc_vf_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, half %c) {1310; CHECK-LABEL: vfwmacc_vf_v1f64_v1f16:1311; CHECK:       # %bb.0:1312; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1313; CHECK-NEXT:    vfmv.s.f v10, fa01314; CHECK-NEXT:    vfwcvt.f.f.v v11, v91315; CHECK-NEXT:    vfwcvt.f.f.v v9, v101316; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1317; CHECK-NEXT:    vfwmacc.vv v8, v11, v91318; CHECK-NEXT:    ret1319  %head = insertelement <1 x half> poison, half %c, i32 01320  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer1321  %vd = fpext <1 x half> %vb to <1 x double>1322  %ve = fpext <1 x half> %splat to <1 x double>1323  %vf = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %ve, <1 x double> %va)1324  ret <1 x double> %vf1325}1326 1327define <1 x double> @vfwnmacc_vv_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, <1 x half> %vc) {1328; CHECK-LABEL: vfwnmacc_vv_v1f64_v1f16:1329; CHECK:       # %bb.0:1330; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1331; CHECK-NEXT:    vfwcvt.f.f.v v11, v91332; CHECK-NEXT:    vfwcvt.f.f.v v9, v101333; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1334; CHECK-NEXT:    vfwnmacc.vv v8, v11, v91335; CHECK-NEXT:    ret1336  %vd = fpext <1 x half> %vb to <1 x double>1337  %ve = fpext <1 x half> %vc to <1 x double>1338  %vf = fneg <1 x double> %va1339  %vg = fneg <1 x double> %vd1340  %vh = call <1 x double> @llvm.fma.v1f64(<1 x double> %vg, <1 x double> %ve, <1 x double> %vf)1341  ret <1 x double> %vh1342}1343 1344define <1 x double> @vfwnmacc_vf_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, half %c) {1345; CHECK-LABEL: vfwnmacc_vf_v1f64_v1f16:1346; CHECK:       # %bb.0:1347; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1348; CHECK-NEXT:    vfmv.s.f v10, fa01349; CHECK-NEXT:    vfwcvt.f.f.v v11, v91350; CHECK-NEXT:    vfwcvt.f.f.v v9, v101351; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1352; CHECK-NEXT:    vfwnmacc.vv v8, v11, v91353; CHECK-NEXT:    ret1354  %head = insertelement <1 x half> poison, half %c, i32 01355  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer1356  %vd = fpext <1 x half> %vb to <1 x double>1357  %ve = fpext <1 x half> %splat to <1 x double>1358  %vf = fneg <1 x double> %va1359  %vg = fneg <1 x double> %vd1360  %vh = call <1 x double> @llvm.fma.v1f64(<1 x double> %vg, <1 x double> %ve, <1 x double> %vf)1361  ret <1 x double> %vh1362}1363 1364define <1 x double> @vfwnmacc_fv_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, half %c) {1365; CHECK-LABEL: vfwnmacc_fv_v1f64_v1f16:1366; CHECK:       # %bb.0:1367; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1368; CHECK-NEXT:    vfmv.s.f v10, fa01369; CHECK-NEXT:    vfwcvt.f.f.v v11, v91370; CHECK-NEXT:    vfwcvt.f.f.v v9, v101371; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1372; CHECK-NEXT:    vfwnmacc.vv v8, v11, v91373; CHECK-NEXT:    ret1374  %head = insertelement <1 x half> poison, half %c, i32 01375  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer1376  %vd = fpext <1 x half> %vb to <1 x double>1377  %ve = fpext <1 x half> %splat to <1 x double>1378  %vf = fneg <1 x double> %va1379  %vg = fneg <1 x double> %ve1380  %vh = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %vg, <1 x double> %vf)1381  ret <1 x double> %vh1382}1383 1384define <1 x double> @vfwmsac_vv_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, <1 x half> %vc) {1385; CHECK-LABEL: vfwmsac_vv_v1f64_v1f16:1386; CHECK:       # %bb.0:1387; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1388; CHECK-NEXT:    vfwcvt.f.f.v v11, v91389; CHECK-NEXT:    vfwcvt.f.f.v v9, v101390; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1391; CHECK-NEXT:    vfwmsac.vv v8, v11, v91392; CHECK-NEXT:    ret1393  %vd = fpext <1 x half> %vb to <1 x double>1394  %ve = fpext <1 x half> %vc to <1 x double>1395  %vf = fneg <1 x double> %va1396  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %ve, <1 x double> %vf)1397  ret <1 x double> %vg1398}1399 1400define <1 x double> @vfwmsac_vf_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, half %c) {1401; CHECK-LABEL: vfwmsac_vf_v1f64_v1f16:1402; CHECK:       # %bb.0:1403; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1404; CHECK-NEXT:    vfmv.s.f v10, fa01405; CHECK-NEXT:    vfwcvt.f.f.v v11, v91406; CHECK-NEXT:    vfwcvt.f.f.v v9, v101407; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1408; CHECK-NEXT:    vfwmsac.vv v8, v11, v91409; CHECK-NEXT:    ret1410  %head = insertelement <1 x half> poison, half %c, i32 01411  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer1412  %vd = fpext <1 x half> %vb to <1 x double>1413  %ve = fpext <1 x half> %splat to <1 x double>1414  %vf = fneg <1 x double> %va1415  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %ve, <1 x double> %vf)1416  ret <1 x double> %vg1417}1418 1419define <1 x double> @vfwnmsac_vv_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, <1 x half> %vc) {1420; CHECK-LABEL: vfwnmsac_vv_v1f64_v1f16:1421; CHECK:       # %bb.0:1422; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1423; CHECK-NEXT:    vfwcvt.f.f.v v11, v91424; CHECK-NEXT:    vfwcvt.f.f.v v9, v101425; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1426; CHECK-NEXT:    vfwnmsac.vv v8, v11, v91427; CHECK-NEXT:    ret1428  %vd = fpext <1 x half> %vb to <1 x double>1429  %ve = fpext <1 x half> %vc to <1 x double>1430  %vf = fneg <1 x double> %vd1431  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vf, <1 x double> %ve, <1 x double> %va)1432  ret <1 x double> %vg1433}1434 1435define <1 x double> @vfwnmsac_vf_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, half %c) {1436; CHECK-LABEL: vfwnmsac_vf_v1f64_v1f16:1437; CHECK:       # %bb.0:1438; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1439; CHECK-NEXT:    vfmv.s.f v10, fa01440; CHECK-NEXT:    vfwcvt.f.f.v v11, v91441; CHECK-NEXT:    vfwcvt.f.f.v v9, v101442; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1443; CHECK-NEXT:    vfwnmsac.vv v8, v11, v91444; CHECK-NEXT:    ret1445  %head = insertelement <1 x half> poison, half %c, i32 01446  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer1447  %vd = fpext <1 x half> %vb to <1 x double>1448  %ve = fpext <1 x half> %splat to <1 x double>1449  %vf = fneg <1 x double> %vd1450  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vf, <1 x double> %ve, <1 x double> %va)1451  ret <1 x double> %vg1452}1453 1454define <1 x double> @vfwnmsac_fv_v1f64_v1f16(<1 x double> %va, <1 x half> %vb, half %c) {1455; CHECK-LABEL: vfwnmsac_fv_v1f64_v1f16:1456; CHECK:       # %bb.0:1457; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1458; CHECK-NEXT:    vfmv.s.f v10, fa01459; CHECK-NEXT:    vfwcvt.f.f.v v11, v91460; CHECK-NEXT:    vfwcvt.f.f.v v9, v101461; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1462; CHECK-NEXT:    vfwnmsac.vv v8, v11, v91463; CHECK-NEXT:    ret1464  %head = insertelement <1 x half> poison, half %c, i32 01465  %splat = shufflevector <1 x half> %head, <1 x half> poison, <1 x i32> zeroinitializer1466  %vd = fpext <1 x half> %vb to <1 x double>1467  %ve = fpext <1 x half> %splat to <1 x double>1468  %vf = fneg <1 x double> %ve1469  %vg = call <1 x double> @llvm.fma.v1f64(<1 x double> %vd, <1 x double> %vf, <1 x double> %va)1470  ret <1 x double> %vg1471}1472 1473define <2 x double> @vfwmacc_vv_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, <2 x half> %vc) {1474; CHECK-LABEL: vfwmacc_vv_v2f64_v2f16:1475; CHECK:       # %bb.0:1476; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1477; CHECK-NEXT:    vfwcvt.f.f.v v11, v91478; CHECK-NEXT:    vfwcvt.f.f.v v9, v101479; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1480; CHECK-NEXT:    vfwmacc.vv v8, v11, v91481; CHECK-NEXT:    ret1482  %vd = fpext <2 x half> %vb to <2 x double>1483  %ve = fpext <2 x half> %vc to <2 x double>1484  %vf = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %ve, <2 x double> %va)1485  ret <2 x double> %vf1486}1487 1488define <2 x double> @vfwmacc_vf_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, half %c) {1489; CHECK-LABEL: vfwmacc_vf_v2f64_v2f16:1490; CHECK:       # %bb.0:1491; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1492; CHECK-NEXT:    vfmv.v.f v10, fa01493; CHECK-NEXT:    vfwcvt.f.f.v v11, v91494; CHECK-NEXT:    vfwcvt.f.f.v v9, v101495; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1496; CHECK-NEXT:    vfwmacc.vv v8, v11, v91497; CHECK-NEXT:    ret1498  %head = insertelement <2 x half> poison, half %c, i32 01499  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer1500  %vd = fpext <2 x half> %vb to <2 x double>1501  %ve = fpext <2 x half> %splat to <2 x double>1502  %vf = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %ve, <2 x double> %va)1503  ret <2 x double> %vf1504}1505 1506define <2 x double> @vfwnmacc_vv_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, <2 x half> %vc) {1507; CHECK-LABEL: vfwnmacc_vv_v2f64_v2f16:1508; CHECK:       # %bb.0:1509; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1510; CHECK-NEXT:    vfwcvt.f.f.v v11, v91511; CHECK-NEXT:    vfwcvt.f.f.v v9, v101512; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1513; CHECK-NEXT:    vfwnmacc.vv v8, v11, v91514; CHECK-NEXT:    ret1515  %vd = fpext <2 x half> %vb to <2 x double>1516  %ve = fpext <2 x half> %vc to <2 x double>1517  %vf = fneg <2 x double> %va1518  %vg = fneg <2 x double> %vd1519  %vh = call <2 x double> @llvm.fma.v2f64(<2 x double> %vg, <2 x double> %ve, <2 x double> %vf)1520  ret <2 x double> %vh1521}1522 1523define <2 x double> @vfwnmacc_vf_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, half %c) {1524; CHECK-LABEL: vfwnmacc_vf_v2f64_v2f16:1525; CHECK:       # %bb.0:1526; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1527; CHECK-NEXT:    vfmv.v.f v10, fa01528; CHECK-NEXT:    vfwcvt.f.f.v v11, v91529; CHECK-NEXT:    vfwcvt.f.f.v v9, v101530; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1531; CHECK-NEXT:    vfwnmacc.vv v8, v11, v91532; CHECK-NEXT:    ret1533  %head = insertelement <2 x half> poison, half %c, i32 01534  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer1535  %vd = fpext <2 x half> %vb to <2 x double>1536  %ve = fpext <2 x half> %splat to <2 x double>1537  %vf = fneg <2 x double> %va1538  %vg = fneg <2 x double> %vd1539  %vh = call <2 x double> @llvm.fma.v2f64(<2 x double> %vg, <2 x double> %ve, <2 x double> %vf)1540  ret <2 x double> %vh1541}1542 1543define <2 x double> @vfwnmacc_fv_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, half %c) {1544; CHECK-LABEL: vfwnmacc_fv_v2f64_v2f16:1545; CHECK:       # %bb.0:1546; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1547; CHECK-NEXT:    vfmv.v.f v10, fa01548; CHECK-NEXT:    vfwcvt.f.f.v v11, v91549; CHECK-NEXT:    vfwcvt.f.f.v v9, v101550; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1551; CHECK-NEXT:    vfwnmacc.vv v8, v11, v91552; CHECK-NEXT:    ret1553  %head = insertelement <2 x half> poison, half %c, i32 01554  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer1555  %vd = fpext <2 x half> %vb to <2 x double>1556  %ve = fpext <2 x half> %splat to <2 x double>1557  %vf = fneg <2 x double> %va1558  %vg = fneg <2 x double> %ve1559  %vh = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %vg, <2 x double> %vf)1560  ret <2 x double> %vh1561}1562 1563define <2 x double> @vfwmsac_vv_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, <2 x half> %vc) {1564; CHECK-LABEL: vfwmsac_vv_v2f64_v2f16:1565; CHECK:       # %bb.0:1566; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1567; CHECK-NEXT:    vfwcvt.f.f.v v11, v91568; CHECK-NEXT:    vfwcvt.f.f.v v9, v101569; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1570; CHECK-NEXT:    vfwmsac.vv v8, v11, v91571; CHECK-NEXT:    ret1572  %vd = fpext <2 x half> %vb to <2 x double>1573  %ve = fpext <2 x half> %vc to <2 x double>1574  %vf = fneg <2 x double> %va1575  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %ve, <2 x double> %vf)1576  ret <2 x double> %vg1577}1578 1579define <2 x double> @vfwmsac_vf_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, half %c) {1580; CHECK-LABEL: vfwmsac_vf_v2f64_v2f16:1581; CHECK:       # %bb.0:1582; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1583; CHECK-NEXT:    vfmv.v.f v10, fa01584; CHECK-NEXT:    vfwcvt.f.f.v v11, v91585; CHECK-NEXT:    vfwcvt.f.f.v v9, v101586; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1587; CHECK-NEXT:    vfwmsac.vv v8, v11, v91588; CHECK-NEXT:    ret1589  %head = insertelement <2 x half> poison, half %c, i32 01590  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer1591  %vd = fpext <2 x half> %vb to <2 x double>1592  %ve = fpext <2 x half> %splat to <2 x double>1593  %vf = fneg <2 x double> %va1594  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %ve, <2 x double> %vf)1595  ret <2 x double> %vg1596}1597 1598define <2 x double> @vfwnmsac_vv_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, <2 x half> %vc) {1599; CHECK-LABEL: vfwnmsac_vv_v2f64_v2f16:1600; CHECK:       # %bb.0:1601; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1602; CHECK-NEXT:    vfwcvt.f.f.v v11, v91603; CHECK-NEXT:    vfwcvt.f.f.v v9, v101604; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1605; CHECK-NEXT:    vfwnmsac.vv v8, v11, v91606; CHECK-NEXT:    ret1607  %vd = fpext <2 x half> %vb to <2 x double>1608  %ve = fpext <2 x half> %vc to <2 x double>1609  %vf = fneg <2 x double> %vd1610  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vf, <2 x double> %ve, <2 x double> %va)1611  ret <2 x double> %vg1612}1613 1614define <2 x double> @vfwnmsac_vf_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, half %c) {1615; CHECK-LABEL: vfwnmsac_vf_v2f64_v2f16:1616; CHECK:       # %bb.0:1617; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1618; CHECK-NEXT:    vfmv.v.f v10, fa01619; CHECK-NEXT:    vfwcvt.f.f.v v11, v91620; CHECK-NEXT:    vfwcvt.f.f.v v9, v101621; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1622; CHECK-NEXT:    vfwnmsac.vv v8, v11, v91623; CHECK-NEXT:    ret1624  %head = insertelement <2 x half> poison, half %c, i32 01625  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer1626  %vd = fpext <2 x half> %vb to <2 x double>1627  %ve = fpext <2 x half> %splat to <2 x double>1628  %vf = fneg <2 x double> %vd1629  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vf, <2 x double> %ve, <2 x double> %va)1630  ret <2 x double> %vg1631}1632 1633define <2 x double> @vfwnmsac_fv_v2f64_v2f16(<2 x double> %va, <2 x half> %vb, half %c) {1634; CHECK-LABEL: vfwnmsac_fv_v2f64_v2f16:1635; CHECK:       # %bb.0:1636; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1637; CHECK-NEXT:    vfmv.v.f v10, fa01638; CHECK-NEXT:    vfwcvt.f.f.v v11, v91639; CHECK-NEXT:    vfwcvt.f.f.v v9, v101640; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma1641; CHECK-NEXT:    vfwnmsac.vv v8, v11, v91642; CHECK-NEXT:    ret1643  %head = insertelement <2 x half> poison, half %c, i32 01644  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer1645  %vd = fpext <2 x half> %vb to <2 x double>1646  %ve = fpext <2 x half> %splat to <2 x double>1647  %vf = fneg <2 x double> %ve1648  %vg = call <2 x double> @llvm.fma.v2f64(<2 x double> %vd, <2 x double> %vf, <2 x double> %va)1649  ret <2 x double> %vg1650}1651 1652define <4 x double> @vfwmacc_vv_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, <4 x half> %vc) {1653; CHECK-LABEL: vfwmacc_vv_v4f64_v4f16:1654; CHECK:       # %bb.0:1655; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1656; CHECK-NEXT:    vfwcvt.f.f.v v12, v101657; CHECK-NEXT:    vfwcvt.f.f.v v10, v111658; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1659; CHECK-NEXT:    vfwmacc.vv v8, v12, v101660; CHECK-NEXT:    ret1661  %vd = fpext <4 x half> %vb to <4 x double>1662  %ve = fpext <4 x half> %vc to <4 x double>1663  %vf = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %ve, <4 x double> %va)1664  ret <4 x double> %vf1665}1666 1667define <4 x double> @vfwmacc_vf_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, half %c) {1668; CHECK-LABEL: vfwmacc_vf_v4f64_v4f16:1669; CHECK:       # %bb.0:1670; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1671; CHECK-NEXT:    vfmv.v.f v11, fa01672; CHECK-NEXT:    vfwcvt.f.f.v v12, v101673; CHECK-NEXT:    vfwcvt.f.f.v v10, v111674; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1675; CHECK-NEXT:    vfwmacc.vv v8, v12, v101676; CHECK-NEXT:    ret1677  %head = insertelement <4 x half> poison, half %c, i32 01678  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer1679  %vd = fpext <4 x half> %vb to <4 x double>1680  %ve = fpext <4 x half> %splat to <4 x double>1681  %vf = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %ve, <4 x double> %va)1682  ret <4 x double> %vf1683}1684 1685define <4 x double> @vfwnmacc_vv_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, <4 x half> %vc) {1686; CHECK-LABEL: vfwnmacc_vv_v4f64_v4f16:1687; CHECK:       # %bb.0:1688; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1689; CHECK-NEXT:    vfwcvt.f.f.v v12, v101690; CHECK-NEXT:    vfwcvt.f.f.v v10, v111691; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1692; CHECK-NEXT:    vfwnmacc.vv v8, v12, v101693; CHECK-NEXT:    ret1694  %vd = fpext <4 x half> %vb to <4 x double>1695  %ve = fpext <4 x half> %vc to <4 x double>1696  %vf = fneg <4 x double> %va1697  %vg = fneg <4 x double> %vd1698  %vh = call <4 x double> @llvm.fma.v4f64(<4 x double> %vg, <4 x double> %ve, <4 x double> %vf)1699  ret <4 x double> %vh1700}1701 1702define <4 x double> @vfwnmacc_vf_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, half %c) {1703; CHECK-LABEL: vfwnmacc_vf_v4f64_v4f16:1704; CHECK:       # %bb.0:1705; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1706; CHECK-NEXT:    vfmv.v.f v11, fa01707; CHECK-NEXT:    vfwcvt.f.f.v v12, v101708; CHECK-NEXT:    vfwcvt.f.f.v v10, v111709; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1710; CHECK-NEXT:    vfwnmacc.vv v8, v12, v101711; CHECK-NEXT:    ret1712  %head = insertelement <4 x half> poison, half %c, i32 01713  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer1714  %vd = fpext <4 x half> %vb to <4 x double>1715  %ve = fpext <4 x half> %splat to <4 x double>1716  %vf = fneg <4 x double> %va1717  %vg = fneg <4 x double> %vd1718  %vh = call <4 x double> @llvm.fma.v4f64(<4 x double> %vg, <4 x double> %ve, <4 x double> %vf)1719  ret <4 x double> %vh1720}1721 1722define <4 x double> @vfwnmacc_fv_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, half %c) {1723; CHECK-LABEL: vfwnmacc_fv_v4f64_v4f16:1724; CHECK:       # %bb.0:1725; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1726; CHECK-NEXT:    vfmv.v.f v11, fa01727; CHECK-NEXT:    vfwcvt.f.f.v v12, v101728; CHECK-NEXT:    vfwcvt.f.f.v v10, v111729; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1730; CHECK-NEXT:    vfwnmacc.vv v8, v12, v101731; CHECK-NEXT:    ret1732  %head = insertelement <4 x half> poison, half %c, i32 01733  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer1734  %vd = fpext <4 x half> %vb to <4 x double>1735  %ve = fpext <4 x half> %splat to <4 x double>1736  %vf = fneg <4 x double> %va1737  %vg = fneg <4 x double> %ve1738  %vh = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %vg, <4 x double> %vf)1739  ret <4 x double> %vh1740}1741 1742define <4 x double> @vfwmsac_vv_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, <4 x half> %vc) {1743; CHECK-LABEL: vfwmsac_vv_v4f64_v4f16:1744; CHECK:       # %bb.0:1745; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1746; CHECK-NEXT:    vfwcvt.f.f.v v12, v101747; CHECK-NEXT:    vfwcvt.f.f.v v10, v111748; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1749; CHECK-NEXT:    vfwmsac.vv v8, v12, v101750; CHECK-NEXT:    ret1751  %vd = fpext <4 x half> %vb to <4 x double>1752  %ve = fpext <4 x half> %vc to <4 x double>1753  %vf = fneg <4 x double> %va1754  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %ve, <4 x double> %vf)1755  ret <4 x double> %vg1756}1757 1758define <4 x double> @vfwmsac_vf_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, half %c) {1759; CHECK-LABEL: vfwmsac_vf_v4f64_v4f16:1760; CHECK:       # %bb.0:1761; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1762; CHECK-NEXT:    vfmv.v.f v11, fa01763; CHECK-NEXT:    vfwcvt.f.f.v v12, v101764; CHECK-NEXT:    vfwcvt.f.f.v v10, v111765; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1766; CHECK-NEXT:    vfwmsac.vv v8, v12, v101767; CHECK-NEXT:    ret1768  %head = insertelement <4 x half> poison, half %c, i32 01769  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer1770  %vd = fpext <4 x half> %vb to <4 x double>1771  %ve = fpext <4 x half> %splat to <4 x double>1772  %vf = fneg <4 x double> %va1773  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %ve, <4 x double> %vf)1774  ret <4 x double> %vg1775}1776 1777define <4 x double> @vfwnmsac_vv_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, <4 x half> %vc) {1778; CHECK-LABEL: vfwnmsac_vv_v4f64_v4f16:1779; CHECK:       # %bb.0:1780; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1781; CHECK-NEXT:    vfwcvt.f.f.v v12, v101782; CHECK-NEXT:    vfwcvt.f.f.v v10, v111783; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1784; CHECK-NEXT:    vfwnmsac.vv v8, v12, v101785; CHECK-NEXT:    ret1786  %vd = fpext <4 x half> %vb to <4 x double>1787  %ve = fpext <4 x half> %vc to <4 x double>1788  %vf = fneg <4 x double> %vd1789  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vf, <4 x double> %ve, <4 x double> %va)1790  ret <4 x double> %vg1791}1792 1793define <4 x double> @vfwnmsac_vf_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, half %c) {1794; CHECK-LABEL: vfwnmsac_vf_v4f64_v4f16:1795; CHECK:       # %bb.0:1796; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1797; CHECK-NEXT:    vfmv.v.f v11, fa01798; CHECK-NEXT:    vfwcvt.f.f.v v12, v101799; CHECK-NEXT:    vfwcvt.f.f.v v10, v111800; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1801; CHECK-NEXT:    vfwnmsac.vv v8, v12, v101802; CHECK-NEXT:    ret1803  %head = insertelement <4 x half> poison, half %c, i32 01804  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer1805  %vd = fpext <4 x half> %vb to <4 x double>1806  %ve = fpext <4 x half> %splat to <4 x double>1807  %vf = fneg <4 x double> %vd1808  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vf, <4 x double> %ve, <4 x double> %va)1809  ret <4 x double> %vg1810}1811 1812define <4 x double> @vfwnmsac_fv_v4f64_v4f16(<4 x double> %va, <4 x half> %vb, half %c) {1813; CHECK-LABEL: vfwnmsac_fv_v4f64_v4f16:1814; CHECK:       # %bb.0:1815; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1816; CHECK-NEXT:    vfmv.v.f v11, fa01817; CHECK-NEXT:    vfwcvt.f.f.v v12, v101818; CHECK-NEXT:    vfwcvt.f.f.v v10, v111819; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma1820; CHECK-NEXT:    vfwnmsac.vv v8, v12, v101821; CHECK-NEXT:    ret1822  %head = insertelement <4 x half> poison, half %c, i32 01823  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer1824  %vd = fpext <4 x half> %vb to <4 x double>1825  %ve = fpext <4 x half> %splat to <4 x double>1826  %vf = fneg <4 x double> %ve1827  %vg = call <4 x double> @llvm.fma.v4f64(<4 x double> %vd, <4 x double> %vf, <4 x double> %va)1828  ret <4 x double> %vg1829}1830 1831define <8 x double> @vfwmacc_vv_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, <8 x half> %vc) {1832; CHECK-LABEL: vfwmacc_vv_v8f64_v8f16:1833; CHECK:       # %bb.0:1834; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1835; CHECK-NEXT:    vfwcvt.f.f.v v14, v121836; CHECK-NEXT:    vfwcvt.f.f.v v16, v131837; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1838; CHECK-NEXT:    vfwmacc.vv v8, v14, v161839; CHECK-NEXT:    ret1840  %vd = fpext <8 x half> %vb to <8 x double>1841  %ve = fpext <8 x half> %vc to <8 x double>1842  %vf = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %ve, <8 x double> %va)1843  ret <8 x double> %vf1844}1845 1846define <8 x double> @vfwmacc_vf_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, half %c) {1847; CHECK-LABEL: vfwmacc_vf_v8f64_v8f16:1848; CHECK:       # %bb.0:1849; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1850; CHECK-NEXT:    vfmv.v.f v16, fa01851; CHECK-NEXT:    vfwcvt.f.f.v v14, v121852; CHECK-NEXT:    vfwcvt.f.f.v v12, v161853; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1854; CHECK-NEXT:    vfwmacc.vv v8, v14, v121855; CHECK-NEXT:    ret1856  %head = insertelement <8 x half> poison, half %c, i32 01857  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer1858  %vd = fpext <8 x half> %vb to <8 x double>1859  %ve = fpext <8 x half> %splat to <8 x double>1860  %vf = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %ve, <8 x double> %va)1861  ret <8 x double> %vf1862}1863 1864define <8 x double> @vfwnmacc_vv_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, <8 x half> %vc) {1865; CHECK-LABEL: vfwnmacc_vv_v8f64_v8f16:1866; CHECK:       # %bb.0:1867; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1868; CHECK-NEXT:    vfwcvt.f.f.v v14, v121869; CHECK-NEXT:    vfwcvt.f.f.v v16, v131870; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1871; CHECK-NEXT:    vfwnmacc.vv v8, v14, v161872; CHECK-NEXT:    ret1873  %vd = fpext <8 x half> %vb to <8 x double>1874  %ve = fpext <8 x half> %vc to <8 x double>1875  %vf = fneg <8 x double> %va1876  %vg = fneg <8 x double> %vd1877  %vh = call <8 x double> @llvm.fma.v8f64(<8 x double> %vg, <8 x double> %ve, <8 x double> %vf)1878  ret <8 x double> %vh1879}1880 1881define <8 x double> @vfwnmacc_vf_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, half %c) {1882; CHECK-LABEL: vfwnmacc_vf_v8f64_v8f16:1883; CHECK:       # %bb.0:1884; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1885; CHECK-NEXT:    vfmv.v.f v16, fa01886; CHECK-NEXT:    vfwcvt.f.f.v v14, v121887; CHECK-NEXT:    vfwcvt.f.f.v v12, v161888; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1889; CHECK-NEXT:    vfwnmacc.vv v8, v14, v121890; CHECK-NEXT:    ret1891  %head = insertelement <8 x half> poison, half %c, i32 01892  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer1893  %vd = fpext <8 x half> %vb to <8 x double>1894  %ve = fpext <8 x half> %splat to <8 x double>1895  %vf = fneg <8 x double> %va1896  %vg = fneg <8 x double> %vd1897  %vh = call <8 x double> @llvm.fma.v8f64(<8 x double> %vg, <8 x double> %ve, <8 x double> %vf)1898  ret <8 x double> %vh1899}1900 1901define <8 x double> @vfwnmacc_fv_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, half %c) {1902; CHECK-LABEL: vfwnmacc_fv_v8f64_v8f16:1903; CHECK:       # %bb.0:1904; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1905; CHECK-NEXT:    vfmv.v.f v16, fa01906; CHECK-NEXT:    vfwcvt.f.f.v v14, v121907; CHECK-NEXT:    vfwcvt.f.f.v v12, v161908; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1909; CHECK-NEXT:    vfwnmacc.vv v8, v14, v121910; CHECK-NEXT:    ret1911  %head = insertelement <8 x half> poison, half %c, i32 01912  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer1913  %vd = fpext <8 x half> %vb to <8 x double>1914  %ve = fpext <8 x half> %splat to <8 x double>1915  %vf = fneg <8 x double> %va1916  %vg = fneg <8 x double> %ve1917  %vh = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %vg, <8 x double> %vf)1918  ret <8 x double> %vh1919}1920 1921define <8 x double> @vfwmsac_vv_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, <8 x half> %vc) {1922; CHECK-LABEL: vfwmsac_vv_v8f64_v8f16:1923; CHECK:       # %bb.0:1924; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1925; CHECK-NEXT:    vfwcvt.f.f.v v14, v121926; CHECK-NEXT:    vfwcvt.f.f.v v16, v131927; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1928; CHECK-NEXT:    vfwmsac.vv v8, v14, v161929; CHECK-NEXT:    ret1930  %vd = fpext <8 x half> %vb to <8 x double>1931  %ve = fpext <8 x half> %vc to <8 x double>1932  %vf = fneg <8 x double> %va1933  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %ve, <8 x double> %vf)1934  ret <8 x double> %vg1935}1936 1937define <8 x double> @vfwmsac_vf_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, half %c) {1938; CHECK-LABEL: vfwmsac_vf_v8f64_v8f16:1939; CHECK:       # %bb.0:1940; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1941; CHECK-NEXT:    vfmv.v.f v16, fa01942; CHECK-NEXT:    vfwcvt.f.f.v v14, v121943; CHECK-NEXT:    vfwcvt.f.f.v v12, v161944; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1945; CHECK-NEXT:    vfwmsac.vv v8, v14, v121946; CHECK-NEXT:    ret1947  %head = insertelement <8 x half> poison, half %c, i32 01948  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer1949  %vd = fpext <8 x half> %vb to <8 x double>1950  %ve = fpext <8 x half> %splat to <8 x double>1951  %vf = fneg <8 x double> %va1952  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %ve, <8 x double> %vf)1953  ret <8 x double> %vg1954}1955 1956define <8 x double> @vfwnmsac_vv_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, <8 x half> %vc) {1957; CHECK-LABEL: vfwnmsac_vv_v8f64_v8f16:1958; CHECK:       # %bb.0:1959; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1960; CHECK-NEXT:    vfwcvt.f.f.v v14, v121961; CHECK-NEXT:    vfwcvt.f.f.v v16, v131962; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1963; CHECK-NEXT:    vfwnmsac.vv v8, v14, v161964; CHECK-NEXT:    ret1965  %vd = fpext <8 x half> %vb to <8 x double>1966  %ve = fpext <8 x half> %vc to <8 x double>1967  %vf = fneg <8 x double> %vd1968  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vf, <8 x double> %ve, <8 x double> %va)1969  ret <8 x double> %vg1970}1971 1972define <8 x double> @vfwnmsac_vf_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, half %c) {1973; CHECK-LABEL: vfwnmsac_vf_v8f64_v8f16:1974; CHECK:       # %bb.0:1975; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1976; CHECK-NEXT:    vfmv.v.f v16, fa01977; CHECK-NEXT:    vfwcvt.f.f.v v14, v121978; CHECK-NEXT:    vfwcvt.f.f.v v12, v161979; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1980; CHECK-NEXT:    vfwnmsac.vv v8, v14, v121981; CHECK-NEXT:    ret1982  %head = insertelement <8 x half> poison, half %c, i32 01983  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer1984  %vd = fpext <8 x half> %vb to <8 x double>1985  %ve = fpext <8 x half> %splat to <8 x double>1986  %vf = fneg <8 x double> %vd1987  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vf, <8 x double> %ve, <8 x double> %va)1988  ret <8 x double> %vg1989}1990 1991define <8 x double> @vfwnmsac_fv_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, half %c) {1992; CHECK-LABEL: vfwnmsac_fv_v8f64_v8f16:1993; CHECK:       # %bb.0:1994; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1995; CHECK-NEXT:    vfmv.v.f v16, fa01996; CHECK-NEXT:    vfwcvt.f.f.v v14, v121997; CHECK-NEXT:    vfwcvt.f.f.v v12, v161998; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma1999; CHECK-NEXT:    vfwnmsac.vv v8, v14, v122000; CHECK-NEXT:    ret2001  %head = insertelement <8 x half> poison, half %c, i32 02002  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer2003  %vd = fpext <8 x half> %vb to <8 x double>2004  %ve = fpext <8 x half> %splat to <8 x double>2005  %vf = fneg <8 x double> %ve2006  %vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %vf, <8 x double> %va)2007  ret <8 x double> %vg2008}2009 2010define <2 x float> @vfwmacc_vf2_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {2011; CHECK-LABEL: vfwmacc_vf2_v2f32:2012; CHECK:       # %bb.0:2013; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma2014; CHECK-NEXT:    vfwmacc.vf v8, fa0, v92015; CHECK-NEXT:    ret2016  %cext = fpext half %c to float2017  %head = insertelement <2 x float> poison, float %cext, i32 02018  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer2019  %vd = fpext <2 x half> %vb to <2 x float>2020  %vf = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %splat, <2 x float> %va)2021  ret <2 x float> %vf2022}2023 2024define <2 x float> @vfwmsac_vf2_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {2025; CHECK-LABEL: vfwmsac_vf2_v2f32:2026; CHECK:       # %bb.0:2027; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma2028; CHECK-NEXT:    vfwmsac.vf v8, fa0, v92029; CHECK-NEXT:    ret2030  %cext = fpext half %c to float2031  %head = insertelement <2 x float> poison, float %cext, i32 02032  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer2033  %vd = fpext <2 x half> %vb to <2 x float>2034  %ve = fneg <2 x float> %va2035  %vf = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %splat, <2 x float> %ve)2036  ret <2 x float> %vf2037}2038 2039define <2 x float> @vfwnmacc_vf2_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {2040; CHECK-LABEL: vfwnmacc_vf2_v2f32:2041; CHECK:       # %bb.0:2042; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma2043; CHECK-NEXT:    vfwnmacc.vf v8, fa0, v92044; CHECK-NEXT:    ret2045  %cext = fpext half %c to float2046  %head = insertelement <2 x float> poison, float %cext, i32 02047  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer2048  %vd = fpext <2 x half> %vb to <2 x float>2049  %vf = fneg <2 x float> %va2050  %vg = fneg <2 x float> %vd2051  %vh = call <2 x float> @llvm.fma.v2f32(<2 x float> %vg, <2 x float> %splat, <2 x float> %vf)2052  ret <2 x float> %vh2053}2054 2055define <2 x float> @vfwnmsac_vf2_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {2056; CHECK-LABEL: vfwnmsac_vf2_v2f32:2057; CHECK:       # %bb.0:2058; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma2059; CHECK-NEXT:    vfwnmsac.vf v8, fa0, v92060; CHECK-NEXT:    ret2061  %cext = fpext half %c to float2062  %head = insertelement <2 x float> poison, float %cext, i32 02063  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer2064  %vd = fpext <2 x half> %vb to <2 x float>2065  %vf = fneg <2 x float> %vd2066  %vg = call <2 x float> @llvm.fma.v2f32(<2 x float> %vf, <2 x float> %splat, <2 x float> %va)2067  ret <2 x float> %vg2068}2069