From d9e74dfcc1f54a2b34fa12468cc3ca884058a6f1 Mon Sep 17 00:00:00 2001 From: Alexander Monakov Date: Thu, 18 Sep 2008 12:29:48 +0400 Subject: [PATCH] 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/ChangeLog | 13 +++++++++++++ gcc/sched-int.h | 3 --- gcc/sched-rgn.c | 20 +++++++++----------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c2e2b36225..1091895eb16 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +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. + 2008-09-17 Adam Nemet * haifa-sched.c (dep_cost_1): Recognize the producer even if the diff --git a/gcc/sched-int.h b/gcc/sched-int.h index 7fd3b5526a2..e332c61f458 100644 --- a/gcc/sched-int.h +++ b/gcc/sched-int.h @@ -678,9 +678,6 @@ struct _haifa_insn_data /* A priority for each insn. */ int priority; - /* Number of instructions referring to this insn. */ - int ref_count; - /* The minimum clock tick at which the insn becomes ready. This is used to note timing constraints for the insns in the pending list. */ int tick; diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c index 8ea3d098dcc..004064ecf42 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);