From: Jeff Law <jeffreyalaw@gmail.com>
To: Jakub Jelinek <jakub@redhat.com>,
Richard Biener <rguenther@suse.de>,
Richard Sandiford <richard.sandiford@arm.com>,
Eric Botcazou <botcazou@adacore.com>
Cc: gcc-patches@gcc.gnu.org
Subject: Re: [PATCH] dse: Handle SUBREGs of word REGs differently for WORD_REGISTER_OPERATIONS targets [PR109040]
Date: Wed, 5 Apr 2023 07:14:23 -0600 [thread overview]
Message-ID: <8e0e3cd5-e4db-ce8a-b7dc-baac32aed516@gmail.com> (raw)
In-Reply-To: <ZC08hc8fUczEywig@tucnak>
On 4/5/23 03:16, Jakub Jelinek wrote:
> Hi!
>
> The following testcase is miscompiled on riscv since the addition
> of *mvconst_internal define_insn_and_split.
> I believe the bug is in DSE. We have:
> (insn 36 35 39 2 (set (mem/c:SI (plus:SI (reg/f:SI 65 frame)
> (const_int -64 [0xffffffffffffffc0])) [2 S4 A128])
> (reg:SI 166)) "pr109040.c":9:11 178 {*movsi_internal}
> (expr_list:REG_DEAD (reg:SI 166)
> (nil)))
> (insn 39 36 40 2 (set (reg:SI 171)
> (zero_extend:SI (mem/c:HI (plus:SI (reg/f:SI 65 frame)
> (const_int -64 [0xffffffffffffffc0])) [0 S2 A128]))) "pr109040.c":9:11 111 {*zero_extendhisi2}
> (nil))
> and RTL DSE's replace_read since r0-86337-g18b526e806ab6455 handles
> even different modes like in the above case, and so it optimizes it into:
> (insn 47 35 39 2 (set (reg:HI 175)
> (subreg:HI (reg:SI 166) 0)) "pr109040.c":9:11 179 {*movhi_internal}
> (expr_list:REG_DEAD (reg:SI 166)
> (nil)))
> (insn 39 47 40 2 (set (reg:SI 171)
> (zero_extend:SI (reg:HI 175))) "pr109040.c":9:11 111 {*zero_extendhisi2}
> (expr_list:REG_DEAD (reg:HI 175)
> (nil)))
> Pseudo 166 is result of AND with 0x8084c constant (forced into a register).
Right. But do we agree that the two above are equivalent? If they are
then changing DSE just papers over the combine issue downstream.
> Combine attempts to combine the AND with the insn 47 above created by DSE,
> and turns it because of WORD_REGISTER_OPERATIONS and its assumption that all
> the subword operations are actually done on word mode into:
> (set (subreg:SI (reg:HI 175) 0)
> (and:SI (reg:SI 167 [ m ])
> (reg:SI 168)))
> and later on the ZERO_EXTEND is thrown away.
And isn't that where the bug really is. There's a patch from pan2.li in
this exact space. That patch still doesn't look right to me, but it
seems to be attacking this problem closer to the right place.
>
> The following patch changes DSE to instead emit
> (insn 47 35 39 2 (set (reg:SI 175)
> (reg:SI 166)) "pr109040.c":10:11 180 {*movsi_internal}
> (expr_list:REG_DEAD (reg:SI 166)
> (nil)))
> (insn 39 47 40 2 (set (reg:SI 171)
> (zero_extend:SI (subreg:HI (reg:SI 175) 0))) "pr109040.c":10:11 111 {*zero_extendhisi2}
> (expr_list:REG_DEAD (reg:SI 175)
> (nil)))
> i.e. in the new insn copy whole reg rather than subword part of it where
> we don't really know anything about the upper bits.
> With this change, combine manages to do the right thing, optimies the
> (unsigned) (unsigned short) (reg & 0x8084c) into
> reg & 0x84c.
This may still be desirable but it feels like papering over the problem
to me.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux (admittedly not
> WORD_REGISTER_OPERATIONS targets) and tested using a cross to riscv
> on the testcase. I have unfortunately no way to bootstrap this on
> risc*-linux, could somebody do that? Ok for trunk if that passes/
>
> 2023-04-05 Jakub Jelinek <jakub@redhat.com>
>
> PR target/109040
> * dse.cc (replace_read): If read_reg is a SUBREG of a word mode
> REG, for WORD_REGISTER_OPERATIONS copy SUBREG_REG of it into
> a new REG rather than the SUBREG.
>
> * gcc.c-torture/execute/pr109040.c: New test.
No problem with the patch itself. I just want to make sure we're fixing
the problem in the right place.
jeff
next prev parent reply other threads:[~2023-04-05 13:14 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-05 9:16 Jakub Jelinek
2023-04-05 13:14 ` Jeff Law [this message]
2023-04-05 14:51 ` Jakub Jelinek
2023-04-05 16:17 ` Jeff Law
2023-04-05 16:48 ` Jakub Jelinek
2023-04-05 17:31 ` Jeff Law
2023-04-06 9:31 ` Richard Sandiford
2023-04-06 9:37 ` Li, Pan2
2023-04-06 14:49 ` Jeff Law
2023-04-06 14:45 ` Jeff Law
2023-04-06 10:15 ` Eric Botcazou
2023-04-06 10:31 ` [PATCH] combine: Fix simplify_comparison AND handling " Jakub Jelinek
2023-04-06 10:51 ` Eric Botcazou
2023-04-06 11:37 ` Jakub Jelinek
2023-04-06 14:21 ` Eric Botcazou
2023-04-09 0:25 ` Jeff Law
2023-04-10 7:10 ` Jakub Jelinek
2023-04-12 1:26 ` Jeff Law
2023-04-12 6:21 ` Jakub Jelinek
2023-04-12 10:02 ` [PATCH] combine, v3: Fix " Jakub Jelinek
2023-04-12 14:17 ` Jeff Law
2023-04-12 14:30 ` Jakub Jelinek
2023-04-12 15:24 ` Segher Boessenkool
2023-04-12 16:58 ` [PATCH] combine, v4: " Jakub Jelinek
2023-04-13 4:05 ` Jeff Law
2023-04-13 10:57 ` Segher Boessenkool
2023-04-13 12:35 ` Jeff Law
2023-04-13 13:45 ` [PATCH] loop-iv: Fix up bounds computation Jakub Jelinek
2023-04-13 15:07 ` Jeff Law
2023-04-13 19:37 ` Jeff Law
2023-04-12 13:29 ` [PATCH] combine: Fix simplify_comparison AND handling for WORD_REGISTER_OPERATIONS targets [PR109040] Jeff Law
2023-04-09 1:15 ` Jeff Law
2023-04-10 5:13 ` Hongtao Liu
2023-04-10 5:15 ` Hongtao Liu
2023-04-06 14:35 ` Jeff Law
2023-04-06 15:06 ` Jeff Law
2023-04-06 14:53 ` [PATCH] dse: Handle SUBREGs of word REGs differently " Jeff Law
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=8e0e3cd5-e4db-ce8a-b7dc-baac32aed516@gmail.com \
--to=jeffreyalaw@gmail.com \
--cc=botcazou@adacore.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jakub@redhat.com \
--cc=rguenther@suse.de \
--cc=richard.sandiford@arm.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).