On Tue, 2020-04-21 at 01:00 +0200, Jakub Jelinek wrote:
> Hi!
> 
> This patch addresses a missed optimization caused by the cselib changes.
> Already in the past postreload could replace sp = sp + const_int with
> sp = regxy if regxy already has the right value, but with the cselib
> changes it happens several times more often.  It can result in smaller
> code, so it seems undesirable to prevent such optimizations, but
> unfortunately it can get into the way of stack adjustment coalescing,
> where e.g. if we used to have sp = sp + 32; sp = sp - 8;, previously
> we'd turn that into sp = sp + 24;, but now postreload optimizes
> into sp = r12; sp = sp - 8; and csa gives up.
> 
> The patch just adds a REG_EQUAL note when changing sp = sp + const into
> sp = reg, where we remember it was actually a stack adjustment by certain
> constant, and the combine-stack-adj changes than make use of those REG_EQUAL
> notes, together with LR tracking (csa did enable the note problem, just
> didn't simulate each insn) so that we can add the needed clobbers etc.
> (taken from the other stack adjustment insn).
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
> 
> 2020-04-20  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR rtl-optimization/94516
>       * postreload.c (reload_cse_simplify): When replacing sp = sp + const
>       with sp = reg, add REG_EQUAL note with sp + const.
>       * combine-stack-adj.c (try_apply_stack_adjustment): Change return
>       type from int to bool.  Add LIVE and OTHER_INSN arguments.  Undo
>       postreload sp = sp + const to sp = reg optimization if needed and
>       possible.
>       (combine_stack_adjustments_for_block): Add LIVE argument.  Handle
>       reg = sp insn with sp + const REG_EQUAL note.  Adjust
>       try_apply_stack_adjustment caller, call
>       df_simulate_initialize_forwards and df_simulate_one_insn_forwards.
>       (combine_stack_adjustments): Allocate and free LIVE bitmap,
>       adjust combine_stack_adjustments_for_block caller.
I'd probably defer to gcc-11 since this is "just" a missed optimization and 
we're
getting real close to cutting an RC and I'd hate to introduce new instability at
this point.

Jeff
> 

Reply via email to