brintos

brintos / llvm-project-archived public Read only

0
0
Text · 49.6 KiB · 99c9db0 Raw
1038 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zvfh,+zfbfmin,+zvfbfmin,+v \3; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \4; RUN:     --check-prefixes=CHECK,ZVFH5; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zvfh,+zfbfmin,+zvfbfmin,+v \6; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \7; RUN:     --check-prefixes=CHECK,ZVFH8; RUN: llc -mtriple=riscv32 \9; RUN:     -mattr=+m,+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \10; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \11; RUN:     --check-prefixes=CHECK,ZVFHMIN12; RUN: llc -mtriple=riscv64 \13; RUN:     -mattr=+m,+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \14; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \15; RUN:     --check-prefixes=CHECK,ZVFHMIN16 17; This tests a mix of vfmacc and vfmadd by using different operand orders to18; trigger commuting in TwoAddressInstructionPass.19 20define <vscale x 1 x bfloat> @vfmadd_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %vc) strictfp {21; CHECK-LABEL: vfmadd_vv_nxv1bf16:22; CHECK:       # %bb.0:23; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma24; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v1025; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v926; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v827; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma28; CHECK-NEXT:    vfmadd.vv v9, v10, v1129; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma30; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v931; CHECK-NEXT:    ret32  %vd = call <vscale x 1 x bfloat> @llvm.experimental.constrained.fma.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, <vscale x 1 x bfloat> %vc, metadata !"round.dynamic", metadata !"fpexcept.strict")33  ret <vscale x 1 x bfloat> %vd34}35 36define <vscale x 1 x bfloat> @vfmadd_vf_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb, bfloat %c) strictfp {37; CHECK-LABEL: vfmadd_vf_nxv1bf16:38; CHECK:       # %bb.0:39; CHECK-NEXT:    fmv.x.h a0, fa040; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma41; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v942; CHECK-NEXT:    vmv.v.x v9, a043; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v844; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v945; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma46; CHECK-NEXT:    vfmadd.vv v12, v11, v1047; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma48; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v1249; CHECK-NEXT:    ret50  %head = insertelement <vscale x 1 x bfloat> poison, bfloat %c, i32 051  %splat = shufflevector <vscale x 1 x bfloat> %head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer52  %vd = call <vscale x 1 x bfloat> @llvm.experimental.constrained.fma.nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %splat, <vscale x 1 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")53  ret <vscale x 1 x bfloat> %vd54}55 56define <vscale x 2 x bfloat> @vfmadd_vv_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, <vscale x 2 x bfloat> %vc) strictfp {57; CHECK-LABEL: vfmadd_vv_nxv2bf16:58; CHECK:       # %bb.0:59; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma60; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v961; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v1062; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v863; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma64; CHECK-NEXT:    vfmadd.vv v10, v9, v1165; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma66; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v1067; CHECK-NEXT:    ret68  %vd = call <vscale x 2 x bfloat> @llvm.experimental.constrained.fma.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vc, <vscale x 2 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")69  ret <vscale x 2 x bfloat> %vd70}71 72define <vscale x 2 x bfloat> @vfmadd_vf_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, bfloat %c) strictfp {73; CHECK-LABEL: vfmadd_vf_nxv2bf16:74; CHECK:       # %bb.0:75; CHECK-NEXT:    fmv.x.h a0, fa076; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma77; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v878; CHECK-NEXT:    vmv.v.x v8, a079; CHECK-NEXT:    vfwcvtbf16.f.f.v v11, v980; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v881; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma82; CHECK-NEXT:    vfmadd.vv v9, v11, v1083; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma84; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v985; CHECK-NEXT:    ret86  %head = insertelement <vscale x 2 x bfloat> poison, bfloat %c, i32 087  %splat = shufflevector <vscale x 2 x bfloat> %head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer88  %vd = call <vscale x 2 x bfloat> @llvm.experimental.constrained.fma.nxv2bf16(<vscale x 2 x bfloat> %vb, <vscale x 2 x bfloat> %splat, <vscale x 2 x bfloat> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")89  ret <vscale x 2 x bfloat> %vd90}91 92define <vscale x 4 x bfloat> @vfmadd_vv_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb, <vscale x 4 x bfloat> %vc) strictfp {93; CHECK-LABEL: vfmadd_vv_nxv4bf16:94; CHECK:       # %bb.0:95; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma96; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v1097; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v898; CHECK-NEXT:    vfwcvtbf16.f.f.v v14, v999; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma100; CHECK-NEXT:    vfmadd.vv v14, v10, v12101; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma102; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v14103; CHECK-NEXT:    ret104  %vd = call <vscale x 4 x bfloat> @llvm.experimental.constrained.fma.nxv4bf16(<vscale x 4 x bfloat> %vb, <vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vc, metadata !"round.dynamic", metadata !"fpexcept.strict")105  ret <vscale x 4 x bfloat> %vd106}107 108define <vscale x 4 x bfloat> @vfmadd_vf_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb, bfloat %c) strictfp {109; CHECK-LABEL: vfmadd_vf_nxv4bf16:110; CHECK:       # %bb.0:111; CHECK-NEXT:    fmv.x.h a0, fa0112; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma113; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v9114; CHECK-NEXT:    vmv.v.x v9, a0115; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8116; CHECK-NEXT:    vfwcvtbf16.f.f.v v14, v9117; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma118; CHECK-NEXT:    vfmadd.vv v14, v12, v10119; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma120; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v14121; CHECK-NEXT:    ret122  %head = insertelement <vscale x 4 x bfloat> poison, bfloat %c, i32 0123  %splat = shufflevector <vscale x 4 x bfloat> %head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer124  %vd = call <vscale x 4 x bfloat> @llvm.experimental.constrained.fma.nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %splat, <vscale x 4 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")125  ret <vscale x 4 x bfloat> %vd126}127 128define <vscale x 8 x bfloat> @vfmadd_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %vc) strictfp {129; CHECK-LABEL: vfmadd_vv_nxv8bf16:130; CHECK:       # %bb.0:131; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma132; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8133; CHECK-NEXT:    vfwcvtbf16.f.f.v v20, v12134; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10135; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma136; CHECK-NEXT:    vfmadd.vv v12, v20, v16137; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma138; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12139; CHECK-NEXT:    ret140  %vd = call <vscale x 8 x bfloat> @llvm.experimental.constrained.fma.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %vc, <vscale x 8 x bfloat> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")141  ret <vscale x 8 x bfloat> %vd142}143 144define <vscale x 8 x bfloat> @vfmadd_vf_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb, bfloat %c) strictfp {145; CHECK-LABEL: vfmadd_vf_nxv8bf16:146; CHECK:       # %bb.0:147; CHECK-NEXT:    fmv.x.h a0, fa0148; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma149; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8150; CHECK-NEXT:    vmv.v.x v8, a0151; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10152; CHECK-NEXT:    vfwcvtbf16.f.f.v v20, v8153; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma154; CHECK-NEXT:    vfmadd.vv v20, v16, v12155; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma156; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v20157; CHECK-NEXT:    ret158  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %c, i32 0159  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer160  %vd = call <vscale x 8 x bfloat> @llvm.experimental.constrained.fma.nxv8bf16(<vscale x 8 x bfloat> %vb, <vscale x 8 x bfloat> %splat, <vscale x 8 x bfloat> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")161  ret <vscale x 8 x bfloat> %vd162}163 164define <vscale x 16 x bfloat> @vfmadd_vv_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, <vscale x 16 x bfloat> %vc) strictfp {165; CHECK-LABEL: vfmadd_vv_nxv16bf16:166; CHECK:       # %bb.0:167; CHECK-NEXT:    addi sp, sp, -16168; CHECK-NEXT:    .cfi_def_cfa_offset 16169; CHECK-NEXT:    csrr a0, vlenb170; CHECK-NEXT:    slli a0, a0, 2171; CHECK-NEXT:    sub sp, sp, a0172; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb173; CHECK-NEXT:    addi a0, sp, 16174; CHECK-NEXT:    vs4r.v v16, (a0) # vscale x 32-byte Folded Spill175; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma176; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12177; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v8178; CHECK-NEXT:    addi a0, sp, 16179; CHECK-NEXT:    vl4r.v v8, (a0) # vscale x 32-byte Folded Reload180; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8181; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma182; CHECK-NEXT:    vfmadd.vv v24, v0, v16183; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma184; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v24185; CHECK-NEXT:    csrr a0, vlenb186; CHECK-NEXT:    slli a0, a0, 2187; CHECK-NEXT:    add sp, sp, a0188; CHECK-NEXT:    .cfi_def_cfa sp, 16189; CHECK-NEXT:    addi sp, sp, 16190; CHECK-NEXT:    .cfi_def_cfa_offset 0191; CHECK-NEXT:    ret192  %vd = call <vscale x 16 x bfloat> @llvm.experimental.constrained.fma.nxv16bf16(<vscale x 16 x bfloat> %vc, <vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")193  ret <vscale x 16 x bfloat> %vd194}195 196define <vscale x 16 x bfloat> @vfmadd_vf_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb, bfloat %c) strictfp {197; CHECK-LABEL: vfmadd_vf_nxv16bf16:198; CHECK:       # %bb.0:199; CHECK-NEXT:    fmv.x.h a0, fa0200; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma201; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12202; CHECK-NEXT:    vmv.v.x v12, a0203; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8204; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v12205; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma206; CHECK-NEXT:    vfmadd.vv v0, v24, v16207; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma208; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0209; CHECK-NEXT:    ret210  %head = insertelement <vscale x 16 x bfloat> poison, bfloat %c, i32 0211  %splat = shufflevector <vscale x 16 x bfloat> %head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer212  %vd = call <vscale x 16 x bfloat> @llvm.experimental.constrained.fma.nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %splat, <vscale x 16 x bfloat> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")213  ret <vscale x 16 x bfloat> %vd214}215 216define <vscale x 32 x bfloat> @vfmadd_vv_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb, <vscale x 32 x bfloat> %vc) strictfp {217; CHECK-LABEL: vfmadd_vv_nxv32bf16:218; CHECK:       # %bb.0:219; CHECK-NEXT:    addi sp, sp, -16220; CHECK-NEXT:    .cfi_def_cfa_offset 16221; CHECK-NEXT:    csrr a1, vlenb222; CHECK-NEXT:    slli a1, a1, 5223; CHECK-NEXT:    sub sp, sp, a1224; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb225; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma226; CHECK-NEXT:    vmv8r.v v0, v16227; CHECK-NEXT:    csrr a1, vlenb228; CHECK-NEXT:    slli a1, a1, 3229; CHECK-NEXT:    add a1, sp, a1230; CHECK-NEXT:    addi a1, a1, 16231; CHECK-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill232; CHECK-NEXT:    vl8re16.v v16, (a0)233; CHECK-NEXT:    csrr a0, vlenb234; CHECK-NEXT:    li a1, 24235; CHECK-NEXT:    mul a0, a0, a1236; CHECK-NEXT:    add a0, sp, a0237; CHECK-NEXT:    addi a0, a0, 16238; CHECK-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill239; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v8240; CHECK-NEXT:    csrr a0, vlenb241; CHECK-NEXT:    slli a0, a0, 4242; CHECK-NEXT:    add a0, sp, a0243; CHECK-NEXT:    addi a0, a0, 16244; CHECK-NEXT:    vs8r.v v24, (a0) # vscale x 64-byte Folded Spill245; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v0246; CHECK-NEXT:    addi a0, sp, 16247; CHECK-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill248; CHECK-NEXT:    csrr a0, vlenb249; CHECK-NEXT:    li a1, 24250; CHECK-NEXT:    mul a0, a0, a1251; CHECK-NEXT:    add a0, sp, a0252; CHECK-NEXT:    addi a0, a0, 16253; CHECK-NEXT:    vl8r.v v16, (a0) # vscale x 64-byte Folded Reload254; CHECK-NEXT:    vfwcvtbf16.f.f.v v0, v16255; CHECK-NEXT:    csrr a0, vlenb256; CHECK-NEXT:    slli a0, a0, 4257; CHECK-NEXT:    add a0, sp, a0258; CHECK-NEXT:    addi a0, a0, 16259; CHECK-NEXT:    vl8r.v v24, (a0) # vscale x 64-byte Folded Reload260; CHECK-NEXT:    addi a0, sp, 16261; CHECK-NEXT:    vl8r.v v16, (a0) # vscale x 64-byte Folded Reload262; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma263; CHECK-NEXT:    vfmadd.vv v0, v16, v24264; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma265; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v12266; CHECK-NEXT:    csrr a0, vlenb267; CHECK-NEXT:    slli a0, a0, 4268; CHECK-NEXT:    add a0, sp, a0269; CHECK-NEXT:    addi a0, a0, 16270; CHECK-NEXT:    vs8r.v v24, (a0) # vscale x 64-byte Folded Spill271; CHECK-NEXT:    csrr a0, vlenb272; CHECK-NEXT:    slli a0, a0, 3273; CHECK-NEXT:    add a0, sp, a0274; CHECK-NEXT:    addi a0, a0, 16275; CHECK-NEXT:    vl8r.v v24, (a0) # vscale x 64-byte Folded Reload276; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v28277; CHECK-NEXT:    csrr a0, vlenb278; CHECK-NEXT:    li a1, 24279; CHECK-NEXT:    mul a0, a0, a1280; CHECK-NEXT:    add a0, sp, a0281; CHECK-NEXT:    addi a0, a0, 16282; CHECK-NEXT:    vl8r.v v24, (a0) # vscale x 64-byte Folded Reload283; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v28284; CHECK-NEXT:    csrr a0, vlenb285; CHECK-NEXT:    slli a0, a0, 4286; CHECK-NEXT:    add a0, sp, a0287; CHECK-NEXT:    addi a0, a0, 16288; CHECK-NEXT:    vl8r.v v24, (a0) # vscale x 64-byte Folded Reload289; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma290; CHECK-NEXT:    vfmadd.vv v16, v8, v24291; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma292; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v0293; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16294; CHECK-NEXT:    csrr a0, vlenb295; CHECK-NEXT:    slli a0, a0, 5296; CHECK-NEXT:    add sp, sp, a0297; CHECK-NEXT:    .cfi_def_cfa sp, 16298; CHECK-NEXT:    addi sp, sp, 16299; CHECK-NEXT:    .cfi_def_cfa_offset 0300; CHECK-NEXT:    ret301  %vd = call <vscale x 32 x bfloat> @llvm.experimental.constrained.fma.nxv32bf16(<vscale x 32 x bfloat> %vc, <vscale x 32 x bfloat> %vb, <vscale x 32 x bfloat> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")302  ret <vscale x 32 x bfloat> %vd303}304 305define <vscale x 32 x bfloat> @vfmadd_vf_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb, bfloat %c) strictfp {306; CHECK-LABEL: vfmadd_vf_nxv32bf16:307; CHECK:       # %bb.0:308; CHECK-NEXT:    addi sp, sp, -16309; CHECK-NEXT:    .cfi_def_cfa_offset 16310; CHECK-NEXT:    csrr a0, vlenb311; CHECK-NEXT:    slli a0, a0, 5312; CHECK-NEXT:    sub sp, sp, a0313; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb314; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma315; CHECK-NEXT:    vmv8r.v v24, v16316; CHECK-NEXT:    csrr a0, vlenb317; CHECK-NEXT:    li a1, 24318; CHECK-NEXT:    mul a0, a0, a1319; CHECK-NEXT:    add a0, sp, a0320; CHECK-NEXT:    addi a0, a0, 16321; CHECK-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill322; CHECK-NEXT:    fmv.x.h a0, fa0323; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8324; CHECK-NEXT:    csrr a1, vlenb325; CHECK-NEXT:    slli a1, a1, 4326; CHECK-NEXT:    add a1, sp, a1327; CHECK-NEXT:    addi a1, a1, 16328; CHECK-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill329; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v24330; CHECK-NEXT:    csrr a1, vlenb331; CHECK-NEXT:    slli a1, a1, 3332; CHECK-NEXT:    add a1, sp, a1333; CHECK-NEXT:    addi a1, a1, 16334; CHECK-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill335; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma336; CHECK-NEXT:    vmv.v.x v16, a0337; CHECK-NEXT:    addi a0, sp, 16338; CHECK-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill339; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma340; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v16341; CHECK-NEXT:    csrr a0, vlenb342; CHECK-NEXT:    slli a0, a0, 4343; CHECK-NEXT:    add a0, sp, a0344; CHECK-NEXT:    addi a0, a0, 16345; CHECK-NEXT:    vl8r.v v16, (a0) # vscale x 64-byte Folded Reload346; CHECK-NEXT:    csrr a0, vlenb347; CHECK-NEXT:    slli a0, a0, 3348; CHECK-NEXT:    add a0, sp, a0349; CHECK-NEXT:    addi a0, a0, 16350; CHECK-NEXT:    vl8r.v v0, (a0) # vscale x 64-byte Folded Reload351; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma352; CHECK-NEXT:    vfmadd.vv v24, v0, v16353; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma354; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12355; CHECK-NEXT:    csrr a0, vlenb356; CHECK-NEXT:    slli a0, a0, 4357; CHECK-NEXT:    add a0, sp, a0358; CHECK-NEXT:    addi a0, a0, 16359; CHECK-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill360; CHECK-NEXT:    csrr a0, vlenb361; CHECK-NEXT:    li a1, 24362; CHECK-NEXT:    mul a0, a0, a1363; CHECK-NEXT:    add a0, sp, a0364; CHECK-NEXT:    addi a0, a0, 16365; CHECK-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload366; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v12367; CHECK-NEXT:    addi a0, sp, 16368; CHECK-NEXT:    vl8r.v v0, (a0) # vscale x 64-byte Folded Reload369; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v4370; CHECK-NEXT:    csrr a0, vlenb371; CHECK-NEXT:    slli a0, a0, 4372; CHECK-NEXT:    add a0, sp, a0373; CHECK-NEXT:    addi a0, a0, 16374; CHECK-NEXT:    vl8r.v v0, (a0) # vscale x 64-byte Folded Reload375; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma376; CHECK-NEXT:    vfmadd.vv v16, v8, v0377; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma378; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v24379; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v16380; CHECK-NEXT:    csrr a0, vlenb381; CHECK-NEXT:    slli a0, a0, 5382; CHECK-NEXT:    add sp, sp, a0383; CHECK-NEXT:    .cfi_def_cfa sp, 16384; CHECK-NEXT:    addi sp, sp, 16385; CHECK-NEXT:    .cfi_def_cfa_offset 0386; CHECK-NEXT:    ret387  %head = insertelement <vscale x 32 x bfloat> poison, bfloat %c, i32 0388  %splat = shufflevector <vscale x 32 x bfloat> %head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer389  %vd = call <vscale x 32 x bfloat> @llvm.experimental.constrained.fma.nxv32bf16(<vscale x 32 x bfloat> %vb, <vscale x 32 x bfloat> %splat, <vscale x 32 x bfloat> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")390  ret <vscale x 32 x bfloat> %vd391}392 393define <vscale x 1 x half> @vfmadd_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc) strictfp {394; ZVFH-LABEL: vfmadd_vv_nxv1f16:395; ZVFH:       # %bb.0:396; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma397; ZVFH-NEXT:    vfmadd.vv v8, v9, v10398; ZVFH-NEXT:    ret399;400; ZVFHMIN-LABEL: vfmadd_vv_nxv1f16:401; ZVFHMIN:       # %bb.0:402; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma403; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v10404; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9405; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8406; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma407; ZVFHMIN-NEXT:    vfmadd.vv v9, v10, v11408; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma409; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9410; ZVFHMIN-NEXT:    ret411  %vd = call <vscale x 1 x half> @llvm.experimental.constrained.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x half> %vc, metadata !"round.dynamic", metadata !"fpexcept.strict")412  ret <vscale x 1 x half> %vd413}414 415define <vscale x 1 x half> @vfmadd_vf_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, half %c) strictfp {416; ZVFH-LABEL: vfmadd_vf_nxv1f16:417; ZVFH:       # %bb.0:418; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma419; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9420; ZVFH-NEXT:    ret421;422; ZVFHMIN-LABEL: vfmadd_vf_nxv1f16:423; ZVFHMIN:       # %bb.0:424; ZVFHMIN-NEXT:    fmv.x.h a0, fa0425; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma426; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9427; ZVFHMIN-NEXT:    vmv.v.x v9, a0428; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v8429; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9430; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma431; ZVFHMIN-NEXT:    vfmadd.vv v12, v11, v10432; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma433; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12434; ZVFHMIN-NEXT:    ret435  %head = insertelement <vscale x 1 x half> poison, half %c, i32 0436  %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer437  %vd = call <vscale x 1 x half> @llvm.experimental.constrained.fma.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %splat, <vscale x 1 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")438  ret <vscale x 1 x half> %vd439}440 441define <vscale x 2 x half> @vfmadd_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x half> %vc) strictfp {442; ZVFH-LABEL: vfmadd_vv_nxv2f16:443; ZVFH:       # %bb.0:444; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma445; ZVFH-NEXT:    vfmadd.vv v8, v10, v9446; ZVFH-NEXT:    ret447;448; ZVFHMIN-LABEL: vfmadd_vv_nxv2f16:449; ZVFHMIN:       # %bb.0:450; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma451; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9452; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v10453; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8454; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma455; ZVFHMIN-NEXT:    vfmadd.vv v10, v9, v11456; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma457; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10458; ZVFHMIN-NEXT:    ret459  %vd = call <vscale x 2 x half> @llvm.experimental.constrained.fma.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vc, <vscale x 2 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")460  ret <vscale x 2 x half> %vd461}462 463define <vscale x 2 x half> @vfmadd_vf_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, half %c) strictfp {464; ZVFH-LABEL: vfmadd_vf_nxv2f16:465; ZVFH:       # %bb.0:466; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma467; ZVFH-NEXT:    vfmacc.vf v8, fa0, v9468; ZVFH-NEXT:    ret469;470; ZVFHMIN-LABEL: vfmadd_vf_nxv2f16:471; ZVFHMIN:       # %bb.0:472; ZVFHMIN-NEXT:    fmv.x.h a0, fa0473; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma474; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8475; ZVFHMIN-NEXT:    vmv.v.x v8, a0476; ZVFHMIN-NEXT:    vfwcvt.f.f.v v11, v9477; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8478; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma479; ZVFHMIN-NEXT:    vfmadd.vv v9, v11, v10480; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma481; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9482; ZVFHMIN-NEXT:    ret483  %head = insertelement <vscale x 2 x half> poison, half %c, i32 0484  %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer485  %vd = call <vscale x 2 x half> @llvm.experimental.constrained.fma.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %splat, <vscale x 2 x half> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")486  ret <vscale x 2 x half> %vd487}488 489define <vscale x 4 x half> @vfmadd_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x half> %vc) strictfp {490; ZVFH-LABEL: vfmadd_vv_nxv4f16:491; ZVFH:       # %bb.0:492; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma493; ZVFH-NEXT:    vfmadd.vv v8, v9, v10494; ZVFH-NEXT:    ret495;496; ZVFHMIN-LABEL: vfmadd_vv_nxv4f16:497; ZVFHMIN:       # %bb.0:498; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma499; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10500; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8501; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9502; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma503; ZVFHMIN-NEXT:    vfmadd.vv v14, v10, v12504; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma505; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14506; ZVFHMIN-NEXT:    ret507  %vd = call <vscale x 4 x half> @llvm.experimental.constrained.fma.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x half> %vc, metadata !"round.dynamic", metadata !"fpexcept.strict")508  ret <vscale x 4 x half> %vd509}510 511define <vscale x 4 x half> @vfmadd_vf_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, half %c) strictfp {512; ZVFH-LABEL: vfmadd_vf_nxv4f16:513; ZVFH:       # %bb.0:514; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma515; ZVFH-NEXT:    vfmadd.vf v8, fa0, v9516; ZVFH-NEXT:    ret517;518; ZVFHMIN-LABEL: vfmadd_vf_nxv4f16:519; ZVFHMIN:       # %bb.0:520; ZVFHMIN-NEXT:    fmv.x.h a0, fa0521; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m1, ta, ma522; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9523; ZVFHMIN-NEXT:    vmv.v.x v9, a0524; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8525; ZVFHMIN-NEXT:    vfwcvt.f.f.v v14, v9526; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma527; ZVFHMIN-NEXT:    vfmadd.vv v14, v12, v10528; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma529; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v14530; ZVFHMIN-NEXT:    ret531  %head = insertelement <vscale x 4 x half> poison, half %c, i32 0532  %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer533  %vd = call <vscale x 4 x half> @llvm.experimental.constrained.fma.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %splat, <vscale x 4 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")534  ret <vscale x 4 x half> %vd535}536 537define <vscale x 8 x half> @vfmadd_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x half> %vc) strictfp {538; ZVFH-LABEL: vfmadd_vv_nxv8f16:539; ZVFH:       # %bb.0:540; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma541; ZVFH-NEXT:    vfmacc.vv v8, v12, v10542; ZVFH-NEXT:    ret543;544; ZVFHMIN-LABEL: vfmadd_vv_nxv8f16:545; ZVFHMIN:       # %bb.0:546; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma547; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8548; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v12549; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10550; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma551; ZVFHMIN-NEXT:    vfmadd.vv v12, v20, v16552; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma553; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12554; ZVFHMIN-NEXT:    ret555  %vd = call <vscale x 8 x half> @llvm.experimental.constrained.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %vc, <vscale x 8 x half> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")556  ret <vscale x 8 x half> %vd557}558 559define <vscale x 8 x half> @vfmadd_vf_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, half %c) strictfp {560; ZVFH-LABEL: vfmadd_vf_nxv8f16:561; ZVFH:       # %bb.0:562; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma563; ZVFH-NEXT:    vfmacc.vf v8, fa0, v10564; ZVFH-NEXT:    ret565;566; ZVFHMIN-LABEL: vfmadd_vf_nxv8f16:567; ZVFHMIN:       # %bb.0:568; ZVFHMIN-NEXT:    fmv.x.h a0, fa0569; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma570; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8571; ZVFHMIN-NEXT:    vmv.v.x v8, a0572; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10573; ZVFHMIN-NEXT:    vfwcvt.f.f.v v20, v8574; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma575; ZVFHMIN-NEXT:    vfmadd.vv v20, v16, v12576; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma577; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v20578; ZVFHMIN-NEXT:    ret579  %head = insertelement <vscale x 8 x half> poison, half %c, i32 0580  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer581  %vd = call <vscale x 8 x half> @llvm.experimental.constrained.fma.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %splat, <vscale x 8 x half> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")582  ret <vscale x 8 x half> %vd583}584 585define <vscale x 16 x half> @vfmadd_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x half> %vc) strictfp {586; ZVFH-LABEL: vfmadd_vv_nxv16f16:587; ZVFH:       # %bb.0:588; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma589; ZVFH-NEXT:    vfmadd.vv v8, v16, v12590; ZVFH-NEXT:    ret591;592; ZVFHMIN-LABEL: vfmadd_vv_nxv16f16:593; ZVFHMIN:       # %bb.0:594; ZVFHMIN-NEXT:    addi sp, sp, -16595; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16596; ZVFHMIN-NEXT:    csrr a0, vlenb597; ZVFHMIN-NEXT:    slli a0, a0, 2598; ZVFHMIN-NEXT:    sub sp, sp, a0599; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x04, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 4 * vlenb600; ZVFHMIN-NEXT:    addi a0, sp, 16601; ZVFHMIN-NEXT:    vs4r.v v16, (a0) # vscale x 32-byte Folded Spill602; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma603; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12604; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v8605; ZVFHMIN-NEXT:    addi a0, sp, 16606; ZVFHMIN-NEXT:    vl4r.v v8, (a0) # vscale x 32-byte Folded Reload607; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8608; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma609; ZVFHMIN-NEXT:    vfmadd.vv v24, v0, v16610; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma611; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24612; ZVFHMIN-NEXT:    csrr a0, vlenb613; ZVFHMIN-NEXT:    slli a0, a0, 2614; ZVFHMIN-NEXT:    add sp, sp, a0615; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16616; ZVFHMIN-NEXT:    addi sp, sp, 16617; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0618; ZVFHMIN-NEXT:    ret619  %vd = call <vscale x 16 x half> @llvm.experimental.constrained.fma.nxv16f16(<vscale x 16 x half> %vc, <vscale x 16 x half> %va, <vscale x 16 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")620  ret <vscale x 16 x half> %vd621}622 623define <vscale x 16 x half> @vfmadd_vf_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, half %c) strictfp {624; ZVFH-LABEL: vfmadd_vf_nxv16f16:625; ZVFH:       # %bb.0:626; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma627; ZVFH-NEXT:    vfmadd.vf v8, fa0, v12628; ZVFH-NEXT:    ret629;630; ZVFHMIN-LABEL: vfmadd_vf_nxv16f16:631; ZVFHMIN:       # %bb.0:632; ZVFHMIN-NEXT:    fmv.x.h a0, fa0633; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma634; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12635; ZVFHMIN-NEXT:    vmv.v.x v12, a0636; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8637; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v12638; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma639; ZVFHMIN-NEXT:    vfmadd.vv v0, v24, v16640; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma641; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0642; ZVFHMIN-NEXT:    ret643  %head = insertelement <vscale x 16 x half> poison, half %c, i32 0644  %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer645  %vd = call <vscale x 16 x half> @llvm.experimental.constrained.fma.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %splat, <vscale x 16 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")646  ret <vscale x 16 x half> %vd647}648 649define <vscale x 32 x half> @vfmadd_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x half> %vc) strictfp {650; ZVFH-LABEL: vfmadd_vv_nxv32f16:651; ZVFH:       # %bb.0:652; ZVFH-NEXT:    vl8re16.v v24, (a0)653; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma654; ZVFH-NEXT:    vfmacc.vv v8, v16, v24655; ZVFH-NEXT:    ret656;657; ZVFHMIN-LABEL: vfmadd_vv_nxv32f16:658; ZVFHMIN:       # %bb.0:659; ZVFHMIN-NEXT:    addi sp, sp, -16660; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16661; ZVFHMIN-NEXT:    csrr a1, vlenb662; ZVFHMIN-NEXT:    slli a1, a1, 5663; ZVFHMIN-NEXT:    sub sp, sp, a1664; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb665; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m4, ta, ma666; ZVFHMIN-NEXT:    vmv8r.v v0, v16667; ZVFHMIN-NEXT:    csrr a1, vlenb668; ZVFHMIN-NEXT:    slli a1, a1, 3669; ZVFHMIN-NEXT:    add a1, sp, a1670; ZVFHMIN-NEXT:    addi a1, a1, 16671; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill672; ZVFHMIN-NEXT:    vl8re16.v v16, (a0)673; ZVFHMIN-NEXT:    csrr a0, vlenb674; ZVFHMIN-NEXT:    li a1, 24675; ZVFHMIN-NEXT:    mul a0, a0, a1676; ZVFHMIN-NEXT:    add a0, sp, a0677; ZVFHMIN-NEXT:    addi a0, a0, 16678; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill679; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v8680; ZVFHMIN-NEXT:    csrr a0, vlenb681; ZVFHMIN-NEXT:    slli a0, a0, 4682; ZVFHMIN-NEXT:    add a0, sp, a0683; ZVFHMIN-NEXT:    addi a0, a0, 16684; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # vscale x 64-byte Folded Spill685; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v0686; ZVFHMIN-NEXT:    addi a0, sp, 16687; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill688; ZVFHMIN-NEXT:    csrr a0, vlenb689; ZVFHMIN-NEXT:    li a1, 24690; ZVFHMIN-NEXT:    mul a0, a0, a1691; ZVFHMIN-NEXT:    add a0, sp, a0692; ZVFHMIN-NEXT:    addi a0, a0, 16693; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # vscale x 64-byte Folded Reload694; ZVFHMIN-NEXT:    vfwcvt.f.f.v v0, v16695; ZVFHMIN-NEXT:    csrr a0, vlenb696; ZVFHMIN-NEXT:    slli a0, a0, 4697; ZVFHMIN-NEXT:    add a0, sp, a0698; ZVFHMIN-NEXT:    addi a0, a0, 16699; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # vscale x 64-byte Folded Reload700; ZVFHMIN-NEXT:    addi a0, sp, 16701; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # vscale x 64-byte Folded Reload702; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma703; ZVFHMIN-NEXT:    vfmadd.vv v0, v16, v24704; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma705; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12706; ZVFHMIN-NEXT:    csrr a0, vlenb707; ZVFHMIN-NEXT:    slli a0, a0, 4708; ZVFHMIN-NEXT:    add a0, sp, a0709; ZVFHMIN-NEXT:    addi a0, a0, 16710; ZVFHMIN-NEXT:    vs8r.v v24, (a0) # vscale x 64-byte Folded Spill711; ZVFHMIN-NEXT:    csrr a0, vlenb712; ZVFHMIN-NEXT:    slli a0, a0, 3713; ZVFHMIN-NEXT:    add a0, sp, a0714; ZVFHMIN-NEXT:    addi a0, a0, 16715; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # vscale x 64-byte Folded Reload716; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v28717; ZVFHMIN-NEXT:    csrr a0, vlenb718; ZVFHMIN-NEXT:    li a1, 24719; ZVFHMIN-NEXT:    mul a0, a0, a1720; ZVFHMIN-NEXT:    add a0, sp, a0721; ZVFHMIN-NEXT:    addi a0, a0, 16722; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # vscale x 64-byte Folded Reload723; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v28724; ZVFHMIN-NEXT:    csrr a0, vlenb725; ZVFHMIN-NEXT:    slli a0, a0, 4726; ZVFHMIN-NEXT:    add a0, sp, a0727; ZVFHMIN-NEXT:    addi a0, a0, 16728; ZVFHMIN-NEXT:    vl8r.v v24, (a0) # vscale x 64-byte Folded Reload729; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma730; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v24731; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma732; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v0733; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16734; ZVFHMIN-NEXT:    csrr a0, vlenb735; ZVFHMIN-NEXT:    slli a0, a0, 5736; ZVFHMIN-NEXT:    add sp, sp, a0737; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16738; ZVFHMIN-NEXT:    addi sp, sp, 16739; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0740; ZVFHMIN-NEXT:    ret741  %vd = call <vscale x 32 x half> @llvm.experimental.constrained.fma.nxv32f16(<vscale x 32 x half> %vc, <vscale x 32 x half> %vb, <vscale x 32 x half> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")742  ret <vscale x 32 x half> %vd743}744 745define <vscale x 32 x half> @vfmadd_vf_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, half %c) strictfp {746; ZVFH-LABEL: vfmadd_vf_nxv32f16:747; ZVFH:       # %bb.0:748; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma749; ZVFH-NEXT:    vfmacc.vf v8, fa0, v16750; ZVFH-NEXT:    ret751;752; ZVFHMIN-LABEL: vfmadd_vf_nxv32f16:753; ZVFHMIN:       # %bb.0:754; ZVFHMIN-NEXT:    addi sp, sp, -16755; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16756; ZVFHMIN-NEXT:    csrr a0, vlenb757; ZVFHMIN-NEXT:    slli a0, a0, 5758; ZVFHMIN-NEXT:    sub sp, sp, a0759; ZVFHMIN-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 32 * vlenb760; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma761; ZVFHMIN-NEXT:    vmv8r.v v24, v16762; ZVFHMIN-NEXT:    csrr a0, vlenb763; ZVFHMIN-NEXT:    li a1, 24764; ZVFHMIN-NEXT:    mul a0, a0, a1765; ZVFHMIN-NEXT:    add a0, sp, a0766; ZVFHMIN-NEXT:    addi a0, a0, 16767; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill768; ZVFHMIN-NEXT:    fmv.x.h a0, fa0769; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8770; ZVFHMIN-NEXT:    csrr a1, vlenb771; ZVFHMIN-NEXT:    slli a1, a1, 4772; ZVFHMIN-NEXT:    add a1, sp, a1773; ZVFHMIN-NEXT:    addi a1, a1, 16774; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill775; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v24776; ZVFHMIN-NEXT:    csrr a1, vlenb777; ZVFHMIN-NEXT:    slli a1, a1, 3778; ZVFHMIN-NEXT:    add a1, sp, a1779; ZVFHMIN-NEXT:    addi a1, a1, 16780; ZVFHMIN-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill781; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m8, ta, ma782; ZVFHMIN-NEXT:    vmv.v.x v16, a0783; ZVFHMIN-NEXT:    addi a0, sp, 16784; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill785; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma786; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v16787; ZVFHMIN-NEXT:    csrr a0, vlenb788; ZVFHMIN-NEXT:    slli a0, a0, 4789; ZVFHMIN-NEXT:    add a0, sp, a0790; ZVFHMIN-NEXT:    addi a0, a0, 16791; ZVFHMIN-NEXT:    vl8r.v v16, (a0) # vscale x 64-byte Folded Reload792; ZVFHMIN-NEXT:    csrr a0, vlenb793; ZVFHMIN-NEXT:    slli a0, a0, 3794; ZVFHMIN-NEXT:    add a0, sp, a0795; ZVFHMIN-NEXT:    addi a0, a0, 16796; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # vscale x 64-byte Folded Reload797; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma798; ZVFHMIN-NEXT:    vfmadd.vv v24, v0, v16799; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma800; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12801; ZVFHMIN-NEXT:    csrr a0, vlenb802; ZVFHMIN-NEXT:    slli a0, a0, 4803; ZVFHMIN-NEXT:    add a0, sp, a0804; ZVFHMIN-NEXT:    addi a0, a0, 16805; ZVFHMIN-NEXT:    vs8r.v v16, (a0) # vscale x 64-byte Folded Spill806; ZVFHMIN-NEXT:    csrr a0, vlenb807; ZVFHMIN-NEXT:    li a1, 24808; ZVFHMIN-NEXT:    mul a0, a0, a1809; ZVFHMIN-NEXT:    add a0, sp, a0810; ZVFHMIN-NEXT:    addi a0, a0, 16811; ZVFHMIN-NEXT:    vl8r.v v8, (a0) # vscale x 64-byte Folded Reload812; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v12813; ZVFHMIN-NEXT:    addi a0, sp, 16814; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # vscale x 64-byte Folded Reload815; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v4816; ZVFHMIN-NEXT:    csrr a0, vlenb817; ZVFHMIN-NEXT:    slli a0, a0, 4818; ZVFHMIN-NEXT:    add a0, sp, a0819; ZVFHMIN-NEXT:    addi a0, a0, 16820; ZVFHMIN-NEXT:    vl8r.v v0, (a0) # vscale x 64-byte Folded Reload821; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma822; ZVFHMIN-NEXT:    vfmadd.vv v16, v8, v0823; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma824; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v24825; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v16826; ZVFHMIN-NEXT:    csrr a0, vlenb827; ZVFHMIN-NEXT:    slli a0, a0, 5828; ZVFHMIN-NEXT:    add sp, sp, a0829; ZVFHMIN-NEXT:    .cfi_def_cfa sp, 16830; ZVFHMIN-NEXT:    addi sp, sp, 16831; ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0832; ZVFHMIN-NEXT:    ret833  %head = insertelement <vscale x 32 x half> poison, half %c, i32 0834  %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer835  %vd = call <vscale x 32 x half> @llvm.experimental.constrained.fma.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %splat, <vscale x 32 x half> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")836  ret <vscale x 32 x half> %vd837}838 839define <vscale x 1 x float> @vfmadd_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc) strictfp {840; CHECK-LABEL: vfmadd_vv_nxv1f32:841; CHECK:       # %bb.0:842; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma843; CHECK-NEXT:    vfmadd.vv v8, v9, v10844; CHECK-NEXT:    ret845  %vd = call <vscale x 1 x float> @llvm.experimental.constrained.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x float> %vc, metadata !"round.dynamic", metadata !"fpexcept.strict")846  ret <vscale x 1 x float> %vd847}848 849define <vscale x 1 x float> @vfmadd_vf_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, float %c) strictfp {850; CHECK-LABEL: vfmadd_vf_nxv1f32:851; CHECK:       # %bb.0:852; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma853; CHECK-NEXT:    vfmadd.vf v8, fa0, v9854; CHECK-NEXT:    ret855  %head = insertelement <vscale x 1 x float> poison, float %c, i32 0856  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer857  %vd = call <vscale x 1 x float> @llvm.experimental.constrained.fma.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %splat, <vscale x 1 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")858  ret <vscale x 1 x float> %vd859}860 861define <vscale x 2 x float> @vfmadd_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x float> %vc) strictfp {862; CHECK-LABEL: vfmadd_vv_nxv2f32:863; CHECK:       # %bb.0:864; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma865; CHECK-NEXT:    vfmadd.vv v8, v10, v9866; CHECK-NEXT:    ret867  %vd = call <vscale x 2 x float> @llvm.experimental.constrained.fma.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vc, <vscale x 2 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")868  ret <vscale x 2 x float> %vd869}870 871define <vscale x 2 x float> @vfmadd_vf_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, float %c) strictfp {872; CHECK-LABEL: vfmadd_vf_nxv2f32:873; CHECK:       # %bb.0:874; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma875; CHECK-NEXT:    vfmacc.vf v8, fa0, v9876; CHECK-NEXT:    ret877  %head = insertelement <vscale x 2 x float> poison, float %c, i32 0878  %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer879  %vd = call <vscale x 2 x float> @llvm.experimental.constrained.fma.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %splat, <vscale x 2 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")880  ret <vscale x 2 x float> %vd881}882 883define <vscale x 4 x float> @vfmadd_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x float> %vc) strictfp {884; CHECK-LABEL: vfmadd_vv_nxv4f32:885; CHECK:       # %bb.0:886; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma887; CHECK-NEXT:    vfmadd.vv v8, v10, v12888; CHECK-NEXT:    ret889  %vd = call <vscale x 4 x float> @llvm.experimental.constrained.fma.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x float> %vc, metadata !"round.dynamic", metadata !"fpexcept.strict")890  ret <vscale x 4 x float> %vd891}892 893define <vscale x 4 x float> @vfmadd_vf_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, float %c) strictfp {894; CHECK-LABEL: vfmadd_vf_nxv4f32:895; CHECK:       # %bb.0:896; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma897; CHECK-NEXT:    vfmadd.vf v8, fa0, v10898; CHECK-NEXT:    ret899  %head = insertelement <vscale x 4 x float> poison, float %c, i32 0900  %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer901  %vd = call <vscale x 4 x float> @llvm.experimental.constrained.fma.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %splat, <vscale x 4 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")902  ret <vscale x 4 x float> %vd903}904 905define <vscale x 8 x float> @vfmadd_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x float> %vc) strictfp {906; CHECK-LABEL: vfmadd_vv_nxv8f32:907; CHECK:       # %bb.0:908; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma909; CHECK-NEXT:    vfmacc.vv v8, v16, v12910; CHECK-NEXT:    ret911  %vd = call <vscale x 8 x float> @llvm.experimental.constrained.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %vc, <vscale x 8 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")912  ret <vscale x 8 x float> %vd913}914 915define <vscale x 8 x float> @vfmadd_vf_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, float %c) strictfp {916; CHECK-LABEL: vfmadd_vf_nxv8f32:917; CHECK:       # %bb.0:918; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma919; CHECK-NEXT:    vfmacc.vf v8, fa0, v12920; CHECK-NEXT:    ret921  %head = insertelement <vscale x 8 x float> poison, float %c, i32 0922  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer923  %vd = call <vscale x 8 x float> @llvm.experimental.constrained.fma.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %splat, <vscale x 8 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")924  ret <vscale x 8 x float> %vd925}926 927define <vscale x 16 x float> @vfmadd_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x float> %vc) strictfp {928; CHECK-LABEL: vfmadd_vv_nxv16f32:929; CHECK:       # %bb.0:930; CHECK-NEXT:    vl8re32.v v24, (a0)931; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma932; CHECK-NEXT:    vfmadd.vv v8, v24, v16933; CHECK-NEXT:    ret934  %vd = call <vscale x 16 x float> @llvm.experimental.constrained.fma.nxv16f32(<vscale x 16 x float> %vc, <vscale x 16 x float> %va, <vscale x 16 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")935  ret <vscale x 16 x float> %vd936}937 938define <vscale x 16 x float> @vfmadd_vf_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, float %c) strictfp {939; CHECK-LABEL: vfmadd_vf_nxv16f32:940; CHECK:       # %bb.0:941; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma942; CHECK-NEXT:    vfmadd.vf v8, fa0, v16943; CHECK-NEXT:    ret944  %head = insertelement <vscale x 16 x float> poison, float %c, i32 0945  %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer946  %vd = call <vscale x 16 x float> @llvm.experimental.constrained.fma.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %splat, <vscale x 16 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")947  ret <vscale x 16 x float> %vd948}949 950define <vscale x 1 x double> @vfmadd_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc) strictfp {951; CHECK-LABEL: vfmadd_vv_nxv1f64:952; CHECK:       # %bb.0:953; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma954; CHECK-NEXT:    vfmadd.vv v8, v9, v10955; CHECK-NEXT:    ret956  %vd = call <vscale x 1 x double> @llvm.experimental.constrained.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x double> %vc, metadata !"round.dynamic", metadata !"fpexcept.strict")957  ret <vscale x 1 x double> %vd958}959 960define <vscale x 1 x double> @vfmadd_vf_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, double %c) strictfp {961; CHECK-LABEL: vfmadd_vf_nxv1f64:962; CHECK:       # %bb.0:963; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma964; CHECK-NEXT:    vfmadd.vf v8, fa0, v9965; CHECK-NEXT:    ret966  %head = insertelement <vscale x 1 x double> poison, double %c, i32 0967  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer968  %vd = call <vscale x 1 x double> @llvm.experimental.constrained.fma.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %splat, <vscale x 1 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")969  ret <vscale x 1 x double> %vd970}971 972define <vscale x 2 x double> @vfmadd_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x double> %vc) strictfp {973; CHECK-LABEL: vfmadd_vv_nxv2f64:974; CHECK:       # %bb.0:975; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma976; CHECK-NEXT:    vfmadd.vv v8, v12, v10977; CHECK-NEXT:    ret978  %vd = call <vscale x 2 x double> @llvm.experimental.constrained.fma.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vc, <vscale x 2 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")979  ret <vscale x 2 x double> %vd980}981 982define <vscale x 2 x double> @vfmadd_vf_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, double %c) strictfp {983; CHECK-LABEL: vfmadd_vf_nxv2f64:984; CHECK:       # %bb.0:985; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma986; CHECK-NEXT:    vfmacc.vf v8, fa0, v10987; CHECK-NEXT:    ret988  %head = insertelement <vscale x 2 x double> poison, double %c, i32 0989  %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer990  %vd = call <vscale x 2 x double> @llvm.experimental.constrained.fma.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %splat, <vscale x 2 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")991  ret <vscale x 2 x double> %vd992}993 994define <vscale x 4 x double> @vfmadd_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x double> %vc) strictfp {995; CHECK-LABEL: vfmadd_vv_nxv4f64:996; CHECK:       # %bb.0:997; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma998; CHECK-NEXT:    vfmadd.vv v8, v12, v16999; CHECK-NEXT:    ret1000  %vd = call <vscale x 4 x double> @llvm.experimental.constrained.fma.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x double> %vc, metadata !"round.dynamic", metadata !"fpexcept.strict")1001  ret <vscale x 4 x double> %vd1002}1003 1004define <vscale x 4 x double> @vfmadd_vf_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, double %c) strictfp {1005; CHECK-LABEL: vfmadd_vf_nxv4f64:1006; CHECK:       # %bb.0:1007; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma1008; CHECK-NEXT:    vfmadd.vf v8, fa0, v121009; CHECK-NEXT:    ret1010  %head = insertelement <vscale x 4 x double> poison, double %c, i32 01011  %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1012  %vd = call <vscale x 4 x double> @llvm.experimental.constrained.fma.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %splat, <vscale x 4 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.strict")1013  ret <vscale x 4 x double> %vd1014}1015 1016define <vscale x 8 x double> @vfmadd_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x double> %vc) strictfp {1017; CHECK-LABEL: vfmadd_vv_nxv8f64:1018; CHECK:       # %bb.0:1019; CHECK-NEXT:    vl8re64.v v24, (a0)1020; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1021; CHECK-NEXT:    vfmacc.vv v8, v16, v241022; CHECK-NEXT:    ret1023  %vd = call <vscale x 8 x double> @llvm.experimental.constrained.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %vc, <vscale x 8 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1024  ret <vscale x 8 x double> %vd1025}1026 1027define <vscale x 8 x double> @vfmadd_vf_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, double %c) strictfp {1028; CHECK-LABEL: vfmadd_vf_nxv8f64:1029; CHECK:       # %bb.0:1030; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma1031; CHECK-NEXT:    vfmacc.vf v8, fa0, v161032; CHECK-NEXT:    ret1033  %head = insertelement <vscale x 8 x double> poison, double %c, i32 01034  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1035  %vd = call <vscale x 8 x double> @llvm.experimental.constrained.fma.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %splat, <vscale x 8 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1036  ret <vscale x 8 x double> %vd1037}1038