Commit d9e74dfc by Alexander Monakov Committed by Alexander Monakov

re PR middle-end/37499 (Scheduling pass 2 time increases by order of magnitude)

2008-09-18  Alexander Monakov  <amonakov@ispras.ru>

	PR middle-end/37499
	* sched-int.h (struct _haifa_insn_data): Remove unused field
	ref_count.

	* sched-rgn.c (ref_counts): Remove.
	(insn_referenced): New static variable.
	(INSN_REF_COUNT): Remove.
	(sched_run_compute_dependencies): Use insn_referenced instead of
	INSN_REF_COUNT.
	(add_branch_dependences): Likewise.  Delete dead assignment.

From-SVN: r140445
parent 078a70a1
2008-09-18 Alexander Monakov <amonakov@ispras.ru>
PR middle-end/37499
* sched-int.h (struct _haifa_insn_data): Remove unused field
ref_count.
* sched-rgn.c (ref_counts): Remove.
(insn_referenced): New static variable.
(INSN_REF_COUNT): Remove.
(sched_run_compute_dependencies): Use insn_referenced instead of
INSN_REF_COUNT.
(add_branch_dependences): Likewise. Delete dead assignment.
2008-09-17 Adam Nemet <anemet@caviumnetworks.com> 2008-09-17 Adam Nemet <anemet@caviumnetworks.com>
* haifa-sched.c (dep_cost_1): Recognize the producer even if the * haifa-sched.c (dep_cost_1): Recognize the producer even if the
......
...@@ -678,9 +678,6 @@ struct _haifa_insn_data ...@@ -678,9 +678,6 @@ struct _haifa_insn_data
/* A priority for each insn. */ /* A priority for each insn. */
int priority; int priority;
/* Number of instructions referring to this insn. */
int ref_count;
/* The minimum clock tick at which the insn becomes ready. This is /* The minimum clock tick at which the insn becomes ready. This is
used to note timing constraints for the insns in the pending list. */ used to note timing constraints for the insns in the pending list. */
int tick; int tick;
......
...@@ -2395,9 +2395,9 @@ sets_likely_spilled_1 (rtx x, const_rtx pat, void *data) ...@@ -2395,9 +2395,9 @@ sets_likely_spilled_1 (rtx x, const_rtx pat, void *data)
*ret = true; *ret = true;
} }
/* An array used to hold the number of dependencies in which insn /* A bitmap to note insns that participate in any dependency. Used in
participates. Used in add_branch_dependences. */ add_branch_dependences. */
static int *ref_counts; static sbitmap insn_referenced;
/* Add dependences so that branches are scheduled to run last in their /* Add dependences so that branches are scheduled to run last in their
block. */ block. */
...@@ -2424,8 +2424,6 @@ add_branch_dependences (rtx head, rtx tail) ...@@ -2424,8 +2424,6 @@ add_branch_dependences (rtx head, rtx tail)
are not moved before reload because we can wind up with register are not moved before reload because we can wind up with register
allocation failures. */ allocation failures. */
#define INSN_REF_COUNT(INSN) (ref_counts[INSN_UID (INSN)])
insn = tail; insn = tail;
last = 0; last = 0;
while (CALL_P (insn) while (CALL_P (insn)
...@@ -2448,7 +2446,7 @@ add_branch_dependences (rtx head, rtx tail) ...@@ -2448,7 +2446,7 @@ add_branch_dependences (rtx head, rtx tail)
{ {
if (! sched_insns_conditions_mutex_p (last, insn)) if (! sched_insns_conditions_mutex_p (last, insn))
add_dependence (last, insn, REG_DEP_ANTI); add_dependence (last, insn, REG_DEP_ANTI);
INSN_REF_COUNT (insn)++; SET_BIT (insn_referenced, INSN_LUID (insn));
} }
CANT_MOVE (insn) = 1; CANT_MOVE (insn) = 1;
...@@ -2470,12 +2468,11 @@ add_branch_dependences (rtx head, rtx tail) ...@@ -2470,12 +2468,11 @@ add_branch_dependences (rtx head, rtx tail)
{ {
insn = prev_nonnote_insn (insn); insn = prev_nonnote_insn (insn);
if (INSN_REF_COUNT (insn) != 0) if (TEST_BIT (insn_referenced, INSN_LUID (insn)))
continue; continue;
if (! sched_insns_conditions_mutex_p (last, insn)) if (! sched_insns_conditions_mutex_p (last, insn))
add_dependence (last, insn, REG_DEP_ANTI); add_dependence (last, insn, REG_DEP_ANTI);
INSN_REF_COUNT (insn) = 1;
} }
#ifdef HAVE_conditional_execution #ifdef HAVE_conditional_execution
...@@ -3086,14 +3083,15 @@ sched_rgn_compute_dependencies (int rgn) ...@@ -3086,14 +3083,15 @@ sched_rgn_compute_dependencies (int rgn)
for (bb = 0; bb < current_nr_blocks; bb++) for (bb = 0; bb < current_nr_blocks; bb++)
init_deps (bb_deps + bb); init_deps (bb_deps + bb);
/* Initialize array used in add_branch_dependencies (). */ /* Initialize bitmap used in add_branch_dependences. */
ref_counts = XCNEWVEC (int, get_max_uid () + 1); insn_referenced = sbitmap_alloc (sched_max_luid);
sbitmap_zero (insn_referenced);
/* Compute backward dependencies. */ /* Compute backward dependencies. */
for (bb = 0; bb < current_nr_blocks; bb++) for (bb = 0; bb < current_nr_blocks; bb++)
compute_block_dependences (bb); compute_block_dependences (bb);
free (ref_counts); sbitmap_free (insn_referenced);
free_pending_lists (); free_pending_lists ();
finish_deps_global (); finish_deps_global ();
free (bb_deps); free (bb_deps);
......
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