brintos

brintos / llvm-project-archived public Read only

0
0
Text · 41.2 KiB · f28b970 Raw
963 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfh,+v -target-abi=ilp32d \3; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfh,+v -target-abi=lp64d \5; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \7; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfhmin,+v -target-abi=lp64d \9; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN10 11define <2 x half> @vfma_vv_v2f16(<2 x half> %va, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 zeroext %evl) {12; ZVFH-LABEL: vfma_vv_v2f16:13; ZVFH:       # %bb.0:14; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma15; ZVFH-NEXT:    vfmadd.vv v9, v8, v10, v0.t16; ZVFH-NEXT:    vmv1r.v v8, v917; ZVFH-NEXT:    ret18;19; ZVFHMIN-LABEL: vfma_vv_v2f16:20; ZVFHMIN:       # %bb.0:21; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma22; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t23; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t24; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t25; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma26; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11, v0.t27; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma28; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t29; ZVFHMIN-NEXT:    ret30  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %b, <2 x half> %c, <2 x i1> %m, i32 %evl)31  ret <2 x half> %v32}33 34define <2 x half> @vfma_vv_v2f16_unmasked(<2 x half> %va, <2 x half> %b, <2 x half> %c, i32 zeroext %evl) {35; ZVFH-LABEL: vfma_vv_v2f16_unmasked:36; ZVFH:       # %bb.0:37; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma38; ZVFH-NEXT:    vfmadd.vv v8, v9, v1039; ZVFH-NEXT:    ret40;41; ZVFHMIN-LABEL: vfma_vv_v2f16_unmasked:42; ZVFHMIN:       # %bb.0:43; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma44; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v1045; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v846; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v947; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma48; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v1149; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma50; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v1251; ZVFHMIN-NEXT:    ret52  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %b, <2 x half> %c, <2 x i1> splat (i1 true), i32 %evl)53  ret <2 x half> %v54}55 56define <2 x half> @vfma_vf_v2f16(<2 x half> %va, half %b, <2 x half> %vc, <2 x i1> %m, i32 zeroext %evl) {57; ZVFH-LABEL: vfma_vf_v2f16:58; ZVFH:       # %bb.0:59; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma60; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t61; ZVFH-NEXT:    ret62;63; ZVFHMIN-LABEL: vfma_vf_v2f16:64; ZVFHMIN:       # %bb.0:65; ZVFHMIN-NEXT:    fmv.x.h a1, fa066; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma67; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t68; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma69; ZVFHMIN-NEXT:    vmv.v.x v9, a170; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma71; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t72; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t73; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma74; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10, v0.t75; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma76; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t77; ZVFHMIN-NEXT:    ret78  %elt.head = insertelement <2 x half> poison, half %b, i32 079  %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer80  %v = call <2 x half> @llvm.vp.fma.v2f16(<2 x half> %va, <2 x half> %vb, <2 x half> %vc, <2 x i1> %m, i32 %evl)81  ret <2 x half> %v82}83 84define <2 x half> @vfma_vf_v2f16_unmasked(<2 x half> %va, half %b, <2 x half> %vc, i32 zeroext %evl) {85; ZVFH-LABEL: vfma_vf_v2f16_unmasked:86; ZVFH:       # %bb.0:87; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma88; ZVFH-NEXT:    vfmadd.vf v8, fa0, v989; ZVFH-NEXT:    ret90;91; ZVFHMIN-LABEL: vfma_vf_v2f16_unmasked:92; ZVFHMIN:       # %bb.0:93; ZVFHMIN-NEXT:    fmv.x.h a1, fa094; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma95; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v996; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma97; ZVFHMIN-NEXT:    vmv.v.x v9, a198; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma99; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8100; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9101; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma102; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10103; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma104; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12105; ZVFHMIN-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> %va, <2 x half> %vb, <2 x half> %vc, <2 x i1> splat (i1 true), i32 %evl)109  ret <2 x half> %v110}111 112define <4 x half> @vfma_vv_v4f16(<4 x half> %va, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 zeroext %evl) {113; ZVFH-LABEL: vfma_vv_v4f16:114; ZVFH:       # %bb.0:115; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma116; ZVFH-NEXT:    vfmadd.vv v9, v8, v10, v0.t117; ZVFH-NEXT:    vmv1r.v v8, v9118; ZVFH-NEXT:    ret119;120; ZVFHMIN-LABEL: vfma_vv_v4f16:121; ZVFHMIN:       # %bb.0:122; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma123; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10, v0.t124; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t125; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t126; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma127; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11, v0.t128; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma129; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t130; ZVFHMIN-NEXT:    ret131  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %b, <4 x half> %c, <4 x i1> %m, i32 %evl)132  ret <4 x half> %v133}134 135define <4 x half> @vfma_vv_v4f16_unmasked(<4 x half> %va, <4 x half> %b, <4 x half> %c, i32 zeroext %evl) {136; ZVFH-LABEL: vfma_vv_v4f16_unmasked:137; ZVFH:       # %bb.0:138; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma139; ZVFH-NEXT:    vfmadd.vv v8, v9, v10140; ZVFH-NEXT:    ret141;142; ZVFHMIN-LABEL: vfma_vv_v4f16_unmasked:143; ZVFHMIN:       # %bb.0:144; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma145; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10146; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8147; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9148; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma149; ZVFHMIN-NEXT:    vfmadd.vv v12, v10, v11150; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma151; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12152; ZVFHMIN-NEXT:    ret153  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %b, <4 x half> %c, <4 x i1> splat (i1 true), i32 %evl)154  ret <4 x half> %v155}156 157define <4 x half> @vfma_vf_v4f16(<4 x half> %va, half %b, <4 x half> %vc, <4 x i1> %m, i32 zeroext %evl) {158; ZVFH-LABEL: vfma_vf_v4f16:159; ZVFH:       # %bb.0:160; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma161; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t162; ZVFH-NEXT:    ret163;164; ZVFHMIN-LABEL: vfma_vf_v4f16:165; ZVFHMIN:       # %bb.0:166; ZVFHMIN-NEXT:    fmv.x.h a1, fa0167; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma168; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t169; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma170; ZVFHMIN-NEXT:    vmv.v.x v9, a1171; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma172; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8, v0.t173; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9, v0.t174; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma175; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10, v0.t176; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma177; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12, v0.t178; ZVFHMIN-NEXT:    ret179  %elt.head = insertelement <4 x half> poison, half %b, i32 0180  %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer181  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %vc, <4 x i1> %m, i32 %evl)182  ret <4 x half> %v183}184 185define <4 x half> @vfma_vf_v4f16_unmasked(<4 x half> %va, half %b, <4 x half> %vc, i32 zeroext %evl) {186; ZVFH-LABEL: vfma_vf_v4f16_unmasked:187; ZVFH:       # %bb.0:188; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma189; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9190; ZVFH-NEXT:    ret191;192; ZVFHMIN-LABEL: vfma_vf_v4f16_unmasked:193; ZVFHMIN:       # %bb.0:194; ZVFHMIN-NEXT:    fmv.x.h a1, fa0195; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma196; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9197; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma198; ZVFHMIN-NEXT:    vmv.v.x v9, a1199; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma200; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8201; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9202; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma203; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10204; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma205; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12206; ZVFHMIN-NEXT:    ret207  %elt.head = insertelement <4 x half> poison, half %b, i32 0208  %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer209  %v = call <4 x half> @llvm.vp.fma.v4f16(<4 x half> %va, <4 x half> %vb, <4 x half> %vc, <4 x i1> splat (i1 true), i32 %evl)210  ret <4 x half> %v211}212 213define <8 x half> @vfma_vv_v8f16(<8 x half> %va, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 zeroext %evl) {214; ZVFH-LABEL: vfma_vv_v8f16:215; ZVFH:       # %bb.0:216; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma217; ZVFH-NEXT:    vfmadd.vv v9, v8, v10, v0.t218; ZVFH-NEXT:    vmv.v.v v8, v9219; ZVFH-NEXT:    ret220;221; ZVFHMIN-LABEL: vfma_vv_v8f16:222; ZVFHMIN:       # %bb.0:223; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma224; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t225; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8, v0.t226; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t227; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma228; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12, v0.t229; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma230; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t231; ZVFHMIN-NEXT:    ret232  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %b, <8 x half> %c, <8 x i1> %m, i32 %evl)233  ret <8 x half> %v234}235 236define <8 x half> @vfma_vv_v8f16_unmasked(<8 x half> %va, <8 x half> %b, <8 x half> %c, i32 zeroext %evl) {237; ZVFH-LABEL: vfma_vv_v8f16_unmasked:238; ZVFH:       # %bb.0:239; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma240; ZVFH-NEXT:    vfmadd.vv v8, v9, v10241; ZVFH-NEXT:    ret242;243; ZVFHMIN-LABEL: vfma_vv_v8f16_unmasked:244; ZVFHMIN:       # %bb.0:245; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma246; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10247; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8248; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9249; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma250; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12251; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma252; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14253; ZVFHMIN-NEXT:    ret254  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %b, <8 x half> %c, <8 x i1> splat (i1 true), i32 %evl)255  ret <8 x half> %v256}257 258define <8 x half> @vfma_vf_v8f16(<8 x half> %va, half %b, <8 x half> %vc, <8 x i1> %m, i32 zeroext %evl) {259; ZVFH-LABEL: vfma_vf_v8f16:260; ZVFH:       # %bb.0:261; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma262; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9, v0.t263; ZVFH-NEXT:    ret264;265; ZVFHMIN-LABEL: vfma_vf_v8f16:266; ZVFHMIN:       # %bb.0:267; ZVFHMIN-NEXT:    fmv.x.h a1, fa0268; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma269; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9, v0.t270; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma271; ZVFHMIN-NEXT:    vmv.v.x v9, a1272; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma273; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t274; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9, v0.t275; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma276; ZVFHMIN-NEXT:    vfmadd.vv v14, v12, v10, v0.t277; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma278; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14, v0.t279; ZVFHMIN-NEXT:    ret280  %elt.head = insertelement <8 x half> poison, half %b, i32 0281  %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer282  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %vc, <8 x i1> %m, i32 %evl)283  ret <8 x half> %v284}285 286define <8 x half> @vfma_vf_v8f16_unmasked(<8 x half> %va, half %b, <8 x half> %vc, i32 zeroext %evl) {287; ZVFH-LABEL: vfma_vf_v8f16_unmasked:288; ZVFH:       # %bb.0:289; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma290; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9291; ZVFH-NEXT:    ret292;293; ZVFHMIN-LABEL: vfma_vf_v8f16_unmasked:294; ZVFHMIN:       # %bb.0:295; ZVFHMIN-NEXT:    fmv.x.h a1, fa0296; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma297; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9298; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma299; ZVFHMIN-NEXT:    vmv.v.x v9, a1300; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, ta, ma301; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8302; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9303; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma304; ZVFHMIN-NEXT:    vfmadd.vv v14, v12, v10305; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma306; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14307; ZVFHMIN-NEXT:    ret308  %elt.head = insertelement <8 x half> poison, half %b, i32 0309  %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer310  %v = call <8 x half> @llvm.vp.fma.v8f16(<8 x half> %va, <8 x half> %vb, <8 x half> %vc, <8 x i1> splat (i1 true), i32 %evl)311  ret <8 x half> %v312}313 314define <16 x half> @vfma_vv_v16f16(<16 x half> %va, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 zeroext %evl) {315; ZVFH-LABEL: vfma_vv_v16f16:316; ZVFH:       # %bb.0:317; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma318; ZVFH-NEXT:    vfmadd.vv v10, v8, v12, v0.t319; ZVFH-NEXT:    vmv.v.v v8, v10320; ZVFH-NEXT:    ret321;322; ZVFHMIN-LABEL: vfma_vv_v16f16:323; ZVFHMIN:       # %bb.0:324; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma325; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12, v0.t326; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8, v0.t327; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t328; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma329; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16, v0.t330; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma331; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t332; ZVFHMIN-NEXT:    ret333  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %b, <16 x half> %c, <16 x i1> %m, i32 %evl)334  ret <16 x half> %v335}336 337define <16 x half> @vfma_vv_v16f16_unmasked(<16 x half> %va, <16 x half> %b, <16 x half> %c, i32 zeroext %evl) {338; ZVFH-LABEL: vfma_vv_v16f16_unmasked:339; ZVFH:       # %bb.0:340; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma341; ZVFH-NEXT:    vfmadd.vv v8, v10, v12342; ZVFH-NEXT:    ret343;344; ZVFHMIN-LABEL: vfma_vv_v16f16_unmasked:345; ZVFHMIN:       # %bb.0:346; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma347; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12348; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8349; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10350; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma351; ZVFHMIN-NEXT:    vfmadd.vv v20, v12, v16352; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma353; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20354; ZVFHMIN-NEXT:    ret355  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %b, <16 x half> %c, <16 x i1> splat (i1 true), i32 %evl)356  ret <16 x half> %v357}358 359define <16 x half> @vfma_vf_v16f16(<16 x half> %va, half %b, <16 x half> %vc, <16 x i1> %m, i32 zeroext %evl) {360; ZVFH-LABEL: vfma_vf_v16f16:361; ZVFH:       # %bb.0:362; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma363; ZVFH-NEXT:    vfmadd.vf v8, fa0, v10, v0.t364; ZVFH-NEXT:    ret365;366; ZVFHMIN-LABEL: vfma_vf_v16f16:367; ZVFHMIN:       # %bb.0:368; ZVFHMIN-NEXT:    fmv.x.h a1, fa0369; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma370; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10, v0.t371; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma372; ZVFHMIN-NEXT:    vmv.v.x v10, a1373; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma374; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8, v0.t375; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10, v0.t376; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma377; ZVFHMIN-NEXT:    vfmadd.vv v20, v16, v12, v0.t378; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma379; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20, v0.t380; ZVFHMIN-NEXT:    ret381  %elt.head = insertelement <16 x half> poison, half %b, i32 0382  %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer383  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %vc, <16 x i1> %m, i32 %evl)384  ret <16 x half> %v385}386 387define <16 x half> @vfma_vf_v16f16_unmasked(<16 x half> %va, half %b, <16 x half> %vc, i32 zeroext %evl) {388; ZVFH-LABEL: vfma_vf_v16f16_unmasked:389; ZVFH:       # %bb.0:390; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, ta, ma391; ZVFH-NEXT:    vfmadd.vf v8, fa0, v10392; ZVFH-NEXT:    ret393;394; ZVFHMIN-LABEL: vfma_vf_v16f16_unmasked:395; ZVFHMIN:       # %bb.0:396; ZVFHMIN-NEXT:    fmv.x.h a1, fa0397; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma398; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10399; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma400; ZVFHMIN-NEXT:    vmv.v.x v10, a1401; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, ta, ma402; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8403; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v10404; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma405; ZVFHMIN-NEXT:    vfmadd.vv v20, v16, v12406; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma407; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20408; ZVFHMIN-NEXT:    ret409  %elt.head = insertelement <16 x half> poison, half %b, i32 0410  %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer411  %v = call <16 x half> @llvm.vp.fma.v16f16(<16 x half> %va, <16 x half> %vb, <16 x half> %vc, <16 x i1> splat (i1 true), i32 %evl)412  ret <16 x half> %v413}414 415define <2 x float> @vfma_vv_v2f32(<2 x float> %va, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 zeroext %evl) {416; CHECK-LABEL: vfma_vv_v2f32:417; CHECK:       # %bb.0:418; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma419; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t420; CHECK-NEXT:    vmv1r.v v8, v9421; CHECK-NEXT:    ret422  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %b, <2 x float> %c, <2 x i1> %m, i32 %evl)423  ret <2 x float> %v424}425 426define <2 x float> @vfma_vv_v2f32_unmasked(<2 x float> %va, <2 x float> %b, <2 x float> %c, i32 zeroext %evl) {427; CHECK-LABEL: vfma_vv_v2f32_unmasked:428; CHECK:       # %bb.0:429; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma430; CHECK-NEXT:    vfmadd.vv v8, v9, v10431; CHECK-NEXT:    ret432  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %b, <2 x float> %c, <2 x i1> splat (i1 true), i32 %evl)433  ret <2 x float> %v434}435 436define <2 x float> @vfma_vf_v2f32(<2 x float> %va, float %b, <2 x float> %vc, <2 x i1> %m, i32 zeroext %evl) {437; CHECK-LABEL: vfma_vf_v2f32:438; CHECK:       # %bb.0:439; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma440; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t441; CHECK-NEXT:    ret442  %elt.head = insertelement <2 x float> poison, float %b, i32 0443  %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer444  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %vc, <2 x i1> %m, i32 %evl)445  ret <2 x float> %v446}447 448define <2 x float> @vfma_vf_v2f32_unmasked(<2 x float> %va, float %b, <2 x float> %vc, i32 zeroext %evl) {449; CHECK-LABEL: vfma_vf_v2f32_unmasked:450; CHECK:       # %bb.0:451; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma452; CHECK-NEXT:    vfmadd.vf v8, fa0, v9453; CHECK-NEXT:    ret454  %elt.head = insertelement <2 x float> poison, float %b, i32 0455  %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer456  %v = call <2 x float> @llvm.vp.fma.v2f32(<2 x float> %va, <2 x float> %vb, <2 x float> %vc, <2 x i1> splat (i1 true), i32 %evl)457  ret <2 x float> %v458}459 460define <4 x float> @vfma_vv_v4f32(<4 x float> %va, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 zeroext %evl) {461; CHECK-LABEL: vfma_vv_v4f32:462; CHECK:       # %bb.0:463; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma464; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t465; CHECK-NEXT:    vmv.v.v v8, v9466; CHECK-NEXT:    ret467  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %b, <4 x float> %c, <4 x i1> %m, i32 %evl)468  ret <4 x float> %v469}470 471define <4 x float> @vfma_vv_v4f32_unmasked(<4 x float> %va, <4 x float> %b, <4 x float> %c, i32 zeroext %evl) {472; CHECK-LABEL: vfma_vv_v4f32_unmasked:473; CHECK:       # %bb.0:474; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma475; CHECK-NEXT:    vfmadd.vv v8, v9, v10476; CHECK-NEXT:    ret477  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %b, <4 x float> %c, <4 x i1> splat (i1 true), i32 %evl)478  ret <4 x float> %v479}480 481define <4 x float> @vfma_vf_v4f32(<4 x float> %va, float %b, <4 x float> %vc, <4 x i1> %m, i32 zeroext %evl) {482; CHECK-LABEL: vfma_vf_v4f32:483; CHECK:       # %bb.0:484; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma485; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t486; CHECK-NEXT:    ret487  %elt.head = insertelement <4 x float> poison, float %b, i32 0488  %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer489  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %vc, <4 x i1> %m, i32 %evl)490  ret <4 x float> %v491}492 493define <4 x float> @vfma_vf_v4f32_unmasked(<4 x float> %va, float %b, <4 x float> %vc, i32 zeroext %evl) {494; CHECK-LABEL: vfma_vf_v4f32_unmasked:495; CHECK:       # %bb.0:496; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma497; CHECK-NEXT:    vfmadd.vf v8, fa0, v9498; CHECK-NEXT:    ret499  %elt.head = insertelement <4 x float> poison, float %b, i32 0500  %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer501  %v = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %va, <4 x float> %vb, <4 x float> %vc, <4 x i1> splat (i1 true), i32 %evl)502  ret <4 x float> %v503}504 505define <8 x float> @vfma_vv_v8f32(<8 x float> %va, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 zeroext %evl) {506; CHECK-LABEL: vfma_vv_v8f32:507; CHECK:       # %bb.0:508; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma509; CHECK-NEXT:    vfmadd.vv v10, v8, v12, v0.t510; CHECK-NEXT:    vmv.v.v v8, v10511; CHECK-NEXT:    ret512  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %b, <8 x float> %c, <8 x i1> %m, i32 %evl)513  ret <8 x float> %v514}515 516define <8 x float> @vfma_vv_v8f32_unmasked(<8 x float> %va, <8 x float> %b, <8 x float> %c, i32 zeroext %evl) {517; CHECK-LABEL: vfma_vv_v8f32_unmasked:518; CHECK:       # %bb.0:519; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma520; CHECK-NEXT:    vfmadd.vv v8, v10, v12521; CHECK-NEXT:    ret522  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %b, <8 x float> %c, <8 x i1> splat (i1 true), i32 %evl)523  ret <8 x float> %v524}525 526define <8 x float> @vfma_vf_v8f32(<8 x float> %va, float %b, <8 x float> %vc, <8 x i1> %m, i32 zeroext %evl) {527; CHECK-LABEL: vfma_vf_v8f32:528; CHECK:       # %bb.0:529; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma530; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t531; CHECK-NEXT:    ret532  %elt.head = insertelement <8 x float> poison, float %b, i32 0533  %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer534  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %vc, <8 x i1> %m, i32 %evl)535  ret <8 x float> %v536}537 538define <8 x float> @vfma_vf_v8f32_unmasked(<8 x float> %va, float %b, <8 x float> %vc, i32 zeroext %evl) {539; CHECK-LABEL: vfma_vf_v8f32_unmasked:540; CHECK:       # %bb.0:541; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma542; CHECK-NEXT:    vfmadd.vf v8, fa0, v10543; CHECK-NEXT:    ret544  %elt.head = insertelement <8 x float> poison, float %b, i32 0545  %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer546  %v = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %va, <8 x float> %vb, <8 x float> %vc, <8 x i1> splat (i1 true), i32 %evl)547  ret <8 x float> %v548}549 550define <16 x float> @vfma_vv_v16f32(<16 x float> %va, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 zeroext %evl) {551; CHECK-LABEL: vfma_vv_v16f32:552; CHECK:       # %bb.0:553; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma554; CHECK-NEXT:    vfmadd.vv v12, v8, v16, v0.t555; CHECK-NEXT:    vmv.v.v v8, v12556; CHECK-NEXT:    ret557  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %b, <16 x float> %c, <16 x i1> %m, i32 %evl)558  ret <16 x float> %v559}560 561define <16 x float> @vfma_vv_v16f32_unmasked(<16 x float> %va, <16 x float> %b, <16 x float> %c, i32 zeroext %evl) {562; CHECK-LABEL: vfma_vv_v16f32_unmasked:563; CHECK:       # %bb.0:564; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma565; CHECK-NEXT:    vfmadd.vv v8, v12, v16566; CHECK-NEXT:    ret567  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %b, <16 x float> %c, <16 x i1> splat (i1 true), i32 %evl)568  ret <16 x float> %v569}570 571define <16 x float> @vfma_vf_v16f32(<16 x float> %va, float %b, <16 x float> %vc, <16 x i1> %m, i32 zeroext %evl) {572; CHECK-LABEL: vfma_vf_v16f32:573; CHECK:       # %bb.0:574; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma575; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t576; CHECK-NEXT:    ret577  %elt.head = insertelement <16 x float> poison, float %b, i32 0578  %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer579  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %vc, <16 x i1> %m, i32 %evl)580  ret <16 x float> %v581}582 583define <16 x float> @vfma_vf_v16f32_unmasked(<16 x float> %va, float %b, <16 x float> %vc, i32 zeroext %evl) {584; CHECK-LABEL: vfma_vf_v16f32_unmasked:585; CHECK:       # %bb.0:586; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma587; CHECK-NEXT:    vfmadd.vf v8, fa0, v12588; CHECK-NEXT:    ret589  %elt.head = insertelement <16 x float> poison, float %b, i32 0590  %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer591  %v = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %va, <16 x float> %vb, <16 x float> %vc, <16 x i1> splat (i1 true), i32 %evl)592  ret <16 x float> %v593}594 595define <2 x double> @vfma_vv_v2f64(<2 x double> %va, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 zeroext %evl) {596; CHECK-LABEL: vfma_vv_v2f64:597; CHECK:       # %bb.0:598; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma599; CHECK-NEXT:    vfmadd.vv v9, v8, v10, v0.t600; CHECK-NEXT:    vmv.v.v v8, v9601; CHECK-NEXT:    ret602  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %b, <2 x double> %c, <2 x i1> %m, i32 %evl)603  ret <2 x double> %v604}605 606define <2 x double> @vfma_vv_v2f64_unmasked(<2 x double> %va, <2 x double> %b, <2 x double> %c, i32 zeroext %evl) {607; CHECK-LABEL: vfma_vv_v2f64_unmasked:608; CHECK:       # %bb.0:609; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma610; CHECK-NEXT:    vfmadd.vv v8, v9, v10611; CHECK-NEXT:    ret612  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %b, <2 x double> %c, <2 x i1> splat (i1 true), i32 %evl)613  ret <2 x double> %v614}615 616define <2 x double> @vfma_vf_v2f64(<2 x double> %va, double %b, <2 x double> %vc, <2 x i1> %m, i32 zeroext %evl) {617; CHECK-LABEL: vfma_vf_v2f64:618; CHECK:       # %bb.0:619; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma620; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t621; CHECK-NEXT:    ret622  %elt.head = insertelement <2 x double> poison, double %b, i32 0623  %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer624  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %vc, <2 x i1> %m, i32 %evl)625  ret <2 x double> %v626}627 628define <2 x double> @vfma_vf_v2f64_unmasked(<2 x double> %va, double %b, <2 x double> %vc, i32 zeroext %evl) {629; CHECK-LABEL: vfma_vf_v2f64_unmasked:630; CHECK:       # %bb.0:631; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma632; CHECK-NEXT:    vfmadd.vf v8, fa0, v9633; CHECK-NEXT:    ret634  %elt.head = insertelement <2 x double> poison, double %b, i32 0635  %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer636  %v = call <2 x double> @llvm.vp.fma.v2f64(<2 x double> %va, <2 x double> %vb, <2 x double> %vc, <2 x i1> splat (i1 true), i32 %evl)637  ret <2 x double> %v638}639 640define <4 x double> @vfma_vv_v4f64(<4 x double> %va, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 zeroext %evl) {641; CHECK-LABEL: vfma_vv_v4f64:642; CHECK:       # %bb.0:643; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma644; CHECK-NEXT:    vfmadd.vv v10, v8, v12, v0.t645; CHECK-NEXT:    vmv.v.v v8, v10646; CHECK-NEXT:    ret647  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %b, <4 x double> %c, <4 x i1> %m, i32 %evl)648  ret <4 x double> %v649}650 651define <4 x double> @vfma_vv_v4f64_unmasked(<4 x double> %va, <4 x double> %b, <4 x double> %c, i32 zeroext %evl) {652; CHECK-LABEL: vfma_vv_v4f64_unmasked:653; CHECK:       # %bb.0:654; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma655; CHECK-NEXT:    vfmadd.vv v8, v10, v12656; CHECK-NEXT:    ret657  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %b, <4 x double> %c, <4 x i1> splat (i1 true), i32 %evl)658  ret <4 x double> %v659}660 661define <4 x double> @vfma_vf_v4f64(<4 x double> %va, double %b, <4 x double> %vc, <4 x i1> %m, i32 zeroext %evl) {662; CHECK-LABEL: vfma_vf_v4f64:663; CHECK:       # %bb.0:664; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma665; CHECK-NEXT:    vfmadd.vf v8, fa0, v10, v0.t666; CHECK-NEXT:    ret667  %elt.head = insertelement <4 x double> poison, double %b, i32 0668  %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer669  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %vc, <4 x i1> %m, i32 %evl)670  ret <4 x double> %v671}672 673define <4 x double> @vfma_vf_v4f64_unmasked(<4 x double> %va, double %b, <4 x double> %vc, i32 zeroext %evl) {674; CHECK-LABEL: vfma_vf_v4f64_unmasked:675; CHECK:       # %bb.0:676; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma677; CHECK-NEXT:    vfmadd.vf v8, fa0, v10678; CHECK-NEXT:    ret679  %elt.head = insertelement <4 x double> poison, double %b, i32 0680  %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer681  %v = call <4 x double> @llvm.vp.fma.v4f64(<4 x double> %va, <4 x double> %vb, <4 x double> %vc, <4 x i1> splat (i1 true), i32 %evl)682  ret <4 x double> %v683}684 685define <8 x double> @vfma_vv_v8f64(<8 x double> %va, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 zeroext %evl) {686; CHECK-LABEL: vfma_vv_v8f64:687; CHECK:       # %bb.0:688; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma689; CHECK-NEXT:    vfmadd.vv v12, v8, v16, v0.t690; CHECK-NEXT:    vmv.v.v v8, v12691; CHECK-NEXT:    ret692  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %b, <8 x double> %c, <8 x i1> %m, i32 %evl)693  ret <8 x double> %v694}695 696define <8 x double> @vfma_vv_v8f64_unmasked(<8 x double> %va, <8 x double> %b, <8 x double> %c, i32 zeroext %evl) {697; CHECK-LABEL: vfma_vv_v8f64_unmasked:698; CHECK:       # %bb.0:699; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma700; CHECK-NEXT:    vfmadd.vv v8, v12, v16701; CHECK-NEXT:    ret702  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %b, <8 x double> %c, <8 x i1> splat (i1 true), i32 %evl)703  ret <8 x double> %v704}705 706define <8 x double> @vfma_vf_v8f64(<8 x double> %va, double %b, <8 x double> %vc, <8 x i1> %m, i32 zeroext %evl) {707; CHECK-LABEL: vfma_vf_v8f64:708; CHECK:       # %bb.0:709; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma710; CHECK-NEXT:    vfmadd.vf v8, fa0, v12, v0.t711; CHECK-NEXT:    ret712  %elt.head = insertelement <8 x double> poison, double %b, i32 0713  %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer714  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %vc, <8 x i1> %m, i32 %evl)715  ret <8 x double> %v716}717 718define <8 x double> @vfma_vf_v8f64_unmasked(<8 x double> %va, double %b, <8 x double> %vc, i32 zeroext %evl) {719; CHECK-LABEL: vfma_vf_v8f64_unmasked:720; CHECK:       # %bb.0:721; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma722; CHECK-NEXT:    vfmadd.vf v8, fa0, v12723; CHECK-NEXT:    ret724  %elt.head = insertelement <8 x double> poison, double %b, i32 0725  %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer726  %v = call <8 x double> @llvm.vp.fma.v8f64(<8 x double> %va, <8 x double> %vb, <8 x double> %vc, <8 x i1> splat (i1 true), i32 %evl)727  ret <8 x double> %v728}729 730define <15 x double> @vfma_vv_v15f64(<15 x double> %va, <15 x double> %b, <15 x double> %c, <15 x i1> %m, i32 zeroext %evl) {731; CHECK-LABEL: vfma_vv_v15f64:732; CHECK:       # %bb.0:733; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma734; CHECK-NEXT:    vle64.v v24, (a0)735; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma736; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t737; CHECK-NEXT:    vmv.v.v v8, v16738; CHECK-NEXT:    ret739  %v = call <15 x double> @llvm.vp.fma.v15f64(<15 x double> %va, <15 x double> %b, <15 x double> %c, <15 x i1> %m, i32 %evl)740  ret <15 x double> %v741}742 743define <15 x double> @vfma_vv_v15f64_unmasked(<15 x double> %va, <15 x double> %b, <15 x double> %c, i32 zeroext %evl) {744; CHECK-LABEL: vfma_vv_v15f64_unmasked:745; CHECK:       # %bb.0:746; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma747; CHECK-NEXT:    vle64.v v24, (a0)748; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma749; CHECK-NEXT:    vfmadd.vv v8, v16, v24750; CHECK-NEXT:    ret751  %v = call <15 x double> @llvm.vp.fma.v15f64(<15 x double> %va, <15 x double> %b, <15 x double> %c, <15 x i1> splat (i1 true), i32 %evl)752  ret <15 x double> %v753}754 755define <16 x double> @vfma_vv_v16f64(<16 x double> %va, <16 x double> %b, <16 x double> %c, <16 x i1> %m, i32 zeroext %evl) {756; CHECK-LABEL: vfma_vv_v16f64:757; CHECK:       # %bb.0:758; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma759; CHECK-NEXT:    vle64.v v24, (a0)760; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma761; CHECK-NEXT:    vfmadd.vv v16, v8, v24, v0.t762; CHECK-NEXT:    vmv.v.v v8, v16763; CHECK-NEXT:    ret764  %v = call <16 x double> @llvm.vp.fma.v16f64(<16 x double> %va, <16 x double> %b, <16 x double> %c, <16 x i1> %m, i32 %evl)765  ret <16 x double> %v766}767 768define <16 x double> @vfma_vv_v16f64_unmasked(<16 x double> %va, <16 x double> %b, <16 x double> %c, i32 zeroext %evl) {769; CHECK-LABEL: vfma_vv_v16f64_unmasked:770; CHECK:       # %bb.0:771; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma772; CHECK-NEXT:    vle64.v v24, (a0)773; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma774; CHECK-NEXT:    vfmadd.vv v8, v16, v24775; CHECK-NEXT:    ret776  %v = call <16 x double> @llvm.vp.fma.v16f64(<16 x double> %va, <16 x double> %b, <16 x double> %c, <16 x i1> splat (i1 true), i32 %evl)777  ret <16 x double> %v778}779 780define <16 x double> @vfma_vf_v16f64(<16 x double> %va, double %b, <16 x double> %vc, <16 x i1> %m, i32 zeroext %evl) {781; CHECK-LABEL: vfma_vf_v16f64:782; CHECK:       # %bb.0:783; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma784; CHECK-NEXT:    vfmadd.vf v8, fa0, v16, v0.t785; CHECK-NEXT:    ret786  %elt.head = insertelement <16 x double> poison, double %b, i32 0787  %vb = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer788  %v = call <16 x double> @llvm.vp.fma.v16f64(<16 x double> %va, <16 x double> %vb, <16 x double> %vc, <16 x i1> %m, i32 %evl)789  ret <16 x double> %v790}791 792define <16 x double> @vfma_vf_v16f64_unmasked(<16 x double> %va, double %b, <16 x double> %vc, i32 zeroext %evl) {793; CHECK-LABEL: vfma_vf_v16f64_unmasked:794; CHECK:       # %bb.0:795; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma796; CHECK-NEXT:    vfmadd.vf v8, fa0, v16797; CHECK-NEXT:    ret798  %elt.head = insertelement <16 x double> poison, double %b, i32 0799  %vb = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer800  %v = call <16 x double> @llvm.vp.fma.v16f64(<16 x double> %va, <16 x double> %vb, <16 x double> %vc, <16 x i1> splat (i1 true), i32 %evl)801  ret <16 x double> %v802}803 804define <32 x double> @vfma_vv_v32f64(<32 x double> %va, <32 x double> %b, <32 x double> %c, <32 x i1> %m, i32 zeroext %evl) {805; CHECK-LABEL: vfma_vv_v32f64:806; CHECK:       # %bb.0:807; CHECK-NEXT:    addi sp, sp, -16808; CHECK-NEXT:    .cfi_def_cfa_offset 16809; CHECK-NEXT:    csrr a1, vlenb810; CHECK-NEXT:    slli a1, a1, 5811; CHECK-NEXT:    sub sp, sp, a1812; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb813; CHECK-NEXT:    csrr a1, vlenb814; CHECK-NEXT:    li a3, 24815; CHECK-NEXT:    mul a1, a1, a3816; CHECK-NEXT:    add a1, sp, a1817; CHECK-NEXT:    addi a1, a1, 16818; CHECK-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill819; CHECK-NEXT:    csrr a1, vlenb820; CHECK-NEXT:    slli a1, a1, 4821; CHECK-NEXT:    add a1, sp, a1822; CHECK-NEXT:    addi a1, a1, 16823; CHECK-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill824; CHECK-NEXT:    addi a1, a2, 128825; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma826; CHECK-NEXT:    vle64.v v24, (a2)827; CHECK-NEXT:    addi a2, a0, 128828; CHECK-NEXT:    vle64.v v8, (a1)829; CHECK-NEXT:    csrr a1, vlenb830; CHECK-NEXT:    slli a1, a1, 3831; CHECK-NEXT:    add a1, sp, a1832; CHECK-NEXT:    addi a1, a1, 16833; CHECK-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill834; CHECK-NEXT:    vle64.v v8, (a2)835; CHECK-NEXT:    addi a1, sp, 16836; CHECK-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill837; CHECK-NEXT:    vle64.v v8, (a0)838; CHECK-NEXT:    li a1, 16839; CHECK-NEXT:    mv a0, a4840; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma841; CHECK-NEXT:    vslidedown.vi v7, v0, 2842; CHECK-NEXT:    bltu a4, a1, .LBB50_2843; CHECK-NEXT:  # %bb.1:844; CHECK-NEXT:    li a0, 16845; CHECK-NEXT:  .LBB50_2:846; CHECK-NEXT:    csrr a1, vlenb847; CHECK-NEXT:    slli a1, a1, 4848; CHECK-NEXT:    add a1, sp, a1849; CHECK-NEXT:    addi a1, a1, 16850; CHECK-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload851; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma852; CHECK-NEXT:    vfmadd.vv v8, v16, v24, v0.t853; CHECK-NEXT:    csrr a0, vlenb854; CHECK-NEXT:    slli a0, a0, 4855; CHECK-NEXT:    add a0, sp, a0856; CHECK-NEXT:    addi a0, a0, 16857; CHECK-NEXT:    vs8r.v v8, (a0) # vscale x 64-byte Folded Spill858; CHECK-NEXT:    addi a0, a4, -16859; CHECK-NEXT:    sltu a1, a4, a0860; CHECK-NEXT:    addi a1, a1, -1861; CHECK-NEXT:    and a0, a1, a0862; CHECK-NEXT:    vmv1r.v v0, v7863; CHECK-NEXT:    csrr a1, vlenb864; CHECK-NEXT:    li a2, 24865; CHECK-NEXT:    mul a1, a1, a2866; CHECK-NEXT:    add a1, sp, a1867; CHECK-NEXT:    addi a1, a1, 16868; CHECK-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload869; CHECK-NEXT:    csrr a1, vlenb870; CHECK-NEXT:    slli a1, a1, 3871; CHECK-NEXT:    add a1, sp, a1872; CHECK-NEXT:    addi a1, a1, 16873; CHECK-NEXT:    vl8r.v v24, (a1) # vscale x 64-byte Folded Reload874; CHECK-NEXT:    addi a1, sp, 16875; CHECK-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload876; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma877; CHECK-NEXT:    vfmadd.vv v8, v16, v24, v0.t878; CHECK-NEXT:    vmv.v.v v16, v8879; CHECK-NEXT:    csrr a0, vlenb880; CHECK-NEXT:    slli a0, a0, 4881; CHECK-NEXT:    add a0, sp, a0882; CHECK-NEXT:    addi a0, a0, 16883; CHECK-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload884; CHECK-NEXT:    csrr a0, vlenb885; CHECK-NEXT:    slli a0, a0, 5886; CHECK-NEXT:    add sp, sp, a0887; CHECK-NEXT:    .cfi_def_cfa sp, 16888; CHECK-NEXT:    addi sp, sp, 16889; CHECK-NEXT:    .cfi_def_cfa_offset 0890; CHECK-NEXT:    ret891  %v = call <32 x double> @llvm.vp.fma.v32f64(<32 x double> %va, <32 x double> %b, <32 x double> %c, <32 x i1> %m, i32 %evl)892  ret <32 x double> %v893}894 895define <32 x double> @vfma_vv_v32f64_unmasked(<32 x double> %va, <32 x double> %b, <32 x double> %c, i32 zeroext %evl) {896; CHECK-LABEL: vfma_vv_v32f64_unmasked:897; CHECK:       # %bb.0:898; CHECK-NEXT:    addi sp, sp, -16899; CHECK-NEXT:    .cfi_def_cfa_offset 16900; CHECK-NEXT:    csrr a1, vlenb901; CHECK-NEXT:    li a3, 24902; CHECK-NEXT:    mul a1, a1, a3903; CHECK-NEXT:    sub sp, sp, a1904; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb905; CHECK-NEXT:    csrr a1, vlenb906; CHECK-NEXT:    slli a1, a1, 4907; CHECK-NEXT:    add a1, sp, a1908; CHECK-NEXT:    addi a1, a1, 16909; CHECK-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill910; CHECK-NEXT:    csrr a1, vlenb911; CHECK-NEXT:    slli a1, a1, 3912; CHECK-NEXT:    add a1, sp, a1913; CHECK-NEXT:    addi a1, a1, 16914; CHECK-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill915; CHECK-NEXT:    addi a1, a2, 128916; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma917; CHECK-NEXT:    vle64.v v16, (a2)918; CHECK-NEXT:    addi a2, a0, 128919; CHECK-NEXT:    vle64.v v8, (a1)920; CHECK-NEXT:    addi a1, sp, 16921; CHECK-NEXT:    vs8r.v v8, (a1) # vscale x 64-byte Folded Spill922; CHECK-NEXT:    vle64.v v24, (a2)923; CHECK-NEXT:    vle64.v v0, (a0)924; CHECK-NEXT:    li a1, 16925; CHECK-NEXT:    mv a0, a4926; CHECK-NEXT:    bltu a4, a1, .LBB51_2927; CHECK-NEXT:  # %bb.1:928; CHECK-NEXT:    li a0, 16929; CHECK-NEXT:  .LBB51_2:930; CHECK-NEXT:    csrr a1, vlenb931; CHECK-NEXT:    slli a1, a1, 3932; CHECK-NEXT:    add a1, sp, a1933; CHECK-NEXT:    addi a1, a1, 16934; CHECK-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload935; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma936; CHECK-NEXT:    vfmadd.vv v0, v8, v16937; CHECK-NEXT:    addi a0, a4, -16938; CHECK-NEXT:    sltu a1, a4, a0939; CHECK-NEXT:    addi a1, a1, -1940; CHECK-NEXT:    and a0, a1, a0941; CHECK-NEXT:    csrr a1, vlenb942; CHECK-NEXT:    slli a1, a1, 4943; CHECK-NEXT:    add a1, sp, a1944; CHECK-NEXT:    addi a1, a1, 16945; CHECK-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload946; CHECK-NEXT:    addi a1, sp, 16947; CHECK-NEXT:    vl8r.v v8, (a1) # vscale x 64-byte Folded Reload948; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma949; CHECK-NEXT:    vfmadd.vv v24, v16, v8950; CHECK-NEXT:    vmv8r.v v8, v0951; CHECK-NEXT:    vmv.v.v v16, v24952; CHECK-NEXT:    csrr a0, vlenb953; CHECK-NEXT:    li a1, 24954; CHECK-NEXT:    mul a0, a0, a1955; CHECK-NEXT:    add sp, sp, a0956; CHECK-NEXT:    .cfi_def_cfa sp, 16957; CHECK-NEXT:    addi sp, sp, 16958; CHECK-NEXT:    .cfi_def_cfa_offset 0959; CHECK-NEXT:    ret960  %v = call <32 x double> @llvm.vp.fma.v32f64(<32 x double> %va, <32 x double> %b, <32 x double> %c, <32 x i1> splat (i1 true), i32 %evl)961  ret <32 x double> %v962}963