From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by sourceware.org (Postfix) with ESMTPS id 269BD384240B for ; Tue, 19 Jan 2021 03:47:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 269BD384240B Received: by mail-wr1-x42e.google.com with SMTP id d13so18278085wrc.13 for ; Mon, 18 Jan 2021 19:47:24 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=vlxV8Z2WcZFt4myARjw/FwuW2LBoVCjy91VeQ0VZA34=; b=EMncTE9IBtwQYOuAPf/3ZSk6IQ2JMeMx+Bc6RjwREsA+8ueT1NWoU/PpL5pluawmZA gpmDoZNheoBa/FvwpZJfCQGBDHkMXtWg/N6UTctPpe49OtmLTov/i8Y2Ro7qdCszqTh0 5yUUGNY60zuFlzvLtzulwcRNDcHw3cXbPkEPPwfz1wjQS6BtUutFGCgB1MamXVJmLvSU mMBFNJG5511HrsHnghVV1xAAxsh95ag+6XEEWCiV69fe50Y2Lq23yMjF8A1zZpy2DHxJ AqJco3X40ShopdOZkX+pr4Di+MQoHT65NOU+tN4eIzuxgHyRh2nLYV7oFihckLi2RZCB w//g== X-Gm-Message-State: AOAM531MOsotS06F3n0iMothDr5PUM/kYFT+3Tjt2YdG7A5POXzXtDnx qgnV1cntiihhvkqSGgHc9cCjfrSz56A+ufWcEcwAnrFG/Jg= X-Google-Smtp-Source: ABdhPJz00j4poZyzYJa2F7ak2Z07SA7Uoi1hI/r/rM26gjtjpgHAsrSPR4Olo5Q3GlngWGl7ChxVf9aBm0zwnJNfj6I= X-Received: by 2002:adf:ef06:: with SMTP id e6mr2164054wro.231.1611028042806; Mon, 18 Jan 2021 19:47:22 -0800 (PST) MIME-Version: 1.0 References: <20210118070008.221-1-gengqi@linux.alibaba.com> In-Reply-To: <20210118070008.221-1-gengqi@linux.alibaba.com> From: Kito Cheng Date: Tue, 19 Jan 2021 11:47:11 +0800 Message-ID: Subject: Re: [PATCH] RISC-V: The 'multilib-generator' enhancement. To: Geng Qi Cc: GCC Patches Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.2 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.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jan 2021 03:47:25 -0000 Hi Geng Qi: Thanks for your patch, committed! On Mon, Jan 18, 2021 at 3:01 PM Geng Qi via Gcc-patches wrote: > > From: gengqi > > Think about this case: > ./multilib-generator rv32imc-ilp32-rv32imac,rv32imacxthead-f > Here are 2 problems: > 1. A unexpected 'xtheadf' extension was made. > 2. The arch 'rv32imac' was not be created. > This modification fix these two, and also sorts 'multi-letter'. > > gcc/ChangeLog: > * config/riscv/arch-canonicalize > (longext_sort): New function for sorting 'multi-letter'. > * config/riscv/multilib-generator: Adjusting the loop of 'alt' in > 'alts'. The 'arch' may not be the first of 'alts'. > (_expand_combination): Add underline for the 'ext' without '*'. > This is because, a single-letter extension can always be treated well > with a '_' prefix, but it cannot be separated out if it is appended > to a multi-letter. > --- > gcc/config/riscv/arch-canonicalize | 14 +++++++++++++- > gcc/config/riscv/multilib-generator | 12 +++++++----- > 2 files changed, 20 insertions(+), 6 deletions(-) > > diff --git a/gcc/config/riscv/arch-canonicalize b/gcc/config/riscv/arch-canonicalize > index 2b4289e..a1e4570 100755 > --- a/gcc/config/riscv/arch-canonicalize > +++ b/gcc/config/riscv/arch-canonicalize > @@ -74,8 +74,20 @@ def arch_canonicalize(arch): > # becasue we just append extensions list to the arch string. > std_exts += list(filter(lambda x:len(x) == 1, long_exts)) > > + def longext_sort (exts): > + if not exts.startswith("zxm") and exts.startswith("z"): > + # If "Z" extensions are named, they should be ordered first by CANONICAL. > + if exts[1] not in CANONICAL_ORDER: > + raise Exception("Unsupported extension `%s`" % exts) > + canonical_sort = CANONICAL_ORDER.index(exts[1]) > + else: > + canonical_sort = -1 > + return (exts.startswith("x"), exts.startswith("zxm"), > + LONG_EXT_PREFIXES.index(exts[0]), canonical_sort, exts[1:]) > + > # Multi-letter extension must be in lexicographic order. > - long_exts = list(sorted(filter(lambda x:len(x) != 1, long_exts))) > + long_exts = list(sorted(filter(lambda x:len(x) != 1, long_exts), > + key=longext_sort)) > > # Put extensions in canonical order. > for ext in CANONICAL_ORDER: > diff --git a/gcc/config/riscv/multilib-generator b/gcc/config/riscv/multilib-generator > index 64ff15f..7b22537 100755 > --- a/gcc/config/riscv/multilib-generator > +++ b/gcc/config/riscv/multilib-generator > @@ -68,15 +68,15 @@ def arch_canonicalize(arch): > def _expand_combination(ext): > exts = list(ext.split("*")) > > - # No need to expand if there is no `*`. > - if len(exts) == 1: > - return [(exts[0],)] > - > # Add underline to every extension. > # e.g. > # _b * zvamo => _b * _zvamo > exts = list(map(lambda x: '_' + x, exts)) > > + # No need to expand if there is no `*`. > + if len(exts) == 1: > + return [(exts[0],)] > + > # Generate combination! > ext_combs = [] > for comb_len in range(1, len(exts)+1): > @@ -147,7 +147,9 @@ for cfg in sys.argv[1:]: > # Drop duplicated entry. > alts = unique(alts) > > - for alt in alts[1:]: > + for alt in alts: > + if alt == arch: > + continue > arches[alt] = 1 > reuse.append('march.%s/mabi.%s=march.%s/mabi.%s' % (arch, abi, alt, abi)) > required.append('march=%s/mabi=%s' % (arch, abi)) > -- > 2.7.4 >