[committed] forward_propagate_subreg vs. mode_rep_extended

Andrew Pinski pinskia@gmail.com
Mon Dec 19 22:14:00 GMT 2011


On Mon, Dec 19, 2011 at 2:06 PM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> forward_propagate_subreg has code to optimise sequences like:
>
>    (set (reg:DI X) (*_extend:DI (reg:SI Y)))
>    (... (subreg:SI (reg:DI X)) ...)
>
> by replacing (subreg:SI (reg:DI X)) with (reg:SI Y).  However, there is
> a special case to stop this happening if Y is loaded from memory and the
> extension matches LOAD_EXTEND_OP.  In that case the transformation isn't
> profitable, because we'll be converting a single load into a load followed
> by an extension.
>
> The same problem applies to any SI->DI sign extension on 64-bit MIPS,
> because SI registers are stored in sign-extended form.  The comment
> below explains why in a bit more detail.
>
> This optimisation was causing a failure in gcc.target/mips/octeon-bbit-2.c
> for -mabi=64.  We reused the input to a sign_extend instruction, such that
> the inputs and outputs were simultaneously live and could no longer be tied.

This is PR 42839.

Thanks,
Andrew Pinski



More information about the Gcc-patches mailing list