aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>2000-01-11 12:50:18 +0000
committerJeff Law <law@gcc.gnu.org>2000-01-11 05:50:18 -0700
commit8613329216196f7f36857b4c24040c1358cf14c5 (patch)
tree52c6c1a113e6fc4a9bbd6399959e875035490b81
parentc6f3ffc624dd1b90f7e366f5e85098e38ab8f614 (diff)
downloadgcc-8613329216196f7f36857b4c24040c1358cf14c5.zip
gcc-8613329216196f7f36857b4c24040c1358cf14c5.tar.gz
gcc-8613329216196f7f36857b4c24040c1358cf14c5.tar.bz2
* Band-aid until haifa's bitset implementation is nuked.
* haifa-sched.c (extract_bitlst): New parameter for size of the bitset in bits. All callers changed. Avoid looking at undefined bits in the bitset. (edgeset_bitsize): New variable. (schedule_region): Initialize edgeset_bitsize. From-SVN: r31322
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/haifa-sched.c18
2 files changed, 22 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3ec9803..efa7406 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+Tue Jan 11 05:49:01 2000 Jeffrey A Law (law@cygnus.com)
+
+ * Band-aid until haifa's bitset implementation is nuked.
+ * haifa-sched.c (extract_bitlst): New parameter for size of the
+ bitset in bits. All callers changed. Avoid looking at undefined
+ bits in the bitset.
+ (edgeset_bitsize): New variable.
+ (schedule_region): Initialize edgeset_bitsize.
+
2000-01-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (optabs.o): Depend on real.h
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index 727fd65..b677b04 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -594,7 +594,7 @@ static int bitlst_table_size;
static int *bitlst_table;
static char bitset_member PROTO ((bitset, int, int));
-static void extract_bitlst PROTO ((bitset, int, bitlst *));
+static void extract_bitlst PROTO ((bitset, int, int, bitlst *));
/* Target info declarations.
@@ -680,6 +680,9 @@ static int *rgn_edges;
/* Number of words in an edgeset. */
static int edgeset_size;
+/* Number of bits in an edgeset. */
+static int edgeset_bitsize;
+
/* Mapping from each edge in the graph to its number in the rgn. */
static int *edge_to_bit;
#define EDGE_TO_BIT(edge) (edge_to_bit[edge])
@@ -1216,7 +1219,7 @@ bitset_member (set, index, len)
/* Translate a bit-set SET to a list BL of the bit-set members. */
static void
-extract_bitlst (set, len, bl)
+extract_bitlst (set, len, bitlen, bl)
bitset set;
int len;
bitlst *bl;
@@ -1230,11 +1233,15 @@ extract_bitlst (set, len, bl)
bl->first_member = &bitlst_table[bitlst_table_last];
bl->nr_members = 0;
+ /* Iterate over each word in the bitset. */
for (i = 0; i < len; i++)
{
word = set[i];
offset = i * HOST_BITS_PER_WIDE_INT;
- for (j = 0; word; j++)
+
+ /* Iterate over each bit in the word, but do not
+ go beyond the end of the defined bits. */
+ for (j = 0; offset < bitlen && word; j++)
{
if (word & 1)
{
@@ -1884,12 +1891,12 @@ split_edges (bb_src, bb_trg, bl)
edgelst *bl;
{
int es = edgeset_size;
- edgeset src = (edgeset) xmalloc (es * sizeof (HOST_WIDE_INT));
+ edgeset src = (edgeset) xcalloc (es, sizeof (HOST_WIDE_INT));
while (es--)
src[es] = (pot_split[bb_src])[es];
BITSET_DIFFER (src, pot_split[bb_trg], edgeset_size);
- extract_bitlst (src, edgeset_size, bl);
+ extract_bitlst (src, es, edgeset_bitsize, bl);
free (src);
}
@@ -6673,6 +6680,7 @@ schedule_region (rgn)
/* Split edges. */
edgeset_size = rgn_nr_edges / HOST_BITS_PER_WIDE_INT + 1;
+ edgeset_bitsize = rgn_nr_edges;
pot_split = (edgeset *) xmalloc (current_nr_blocks * sizeof (edgeset));
ancestor_edges
= (edgeset *) xmalloc (current_nr_blocks * sizeof (edgeset));