brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.5 KiB · aec970a Raw
348 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zvfh,+zvfbfwma -verify-machineinstrs | FileCheck %s --check-prefix=ZVFBFWMA3; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zvfh,+zvfbfwma -verify-machineinstrs | FileCheck %s --check-prefix=ZVFBFWMA4; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zvfh,+zvfbfmin -verify-machineinstrs | FileCheck %s --check-prefix=ZVFBFMIN5; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zvfh,+zvfbfmin -verify-machineinstrs | FileCheck %s --check-prefix=ZVFBFMIN6 7define <1 x float> @vfwmaccbf16_vv_v1f32(<1 x float> %a, <1 x bfloat> %b, <1 x bfloat> %c) {8; ZVFBFWMA-LABEL: vfwmaccbf16_vv_v1f32:9; ZVFBFWMA:       # %bb.0:10; ZVFBFWMA-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma11; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v9, v1012; ZVFBFWMA-NEXT:    ret13;14; ZVFBFMIN-LABEL: vfwmaccbf16_vv_v1f32:15; ZVFBFMIN:       # %bb.0:16; ZVFBFMIN-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma17; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v11, v918; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v9, v1019; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma20; ZVFBFMIN-NEXT:    vfmacc.vv v8, v11, v921; ZVFBFMIN-NEXT:    ret22  %b.ext = fpext <1 x bfloat> %b to <1 x float>23  %c.ext = fpext <1 x bfloat> %c to <1 x float>24  %res = call <1 x float> @llvm.fma.v1f32(<1 x float> %b.ext, <1 x float> %c.ext, <1 x float> %a)25  ret <1 x float> %res26}27 28define <1 x float> @vfwmaccbf16_vf_v1f32(<1 x float> %a, bfloat %b, <1 x bfloat> %c) {29; ZVFBFWMA-LABEL: vfwmaccbf16_vf_v1f32:30; ZVFBFWMA:       # %bb.0:31; ZVFBFWMA-NEXT:    fmv.x.h a0, fa032; ZVFBFWMA-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma33; ZVFBFWMA-NEXT:    vmv.s.x v10, a034; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v10, v935; ZVFBFWMA-NEXT:    ret36;37; ZVFBFMIN-LABEL: vfwmaccbf16_vf_v1f32:38; ZVFBFMIN:       # %bb.0:39; ZVFBFMIN-NEXT:    fmv.x.w a0, fa040; ZVFBFMIN-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma41; ZVFBFMIN-NEXT:    vmv.s.x v10, a042; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v11, v1043; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v10, v944; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma45; ZVFBFMIN-NEXT:    vfmacc.vv v8, v11, v1046; ZVFBFMIN-NEXT:    ret47  %b.head = insertelement <1 x bfloat> poison, bfloat %b, i32 048  %b.splat = shufflevector <1 x bfloat> %b.head, <1 x bfloat> poison, <1 x i32> zeroinitializer49  %b.ext = fpext <1 x bfloat> %b.splat to <1 x float>50  %c.ext = fpext <1 x bfloat> %c to <1 x float>51  %res = call <1 x float> @llvm.fma.v1f32(<1 x float> %b.ext, <1 x float> %c.ext, <1 x float> %a)52  ret <1 x float> %res53}54 55define <2 x float> @vfwmaccbf16_vv_v2f32(<2 x float> %a, <2 x bfloat> %b, <2 x bfloat> %c) {56; ZVFBFWMA-LABEL: vfwmaccbf16_vv_v2f32:57; ZVFBFWMA:       # %bb.0:58; ZVFBFWMA-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma59; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v9, v1060; ZVFBFWMA-NEXT:    ret61;62; ZVFBFMIN-LABEL: vfwmaccbf16_vv_v2f32:63; ZVFBFMIN:       # %bb.0:64; ZVFBFMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma65; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v11, v966; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v9, v1067; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma68; ZVFBFMIN-NEXT:    vfmacc.vv v8, v11, v969; ZVFBFMIN-NEXT:    ret70  %b.ext = fpext <2 x bfloat> %b to <2 x float>71  %c.ext = fpext <2 x bfloat> %c to <2 x float>72  %res = call <2 x float> @llvm.fma.v2f32(<2 x float> %b.ext, <2 x float> %c.ext, <2 x float> %a)73  ret <2 x float> %res74}75 76define <2 x float> @vfwmaccbf16_vf_v2f32(<2 x float> %a, bfloat %b, <2 x bfloat> %c) {77; ZVFBFWMA-LABEL: vfwmaccbf16_vf_v2f32:78; ZVFBFWMA:       # %bb.0:79; ZVFBFWMA-NEXT:    fmv.x.h a0, fa080; ZVFBFWMA-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma81; ZVFBFWMA-NEXT:    vmv.v.x v10, a082; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v10, v983; ZVFBFWMA-NEXT:    ret84;85; ZVFBFMIN-LABEL: vfwmaccbf16_vf_v2f32:86; ZVFBFMIN:       # %bb.0:87; ZVFBFMIN-NEXT:    fmv.x.w a0, fa088; ZVFBFMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma89; ZVFBFMIN-NEXT:    vmv.v.x v10, a090; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v11, v1091; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v10, v992; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma93; ZVFBFMIN-NEXT:    vfmacc.vv v8, v11, v1094; ZVFBFMIN-NEXT:    ret95  %b.head = insertelement <2 x bfloat> poison, bfloat %b, i32 096  %b.splat = shufflevector <2 x bfloat> %b.head, <2 x bfloat> poison, <2 x i32> zeroinitializer97  %b.ext = fpext <2 x bfloat> %b.splat to <2 x float>98  %c.ext = fpext <2 x bfloat> %c to <2 x float>99  %res = call <2 x float> @llvm.fma.v2f32(<2 x float> %b.ext, <2 x float> %c.ext, <2 x float> %a)100  ret <2 x float> %res101}102 103define <4 x float> @vfwmaccbf16_vv_v4f32(<4 x float> %a, <4 x bfloat> %b, <4 x bfloat> %c) {104; ZVFBFWMA-LABEL: vfwmaccbf16_vv_v4f32:105; ZVFBFWMA:       # %bb.0:106; ZVFBFWMA-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma107; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v9, v10108; ZVFBFWMA-NEXT:    ret109;110; ZVFBFMIN-LABEL: vfwmaccbf16_vv_v4f32:111; ZVFBFMIN:       # %bb.0:112; ZVFBFMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma113; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v11, v9114; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v9, v10115; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma116; ZVFBFMIN-NEXT:    vfmacc.vv v8, v11, v9117; ZVFBFMIN-NEXT:    ret118  %b.ext = fpext <4 x bfloat> %b to <4 x float>119  %c.ext = fpext <4 x bfloat> %c to <4 x float>120  %res = call <4 x float> @llvm.fma.v4f32(<4 x float> %b.ext, <4 x float> %c.ext, <4 x float> %a)121  ret <4 x float> %res122}123 124define <4 x float> @vfwmaccbf16_vf_v4f32(<4 x float> %a, bfloat %b, <4 x bfloat> %c) {125; ZVFBFWMA-LABEL: vfwmaccbf16_vf_v4f32:126; ZVFBFWMA:       # %bb.0:127; ZVFBFWMA-NEXT:    fmv.x.h a0, fa0128; ZVFBFWMA-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma129; ZVFBFWMA-NEXT:    vmv.v.x v10, a0130; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v10, v9131; ZVFBFWMA-NEXT:    ret132;133; ZVFBFMIN-LABEL: vfwmaccbf16_vf_v4f32:134; ZVFBFMIN:       # %bb.0:135; ZVFBFMIN-NEXT:    fmv.x.w a0, fa0136; ZVFBFMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma137; ZVFBFMIN-NEXT:    vmv.v.x v10, a0138; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v11, v10139; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v10, v9140; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma141; ZVFBFMIN-NEXT:    vfmacc.vv v8, v11, v10142; ZVFBFMIN-NEXT:    ret143  %b.head = insertelement <4 x bfloat> poison, bfloat %b, i32 0144  %b.splat = shufflevector <4 x bfloat> %b.head, <4 x bfloat> poison, <4 x i32> zeroinitializer145  %b.ext = fpext <4 x bfloat> %b.splat to <4 x float>146  %c.ext = fpext <4 x bfloat> %c to <4 x float>147  %res = call <4 x float> @llvm.fma.v4f32(<4 x float> %b.ext, <4 x float> %c.ext, <4 x float> %a)148  ret <4 x float> %res149}150 151define <8 x float> @vfwmaccbf16_vv_v8f32(<8 x float> %a, <8 x bfloat> %b, <8 x bfloat> %c) {152; ZVFBFWMA-LABEL: vfwmaccbf16_vv_v8f32:153; ZVFBFWMA:       # %bb.0:154; ZVFBFWMA-NEXT:    vsetivli zero, 8, e16, m1, ta, ma155; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v10, v11156; ZVFBFWMA-NEXT:    ret157;158; ZVFBFMIN-LABEL: vfwmaccbf16_vv_v8f32:159; ZVFBFMIN:       # %bb.0:160; ZVFBFMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma161; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v12, v10162; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v14, v11163; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma164; ZVFBFMIN-NEXT:    vfmacc.vv v8, v12, v14165; ZVFBFMIN-NEXT:    ret166  %b.ext = fpext <8 x bfloat> %b to <8 x float>167  %c.ext = fpext <8 x bfloat> %c to <8 x float>168  %res = call <8 x float> @llvm.fma.v8f32(<8 x float> %b.ext, <8 x float> %c.ext, <8 x float> %a)169  ret <8 x float> %res170}171 172define <8 x float> @vfwmaccbf16_vf_v8f32(<8 x float> %a, bfloat %b, <8 x bfloat> %c) {173; ZVFBFWMA-LABEL: vfwmaccbf16_vf_v8f32:174; ZVFBFWMA:       # %bb.0:175; ZVFBFWMA-NEXT:    fmv.x.h a0, fa0176; ZVFBFWMA-NEXT:    vsetivli zero, 8, e16, m1, ta, ma177; ZVFBFWMA-NEXT:    vmv.v.x v11, a0178; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v11, v10179; ZVFBFWMA-NEXT:    ret180;181; ZVFBFMIN-LABEL: vfwmaccbf16_vf_v8f32:182; ZVFBFMIN:       # %bb.0:183; ZVFBFMIN-NEXT:    fmv.x.w a0, fa0184; ZVFBFMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma185; ZVFBFMIN-NEXT:    vmv.v.x v11, a0186; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v12, v11187; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v14, v10188; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma189; ZVFBFMIN-NEXT:    vfmacc.vv v8, v12, v14190; ZVFBFMIN-NEXT:    ret191  %b.head = insertelement <8 x bfloat> poison, bfloat %b, i32 0192  %b.splat = shufflevector <8 x bfloat> %b.head, <8 x bfloat> poison, <8 x i32> zeroinitializer193  %b.ext = fpext <8 x bfloat> %b.splat to <8 x float>194  %c.ext = fpext <8 x bfloat> %c to <8 x float>195  %res = call <8 x float> @llvm.fma.v8f32(<8 x float> %b.ext, <8 x float> %c.ext, <8 x float> %a)196  ret <8 x float> %res197}198 199define <16 x float> @vfwmaccbf16_vv_v16f32(<16 x float> %a, <16 x bfloat> %b, <16 x bfloat> %c) {200; ZVFBFWMA-LABEL: vfwmaccbf16_vv_v16f32:201; ZVFBFWMA:       # %bb.0:202; ZVFBFWMA-NEXT:    vsetivli zero, 16, e16, m2, ta, ma203; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v12, v14204; ZVFBFWMA-NEXT:    ret205;206; ZVFBFMIN-LABEL: vfwmaccbf16_vv_v16f32:207; ZVFBFMIN:       # %bb.0:208; ZVFBFMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma209; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v16, v12210; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v20, v14211; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma212; ZVFBFMIN-NEXT:    vfmacc.vv v8, v16, v20213; ZVFBFMIN-NEXT:    ret214  %b.ext = fpext <16 x bfloat> %b to <16 x float>215  %c.ext = fpext <16 x bfloat> %c to <16 x float>216  %res = call <16 x float> @llvm.fma.v16f32(<16 x float> %b.ext, <16 x float> %c.ext, <16 x float> %a)217  ret <16 x float> %res218}219 220define <16 x float> @vfwmaccbf16_vf_v16f32(<16 x float> %a, bfloat %b, <16 x bfloat> %c) {221; ZVFBFWMA-LABEL: vfwmaccbf16_vf_v16f32:222; ZVFBFWMA:       # %bb.0:223; ZVFBFWMA-NEXT:    fmv.x.h a0, fa0224; ZVFBFWMA-NEXT:    vsetivli zero, 16, e16, m2, ta, ma225; ZVFBFWMA-NEXT:    vmv.v.x v14, a0226; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v14, v12227; ZVFBFWMA-NEXT:    ret228;229; ZVFBFMIN-LABEL: vfwmaccbf16_vf_v16f32:230; ZVFBFMIN:       # %bb.0:231; ZVFBFMIN-NEXT:    fmv.x.w a0, fa0232; ZVFBFMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma233; ZVFBFMIN-NEXT:    vmv.v.x v14, a0234; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v16, v14235; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v20, v12236; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma237; ZVFBFMIN-NEXT:    vfmacc.vv v8, v16, v20238; ZVFBFMIN-NEXT:    ret239  %b.head = insertelement <16 x bfloat> poison, bfloat %b, i32 0240  %b.splat = shufflevector <16 x bfloat> %b.head, <16 x bfloat> poison, <16 x i32> zeroinitializer241  %b.ext = fpext <16 x bfloat> %b.splat to <16 x float>242  %c.ext = fpext <16 x bfloat> %c to <16 x float>243  %res = call <16 x float> @llvm.fma.v16f32(<16 x float> %b.ext, <16 x float> %c.ext, <16 x float> %a)244  ret <16 x float> %res245}246 247define <32 x float> @vfwmaccbf32_vv_v32f32(<32 x float> %a, <32 x bfloat> %b, <32 x bfloat> %c) {248; ZVFBFWMA-LABEL: vfwmaccbf32_vv_v32f32:249; ZVFBFWMA:       # %bb.0:250; ZVFBFWMA-NEXT:    li a0, 32251; ZVFBFWMA-NEXT:    vsetvli zero, a0, e16, m4, ta, ma252; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v16, v20253; ZVFBFWMA-NEXT:    ret254;255; ZVFBFMIN-LABEL: vfwmaccbf32_vv_v32f32:256; ZVFBFMIN:       # %bb.0:257; ZVFBFMIN-NEXT:    li a0, 32258; ZVFBFMIN-NEXT:    vsetvli zero, a0, e16, m4, ta, ma259; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v24, v16260; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v0, v20261; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma262; ZVFBFMIN-NEXT:    vfmacc.vv v8, v24, v0263; ZVFBFMIN-NEXT:    ret264  %b.ext = fpext <32 x bfloat> %b to <32 x float>265  %c.ext = fpext <32 x bfloat> %c to <32 x float>266  %res = call <32 x float> @llvm.fma.v32f32(<32 x float> %b.ext, <32 x float> %c.ext, <32 x float> %a)267  ret <32 x float> %res268}269 270define <32 x float> @vfwmaccbf32_vf_v32f32(<32 x float> %a, bfloat %b, <32 x bfloat> %c) {271; ZVFBFWMA-LABEL: vfwmaccbf32_vf_v32f32:272; ZVFBFWMA:       # %bb.0:273; ZVFBFWMA-NEXT:    fmv.x.h a0, fa0274; ZVFBFWMA-NEXT:    li a1, 32275; ZVFBFWMA-NEXT:    vsetvli zero, a1, e16, m4, ta, ma276; ZVFBFWMA-NEXT:    vmv.v.x v20, a0277; ZVFBFWMA-NEXT:    vfwmaccbf16.vv v8, v20, v16278; ZVFBFWMA-NEXT:    ret279;280; ZVFBFMIN-LABEL: vfwmaccbf32_vf_v32f32:281; ZVFBFMIN:       # %bb.0:282; ZVFBFMIN-NEXT:    fmv.x.w a0, fa0283; ZVFBFMIN-NEXT:    li a1, 32284; ZVFBFMIN-NEXT:    vsetvli zero, a1, e16, m4, ta, ma285; ZVFBFMIN-NEXT:    vmv.v.x v20, a0286; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v24, v20287; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v0, v16288; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma289; ZVFBFMIN-NEXT:    vfmacc.vv v8, v24, v0290; ZVFBFMIN-NEXT:    ret291  %b.head = insertelement <32 x bfloat> poison, bfloat %b, i32 0292  %b.splat = shufflevector <32 x bfloat> %b.head, <32 x bfloat> poison, <32 x i32> zeroinitializer293  %b.ext = fpext <32 x bfloat> %b.splat to <32 x float>294  %c.ext = fpext <32 x bfloat> %c to <32 x float>295  %res = call <32 x float> @llvm.fma.v32f32(<32 x float> %b.ext, <32 x float> %c.ext, <32 x float> %a)296  ret <32 x float> %res297}298 299define <4 x float> @vfwmaccbf16_vf_v4f32_scalar_extend(<4 x float> %rd, bfloat %a, <4 x bfloat> %b) local_unnamed_addr #0 {300; ZVFBFWMA-LABEL: vfwmaccbf16_vf_v4f32_scalar_extend:301; ZVFBFWMA:       # %bb.0:302; ZVFBFWMA-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma303; ZVFBFWMA-NEXT:    vfwmaccbf16.vf v8, fa0, v9304; ZVFBFWMA-NEXT:    ret305;306; ZVFBFMIN-LABEL: vfwmaccbf16_vf_v4f32_scalar_extend:307; ZVFBFMIN:       # %bb.0:308; ZVFBFMIN-NEXT:    fmv.x.w a0, fa0309; ZVFBFMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma310; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v10, v9311; ZVFBFMIN-NEXT:    slli a0, a0, 16312; ZVFBFMIN-NEXT:    fmv.w.x fa5, a0313; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma314; ZVFBFMIN-NEXT:    vfmacc.vf v8, fa5, v10315; ZVFBFMIN-NEXT:    ret316  %b_ext = fpext <4 x bfloat> %b to <4 x float>317  %a_extend = fpext bfloat %a to float318  %a_insert = insertelement <4 x float> poison, float %a_extend, i64 0319  %a_shuffle = shufflevector <4 x float> %a_insert, <4 x float> poison, <4 x i32> zeroinitializer320  %fma = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a_shuffle, <4 x float> %b_ext, <4 x float> %rd)321  ret <4 x float> %fma322}323 324; Negative test with a mix of bfloat and half fpext.325define <4 x float> @mix(<4 x float> %rd, <4 x half> %a, <4 x bfloat> %b) {326; ZVFBFWMA-LABEL: mix:327; ZVFBFWMA:       # %bb.0:328; ZVFBFWMA-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma329; ZVFBFWMA-NEXT:    vfwcvt.f.f.v v11, v9330; ZVFBFWMA-NEXT:    vfwcvtbf16.f.f.v v9, v10331; ZVFBFWMA-NEXT:    vsetvli zero, zero, e32, m1, ta, ma332; ZVFBFWMA-NEXT:    vfmacc.vv v8, v11, v9333; ZVFBFWMA-NEXT:    ret334;335; ZVFBFMIN-LABEL: mix:336; ZVFBFMIN:       # %bb.0:337; ZVFBFMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma338; ZVFBFMIN-NEXT:    vfwcvt.f.f.v v11, v9339; ZVFBFMIN-NEXT:    vfwcvtbf16.f.f.v v9, v10340; ZVFBFMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma341; ZVFBFMIN-NEXT:    vfmacc.vv v8, v11, v9342; ZVFBFMIN-NEXT:    ret343  %a_ext = fpext <4 x half> %a to <4 x float>344  %b_ext = fpext <4 x bfloat> %b to <4 x float>345  %fma = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a_ext, <4 x float> %b_ext, <4 x float> %rd)346  ret <4 x float> %fma347}348