Hi Shi-Hua:

Thanks, generally it's LGTM, just a few coding style issues. I've
fixed that and  committed this time,
but just let you know where you should update your coding style.

And you could use git clang-format and use <gcc>/contrib/clang-format
as format file to save
your time to indent that.

https://stackoverflow.com/questions/43974371/run-git-clang-format-on-series-of-git-commits

On Tue, Mar 8, 2022 at 11:31 AM <shi...@iscas.ac.cn> wrote:
>
> From: LiaoShihua <shi...@iscas.ac.cn>
>
> The crypto extension have several shorthand extensions that don't consist of 
> any extra instructions.
> Take zk for example, while the extension would imply zkn, zkr, zkt.
> The 3 extensions should also combine back into zk to maintain the canonical 
> order in isa strings.
> This patch addresses the above.
> And if the other extension has the same situation, you can add them in 
> riscv_combine_info[]
>
>
>
> gcc/ChangeLog:
>
>         * common/config/riscv/riscv-common.cc 
> (riscv_subset_list::handle_combine_ext):Combine back into zk to maintain the 
> canonical order in isa strings.
>         (riscv_subset_list::parse):Ditto.

You need to mention riscv_combine_info in the change log too :)

>         * config/riscv/riscv-subset.h:Declare handle_combine_ext();
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.target/riscv/predef-17.c: New test.
>
> ---
>  gcc/common/config/riscv/riscv-common.cc    | 56 +++++++++++++++++++
>  gcc/config/riscv/riscv-subset.h            |  1 +
>  gcc/testsuite/gcc.target/riscv/predef-17.c | 63 ++++++++++++++++++++++
>  3 files changed, 120 insertions(+)
>  create mode 100644 gcc/testsuite/gcc.target/riscv/predef-17.c
>
> diff --git a/gcc/common/config/riscv/riscv-common.cc 
> b/gcc/common/config/riscv/riscv-common.cc
> index a904893b9ed..1c06f83cc1c 100644
> --- a/gcc/common/config/riscv/riscv-common.cc
> +++ b/gcc/common/config/riscv/riscv-common.cc
> @@ -189,6 +189,16 @@ static const struct riscv_ext_version 
> riscv_ext_version_table[] =
>    {NULL, ISA_SPEC_CLASS_NONE, 0, 0}
>  };
>
> +/* Combine extensions defined in this table  */
> +static const struct riscv_ext_version riscv_combine_info[] =
> +{
> +  {"zk",  ISA_SPEC_CLASS_NONE, 1, 0},
> +  {"zkn",  ISA_SPEC_CLASS_NONE, 1, 0},
> +  {"zks",  ISA_SPEC_CLASS_NONE, 1, 0},
> +  /* Terminate the list.  */
> +  {NULL, ISA_SPEC_CLASS_NONE, 0, 0}
> +};
> +
>  static const riscv_cpu_info riscv_cpu_tables[] =
>  {
>  #define RISCV_CORE(CORE_NAME, ARCH, TUNE) \
> @@ -813,6 +823,50 @@ riscv_subset_list::handle_implied_ext (riscv_subset_t 
> *ext)
>      }
>  }
>
> +/* Check any combine extensions for EXT.  */
> +void
> +riscv_subset_list::handle_combine_ext (riscv_subset_list *subset_list)

You don't need to pass subset_list again, you can just use `this`

> +{
> +  const riscv_ext_version *combine_info;
> +  const riscv_implied_info_t *implied_info;
> +  bool IsCombined = false;

is_combined

> +
> +  for (combine_info = &riscv_combine_info[0]; combine_info->name; 
> ++combine_info)
> +  {

for (...)
  { // two space

> +
> +    /* Skip if combine extensions are present */
> +    if (subset_list->lookup(combine_info->name))
> +      continue;
> +
> +    /* Find all extensions of the combine extension   */
> +    for (implied_info = &riscv_implied_info[0]; implied_info->ext; 
> ++implied_info)
> +    {
> +      /* Skip if implied extension don't match combine extension */
> +      if (strcmp(combine_info->name, implied_info->ext) != 0)
> +        continue;
> +
> +      if (subset_list->lookup(implied_info->implied_ext))
> +          {
> +            IsCombined = true;
> +          }

No curly brackets needed if only one line.

> +      else
> +          {
> +            IsCombined = false;
> +            break;
> +          }
> +    }
> +
> +    /* Add combine extensions */
> +    if (IsCombined)
> +    {
> +      if (subset_list->lookup(combine_info->name) == NULL)
> +      {
> +        subset_list->add (combine_info->name, combine_info->major_version, 
> combine_info->minor_version, false, true);
> +      }
> +    }
> +  }
> +}
> +
>  /* Parsing function for multi-letter extensions.
>
>     Return Value:
> @@ -992,6 +1046,8 @@ riscv_subset_list::parse (const char *arch, location_t 
> loc)
>        subset_list->handle_implied_ext (itr);
>      }
>
> +  subset_list->handle_combine_ext (subset_list);
> +
>    return subset_list;
>
>  fail:
> diff --git a/gcc/config/riscv/riscv-subset.h b/gcc/config/riscv/riscv-subset.h
> index 4f3556a8d9b..da2e22d34f2 100644
> --- a/gcc/config/riscv/riscv-subset.h
> +++ b/gcc/config/riscv/riscv-subset.h
> @@ -68,6 +68,7 @@ private:
>                                      const char *);
>
>    void handle_implied_ext (riscv_subset_t *);
> +  void handle_combine_ext (riscv_subset_list *);
>
>  public:
>    ~riscv_subset_list ();
> diff --git a/gcc/testsuite/gcc.target/riscv/predef-17.c 
> b/gcc/testsuite/gcc.target/riscv/predef-17.c
> new file mode 100644
> index 00000000000..68f5f95a66c
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/predef-17.c
> @@ -0,0 +1,63 @@
> +/* { dg-do compile } */
> +/* { dg-options 
> "-march=rv64i_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh_zkr_zkt -mabi=lp64 
> -mcmodel=medlow -misa-spec=2.2" } */
> +
> +int main () {
> +
> +#ifndef __riscv_arch_test
> +#error "__riscv_arch_test"
> +#endif
> +
> +#if __riscv_xlen != 64
> +#error "__riscv_xlen"
> +#endif
> +
> +#if !defined(__riscv_i)
> +#error "__riscv_i"
> +#endif
> +
> +#if !defined(__riscv_zk)
> +#error "__riscv_zk"
> +#endif
> +
> +#if !defined(__riscv_zkr)
> +#error "__riscv_zkr"
> +#endif
> +
> +#if !defined(__riscv_zkn)
> +#error "__riscv_zkn"
> +#endif
> +
> +#if !defined(__riscv_zks)
> +#error "__riscv_zks"
> +#endif
> +
> +#if !defined(__riscv_zbkb)
> +#error "__riscv_zbkb"
> +#endif
> +
> +#if !defined(__riscv_zbkc)
> +#error "__riscv_zbkc"
> +#endif
> +
> +#if !defined(__riscv_zbkx)
> +#error "__riscv_zbkx"
> +#endif
> +
> +#if !defined(__riscv_zknd)
> +#error "__riscv_zknd"
> +#endif
> +
> +#if !defined(__riscv_zkne)
> +#error "__riscv_zkne"
> +#endif
> +
> +#if !defined(__riscv_zknh)
> +#error "__riscv_zknh"
> +#endif
> +
> +#if !defined(__riscv_zksh)
> +#error "__riscv_zksh"
> +#endif
> +
> +  return 0;
> +}
> \ No newline at end of file
> --
> 2.31.1.windows.1
>

Reply via email to