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