diff options
author | Alexander Monakov <amonakov@ispras.ru> | 2008-09-18 12:29:48 +0400 |
---|---|---|
committer | Alexander Monakov <amonakov@gcc.gnu.org> | 2008-09-18 12:29:48 +0400 |
commit | d9e74dfcc1f54a2b34fa12468cc3ca884058a6f1 (patch) | |
tree | 7176ffac7109e0d7fc1623733fb00dfdd7a7b73c /gcc/sched-rgn.c | |
parent | 078a70a15ed75e2e9ed4c4d09450b2522e82e6ae (diff) | |
download | gcc-d9e74dfcc1f54a2b34fa12468cc3ca884058a6f1.zip gcc-d9e74dfcc1f54a2b34fa12468cc3ca884058a6f1.tar.gz gcc-d9e74dfcc1f54a2b34fa12468cc3ca884058a6f1.tar.bz2 |
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
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r-- | gcc/sched-rgn.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c index 8ea3d09..004064e 100644 --- a/gcc/sched-rgn.c +++ b/gcc/sched-rgn.c @@ -2395,9 +2395,9 @@ sets_likely_spilled_1 (rtx x, const_rtx pat, void *data) *ret = true; } -/* An array used to hold the number of dependencies in which insn - participates. Used in add_branch_dependences. */ -static int *ref_counts; +/* A bitmap to note insns that participate in any dependency. Used in + add_branch_dependences. */ +static sbitmap insn_referenced; /* Add dependences so that branches are scheduled to run last in their block. */ @@ -2424,8 +2424,6 @@ add_branch_dependences (rtx head, rtx tail) are not moved before reload because we can wind up with register allocation failures. */ -#define INSN_REF_COUNT(INSN) (ref_counts[INSN_UID (INSN)]) - insn = tail; last = 0; while (CALL_P (insn) @@ -2448,7 +2446,7 @@ add_branch_dependences (rtx head, rtx tail) { if (! sched_insns_conditions_mutex_p (last, insn)) add_dependence (last, insn, REG_DEP_ANTI); - INSN_REF_COUNT (insn)++; + SET_BIT (insn_referenced, INSN_LUID (insn)); } CANT_MOVE (insn) = 1; @@ -2470,12 +2468,11 @@ add_branch_dependences (rtx head, rtx tail) { insn = prev_nonnote_insn (insn); - if (INSN_REF_COUNT (insn) != 0) + if (TEST_BIT (insn_referenced, INSN_LUID (insn))) continue; if (! sched_insns_conditions_mutex_p (last, insn)) add_dependence (last, insn, REG_DEP_ANTI); - INSN_REF_COUNT (insn) = 1; } #ifdef HAVE_conditional_execution @@ -3086,14 +3083,15 @@ sched_rgn_compute_dependencies (int rgn) for (bb = 0; bb < current_nr_blocks; bb++) init_deps (bb_deps + bb); - /* Initialize array used in add_branch_dependencies (). */ - ref_counts = XCNEWVEC (int, get_max_uid () + 1); + /* Initialize bitmap used in add_branch_dependences. */ + insn_referenced = sbitmap_alloc (sched_max_luid); + sbitmap_zero (insn_referenced); /* Compute backward dependencies. */ for (bb = 0; bb < current_nr_blocks; bb++) compute_block_dependences (bb); - free (ref_counts); + sbitmap_free (insn_referenced); free_pending_lists (); finish_deps_global (); free (bb_deps); |