Skip to content

Commit a780efe

Browse files
committed
[RISCV] Add B extension
It seems that we have `B` extension again: https://github.com/riscv/riscv-b According to the spec, `B` extension represents the collection of the `Zba`, `Zbb`, `Zbs` extensions.
1 parent f639b57 commit a780efe

File tree

8 files changed

+45
-21
lines changed

8 files changed

+45
-21
lines changed

clang/test/Driver/riscv-arch.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,6 @@
231231
// RV32-STD: error: invalid arch name 'rv32imqc',
232232
// RV32-STD: unsupported standard user-level extension 'q'
233233

234-
// RUN: not %clang --target=riscv32-unknown-elf -march=rv32ib -### %s \
235-
// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-B %s
236-
// RV32-B: error: invalid arch name 'rv32ib',
237-
// RV32-B: unsupported standard user-level extension 'b'
238-
239234
// RUN: not %clang --target=riscv32-unknown-elf -march=rv32xabc -### %s \
240235
// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32X %s
241236
// RV32X: error: invalid arch name 'rv32xabc',

clang/test/Preprocessor/riscv-target-features.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// CHECK-NOT: __riscv_64e {{.*$}}
88
// CHECK-NOT: __riscv_a {{.*$}}
99
// CHECK-NOT: __riscv_atomic
10+
// CHECK-NOT: __riscv_b {{.*$}}
1011
// CHECK-NOT: __riscv_c {{.*$}}
1112
// CHECK-NOT: __riscv_compressed {{.*$}}
1213
// CHECK-NOT: __riscv_d {{.*$}}
@@ -194,6 +195,25 @@
194195
// CHECK-A-EXT: __riscv_a 2001000{{$}}
195196
// CHECK-A-EXT: __riscv_atomic 1
196197

198+
// RUN: %clang --target=riscv32-unknown-linux-gnu \
199+
// RUN: -march=rv32ib -x c -E -dM %s \
200+
// RUN: -o - | FileCheck --check-prefix=CHECK-B-EXT %s
201+
// RUN: %clang --target=riscv64-unknown-linux-gnu \
202+
// RUN: -march=rv64ib -x c -E -dM %s \
203+
// RUN: -o - | FileCheck --check-prefix=CHECK-B-EXT %s
204+
// CHECK-B-EXT: __riscv_b 1000000{{$}}
205+
// CHECK-B-EXT: __riscv_zba 1000000{{$}}
206+
// CHECK-B-EXT: __riscv_zbb 1000000{{$}}
207+
// CHECK-B-EXT: __riscv_zbs 1000000{{$}}
208+
209+
// RUN: %clang --target=riscv32-unknown-linux-gnu \
210+
// RUN: -march=rv32i_zba_zbb_zbs -E -dM %s \
211+
// RUN: -o - | FileCheck --check-prefix=CHECK-COMBINE-INTO-B %s
212+
// RUN: %clang --target=riscv64-unknown-linux-gnu \
213+
// RUN: -march=rv64i_zba_zbb_zbs -E -dM %s \
214+
// RUN: -o - | FileCheck --check-prefix=CHECK-COMBINE-INTO-B %s
215+
// CHECK-COMBINE-INTO-B: __riscv_b 1000000{{$}}
216+
197217
// RUN: %clang --target=riscv32-unknown-linux-gnu \
198218
// RUN: -march=rv32ic -E -dM %s \
199219
// RUN: -o - | FileCheck --check-prefix=CHECK-C-EXT %s

llvm/docs/RISCVUsage.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ on support follow.
8585
Extension Status
8686
================ =================================================================
8787
``A`` Supported
88+
``B`` Supported
8889
``C`` Supported
8990
``D`` Supported
9091
``F`` Supported

llvm/docs/ReleaseNotes.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ Changes to the RISC-V Backend
132132
* Added smstateen extension to -march. CSR names for smstateen were already supported.
133133
* Zaamo and Zalrsc are no longer experimental.
134134
* Processors that enable post reg-alloc scheduling (PostMachineScheduler) by default should use the `UsePostRAScheduler` subtarget feature. Setting `PostRAScheduler = 1` in the scheduler model will have no effect on the enabling of the PostMachineScheduler.
135+
* B (the collection of the Zba, Zbb, Zbs extensions) is supported.
135136

136137
Changes to the WebAssembly Backend
137138
----------------------------------

llvm/lib/Target/RISCV/RISCVFeatures.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,14 @@ def HasStdExtZbs : Predicate<"Subtarget->hasStdExtZbs()">,
477477

478478
// Bitmanip Extensions for Cryptography Extensions
479479

480+
def FeatureStdExtB
481+
: RISCVExtension<"b", 1, 0,
482+
"'B' (the collection of the Zba, Zbb, Zbs extensions)",
483+
[FeatureStdExtZba, FeatureStdExtZbb, FeatureStdExtZbs]>;
484+
def HasStdExtB : Predicate<"Subtarget->hasStdExtB()">,
485+
AssemblerPredicate<(all_of FeatureStdExtB),
486+
"'B' (the collection of the Zba, Zbb, Zbs extensions)">;
487+
480488
def FeatureStdExtZbkb
481489
: RISCVExtension<"zbkb", 1, 0,
482490
"'Zbkb' (Bitmanip instructions for Cryptography)">;

llvm/lib/TargetParser/RISCVISAInfo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -920,8 +920,8 @@ void RISCVISAInfo::updateImplication() {
920920
}
921921

922922
static constexpr StringLiteral CombineIntoExts[] = {
923-
{"zk"}, {"zkn"}, {"zks"}, {"zvkn"}, {"zvknc"},
924-
{"zvkng"}, {"zvks"}, {"zvksc"}, {"zvksg"},
923+
{"b"}, {"zk"}, {"zkn"}, {"zks"}, {"zvkn"},
924+
{"zvknc"}, {"zvkng"}, {"zvks"}, {"zvksc"}, {"zvksg"},
925925
};
926926

927927
void RISCVISAInfo::updateCombination() {

llvm/test/CodeGen/RISCV/attributes.ll

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
; RUN: llc -mtriple=riscv32 -mattr=+zmmul %s -o - | FileCheck --check-prefixes=CHECK,RV32ZMMUL %s
66
; RUN: llc -mtriple=riscv32 -mattr=+m,+zmmul %s -o - | FileCheck --check-prefixes=CHECK,RV32MZMMUL %s
77
; RUN: llc -mtriple=riscv32 -mattr=+a %s -o - | FileCheck --check-prefixes=CHECK,RV32A %s
8+
; RUN: llc -mtriple=riscv32 -mattr=+b %s -o - | FileCheck --check-prefixes=CHECK,RV32B %s
89
; RUN: llc -mtriple=riscv32 -mattr=+f %s -o - | FileCheck --check-prefixes=CHECK,RV32F %s
910
; RUN: llc -mtriple=riscv32 -mattr=+d %s -o - | FileCheck --check-prefixes=CHECK,RV32D %s
1011
; RUN: llc -mtriple=riscv32 -mattr=+c %s -o - | FileCheck --check-prefixes=CHECK,RV32C %s
@@ -131,6 +132,7 @@
131132
; RUN: llc -mtriple=riscv64 -mattr=+zmmul %s -o - | FileCheck --check-prefixes=CHECK,RV64ZMMUL %s
132133
; RUN: llc -mtriple=riscv64 -mattr=+m,+zmmul %s -o - | FileCheck --check-prefixes=CHECK,RV64MZMMUL %s
133134
; RUN: llc -mtriple=riscv64 -mattr=+a %s -o - | FileCheck --check-prefixes=CHECK,RV64A %s
135+
; RUN: llc -mtriple=riscv64 -mattr=+b %s -o - | FileCheck --check-prefixes=CHECK,RV64B %s
134136
; RUN: llc -mtriple=riscv64 -mattr=+f %s -o - | FileCheck --check-prefixes=CHECK,RV64F %s
135137
; RUN: llc -mtriple=riscv64 -mattr=+d %s -o - | FileCheck --check-prefixes=CHECK,RV64D %s
136138
; RUN: llc -mtriple=riscv64 -mattr=+c %s -o - | FileCheck --check-prefixes=CHECK,RV64C %s
@@ -277,6 +279,7 @@
277279
; RV32ZMMUL: .attribute 5, "rv32i2p1_zmmul1p0"
278280
; RV32MZMMUL: .attribute 5, "rv32i2p1_m2p0_zmmul1p0"
279281
; RV32A: .attribute 5, "rv32i2p1_a2p1"
282+
; RV32B: .attribute 5, "rv32i2p1_b1p0_zba1p0_zbb1p0_zbs1p0"
280283
; RV32F: .attribute 5, "rv32i2p1_f2p2_zicsr2p0"
281284
; RV32D: .attribute 5, "rv32i2p1_f2p2_d2p2_zicsr2p0"
282285
; RV32C: .attribute 5, "rv32i2p1_c2p0"
@@ -402,6 +405,7 @@
402405
; RV64ZMMUL: .attribute 5, "rv64i2p1_zmmul1p0"
403406
; RV64MZMMUL: .attribute 5, "rv64i2p1_m2p0_zmmul1p0"
404407
; RV64A: .attribute 5, "rv64i2p1_a2p1"
408+
; RV64B: .attribute 5, "rv64i2p1_b1p0_zba1p0_zbb1p0_zbs1p0"
405409
; RV64F: .attribute 5, "rv64i2p1_f2p2_zicsr2p0"
406410
; RV64D: .attribute 5, "rv64i2p1_f2p2_d2p2_zicsr2p0"
407411
; RV64C: .attribute 5, "rv64i2p1_c2p0"
@@ -533,13 +537,13 @@
533537
; RVI20U64: .attribute 5, "rv64i2p1"
534538
; RVA20U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_za128rs1p0"
535539
; RVA20S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zifencei2p0_za128rs1p0_ssccptr1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0"
536-
; RVA22U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0"
537-
; RVA22S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zifencei2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_ssccptr1p0_sscounterenw1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0_svinval1p0_svpbmt1p0"
538-
; RVA23U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfhmin1p0_zvkb1p0_zvkt1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
539-
; RVA23S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_h1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfhmin1p0_zvkb1p0_zvkt1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0_shcounterenw1p0_shgatpa1p0_shtvala1p0_shvsatpa1p0_shvstvala1p0_shvstvecd1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_ssnpm0p8_ssstateen1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"
540-
; RVB23U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0"
541-
; RVB23S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"
542-
; RVM23U32: .attribute 5, "rv32i2p1_m2p0_zicbop1p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zimop1p0_zca1p0_zcb1p0_zce1p0_zcmop1p0_zcmp1p0_zcmt1p0_zba1p0_zbb1p0_zbs1p0"
540+
; RVA22U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0"
541+
; RVA22S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicsr2p0_zifencei2p0_zihintpause2p0_zihpm2p0_za64rs1p0_zfhmin1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_ssccptr1p0_sscounterenw1p0_sstvala1p0_sstvecd1p0_svade1p0_svbare1p0_svinval1p0_svpbmt1p0"
542+
; RVA23U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfhmin1p0_zvkb1p0_zvkt1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
543+
; RVA23S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_v1p0_h1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfhmin1p0_zvkb1p0_zvkt1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0_shcounterenw1p0_shgatpa1p0_shtvala1p0_shvsatpa1p0_shvstvala1p0_shvstvecd1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_ssnpm0p8_ssstateen1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"
544+
; RVB23U64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0"
545+
; RVB23S64: .attribute 5, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zifencei2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0_zawrs1p0_zfa1p0_zca1p0_zcb1p0_zcmop1p0_zba1p0_zbb1p0_zbs1p0_zkt1p0_ssccptr1p0_sscofpmf1p0_sscounterenw1p0_sstc1p0_sstvala1p0_sstvecd1p0_ssu64xl1p0_svade1p0_svbare1p0_svinval1p0_svnapot1p0_svpbmt1p0"
546+
; RVM23U32: .attribute 5, "rv32i2p1_m2p0_b1p0_zicbop1p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zimop1p0_zca1p0_zcb1p0_zce1p0_zcmop1p0_zcmp1p0_zcmt1p0_zba1p0_zbb1p0_zbs1p0"
543547

544548
define i32 @addi(i32 %a) {
545549
%1 = add i32 %a, 1

llvm/unittests/TargetParser/RISCVISAInfoTest.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,6 @@ TEST(ParseArchString, AcceptsSupportedBaseISAsAndSetsXLenAndFLen) {
312312
}
313313

314314
TEST(ParseArchString, RejectsUnrecognizedExtensionNamesByDefault) {
315-
EXPECT_EQ(toString(RISCVISAInfo::parseArchString("rv64ib", true).takeError()),
316-
"unsupported standard user-level extension 'b'");
317315
EXPECT_EQ(
318316
toString(
319317
RISCVISAInfo::parseArchString("rv32i_zmadeup", true).takeError()),
@@ -326,9 +324,6 @@ TEST(ParseArchString, RejectsUnrecognizedExtensionNamesByDefault) {
326324
toString(
327325
RISCVISAInfo::parseArchString("rv64g_xmadeup", true).takeError()),
328326
"unsupported non-standard user-level extension 'xmadeup'");
329-
EXPECT_EQ(
330-
toString(RISCVISAInfo::parseArchString("rv64ib1p0", true).takeError()),
331-
"unsupported standard user-level extension 'b'");
332327
EXPECT_EQ(
333328
toString(
334329
RISCVISAInfo::parseArchString("rv32i_zmadeup1p0", true).takeError()),
@@ -344,8 +339,7 @@ TEST(ParseArchString, RejectsUnrecognizedExtensionNamesByDefault) {
344339
}
345340

346341
TEST(ParseArchString, IgnoresUnrecognizedExtensionNamesWithIgnoreUnknown) {
347-
for (StringRef Input : {"rv32ib", "rv32i_zmadeup",
348-
"rv64i_smadeup", "rv64i_xmadeup"}) {
342+
for (StringRef Input : {"rv32i_zmadeup", "rv64i_smadeup", "rv64i_xmadeup"}) {
349343
auto MaybeISAInfo = RISCVISAInfo::parseArchString(Input, true, false, true);
350344
ASSERT_THAT_EXPECTED(MaybeISAInfo, Succeeded());
351345
RISCVISAInfo &Info = **MaybeISAInfo;
@@ -913,6 +907,7 @@ R"(All available -march extensions for RISC-V
913907
f 2.2
914908
d 2.2
915909
c 2.0
910+
b 1.0
916911
v 1.0
917912
h 1.0
918913
zic64b 1.0

0 commit comments

Comments
 (0)