@@ -1013,32 +1013,32 @@ let ManualCodegen = [{
10131013}] in {
10141014 let HasFRMRoundModeOp = true in {
10151015 // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
1016- defm vfadd : RVVFloatingBinBuiltinSetRoundingMode;
1017- defm vfsub : RVVFloatingBinBuiltinSetRoundingMode;
1018- defm vfrsub : RVVFloatingBinVFBuiltinSetRoundingMode;
1016+ defm vfadd : RVVFloatingBinBuiltinSetRoundingMode<HasBF=1> ;
1017+ defm vfsub : RVVFloatingBinBuiltinSetRoundingMode<HasBF=1> ;
1018+ defm vfrsub : RVVFloatingBinVFBuiltinSetRoundingMode<HasBF=1> ;
10191019
10201020 // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
10211021 // Widening FP add/subtract, 2*SEW = 2*SEW +/- SEW
10221022 defm vfwadd : RVVFloatingWidenOp0BinBuiltinSetRoundingMode;
10231023 defm vfwsub : RVVFloatingWidenOp0BinBuiltinSetRoundingMode;
10241024
10251025 // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
1026- defm vfmul : RVVFloatingBinBuiltinSetRoundingMode;
1026+ defm vfmul : RVVFloatingBinBuiltinSetRoundingMode<HasBF=1> ;
10271027 defm vfdiv : RVVFloatingBinBuiltinSetRoundingMode;
10281028 defm vfrdiv : RVVFloatingBinVFBuiltinSetRoundingMode;
10291029 }
10301030 // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
1031- defm vfadd : RVVFloatingBinBuiltinSet;
1032- defm vfsub : RVVFloatingBinBuiltinSet;
1033- defm vfrsub : RVVFloatingBinVFBuiltinSet;
1031+ defm vfadd : RVVFloatingBinBuiltinSet<HasBF=1> ;
1032+ defm vfsub : RVVFloatingBinBuiltinSet<HasBF=1> ;
1033+ defm vfrsub : RVVFloatingBinVFBuiltinSet<HasBF=1> ;
10341034
10351035 // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
10361036 // Widening FP add/subtract, 2*SEW = 2*SEW +/- SEW
10371037 defm vfwadd : RVVFloatingWidenOp0BinBuiltinSet;
10381038 defm vfwsub : RVVFloatingWidenOp0BinBuiltinSet;
10391039
10401040 // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
1041- defm vfmul : RVVFloatingBinBuiltinSet;
1041+ defm vfmul : RVVFloatingBinBuiltinSet<HasBF=1> ;
10421042 defm vfdiv : RVVFloatingBinBuiltinSet;
10431043 defm vfrdiv : RVVFloatingBinVFBuiltinSet;
10441044}
@@ -1065,6 +1065,10 @@ let ManualCodegen = [{
10651065 defm vfwmul : RVVOutOp0Op1BuiltinSet<"vfwmul", "x",
10661066 [["vv", "w", "wvvu"],
10671067 ["vf", "w", "wveu"]]>;
1068+ let RequiredFeatures = ["zvfbfa"] in
1069+ defm vfwmul : RVVOutOp0Op1BuiltinSet<"vfwmul", "y",
1070+ [["vv", "vw", "wvvu"],
1071+ ["vf", "vw", "wveu"]]>;
10681072 }
10691073 }
10701074 // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
@@ -1081,6 +1085,10 @@ let ManualCodegen = [{
10811085 defm vfwmul : RVVOutOp0Op1BuiltinSet<"vfwmul", "x",
10821086 [["vv", "w", "wvv"],
10831087 ["vf", "w", "wve"]]>;
1088+ let RequiredFeatures = ["zvfbfa"] in
1089+ defm vfwmul : RVVOutOp0Op1BuiltinSet<"vfwmul", "y",
1090+ [["vv", "vw", "wvv"],
1091+ ["vf", "vw", "wve"]]>;
10841092 }
10851093}
10861094}
@@ -1170,6 +1178,8 @@ let ManualCodegen = [{
11701178 defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "fd", [["v", "v", "vvu"]]>;
11711179 let RequiredFeatures = ["zvfh"] in
11721180 defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "x", [["v", "v", "vvu"]]>;
1181+ let RequiredFeatures = ["zvfbfa"] in
1182+ defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "y", [["v", "v", "vvu"]]>;
11731183 }
11741184 // 13.8. Vector Floating-Point Square-Root Instruction
11751185 defm vfsqrt : RVVOutBuiltinSet<"vfsqrt", "fd", [["v", "v", "vv"]]>;
@@ -1180,21 +1190,26 @@ let ManualCodegen = [{
11801190 defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "fd", [["v", "v", "vv"]]>;
11811191 let RequiredFeatures = ["zvfh"] in
11821192 defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "x", [["v", "v", "vv"]]>;
1193+ let RequiredFeatures = ["zvfbfa"] in
1194+ defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "y", [["v", "v", "vv"]]>;
11831195}
11841196
11851197// 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
11861198defm vfrsqrt7 : RVVOutBuiltinSet<"vfrsqrt7", "fd", [["v", "v", "vv"]]>;
11871199let RequiredFeatures = ["zvfh"] in
11881200 defm vfrsqrt7 : RVVOutBuiltinSet<"vfrsqrt7", "x", [["v", "v", "vv"]]>;
1201+ let RequiredFeatures = ["zvfbfa"] in
1202+ defm vfrsqrt7 : RVVOutBuiltinSet<"vfrsqrt7", "y", [["v", "v", "vv"]]>;
1203+
11891204
11901205// 13.11. Vector Floating-Point MIN/MAX Instructions
1191- defm vfmin : RVVFloatingBinBuiltinSet;
1192- defm vfmax : RVVFloatingBinBuiltinSet;
1206+ defm vfmin : RVVFloatingBinBuiltinSet<HasBF=1> ;
1207+ defm vfmax : RVVFloatingBinBuiltinSet<HasBF=1> ;
11931208
11941209// 13.12. Vector Floating-Point Sign-Injection Instructions
1195- defm vfsgnj : RVVFloatingBinBuiltinSet;
1196- defm vfsgnjn : RVVFloatingBinBuiltinSet;
1197- defm vfsgnjx : RVVFloatingBinBuiltinSet;
1210+ defm vfsgnj : RVVFloatingBinBuiltinSet<HasBF=1> ;
1211+ defm vfsgnjn : RVVFloatingBinBuiltinSet<HasBF=1> ;
1212+ defm vfsgnjx : RVVFloatingBinBuiltinSet<HasBF=1> ;
11981213}
11991214defm vfneg_v : RVVPseudoVFUnaryBuiltin<"vfsgnjn", "fd">;
12001215let RequiredFeatures = ["zvfh"] in
@@ -1219,6 +1234,8 @@ let UnMaskedPolicyScheme = HasPassthruOperand in {
12191234defm vfclass : RVVOp0BuiltinSet<"vfclass", "fd", [["v", "Uv", "Uvv"]]>;
12201235let RequiredFeatures = ["zvfh"] in
12211236 defm vfclass : RVVOp0BuiltinSet<"vfclass", "x", [["v", "Uv", "Uvv"]]>;
1237+ let RequiredFeatures = ["zvfbfa"] in
1238+ defm vfclass : RVVOp0BuiltinSet<"vfclass", "y", [["v", "vUv", "Uvv"]]>;
12221239}
12231240
12241241// 13.15. Vector Floating-Point Merge Instruction
@@ -1239,6 +1256,9 @@ let HasMasked = false,
12391256 let RequiredFeatures = ["zvfh"] in
12401257 defm vfmerge : RVVOutOp1BuiltinSet<"vfmerge", "x",
12411258 [["vfm", "v", "vvem"]]>;
1259+ let RequiredFeatures = ["zvfbfa"] in
1260+ defm vfmerge : RVVOutOp1BuiltinSet<"vfmerge", "y",
1261+ [["vfm", "v", "vvem"]]>;
12421262}
12431263
12441264// 13.16. Vector Floating-Point Move Instruction
@@ -1252,6 +1272,9 @@ let HasMasked = false,
12521272 let RequiredFeatures = ["zvfh"] in
12531273 defm vfmv_v : RVVOutBuiltinSet<"vfmv_v_f", "x",
12541274 [["f", "v", "ve"]]>;
1275+ let RequiredFeatures = ["zvfbfa"] in
1276+ defm vfmv_v : RVVOutBuiltinSet<"vfmv_v_f", "y",
1277+ [["f", "v", "ve"]]>;
12551278}
12561279
12571280// 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
@@ -1287,10 +1310,16 @@ let Log2LMUL = [-3, -2, -1, 0, 1, 2] in {
12871310 defm : RVVConvBuiltinSet<"vfwcvt_f_x_v", "c", [["Fw", "Fwv"]]>;
12881311 }
12891312 }
1313+ let RequiredFeatures = ["zvfbfa"], OverloadedName = "vfwcvt_f_bf16" in {
1314+ defm : RVVConvBuiltinSet<"vfwcvt_f_xu_v", "c", [["Yw", "YwUv"]]>;
1315+ defm : RVVConvBuiltinSet<"vfwcvt_f_x_v", "c", [["Yw", "Ywv"]]>;
1316+ }
12901317 let OverloadedName = "vfwcvt_f" in {
12911318 defm : RVVConvBuiltinSet<"vfwcvt_f_f_v", "f", [["w", "wv"]]>;
12921319 let RequiredFeatures = ["zvfhmin"] in
12931320 defm : RVVConvBuiltinSet<"vfwcvt_f_f_v", "x", [["w", "wv"]]>;
1321+ let RequiredFeatures = ["zvfbfa"] in
1322+ defm : RVVConvBuiltinSet<"vfwcvt_f_f_v", "y", [["vw", "wv"]]>;
12941323 }
12951324}
12961325
@@ -1300,17 +1329,23 @@ let Log2LMUL = [-3, -2, -1, 0, 1, 2] in {
13001329 defm : RVVConvBuiltinSet<"vfncvt_rtz_xu_f_w", "si", [["Uv", "UvFw"]]>;
13011330 let RequiredFeatures = ["zvfh"] in
13021331 defm : RVVConvBuiltinSet<"vfncvt_rtz_xu_f_w", "c", [["Uv", "UvFw"]]>;
1332+ let RequiredFeatures = ["zvfbfa"] in
1333+ defm : RVVConvBuiltinSet<"vfncvt_rtz_xu_f_w", "c", [["YwUv", "UvYw"]]>;
13031334 }
13041335 let OverloadedName = "vfncvt_rtz_x" in {
13051336 defm : RVVConvBuiltinSet<"vfncvt_rtz_x_f_w", "si", [["Iv", "IvFw"]]>;
13061337 let RequiredFeatures = ["zvfh"] in
13071338 defm : RVVConvBuiltinSet<"vfncvt_rtz_x_f_w", "c", [["Iv", "IvFw"]]>;
1339+ let RequiredFeatures = ["zvfbfa"] in
1340+ defm : RVVConvBuiltinSet<"vfncvt_rtz_x_f_w", "c", [["YwIv", "IvYw"]]>;
13081341 }
13091342 let OverloadedName = "vfncvt_rod_f" in {
13101343 defm : RVVConvBuiltinSet<"vfncvt_rod_f_f_w", "f", [["v", "vw"]]>;
13111344 let RequiredFeatures = ["zvfh"] in
13121345 defm : RVVConvBuiltinSet<"vfncvt_rod_f_f_w", "x", [["v", "vw"]]>;
13131346 }
1347+ let RequiredFeatures = ["zvfbfa"], OverloadedName = "vfncvt_rod_f_bf16" in
1348+ defm : RVVConvBuiltinSet<"vfncvt_rod_f_f_w", "y", [["v", "vw"]]>;
13141349}
13151350
13161351// Zvfbfmin - Vector convert BF16 to FP32
@@ -1363,11 +1398,15 @@ let ManualCodegen = [{
13631398 defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "si", [["Iv", "IvFwu"]]>;
13641399 let RequiredFeatures = ["zvfh"] in
13651400 defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "c", [["Iv", "IvFwu"]]>;
1401+ let RequiredFeatures = ["zvfbfa"] in
1402+ defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "c", [["YwIv", "IvYwu"]]>;
13661403 }
13671404 let OverloadedName = "vfncvt_xu" in {
13681405 defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "si", [["Uv", "UvFwu"]]>;
13691406 let RequiredFeatures = ["zvfh"] in
13701407 defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "c", [["Uv", "UvFwu"]]>;
1408+ let RequiredFeatures = ["zvfbfa"] in
1409+ defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "c", [["YwUv", "UvYwu"]]>;
13711410 }
13721411 let OverloadedName = "vfncvt_f" in {
13731412 defm : RVVConvBuiltinSet<"vfncvt_f_x_w", "f", [["v", "vIwu"]]>;
@@ -1382,6 +1421,8 @@ let ManualCodegen = [{
13821421 let RequiredFeatures = ["zvfhmin"] in
13831422 defm : RVVConvBuiltinSet<"vfncvt_f_f_w", "x", [["v", "vwu"]]>;
13841423 }
1424+ let RequiredFeatures = ["zvfbfa"], OverloadedName = "vfncvt_f_bf16" in
1425+ defm : RVVConvBuiltinSet<"vfncvt_f_f_w", "y", [["v", "vwu"]]>;
13851426 }
13861427
13871428 // Zvfbfmin - Vector convert FP32 to BF16
@@ -1430,11 +1471,15 @@ let ManualCodegen = [{
14301471 defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "si", [["Iv", "IvFw"]]>;
14311472 let RequiredFeatures = ["zvfh"] in
14321473 defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "c", [["Iv", "IvFw"]]>;
1474+ let RequiredFeatures = ["zvfbfa"] in
1475+ defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "c", [["YwIv", "IvYw"]]>;
14331476 }
14341477 let OverloadedName = "vfncvt_xu" in {
14351478 defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "si", [["Uv", "UvFw"]]>;
14361479 let RequiredFeatures = ["zvfh"] in
14371480 defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "c", [["Uv", "UvFw"]]>;
1481+ let RequiredFeatures = ["zvfbfa"] in
1482+ defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "c", [["YwUv", "UvYw"]]>;
14381483 }
14391484 let OverloadedName = "vfncvt_f" in {
14401485 defm : RVVConvBuiltinSet<"vfncvt_f_x_w", "f", [["v", "vIw"]]>;
@@ -1449,6 +1494,8 @@ let ManualCodegen = [{
14491494 let RequiredFeatures = ["zvfhmin"] in
14501495 defm : RVVConvBuiltinSet<"vfncvt_f_f_w", "x", [["v", "vw"]]>;
14511496 }
1497+ let RequiredFeatures = ["zvfbfa"], OverloadedName = "vfncvt_f_bf16" in
1498+ defm : RVVConvBuiltinSet<"vfncvt_f_f_w", "y", [["v", "vw"]]>;
14521499 }
14531500
14541501 // Zvfbfmin - Vector convert FP32 to BF16
@@ -1578,6 +1625,9 @@ let HasMasked = false, MaskedPolicyScheme = NonePolicy in {
15781625 let RequiredFeatures = ["zvfh"] in
15791626 defm vfmv_f : RVVOp0BuiltinSet<"vfmv_f_s", "x",
15801627 [["s", "ve", "ev"]]>;
1628+ let RequiredFeatures = ["zvfbfa"] in
1629+ defm vfmv_f : RVVOp0BuiltinSet<"vfmv_f_s", "y",
1630+ [["s", "ve", "ev"]]>;
15811631 }
15821632 let OverloadedName = "vfmv_s",
15831633 UnMaskedPolicyScheme = HasPassthruOperand,
@@ -1589,6 +1639,9 @@ let HasMasked = false, MaskedPolicyScheme = NonePolicy in {
15891639 defm vfmv_s : RVVOutBuiltinSet<"vfmv_s_f", "x",
15901640 [["f", "v", "ve"],
15911641 ["x", "Uv", "UvUe"]]>;
1642+ let RequiredFeatures = ["zvfbfa"] in
1643+ defm vfmv_s : RVVOutBuiltinSet<"vfmv_s_f", "y",
1644+ [["f", "v", "ve"]]>;
15921645 }
15931646}
15941647
@@ -1601,11 +1654,11 @@ defm vslidedown : RVVSlideDownBuiltinSet;
16011654// 16.3.3. Vector Slide1up Instructions
16021655let UnMaskedPolicyScheme = HasPassthruOperand in {
16031656defm vslide1up : RVVSlideOneBuiltinSet;
1604- defm vfslide1up : RVVFloatingBinVFBuiltinSet;
1657+ defm vfslide1up : RVVFloatingBinVFBuiltinSet<HasBF=1> ;
16051658
16061659// 16.3.4. Vector Slide1down Instruction
16071660defm vslide1down : RVVSlideOneBuiltinSet;
1608- defm vfslide1down : RVVFloatingBinVFBuiltinSet;
1661+ defm vfslide1down : RVVFloatingBinVFBuiltinSet<HasBF=1> ;
16091662
16101663// 16.4. Vector Register Gather Instructions
16111664// signed and floating type
0 commit comments