diff mbox series

[committed] RISC-V testsuite changes to test clmul expansion of CRCs

Message ID cbf3be74-5daa-4f0d-813a-71a571232248@gmail.com
State New
Headers show
Series [committed] RISC-V testsuite changes to test clmul expansion of CRCs | expand

Commit Message

Jeff Law Dec. 9, 2024, 2:41 p.m. UTC
This testsuite only patch allows us to test code generation for CRC 
functions using clmul instructions.

Conceptually it's trivial.  We already have various execution tests in 
gcc.dg/torture.  We just define a new set of dg directives and include 
the testcase in gcc.dg/torture.

The only gotcha in here is the need to change target-supports.exp.  It 
was passing the default set of arguments down to the check_runtime 
routine, so they always failed to assemble the testcase and we never 
claimed the ability to execute Zbc, Zbkb or Zbkc extension code.

Again, NFC, just testsuite bits.  Pushing to the trunk.

Only aarch64 and x86 bits left ;-)

Jeff
commit 3537aa694d7d817ac13c3c2908bda45adfb95511
Author: Mariam Arutunian <mariamarutunian@gmail.com>
Date:   Mon Dec 9 07:29:36 2024 -0700

    [committed] RISC-V testsuite changes to test clmul expansion of CRCs
    
    This testsuite only patch allows us to test code generation for CRC functions
    using clmul instructions.
    
    Conceptually it's trivial.  We already have various execution tests in
    gcc.dg/torture.  We just define a new set of dg directives and include the
    testcase in gcc.dg/torture.
    
    The only gotcha in here is the need to change target-supports.exp.  It was
    passing the default set of arguments down to the check_runtime routine, so they
    always failed to assemble the testcase and we never claimed the ability to
    execute Zbc, Zbkb or Zbkc extension code.
    
    Again, NFC, just testsuite bits.  Pushing to the trunk.
    
    Only aarch64 and x86 bits left ;-)
    
    gcc/testsuite
            * gcc.target/riscv/crc-1-zbc.c: New test.
            * gcc.target/riscv/crc-1-zbkc.c: Likewise.
            * gcc.target/riscv/crc-10-zbc.c: Likewise.
            * gcc.target/riscv/crc-10-zbkc.c: Likewise.
            * gcc.target/riscv/crc-12-zbc.c: Likewise.
            * gcc.target/riscv/crc-12-zbkc.c: Likewise.
            * gcc.target/riscv/crc-13-zbc.c: Likewise.
            * gcc.target/riscv/crc-13-zbkc.c: Likewise.
            * gcc.target/riscv/crc-14-zbc.c: Likewise.
            * gcc.target/riscv/crc-14-zbkc.c: Likewise.
            * gcc.target/riscv/crc-17-zbc.c: Likewise.
            * gcc.target/riscv/crc-17-zbkc.c: Likewise.
            * gcc.target/riscv/crc-18-zbc.c: Likewise.
            * gcc.target/riscv/crc-18-zbkc.c: Likewise.
            * gcc.target/riscv/crc-21-rv64-zbc.c: Likewise.
            * gcc.target/riscv/crc-21-rv64-zbkc.c: Likewise.
            * gcc.target/riscv/crc-22-zbc.c: Likewise.
            * gcc.target/riscv/crc-22-zbkc.c: Likewise.
            * gcc.target/riscv/crc-23-zbc.c: Likewise.
            * gcc.target/riscv/crc-23-zbkc.c: Likewise.
            * gcc.target/riscv/crc-4-zbc.c: Likewise.
            * gcc.target/riscv/crc-4-zbkb.c: Likewise.
            * gcc.target/riscv/crc-4-zbkc.c: Likewise.
            * gcc.target/riscv/crc-5-zbc.c: Likewise.
            * gcc.target/riscv/crc-5-zbkb.c: Likewise.
            * gcc.target/riscv/crc-5-zbkc.c: Likewise.
            * gcc.target/riscv/crc-6-zbc.c: Likewise.
            * gcc.target/riscv/crc-6-zbkc.c: Likewise.
            * gcc.target/riscv/crc-7-zbc.c: Likewise.
            * gcc.target/riscv/crc-7-zbkc.c: Likewise.
            * gcc.target/riscv/crc-8-zbc.c: Likewise.
            * gcc.target/riscv/crc-8-zbkc.c: Likewise.
            * gcc.target/riscv/crc-9-zbc.c: Likewise.
            * gcc.target/riscv/crc-9-zbkc.c: Likewise.
            * gcc.target/riscv/crc-CCIT-data16-zbc.c: Likewise.
            * gcc.target/riscv/crc-CCIT-data16-zbkc.c: Likewise.
            * gcc.target/riscv/crc-CCIT-data8-zbc.c: Likewise.
            * gcc.target/riscv/crc-CCIT-data8-zbkc.c: Likewise.
            * gcc.target/riscv/crc-coremark-16bitdata-zbc.c: Likewise.
            * gcc.target/riscv/crc-coremark-16bitdata-zbkc.c: Likewise.
            * lib/target-supports.exp (check_effective_target_riscv_zbc_ok): Set
            gcc_march before compiling test program.
            (check_effective_target_riscv_zbkc_ok): Likewise.
            (check_effective_target_riscv_zbkb_ok): Likewise.
            Co-authored-by: Jeff Law <jlaw@ventanamicro.com>
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.target/riscv/crc-1-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-1-zbc.c
new file mode 100644
index 00000000000..aaeaa0dc6ad
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-1-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish  -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish  -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-1.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c
new file mode 100644
index 00000000000..3af336356a1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c
@@ -0,0 +1,11 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish  -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish  -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" { target { rv32 } } } */
+
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-1.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-10-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-10-zbc.c
new file mode 100644
index 00000000000..472d7beb523
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-10-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-10.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-10-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-10-zbkc.c
new file mode 100644
index 00000000000..88f1c0942e9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-10-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-10.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-12-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-12-zbc.c
new file mode 100644
index 00000000000..f1784eca065
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-12-zbc.c
@@ -0,0 +1,11 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish  -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish  -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" { target { rv32 } } } */
+
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-12.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-12-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-12-zbkc.c
new file mode 100644
index 00000000000..91a2cf91c29
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-12-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish  -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish  -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-12.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-13-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-13-zbc.c
new file mode 100644
index 00000000000..3c6138ca15f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-13-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-13.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-13-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-13-zbkc.c
new file mode 100644
index 00000000000..73a5b6a4c14
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-13-zbkc.c
@@ -0,0 +1,11 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-13.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-14-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-14-zbc.c
new file mode 100644
index 00000000000..486f3df8c8c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-14-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-14.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-14-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-14-zbkc.c
new file mode 100644
index 00000000000..9cccea74e3b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-14-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-14.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-17-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-17-zbc.c
new file mode 100644
index 00000000000..bc22039b984
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-17-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-17.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-17-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-17-zbkc.c
new file mode 100644
index 00000000000..025abc1d93f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-17-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-17.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-18-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-18-zbc.c
new file mode 100644
index 00000000000..ad7e66dd8c1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-18-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-18.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-18-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-18-zbkc.c
new file mode 100644
index 00000000000..2b01738d9b1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-18-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-18.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbc.c
new file mode 100644
index 00000000000..503b412f2e1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target { riscv64*-*-* && riscv_zbc_ok } } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish" { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-21.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbkc.c
new file mode 100644
index 00000000000..2bf0172a837
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target { riscv64*-*-* && riscv_zbkc_ok } } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish" { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-21.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-22-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-22-zbc.c
new file mode 100644
index 00000000000..005aa23e490
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-22-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-22.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-22-zbkb.c b/gcc/testsuite/gcc.target/riscv/crc-22-zbkb.c
new file mode 100644
index 00000000000..74dd876f937
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-22-zbkb.c
@@ -0,0 +1,9 @@ 
+/* { dg-do run { target riscv_zbkb } } */
+/* { dg-options "-march=rv64gc_zbkb -fdump-tree-crc-details" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkb -fdump-tree-crc-details" { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" "-flto"} } */
+
+#include "../../gcc.dg/torture/crc-22.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-22-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-22-zbkc.c
new file mode 100644
index 00000000000..fef46182e3e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-22-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-22.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-23-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-23-zbc.c
new file mode 100644
index 00000000000..1e3a99e4c30
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-23-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-23.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-23-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-23-zbkc.c
new file mode 100644
index 00000000000..a6537b0a637
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-23-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-23.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-4-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-4-zbc.c
new file mode 100644
index 00000000000..d4bc3d970fc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-4-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-4.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-4-zbkb.c b/gcc/testsuite/gcc.target/riscv/crc-4-zbkb.c
new file mode 100644
index 00000000000..5a25fb45d4a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-4-zbkb.c
@@ -0,0 +1,9 @@ 
+/* { dg-do run { target riscv_zbkb } } */
+/* { dg-options "-march=rv64gc_zbkb -fdump-tree-crc-details" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkb -fdump-tree-crc-details" { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" "-flto"} } */
+
+#include "../../gcc.dg/torture/crc-4.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-4-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-4-zbkc.c
new file mode 100644
index 00000000000..e519ac5a4cb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-4-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-4.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-5-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-5-zbc.c
new file mode 100644
index 00000000000..927d8dd514f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-5-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-5.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-5-zbkb.c b/gcc/testsuite/gcc.target/riscv/crc-5-zbkb.c
new file mode 100644
index 00000000000..9cc661aad9d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-5-zbkb.c
@@ -0,0 +1,9 @@ 
+/* { dg-do run { target riscv_zbkb } } */
+/* { dg-options "-march=rv64gc_zbkb -w -fdump-tree-crc-details" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkb -w -fdump-tree-crc-details" { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" "-flto"} } */
+
+#include "../../gcc.dg/torture/crc-5.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-5-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-5-zbkc.c
new file mode 100644
index 00000000000..d8acc06d99f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-5-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-5.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-6-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-6-zbc.c
new file mode 100644
index 00000000000..b01f67b34ef
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-6-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-6.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-6-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-6-zbkc.c
new file mode 100644
index 00000000000..938163a1661
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-6-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-6.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-7-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-7-zbc.c
new file mode 100644
index 00000000000..f01186d6bee
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-7-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-7.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-7-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-7-zbkc.c
new file mode 100644
index 00000000000..114500b6e5e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-7-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-7.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-8-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-8-zbc.c
new file mode 100644
index 00000000000..f77d9a7970f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-8-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-8.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-8-zbkb.c b/gcc/testsuite/gcc.target/riscv/crc-8-zbkb.c
new file mode 100644
index 00000000000..a065fd2dab2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-8-zbkb.c
@@ -0,0 +1,9 @@ 
+/* { dg-do run { target riscv_zbkb } } */
+/* { dg-options "-march=rv64gc_zbkb -fdump-tree-crc-details" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkb -fdump-tree-crc-details" { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" "-flto"} } */
+
+#include "../../gcc.dg/torture/crc-8.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-8-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-8-zbkc.c
new file mode 100644
index 00000000000..bf12e0b724a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-8-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-8.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-9-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-9-zbc.c
new file mode 100644
index 00000000000..6af04848bf6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-9-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-9.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-9-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-9-zbkc.c
new file mode 100644
index 00000000000..f965f54b72b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-9-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv32gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-options "-march=rv64gc_zbkc -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-9.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbc.c
new file mode 100644
index 00000000000..ca27fda5869
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-CCIT-data16.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbkc.c
new file mode 100644
index 00000000000..effd4ad18da
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-CCIT-data16.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbc.c
new file mode 100644
index 00000000000..4a83190e352
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-CCIT-data8.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbkc.c
new file mode 100644
index 00000000000..c4335e0e9a8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-CCIT-data8.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbc.c
new file mode 100644
index 00000000000..5000e143501
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbc_ok } } */
+/* { dg-options "-march=rv64gc_zbc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-coremark16-data16.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbkc.c
new file mode 100644
index 00000000000..0d6acfbd982
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbkc.c
@@ -0,0 +1,10 @@ 
+/* { dg-do run { target riscv_zbkc_ok } } */
+/* { dg-options "-march=rv64gc_zbkc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zbkc -w -fdump-tree-crc -fdump-rtl-dfinish " { target { rv32 } } } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */
+
+#include "../../gcc.dg/torture/crc-coremark16-data16.c"
+
+/* { dg-final { scan-tree-dump "calculates CRC!" "crc"} } */
+/* { dg-final { scan-tree-dump-times "Couldn't generate faster CRC code." 0 "crc"} } */
+/* { dg-final { scan-rtl-dump "clmul" "dfinish"} } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index f2edbef92da..ed2a597804a 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -2197,7 +2197,7 @@  proc check_effective_target_riscv_zbc_ok { } {
 
     # check if we can execute zbc insns with the given hardware or
     # simulator
-    set gcc_march [riscv_get_arch]
+    set gcc_march [regsub {[[:alnum:]]*} [riscv_get_arch] &zbc]
     if { [check_runtime ${gcc_march}_zbc_exec {
 	int main()
 	{
@@ -2221,7 +2221,7 @@  proc check_effective_target_riscv_zbkb_ok { } {
 
     # check if we can execute zbkb insns with the given hardware or
     # simulator
-    set gcc_march [riscv_get_arch]
+    set gcc_march [regsub {[[:alnum:]]*} [riscv_get_arch] &zbkb]
     if { [check_runtime ${gcc_march}_zbkb_exec {
 	int main()
 	{
@@ -2244,7 +2244,7 @@  proc check_effective_target_riscv_zbkc_ok { } {
 
     # check if we can execute zbkc insns with the given hardware or
     # simulator
-    set gcc_march [riscv_get_arch]
+    set gcc_march [regsub {[[:alnum:]]*} [riscv_get_arch] &zbkc]
     if { [check_runtime ${gcc_march}_zbkc_exec {
 	int main()
 	{