This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PR 54168: Unnecessary narrowing in tree-ssa-forwprop pass?
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Richard Earnshaw <rearnsha at arm dot com>
- Cc: Jakub Jelinek <jakub at redhat dot com>, Kyrylo Tkachov <Kyrylo dot Tkachov at arm dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 15 Jan 2014 12:00:46 +0100
- Subject: Re: PR 54168: Unnecessary narrowing in tree-ssa-forwprop pass?
- Authentication-results: sourceware.org; auth=none
- References: <52D543C9 dot 4060105 at arm dot com> <CAFiYyc2s-9txxRH820mfV1B6W+WiSyCJZtHbuo1VL=UYaUMAtw at mail dot gmail dot com> <52D54800 dot 4080101 at arm dot com> <20140114143203 dot GO892 at tucnak dot redhat dot com> <52D54E7A dot 9000809 at arm dot com>
On Tue, Jan 14, 2014 at 3:49 PM, Richard Earnshaw <rearnsha@arm.com> wrote:
> On 14/01/14 14:32, Jakub Jelinek wrote:
>> Anyway, the above is really a simple case, and I'd call it a
>> backend bug if it isn't able to generate good code out of that.
>
> Exactly which back-end pass are you expecting to simplify
>
> (set (subreg:SI (reg:HI 1) 0) (and:SI (subreg:SI (reg:HI 0) 0)
> (const_int 2)))
>
> (set (reg:SI 2) (zero_extend:SI (reg:HI 1)))
Combine/simplify-rtx should notice that the above simplifies to
(set (reg:SI 2) (and:SI (subreg:SI (reg:HI 0) 0) (const_int 2)))
of course the (set (subreg:SI (reg:HI 1) 0) ... with the use (reg:HI 1)
is an awkward choice for the RTL IL probably making this
difficult for combine to consider?
> (set (reg:SI 3) (ne:SI (reg:SI 2) (const_int 0)))
>
> into
>
> (set (reg:SI 2) (and:SI (subreg:SI (reg:HI 0) 0) (const_int 2)))
>
> (set (reg:SI 3) (ne:SI (reg:SI 2) (const_int 0)))
>
> Combine is about the only pass that does this sort of thing, and that's
> far too often confused by extraneous information that it thinks might be
> helpful, but isn't, or by the fact that the intermediate result is used
> more than once.
The single-use case is of course an issue, but as the two insns are
coming out of expand you can hope that CSE doesn't mess it up
too much before combine. You can of course try to improve
expansion by combining the zero_extend by using simplify_rtx
directly.
Richard.
> R.
>