1278 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+m -target-abi=ilp32d \3; RUN: -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+m -target-abi=lp64d \5; RUN: -verify-machineinstrs < %s | FileCheck %s6 7define <2 x half> @vfmacc_vv_v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {8; CHECK-LABEL: vfmacc_vv_v2f16:9; CHECK: # %bb.0:10; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu11; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t12; CHECK-NEXT: vmv1r.v v8, v1013; CHECK-NEXT: ret14 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)15 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)16 ret <2 x half> %u17}18 19define <2 x half> @vfmacc_vv_v2f16_unmasked(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {20; CHECK-LABEL: vfmacc_vv_v2f16_unmasked:21; CHECK: # %bb.0:22; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma23; CHECK-NEXT: vfmacc.vv v10, v8, v924; CHECK-NEXT: vmv1r.v v8, v1025; CHECK-NEXT: ret26 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)27 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> splat (i1 -1), <2 x half> %v, <2 x half> %c, i32 %evl)28 ret <2 x half> %u29}30 31define <2 x half> @vfmacc_vf_v2f16(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {32; CHECK-LABEL: vfmacc_vf_v2f16:33; CHECK: # %bb.0:34; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu35; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t36; CHECK-NEXT: vmv1r.v v8, v937; CHECK-NEXT: ret38 %elt.head = insertelement <2 x half> poison, half %b, i32 039 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer40 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)41 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)42 ret <2 x half> %u43}44 45define <2 x half> @vfmacc_vf_v2f16_commute(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {46; CHECK-LABEL: vfmacc_vf_v2f16_commute:47; CHECK: # %bb.0:48; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu49; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t50; CHECK-NEXT: vmv1r.v v8, v951; CHECK-NEXT: ret52 %elt.head = insertelement <2 x half> poison, half %b, i32 053 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer54 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %va, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)55 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)56 ret <2 x half> %u57}58 59define <2 x half> @vfmacc_vf_v2f16_unmasked(<2 x half> %va, half %b, <2 x half> %c, i32 zeroext %evl) {60; CHECK-LABEL: vfmacc_vf_v2f16_unmasked:61; CHECK: # %bb.0:62; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma63; CHECK-NEXT: vfmacc.vf v9, fa0, v864; CHECK-NEXT: vmv1r.v v8, v965; CHECK-NEXT: ret66 %elt.head = insertelement <2 x half> poison, half %b, i32 067 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer68 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)69 %u = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> splat (i1 -1), <2 x half> %v, <2 x half> %c, i32 %evl)70 ret <2 x half> %u71}72 73define <2 x half> @vfmacc_vv_v2f16_ta(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {74; CHECK-LABEL: vfmacc_vv_v2f16_ta:75; CHECK: # %bb.0:76; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu77; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t78; CHECK-NEXT: vmv1r.v v8, v1079; CHECK-NEXT: ret80 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)81 %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)82 ret <2 x half> %u83}84 85define <2 x half> @vfmacc_vf_v2f16_ta(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {86; CHECK-LABEL: vfmacc_vf_v2f16_ta:87; CHECK: # %bb.0:88; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu89; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t90; CHECK-NEXT: vmv1r.v v8, v991; CHECK-NEXT: ret92 %elt.head = insertelement <2 x half> poison, half %b, i32 093 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer94 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)95 %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)96 ret <2 x half> %u97}98 99define <2 x half> @vfmacc_vf_v2f16_commute_ta(<2 x half> %va, half %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {100; CHECK-LABEL: vfmacc_vf_v2f16_commute_ta:101; CHECK: # %bb.0:102; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu103; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t104; CHECK-NEXT: vmv1r.v v8, v9105; CHECK-NEXT: ret106 %elt.head = insertelement <2 x half> poison, half %b, i32 0107 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer108 %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %vb, <2 x half> %va, <2 x half> %c, <2 x i1> splat (i1 -1), i32 %evl)109 %u = call <2 x half> @llvm.vp.select.v2f16(<2 x i1> %m, <2 x half> %v, <2 x half> %c, i32 %evl)110 ret <2 x half> %u111}112 113define <4 x half> @vfmacc_vv_v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {114; CHECK-LABEL: vfmacc_vv_v4f16:115; CHECK: # %bb.0:116; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu117; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t118; CHECK-NEXT: vmv1r.v v8, v10119; CHECK-NEXT: ret120 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)121 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)122 ret <4 x half> %u123}124 125define <4 x half> @vfmacc_vv_v4f16_unmasked(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {126; CHECK-LABEL: vfmacc_vv_v4f16_unmasked:127; CHECK: # %bb.0:128; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma129; CHECK-NEXT: vfmacc.vv v10, v8, v9130; CHECK-NEXT: vmv1r.v v8, v10131; CHECK-NEXT: ret132 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)133 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> splat (i1 -1), <4 x half> %v, <4 x half> %c, i32 %evl)134 ret <4 x half> %u135}136 137define <4 x half> @vfmacc_vf_v4f16(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {138; CHECK-LABEL: vfmacc_vf_v4f16:139; CHECK: # %bb.0:140; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu141; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t142; CHECK-NEXT: vmv1r.v v8, v9143; CHECK-NEXT: ret144 %elt.head = insertelement <4 x half> poison, half %b, i32 0145 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer146 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)147 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)148 ret <4 x half> %u149}150 151define <4 x half> @vfmacc_vf_v4f16_commute(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {152; CHECK-LABEL: vfmacc_vf_v4f16_commute:153; CHECK: # %bb.0:154; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu155; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t156; CHECK-NEXT: vmv1r.v v8, v9157; CHECK-NEXT: ret158 %elt.head = insertelement <4 x half> poison, half %b, i32 0159 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer160 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %va, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)161 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)162 ret <4 x half> %u163}164 165define <4 x half> @vfmacc_vf_v4f16_unmasked(<4 x half> %va, half %b, <4 x half> %c, i32 zeroext %evl) {166; CHECK-LABEL: vfmacc_vf_v4f16_unmasked:167; CHECK: # %bb.0:168; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma169; CHECK-NEXT: vfmacc.vf v9, fa0, v8170; CHECK-NEXT: vmv1r.v v8, v9171; CHECK-NEXT: ret172 %elt.head = insertelement <4 x half> poison, half %b, i32 0173 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer174 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)175 %u = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> splat (i1 -1), <4 x half> %v, <4 x half> %c, i32 %evl)176 ret <4 x half> %u177}178 179define <4 x half> @vfmacc_vv_v4f16_ta(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {180; CHECK-LABEL: vfmacc_vv_v4f16_ta:181; CHECK: # %bb.0:182; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu183; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t184; CHECK-NEXT: vmv1r.v v8, v10185; CHECK-NEXT: ret186 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)187 %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)188 ret <4 x half> %u189}190 191define <4 x half> @vfmacc_vf_v4f16_ta(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {192; CHECK-LABEL: vfmacc_vf_v4f16_ta:193; CHECK: # %bb.0:194; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu195; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t196; CHECK-NEXT: vmv1r.v v8, v9197; CHECK-NEXT: ret198 %elt.head = insertelement <4 x half> poison, half %b, i32 0199 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer200 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)201 %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)202 ret <4 x half> %u203}204 205define <4 x half> @vfmacc_vf_v4f16_commute_ta(<4 x half> %va, half %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {206; CHECK-LABEL: vfmacc_vf_v4f16_commute_ta:207; CHECK: # %bb.0:208; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu209; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t210; CHECK-NEXT: vmv1r.v v8, v9211; CHECK-NEXT: ret212 %elt.head = insertelement <4 x half> poison, half %b, i32 0213 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer214 %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %vb, <4 x half> %va, <4 x half> %c, <4 x i1> splat (i1 -1), i32 %evl)215 %u = call <4 x half> @llvm.vp.select.v4f16(<4 x i1> %m, <4 x half> %v, <4 x half> %c, i32 %evl)216 ret <4 x half> %u217}218 219define <8 x half> @vfmacc_vv_v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {220; CHECK-LABEL: vfmacc_vv_v8f16:221; CHECK: # %bb.0:222; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu223; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t224; CHECK-NEXT: vmv1r.v v8, v10225; CHECK-NEXT: ret226 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)227 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)228 ret <8 x half> %u229}230 231define <8 x half> @vfmacc_vv_v8f16_unmasked(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {232; CHECK-LABEL: vfmacc_vv_v8f16_unmasked:233; CHECK: # %bb.0:234; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma235; CHECK-NEXT: vfmacc.vv v10, v8, v9236; CHECK-NEXT: vmv1r.v v8, v10237; CHECK-NEXT: ret238 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)239 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> splat (i1 -1), <8 x half> %v, <8 x half> %c, i32 %evl)240 ret <8 x half> %u241}242 243define <8 x half> @vfmacc_vf_v8f16(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {244; CHECK-LABEL: vfmacc_vf_v8f16:245; CHECK: # %bb.0:246; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu247; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t248; CHECK-NEXT: vmv1r.v v8, v9249; CHECK-NEXT: ret250 %elt.head = insertelement <8 x half> poison, half %b, i32 0251 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer252 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)253 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)254 ret <8 x half> %u255}256 257define <8 x half> @vfmacc_vf_v8f16_commute(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {258; CHECK-LABEL: vfmacc_vf_v8f16_commute:259; CHECK: # %bb.0:260; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu261; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t262; CHECK-NEXT: vmv1r.v v8, v9263; CHECK-NEXT: ret264 %elt.head = insertelement <8 x half> poison, half %b, i32 0265 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer266 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %va, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)267 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)268 ret <8 x half> %u269}270 271define <8 x half> @vfmacc_vf_v8f16_unmasked(<8 x half> %va, half %b, <8 x half> %c, i32 zeroext %evl) {272; CHECK-LABEL: vfmacc_vf_v8f16_unmasked:273; CHECK: # %bb.0:274; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma275; CHECK-NEXT: vfmacc.vf v9, fa0, v8276; CHECK-NEXT: vmv1r.v v8, v9277; CHECK-NEXT: ret278 %elt.head = insertelement <8 x half> poison, half %b, i32 0279 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer280 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)281 %u = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> splat (i1 -1), <8 x half> %v, <8 x half> %c, i32 %evl)282 ret <8 x half> %u283}284 285define <8 x half> @vfmacc_vv_v8f16_ta(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {286; CHECK-LABEL: vfmacc_vv_v8f16_ta:287; CHECK: # %bb.0:288; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu289; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t290; CHECK-NEXT: vmv.v.v v8, v10291; CHECK-NEXT: ret292 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %a, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)293 %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)294 ret <8 x half> %u295}296 297define <8 x half> @vfmacc_vf_v8f16_ta(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {298; CHECK-LABEL: vfmacc_vf_v8f16_ta:299; CHECK: # %bb.0:300; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu301; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t302; CHECK-NEXT: vmv.v.v v8, v9303; CHECK-NEXT: ret304 %elt.head = insertelement <8 x half> poison, half %b, i32 0305 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer306 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)307 %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)308 ret <8 x half> %u309}310 311define <8 x half> @vfmacc_vf_v8f16_commute_ta(<8 x half> %va, half %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {312; CHECK-LABEL: vfmacc_vf_v8f16_commute_ta:313; CHECK: # %bb.0:314; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu315; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t316; CHECK-NEXT: vmv.v.v v8, v9317; CHECK-NEXT: ret318 %elt.head = insertelement <8 x half> poison, half %b, i32 0319 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer320 %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %vb, <8 x half> %va, <8 x half> %c, <8 x i1> splat (i1 -1), i32 %evl)321 %u = call <8 x half> @llvm.vp.select.v8f16(<8 x i1> %m, <8 x half> %v, <8 x half> %c, i32 %evl)322 ret <8 x half> %u323}324 325define <16 x half> @vfmacc_vv_v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {326; CHECK-LABEL: vfmacc_vv_v16f16:327; CHECK: # %bb.0:328; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu329; CHECK-NEXT: vfmacc.vv v12, v8, v10, v0.t330; CHECK-NEXT: vmv2r.v v8, v12331; CHECK-NEXT: ret332 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)333 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)334 ret <16 x half> %u335}336 337define <16 x half> @vfmacc_vv_v16f16_unmasked(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {338; CHECK-LABEL: vfmacc_vv_v16f16_unmasked:339; CHECK: # %bb.0:340; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma341; CHECK-NEXT: vfmacc.vv v12, v8, v10342; CHECK-NEXT: vmv2r.v v8, v12343; CHECK-NEXT: ret344 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)345 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> splat (i1 -1), <16 x half> %v, <16 x half> %c, i32 %evl)346 ret <16 x half> %u347}348 349define <16 x half> @vfmacc_vf_v16f16(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {350; CHECK-LABEL: vfmacc_vf_v16f16:351; CHECK: # %bb.0:352; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu353; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t354; CHECK-NEXT: vmv2r.v v8, v10355; CHECK-NEXT: ret356 %elt.head = insertelement <16 x half> poison, half %b, i32 0357 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer358 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)359 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)360 ret <16 x half> %u361}362 363define <16 x half> @vfmacc_vf_v16f16_commute(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {364; CHECK-LABEL: vfmacc_vf_v16f16_commute:365; CHECK: # %bb.0:366; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu367; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t368; CHECK-NEXT: vmv2r.v v8, v10369; CHECK-NEXT: ret370 %elt.head = insertelement <16 x half> poison, half %b, i32 0371 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer372 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %va, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)373 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)374 ret <16 x half> %u375}376 377define <16 x half> @vfmacc_vf_v16f16_unmasked(<16 x half> %va, half %b, <16 x half> %c, i32 zeroext %evl) {378; CHECK-LABEL: vfmacc_vf_v16f16_unmasked:379; CHECK: # %bb.0:380; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma381; CHECK-NEXT: vfmacc.vf v10, fa0, v8382; CHECK-NEXT: vmv2r.v v8, v10383; CHECK-NEXT: ret384 %elt.head = insertelement <16 x half> poison, half %b, i32 0385 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer386 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)387 %u = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> splat (i1 -1), <16 x half> %v, <16 x half> %c, i32 %evl)388 ret <16 x half> %u389}390 391define <16 x half> @vfmacc_vv_v16f16_ta(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {392; CHECK-LABEL: vfmacc_vv_v16f16_ta:393; CHECK: # %bb.0:394; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu395; CHECK-NEXT: vfmacc.vv v12, v8, v10, v0.t396; CHECK-NEXT: vmv.v.v v8, v12397; CHECK-NEXT: ret398 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %a, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)399 %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)400 ret <16 x half> %u401}402 403define <16 x half> @vfmacc_vf_v16f16_ta(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {404; CHECK-LABEL: vfmacc_vf_v16f16_ta:405; CHECK: # %bb.0:406; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu407; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t408; CHECK-NEXT: vmv.v.v v8, v10409; CHECK-NEXT: ret410 %elt.head = insertelement <16 x half> poison, half %b, i32 0411 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer412 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)413 %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)414 ret <16 x half> %u415}416 417define <16 x half> @vfmacc_vf_v16f16_commute_ta(<16 x half> %va, half %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {418; CHECK-LABEL: vfmacc_vf_v16f16_commute_ta:419; CHECK: # %bb.0:420; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu421; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t422; CHECK-NEXT: vmv.v.v v8, v10423; CHECK-NEXT: ret424 %elt.head = insertelement <16 x half> poison, half %b, i32 0425 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer426 %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %vb, <16 x half> %va, <16 x half> %c, <16 x i1> splat (i1 -1), i32 %evl)427 %u = call <16 x half> @llvm.vp.select.v16f16(<16 x i1> %m, <16 x half> %v, <16 x half> %c, i32 %evl)428 ret <16 x half> %u429}430 431define <32 x half> @vfmacc_vv_v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {432; CHECK-LABEL: vfmacc_vv_v32f16:433; CHECK: # %bb.0:434; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu435; CHECK-NEXT: vfmacc.vv v16, v8, v12, v0.t436; CHECK-NEXT: vmv4r.v v8, v16437; CHECK-NEXT: ret438 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)439 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)440 ret <32 x half> %u441}442 443define <32 x half> @vfmacc_vv_v32f16_unmasked(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {444; CHECK-LABEL: vfmacc_vv_v32f16_unmasked:445; CHECK: # %bb.0:446; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma447; CHECK-NEXT: vfmacc.vv v16, v8, v12448; CHECK-NEXT: vmv4r.v v8, v16449; CHECK-NEXT: ret450 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)451 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> splat (i1 -1), <32 x half> %v, <32 x half> %c, i32 %evl)452 ret <32 x half> %u453}454 455define <32 x half> @vfmacc_vf_v32f16(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {456; CHECK-LABEL: vfmacc_vf_v32f16:457; CHECK: # %bb.0:458; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu459; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t460; CHECK-NEXT: vmv4r.v v8, v12461; CHECK-NEXT: ret462 %elt.head = insertelement <32 x half> poison, half %b, i32 0463 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer464 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)465 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)466 ret <32 x half> %u467}468 469define <32 x half> @vfmacc_vf_v32f16_commute(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {470; CHECK-LABEL: vfmacc_vf_v32f16_commute:471; CHECK: # %bb.0:472; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu473; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t474; CHECK-NEXT: vmv4r.v v8, v12475; CHECK-NEXT: ret476 %elt.head = insertelement <32 x half> poison, half %b, i32 0477 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer478 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %vb, <32 x half> %va, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)479 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)480 ret <32 x half> %u481}482 483define <32 x half> @vfmacc_vf_v32f16_unmasked(<32 x half> %va, half %b, <32 x half> %c, i32 zeroext %evl) {484; CHECK-LABEL: vfmacc_vf_v32f16_unmasked:485; CHECK: # %bb.0:486; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma487; CHECK-NEXT: vfmacc.vf v12, fa0, v8488; CHECK-NEXT: vmv4r.v v8, v12489; CHECK-NEXT: ret490 %elt.head = insertelement <32 x half> poison, half %b, i32 0491 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer492 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)493 %u = call <32 x half> @llvm.vp.merge.v32f16(<32 x i1> splat (i1 -1), <32 x half> %v, <32 x half> %c, i32 %evl)494 ret <32 x half> %u495}496 497define <32 x half> @vfmacc_vv_v32f16_ta(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {498; CHECK-LABEL: vfmacc_vv_v32f16_ta:499; CHECK: # %bb.0:500; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu501; CHECK-NEXT: vfmacc.vv v16, v8, v12, v0.t502; CHECK-NEXT: vmv.v.v v8, v16503; CHECK-NEXT: ret504 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %a, <32 x half> %b, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)505 %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)506 ret <32 x half> %u507}508 509define <32 x half> @vfmacc_vf_v32f16_ta(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {510; CHECK-LABEL: vfmacc_vf_v32f16_ta:511; CHECK: # %bb.0:512; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu513; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t514; CHECK-NEXT: vmv.v.v v8, v12515; CHECK-NEXT: ret516 %elt.head = insertelement <32 x half> poison, half %b, i32 0517 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer518 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %va, <32 x half> %vb, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)519 %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)520 ret <32 x half> %u521}522 523define <32 x half> @vfmacc_vf_v32f16_commute_ta(<32 x half> %va, half %b, <32 x half> %c, <32 x i1> %m, i32 zeroext %evl) {524; CHECK-LABEL: vfmacc_vf_v32f16_commute_ta:525; CHECK: # %bb.0:526; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu527; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t528; CHECK-NEXT: vmv.v.v v8, v12529; CHECK-NEXT: ret530 %elt.head = insertelement <32 x half> poison, half %b, i32 0531 %vb = shufflevector <32 x half> %elt.head, <32 x half> poison, <32 x i32> zeroinitializer532 %v = call <32 x half> @llvm.vp.fma.v32f16(<32 x half> %vb, <32 x half> %va, <32 x half> %c, <32 x i1> splat (i1 -1), i32 %evl)533 %u = call <32 x half> @llvm.vp.select.v32f16(<32 x i1> %m, <32 x half> %v, <32 x half> %c, i32 %evl)534 ret <32 x half> %u535}536 537define <2 x float> @vfmacc_vv_v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {538; CHECK-LABEL: vfmacc_vv_v2f32:539; CHECK: # %bb.0:540; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu541; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t542; CHECK-NEXT: vmv1r.v v8, v10543; CHECK-NEXT: ret544 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)545 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)546 ret <2 x float> %u547}548 549define <2 x float> @vfmacc_vv_v2f32_unmasked(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {550; CHECK-LABEL: vfmacc_vv_v2f32_unmasked:551; CHECK: # %bb.0:552; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma553; CHECK-NEXT: vfmacc.vv v10, v8, v9554; CHECK-NEXT: vmv1r.v v8, v10555; CHECK-NEXT: ret556 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)557 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> splat (i1 -1), <2 x float> %v, <2 x float> %c, i32 %evl)558 ret <2 x float> %u559}560 561define <2 x float> @vfmacc_vf_v2f32(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {562; CHECK-LABEL: vfmacc_vf_v2f32:563; CHECK: # %bb.0:564; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu565; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t566; CHECK-NEXT: vmv1r.v v8, v9567; CHECK-NEXT: ret568 %elt.head = insertelement <2 x float> poison, float %b, i32 0569 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer570 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)571 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)572 ret <2 x float> %u573}574 575define <2 x float> @vfmacc_vf_v2f32_commute(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {576; CHECK-LABEL: vfmacc_vf_v2f32_commute:577; CHECK: # %bb.0:578; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu579; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t580; CHECK-NEXT: vmv1r.v v8, v9581; CHECK-NEXT: ret582 %elt.head = insertelement <2 x float> poison, float %b, i32 0583 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer584 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %va, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)585 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)586 ret <2 x float> %u587}588 589define <2 x float> @vfmacc_vf_v2f32_unmasked(<2 x float> %va, float %b, <2 x float> %c, i32 zeroext %evl) {590; CHECK-LABEL: vfmacc_vf_v2f32_unmasked:591; CHECK: # %bb.0:592; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma593; CHECK-NEXT: vfmacc.vf v9, fa0, v8594; CHECK-NEXT: vmv1r.v v8, v9595; CHECK-NEXT: ret596 %elt.head = insertelement <2 x float> poison, float %b, i32 0597 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer598 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)599 %u = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> splat (i1 -1), <2 x float> %v, <2 x float> %c, i32 %evl)600 ret <2 x float> %u601}602 603define <2 x float> @vfmacc_vv_v2f32_ta(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {604; CHECK-LABEL: vfmacc_vv_v2f32_ta:605; CHECK: # %bb.0:606; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu607; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t608; CHECK-NEXT: vmv1r.v v8, v10609; CHECK-NEXT: ret610 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)611 %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)612 ret <2 x float> %u613}614 615define <2 x float> @vfmacc_vf_v2f32_ta(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {616; CHECK-LABEL: vfmacc_vf_v2f32_ta:617; CHECK: # %bb.0:618; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu619; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t620; CHECK-NEXT: vmv1r.v v8, v9621; CHECK-NEXT: ret622 %elt.head = insertelement <2 x float> poison, float %b, i32 0623 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer624 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)625 %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)626 ret <2 x float> %u627}628 629define <2 x float> @vfmacc_vf_v2f32_commute_ta(<2 x float> %va, float %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {630; CHECK-LABEL: vfmacc_vf_v2f32_commute_ta:631; CHECK: # %bb.0:632; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu633; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t634; CHECK-NEXT: vmv1r.v v8, v9635; CHECK-NEXT: ret636 %elt.head = insertelement <2 x float> poison, float %b, i32 0637 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer638 %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %vb, <2 x float> %va, <2 x float> %c, <2 x i1> splat (i1 -1), i32 %evl)639 %u = call <2 x float> @llvm.vp.select.v2f32(<2 x i1> %m, <2 x float> %v, <2 x float> %c, i32 %evl)640 ret <2 x float> %u641}642 643define <4 x float> @vfmacc_vv_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {644; CHECK-LABEL: vfmacc_vv_v4f32:645; CHECK: # %bb.0:646; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu647; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t648; CHECK-NEXT: vmv1r.v v8, v10649; CHECK-NEXT: ret650 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)651 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)652 ret <4 x float> %u653}654 655define <4 x float> @vfmacc_vv_v4f32_unmasked(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {656; CHECK-LABEL: vfmacc_vv_v4f32_unmasked:657; CHECK: # %bb.0:658; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma659; CHECK-NEXT: vfmacc.vv v10, v8, v9660; CHECK-NEXT: vmv1r.v v8, v10661; CHECK-NEXT: ret662 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)663 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> splat (i1 -1), <4 x float> %v, <4 x float> %c, i32 %evl)664 ret <4 x float> %u665}666 667define <4 x float> @vfmacc_vf_v4f32(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {668; CHECK-LABEL: vfmacc_vf_v4f32:669; CHECK: # %bb.0:670; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu671; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t672; CHECK-NEXT: vmv1r.v v8, v9673; CHECK-NEXT: ret674 %elt.head = insertelement <4 x float> poison, float %b, i32 0675 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer676 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)677 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)678 ret <4 x float> %u679}680 681define <4 x float> @vfmacc_vf_v4f32_commute(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {682; CHECK-LABEL: vfmacc_vf_v4f32_commute:683; CHECK: # %bb.0:684; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu685; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t686; CHECK-NEXT: vmv1r.v v8, v9687; CHECK-NEXT: ret688 %elt.head = insertelement <4 x float> poison, float %b, i32 0689 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer690 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %va, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)691 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)692 ret <4 x float> %u693}694 695define <4 x float> @vfmacc_vf_v4f32_unmasked(<4 x float> %va, float %b, <4 x float> %c, i32 zeroext %evl) {696; CHECK-LABEL: vfmacc_vf_v4f32_unmasked:697; CHECK: # %bb.0:698; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma699; CHECK-NEXT: vfmacc.vf v9, fa0, v8700; CHECK-NEXT: vmv1r.v v8, v9701; CHECK-NEXT: ret702 %elt.head = insertelement <4 x float> poison, float %b, i32 0703 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer704 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)705 %u = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> splat (i1 -1), <4 x float> %v, <4 x float> %c, i32 %evl)706 ret <4 x float> %u707}708 709define <4 x float> @vfmacc_vv_v4f32_ta(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {710; CHECK-LABEL: vfmacc_vv_v4f32_ta:711; CHECK: # %bb.0:712; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu713; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t714; CHECK-NEXT: vmv.v.v v8, v10715; CHECK-NEXT: ret716 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)717 %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)718 ret <4 x float> %u719}720 721define <4 x float> @vfmacc_vf_v4f32_ta(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {722; CHECK-LABEL: vfmacc_vf_v4f32_ta:723; CHECK: # %bb.0:724; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu725; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t726; CHECK-NEXT: vmv.v.v v8, v9727; CHECK-NEXT: ret728 %elt.head = insertelement <4 x float> poison, float %b, i32 0729 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer730 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)731 %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)732 ret <4 x float> %u733}734 735define <4 x float> @vfmacc_vf_v4f32_commute_ta(<4 x float> %va, float %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {736; CHECK-LABEL: vfmacc_vf_v4f32_commute_ta:737; CHECK: # %bb.0:738; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu739; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t740; CHECK-NEXT: vmv.v.v v8, v9741; CHECK-NEXT: ret742 %elt.head = insertelement <4 x float> poison, float %b, i32 0743 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer744 %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %vb, <4 x float> %va, <4 x float> %c, <4 x i1> splat (i1 -1), i32 %evl)745 %u = call <4 x float> @llvm.vp.select.v4f32(<4 x i1> %m, <4 x float> %v, <4 x float> %c, i32 %evl)746 ret <4 x float> %u747}748 749define <8 x float> @vfmacc_vv_v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {750; CHECK-LABEL: vfmacc_vv_v8f32:751; CHECK: # %bb.0:752; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu753; CHECK-NEXT: vfmacc.vv v12, v8, v10, v0.t754; CHECK-NEXT: vmv2r.v v8, v12755; CHECK-NEXT: ret756 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)757 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)758 ret <8 x float> %u759}760 761define <8 x float> @vfmacc_vv_v8f32_unmasked(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {762; CHECK-LABEL: vfmacc_vv_v8f32_unmasked:763; CHECK: # %bb.0:764; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma765; CHECK-NEXT: vfmacc.vv v12, v8, v10766; CHECK-NEXT: vmv2r.v v8, v12767; CHECK-NEXT: ret768 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)769 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> splat (i1 -1), <8 x float> %v, <8 x float> %c, i32 %evl)770 ret <8 x float> %u771}772 773define <8 x float> @vfmacc_vf_v8f32(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {774; CHECK-LABEL: vfmacc_vf_v8f32:775; CHECK: # %bb.0:776; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu777; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t778; CHECK-NEXT: vmv2r.v v8, v10779; CHECK-NEXT: ret780 %elt.head = insertelement <8 x float> poison, float %b, i32 0781 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer782 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)783 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)784 ret <8 x float> %u785}786 787define <8 x float> @vfmacc_vf_v8f32_commute(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {788; CHECK-LABEL: vfmacc_vf_v8f32_commute:789; CHECK: # %bb.0:790; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu791; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t792; CHECK-NEXT: vmv2r.v v8, v10793; CHECK-NEXT: ret794 %elt.head = insertelement <8 x float> poison, float %b, i32 0795 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer796 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %va, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)797 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)798 ret <8 x float> %u799}800 801define <8 x float> @vfmacc_vf_v8f32_unmasked(<8 x float> %va, float %b, <8 x float> %c, i32 zeroext %evl) {802; CHECK-LABEL: vfmacc_vf_v8f32_unmasked:803; CHECK: # %bb.0:804; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma805; CHECK-NEXT: vfmacc.vf v10, fa0, v8806; CHECK-NEXT: vmv2r.v v8, v10807; CHECK-NEXT: ret808 %elt.head = insertelement <8 x float> poison, float %b, i32 0809 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer810 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)811 %u = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> splat (i1 -1), <8 x float> %v, <8 x float> %c, i32 %evl)812 ret <8 x float> %u813}814 815define <8 x float> @vfmacc_vv_v8f32_ta(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {816; CHECK-LABEL: vfmacc_vv_v8f32_ta:817; CHECK: # %bb.0:818; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu819; CHECK-NEXT: vfmacc.vv v12, v8, v10, v0.t820; CHECK-NEXT: vmv.v.v v8, v12821; CHECK-NEXT: ret822 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)823 %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)824 ret <8 x float> %u825}826 827define <8 x float> @vfmacc_vf_v8f32_ta(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {828; CHECK-LABEL: vfmacc_vf_v8f32_ta:829; CHECK: # %bb.0:830; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu831; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t832; CHECK-NEXT: vmv.v.v v8, v10833; CHECK-NEXT: ret834 %elt.head = insertelement <8 x float> poison, float %b, i32 0835 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer836 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)837 %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)838 ret <8 x float> %u839}840 841define <8 x float> @vfmacc_vf_v8f32_commute_ta(<8 x float> %va, float %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {842; CHECK-LABEL: vfmacc_vf_v8f32_commute_ta:843; CHECK: # %bb.0:844; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu845; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t846; CHECK-NEXT: vmv.v.v v8, v10847; CHECK-NEXT: ret848 %elt.head = insertelement <8 x float> poison, float %b, i32 0849 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer850 %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %vb, <8 x float> %va, <8 x float> %c, <8 x i1> splat (i1 -1), i32 %evl)851 %u = call <8 x float> @llvm.vp.select.v8f32(<8 x i1> %m, <8 x float> %v, <8 x float> %c, i32 %evl)852 ret <8 x float> %u853}854 855define <16 x float> @vfmacc_vv_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {856; CHECK-LABEL: vfmacc_vv_v16f32:857; CHECK: # %bb.0:858; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu859; CHECK-NEXT: vfmacc.vv v16, v8, v12, v0.t860; CHECK-NEXT: vmv4r.v v8, v16861; CHECK-NEXT: ret862 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)863 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)864 ret <16 x float> %u865}866 867define <16 x float> @vfmacc_vv_v16f32_unmasked(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {868; CHECK-LABEL: vfmacc_vv_v16f32_unmasked:869; CHECK: # %bb.0:870; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma871; CHECK-NEXT: vfmacc.vv v16, v8, v12872; CHECK-NEXT: vmv4r.v v8, v16873; CHECK-NEXT: ret874 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)875 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> splat (i1 -1), <16 x float> %v, <16 x float> %c, i32 %evl)876 ret <16 x float> %u877}878 879define <16 x float> @vfmacc_vf_v16f32(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {880; CHECK-LABEL: vfmacc_vf_v16f32:881; CHECK: # %bb.0:882; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu883; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t884; CHECK-NEXT: vmv4r.v v8, v12885; CHECK-NEXT: ret886 %elt.head = insertelement <16 x float> poison, float %b, i32 0887 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer888 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)889 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)890 ret <16 x float> %u891}892 893define <16 x float> @vfmacc_vf_v16f32_commute(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {894; CHECK-LABEL: vfmacc_vf_v16f32_commute:895; CHECK: # %bb.0:896; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu897; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t898; CHECK-NEXT: vmv4r.v v8, v12899; CHECK-NEXT: ret900 %elt.head = insertelement <16 x float> poison, float %b, i32 0901 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer902 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %va, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)903 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)904 ret <16 x float> %u905}906 907define <16 x float> @vfmacc_vf_v16f32_unmasked(<16 x float> %va, float %b, <16 x float> %c, i32 zeroext %evl) {908; CHECK-LABEL: vfmacc_vf_v16f32_unmasked:909; CHECK: # %bb.0:910; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma911; CHECK-NEXT: vfmacc.vf v12, fa0, v8912; CHECK-NEXT: vmv4r.v v8, v12913; CHECK-NEXT: ret914 %elt.head = insertelement <16 x float> poison, float %b, i32 0915 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer916 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)917 %u = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> splat (i1 -1), <16 x float> %v, <16 x float> %c, i32 %evl)918 ret <16 x float> %u919}920 921define <16 x float> @vfmacc_vv_v16f32_ta(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {922; CHECK-LABEL: vfmacc_vv_v16f32_ta:923; CHECK: # %bb.0:924; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu925; CHECK-NEXT: vfmacc.vv v16, v8, v12, v0.t926; CHECK-NEXT: vmv.v.v v8, v16927; CHECK-NEXT: ret928 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)929 %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)930 ret <16 x float> %u931}932 933define <16 x float> @vfmacc_vf_v16f32_ta(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {934; CHECK-LABEL: vfmacc_vf_v16f32_ta:935; CHECK: # %bb.0:936; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu937; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t938; CHECK-NEXT: vmv.v.v v8, v12939; CHECK-NEXT: ret940 %elt.head = insertelement <16 x float> poison, float %b, i32 0941 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer942 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)943 %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)944 ret <16 x float> %u945}946 947define <16 x float> @vfmacc_vf_v16f32_commute_ta(<16 x float> %va, float %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {948; CHECK-LABEL: vfmacc_vf_v16f32_commute_ta:949; CHECK: # %bb.0:950; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu951; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t952; CHECK-NEXT: vmv.v.v v8, v12953; CHECK-NEXT: ret954 %elt.head = insertelement <16 x float> poison, float %b, i32 0955 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer956 %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %vb, <16 x float> %va, <16 x float> %c, <16 x i1> splat (i1 -1), i32 %evl)957 %u = call <16 x float> @llvm.vp.select.v16f32(<16 x i1> %m, <16 x float> %v, <16 x float> %c, i32 %evl)958 ret <16 x float> %u959}960 961define <2 x double> @vfmacc_vv_v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {962; CHECK-LABEL: vfmacc_vv_v2f64:963; CHECK: # %bb.0:964; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu965; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t966; CHECK-NEXT: vmv1r.v v8, v10967; CHECK-NEXT: ret968 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)969 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)970 ret <2 x double> %u971}972 973define <2 x double> @vfmacc_vv_v2f64_unmasked(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {974; CHECK-LABEL: vfmacc_vv_v2f64_unmasked:975; CHECK: # %bb.0:976; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma977; CHECK-NEXT: vfmacc.vv v10, v8, v9978; CHECK-NEXT: vmv1r.v v8, v10979; CHECK-NEXT: ret980 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)981 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> splat (i1 -1), <2 x double> %v, <2 x double> %c, i32 %evl)982 ret <2 x double> %u983}984 985define <2 x double> @vfmacc_vf_v2f64(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {986; CHECK-LABEL: vfmacc_vf_v2f64:987; CHECK: # %bb.0:988; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu989; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t990; CHECK-NEXT: vmv1r.v v8, v9991; CHECK-NEXT: ret992 %elt.head = insertelement <2 x double> poison, double %b, i32 0993 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer994 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)995 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)996 ret <2 x double> %u997}998 999define <2 x double> @vfmacc_vf_v2f64_commute(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1000; CHECK-LABEL: vfmacc_vf_v2f64_commute:1001; CHECK: # %bb.0:1002; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu1003; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t1004; CHECK-NEXT: vmv1r.v v8, v91005; CHECK-NEXT: ret1006 %elt.head = insertelement <2 x double> poison, double %b, i32 01007 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1008 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %va, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1009 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1010 ret <2 x double> %u1011}1012 1013define <2 x double> @vfmacc_vf_v2f64_unmasked(<2 x double> %va, double %b, <2 x double> %c, i32 zeroext %evl) {1014; CHECK-LABEL: vfmacc_vf_v2f64_unmasked:1015; CHECK: # %bb.0:1016; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1017; CHECK-NEXT: vfmacc.vf v9, fa0, v81018; CHECK-NEXT: vmv1r.v v8, v91019; CHECK-NEXT: ret1020 %elt.head = insertelement <2 x double> poison, double %b, i32 01021 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1022 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1023 %u = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> splat (i1 -1), <2 x double> %v, <2 x double> %c, i32 %evl)1024 ret <2 x double> %u1025}1026 1027define <2 x double> @vfmacc_vv_v2f64_ta(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1028; CHECK-LABEL: vfmacc_vv_v2f64_ta:1029; CHECK: # %bb.0:1030; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1031; CHECK-NEXT: vfmacc.vv v10, v8, v9, v0.t1032; CHECK-NEXT: vmv.v.v v8, v101033; CHECK-NEXT: ret1034 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1035 %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1036 ret <2 x double> %u1037}1038 1039define <2 x double> @vfmacc_vf_v2f64_ta(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1040; CHECK-LABEL: vfmacc_vf_v2f64_ta:1041; CHECK: # %bb.0:1042; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1043; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t1044; CHECK-NEXT: vmv.v.v v8, v91045; CHECK-NEXT: ret1046 %elt.head = insertelement <2 x double> poison, double %b, i32 01047 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1048 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1049 %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1050 ret <2 x double> %u1051}1052 1053define <2 x double> @vfmacc_vf_v2f64_commute_ta(<2 x double> %va, double %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {1054; CHECK-LABEL: vfmacc_vf_v2f64_commute_ta:1055; CHECK: # %bb.0:1056; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu1057; CHECK-NEXT: vfmacc.vf v9, fa0, v8, v0.t1058; CHECK-NEXT: vmv.v.v v8, v91059; CHECK-NEXT: ret1060 %elt.head = insertelement <2 x double> poison, double %b, i32 01061 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1062 %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %vb, <2 x double> %va, <2 x double> %c, <2 x i1> splat (i1 -1), i32 %evl)1063 %u = call <2 x double> @llvm.vp.select.v2f64(<2 x i1> %m, <2 x double> %v, <2 x double> %c, i32 %evl)1064 ret <2 x double> %u1065}1066 1067define <4 x double> @vfmacc_vv_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1068; CHECK-LABEL: vfmacc_vv_v4f64:1069; CHECK: # %bb.0:1070; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1071; CHECK-NEXT: vfmacc.vv v12, v8, v10, v0.t1072; CHECK-NEXT: vmv2r.v v8, v121073; CHECK-NEXT: ret1074 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1075 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1076 ret <4 x double> %u1077}1078 1079define <4 x double> @vfmacc_vv_v4f64_unmasked(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1080; CHECK-LABEL: vfmacc_vv_v4f64_unmasked:1081; CHECK: # %bb.0:1082; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1083; CHECK-NEXT: vfmacc.vv v12, v8, v101084; CHECK-NEXT: vmv2r.v v8, v121085; CHECK-NEXT: ret1086 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1087 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> splat (i1 -1), <4 x double> %v, <4 x double> %c, i32 %evl)1088 ret <4 x double> %u1089}1090 1091define <4 x double> @vfmacc_vf_v4f64(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1092; CHECK-LABEL: vfmacc_vf_v4f64:1093; CHECK: # %bb.0:1094; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1095; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t1096; CHECK-NEXT: vmv2r.v v8, v101097; CHECK-NEXT: ret1098 %elt.head = insertelement <4 x double> poison, double %b, i32 01099 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1100 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1101 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1102 ret <4 x double> %u1103}1104 1105define <4 x double> @vfmacc_vf_v4f64_commute(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1106; CHECK-LABEL: vfmacc_vf_v4f64_commute:1107; CHECK: # %bb.0:1108; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu1109; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t1110; CHECK-NEXT: vmv2r.v v8, v101111; CHECK-NEXT: ret1112 %elt.head = insertelement <4 x double> poison, double %b, i32 01113 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1114 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %va, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1115 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1116 ret <4 x double> %u1117}1118 1119define <4 x double> @vfmacc_vf_v4f64_unmasked(<4 x double> %va, double %b, <4 x double> %c, i32 zeroext %evl) {1120; CHECK-LABEL: vfmacc_vf_v4f64_unmasked:1121; CHECK: # %bb.0:1122; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1123; CHECK-NEXT: vfmacc.vf v10, fa0, v81124; CHECK-NEXT: vmv2r.v v8, v101125; CHECK-NEXT: ret1126 %elt.head = insertelement <4 x double> poison, double %b, i32 01127 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1128 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1129 %u = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> splat (i1 -1), <4 x double> %v, <4 x double> %c, i32 %evl)1130 ret <4 x double> %u1131}1132 1133define <4 x double> @vfmacc_vv_v4f64_ta(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1134; CHECK-LABEL: vfmacc_vv_v4f64_ta:1135; CHECK: # %bb.0:1136; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1137; CHECK-NEXT: vfmacc.vv v12, v8, v10, v0.t1138; CHECK-NEXT: vmv.v.v v8, v121139; CHECK-NEXT: ret1140 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1141 %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1142 ret <4 x double> %u1143}1144 1145define <4 x double> @vfmacc_vf_v4f64_ta(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1146; CHECK-LABEL: vfmacc_vf_v4f64_ta:1147; CHECK: # %bb.0:1148; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1149; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t1150; CHECK-NEXT: vmv.v.v v8, v101151; CHECK-NEXT: ret1152 %elt.head = insertelement <4 x double> poison, double %b, i32 01153 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1154 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1155 %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1156 ret <4 x double> %u1157}1158 1159define <4 x double> @vfmacc_vf_v4f64_commute_ta(<4 x double> %va, double %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {1160; CHECK-LABEL: vfmacc_vf_v4f64_commute_ta:1161; CHECK: # %bb.0:1162; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu1163; CHECK-NEXT: vfmacc.vf v10, fa0, v8, v0.t1164; CHECK-NEXT: vmv.v.v v8, v101165; CHECK-NEXT: ret1166 %elt.head = insertelement <4 x double> poison, double %b, i32 01167 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1168 %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %vb, <4 x double> %va, <4 x double> %c, <4 x i1> splat (i1 -1), i32 %evl)1169 %u = call <4 x double> @llvm.vp.select.v4f64(<4 x i1> %m, <4 x double> %v, <4 x double> %c, i32 %evl)1170 ret <4 x double> %u1171}1172 1173define <8 x double> @vfmacc_vv_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1174; CHECK-LABEL: vfmacc_vv_v8f64:1175; CHECK: # %bb.0:1176; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1177; CHECK-NEXT: vfmacc.vv v16, v8, v12, v0.t1178; CHECK-NEXT: vmv4r.v v8, v161179; CHECK-NEXT: ret1180 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1181 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1182 ret <8 x double> %u1183}1184 1185define <8 x double> @vfmacc_vv_v8f64_unmasked(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1186; CHECK-LABEL: vfmacc_vv_v8f64_unmasked:1187; CHECK: # %bb.0:1188; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1189; CHECK-NEXT: vfmacc.vv v16, v8, v121190; CHECK-NEXT: vmv4r.v v8, v161191; CHECK-NEXT: ret1192 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1193 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> splat (i1 -1), <8 x double> %v, <8 x double> %c, i32 %evl)1194 ret <8 x double> %u1195}1196 1197define <8 x double> @vfmacc_vf_v8f64(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1198; CHECK-LABEL: vfmacc_vf_v8f64:1199; CHECK: # %bb.0:1200; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1201; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t1202; CHECK-NEXT: vmv4r.v v8, v121203; CHECK-NEXT: ret1204 %elt.head = insertelement <8 x double> poison, double %b, i32 01205 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1206 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1207 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1208 ret <8 x double> %u1209}1210 1211define <8 x double> @vfmacc_vf_v8f64_commute(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1212; CHECK-LABEL: vfmacc_vf_v8f64_commute:1213; CHECK: # %bb.0:1214; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu1215; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t1216; CHECK-NEXT: vmv4r.v v8, v121217; CHECK-NEXT: ret1218 %elt.head = insertelement <8 x double> poison, double %b, i32 01219 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1220 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %va, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1221 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1222 ret <8 x double> %u1223}1224 1225define <8 x double> @vfmacc_vf_v8f64_unmasked(<8 x double> %va, double %b, <8 x double> %c, i32 zeroext %evl) {1226; CHECK-LABEL: vfmacc_vf_v8f64_unmasked:1227; CHECK: # %bb.0:1228; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1229; CHECK-NEXT: vfmacc.vf v12, fa0, v81230; CHECK-NEXT: vmv4r.v v8, v121231; CHECK-NEXT: ret1232 %elt.head = insertelement <8 x double> poison, double %b, i32 01233 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1234 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1235 %u = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> splat (i1 -1), <8 x double> %v, <8 x double> %c, i32 %evl)1236 ret <8 x double> %u1237}1238 1239define <8 x double> @vfmacc_vv_v8f64_ta(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1240; CHECK-LABEL: vfmacc_vv_v8f64_ta:1241; CHECK: # %bb.0:1242; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1243; CHECK-NEXT: vfmacc.vv v16, v8, v12, v0.t1244; CHECK-NEXT: vmv.v.v v8, v161245; CHECK-NEXT: ret1246 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1247 %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1248 ret <8 x double> %u1249}1250 1251define <8 x double> @vfmacc_vf_v8f64_ta(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1252; CHECK-LABEL: vfmacc_vf_v8f64_ta:1253; CHECK: # %bb.0:1254; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1255; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t1256; CHECK-NEXT: vmv.v.v v8, v121257; CHECK-NEXT: ret1258 %elt.head = insertelement <8 x double> poison, double %b, i32 01259 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1260 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1261 %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1262 ret <8 x double> %u1263}1264 1265define <8 x double> @vfmacc_vf_v8f64_commute_ta(<8 x double> %va, double %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {1266; CHECK-LABEL: vfmacc_vf_v8f64_commute_ta:1267; CHECK: # %bb.0:1268; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu1269; CHECK-NEXT: vfmacc.vf v12, fa0, v8, v0.t1270; CHECK-NEXT: vmv.v.v v8, v121271; CHECK-NEXT: ret1272 %elt.head = insertelement <8 x double> poison, double %b, i32 01273 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1274 %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %vb, <8 x double> %va, <8 x double> %c, <8 x i1> splat (i1 -1), i32 %evl)1275 %u = call <8 x double> @llvm.vp.select.v8f64(<8 x i1> %m, <8 x double> %v, <8 x double> %c, i32 %evl)1276 ret <8 x double> %u1277}1278