From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ua1-x92c.google.com (mail-ua1-x92c.google.com [IPv6:2607:f8b0:4864:20::92c]) by sourceware.org (Postfix) with ESMTPS id 0EBAF3858D20 for ; Fri, 14 Apr 2023 01:53:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0EBAF3858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ua1-x92c.google.com with SMTP id x12so4626758ual.10 for ; Thu, 13 Apr 2023 18:53:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681437237; x=1684029237; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=B9H28q05Lza6RFHNH4qz/PLTLRquWA205Tws5otYmJ4=; b=k8Jwf7tlCIeVCkZKvuQ9v/QOGJklVTQrZEhiXS/+C/u3SEP0S+MWbkQSF2OeAL9whG H9m51REiVOzMeiux6Jr4JJIw+luZhxPlyEwZmRprRNhsDyDA1gHE4wfVjM2H5XaRWzb/ 3+OR6ThSirWKFALfyO+A6B8D9EKhr0sdRD0bRPOtbshndGCouRGd0ocgKnEbm6U2/LxU CXUIdwm+yQ/tk8y19JFjj4jaJEV5kWxuAAiLV4o7dH/58rJ4AzIuEv7UPPIFncRclLp2 shMOEA9Tvt+ltRuxoLf8QR2LJxseoecfKACJ09EGtdrx6fd2h9Sy6t/rLfEtMZlHX/tN jjzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681437237; x=1684029237; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=B9H28q05Lza6RFHNH4qz/PLTLRquWA205Tws5otYmJ4=; b=iB/ZPaZ5IXelpm9KHUCyJztdjv12pKnuqus8+RAhdkV1zdrAWU9DsafLfELekDUg0+ Vym11h3r3sQl8CN+KbzE9mg6Wvky3tLWSAPGKxFQpg5Y6Nru6emtKObgZyk92CIHmnAh SRHUEoMHfHuHOykgQ4MHiltjELegiccFP8rflY4YRBMUeLLIesmRobISGMs6ZM2mtjzS fTOPKpwZST1zaxBcWIWZK0dVDVkb/0wl+v7MT5sAwmMKL1Nigt56UxtAsH/KBC7HE05l LbfGm85D4q+WIQb+wSTkiLeEVsu3IuRDGCbpokDlUlr2jevHOEHJlq39ZzmtWZtRMevs CJjw== X-Gm-Message-State: AAQBX9fGZaIo557JBOlEk9TqYIHVa6Au+c9/+dmexLltf3Don82zLXHB wdSUqPhGd3zZihuGGVenDy1AnWh9glWdk9zm5ls= X-Google-Smtp-Source: AKy350YDF+n3E1f+QKNt7jqH01tSx4Nxqoq+twDpJ3zXooTfRFJ+YDPdk526vfJw7ROGFAZX2tNgzvVrUzDO5L71jnE= X-Received: by 2002:a1f:2050:0:b0:43f:b0aa:62a9 with SMTP id g77-20020a1f2050000000b0043fb0aa62a9mr2225152vkg.1.1681437237030; Thu, 13 Apr 2023 18:53:57 -0700 (PDT) MIME-Version: 1.0 References: <20230413205208.465-1-palmer@rivosinc.com> In-Reply-To: <20230413205208.465-1-palmer@rivosinc.com> From: Kito Cheng Date: Fri, 14 Apr 2023 09:53:46 +0800 Message-ID: Subject: Re: [PATCH] RISC-V: Update multilib-generator to handle V To: Palmer Dabbelt Cc: gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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=E2=80=AFAM Palmer Dabbelt 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/multi= lib-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 =3D proc.communicate() > return out.decode().strip() > > +# > +# Multi-letter extensions are seperated by underscores, but single-lette= r > +# 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 =3D list(ext.split("*")) > - > - # Add underline to every extension. > - # e.g. > - # _b * zvamo =3D> _b * _zvamo > - exts =3D list(map(lambda x: '_' + x, exts)) > + exts =3D list(map(lambda x: maybe_add_underscore(x), exts)) > > # No need to expand if there is no `*`. > if len(exts) =3D=3D 1: > @@ -163,14 +168,13 @@ for cmodel in cmodels: > if cmodel =3D=3D "compact" and arch.startswith("rv32"): > continue > > - arch =3D arch_canonicalize (arch, args.misa_spec) > arches[arch] =3D 1 > abis[abi] =3D 1 > extra =3D list(filter(None, extra.split(','))) > ext_combs =3D expand_combination(ext) > alts =3D sum([[x] + [x + y for y in ext_combs] for x in [arch] + ext= ra], []) > alts =3D filter(lambda x: len(x) !=3D 0, alts) > - alts =3D list(map(lambda a : arch_canonicalize(a, args.misa_spec), a= lts)) > + alts =3D alts + list(map(lambda a : arch_canonicalize(a, args.misa_s= pec), alts)) > > # Drop duplicated entry. > alts =3D 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,rv32im= afc,rv32imafdc- rv32imafdc-ilp32d-rv32imafd- rv64imac-lp64-rv64ima,rv64imaf= ,rv64imafd,rv64imafc,rv64imafdc- rv64imafdc-lp64d-rv64imafd- > -MULTILIB_OPTIONS =3D march=3Drv32imac/march=3Drv32ima/march=3Drv32imaf/m= arch=3Drv32imafd/march=3Drv32imafc/march=3Drv32imafdc/march=3Drv32g/march= =3Drv32gc/march=3Drv64imac/march=3Drv64ima/march=3Drv64imaf/march=3Drv64ima= fd/march=3Drv64imafc/march=3Drv64imafdc/march=3Drv64g/march=3Drv64gc mabi= =3Dilp32/mabi=3Dilp32d/mabi=3Dlp64/mabi=3Dlp64d > +# ./multilib-generator rv32imac-ilp32-rv32ima,rv32imaf,rv32imafd,rv32im= afc,rv32imafdc-v rv32imafdc-ilp32d-rv32imafd-v rv64imac-lp64-rv64ima,rv64im= af,rv64imafd,rv64imafc,rv64imafdc-v rv64imafdc-lp64d-rv64imafd-v > +MULTILIB_OPTIONS =3D march=3Drv32imac/march=3Drv32ima/march=3Drv32imacv/= march=3Drv32imaf/march=3Drv32imaf_zicsr/march=3Drv32imafc/march=3Drv32imafc= _zicsr/march=3Drv32imafcv/march=3Drv32imafd/march=3Drv32imafd_zicsr/march= =3Drv32imafdc/march=3Drv32imafdc_zicsr/march=3Drv32imafdcv/march=3Drv32imaf= dcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=3D= rv32imafdv/march=3Drv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl1= 28b_zvl32b_zvl64b/march=3Drv32imafv/march=3Drv32imav/march=3Drv64imac/march= =3Drv64ima/march=3Drv64imacv/march=3Drv64imaf/march=3Drv64imaf_zicsr/march= =3Drv64imafc/march=3Drv64imafc_zicsr/march=3Drv64imafcv/march=3Drv64imafd/m= arch=3Drv64imafd_zicsr/march=3Drv64imafdc/march=3Drv64imafdc_zicsr/march=3D= rv64imafdcv/march=3Drv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zv= l128b_zvl32b_zvl64b/march=3Drv64imafdv/march=3Drv64imafdv_zicsr_zve32f_zve3= 2x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=3Drv64imafv/march=3Drv6= 4imav mabi=3Dilp32/mabi=3Dilp32d/mabi=3Dlp64/mabi=3Dlp64d > MULTILIB_DIRNAMES =3D 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_zvl6= 4b \ > +rv32imafdv \ > +rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64= b \ > +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_zvl6= 4b \ > +rv64imafdv \ > +rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64= b \ > +rv64imafv \ > +rv64imav ilp32 \ > ilp32d \ > lp64 \ > -lp64d > +lp64d > MULTILIB_REQUIRED =3D march=3Drv32imac/mabi=3Dilp32 \ > march=3Drv32imafdc/mabi=3Dilp32d \ > march=3Drv64imac/mabi=3Dlp64 \ > march=3Drv64imafdc/mabi=3Dlp64d > MULTILIB_REUSE =3D march.rv32imac/mabi.ilp32=3Dmarch.rv32ima/mabi.ilp32 = \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imacv/mabi.ilp32 \ > march.rv32imac/mabi.ilp32=3Dmarch.rv32imaf/mabi.ilp32 \ > -march.rv32imac/mabi.ilp32=3Dmarch.rv32imafd/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imaf_zicsr/mabi.ilp32 \ > march.rv32imac/mabi.ilp32=3Dmarch.rv32imafc/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafc_zicsr/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafcv/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafd/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafd_zicsr/mabi.ilp32 \ > march.rv32imac/mabi.ilp32=3Dmarch.rv32imafdc/mabi.ilp32 \ > -march.rv32imac/mabi.ilp32=3Dmarch.rv32g/mabi.ilp32 \ > -march.rv32imac/mabi.ilp32=3Dmarch.rv32gc/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafdc_zicsr/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafdcv/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafdcv_zicsr_zve32f_zve32x_zve64d= _zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafdv/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafdv_zicsr_zve32f_zve32x_zve64d_= zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imafv/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=3Dmarch.rv32imav/mabi.ilp32 \ > march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32imafd/mabi.ilp32d \ > -march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32gc/mabi.ilp32d \ > -march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32g/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32imafd_zicsr/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32imafdc_zicsr/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32imafdcv/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32imafdcv_zicsr_zve32f_zve32x_zve= 64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32imafdv/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=3Dmarch.rv32imafdv_zicsr_zve32f_zve32x_zve6= 4d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32d \ > march.rv64imac/mabi.lp64=3Dmarch.rv64ima/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imacv/mabi.lp64 \ > march.rv64imac/mabi.lp64=3Dmarch.rv64imaf/mabi.lp64 \ > -march.rv64imac/mabi.lp64=3Dmarch.rv64imafd/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imaf_zicsr/mabi.lp64 \ > march.rv64imac/mabi.lp64=3Dmarch.rv64imafc/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafc_zicsr/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafcv/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafd/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafd_zicsr/mabi.lp64 \ > march.rv64imac/mabi.lp64=3Dmarch.rv64imafdc/mabi.lp64 \ > -march.rv64imac/mabi.lp64=3Dmarch.rv64g/mabi.lp64 \ > -march.rv64imac/mabi.lp64=3Dmarch.rv64gc/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafdc_zicsr/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafdcv/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafdcv_zicsr_zve32f_zve32x_zve64d_= zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafdv/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafdv_zicsr_zve32f_zve32x_zve64d_z= ve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imafv/mabi.lp64 \ > +march.rv64imac/mabi.lp64=3Dmarch.rv64imav/mabi.lp64 \ > march.rv64imafdc/mabi.lp64d=3Dmarch.rv64imafd/mabi.lp64d \ > -march.rv64imafdc/mabi.lp64d=3Dmarch.rv64gc/mabi.lp64d \ > -march.rv64imafdc/mabi.lp64d=3Dmarch.rv64g/mabi.lp64d > +march.rv64imafdc/mabi.lp64d=3Dmarch.rv64imafd_zicsr/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=3Dmarch.rv64imafdc_zicsr/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=3Dmarch.rv64imafdcv/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=3Dmarch.rv64imafdcv_zicsr_zve32f_zve32x_zve6= 4d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=3Dmarch.rv64imafdv/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=3Dmarch.rv64imafdv_zicsr_zve32f_zve32x_zve64= d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64d > -- > 2.39.2 >