aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1998-06-05 11:32:28 +0000
committerJeff Law <law@gcc.gnu.org>1998-06-05 05:32:28 -0600
commit2db4599393fa0727729a9106fd14582188539331 (patch)
tree8b7b568cba192b365198f55d2e5552643d76ee81 /gcc
parent192231fbe54b828f716f9ec44ed298dc61d6601c (diff)
downloadgcc-2db4599393fa0727729a9106fd14582188539331.zip
gcc-2db4599393fa0727729a9106fd14582188539331.tar.gz
gcc-2db4599393fa0727729a9106fd14582188539331.tar.bz2
haifa-sched.c (rank_for_schedule): For "equally good insns", prefer the insn which has the most insns dependent on it.
* haifa-sched.c (rank_for_schedule): For "equally good insns", prefer the insn which has the most insns dependent on it. From-SVN: r20243
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/haifa-sched.c20
2 files changed, 23 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf20fa3..c148593 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Fri Jun 5 12:29:28 1998 Jeffrey A Law (law@cygnus.com)
+
+ * haifa-sched.c (rank_for_schedule): For "equally good insns", prefer
+ the insn which has the most insns dependent on it.
+
Fri Jun 5 09:03:22 1998 John Carr <jfc@mit.edu>
* alias.c (find_base_value): Avoid reading past end of reg_base_value.
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index 1c5245c..fed2a12 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -87,7 +87,8 @@
broken by
6. choose insn with the least dependences upon the previously
scheduled insn, or finally
- 7. choose insn with lowest UID.
+ 7 choose the insn which has the most insns dependent on it.
+ 8. choose insn with lowest UID.
Memory references complicate matters. Only if we can be certain
that memory references are not part of the data dependency graph
@@ -4029,7 +4030,7 @@ rank_for_schedule (x, y)
rtx tmp = *(rtx *)y;
rtx tmp2 = *(rtx *)x;
rtx link;
- int tmp_class, tmp2_class;
+ int tmp_class, tmp2_class, depend_count1, depend_count2;
int val, priority_val, spec_val, prob_val, weight_val;
@@ -4090,6 +4091,21 @@ rank_for_schedule (x, y)
return val;
}
+ /* Prefer the insn which has more later insns that depend on it.
+ This gives the scheduler more freedom when scheduling later
+ instructions at the expense of added register pressure. */
+ depend_count1 = 0;
+ for (link = INSN_DEPEND (tmp); link; link = XEXP (link, 1))
+ depend_count1++;
+
+ depend_count2 = 0;
+ for (link = INSN_DEPEND (tmp2); link; link = XEXP (link, 1))
+ depend_count2++;
+
+ val = depend_count2 - depend_count1;
+ if (val)
+ return val;
+
/* If insns are equally good, sort by INSN_LUID (original insn order),
so that we make the sort stable. This minimizes instruction movement,
thus minimizing sched's effect on debugging and cross-jumping. */