public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
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)

  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).