On Tue, 28 Mar 2023, Jakub Jelinek wrote:

> On Wed, Mar 22, 2023 at 10:03:42AM +0000, Richard Biener via Gcc-patches 
> wrote:
> > For the testcase bb_is_just_return is on top of the profile, changing
> > it to walk BB insns backwards puts it off the profile.  That's because
> > in the forward walk you have to process possibly many debug insns
> > but in a backward walk you very likely run into control insns first.
> > 
> > Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
> > 
> > OK?
> > 
> > For the record, the profile was (after the delete_trivially_dead_insns 
> > fix)
> > 
> > Samples: 289K of event 'cycles:u', Event count (approx.): 384226334976      
> >                 
> > Overhead       Samples  Command  Shared Object     Symbol                   
> >                 
> >    3.52%          9747  cc1      cc1               [.] bb_is_just_return    
> >                
> > #
> > 
> > and after the fix bb_is_just_return has no recorded samples anymore.
> > 
> > Thanks,
> > Richard.
> > 
> >     PR rtl-optimization/109237
> >     * cfgcleanup.cc (bb_is_just_return): Walk insns backwards.
> 
> This seems to regress
> +FAIL: gcc.dg/guality/pr54200.c   -Os  -DPREVENT_OPTIMIZATION  line 20 z == 3
> on x86_64.
> This was meant just as a performance improvement, right?

Yes.  I have reverted the change and will revisit in GCC 14 (I have
tested an adjusted patch that avoids the above regression).

Richard.

> Just with -Os -g0 the assembly difference is:
> --- pr54200.s1        2023-03-28 09:45:57.120647323 +0200
> +++ pr54200.s2        2023-03-28 09:46:00.423599004 +0200
> @@ -19,10 +19,11 @@ foo:
>       cmpl    $1, %esi
>       jne     .L3
>       movl    $2, o(%rip)
> -     ret
> +     jmp     .L4
>  .L3:
>       addl    %esi, %eax
>       addl    %edx, %eax
> +.L4:
>       ret
>       .cfi_endproc
>  .LFE1:
> so 1 byte longer (ret is 1 byte, jmp 2 bytes), but might be also slower.
> The difference starts during the pro_and_epilogue pass.
> 
> > --- a/gcc/cfgcleanup.cc
> > +++ b/gcc/cfgcleanup.cc
> > @@ -2608,7 +2608,7 @@ bb_is_just_return (basic_block bb, rtx_insn **ret, 
> > rtx_insn **use)
> >    if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
> >      return false;
> >  
> > -  FOR_BB_INSNS (bb, insn)
> > +  FOR_BB_INSNS_REVERSE (bb, insn)
> >      if (NONDEBUG_INSN_P (insn))
> >        {
> >     rtx pat = PATTERN (insn);
> > -- 
> > 2.35.3
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg,
Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman;
HRB 36809 (AG Nuernberg)

Reply via email to