From d9e74dfcc1f54a2b34fa12468cc3ca884058a6f1 Mon Sep 17 00:00:00 2001 From: Alexander Monakov Date: Thu, 18 Sep 2008 12:29:48 +0400 Subject: re PR middle-end/37499 (Scheduling pass 2 time increases by order of magnitude) 2008-09-18 Alexander Monakov 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 --- gcc/sched-rgn.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'gcc/sched-rgn.c') 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); -- cgit v1.1