Commit 86133292 by Jeffrey A Law Committed by Jeff Law

* 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
parent c6f3ffc6
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> 2000-01-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (optabs.o): Depend on real.h * Makefile.in (optabs.o): Depend on real.h
......
...@@ -594,7 +594,7 @@ static int bitlst_table_size; ...@@ -594,7 +594,7 @@ static int bitlst_table_size;
static int *bitlst_table; static int *bitlst_table;
static char bitset_member PROTO ((bitset, int, int)); 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. /* Target info declarations.
...@@ -680,6 +680,9 @@ static int *rgn_edges; ...@@ -680,6 +680,9 @@ static int *rgn_edges;
/* Number of words in an edgeset. */ /* Number of words in an edgeset. */
static int edgeset_size; 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. */ /* Mapping from each edge in the graph to its number in the rgn. */
static int *edge_to_bit; static int *edge_to_bit;
#define EDGE_TO_BIT(edge) (edge_to_bit[edge]) #define EDGE_TO_BIT(edge) (edge_to_bit[edge])
...@@ -1216,7 +1219,7 @@ bitset_member (set, index, len) ...@@ -1216,7 +1219,7 @@ bitset_member (set, index, len)
/* Translate a bit-set SET to a list BL of the bit-set members. */ /* Translate a bit-set SET to a list BL of the bit-set members. */
static void static void
extract_bitlst (set, len, bl) extract_bitlst (set, len, bitlen, bl)
bitset set; bitset set;
int len; int len;
bitlst *bl; bitlst *bl;
...@@ -1230,11 +1233,15 @@ extract_bitlst (set, len, bl) ...@@ -1230,11 +1233,15 @@ extract_bitlst (set, len, bl)
bl->first_member = &bitlst_table[bitlst_table_last]; bl->first_member = &bitlst_table[bitlst_table_last];
bl->nr_members = 0; bl->nr_members = 0;
/* Iterate over each word in the bitset. */
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
word = set[i]; word = set[i];
offset = i * HOST_BITS_PER_WIDE_INT; 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) if (word & 1)
{ {
...@@ -1884,12 +1891,12 @@ split_edges (bb_src, bb_trg, bl) ...@@ -1884,12 +1891,12 @@ split_edges (bb_src, bb_trg, bl)
edgelst *bl; edgelst *bl;
{ {
int es = edgeset_size; int es = edgeset_size;
edgeset src = (edgeset) xmalloc (es * sizeof (HOST_WIDE_INT)); edgeset src = (edgeset) xcalloc (es, sizeof (HOST_WIDE_INT));
while (es--) while (es--)
src[es] = (pot_split[bb_src])[es]; src[es] = (pot_split[bb_src])[es];
BITSET_DIFFER (src, pot_split[bb_trg], edgeset_size); BITSET_DIFFER (src, pot_split[bb_trg], edgeset_size);
extract_bitlst (src, edgeset_size, bl); extract_bitlst (src, es, edgeset_bitsize, bl);
free (src); free (src);
} }
...@@ -6673,6 +6680,7 @@ schedule_region (rgn) ...@@ -6673,6 +6680,7 @@ schedule_region (rgn)
/* Split edges. */ /* Split edges. */
edgeset_size = rgn_nr_edges / HOST_BITS_PER_WIDE_INT + 1; 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)); pot_split = (edgeset *) xmalloc (current_nr_blocks * sizeof (edgeset));
ancestor_edges ancestor_edges
= (edgeset *) xmalloc (current_nr_blocks * sizeof (edgeset)); = (edgeset *) xmalloc (current_nr_blocks * sizeof (edgeset));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment