On Mon, Sep 8, 2014 at 6:41 PM, Segher Boessenkool
<seg...@kernel.crashing.org> wrote:
> When reload decides it needs to reload something that was assigned a
> register before it will only look at the contraint, not the predicate.
> This means that for the *bool<mode>3 I added with predicate logical_operand
> (that is registers, and unsigned numbers that have only the low 16 or next
> 16 bits set) and contraint "r,n" it will put any integer constant in "n".
> That won't work.  This patch splits the pattern in two, one for "r", one
> for "n", solving the problem.  This is not a pessimisation because constant
> propagation should already have taken care of any constants we *can* handle.
>
> Also, this situation happens very rarely: nothing in the testsuite triggers
> it, and a normal bootstrap doesn't either, but --enable-checking=release
> did.  It seems it doesn't happen at all with LRA, or even more rarely.
>
> Bootstrapped and tested on powerpc64-linux, m64,m32,m32/mpowerpc64,m64/mlra,
> no regressions.  Also tested with --enable-checking=release, and that now
> again bootstraps.
>
> Okay for mainline?
>
>
> Segher
>
>
> 2014-09-08  Segher Boessenkool  <seg...@kernel.crashing.org>
>
>         PR target/63195
>         * config/rs6000/rs6000.md (*bool<mode>3): Allow only register
>         operands.  Split off the constant operand alternative to ...
>         (*bool<mode>3_imm): New.

Okay.

Thanks, David

Reply via email to