public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Kito Cheng <kito.cheng@gmail.com>
To: Palmer Dabbelt <palmer@rivosinc.com>
Cc: gcc-patches@gcc.gnu.org
Subject: Re: [PATCH] RISC-V: Update multilib-generator to handle V
Date: Fri, 14 Apr 2023 09:53:46 +0800	[thread overview]
Message-ID: <CA+yXCZA1QNK=-FB_jDM=OC4eH8pAN32=BWmn5evgC0yCzMT__Q@mail.gmail.com> (raw)
In-Reply-To: <20230413205208.465-1-palmer@rivosinc.com>

Thanks for catch this, I didn't enable multilib for linux toolchain
for a while,
I guess we should implement TARGET_COMPUTE_MULTILIB for linux targets
to simplify the damm multilib files, but I agree it's too late in the
release cycle, so let's fix that in this way for now.

So LGTM and OK for trunk, thanks

On Fri, Apr 14, 2023 at 4:55 AM Palmer Dabbelt <palmer@rivosinc.com> wrote:
>
> It looks like multilib-generator hasn't been run for t-linux-multilib in
> a while and it's pretty broken.  In order to regenerate the stub with
> support for V I needed a pair of fixes:
>
> * All extensions were being prefixed with an underscore, which leads to
>   some odd combinations like "rv32gc_v", this just adds underscores to
>   the multi-letter extensions.
> * The input base ISAs were being canonicalized, which resulted in some
>   odd multilib default search paths.  I'm not sure if anything breaks
>   due to this, but it seems safer to just leave them alone.
>
> We've likely got a bunch more issues here related to multlib path
> mangling in the presence of underscores and for other extensions, but
> this at leasts lets me run the testsuite with V enabled.
>
> gcc/ChangeLog:
>
>         * config/riscv/multilib-generator (maybe_add_underscore): New
>           function
>           (_expand_combination): Canonicalize differently.
>         * config/riscv/t-linux-multilib: Regenerate.
> ---
> We're probably going to need a bunch more work here to handle the
> ISA-dependent multilib resolution, but I don't think that's gcc-13
> material -- certainly I don't have the time to do it, and even if it was
> ready now I'd bet it's too invasive for this point in the development
> cycle.
>
> We probably also want to handle the various B extensions in here, since
> those are upstream and useful.  I'm going to hold off on that for a bit
> as I've got some V-related testsuite failures that I'd rather look at
> first.  I figured it'd be better to just send this now, though, as at
> least I can run the V test suite under multilib.
>
> OK for trunk?
>
> ---
>  gcc/config/riscv/multilib-generator | 18 +++---
>  gcc/config/riscv/t-linux-multilib   | 86 ++++++++++++++++++++++-------
>  2 files changed, 78 insertions(+), 26 deletions(-)
>
> diff --git a/gcc/config/riscv/multilib-generator b/gcc/config/riscv/multilib-generator
> index 0a3d4c07757..58b7198b243 100755
> --- a/gcc/config/riscv/multilib-generator
> +++ b/gcc/config/riscv/multilib-generator
> @@ -62,6 +62,15 @@ def arch_canonicalize(arch, isa_spec):
>    out, err = proc.communicate()
>    return out.decode().strip()
>
> +#
> +# Multi-letter extensions are seperated by underscores, but single-letter
> +# extensions are not.
> +#
> +def maybe_add_underscore(ext):
> +  if len(ext) is 1:
> +    return ext
> +  return '_' + ext
> +
>  #
>  # Handle expansion operation.
>  #
> @@ -70,11 +79,7 @@ def arch_canonicalize(arch, isa_spec):
>  #
>  def _expand_combination(ext):
>    exts = list(ext.split("*"))
> -
> -  # Add underline to every extension.
> -  # e.g.
> -  #  _b * zvamo => _b * _zvamo
> -  exts = list(map(lambda x: '_' + x, exts))
> +  exts = list(map(lambda x: maybe_add_underscore(x), exts))
>
>    # No need to expand if there is no `*`.
>    if len(exts) == 1:
> @@ -163,14 +168,13 @@ for cmodel in cmodels:
>      if cmodel == "compact" and arch.startswith("rv32"):
>        continue
>
> -    arch = arch_canonicalize (arch, args.misa_spec)
>      arches[arch] = 1
>      abis[abi] = 1
>      extra = list(filter(None, extra.split(',')))
>      ext_combs = expand_combination(ext)
>      alts = sum([[x] + [x + y for y in ext_combs] for x in [arch] + extra], [])
>      alts = filter(lambda x: len(x) != 0, alts)
> -    alts = list(map(lambda a : arch_canonicalize(a, args.misa_spec), alts))
> +    alts = alts + list(map(lambda a : arch_canonicalize(a, args.misa_spec), alts))
>
>      # Drop duplicated entry.
>      alts = unique(alts)
> diff --git a/gcc/config/riscv/t-linux-multilib b/gcc/config/riscv/t-linux-multilib
> index 298547fee38..400cf7f0634 100644
> --- a/gcc/config/riscv/t-linux-multilib
> +++ b/gcc/config/riscv/t-linux-multilib
> @@ -1,46 +1,94 @@
>  # This file was generated by multilib-generator with the command:
> -#  ./multilib-generator rv32imac-ilp32-rv32ima,rv32imaf,rv32imafd,rv32imafc,rv32imafdc- rv32imafdc-ilp32d-rv32imafd- rv64imac-lp64-rv64ima,rv64imaf,rv64imafd,rv64imafc,rv64imafdc- rv64imafdc-lp64d-rv64imafd-
> -MULTILIB_OPTIONS = march=rv32imac/march=rv32ima/march=rv32imaf/march=rv32imafd/march=rv32imafc/march=rv32imafdc/march=rv32g/march=rv32gc/march=rv64imac/march=rv64ima/march=rv64imaf/march=rv64imafd/march=rv64imafc/march=rv64imafdc/march=rv64g/march=rv64gc mabi=ilp32/mabi=ilp32d/mabi=lp64/mabi=lp64d
> +#  ./multilib-generator rv32imac-ilp32-rv32ima,rv32imaf,rv32imafd,rv32imafc,rv32imafdc-v rv32imafdc-ilp32d-rv32imafd-v rv64imac-lp64-rv64ima,rv64imaf,rv64imafd,rv64imafc,rv64imafdc-v rv64imafdc-lp64d-rv64imafd-v
> +MULTILIB_OPTIONS = march=rv32imac/march=rv32ima/march=rv32imacv/march=rv32imaf/march=rv32imaf_zicsr/march=rv32imafc/march=rv32imafc_zicsr/march=rv32imafcv/march=rv32imafd/march=rv32imafd_zicsr/march=rv32imafdc/march=rv32imafdc_zicsr/march=rv32imafdcv/march=rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv32imafdv/march=rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv32imafv/march=rv32imav/march=rv64imac/march=rv64ima/march=rv64imacv/march=rv64imaf/march=rv64imaf_zicsr/march=rv64imafc/march=rv64imafc_zicsr/march=rv64imafcv/march=rv64imafd/march=rv64imafd_zicsr/march=rv64imafdc/march=rv64imafdc_zicsr/march=rv64imafdcv/march=rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv64imafdv/march=rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv64imafv/march=rv64imav mabi=ilp32/mabi=ilp32d/mabi=lp64/mabi=lp64d
>  MULTILIB_DIRNAMES = rv32imac \
>  rv32ima \
> +rv32imacv \
>  rv32imaf \
> -rv32imafd \
> +rv32imaf_zicsr \
>  rv32imafc \
> +rv32imafc_zicsr \
> +rv32imafcv \
> +rv32imafd \
> +rv32imafd_zicsr \
>  rv32imafdc \
> -rv32g \
> -rv32gc \
> +rv32imafdc_zicsr \
> +rv32imafdcv \
> +rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \
> +rv32imafdv \
> +rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \
> +rv32imafv \
> +rv32imav \
>  rv64imac \
>  rv64ima \
> +rv64imacv \
>  rv64imaf \
> -rv64imafd \
> +rv64imaf_zicsr \
>  rv64imafc \
> +rv64imafc_zicsr \
> +rv64imafcv \
> +rv64imafd \
> +rv64imafd_zicsr \
>  rv64imafdc \
> -rv64g \
> -rv64gc ilp32 \
> +rv64imafdc_zicsr \
> +rv64imafdcv \
> +rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \
> +rv64imafdv \
> +rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \
> +rv64imafv \
> +rv64imav ilp32 \
>  ilp32d \
>  lp64 \
> -lp64d
> +lp64d
>  MULTILIB_REQUIRED = march=rv32imac/mabi=ilp32 \
>  march=rv32imafdc/mabi=ilp32d \
>  march=rv64imac/mabi=lp64 \
>  march=rv64imafdc/mabi=lp64d
>  MULTILIB_REUSE = march.rv32imac/mabi.ilp32=march.rv32ima/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imacv/mabi.ilp32 \
>  march.rv32imac/mabi.ilp32=march.rv32imaf/mabi.ilp32 \
> -march.rv32imac/mabi.ilp32=march.rv32imafd/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imaf_zicsr/mabi.ilp32 \
>  march.rv32imac/mabi.ilp32=march.rv32imafc/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafc_zicsr/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafcv/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafd/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafd_zicsr/mabi.ilp32 \
>  march.rv32imac/mabi.ilp32=march.rv32imafdc/mabi.ilp32 \
> -march.rv32imac/mabi.ilp32=march.rv32g/mabi.ilp32 \
> -march.rv32imac/mabi.ilp32=march.rv32gc/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafdc_zicsr/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafdcv/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafdv/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imafv/mabi.ilp32 \
> +march.rv32imac/mabi.ilp32=march.rv32imav/mabi.ilp32 \
>  march.rv32imafdc/mabi.ilp32d=march.rv32imafd/mabi.ilp32d \
> -march.rv32imafdc/mabi.ilp32d=march.rv32gc/mabi.ilp32d \
> -march.rv32imafdc/mabi.ilp32d=march.rv32g/mabi.ilp32d \
> +march.rv32imafdc/mabi.ilp32d=march.rv32imafd_zicsr/mabi.ilp32d \
> +march.rv32imafdc/mabi.ilp32d=march.rv32imafdc_zicsr/mabi.ilp32d \
> +march.rv32imafdc/mabi.ilp32d=march.rv32imafdcv/mabi.ilp32d \
> +march.rv32imafdc/mabi.ilp32d=march.rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32d \
> +march.rv32imafdc/mabi.ilp32d=march.rv32imafdv/mabi.ilp32d \
> +march.rv32imafdc/mabi.ilp32d=march.rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32d \
>  march.rv64imac/mabi.lp64=march.rv64ima/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imacv/mabi.lp64 \
>  march.rv64imac/mabi.lp64=march.rv64imaf/mabi.lp64 \
> -march.rv64imac/mabi.lp64=march.rv64imafd/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imaf_zicsr/mabi.lp64 \
>  march.rv64imac/mabi.lp64=march.rv64imafc/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafc_zicsr/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafcv/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafd/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafd_zicsr/mabi.lp64 \
>  march.rv64imac/mabi.lp64=march.rv64imafdc/mabi.lp64 \
> -march.rv64imac/mabi.lp64=march.rv64g/mabi.lp64 \
> -march.rv64imac/mabi.lp64=march.rv64gc/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafdc_zicsr/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafdcv/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafdv/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imafv/mabi.lp64 \
> +march.rv64imac/mabi.lp64=march.rv64imav/mabi.lp64 \
>  march.rv64imafdc/mabi.lp64d=march.rv64imafd/mabi.lp64d \
> -march.rv64imafdc/mabi.lp64d=march.rv64gc/mabi.lp64d \
> -march.rv64imafdc/mabi.lp64d=march.rv64g/mabi.lp64d
> +march.rv64imafdc/mabi.lp64d=march.rv64imafd_zicsr/mabi.lp64d \
> +march.rv64imafdc/mabi.lp64d=march.rv64imafdc_zicsr/mabi.lp64d \
> +march.rv64imafdc/mabi.lp64d=march.rv64imafdcv/mabi.lp64d \
> +march.rv64imafdc/mabi.lp64d=march.rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64d \
> +march.rv64imafdc/mabi.lp64d=march.rv64imafdv/mabi.lp64d \
> +march.rv64imafdc/mabi.lp64d=march.rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64d
> --
> 2.39.2
>

  reply	other threads:[~2023-04-14  1:53 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-13 20:52 Palmer Dabbelt
2023-04-14  1:53 ` Kito Cheng [this message]
2023-04-14  7:15 ` Kito Cheng
2023-04-17 15:24   ` Palmer Dabbelt
2023-04-17 17:57     ` Palmer Dabbelt
2023-04-18 15:44       ` Kito Cheng
2023-04-18 20:01         ` Palmer Dabbelt
2023-04-19  0:47           ` Kito Cheng
2023-04-19  0:51             ` Palmer Dabbelt
2023-04-19  1:26               ` Kito Cheng
2023-04-19  1:29                 ` Palmer Dabbelt
2023-04-19  1:38                   ` Kito Cheng
2023-04-19  3:57                     ` Kito Cheng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CA+yXCZA1QNK=-FB_jDM=OC4eH8pAN32=BWmn5evgC0yCzMT__Q@mail.gmail.com' \
    --to=kito.cheng@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=palmer@rivosinc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).