From: Kito Cheng <kito.cheng@gmail.com>
To: "Maciej W. Rozycki" <macro@embecosm.com>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>,
Andrew Waterman <andrew@sifive.com>
Subject: Re: [committed v2] RISC-V: Fix build errors with shNadd/shNadd.uw patterns in zba cost model
Date: Wed, 3 Nov 2021 00:43:52 +0800 [thread overview]
Message-ID: <CA+yXCZCT2268jLBoHb_21i0yuTXmytz7n0n7KvVj98M5xc7dHA@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.20.2111021546270.18331@tpp.orcam.me.uk>
On Wed, Nov 3, 2021 at 12:07 AM Maciej W. Rozycki <macro@embecosm.com> wrote:
>
> Fix a build regression from commit 04a9b554ba1a ("RISC-V: Cost model
> for zba extension."):
>
> .../gcc/config/riscv/riscv.c: In function 'bool riscv_rtx_costs(rtx, machine_mode, int, int, int*, bool)':
> .../gcc/config/riscv/riscv.c:2018:11: error: 'and' of mutually exclusive equal-tests is always 0 [-Werror]
> 2018 | && IN_RANGE (INTVAL (XEXP (XEXP (x, 0), 0)), 1, 3))
> | ^~
> .../gcc/config/riscv/riscv.c:2047:17: error: unused variable 'ashift_lhs' [-Werror=unused-variable]
> 2047 | rtx ashift_lhs = XEXP (and_lhs, 0);
> | ^~~~~~~~~~
>
>
> by correcting a CONST_INT_P check referring the wrong operand and
> getting rid of the unused variable.
>
> gcc/
> * config/riscv/riscv.c (riscv_rtx_costs): Correct a CONST_INT_P
> check and remove an unused local variable with shNadd/shNadd.uw
> pattern handling.
> ---
> Hi Kito,
>
> > I think that's my mistake...it should fix following check rather than
> > remove the REG_P like that:
> >
> > @@ -2014,8 +2014,8 @@ riscv_rtx_costs (rtx x, machine_mode mode, int
> > outer_code, int opno ATTRIBUTE_UN
> > (TARGET_64BIT && (mode == DImode)))
> > && (GET_CODE (XEXP (x, 0)) == ASHIFT)
> > && REG_P (XEXP (XEXP (x, 0), 0))
> > - && CONST_INT_P (XEXP (XEXP (x, 0), 0))
> > - && IN_RANGE (INTVAL (XEXP (XEXP (x, 0), 0)), 1, 3))
> > + && CONST_INT_P (XEXP (XEXP (x, 0), 1))
> > + && IN_RANGE (INTVAL (XEXP (XEXP (x, 0), 1)), 1, 3))
> > {
> > *total = COSTS_N_INSNS (1);
> > return true;
> >
> >
> > shNadd pattern:
> >
> > (define_insn "*shNadd"
> > [(set (match_operand:X 0 "register_operand" "=r")
> > (plus:X (ashift:X (match_operand:X 1 "register_operand" "r")
> > # What I want to check is here, it should be
> > XEXP (XEXP (x, 0), 1)
> > (match_operand:QI 2 "immediate_operand" "I"))
> > (match_operand:X 3 "register_operand" "r")))]
>
> Right, I should have cross-checked with the machine description.
>
> Also are we missing explicit test coverage here? Or is it supposed to
> be covered by the generic tests here or there already (I'm not familiar
> with the details of the ISA extension to tell offhand), as long as the
> extension has been enabled for the target tested, and it is just that
> the problem has slipped through somehow?
Cost model is not easy to test (at least to me :p), I usually verify
that by check the dump of combine pass to make sure the cost is right.
> > Otherwise LGTM, feel free to commit once you address this issue.
>
> Rebuilt for verification and committed as shown. Thank you for your
> review.
Thanks!
>
> Maciej
> ---
> gcc/config/riscv/riscv.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> gcc-riscv-rtx-costs-zba-shnadd.diff
> Index: gcc/gcc/config/riscv/riscv.c
> ===================================================================
> --- gcc.orig/gcc/config/riscv/riscv.c
> +++ gcc/gcc/config/riscv/riscv.c
> @@ -2014,8 +2014,8 @@ riscv_rtx_costs (rtx x, machine_mode mod
> (TARGET_64BIT && (mode == DImode)))
> && (GET_CODE (XEXP (x, 0)) == ASHIFT)
> && REG_P (XEXP (XEXP (x, 0), 0))
> - && CONST_INT_P (XEXP (XEXP (x, 0), 0))
> - && IN_RANGE (INTVAL (XEXP (XEXP (x, 0), 0)), 1, 3))
> + && CONST_INT_P (XEXP (XEXP (x, 0), 1))
> + && IN_RANGE (INTVAL (XEXP (XEXP (x, 0), 1)), 1, 3))
> {
> *total = COSTS_N_INSNS (1);
> return true;
> @@ -2044,7 +2044,6 @@ riscv_rtx_costs (rtx x, machine_mode mod
> if (!CONST_INT_P (and_rhs))
> break;
>
> - rtx ashift_lhs = XEXP (and_lhs, 0);
> rtx ashift_rhs = XEXP (and_lhs, 1);
>
> if (!CONST_INT_P (ashift_rhs)
next prev parent reply other threads:[~2021-11-02 16:44 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-01 12:40 [PATCH] " Maciej W. Rozycki
2021-11-02 15:03 ` Kito Cheng
2021-11-02 16:06 ` [committed v2] " Maciej W. Rozycki
2021-11-02 16:43 ` Kito Cheng [this message]
2021-11-03 17:18 ` Maciej W. Rozycki
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+yXCZCT2268jLBoHb_21i0yuTXmytz7n0n7KvVj98M5xc7dHA@mail.gmail.com \
--to=kito.cheng@gmail.com \
--cc=andrew@sifive.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=macro@embecosm.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).