Fix PR 56077

Andrey Belevantsev abel@ispras.ru
Mon Apr 1 08:38:00 GMT 2013


On 22.02.2013 17:30, Andrey Belevantsev wrote:
> Hello,
>
> As found by Jakub and explained in the PR audit trail by Alexander, this
> patch fixes the selective scheduler merge glitch of 2008 that added the
> unnecessary JUMP_P check to the flush_pending_lists call.  I have removed
> the check and expanded the binary negation for clarity.
>
> The patch was tested on x86-64, ia64, and ppc64 to be safe.  The patch
> should be conservatively safe at this stage as it adds more flushes and
> thus more dependencies to the scheduler.  The original test is fixed, but I
> don't know how to add the test checking assembly insns order to the testsuite.
>
> OK for trunk?
>
> Andrey
>
> 2012-02-22  Alexander Monakov  <amonakov@ispras.ru>
>          Andrey Belevantsev  <abel@ispras.ru>
>
>      PR middle-end/56077
>      * sched-deps.c (sched_analyze_insn): When reg_pending_barrier,
>      flush pending lists also on non-jumps.

Now backported to 4.7 and 4.6.

Andrey
-------------- next part --------------
Index: gcc/ChangeLog
===================================================================
*** gcc/ChangeLog	(revision 197296)
--- gcc/ChangeLog	(revision 197297)
***************
*** 1,3 ****
--- 1,13 ----
+ 2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
+ 
+ 	Backport from mainline
+ 	2013-02-25  Andrey Belevantsev  <abel@ispras.ru>
+ 	Alexander Monakov  <amonakov@ispras.ru>
+ 
+ 	PR middle-end/56077
+ 	* sched-deps.c (sched_analyze_insn): When reg_pending_barrier,
+ 	flush pending lists also on non-jumps.  Adjust comment.
+ 
  2013-03-30  Gerald Pfeifer  <gerald@pfeifer.com>
  
  	* doc/invoke.texi (AVR Options): Tweak link for AVR-LibC user manual.
Index: gcc/sched-deps.c
===================================================================
*** gcc/sched-deps.c	(revision 197296)
--- gcc/sched-deps.c	(revision 197297)
*************** sched_analyze_insn (struct deps_desc *de
*** 3262,3270 ****
              SET_REGNO_REG_SET (&deps->reg_last_in_use, i);
            }
  
!       /* Flush pending lists on jumps, but not on speculative checks.  */
!       if (JUMP_P (insn) && !(sel_sched_p ()
!                              && sel_insn_is_speculation_check (insn)))
  	flush_pending_lists (deps, insn, true, true);
  
        reg_pending_barrier = NOT_A_BARRIER;
--- 3262,3270 ----
              SET_REGNO_REG_SET (&deps->reg_last_in_use, i);
            }
  
!       /* Don't flush pending lists on speculative checks for
! 	 selective scheduling.  */
!       if (!sel_sched_p () || !sel_insn_is_speculation_check (insn))
  	flush_pending_lists (deps, insn, true, true);
  
        reg_pending_barrier = NOT_A_BARRIER;


More information about the Gcc-patches mailing list