Thanks Jiawei, committed to trunk!
On Wed, Mar 29, 2023 at 12:55 AM Jiawei <jia...@iscas.ac.cn> wrote: > > Z*inx is conflict with float extensions, add incompatible check when > z*inx and f extension both enabled. > > Since all float extension imply f extension and all z*inx extension > imply zfinx extension, so we just need to check f with zfinx extension > as the base case. > > Co-Authored by: Kito Cheng <kito.ch...@gmail.com> > > gcc/ChangeLog: > > * common/config/riscv/riscv-common.cc (riscv_subset_list::parse): > * New check. > > gcc/testsuite/ChangeLog: > > * gcc.target/riscv/arch-19.c: New test. > > --- > gcc/common/config/riscv/riscv-common.cc | 5 +++++ > gcc/testsuite/gcc.target/riscv/arch-19.c | 4 ++++ > 2 files changed, 9 insertions(+) > create mode 100644 gcc/testsuite/gcc.target/riscv/arch-19.c > > diff --git a/gcc/common/config/riscv/riscv-common.cc > b/gcc/common/config/riscv/riscv-common.cc > index ef221be1eb1..b3c6ec97e7a 100644 > --- a/gcc/common/config/riscv/riscv-common.cc > +++ b/gcc/common/config/riscv/riscv-common.cc > @@ -1153,6 +1153,11 @@ riscv_subset_list::parse (const char *arch, location_t > loc) > > subset_list->handle_combine_ext (); > > + if (subset_list->lookup("zfinx") && subset_list->lookup("f")) > + error_at (loc, > + "%<-march=%s%>: z*inx is conflict with float extensions", > + arch); > + > return subset_list; > > fail: > 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..83c6e00a755 > --- /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 "'-march=rv64if_zfinx': z\\*inx is conflict with float > extensions" "" { target *-*-* } 0 } */ > -- > 2.25.1 >