Skip to content

Commit 05abe8a

Browse files
authored
[RISCV] Remove Zfbfmin dependency from Zvfbfmin. (#75851)
Zvfbfmin does not have any scalar operands making this an unnecessary dependency. The spec was just updated to remove this. See riscv/riscv-bfloat16@86d7a74 This fixes a correctness issue where Xsfvfwmaccqqq was incorrectly depending on Zfbfmin. The SiFive CPUs that support Xsfvfwmaccqqq do not implement Zfbfmin, but do implement Zvfbfmin based on a previous understanding that it only requires Zve32f. I've added tests for this feature to raise the bar for adding dependencies to it in the future.
1 parent 8ddf98a commit 05abe8a

File tree

4 files changed

+15
-8
lines changed

4 files changed

+15
-8
lines changed

llvm/lib/Support/RISCVISAInfo.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -998,7 +998,7 @@ static const char *ImpliedExtsV[] = {"zvl128b", "zve64d"};
998998
static const char *ImpliedExtsXTHeadVdot[] = {"v"};
999999
static const char *ImpliedExtsXSfvcp[] = {"zve32x"};
10001000
static const char *ImpliedExtsXSfvfnrclipxfqf[] = {"zve32f"};
1001-
static const char *ImpliedExtsXSfvfwmaccqqq[] = {"zve32f", "zvfbfmin"};
1001+
static const char *ImpliedExtsXSfvfwmaccqqq[] = {"zvfbfmin"};
10021002
static const char *ImpliedExtsXSfvqmaccdod[] = {"zve32x"};
10031003
static const char *ImpliedExtsXSfvqmaccqoq[] = {"zve32x"};
10041004
static const char *ImpliedExtsZacas[] = {"a"};
@@ -1028,8 +1028,8 @@ static const char *ImpliedExtsZve32x[] = {"zvl32b", "zicsr"};
10281028
static const char *ImpliedExtsZve64d[] = {"zve64f", "d"};
10291029
static const char *ImpliedExtsZve64f[] = {"zve64x", "zve32f"};
10301030
static const char *ImpliedExtsZve64x[] = {"zve32x", "zvl64b"};
1031-
static const char *ImpliedExtsZvfbfmin[] = {"zve32f", "zfbfmin"};
1032-
static const char *ImpliedExtsZvfbfwma[] = {"zvfbfmin"};
1031+
static const char *ImpliedExtsZvfbfmin[] = {"zve32f"};
1032+
static const char *ImpliedExtsZvfbfwma[] = {"zvfbfmin", "zfbfmin"};
10331033
static const char *ImpliedExtsZvfh[] = {"zvfhmin", "zfhmin"};
10341034
static const char *ImpliedExtsZvfhmin[] = {"zve32f"};
10351035
static const char *ImpliedExtsZvkn[] = {"zvkb", "zvkned", "zvknhb", "zvkt"};

llvm/lib/Target/RISCV/RISCVFeatures.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,15 +472,15 @@ def HasStdExtZfbfmin : Predicate<"Subtarget->hasStdExtZfbfmin()">,
472472
def FeatureStdExtZvfbfmin
473473
: SubtargetFeature<"experimental-zvfbfmin", "HasStdExtZvfbfmin", "true",
474474
"'Zvbfmin' (Vector BF16 Converts)",
475-
[FeatureStdExtZve32f, FeatureStdExtZfbfmin]>;
475+
[FeatureStdExtZve32f]>;
476476
def HasStdExtZvfbfmin : Predicate<"Subtarget->hasStdExtZvfbfmin()">,
477477
AssemblerPredicate<(all_of FeatureStdExtZvfbfmin),
478478
"'Zvfbfmin' (Vector BF16 Converts)">;
479479

480480
def FeatureStdExtZvfbfwma
481481
: SubtargetFeature<"experimental-zvfbfwma", "HasStdExtZvfbfwma", "true",
482482
"'Zvfbfwma' (Vector BF16 widening mul-add)",
483-
[FeatureStdExtZvfbfmin]>;
483+
[FeatureStdExtZvfbfmin, FeatureStdExtZfbfmin]>;
484484
def HasStdExtZvfbfwma : Predicate<"Subtarget->hasStdExtZvfbfwma()">,
485485
AssemblerPredicate<(all_of FeatureStdExtZvfbfwma),
486486
"'Zvfbfwma' (Vector BF16 widening mul-add)">;

llvm/test/CodeGen/RISCV/attributes.ll

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
; RUN: llc -mtriple=riscv32 -mattr=+xcvmem %s -o - | FileCheck --check-prefix=RV32XCVMEM %s
4949
; RUN: llc -mtriple=riscv32 -mattr=+xcvsimd %s -o - | FileCheck --check-prefix=RV32XCVSIMD %s
5050
; RUN: llc -mtriple=riscv32 -mattr=+xcvbi %s -o - | FileCheck --check-prefix=RV32XCVBI %s
51+
; RUN: llc -mtriple=riscv32 -mattr=+xsfvfwmaccqqq %s -o - | FileCheck --check-prefix=RV32XSFVFWMACCQQQ %s
5152
; RUN: llc -mtriple=riscv32 -mattr=+xtheadcmo %s -o - | FileCheck --check-prefix=RV32XTHEADCMO %s
5253
; RUN: llc -mtriple=riscv32 -mattr=+xtheadcondmov %s -o - | FileCheck --check-prefix=RV32XTHEADCONDMOV %s
5354
; RUN: llc -mtriple=riscv32 -mattr=+xtheadfmemidx %s -o - | FileCheck --check-prefix=RV32XTHEADFMEMIDX %s
@@ -134,6 +135,7 @@
134135
; RUN: llc -mtriple=riscv64 -mattr=+svpbmt %s -o - | FileCheck --check-prefixes=CHECK,RV64SVPBMT %s
135136
; RUN: llc -mtriple=riscv64 -mattr=+svinval %s -o - | FileCheck --check-prefixes=CHECK,RV64SVINVAL %s
136137
; RUN: llc -mtriple=riscv64 -mattr=+xventanacondops %s -o - | FileCheck --check-prefixes=CHECK,RV64XVENTANACONDOPS %s
138+
; RUN: llc -mtriple=riscv64 -mattr=+xsfvfwmaccqqq %s -o - | FileCheck --check-prefix=RV64XSFVFWMACCQQQ %s
137139
; RUN: llc -mtriple=riscv64 -mattr=+xtheadba %s -o - | FileCheck --check-prefixes=CHECK,RV64XTHEADBA %s
138140
; RUN: llc -mtriple=riscv64 -mattr=+xtheadbb %s -o - | FileCheck --check-prefixes=CHECK,RV64XTHEADBB %s
139141
; RUN: llc -mtriple=riscv64 -mattr=+xtheadbs %s -o - | FileCheck --check-prefixes=CHECK,RV64XTHEADBS %s
@@ -232,6 +234,7 @@
232234
; RV32XCVMEM: .attribute 5, "rv32i2p1_xcvmem1p0"
233235
; RV32XCVSIMD: .attribute 5, "rv32i2p1_xcvsimd1p0"
234236
; RV32XCVBI: .attribute 5, "rv32i2p1_xcvbi1p0"
237+
; RV32XSFVFWMACCQQQ: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0_xsfvfwmaccqqq1p0"
235238
; RV32XTHEADCMO: .attribute 5, "rv32i2p1_xtheadcmo1p0"
236239
; RV32XTHEADCONDMOV: .attribute 5, "rv32i2p1_xtheadcondmov1p0"
237240
; RV32XTHEADFMEMIDX: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_xtheadfmemidx1p0"
@@ -271,7 +274,7 @@
271274
; RV32SMAIA: .attribute 5, "rv32i2p1_smaia1p0"
272275
; RV32SSAIA: .attribute 5, "rv32i2p1_ssaia1p0"
273276
; RV32ZFBFMIN: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zfbfmin0p8"
274-
; RV32ZVFBFMIN: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zfbfmin0p8_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0"
277+
; RV32ZVFBFMIN: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0"
275278
; RV32ZVFBFWMA: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zfbfmin0p8_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvfbfwma0p8_zvl32b1p0"
276279
; RV32ZACAS: .attribute 5, "rv32i2p1_a2p1_zacas1p0"
277280
; RV32ZICFILP: .attribute 5, "rv32i2p1_zicfilp0p4"
@@ -318,6 +321,7 @@
318321
; RV64SVPBMT: .attribute 5, "rv64i2p1_svpbmt1p0"
319322
; RV64SVINVAL: .attribute 5, "rv64i2p1_svinval1p0"
320323
; RV64XVENTANACONDOPS: .attribute 5, "rv64i2p1_xventanacondops1p0"
324+
; RV64XSFVFWMACCQQQ: .attribute 5, "rv64i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0_xsfvfwmaccqqq1p0"
321325
; RV64XTHEADBA: .attribute 5, "rv64i2p1_xtheadba1p0"
322326
; RV64XTHEADBB: .attribute 5, "rv64i2p1_xtheadbb1p0"
323327
; RV64XTHEADBS: .attribute 5, "rv64i2p1_xtheadbs1p0"
@@ -361,7 +365,7 @@
361365
; RV64SMAIA: .attribute 5, "rv64i2p1_smaia1p0"
362366
; RV64SSAIA: .attribute 5, "rv64i2p1_ssaia1p0"
363367
; RV64ZFBFMIN: .attribute 5, "rv64i2p1_f2p2_zicsr2p0_zfbfmin0p8"
364-
; RV64ZVFBFMIN: .attribute 5, "rv64i2p1_f2p2_zicsr2p0_zfbfmin0p8_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0"
368+
; RV64ZVFBFMIN: .attribute 5, "rv64i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0"
365369
; RV64ZVFBFWMA: .attribute 5, "rv64i2p1_f2p2_zicsr2p0_zfbfmin0p8_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvfbfwma0p8_zvl32b1p0"
366370
; RV64ZACAS: .attribute 5, "rv64i2p1_a2p1_zacas1p0"
367371
; RV64ZICFILP: .attribute 5, "rv64i2p1_zicfilp0p4"

llvm/test/MC/RISCV/attribute-arch.s

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@
277277
# CHECK: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zfbfmin0p8"
278278

279279
.attribute arch, "rv32i_zvfbfmin0p8"
280-
# CHECK: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zfbfmin0p8_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0"
280+
# CHECK: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0"
281281

282282
.attribute arch, "rv32i_zvfbfwma0p8"
283283
# CHECK: .attribute 5, "rv32i2p1_f2p2_zicsr2p0_zfbfmin0p8_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvfbfwma0p8_zvl32b1p0"
@@ -311,3 +311,6 @@
311311

312312
.attribute arch, "rv32i_zicfilp0p4"
313313
# CHECK: attribute 5, "rv32i2p1_zicfilp0p4"
314+
315+
.attribute arch, "rv64i_xsfvfwmaccqqq"
316+
# CHECK: attribute 5, "rv64i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbfmin0p8_zvl32b1p0_xsfvfwmaccqqq1p0"

0 commit comments

Comments
 (0)