Commit 079c81d0 by Robin Dapp Committed by Robin Dapp

Reset insn priority after inc/ref replacement

This patch recomputes the insn priority when a replacement for one of its
dependent insns is applied.

gcc/ChangeLog:

	* haifa-sched.c (priority): Add force_recompute parameter.
	(apply_replacement): Call priority () with force_recompute = true.
	(restore_pattern): Likewise.

From-SVN: r265304
parent e75883a5
2018-10-19 Robin Dapp <rdapp@linux.ibm.com>
* haifa-sched.c (priority): Add force_recompute parameter.
(apply_replacement): Call priority () with force_recompute = true.
(restore_pattern): Likewise.
2018-10-18 H.J. Lu <hongjiu.lu@intel.com> 2018-10-18 H.J. Lu <hongjiu.lu@intel.com>
* simplify-rtx.c (simplify_subreg): Limit mask of vec_merge to * simplify-rtx.c (simplify_subreg): Limit mask of vec_merge to
...@@ -830,7 +830,7 @@ add_delay_dependencies (rtx_insn *insn) ...@@ -830,7 +830,7 @@ add_delay_dependencies (rtx_insn *insn)
/* Forward declarations. */ /* Forward declarations. */
static int priority (rtx_insn *); static int priority (rtx_insn *, bool force_recompute = false);
static int autopref_rank_for_schedule (const rtx_insn *, const rtx_insn *); static int autopref_rank_for_schedule (const rtx_insn *, const rtx_insn *);
static int rank_for_schedule (const void *, const void *); static int rank_for_schedule (const void *, const void *);
static void swap_sort (rtx_insn **, int); static void swap_sort (rtx_insn **, int);
...@@ -1590,7 +1590,7 @@ bool sched_fusion; ...@@ -1590,7 +1590,7 @@ bool sched_fusion;
/* Compute the priority number for INSN. */ /* Compute the priority number for INSN. */
static int static int
priority (rtx_insn *insn) priority (rtx_insn *insn, bool force_recompute)
{ {
if (! INSN_P (insn)) if (! INSN_P (insn))
return 0; return 0;
...@@ -1598,7 +1598,7 @@ priority (rtx_insn *insn) ...@@ -1598,7 +1598,7 @@ priority (rtx_insn *insn)
/* We should not be interested in priority of an already scheduled insn. */ /* We should not be interested in priority of an already scheduled insn. */
gcc_assert (QUEUE_INDEX (insn) != QUEUE_SCHEDULED); gcc_assert (QUEUE_INDEX (insn) != QUEUE_SCHEDULED);
if (!INSN_PRIORITY_KNOWN (insn)) if (force_recompute || !INSN_PRIORITY_KNOWN (insn))
{ {
int this_priority = -1; int this_priority = -1;
...@@ -4713,7 +4713,12 @@ apply_replacement (dep_t dep, bool immediately) ...@@ -4713,7 +4713,12 @@ apply_replacement (dep_t dep, bool immediately)
success = validate_change (desc->insn, desc->loc, desc->newval, 0); success = validate_change (desc->insn, desc->loc, desc->newval, 0);
gcc_assert (success); gcc_assert (success);
rtx_insn *insn = DEP_PRO (dep);
/* Recompute priority since dependent priorities may have changed. */
priority (insn, true);
update_insn_after_change (desc->insn); update_insn_after_change (desc->insn);
if ((TODO_SPEC (desc->insn) & (HARD_DEP | DEP_POSTPONED)) == 0) if ((TODO_SPEC (desc->insn) & (HARD_DEP | DEP_POSTPONED)) == 0)
fix_tick_ready (desc->insn); fix_tick_ready (desc->insn);
...@@ -4767,7 +4772,17 @@ restore_pattern (dep_t dep, bool immediately) ...@@ -4767,7 +4772,17 @@ restore_pattern (dep_t dep, bool immediately)
success = validate_change (desc->insn, desc->loc, desc->orig, 0); success = validate_change (desc->insn, desc->loc, desc->orig, 0);
gcc_assert (success); gcc_assert (success);
rtx_insn *insn = DEP_PRO (dep);
if (QUEUE_INDEX (insn) != QUEUE_SCHEDULED)
{
/* Recompute priority since dependent priorities may have changed. */
priority (insn, true);
}
update_insn_after_change (desc->insn); update_insn_after_change (desc->insn);
if (backtrack_queue != NULL) if (backtrack_queue != NULL)
{ {
backtrack_queue->replacement_deps.safe_push (dep); backtrack_queue->replacement_deps.safe_push (dep);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment