This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix PR 56077


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
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;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]