* 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
This commit is contained in:
Jeffrey A Law 2000-01-11 12:50:18 +00:00 committed by Jeff Law
parent c6f3ffc624
commit 8613329216
2 changed files with 22 additions and 5 deletions

View File

@ -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

View File

@ -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));