Thanks, committed with fixup for those two comments :)
On Tue, Oct 10, 2023 at 7:01 AM Jeff Law <jeffreya...@gmail.com> wrote: > > > > On 10/9/23 22:13, Kito Cheng wrote: > > riscv_subset_list only accept a full arch string before, but we need to > > parse single extension when supporting target attribute, also we may set > > a riscv_subset_list directly rather than re-parsing the ISA string > > again. > > > > gcc/ChangeLog: > > > > * config/riscv/riscv-subset.h > > (riscv_subset_list::parse_single_std_ext): > > New. > > (riscv_subset_list::parse_single_multiletter_ext): Ditto. > > (riscv_subset_list::clone): Ditto. > > (riscv_subset_list::parse_single_ext): Ditto. > > (riscv_subset_list::set_loc): Ditto. > > (riscv_set_arch_by_subset_list): Ditto. > > * common/config/riscv/riscv-common.cc > > (riscv_subset_list::parse_single_std_ext): New. > > (riscv_subset_list::parse_single_multiletter_ext): Ditto. > > (riscv_subset_list::clone): Ditto. > > (riscv_subset_list::parse_single_ext): Ditto. > > (riscv_subset_list::set_loc): Ditto. > > (riscv_set_arch_by_subset_list): Ditto. > > --- > > gcc/common/config/riscv/riscv-common.cc | 203 ++++++++++++++++++++++++ > > gcc/config/riscv/riscv-subset.h | 11 ++ > > 2 files changed, 214 insertions(+) > > > > diff --git a/gcc/common/config/riscv/riscv-common.cc > > b/gcc/common/config/riscv/riscv-common.cc > > index 9a0a68fe5db..25630d5923e 100644 > > --- a/gcc/common/config/riscv/riscv-common.cc > > +++ b/gcc/common/config/riscv/riscv-common.cc > > @@ -1138,6 +1173,102 @@ riscv_subset_list::handle_combine_ext () > > } > > } > > > > +/* Parsing function for multi-letter extensions. > > + > > + Return Value: > > + Points to the end of extensions. > > + > > + Arguments: > > + `p`: Current parsing position. > > + `ext_type`: What kind of extensions, 's', 'z' or 'x'. > > + `ext_type_str`: Full name for kind of extension. */ > > + > > + > > +const char * > > +riscv_subset_list::parse_single_multiletter_ext (const char *p, > > + const char *ext_type, > > + const char *ext_type_str) > [ ... ] > > > > > > + > > + if (end_of_version == NULL) > > + return NULL; > I think when we hit this path we leak SUBSET. > > > > > > > > std::string > > @@ -1498,6 +1673,34 @@ static const riscv_ext_flag_table_t > > riscv_ext_flag_table[] = > > {NULL, NULL, 0} > > }; > > > > +void > > +riscv_set_arch_by_subset_list (riscv_subset_list *subset_list, > > + struct gcc_options *opts) > Needs a function comment. > > OK with those two minor issues fixed. > > jeff