aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Belevantsev <abel@ispras.ru>2007-12-27 14:48:20 +0000
committerAndrey Belevantsev <abel@ispras.ru>2007-12-27 14:48:20 +0000
commit4f5293621cacd51ee6014ed513b95a2a55b65d26 (patch)
tree7b8dd25fa2df4b304f3636191fc23394722b844f
parent40c313bd0b07945f33351d0a2b0312a7f5f2d1bb (diff)
2007-12-27 Andrey Belevantsev <abel@ispras.ru>
* sel-sched.c (sel_rank_for_schedule): Tidy. (fill_vec_av_set): Use VEC_unordered_remove instead of ordered. Properly calculate is_orig_reg_p. Add the final qsort call after filtering out the av set. * sched-rgn.c (sched_rgn_init): With selective scheduling, always try to compute ebb regions instead of single block reagions. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/sel-sched-branch@131203 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog.sel-sched9
-rw-r--r--gcc/sched-rgn.c2
-rw-r--r--gcc/sel-sched.c22
3 files changed, 25 insertions, 8 deletions
diff --git a/gcc/ChangeLog.sel-sched b/gcc/ChangeLog.sel-sched
index a536bb85beb..0986e66c99c 100644
--- a/gcc/ChangeLog.sel-sched
+++ b/gcc/ChangeLog.sel-sched
@@ -1,5 +1,14 @@
2007-12-27 Andrey Belevantsev <abel@ispras.ru>
+ * sel-sched.c (sel_rank_for_schedule): Tidy.
+ (fill_vec_av_set): Use VEC_unordered_remove instead of ordered.
+ Properly calculate is_orig_reg_p. Add the final qsort call
+ after filtering out the av set.
+ * sched-rgn.c (sched_rgn_init): With selective scheduling,
+ always try to compute ebb regions instead of single block reagions.
+
+2007-12-27 Andrey Belevantsev <abel@ispras.ru>
+
Cache that an expression can be moved up only as RHS.
* sel-sched.c (enum MOVEUP_RHS_CODE): New value MOVEUP_RHS_AS_RHS.
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index ff8b4be75a2..9f379c0880c 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -2913,7 +2913,7 @@ sched_rgn_init (bool single_blocks_p, bool ebbs_p)
|| !flag_schedule_interblock
|| is_cfg_nonregular ())
{
- find_single_block_region (ebbs_p);
+ find_single_block_region (SEL_SCHED_P ? true : ebbs_p);
}
else
{
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index b1d43cc592f..ef2c9377ced 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -2960,6 +2960,7 @@ sel_rank_for_schedule (const void *x, const void *y)
{
if (VINSN_UNIQUE_P (tmp_vinsn) && VINSN_UNIQUE_P (tmp2_vinsn))
return SCHED_GROUP_P (tmp2_insn) ? 1 : -1;
+
/* Now uniqueness means SCHED_GROUP_P is set, because schedule groups
cannot be cloned. */
if (VINSN_UNIQUE_P (tmp2_vinsn))
@@ -3312,7 +3313,7 @@ fill_vec_av_set (av_set_t av, blist_t bnds, fence_t fence)
/* Don't allow any insns other than from SCHED_GROUP if we have one. */
if (FENCE_SCHED_NEXT (fence) && insn != FENCE_SCHED_NEXT (fence))
{
- VEC_ordered_remove (rhs_t, vec_av_set, n);
+ VEC_unordered_remove (rhs_t, vec_av_set, n);
continue;
}
@@ -3328,8 +3329,11 @@ fill_vec_av_set (av_set_t av, blist_t bnds, fence_t fence)
target_available = EXPR_TARGET_AVAILABLE (rhs);
if (target_available == true)
- /* Do nothing -- we can use an existing register. */
- succ++;
+ {
+ /* Do nothing -- we can use an existing register. */
+ succ++;
+ is_orig_reg_p = EXPR_SEPARABLE_P (rhs);
+ }
else if (/* Non-separable instruction will never
get another register. */
(target_available == false
@@ -3338,7 +3342,7 @@ fill_vec_av_set (av_set_t av, blist_t bnds, fence_t fence)
|| n >= max_insns_to_rename)
{
succ++;
- VEC_ordered_remove (rhs_t, vec_av_set, n);
+ VEC_unordered_remove (rhs_t, vec_av_set, n);
print ("- no register; ");
continue;
}
@@ -3349,7 +3353,7 @@ fill_vec_av_set (av_set_t av, blist_t bnds, fence_t fence)
not available in separable RHS. Do it the hard way. */
! find_best_reg_for_rhs (rhs, bnds, &is_orig_reg_p))
{
- VEC_ordered_remove (rhs_t, vec_av_set, n);
+ VEC_unordered_remove (rhs_t, vec_av_set, n);
print ("- no register; ");
continue;
}
@@ -3369,11 +3373,11 @@ fill_vec_av_set (av_set_t av, blist_t bnds, fence_t fence)
/* We need to know whether we do need to stall for any insns. */
stalled++;
print ("- not ready yet; ");
- VEC_ordered_remove (rhs_t, vec_av_set, n);
+ VEC_unordered_remove (rhs_t, vec_av_set, n);
continue;
}
- print ("; ");
+ print (" - ok; ");
n++;
}
@@ -3396,6 +3400,10 @@ fill_vec_av_set (av_set_t av, blist_t bnds, fence_t fence)
return false;
}
+ /* Sort the vector. */
+ qsort (VEC_address (rhs_t, vec_av_set), VEC_length (rhs_t, vec_av_set),
+ sizeof (rhs_t), sel_rank_for_schedule);
+
line_start ();
print ("Sorted av set (%d): ", VEC_length (rhs_t, vec_av_set));