I would prefer those checking happened in riscv_subset_list::parse@gcc/common/config/riscv/riscv-common.cc that could be reused when we adding target attribute.
And I plan integrate the arch-canonicalize script to just reusing whole arch string parser in GCC 14, so it would be great to have all check within riscv_subset_list::parse On Tue, Mar 28, 2023 at 10:23 PM Jiawei <jia...@iscas.ac.cn> wrote: > > Z*inx is conflict with float extensions, add incompatible check when > z*inx and hard_float both enabled. > > gcc/ChangeLog: > > * config/riscv/riscv.cc (riscv_option_override): New check. > > gcc/testsuite/ChangeLog: > > * gcc.target/riscv/arch-19.c: New test. > > --- > gcc/config/riscv/riscv.cc | 4 ++++ > gcc/testsuite/gcc.target/riscv/arch-19.c | 4 ++++ > 2 files changed, 8 insertions(+) > create mode 100644 gcc/testsuite/gcc.target/riscv/arch-19.c > > diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc > index 76eee4a55e9..162ba14d3c7 100644 > --- a/gcc/config/riscv/riscv.cc > +++ b/gcc/config/riscv/riscv.cc > @@ -6285,6 +6285,10 @@ riscv_option_override (void) > && riscv_abi != ABI_LP64 && riscv_abi != ABI_ILP32E) > error ("z*inx requires ABI ilp32, ilp32e or lp64"); > > + // Zfinx is conflict with float extensions. > + if (TARGET_ZFINX && TARGET_HARD_FLOAT) > + error ("z*inx is conflict with float extensions"); > + > /* We do not yet support ILP32 on RV64. */ > if (BITS_PER_WORD != POINTER_SIZE) > error ("ABI requires %<-march=rv%d%>", POINTER_SIZE); > diff --git a/gcc/testsuite/gcc.target/riscv/arch-19.c > b/gcc/testsuite/gcc.target/riscv/arch-19.c > new file mode 100644 > index 00000000000..a6f72af3677 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/riscv/arch-19.c > @@ -0,0 +1,4 @@ > +/* { dg-do compile } */ > +/* { dg-options "-march=rv64if_zfinx -mabi=lp64" } */ > +int foo() {} > +/* { dg-error "z*inx is conflict with float extensions" "" { target *-*-* } > 0 } */ > -- > 2.25.1 >