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