diff mbox series

[2/2,RISC-V] c implies zca, and conditionally zcf & zcd

Message ID 20240709024638.19717-1-gaofei@eswincomputing.com
State New
Headers show
Series None | expand

Commit Message

Fei Gao July 9, 2024, 2:46 a.m. UTC
According to Zc-1.0.4-3.pdf from
https://github.com/riscvarchive/riscv-code-size-reduction/releases/tag/v1.0.4-3
The rule is that:
1. C always implies Zca
2. C+F implies Zcf (RV32 only)
3. C+D implies Zcd

gcc/ChangeLog:

        * common/config/riscv/riscv-common.cc:
        c implies zca, and conditionally zcf & zcd.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/attribute-15.c: adapt TC.
        * gcc.target/riscv/attribute-18.c: likewise.
        * gcc.target/riscv/pr110696.c: likewise.
        * gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c: likewise.
        * gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c: likewise.
        * gcc.target/riscv/rvv/base/pr114352-1.c: likewise.
        * gcc.target/riscv/rvv/base/pr114352-3.c: likewise.
        * gcc.target/riscv/arch-39.c: New test.
        * gcc.target/riscv/arch-40.c: New test.


Signed-off-by: Fei Gao <gaofei@eswincomputing.com>
---
 gcc/common/config/riscv/riscv-common.cc              | 12 ++++++++++++
 gcc/testsuite/gcc.target/riscv/arch-39.c             |  7 +++++++
 gcc/testsuite/gcc.target/riscv/arch-40.c             |  7 +++++++
 gcc/testsuite/gcc.target/riscv/attribute-15.c        |  2 +-
 gcc/testsuite/gcc.target/riscv/attribute-18.c        |  2 +-
 gcc/testsuite/gcc.target/riscv/pr110696.c            |  2 +-
 .../riscv/rvv/base/abi-callee-saved-1-zcmp.c         |  2 +-
 .../riscv/rvv/base/abi-callee-saved-2-zcmp.c         |  2 +-
 gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c |  4 ++--
 gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c |  8 ++++----
 10 files changed, 37 insertions(+), 11 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/arch-39.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/arch-40.c

Comments

Kito Cheng July 9, 2024, 3:10 a.m. UTC | #1
LGTM, thanks :)

On Tue, Jul 9, 2024 at 10:47 AM Fei Gao <gaofei@eswincomputing.com> wrote:

> According to Zc-1.0.4-3.pdf from
>
> https://github.com/riscvarchive/riscv-code-size-reduction/releases/tag/v1.0.4-3
> The rule is that:
> 1. C always implies Zca
> 2. C+F implies Zcf (RV32 only)
> 3. C+D implies Zcd
>
> gcc/ChangeLog:
>
>         * common/config/riscv/riscv-common.cc:
>         c implies zca, and conditionally zcf & zcd.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.target/riscv/attribute-15.c: adapt TC.
>         * gcc.target/riscv/attribute-18.c: likewise.
>         * gcc.target/riscv/pr110696.c: likewise.
>         * gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c: likewise.
>         * gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c: likewise.
>         * gcc.target/riscv/rvv/base/pr114352-1.c: likewise.
>         * gcc.target/riscv/rvv/base/pr114352-3.c: likewise.
>         * gcc.target/riscv/arch-39.c: New test.
>         * gcc.target/riscv/arch-40.c: New test.
>
>
> Signed-off-by: Fei Gao <gaofei@eswincomputing.com>
> ---
>  gcc/common/config/riscv/riscv-common.cc              | 12 ++++++++++++
>  gcc/testsuite/gcc.target/riscv/arch-39.c             |  7 +++++++
>  gcc/testsuite/gcc.target/riscv/arch-40.c             |  7 +++++++
>  gcc/testsuite/gcc.target/riscv/attribute-15.c        |  2 +-
>  gcc/testsuite/gcc.target/riscv/attribute-18.c        |  2 +-
>  gcc/testsuite/gcc.target/riscv/pr110696.c            |  2 +-
>  .../riscv/rvv/base/abi-callee-saved-1-zcmp.c         |  2 +-
>  .../riscv/rvv/base/abi-callee-saved-2-zcmp.c         |  2 +-
>  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c |  4 ++--
>  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c |  8 ++++----
>  10 files changed, 37 insertions(+), 11 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-39.c
>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-40.c
>
> diff --git a/gcc/common/config/riscv/riscv-common.cc
> b/gcc/common/config/riscv/riscv-common.cc
> index cad3551feb6..a02f1fe19a0 100644
> --- a/gcc/common/config/riscv/riscv-common.cc
> +++ b/gcc/common/config/riscv/riscv-common.cc
> @@ -82,6 +82,18 @@ static const riscv_implied_info_t riscv_implied_info[] =
>    {"a", "zaamo"},
>    {"a", "zalrsc"},
>
> +  {"c", "zca"},
> +  {"c", "zcf",
> +   [] (const riscv_subset_list *subset_list) -> bool
> +   {
> +     return subset_list->xlen () == 32 && subset_list->lookup ("f");
> +   }},
> +  {"c", "zcd",
> +   [] (const riscv_subset_list *subset_list) -> bool
> +   {
> +     return subset_list->lookup ("d");
> +   }},
> +
>    {"zdinx", "zfinx"},
>    {"zfinx", "zicsr"},
>    {"zdinx", "zicsr"},
> diff --git a/gcc/testsuite/gcc.target/riscv/arch-39.c
> b/gcc/testsuite/gcc.target/riscv/arch-39.c
> new file mode 100644
> index 00000000000..beeb81e44c5
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/arch-39.c
> @@ -0,0 +1,7 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64idc_zcmt -mabi=lp64d" } */
> +int
> +foo ()
> +{}
> +
> +/* { dg-error "zcd conflicts with zcmt" "" { target *-*-* } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/arch-40.c
> b/gcc/testsuite/gcc.target/riscv/arch-40.c
> new file mode 100644
> index 00000000000..eaefaf1d0d7
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/arch-40.c
> @@ -0,0 +1,7 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64idc_zcmp -mabi=lp64d" } */
> +int
> +foo ()
> +{}
> +
> +/* { dg-error "zcd conflicts with zcmp" "" { target *-*-* } 0 } */
> diff --git a/gcc/testsuite/gcc.target/riscv/attribute-15.c
> b/gcc/testsuite/gcc.target/riscv/attribute-15.c
> index a2e394b6489..ac6caaecd4f 100644
> --- a/gcc/testsuite/gcc.target/riscv/attribute-15.c
> +++ b/gcc/testsuite/gcc.target/riscv/attribute-15.c
> @@ -3,4 +3,4 @@
>  int foo()
>  {
>  }
> -/* { dg-final { scan-assembler ".attribute arch,
> \"rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0\"" } } */
> +/* { dg-final { scan-assembler ".attribute arch,
> \"rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0_zcf1p0\""
> } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/attribute-18.c
> b/gcc/testsuite/gcc.target/riscv/attribute-18.c
> index eefd602103d..9f7199f331a 100644
> --- a/gcc/testsuite/gcc.target/riscv/attribute-18.c
> +++ b/gcc/testsuite/gcc.target/riscv/attribute-18.c
> @@ -1,4 +1,4 @@
>  /* { dg-do compile } */
>  /* { dg-options "-mriscv-attribute -march=rv64imafdc -mabi=lp64d
> -misa-spec=2.2" } */
>  int foo() {}
> -/* { dg-final { scan-assembler ".attribute arch,
> \"rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0\"" } } */
> +/* { dg-final { scan-assembler ".attribute arch,
> \"rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0\"" } }
> */
> diff --git a/gcc/testsuite/gcc.target/riscv/pr110696.c
> b/gcc/testsuite/gcc.target/riscv/pr110696.c
> index 08682a047e0..8aa6cd07f4f 100644
> --- a/gcc/testsuite/gcc.target/riscv/pr110696.c
> +++ b/gcc/testsuite/gcc.target/riscv/pr110696.c
> @@ -4,4 +4,4 @@ int foo()
>  {
>  }
>
> -/* { dg-final { scan-assembler ".attribute arch,
> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0\""
> } } */
> +/* { dg-final { scan-assembler ".attribute arch,
> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0\""
> } } */
> diff --git
> a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
> b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
> index dedcef9b353..b6b708f1a58 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O1 -march=rv64gcv_zfh_zca_zcmp -mabi=lp64d
> -fno-shrink-wrap-separate" } */
> +/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d
> -fno-shrink-wrap-separate" } */
>  /* { dg-final { check-function-bodies "**" "" } } */
>
>  #include <riscv_vector.h>
> diff --git
> a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
> b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
> index 14fb2c400a4..5f8f96f86a9 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O1 -march=rv64gcv_zfh_zca_zcmp -mabi=lp64d
> -fno-shrink-wrap-separate" } */
> +/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d
> -fno-shrink-wrap-separate" } */
>  /* { dg-final { check-function-bodies "**" "" } } */
>
>  #include <riscv_vector.h>
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
> b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
> index faeb406498d..aa9c7fa18d5 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
> @@ -54,5 +54,5 @@ test_3 (int *a, int *b, int *out, unsigned count)
>      out[i] = a[i] + b[i];
>  }
>
> -/* { dg-final { scan-assembler ".attribute arch,
> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0\""
> } } */
> -/* { dg-final { scan-assembler ".option arch,
> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
> } } */
> +/* { dg-final { scan-assembler ".attribute arch,
> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0\""
> } } */
> +/* { dg-final { scan-assembler ".option arch,
> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
> } } */
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
> b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
> index 38815ef5bd0..dff9198ecaa 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
> @@ -107,7 +107,7 @@ test_6 (_Float16 *a, _Float16 *b, _Float16 *out,
> unsigned count)
>      out[i] = a[i] + b[i];
>  }
>
> -/* { dg-final { scan-assembler ".attribute arch,
> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0\""
> } } */
> -/* { dg-final { scan-assembler ".option arch,
> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
> } } */
> -/* { dg-final { scan-assembler ".option arch,
> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zbb1p0"
> } } */
> -/* { dg-final { scan-assembler ".option arch,
> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zfh1p0_zfhmin1p0"
> } } */
> +/* { dg-final { scan-assembler ".attribute arch,
> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0\""
> } } */
> +/* { dg-final { scan-assembler ".option arch,
> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
> } } */
> +/* { dg-final { scan-assembler ".option arch,
> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zbb1p0"
> } } */
> +/* { dg-final { scan-assembler ".option arch,
> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zfh1p0_zfhmin1p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0"
> } } */
> --
> 2.17.1
>
>
Fei Gao July 9, 2024, 7:14 a.m. UTC | #2
On 2024-07-09 11:10  Kito Cheng <kito.cheng@gmail.com> wrote:
>
>LGTM, thanks :)
> 
This patch still fails to apply in patchwork.
Just realized it conflicts with a recent merge.
So I rebased and resent a new patch. 

Sorry to spam.

BR
Fei
>On Tue, Jul 9, 2024 at 10:47 AM Fei Gao <gaofei@eswincomputing.com> wrote:
>
>> According to Zc-1.0.4-3.pdf from
>>
>> https://github.com/riscvarchive/riscv-code-size-reduction/releases/tag/v1.0.4-3
>> The rule is that:
>> 1. C always implies Zca
>> 2. C+F implies Zcf (RV32 only)
>> 3. C+D implies Zcd
>>
>> gcc/ChangeLog:
>>
>>         * common/config/riscv/riscv-common.cc:
>>         c implies zca, and conditionally zcf & zcd.
>>
>> gcc/testsuite/ChangeLog:
>>
>>         * gcc.target/riscv/attribute-15.c: adapt TC.
>>         * gcc.target/riscv/attribute-18.c: likewise.
>>         * gcc.target/riscv/pr110696.c: likewise.
>>         * gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c: likewise.
>>         * gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c: likewise.
>>         * gcc.target/riscv/rvv/base/pr114352-1.c: likewise.
>>         * gcc.target/riscv/rvv/base/pr114352-3.c: likewise.
>>         * gcc.target/riscv/arch-39.c: New test.
>>         * gcc.target/riscv/arch-40.c: New test.
>>
>>
>> Signed-off-by: Fei Gao <gaofei@eswincomputing.com>
>> ---
>>  gcc/common/config/riscv/riscv-common.cc              | 12 ++++++++++++
>>  gcc/testsuite/gcc.target/riscv/arch-39.c             |  7 +++++++
>>  gcc/testsuite/gcc.target/riscv/arch-40.c             |  7 +++++++
>>  gcc/testsuite/gcc.target/riscv/attribute-15.c        |  2 +-
>>  gcc/testsuite/gcc.target/riscv/attribute-18.c        |  2 +-
>>  gcc/testsuite/gcc.target/riscv/pr110696.c            |  2 +-
>>  .../riscv/rvv/base/abi-callee-saved-1-zcmp.c         |  2 +-
>>  .../riscv/rvv/base/abi-callee-saved-2-zcmp.c         |  2 +-
>>  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c |  4 ++--
>>  gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c |  8 ++++----
>>  10 files changed, 37 insertions(+), 11 deletions(-)
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-39.c
>>  create mode 100644 gcc/testsuite/gcc.target/riscv/arch-40.c
>>
>> diff --git a/gcc/common/config/riscv/riscv-common.cc
>> b/gcc/common/config/riscv/riscv-common.cc
>> index cad3551feb6..a02f1fe19a0 100644
>> --- a/gcc/common/config/riscv/riscv-common.cc
>> +++ b/gcc/common/config/riscv/riscv-common.cc
>> @@ -82,6 +82,18 @@ static const riscv_implied_info_t riscv_implied_info[] =
>>    {"a", "zaamo"},
>>    {"a", "zalrsc"},
>>
>> +  {"c", "zca"},
>> +  {"c", "zcf",
>> +   [] (const riscv_subset_list *subset_list) -> bool
>> +   {
>> +     return subset_list->xlen () == 32 && subset_list->lookup ("f");
>> +   }},
>> +  {"c", "zcd",
>> +   [] (const riscv_subset_list *subset_list) -> bool
>> +   {
>> +     return subset_list->lookup ("d");
>> +   }},
>> +
>>    {"zdinx", "zfinx"},
>>    {"zfinx", "zicsr"},
>>    {"zdinx", "zicsr"},
>> diff --git a/gcc/testsuite/gcc.target/riscv/arch-39.c
>> b/gcc/testsuite/gcc.target/riscv/arch-39.c
>> new file mode 100644
>> index 00000000000..beeb81e44c5
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/arch-39.c
>> @@ -0,0 +1,7 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64idc_zcmt -mabi=lp64d" } */
>> +int
>> +foo ()
>> +{}
>> +
>> +/* { dg-error "zcd conflicts with zcmt" "" { target *-*-* } 0 } */
>> diff --git a/gcc/testsuite/gcc.target/riscv/arch-40.c
>> b/gcc/testsuite/gcc.target/riscv/arch-40.c
>> new file mode 100644
>> index 00000000000..eaefaf1d0d7
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/arch-40.c
>> @@ -0,0 +1,7 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64idc_zcmp -mabi=lp64d" } */
>> +int
>> +foo ()
>> +{}
>> +
>> +/* { dg-error "zcd conflicts with zcmp" "" { target *-*-* } 0 } */
>> diff --git a/gcc/testsuite/gcc.target/riscv/attribute-15.c
>> b/gcc/testsuite/gcc.target/riscv/attribute-15.c
>> index a2e394b6489..ac6caaecd4f 100644
>> --- a/gcc/testsuite/gcc.target/riscv/attribute-15.c
>> +++ b/gcc/testsuite/gcc.target/riscv/attribute-15.c
>> @@ -3,4 +3,4 @@
>>  int foo()
>>  {
>>  }
>> -/* { dg-final { scan-assembler ".attribute arch,
>> \"rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0\"" } } */
>> +/* { dg-final { scan-assembler ".attribute arch,
>> \"rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0_zcf1p0\""
>> } } */
>> diff --git a/gcc/testsuite/gcc.target/riscv/attribute-18.c
>> b/gcc/testsuite/gcc.target/riscv/attribute-18.c
>> index eefd602103d..9f7199f331a 100644
>> --- a/gcc/testsuite/gcc.target/riscv/attribute-18.c
>> +++ b/gcc/testsuite/gcc.target/riscv/attribute-18.c
>> @@ -1,4 +1,4 @@
>>  /* { dg-do compile } */
>>  /* { dg-options "-mriscv-attribute -march=rv64imafdc -mabi=lp64d
>> -misa-spec=2.2" } */
>>  int foo() {}
>> -/* { dg-final { scan-assembler ".attribute arch,
>> \"rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0\"" } } */
>> +/* { dg-final { scan-assembler ".attribute arch,
>> \"rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0\"" } }
>> */
>> diff --git a/gcc/testsuite/gcc.target/riscv/pr110696.c
>> b/gcc/testsuite/gcc.target/riscv/pr110696.c
>> index 08682a047e0..8aa6cd07f4f 100644
>> --- a/gcc/testsuite/gcc.target/riscv/pr110696.c
>> +++ b/gcc/testsuite/gcc.target/riscv/pr110696.c
>> @@ -4,4 +4,4 @@ int foo()
>>  {
>>  }
>>
>> -/* { dg-final { scan-assembler ".attribute arch,
>> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0\""
>> } } */
>> +/* { dg-final { scan-assembler ".attribute arch,
>> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0\""
>> } } */
>> diff --git
>> a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
>> b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
>> index dedcef9b353..b6b708f1a58 100644
>> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
>> @@ -1,5 +1,5 @@
>>  /* { dg-do compile } */
>> -/* { dg-options "-O1 -march=rv64gcv_zfh_zca_zcmp -mabi=lp64d
>> -fno-shrink-wrap-separate" } */
>> +/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d
>> -fno-shrink-wrap-separate" } */
>>  /* { dg-final { check-function-bodies "**" "" } } */
>>
>>  #include <riscv_vector.h>
>> diff --git
>> a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
>> b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
>> index 14fb2c400a4..5f8f96f86a9 100644
>> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
>> @@ -1,5 +1,5 @@
>>  /* { dg-do compile } */
>> -/* { dg-options "-O1 -march=rv64gcv_zfh_zca_zcmp -mabi=lp64d
>> -fno-shrink-wrap-separate" } */
>> +/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d
>> -fno-shrink-wrap-separate" } */
>>  /* { dg-final { check-function-bodies "**" "" } } */
>>
>>  #include <riscv_vector.h>
>> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
>> b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
>> index faeb406498d..aa9c7fa18d5 100644
>> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
>> @@ -54,5 +54,5 @@ test_3 (int *a, int *b, int *out, unsigned count)
>>      out[i] = a[i] + b[i];
>>  }
>>
>> -/* { dg-final { scan-assembler ".attribute arch,
>> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0\""
>> } } */
>> -/* { dg-final { scan-assembler ".option arch,
>> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
>> } } */
>> +/* { dg-final { scan-assembler ".attribute arch,
>> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0\""
>> } } */
>> +/* { dg-final { scan-assembler ".option arch,
>> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
>> } } */
>> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
>> b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
>> index 38815ef5bd0..dff9198ecaa 100644
>> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
>> @@ -107,7 +107,7 @@ test_6 (_Float16 *a, _Float16 *b, _Float16 *out,
>> unsigned count)
>>      out[i] = a[i] + b[i];
>>  }
>>
>> -/* { dg-final { scan-assembler ".attribute arch,
>> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0\""
>> } } */
>> -/* { dg-final { scan-assembler ".option arch,
>> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
>> } } */
>> -/* { dg-final { scan-assembler ".option arch,
>> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zbb1p0"
>> } } */
>> -/* { dg-final { scan-assembler ".option arch,
>> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zfh1p0_zfhmin1p0"
>> } } */
>> +/* { dg-final { scan-assembler ".attribute arch,
>> \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0\""
>> } } */
>> +/* { dg-final { scan-assembler ".option arch,
>> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
>> } } */
>> +/* { dg-final { scan-assembler ".option arch,
>> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zbb1p0"
>> } } */
>> +/* { dg-final { scan-assembler ".option arch,
>> rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zfh1p0_zfhmin1p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0"
>> } } */
>> --
>> 2.17.1
>>
>>
diff mbox series

Patch

diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc
index cad3551feb6..a02f1fe19a0 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -82,6 +82,18 @@  static const riscv_implied_info_t riscv_implied_info[] =
   {"a", "zaamo"},
   {"a", "zalrsc"},
 
+  {"c", "zca"},
+  {"c", "zcf",
+   [] (const riscv_subset_list *subset_list) -> bool
+   {
+     return subset_list->xlen () == 32 && subset_list->lookup ("f");
+   }},
+  {"c", "zcd",
+   [] (const riscv_subset_list *subset_list) -> bool
+   {
+     return subset_list->lookup ("d");
+   }},
+
   {"zdinx", "zfinx"},
   {"zfinx", "zicsr"},
   {"zdinx", "zicsr"},
diff --git a/gcc/testsuite/gcc.target/riscv/arch-39.c b/gcc/testsuite/gcc.target/riscv/arch-39.c
new file mode 100644
index 00000000000..beeb81e44c5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-39.c
@@ -0,0 +1,7 @@ 
+/* { dg-do compile } */
+/* { dg-options "-march=rv64idc_zcmt -mabi=lp64d" } */
+int
+foo ()
+{}
+
+/* { dg-error "zcd conflicts with zcmt" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/arch-40.c b/gcc/testsuite/gcc.target/riscv/arch-40.c
new file mode 100644
index 00000000000..eaefaf1d0d7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-40.c
@@ -0,0 +1,7 @@ 
+/* { dg-do compile } */
+/* { dg-options "-march=rv64idc_zcmp -mabi=lp64d" } */
+int
+foo ()
+{}
+
+/* { dg-error "zcd conflicts with zcmp" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-15.c b/gcc/testsuite/gcc.target/riscv/attribute-15.c
index a2e394b6489..ac6caaecd4f 100644
--- a/gcc/testsuite/gcc.target/riscv/attribute-15.c
+++ b/gcc/testsuite/gcc.target/riscv/attribute-15.c
@@ -3,4 +3,4 @@ 
 int foo()
 {
 }
-/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0\"" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0_zcf1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-18.c b/gcc/testsuite/gcc.target/riscv/attribute-18.c
index eefd602103d..9f7199f331a 100644
--- a/gcc/testsuite/gcc.target/riscv/attribute-18.c
+++ b/gcc/testsuite/gcc.target/riscv/attribute-18.c
@@ -1,4 +1,4 @@ 
 /* { dg-do compile } */
 /* { dg-options "-mriscv-attribute -march=rv64imafdc -mabi=lp64d -misa-spec=2.2" } */
 int foo() {}
-/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0\"" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/pr110696.c b/gcc/testsuite/gcc.target/riscv/pr110696.c
index 08682a047e0..8aa6cd07f4f 100644
--- a/gcc/testsuite/gcc.target/riscv/pr110696.c
+++ b/gcc/testsuite/gcc.target/riscv/pr110696.c
@@ -4,4 +4,4 @@  int foo()
 {
 }
 
-/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0\"" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
index dedcef9b353..b6b708f1a58 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O1 -march=rv64gcv_zfh_zca_zcmp -mabi=lp64d -fno-shrink-wrap-separate" } */
+/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d -fno-shrink-wrap-separate" } */
 /* { dg-final { check-function-bodies "**" "" } } */
 
 #include <riscv_vector.h>
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
index 14fb2c400a4..5f8f96f86a9 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O1 -march=rv64gcv_zfh_zca_zcmp -mabi=lp64d -fno-shrink-wrap-separate" } */
+/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d -fno-shrink-wrap-separate" } */
 /* { dg-final { check-function-bodies "**" "" } } */
 
 #include <riscv_vector.h>
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
index faeb406498d..aa9c7fa18d5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c
@@ -54,5 +54,5 @@  test_3 (int *a, int *b, int *out, unsigned count)
     out[i] = a[i] + b[i];
 }
 
-/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0\"" } } */
-/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0\"" } } */
+/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
index 38815ef5bd0..dff9198ecaa 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c
@@ -107,7 +107,7 @@  test_6 (_Float16 *a, _Float16 *b, _Float16 *out, unsigned count)
     out[i] = a[i] + b[i];
 }
 
-/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0\"" } } */
-/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0" } } */
-/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zbb1p0" } } */
-/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1p0_zfh1p0_zfhmin1p0" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0\"" } } */
+/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0" } } */
+/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0_zbb1p0" } } */
+/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zfh1p0_zfhmin1p0_zaamo1p0_zalrsc1_zca1p0_zcd1p0" } } */