diff mbox series

RISC-V: Clarify that Vector Crypto Extensions require Vector Extensions[PR116150]

Message ID 20240805082343.1767370-1-shihua@iscas.ac.cn
State New
Headers show
Series RISC-V: Clarify that Vector Crypto Extensions require Vector Extensions[PR116150] | expand

Commit Message

Liao Shihua Aug. 5, 2024, 8:23 a.m. UTC
PR 116150: Zvk* and Zvb* extensions requires v or zve* extension, but on gcc v is implied.

gcc/ChangeLog:

        * common/config/riscv/riscv-common.cc: Removed the zvk extension's implicit expansion of v extension.
        * config/riscv/arch-canonicalize: Ditto.
        * config/riscv/riscv.cc (riscv_override_options_internal): Throw error when zvb or zvk extension without v extension.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: add v or zve* to -march.
        * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: Ditto.
        * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: Ditto.
        * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: Ditto.
        * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: Ditto.
        * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: Ditto.
        * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: Ditto.
        * gcc.target/riscv/rvv/base/zvbc-intrinsic.c: Ditto.
        * gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c: Ditto.
        * gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c: Ditto.
        * gcc.target/riscv/rvv/base/zvknhb-intrinsic.c: Ditto.
        * gcc.target/riscv/zvbb.c: Ditto.
        * gcc.target/riscv/zvbc.c: Ditto.
        * gcc.target/riscv/zvkb.c: Ditto.
        * gcc.target/riscv/zvkg.c: Ditto.
        * gcc.target/riscv/zvkn-1.c: Ditto.
        * gcc.target/riscv/zvkn.c: Ditto.
        * gcc.target/riscv/zvknc-1.c: Ditto.
        * gcc.target/riscv/zvknc-2.c: Ditto.
        * gcc.target/riscv/zvknc.c: Ditto.
        * gcc.target/riscv/zvkned.c: Ditto.
        * gcc.target/riscv/zvkng-1.c: Ditto.
        * gcc.target/riscv/zvkng-2.c: Ditto.
        * gcc.target/riscv/zvkng.c: Ditto.
        * gcc.target/riscv/zvknha.c: Ditto.
        * gcc.target/riscv/zvknhb.c: Ditto.
        * gcc.target/riscv/zvks-1.c: Ditto.
        * gcc.target/riscv/zvks.c: Ditto.
        * gcc.target/riscv/zvksc-1.c: Ditto.
        * gcc.target/riscv/zvksc-2.c: Ditto.
        * gcc.target/riscv/zvksc.c: Ditto.
        * gcc.target/riscv/zvksed.c: Ditto.
        * gcc.target/riscv/zvksg-1.c: Ditto.
        * gcc.target/riscv/zvksg-2.c: Ditto.
        * gcc.target/riscv/zvksg.c: Ditto.
        * gcc.target/riscv/zvksh.c: Ditto.
        * gcc.target/riscv/pr116150-1.c: New test.
        * gcc.target/riscv/pr116150-2.c: New test.
        * gcc.target/riscv/pr116150-3.c: New test.
        * gcc.target/riscv/pr116150-4.c: New test.

---
 gcc/common/config/riscv/riscv-common.cc            |  8 --------
 gcc/config/riscv/arch-canonicalize                 |  8 --------
 gcc/config/riscv/riscv.cc                          | 14 ++++++++++++++
 gcc/testsuite/gcc.target/riscv/pr116150-1.c        |  9 +++++++++
 gcc/testsuite/gcc.target/riscv/pr116150-2.c        |  8 ++++++++
 gcc/testsuite/gcc.target/riscv/pr116150-3.c        |  8 ++++++++
 gcc/testsuite/gcc.target/riscv/pr116150-4.c        |  8 ++++++++
 .../base/target_attribute_v_with_intrinsic-47.c    |  2 +-
 .../base/target_attribute_v_with_intrinsic-48.c    |  2 +-
 .../base/target_attribute_v_with_intrinsic-49.c    |  2 +-
 .../base/target_attribute_v_with_intrinsic-50.c    |  2 +-
 .../base/target_attribute_v_with_intrinsic-51.c    |  2 +-
 .../base/target_attribute_v_with_intrinsic-52.c    |  2 +-
 .../base/target_attribute_v_with_intrinsic-53.c    |  2 +-
 .../gcc.target/riscv/rvv/base/zvbc-intrinsic.c     |  2 +-
 .../riscv/rvv/base/zvbc_vx_constraint-1.c          |  2 +-
 .../riscv/rvv/base/zvbc_vx_constraint-2.c          |  2 +-
 .../gcc.target/riscv/rvv/base/zvknhb-intrinsic.c   |  2 +-
 gcc/testsuite/gcc.target/riscv/zvbb.c              |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvbc.c              |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvkb.c              |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvkg.c              |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvkn-1.c            |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvkn.c              |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvknc-1.c           |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvknc-2.c           |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvknc.c             |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvkned.c            |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvkng-1.c           |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvkng-2.c           |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvkng.c             |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvknha.c            |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvknhb.c            |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvks-1.c            |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvks.c              |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvksc-1.c           |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvksc-2.c           |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvksc.c             |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvksed.c            |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvksg-1.c           |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvksg-2.c           |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvksg.c             |  4 ++--
 gcc/testsuite/gcc.target/riscv/zvksh.c             |  4 ++--
 43 files changed, 108 insertions(+), 77 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/pr116150-1.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/pr116150-2.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/pr116150-3.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/pr116150-4.c

Comments

Patrick O'Neill Aug. 5, 2024, 4:23 p.m. UTC | #1
On 8/5/24 01:23, Liao Shihua wrote:
>          PR 116150: Zvk* and Zvb* extensions requires v or zve* extension, but on gcc v is implied.
>
> gcc/ChangeLog:
>
>          * common/config/riscv/riscv-common.cc: Removed the zvk extension's implicit expansion of v extension.
>          * config/riscv/arch-canonicalize: Ditto.
>          * config/riscv/riscv.cc (riscv_override_options_internal): Throw error when zvb or zvk extension without v extension.
>
> gcc/testsuite/ChangeLog:
>
>          * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: add v or zve* to -march.
>          * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: Ditto.
>          * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: Ditto.
>          * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: Ditto.
>          * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: Ditto.
>          * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: Ditto.
>          * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: Ditto.
>          * gcc.target/riscv/rvv/base/zvbc-intrinsic.c: Ditto.
>          * gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c: Ditto.
>          * gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c: Ditto.
>          * gcc.target/riscv/rvv/base/zvknhb-intrinsic.c: Ditto.
>          * gcc.target/riscv/zvbb.c: Ditto.
>          * gcc.target/riscv/zvbc.c: Ditto.
>          * gcc.target/riscv/zvkb.c: Ditto.
>          * gcc.target/riscv/zvkg.c: Ditto.
>          * gcc.target/riscv/zvkn-1.c: Ditto.
>          * gcc.target/riscv/zvkn.c: Ditto.
>          * gcc.target/riscv/zvknc-1.c: Ditto.
>          * gcc.target/riscv/zvknc-2.c: Ditto.
>          * gcc.target/riscv/zvknc.c: Ditto.
>          * gcc.target/riscv/zvkned.c: Ditto.
>          * gcc.target/riscv/zvkng-1.c: Ditto.
>          * gcc.target/riscv/zvkng-2.c: Ditto.
>          * gcc.target/riscv/zvkng.c: Ditto.
>          * gcc.target/riscv/zvknha.c: Ditto.
>          * gcc.target/riscv/zvknhb.c: Ditto.
>          * gcc.target/riscv/zvks-1.c: Ditto.
>          * gcc.target/riscv/zvks.c: Ditto.
>          * gcc.target/riscv/zvksc-1.c: Ditto.
>          * gcc.target/riscv/zvksc-2.c: Ditto.
>          * gcc.target/riscv/zvksc.c: Ditto.
>          * gcc.target/riscv/zvksed.c: Ditto.
>          * gcc.target/riscv/zvksg-1.c: Ditto.
>          * gcc.target/riscv/zvksg-2.c: Ditto.
>          * gcc.target/riscv/zvksg.c: Ditto.
>          * gcc.target/riscv/zvksh.c: Ditto.
>          * gcc.target/riscv/pr116150-1.c: New test.
>          * gcc.target/riscv/pr116150-2.c: New test.
>          * gcc.target/riscv/pr116150-3.c: New test.
>          * gcc.target/riscv/pr116150-4.c: New test.
>
> ---

Thanks for the patch! It's not clear to me if we want to match LLVM's 
behavior here.

Here's where GCC's current behavior is documented: 
https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/doc/invoke.texi;h=0fe99ca8ef6e8868f60369f6329fe29599d89159;hb=HEAD#l31150

Maybe Jeff or Kito can provide some guidance for what we want to do here.

Patrick
Jeff Law Aug. 6, 2024, 4:34 a.m. UTC | #2
On 8/5/24 10:23 AM, Patrick O'Neill wrote:
> 
> On 8/5/24 01:23, Liao Shihua wrote:
>>          PR 116150: Zvk* and Zvb* extensions requires v or zve* 
>> extension, but on gcc v is implied.
>>
>> gcc/ChangeLog:
>>
>>          * common/config/riscv/riscv-common.cc: Removed the zvk 
>> extension's implicit expansion of v extension.
>>          * config/riscv/arch-canonicalize: Ditto.
>>          * config/riscv/riscv.cc (riscv_override_options_internal): 
>> Throw error when zvb or zvk extension without v extension.
>>
>> gcc/testsuite/ChangeLog:
>>
>>          * gcc.target/riscv/rvv/base/ 
>> target_attribute_v_with_intrinsic-47.c: add v or zve* to -march.
>>          * gcc.target/riscv/rvv/base/ 
>> target_attribute_v_with_intrinsic-48.c: Ditto.
>>          * gcc.target/riscv/rvv/base/ 
>> target_attribute_v_with_intrinsic-49.c: Ditto.
>>          * gcc.target/riscv/rvv/base/ 
>> target_attribute_v_with_intrinsic-50.c: Ditto.
>>          * gcc.target/riscv/rvv/base/ 
>> target_attribute_v_with_intrinsic-51.c: Ditto.
>>          * gcc.target/riscv/rvv/base/ 
>> target_attribute_v_with_intrinsic-52.c: Ditto.
>>          * gcc.target/riscv/rvv/base/ 
>> target_attribute_v_with_intrinsic-53.c: Ditto.
>>          * gcc.target/riscv/rvv/base/zvbc-intrinsic.c: Ditto.
>>          * gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c: Ditto.
>>          * gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c: Ditto.
>>          * gcc.target/riscv/rvv/base/zvknhb-intrinsic.c: Ditto.
>>          * gcc.target/riscv/zvbb.c: Ditto.
>>          * gcc.target/riscv/zvbc.c: Ditto.
>>          * gcc.target/riscv/zvkb.c: Ditto.
>>          * gcc.target/riscv/zvkg.c: Ditto.
>>          * gcc.target/riscv/zvkn-1.c: Ditto.
>>          * gcc.target/riscv/zvkn.c: Ditto.
>>          * gcc.target/riscv/zvknc-1.c: Ditto.
>>          * gcc.target/riscv/zvknc-2.c: Ditto.
>>          * gcc.target/riscv/zvknc.c: Ditto.
>>          * gcc.target/riscv/zvkned.c: Ditto.
>>          * gcc.target/riscv/zvkng-1.c: Ditto.
>>          * gcc.target/riscv/zvkng-2.c: Ditto.
>>          * gcc.target/riscv/zvkng.c: Ditto.
>>          * gcc.target/riscv/zvknha.c: Ditto.
>>          * gcc.target/riscv/zvknhb.c: Ditto.
>>          * gcc.target/riscv/zvks-1.c: Ditto.
>>          * gcc.target/riscv/zvks.c: Ditto.
>>          * gcc.target/riscv/zvksc-1.c: Ditto.
>>          * gcc.target/riscv/zvksc-2.c: Ditto.
>>          * gcc.target/riscv/zvksc.c: Ditto.
>>          * gcc.target/riscv/zvksed.c: Ditto.
>>          * gcc.target/riscv/zvksg-1.c: Ditto.
>>          * gcc.target/riscv/zvksg-2.c: Ditto.
>>          * gcc.target/riscv/zvksg.c: Ditto.
>>          * gcc.target/riscv/zvksh.c: Ditto.
>>          * gcc.target/riscv/pr116150-1.c: New test.
>>          * gcc.target/riscv/pr116150-2.c: New test.
>>          * gcc.target/riscv/pr116150-3.c: New test.
>>          * gcc.target/riscv/pr116150-4.c: New test.
>>
>> ---
> 
> Thanks for the patch! It's not clear to me if we want to match LLVM's 
> behavior here.
> 
> Here's where GCC's current behavior is documented: https://gcc.gnu.org/ 
> git/?p=gcc.git;a=blob;f=gcc/doc/ 
> invoke.texi;h=0fe99ca8ef6e8868f60369f6329fe29599d89159;hb=HEAD#l31150
> 
> Maybe Jeff or Kito can provide some guidance for what we want to do here.
Our behavior is documented as implying V if we were to enable Zv*, so 
unless there's a strong need to follow LLVM here, I'd tend to leave it 
as-is.  But we can certainly discuss tomorrow AM.


jeff
Liao Shihua Aug. 6, 2024, 6:36 a.m. UTC | #3
在 2024/8/6 12:34, Jeff Law 写道:
>
>
> On 8/5/24 10:23 AM, Patrick O'Neill wrote:
>>
>> On 8/5/24 01:23, Liao Shihua wrote:
>>>          PR 116150: Zvk* and Zvb* extensions requires v or zve* 
>>> extension, but on gcc v is implied.
>>>
>>> gcc/ChangeLog:
>>>
>>>          * common/config/riscv/riscv-common.cc: Removed the zvk 
>>> extension's implicit expansion of v extension.
>>>          * config/riscv/arch-canonicalize: Ditto.
>>>          * config/riscv/riscv.cc (riscv_override_options_internal): 
>>> Throw error when zvb or zvk extension without v extension.
>>>
>>> gcc/testsuite/ChangeLog:
>>>
>>>          * gcc.target/riscv/rvv/base/ 
>>> target_attribute_v_with_intrinsic-47.c: add v or zve* to -march.
>>>          * gcc.target/riscv/rvv/base/ 
>>> target_attribute_v_with_intrinsic-48.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/ 
>>> target_attribute_v_with_intrinsic-49.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/ 
>>> target_attribute_v_with_intrinsic-50.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/ 
>>> target_attribute_v_with_intrinsic-51.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/ 
>>> target_attribute_v_with_intrinsic-52.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/ 
>>> target_attribute_v_with_intrinsic-53.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/zvbc-intrinsic.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c: Ditto.
>>>          * gcc.target/riscv/rvv/base/zvknhb-intrinsic.c: Ditto.
>>>          * gcc.target/riscv/zvbb.c: Ditto.
>>>          * gcc.target/riscv/zvbc.c: Ditto.
>>>          * gcc.target/riscv/zvkb.c: Ditto.
>>>          * gcc.target/riscv/zvkg.c: Ditto.
>>>          * gcc.target/riscv/zvkn-1.c: Ditto.
>>>          * gcc.target/riscv/zvkn.c: Ditto.
>>>          * gcc.target/riscv/zvknc-1.c: Ditto.
>>>          * gcc.target/riscv/zvknc-2.c: Ditto.
>>>          * gcc.target/riscv/zvknc.c: Ditto.
>>>          * gcc.target/riscv/zvkned.c: Ditto.
>>>          * gcc.target/riscv/zvkng-1.c: Ditto.
>>>          * gcc.target/riscv/zvkng-2.c: Ditto.
>>>          * gcc.target/riscv/zvkng.c: Ditto.
>>>          * gcc.target/riscv/zvknha.c: Ditto.
>>>          * gcc.target/riscv/zvknhb.c: Ditto.
>>>          * gcc.target/riscv/zvks-1.c: Ditto.
>>>          * gcc.target/riscv/zvks.c: Ditto.
>>>          * gcc.target/riscv/zvksc-1.c: Ditto.
>>>          * gcc.target/riscv/zvksc-2.c: Ditto.
>>>          * gcc.target/riscv/zvksc.c: Ditto.
>>>          * gcc.target/riscv/zvksed.c: Ditto.
>>>          * gcc.target/riscv/zvksg-1.c: Ditto.
>>>          * gcc.target/riscv/zvksg-2.c: Ditto.
>>>          * gcc.target/riscv/zvksg.c: Ditto.
>>>          * gcc.target/riscv/zvksh.c: Ditto.
>>>          * gcc.target/riscv/pr116150-1.c: New test.
>>>          * gcc.target/riscv/pr116150-2.c: New test.
>>>          * gcc.target/riscv/pr116150-3.c: New test.
>>>          * gcc.target/riscv/pr116150-4.c: New test.
>>>
>>> ---
>>
>> Thanks for the patch! It's not clear to me if we want to match LLVM's 
>> behavior here.
>>
>> Here's where GCC's current behavior is documented: 
>> https://gcc.gnu.org/ git/?p=gcc.git;a=blob;f=gcc/doc/ 
>> invoke.texi;h=0fe99ca8ef6e8868f60369f6329fe29599d89159;hb=HEAD#l31150
>>
>> Maybe Jeff or Kito can provide some guidance for what we want to do 
>> here.
> Our behavior is documented as implying V if we were to enable Zv*, so 
> unless there's a strong need to follow LLVM here, I'd tend to leave it 
> as-is.  But we can certainly discuss tomorrow AM.
>
>
> jeff

Hello, Jeff and Patrick

In my opinion, this question is not whether to follow LLVM.

I want to make it clear that when we implement RISC-V extensions in GCC, 
Do we need to explicitly declare dependencies between extensions or just 
implicitly?

Best Regards

Liao Shihua
Jeff Law Aug. 7, 2024, 3:19 p.m. UTC | #4
On 8/6/24 12:36 AM, Liao Shihua wrote:
> 
> 在 2024/8/6 12:34, Jeff Law 写道:
>>
>>
>> On 8/5/24 10:23 AM, Patrick O'Neill wrote:
>>>
>>> On 8/5/24 01:23, Liao Shihua wrote:
>>>>          PR 116150: Zvk* and Zvb* extensions requires v or zve* 
>>>> extension, but on gcc v is implied.
>>>>
>>>> gcc/ChangeLog:
>>>>
>>>>          * common/config/riscv/riscv-common.cc: Removed the zvk 
>>>> extension's implicit expansion of v extension.
>>>>          * config/riscv/arch-canonicalize: Ditto.
>>>>          * config/riscv/riscv.cc (riscv_override_options_internal): 
>>>> Throw error when zvb or zvk extension without v extension.
>>>>
>>>> gcc/testsuite/ChangeLog:
>>>>
>>>>          * gcc.target/riscv/rvv/base/ 
>>>> target_attribute_v_with_intrinsic-47.c: add v or zve* to -march.
>>>>          * gcc.target/riscv/rvv/base/ 
>>>> target_attribute_v_with_intrinsic-48.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/ 
>>>> target_attribute_v_with_intrinsic-49.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/ 
>>>> target_attribute_v_with_intrinsic-50.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/ 
>>>> target_attribute_v_with_intrinsic-51.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/ 
>>>> target_attribute_v_with_intrinsic-52.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/ 
>>>> target_attribute_v_with_intrinsic-53.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/zvbc-intrinsic.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c: Ditto.
>>>>          * gcc.target/riscv/rvv/base/zvknhb-intrinsic.c: Ditto.
>>>>          * gcc.target/riscv/zvbb.c: Ditto.
>>>>          * gcc.target/riscv/zvbc.c: Ditto.
>>>>          * gcc.target/riscv/zvkb.c: Ditto.
>>>>          * gcc.target/riscv/zvkg.c: Ditto.
>>>>          * gcc.target/riscv/zvkn-1.c: Ditto.
>>>>          * gcc.target/riscv/zvkn.c: Ditto.
>>>>          * gcc.target/riscv/zvknc-1.c: Ditto.
>>>>          * gcc.target/riscv/zvknc-2.c: Ditto.
>>>>          * gcc.target/riscv/zvknc.c: Ditto.
>>>>          * gcc.target/riscv/zvkned.c: Ditto.
>>>>          * gcc.target/riscv/zvkng-1.c: Ditto.
>>>>          * gcc.target/riscv/zvkng-2.c: Ditto.
>>>>          * gcc.target/riscv/zvkng.c: Ditto.
>>>>          * gcc.target/riscv/zvknha.c: Ditto.
>>>>          * gcc.target/riscv/zvknhb.c: Ditto.
>>>>          * gcc.target/riscv/zvks-1.c: Ditto.
>>>>          * gcc.target/riscv/zvks.c: Ditto.
>>>>          * gcc.target/riscv/zvksc-1.c: Ditto.
>>>>          * gcc.target/riscv/zvksc-2.c: Ditto.
>>>>          * gcc.target/riscv/zvksc.c: Ditto.
>>>>          * gcc.target/riscv/zvksed.c: Ditto.
>>>>          * gcc.target/riscv/zvksg-1.c: Ditto.
>>>>          * gcc.target/riscv/zvksg-2.c: Ditto.
>>>>          * gcc.target/riscv/zvksg.c: Ditto.
>>>>          * gcc.target/riscv/zvksh.c: Ditto.
>>>>          * gcc.target/riscv/pr116150-1.c: New test.
>>>>          * gcc.target/riscv/pr116150-2.c: New test.
>>>>          * gcc.target/riscv/pr116150-3.c: New test.
>>>>          * gcc.target/riscv/pr116150-4.c: New test.
>>>>
>>>> ---
>>>
>>> Thanks for the patch! It's not clear to me if we want to match LLVM's 
>>> behavior here.
>>>
>>> Here's where GCC's current behavior is documented: https:// 
>>> gcc.gnu.org/ git/?p=gcc.git;a=blob;f=gcc/doc/ 
>>> invoke.texi;h=0fe99ca8ef6e8868f60369f6329fe29599d89159;hb=HEAD#l31150
>>>
>>> Maybe Jeff or Kito can provide some guidance for what we want to do 
>>> here.
>> Our behavior is documented as implying V if we were to enable Zv*, so 
>> unless there's a strong need to follow LLVM here, I'd tend to leave it 
>> as-is.  But we can certainly discuss tomorrow AM.
>>
>>
>> jeff
> 
> Hello, Jeff and Patrick
> 
> In my opinion, this question is not whether to follow LLVM.
> 
> I want to make it clear that when we implement RISC-V extensions in GCC, 
> Do we need to explicitly declare dependencies between extensions or just 
> implicitly?
We discussed this as a group in the patchwork meeting yesterday.  The 
consensus was to keep GCC's behavior as-is.  So for example, enabling 
Zv* would imply V.

Thanks!
jeff
diff mbox series

Patch

diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc
index 1944c7785c4..83db43ca6d0 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -168,14 +168,6 @@  static const riscv_implied_info_t riscv_implied_info[] =
   {"zvksg", "zvks"},
   {"zvksg", "zvkg"},
   {"zvbb",  "zvkb"},
-  {"zvbc",   "zve64x"},
-  {"zvkb",   "zve32x"},
-  {"zvkg",   "zve32x"},
-  {"zvkned", "zve32x"},
-  {"zvknha", "zve32x"},
-  {"zvknhb", "zve64x"},
-  {"zvksed", "zve32x"},
-  {"zvksh",  "zve32x"},
 
   {"zfbfmin", "zfhmin"},
   {"zfh", "zfhmin"},
diff --git a/gcc/config/riscv/arch-canonicalize b/gcc/config/riscv/arch-canonicalize
index 35e0f46b6bd..711bf96a69c 100755
--- a/gcc/config/riscv/arch-canonicalize
+++ b/gcc/config/riscv/arch-canonicalize
@@ -82,14 +82,6 @@  IMPLIED_EXT = {
   "zvksc"  : ["zvks", "zvbc"],
   "zvksg"  : ["zvks", "zvkg"],
   "zvbb"   : ["zvkb"],
-  "zvbc"   : ["zve64x"],
-  "zvkb"   : ["zve32x"],
-  "zvkg"   : ["zve32x"],
-  "zvkned" : ["zve32x"],
-  "zvknha" : ["zve32x"],
-  "zvknhb" : ["zve64x"],
-  "zvksed" : ["zve32x"],
-  "zvksh"  : ["zve32x"],
 }
 
 def arch_canonicalize(arch, isa_spec):
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index b19d56149e7..1eb832962bf 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -9691,6 +9691,20 @@  riscv_override_options_internal (struct gcc_options *opts)
   else if (!TARGET_MUL_OPTS_P (opts) && TARGET_DIV_OPTS_P (opts))
     error ("%<-mdiv%> requires %<-march%> to subsume the %<M%> extension");
 
+  /* ZVK* extensions require v or zve* extension.  */
+  if (TARGET_ZVBB && !TARGET_VECTOR)
+    error ("zvbb extension requires v or zve32 extension");
+
+  if (TARGET_ZVBC && !TARGET_VECTOR_ELEN_64)
+    error ("zvbc extension requires v or zve64 extension");
+
+  if (TARGET_ZVKNHB && !TARGET_VECTOR_ELEN_64)
+    error ("zvknhb extension requires v or zve64 extension");
+
+  if ((TARGET_ZVKB || TARGET_ZVKG || TARGET_ZVKNED ||TARGET_ZVKNHA
+     || TARGET_ZVKSED || TARGET_ZVKSH) && !TARGET_VECTOR)
+    error ("zvk extensions requires v or zve32 extension");
+
   /* We might use a multiplication to calculate the scalable vector length at
      runtime.  Therefore, require the M extension.  */
   if (TARGET_VECTOR && !TARGET_MUL)
diff --git a/gcc/testsuite/gcc.target/riscv/pr116150-1.c b/gcc/testsuite/gcc.target/riscv/pr116150-1.c
new file mode 100644
index 00000000000..409c6394f15
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr116150-1.c
@@ -0,0 +1,9 @@ 
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zvbb_zbkb" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zvbb_zbkb" { target { rv32 } } } */
+int foo()
+{
+}
+
+/* { dg-error "zvbb extension requires v or zve32 extension" "" { target *-*-* } 0 } */
+/* { dg-error "zvk extensions requires v or zve32 extension" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/pr116150-2.c b/gcc/testsuite/gcc.target/riscv/pr116150-2.c
new file mode 100644
index 00000000000..43da1013657
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr116150-2.c
@@ -0,0 +1,8 @@ 
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zvbc" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zvbc" { target { rv32 } } } */
+int foo()
+{
+}
+
+/* { dg-error "zvbc extension requires v or zve64 extension" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/pr116150-3.c b/gcc/testsuite/gcc.target/riscv/pr116150-3.c
new file mode 100644
index 00000000000..907cc02cf40
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr116150-3.c
@@ -0,0 +1,8 @@ 
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zvknhb" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zvknhb" { target { rv32 } } } */
+int foo()
+{
+}
+
+/* { dg-error "zvknhb extension requires v or zve64 extension" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/pr116150-4.c b/gcc/testsuite/gcc.target/riscv/pr116150-4.c
new file mode 100644
index 00000000000..82666db7e38
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr116150-4.c
@@ -0,0 +1,8 @@ 
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zvkb_zvkned_zvknha_zvksed_zvksh_zvkg" { target { rv64 } } } */
+/* { dg-options "-march=rv32gc_zvkb_zvkned_zvknha_zvksed_zvksh_zvkg" { target { rv32 } } } */
+int foo()
+{
+}
+
+/* { dg-error "zvk extensions requires v or zve32 extension" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
index 94bbcb05e4d..fbe2a1d6013 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c
@@ -1,6 +1,6 @@ 
 /* Test that we do not have error when compile */
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
index 054b7630fa9..5d5ba179e86 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c
@@ -1,6 +1,6 @@ 
 /* Test that we do not have error when compile */
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
index b2e6658f4d3..a95d2754856 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c
@@ -1,6 +1,6 @@ 
 /* Test that we do not have error when compile */
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
index 8574cd049cf..442111e8501 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c
@@ -1,6 +1,6 @@ 
 /* Test that we do not have error when compile */
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
index e27b4d5fbb3..28076621299 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c
@@ -1,6 +1,6 @@ 
 /* Test that we do not have error when compile */
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
index 2213c6fe35d..ade88d6d055 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c
@@ -1,6 +1,6 @@ 
 /* Test that we do not have error when compile */
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
index 66901cc72ad..d3a07923433 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c
@@ -1,6 +1,6 @@ 
 /* Test that we do not have error when compile */
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc-intrinsic.c b/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc-intrinsic.c
index 6975ae4c0e7..550f32f4f2b 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc-intrinsic.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc-intrinsic.c
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvbc -mabi=lp64d -O2" } */
+/* { dg-options "-march=rv64gc_zvbc_zve64x -mabi=lp64d -O2" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c
index 1bf11e4c231..da418ffd7b3 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-1.c
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv32gc_zvbc -mabi=ilp32 -O3" } */
+/* { dg-options "-march=rv32gc_zvbc_zve64x -mabi=ilp32d -O3" } */
 #include "riscv_vector.h"
 
 vuint64m1_t test_vclmul_vx_u64m1(vuint64m1_t vs2, uint64_t rs1, size_t vl) {
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c
index 3fb14660af8..b60c442167d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/zvbc_vx_constraint-2.c
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvbc -mabi=lp64d -O3" } */
+/* { dg-options "-march=rv64gc_zvbc_zve64x -mabi=lp64d -O3" } */
 #include "riscv_vector.h"
 
 vuint64m1_t test_vclmul_vx_u64m1_extend(vuint64m1_t vs2, uint32_t rs1, size_t vl) {
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/zvknhb-intrinsic.c b/gcc/testsuite/gcc.target/riscv/rvv/base/zvknhb-intrinsic.c
index 1d23903fa6f..3d901c26fb7 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/zvknhb-intrinsic.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/zvknhb-intrinsic.c
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvknhb -mabi=lp64d -O2" } */
+/* { dg-options "-march=rv64gc_zvknhb_zve64x -mabi=lp64d -O2" } */
 
 #include "riscv_vector.h"
 
diff --git a/gcc/testsuite/gcc.target/riscv/zvbb.c b/gcc/testsuite/gcc.target/riscv/zvbb.c
index 0b78fe4dc62..0e3f087d469 100644
--- a/gcc/testsuite/gcc.target/riscv/zvbb.c
+++ b/gcc/testsuite/gcc.target/riscv/zvbb.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvbb" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvbb" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvbb" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvbb" { target { rv32 } } } */
 
 #ifndef __riscv_zvbb
 #error "Feature macro not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvbc.c b/gcc/testsuite/gcc.target/riscv/zvbc.c
index 2a00c965f32..53b384fe4e5 100644
--- a/gcc/testsuite/gcc.target/riscv/zvbc.c
+++ b/gcc/testsuite/gcc.target/riscv/zvbc.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvbc" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvbc" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvbc" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvbc" { target { rv32 } } } */
 
 #ifndef __riscv_zvbc
 #error "Feature macro not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvkb.c b/gcc/testsuite/gcc.target/riscv/zvkb.c
index d5c28e79ef6..ca5a2de26d3 100644
--- a/gcc/testsuite/gcc.target/riscv/zvkb.c
+++ b/gcc/testsuite/gcc.target/riscv/zvkb.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkb" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkb" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkb" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkb" { target { rv32 } } } */
 
 #ifndef __riscv_zvkb
 #error "Feature macro not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvkg.c b/gcc/testsuite/gcc.target/riscv/zvkg.c
index fe0a841e745..d6d495fdc98 100644
--- a/gcc/testsuite/gcc.target/riscv/zvkg.c
+++ b/gcc/testsuite/gcc.target/riscv/zvkg.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkg" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkg" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkg" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkg" { target { rv32 } } } */
 
 #ifndef __riscv_zvkg
 #error "Feature macro not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvkn-1.c b/gcc/testsuite/gcc.target/riscv/zvkn-1.c
index 069a8f66c92..46bd6b44d32 100644
--- a/gcc/testsuite/gcc.target/riscv/zvkn-1.c
+++ b/gcc/testsuite/gcc.target/riscv/zvkn-1.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkned_zvknhb_zvkb_zvkt" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkned_zvknhb_zvkb_zvkt" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkned_zvknhb_zvkb_zvkt" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkned_zvknhb_zvkb_zvkt" { target { rv32 } } } */
 
 #ifndef __riscv_zvkn
 #error "Feature macro for `Zvkn' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvkn.c b/gcc/testsuite/gcc.target/riscv/zvkn.c
index bcecbcc7e77..136f51bfec9 100644
--- a/gcc/testsuite/gcc.target/riscv/zvkn.c
+++ b/gcc/testsuite/gcc.target/riscv/zvkn.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkn" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkn" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkn" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkn" { target { rv32 } } } */
 
 #ifndef __riscv_zvkn
 #error "Feature macro for `Zvkn' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvknc-1.c b/gcc/testsuite/gcc.target/riscv/zvknc-1.c
index 64cae2bfe83..283895e8a1a 100644
--- a/gcc/testsuite/gcc.target/riscv/zvknc-1.c
+++ b/gcc/testsuite/gcc.target/riscv/zvknc-1.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkned_zvknhb_zvkb_zvkt_zvbc" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkned_zvknhb_zvkb_zvkt_zvbc" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkned_zvknhb_zvkb_zvkt_zvbc" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkned_zvknhb_zvkb_zvkt_zvbc" { target { rv32 } } } */
 
 #ifndef __riscv_zvknc
 #error "Feature macro for `Zvknc' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvknc-2.c b/gcc/testsuite/gcc.target/riscv/zvknc-2.c
index 1f8b510bfd1..e785030b4a6 100644
--- a/gcc/testsuite/gcc.target/riscv/zvknc-2.c
+++ b/gcc/testsuite/gcc.target/riscv/zvknc-2.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkn_zvbc" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkn_zvbc" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkn_zvbc" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkn_zvbc" { target { rv32 } } } */
 
 #ifndef __riscv_zvknc
 #error "Feature macro for `Zvknc' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvknc.c b/gcc/testsuite/gcc.target/riscv/zvknc.c
index 64dda5fdf1f..c2ba235f75e 100644
--- a/gcc/testsuite/gcc.target/riscv/zvknc.c
+++ b/gcc/testsuite/gcc.target/riscv/zvknc.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvknc" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvknc" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvknc" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvknc" { target { rv32 } } } */
 
 #ifndef __riscv_zvknc
 #error "Feature macro for `Zvknc' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvkned.c b/gcc/testsuite/gcc.target/riscv/zvkned.c
index 8f9f2532f3d..18f99706f4d 100644
--- a/gcc/testsuite/gcc.target/riscv/zvkned.c
+++ b/gcc/testsuite/gcc.target/riscv/zvkned.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkned" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkned" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkned" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkned" { target { rv32 } } } */
 
 #ifndef __riscv_zvkned
 #error "Feature macro not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvkng-1.c b/gcc/testsuite/gcc.target/riscv/zvkng-1.c
index 5419585f4de..92f83ac8013 100644
--- a/gcc/testsuite/gcc.target/riscv/zvkng-1.c
+++ b/gcc/testsuite/gcc.target/riscv/zvkng-1.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkned_zvknhb_zvkb_zvkt_zvkg" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkned_zvknhb_zvkb_zvkt_zvkg" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkned_zvknhb_zvkb_zvkt_zvkg" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkned_zvknhb_zvkb_zvkt_zvkg" { target { rv32 } } } */
 
 #ifndef __riscv_zvkng
 #error "Feature macro for `Zvkng' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvkng-2.c b/gcc/testsuite/gcc.target/riscv/zvkng-2.c
index 6c7b239e831..27000d26018 100644
--- a/gcc/testsuite/gcc.target/riscv/zvkng-2.c
+++ b/gcc/testsuite/gcc.target/riscv/zvkng-2.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkn_zvkg" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkn_zvkg" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkn_zvkg" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkn_zvkg" { target { rv32 } } } */
 
 #ifndef __riscv_zvkng
 #error "Feature macro for `Zvkng' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvkng.c b/gcc/testsuite/gcc.target/riscv/zvkng.c
index 6c516a4ae13..2623ce497e0 100644
--- a/gcc/testsuite/gcc.target/riscv/zvkng.c
+++ b/gcc/testsuite/gcc.target/riscv/zvkng.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvkng" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvkng" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvkng" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvkng" { target { rv32 } } } */
 
 #ifndef __riscv_zvkng
 #error "Feature macro for `Zvkng' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvknha.c b/gcc/testsuite/gcc.target/riscv/zvknha.c
index 70242a8cb04..8c3ec344d93 100644
--- a/gcc/testsuite/gcc.target/riscv/zvknha.c
+++ b/gcc/testsuite/gcc.target/riscv/zvknha.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvknha" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvknha" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvknha" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvknha" { target { rv32 } } } */
 
 #ifndef __riscv_zvknha
 #error "Feature macro not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvknhb.c b/gcc/testsuite/gcc.target/riscv/zvknhb.c
index af89d7b1b7d..cd267d53719 100644
--- a/gcc/testsuite/gcc.target/riscv/zvknhb.c
+++ b/gcc/testsuite/gcc.target/riscv/zvknhb.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvknhb" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvknhb" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvknhb" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvknhb" { target { rv32 } } } */
 
 #ifndef __riscv_zvknhb
 #error "Feature macro not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvks-1.c b/gcc/testsuite/gcc.target/riscv/zvks-1.c
index 180b3f3c2a9..b31bbd1592e 100644
--- a/gcc/testsuite/gcc.target/riscv/zvks-1.c
+++ b/gcc/testsuite/gcc.target/riscv/zvks-1.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvksed_zvksh_zvkb_zvkt" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvksed_zvksh_zvkb_zvkt" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvksed_zvksh_zvkb_zvkt" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvksed_zvksh_zvkb_zvkt" { target { rv32 } } } */
 
 #ifndef __riscv_zvks
 #error "Feature macro for `Zvks' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvks.c b/gcc/testsuite/gcc.target/riscv/zvks.c
index 2022d168ec1..7efeadd5c9c 100644
--- a/gcc/testsuite/gcc.target/riscv/zvks.c
+++ b/gcc/testsuite/gcc.target/riscv/zvks.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvks" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvks" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvks" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvks" { target { rv32 } } } */
 
 #ifndef __riscv_zvks
 #error "Feature macro for `Zvks' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvksc-1.c b/gcc/testsuite/gcc.target/riscv/zvksc-1.c
index 0c81b4ee93b..1e47afb2703 100644
--- a/gcc/testsuite/gcc.target/riscv/zvksc-1.c
+++ b/gcc/testsuite/gcc.target/riscv/zvksc-1.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvksed_zvksh_zvkb_zvkt_zvbc" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvksed_zvksh_zvkb_zvkt_zvbc" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvksed_zvksh_zvkb_zvkt_zvbc" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvksed_zvksh_zvkb_zvkt_zvbc" { target { rv32 } } } */
 
 #ifndef __riscv_zvksc
 #error "Feature macro for `Zvksc' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvksc-2.c b/gcc/testsuite/gcc.target/riscv/zvksc-2.c
index 0cee3586390..ce7f1f6402b 100644
--- a/gcc/testsuite/gcc.target/riscv/zvksc-2.c
+++ b/gcc/testsuite/gcc.target/riscv/zvksc-2.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvks_zvbc" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvks_zvbc" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvks_zvbc" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvks_zvbc" { target { rv32 } } } */
 
 #ifndef __riscv_zvksc
 #error "Feature macro for `Zvksc' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvksc.c b/gcc/testsuite/gcc.target/riscv/zvksc.c
index 6c33a86aa2e..e3bff46e1a5 100644
--- a/gcc/testsuite/gcc.target/riscv/zvksc.c
+++ b/gcc/testsuite/gcc.target/riscv/zvksc.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvksc" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvksc" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvksc" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvksc" { target { rv32 } } } */
 
 #ifndef __riscv_zvksc
 #error "Feature macro for `Zvksc' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvksed.c b/gcc/testsuite/gcc.target/riscv/zvksed.c
index 2ac58f84819..491ec72d663 100644
--- a/gcc/testsuite/gcc.target/riscv/zvksed.c
+++ b/gcc/testsuite/gcc.target/riscv/zvksed.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvksed" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvksed" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvksed" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvksed" { target { rv32 } } } */
 
 #ifndef __riscv_zvksed
 #error "Feature macro not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvksg-1.c b/gcc/testsuite/gcc.target/riscv/zvksg-1.c
index a81c8faf302..fc8fded20d5 100644
--- a/gcc/testsuite/gcc.target/riscv/zvksg-1.c
+++ b/gcc/testsuite/gcc.target/riscv/zvksg-1.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvksed_zvksh_zvkb_zvkt_zvkg" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvksed_zvksh_zvkb_zvkt_zvkg" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvksed_zvksh_zvkb_zvkt_zvkg" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvksed_zvksh_zvkb_zvkt_zvkg" { target { rv32 } } } */
 
 #ifndef __riscv_zvksg
 #error "Feature macro for `Zvksg' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvksg-2.c b/gcc/testsuite/gcc.target/riscv/zvksg-2.c
index f6aa06bfbbe..f0fbfda0acc 100644
--- a/gcc/testsuite/gcc.target/riscv/zvksg-2.c
+++ b/gcc/testsuite/gcc.target/riscv/zvksg-2.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvks_zvkg" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvks_zvkg" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvks_zvkg" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvks_zvkg" { target { rv32 } } } */
 
 #ifndef __riscv_zvksg
 #error "Feature macro for `Zvksg' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvksg.c b/gcc/testsuite/gcc.target/riscv/zvksg.c
index af2cd6e26ac..44178c61f89 100644
--- a/gcc/testsuite/gcc.target/riscv/zvksg.c
+++ b/gcc/testsuite/gcc.target/riscv/zvksg.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvksg" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvksg" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvksg" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvksg" { target { rv32 } } } */
 
 #ifndef __riscv_zvksg
 #error "Feature macro for `Zvksg' not defined"
diff --git a/gcc/testsuite/gcc.target/riscv/zvksh.c b/gcc/testsuite/gcc.target/riscv/zvksh.c
index f7190a42cc2..2b95429a3f7 100644
--- a/gcc/testsuite/gcc.target/riscv/zvksh.c
+++ b/gcc/testsuite/gcc.target/riscv/zvksh.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zvksh" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zvksh" { target { rv32 } } } */
+/* { dg-options "-march=rv64gcv_zvksh" { target { rv64 } } } */
+/* { dg-options "-march=rv32gcv_zvksh" { target { rv32 } } } */
 
 #ifndef __riscv_zvksh
 #error "Feature macro not defined"