377 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+experimental-zvfbfa \3; RUN: -verify-machineinstrs -target-abi=ilp32d | FileCheck %s4; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+experimental-zvfbfa \5; RUN: -verify-machineinstrs -target-abi=lp64d | FileCheck %s6 7define <vscale x 1 x float> @intrinsic_vfwmsac_vv_nxv1f32_nxv1bf16_nxv1bf16(<vscale x 1 x float> %0, <vscale x 1 x bfloat> %1, <vscale x 1 x bfloat> %2, iXLen %3) nounwind {8; CHECK-LABEL: intrinsic_vfwmsac_vv_nxv1f32_nxv1bf16_nxv1bf16:9; CHECK: # %bb.0: # %entry10; CHECK-NEXT: fsrmi a1, 011; CHECK-NEXT: vsetvli zero, a0, e16alt, mf4, tu, ma12; CHECK-NEXT: vfwmsac.vv v8, v9, v1013; CHECK-NEXT: fsrm a114; CHECK-NEXT: ret15entry:16 %a = call <vscale x 1 x float> @llvm.riscv.vfwmsac.nxv1f32.nxv1bf16(17 <vscale x 1 x float> %0,18 <vscale x 1 x bfloat> %1,19 <vscale x 1 x bfloat> %2,20 iXLen 0, iXLen %3, iXLen 0)21 22 ret <vscale x 1 x float> %a23}24 25define <vscale x 1 x float> @intrinsic_vfwmsac_mask_vv_nxv1f32_nxv1bf16_nxv1bf16(<vscale x 1 x float> %0, <vscale x 1 x bfloat> %1, <vscale x 1 x bfloat> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {26; CHECK-LABEL: intrinsic_vfwmsac_mask_vv_nxv1f32_nxv1bf16_nxv1bf16:27; CHECK: # %bb.0: # %entry28; CHECK-NEXT: fsrmi a1, 029; CHECK-NEXT: vsetvli zero, a0, e16alt, mf4, tu, mu30; CHECK-NEXT: vfwmsac.vv v8, v9, v10, v0.t31; CHECK-NEXT: fsrm a132; CHECK-NEXT: ret33entry:34 %a = call <vscale x 1 x float> @llvm.riscv.vfwmsac.mask.nxv1f32.nxv1bf16(35 <vscale x 1 x float> %0,36 <vscale x 1 x bfloat> %1,37 <vscale x 1 x bfloat> %2,38 <vscale x 1 x i1> %3,39 iXLen 0, iXLen %4, iXLen 0)40 41 ret <vscale x 1 x float> %a42}43 44define <vscale x 2 x float> @intrinsic_vfwmsac_vv_nxv2f32_nxv2bf16_nxv2bf16(<vscale x 2 x float> %0, <vscale x 2 x bfloat> %1, <vscale x 2 x bfloat> %2, iXLen %3) nounwind {45; CHECK-LABEL: intrinsic_vfwmsac_vv_nxv2f32_nxv2bf16_nxv2bf16:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: fsrmi a1, 048; CHECK-NEXT: vsetvli zero, a0, e16alt, mf2, tu, ma49; CHECK-NEXT: vfwmsac.vv v8, v9, v1050; CHECK-NEXT: fsrm a151; CHECK-NEXT: ret52entry:53 %a = call <vscale x 2 x float> @llvm.riscv.vfwmsac.nxv2f32.nxv2bf16(54 <vscale x 2 x float> %0,55 <vscale x 2 x bfloat> %1,56 <vscale x 2 x bfloat> %2,57 iXLen 0, iXLen %3, iXLen 0)58 59 ret <vscale x 2 x float> %a60}61 62define <vscale x 2 x float> @intrinsic_vfwmsac_mask_vv_nxv2f32_nxv2bf16_nxv2bf16(<vscale x 2 x float> %0, <vscale x 2 x bfloat> %1, <vscale x 2 x bfloat> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {63; CHECK-LABEL: intrinsic_vfwmsac_mask_vv_nxv2f32_nxv2bf16_nxv2bf16:64; CHECK: # %bb.0: # %entry65; CHECK-NEXT: fsrmi a1, 066; CHECK-NEXT: vsetvli zero, a0, e16alt, mf2, tu, mu67; CHECK-NEXT: vfwmsac.vv v8, v9, v10, v0.t68; CHECK-NEXT: fsrm a169; CHECK-NEXT: ret70entry:71 %a = call <vscale x 2 x float> @llvm.riscv.vfwmsac.mask.nxv2f32.nxv2bf16(72 <vscale x 2 x float> %0,73 <vscale x 2 x bfloat> %1,74 <vscale x 2 x bfloat> %2,75 <vscale x 2 x i1> %3,76 iXLen 0, iXLen %4, iXLen 0)77 78 ret <vscale x 2 x float> %a79}80 81define <vscale x 4 x float> @intrinsic_vfwmsac_vv_nxv4f32_nxv4bf16_nxv4bf16(<vscale x 4 x float> %0, <vscale x 4 x bfloat> %1, <vscale x 4 x bfloat> %2, iXLen %3) nounwind {82; CHECK-LABEL: intrinsic_vfwmsac_vv_nxv4f32_nxv4bf16_nxv4bf16:83; CHECK: # %bb.0: # %entry84; CHECK-NEXT: fsrmi a1, 085; CHECK-NEXT: vsetvli zero, a0, e16alt, m1, tu, ma86; CHECK-NEXT: vfwmsac.vv v8, v10, v1187; CHECK-NEXT: fsrm a188; CHECK-NEXT: ret89entry:90 %a = call <vscale x 4 x float> @llvm.riscv.vfwmsac.nxv4f32.nxv4bf16(91 <vscale x 4 x float> %0,92 <vscale x 4 x bfloat> %1,93 <vscale x 4 x bfloat> %2,94 iXLen 0, iXLen %3, iXLen 0)95 96 ret <vscale x 4 x float> %a97}98 99define <vscale x 4 x float> @intrinsic_vfwmsac_mask_vv_nxv4f32_nxv4bf16_nxv4bf16(<vscale x 4 x float> %0, <vscale x 4 x bfloat> %1, <vscale x 4 x bfloat> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {100; CHECK-LABEL: intrinsic_vfwmsac_mask_vv_nxv4f32_nxv4bf16_nxv4bf16:101; CHECK: # %bb.0: # %entry102; CHECK-NEXT: fsrmi a1, 0103; CHECK-NEXT: vsetvli zero, a0, e16alt, m1, tu, mu104; CHECK-NEXT: vfwmsac.vv v8, v10, v11, v0.t105; CHECK-NEXT: fsrm a1106; CHECK-NEXT: ret107entry:108 %a = call <vscale x 4 x float> @llvm.riscv.vfwmsac.mask.nxv4f32.nxv4bf16(109 <vscale x 4 x float> %0,110 <vscale x 4 x bfloat> %1,111 <vscale x 4 x bfloat> %2,112 <vscale x 4 x i1> %3,113 iXLen 0, iXLen %4, iXLen 0)114 115 ret <vscale x 4 x float> %a116}117 118define <vscale x 8 x float> @intrinsic_vfwmsac_vv_nxv8f32_nxv8bf16_nxv8bf16(<vscale x 8 x float> %0, <vscale x 8 x bfloat> %1, <vscale x 8 x bfloat> %2, iXLen %3) nounwind {119; CHECK-LABEL: intrinsic_vfwmsac_vv_nxv8f32_nxv8bf16_nxv8bf16:120; CHECK: # %bb.0: # %entry121; CHECK-NEXT: fsrmi a1, 0122; CHECK-NEXT: vsetvli zero, a0, e16alt, m2, tu, ma123; CHECK-NEXT: vfwmsac.vv v8, v12, v14124; CHECK-NEXT: fsrm a1125; CHECK-NEXT: ret126entry:127 %a = call <vscale x 8 x float> @llvm.riscv.vfwmsac.nxv8f32.nxv8bf16(128 <vscale x 8 x float> %0,129 <vscale x 8 x bfloat> %1,130 <vscale x 8 x bfloat> %2,131 iXLen 0, iXLen %3, iXLen 0)132 133 ret <vscale x 8 x float> %a134}135 136define <vscale x 8 x float> @intrinsic_vfwmsac_mask_vv_nxv8f32_nxv8bf16_nxv8bf16(<vscale x 8 x float> %0, <vscale x 8 x bfloat> %1, <vscale x 8 x bfloat> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {137; CHECK-LABEL: intrinsic_vfwmsac_mask_vv_nxv8f32_nxv8bf16_nxv8bf16:138; CHECK: # %bb.0: # %entry139; CHECK-NEXT: fsrmi a1, 0140; CHECK-NEXT: vsetvli zero, a0, e16alt, m2, tu, mu141; CHECK-NEXT: vfwmsac.vv v8, v12, v14, v0.t142; CHECK-NEXT: fsrm a1143; CHECK-NEXT: ret144entry:145 %a = call <vscale x 8 x float> @llvm.riscv.vfwmsac.mask.nxv8f32.nxv8bf16(146 <vscale x 8 x float> %0,147 <vscale x 8 x bfloat> %1,148 <vscale x 8 x bfloat> %2,149 <vscale x 8 x i1> %3,150 iXLen 0, iXLen %4, iXLen 0)151 152 ret <vscale x 8 x float> %a153}154 155define <vscale x 16 x float> @intrinsic_vfwmsac_vv_nxv16f32_nxv16bf16_nxv16bf16(<vscale x 16 x float> %0, <vscale x 16 x bfloat> %1, <vscale x 16 x bfloat> %2, iXLen %3) nounwind {156; CHECK-LABEL: intrinsic_vfwmsac_vv_nxv16f32_nxv16bf16_nxv16bf16:157; CHECK: # %bb.0: # %entry158; CHECK-NEXT: fsrmi a1, 0159; CHECK-NEXT: vsetvli zero, a0, e16alt, m4, tu, ma160; CHECK-NEXT: vfwmsac.vv v8, v16, v20161; CHECK-NEXT: fsrm a1162; CHECK-NEXT: ret163entry:164 %a = call <vscale x 16 x float> @llvm.riscv.vfwmsac.nxv16f32.nxv16bf16(165 <vscale x 16 x float> %0,166 <vscale x 16 x bfloat> %1,167 <vscale x 16 x bfloat> %2,168 iXLen 0, iXLen %3, iXLen 0)169 170 ret <vscale x 16 x float> %a171}172 173define <vscale x 16 x float> @intrinsic_vfwmsac_mask_vv_nxv16f32_nxv16bf16_nxv16bf16(<vscale x 16 x float> %0, <vscale x 16 x bfloat> %1, <vscale x 16 x bfloat> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {174; CHECK-LABEL: intrinsic_vfwmsac_mask_vv_nxv16f32_nxv16bf16_nxv16bf16:175; CHECK: # %bb.0: # %entry176; CHECK-NEXT: fsrmi a1, 0177; CHECK-NEXT: vsetvli zero, a0, e16alt, m4, tu, mu178; CHECK-NEXT: vfwmsac.vv v8, v16, v20, v0.t179; CHECK-NEXT: fsrm a1180; CHECK-NEXT: ret181entry:182 %a = call <vscale x 16 x float> @llvm.riscv.vfwmsac.mask.nxv16f32.nxv16bf16(183 <vscale x 16 x float> %0,184 <vscale x 16 x bfloat> %1,185 <vscale x 16 x bfloat> %2,186 <vscale x 16 x i1> %3,187 iXLen 0, iXLen %4, iXLen 0)188 189 ret <vscale x 16 x float> %a190}191 192define <vscale x 1 x float> @intrinsic_vfwmsac_vf_nxv1f32_bf16_nxv1bf16(<vscale x 1 x float> %0, bfloat %1, <vscale x 1 x bfloat> %2, iXLen %3) nounwind {193; CHECK-LABEL: intrinsic_vfwmsac_vf_nxv1f32_bf16_nxv1bf16:194; CHECK: # %bb.0: # %entry195; CHECK-NEXT: fsrmi a1, 0196; CHECK-NEXT: vsetvli zero, a0, e16alt, mf4, tu, ma197; CHECK-NEXT: vfwmsac.vf v8, fa0, v9198; CHECK-NEXT: fsrm a1199; CHECK-NEXT: ret200entry:201 %a = call <vscale x 1 x float> @llvm.riscv.vfwmsac.nxv1f32.bf16(202 <vscale x 1 x float> %0,203 bfloat %1,204 <vscale x 1 x bfloat> %2,205 iXLen 0, iXLen %3, iXLen 0)206 207 ret <vscale x 1 x float> %a208}209 210define <vscale x 1 x float> @intrinsic_vfwmsac_mask_vf_nxv1f32_bf16_nxv1bf16(<vscale x 1 x float> %0, bfloat %1, <vscale x 1 x bfloat> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {211; CHECK-LABEL: intrinsic_vfwmsac_mask_vf_nxv1f32_bf16_nxv1bf16:212; CHECK: # %bb.0: # %entry213; CHECK-NEXT: fsrmi a1, 0214; CHECK-NEXT: vsetvli zero, a0, e16alt, mf4, tu, mu215; CHECK-NEXT: vfwmsac.vf v8, fa0, v9, v0.t216; CHECK-NEXT: fsrm a1217; CHECK-NEXT: ret218entry:219 %a = call <vscale x 1 x float> @llvm.riscv.vfwmsac.mask.nxv1f32.bf16(220 <vscale x 1 x float> %0,221 bfloat %1,222 <vscale x 1 x bfloat> %2,223 <vscale x 1 x i1> %3,224 iXLen 0, iXLen %4, iXLen 0)225 226 ret <vscale x 1 x float> %a227}228 229define <vscale x 2 x float> @intrinsic_vfwmsac_vf_nxv2f32_bf16_nxv2bf16(<vscale x 2 x float> %0, bfloat %1, <vscale x 2 x bfloat> %2, iXLen %3) nounwind {230; CHECK-LABEL: intrinsic_vfwmsac_vf_nxv2f32_bf16_nxv2bf16:231; CHECK: # %bb.0: # %entry232; CHECK-NEXT: fsrmi a1, 0233; CHECK-NEXT: vsetvli zero, a0, e16alt, mf2, tu, ma234; CHECK-NEXT: vfwmsac.vf v8, fa0, v9235; CHECK-NEXT: fsrm a1236; CHECK-NEXT: ret237entry:238 %a = call <vscale x 2 x float> @llvm.riscv.vfwmsac.nxv2f32.bf16(239 <vscale x 2 x float> %0,240 bfloat %1,241 <vscale x 2 x bfloat> %2,242 iXLen 0, iXLen %3, iXLen 0)243 244 ret <vscale x 2 x float> %a245}246 247define <vscale x 2 x float> @intrinsic_vfwmsac_mask_vf_nxv2f32_bf16_nxv2bf16(<vscale x 2 x float> %0, bfloat %1, <vscale x 2 x bfloat> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {248; CHECK-LABEL: intrinsic_vfwmsac_mask_vf_nxv2f32_bf16_nxv2bf16:249; CHECK: # %bb.0: # %entry250; CHECK-NEXT: fsrmi a1, 0251; CHECK-NEXT: vsetvli zero, a0, e16alt, mf2, tu, mu252; CHECK-NEXT: vfwmsac.vf v8, fa0, v9, v0.t253; CHECK-NEXT: fsrm a1254; CHECK-NEXT: ret255entry:256 %a = call <vscale x 2 x float> @llvm.riscv.vfwmsac.mask.nxv2f32.bf16(257 <vscale x 2 x float> %0,258 bfloat %1,259 <vscale x 2 x bfloat> %2,260 <vscale x 2 x i1> %3,261 iXLen 0, iXLen %4, iXLen 0)262 263 ret <vscale x 2 x float> %a264}265 266define <vscale x 4 x float> @intrinsic_vfwmsac_vf_nxv4f32_bf16_nxv4bf16(<vscale x 4 x float> %0, bfloat %1, <vscale x 4 x bfloat> %2, iXLen %3) nounwind {267; CHECK-LABEL: intrinsic_vfwmsac_vf_nxv4f32_bf16_nxv4bf16:268; CHECK: # %bb.0: # %entry269; CHECK-NEXT: fsrmi a1, 0270; CHECK-NEXT: vsetvli zero, a0, e16alt, m1, tu, ma271; CHECK-NEXT: vfwmsac.vf v8, fa0, v10272; CHECK-NEXT: fsrm a1273; CHECK-NEXT: ret274entry:275 %a = call <vscale x 4 x float> @llvm.riscv.vfwmsac.nxv4f32.bf16(276 <vscale x 4 x float> %0,277 bfloat %1,278 <vscale x 4 x bfloat> %2,279 iXLen 0, iXLen %3, iXLen 0)280 281 ret <vscale x 4 x float> %a282}283 284define <vscale x 4 x float> @intrinsic_vfwmsac_mask_vf_nxv4f32_bf16_nxv4bf16(<vscale x 4 x float> %0, bfloat %1, <vscale x 4 x bfloat> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {285; CHECK-LABEL: intrinsic_vfwmsac_mask_vf_nxv4f32_bf16_nxv4bf16:286; CHECK: # %bb.0: # %entry287; CHECK-NEXT: fsrmi a1, 0288; CHECK-NEXT: vsetvli zero, a0, e16alt, m1, tu, mu289; CHECK-NEXT: vfwmsac.vf v8, fa0, v10, v0.t290; CHECK-NEXT: fsrm a1291; CHECK-NEXT: ret292entry:293 %a = call <vscale x 4 x float> @llvm.riscv.vfwmsac.mask.nxv4f32.bf16(294 <vscale x 4 x float> %0,295 bfloat %1,296 <vscale x 4 x bfloat> %2,297 <vscale x 4 x i1> %3,298 iXLen 0, iXLen %4, iXLen 0)299 300 ret <vscale x 4 x float> %a301}302 303define <vscale x 8 x float> @intrinsic_vfwmsac_vf_nxv8f32_bf16_nxv8bf16(<vscale x 8 x float> %0, bfloat %1, <vscale x 8 x bfloat> %2, iXLen %3) nounwind {304; CHECK-LABEL: intrinsic_vfwmsac_vf_nxv8f32_bf16_nxv8bf16:305; CHECK: # %bb.0: # %entry306; CHECK-NEXT: fsrmi a1, 0307; CHECK-NEXT: vsetvli zero, a0, e16alt, m2, tu, ma308; CHECK-NEXT: vfwmsac.vf v8, fa0, v12309; CHECK-NEXT: fsrm a1310; CHECK-NEXT: ret311entry:312 %a = call <vscale x 8 x float> @llvm.riscv.vfwmsac.nxv8f32.bf16(313 <vscale x 8 x float> %0,314 bfloat %1,315 <vscale x 8 x bfloat> %2,316 iXLen 0, iXLen %3, iXLen 0)317 318 ret <vscale x 8 x float> %a319}320 321define <vscale x 8 x float> @intrinsic_vfwmsac_mask_vf_nxv8f32_bf16_nxv8bf16(<vscale x 8 x float> %0, bfloat %1, <vscale x 8 x bfloat> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {322; CHECK-LABEL: intrinsic_vfwmsac_mask_vf_nxv8f32_bf16_nxv8bf16:323; CHECK: # %bb.0: # %entry324; CHECK-NEXT: fsrmi a1, 0325; CHECK-NEXT: vsetvli zero, a0, e16alt, m2, tu, mu326; CHECK-NEXT: vfwmsac.vf v8, fa0, v12, v0.t327; CHECK-NEXT: fsrm a1328; CHECK-NEXT: ret329entry:330 %a = call <vscale x 8 x float> @llvm.riscv.vfwmsac.mask.nxv8f32.bf16(331 <vscale x 8 x float> %0,332 bfloat %1,333 <vscale x 8 x bfloat> %2,334 <vscale x 8 x i1> %3,335 iXLen 0, iXLen %4, iXLen 0)336 337 ret <vscale x 8 x float> %a338}339 340define <vscale x 16 x float> @intrinsic_vfwmsac_vf_nxv16f32_bf16_nxv16bf16(<vscale x 16 x float> %0, bfloat %1, <vscale x 16 x bfloat> %2, iXLen %3) nounwind {341; CHECK-LABEL: intrinsic_vfwmsac_vf_nxv16f32_bf16_nxv16bf16:342; CHECK: # %bb.0: # %entry343; CHECK-NEXT: fsrmi a1, 0344; CHECK-NEXT: vsetvli zero, a0, e16alt, m4, tu, ma345; CHECK-NEXT: vfwmsac.vf v8, fa0, v16346; CHECK-NEXT: fsrm a1347; CHECK-NEXT: ret348entry:349 %a = call <vscale x 16 x float> @llvm.riscv.vfwmsac.nxv16f32.bf16(350 <vscale x 16 x float> %0,351 bfloat %1,352 <vscale x 16 x bfloat> %2,353 iXLen 0, iXLen %3, iXLen 0)354 355 ret <vscale x 16 x float> %a356}357 358define <vscale x 16 x float> @intrinsic_vfwmsac_mask_vf_nxv16f32_bf16_nxv16bf16(<vscale x 16 x float> %0, bfloat %1, <vscale x 16 x bfloat> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {359; CHECK-LABEL: intrinsic_vfwmsac_mask_vf_nxv16f32_bf16_nxv16bf16:360; CHECK: # %bb.0: # %entry361; CHECK-NEXT: fsrmi a1, 0362; CHECK-NEXT: vsetvli zero, a0, e16alt, m4, tu, mu363; CHECK-NEXT: vfwmsac.vf v8, fa0, v16, v0.t364; CHECK-NEXT: fsrm a1365; CHECK-NEXT: ret366entry:367 %a = call <vscale x 16 x float> @llvm.riscv.vfwmsac.mask.nxv16f32.bf16(368 <vscale x 16 x float> %0,369 bfloat %1,370 <vscale x 16 x bfloat> %2,371 <vscale x 16 x i1> %3,372 iXLen 0, iXLen %4, iXLen 0)373 374 ret <vscale x 16 x float> %a375}376 377