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 >