sbitmap.h: Whitespace changes and use upper-case macro args.
* sbitmap.h: Whitespace changes and use upper-case macro args. (struct simple_bitmap_def): All sizes now unsigned. (EXECUTE_IF_SET_IN_SBITMAP): Internal vars now _X instead of X_. * sbitmap.c (sbitmap_alloc): N_ELMS now unsigned; also local vars. (sbitmap_vector_alloc): Parms and local vars now unsigned. (sbitmap_zero): Cast bzero arg to PTR. (sbitmap_vector_zero, sbitmap_vector_one): Parm and Local var unsigned. (sbitmap_union_of_diffs): Change loop index to unsigned and rework loop to make structure clearer. (sbitmap_not, sbitmap_difference, sbitmap_a_and_b): Likewise. (sbitmap_a_or_b, sbitmap_a_subset_b_p, sbitmap_a_or_b_and_c): Likewise. (sbitmap_a_and_b_or_c): Likewise. (sbitmap_intersection_of_succs): Minor cleanups. (sbitmap_intersection_of_preds, sbitmap_union_of_succs): Likewise. (sbitmap_union_of_preds): Likewise. (sbitmap_first_set_bit, dump_sbitmap): Local variables now unsigned. (debug_sbitmap): New function. From-SVN: r33059
This commit is contained in:
parent
98d64f692f
commit
08158df35a
|
@ -1,5 +1,23 @@
|
|||
Mon Apr 10 07:21:13 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||
|
||||
* sbitmap.h: Whitespace changes and use upper-case macro args.
|
||||
(struct simple_bitmap_def): All sizes now unsigned.
|
||||
(EXECUTE_IF_SET_IN_SBITMAP): Internal vars now _X instead of X_.
|
||||
* sbitmap.c (sbitmap_alloc): N_ELMS now unsigned; also local vars.
|
||||
(sbitmap_vector_alloc): Parms and local vars now unsigned.
|
||||
(sbitmap_zero): Cast bzero arg to PTR.
|
||||
(sbitmap_vector_zero, sbitmap_vector_one): Parm and Local var unsigned.
|
||||
(sbitmap_union_of_diffs): Change loop index to unsigned and rework
|
||||
loop to make structure clearer.
|
||||
(sbitmap_not, sbitmap_difference, sbitmap_a_and_b): Likewise.
|
||||
(sbitmap_a_or_b, sbitmap_a_subset_b_p, sbitmap_a_or_b_and_c): Likewise.
|
||||
(sbitmap_a_and_b_or_c): Likewise.
|
||||
(sbitmap_intersection_of_succs): Minor cleanups.
|
||||
(sbitmap_intersection_of_preds, sbitmap_union_of_succs): Likewise.
|
||||
(sbitmap_union_of_preds): Likewise.
|
||||
(sbitmap_first_set_bit, dump_sbitmap): Local variables now unsigned.
|
||||
(debug_sbitmap): New function.
|
||||
|
||||
* c-convert.c (convert): Handle REFERENCE_TYPE like POINTER_TYPE.
|
||||
* c-typeck.c (convert_for_assignment): Likewise.
|
||||
|
||||
|
|
415
gcc/sbitmap.c
415
gcc/sbitmap.c
|
@ -1,5 +1,5 @@
|
|||
/* Simple bitmaps.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU CC.
|
||||
|
||||
|
@ -30,9 +30,9 @@ Boston, MA 02111-1307, USA. */
|
|||
|
||||
sbitmap
|
||||
sbitmap_alloc (n_elms)
|
||||
int n_elms;
|
||||
unsigned int n_elms;
|
||||
{
|
||||
int bytes, size, amt;
|
||||
unsigned int bytes, size, amt;
|
||||
sbitmap bmap;
|
||||
|
||||
size = SBITMAP_SET_SIZE (n_elms);
|
||||
|
@ -50,9 +50,9 @@ sbitmap_alloc (n_elms)
|
|||
|
||||
sbitmap *
|
||||
sbitmap_vector_alloc (n_vecs, n_elms)
|
||||
int n_vecs, n_elms;
|
||||
unsigned int n_vecs, n_elms;
|
||||
{
|
||||
int i, bytes, offset, elm_bytes, size, amt, vector_bytes;
|
||||
unsigned int i, bytes, offset, elm_bytes, size, amt, vector_bytes;
|
||||
sbitmap *bitmap_vector;
|
||||
|
||||
size = SBITMAP_SET_SIZE (n_elms);
|
||||
|
@ -76,11 +76,10 @@ sbitmap_vector_alloc (n_vecs, n_elms)
|
|||
amt = vector_bytes + (n_vecs * elm_bytes);
|
||||
bitmap_vector = (sbitmap *) xmalloc (amt);
|
||||
|
||||
for (i = 0, offset = vector_bytes;
|
||||
i < n_vecs;
|
||||
i++, offset += elm_bytes)
|
||||
for (i = 0, offset = vector_bytes; i < n_vecs; i++, offset += elm_bytes)
|
||||
{
|
||||
sbitmap b = (sbitmap) ((char *) bitmap_vector + offset);
|
||||
|
||||
bitmap_vector[i] = b;
|
||||
b->n_bits = n_elms;
|
||||
b->size = size;
|
||||
|
@ -106,10 +105,10 @@ void
|
|||
sbitmap_zero (bmap)
|
||||
sbitmap bmap;
|
||||
{
|
||||
bzero ((char *) bmap->elms, bmap->bytes);
|
||||
bzero ((PTR) bmap->elms, bmap->bytes);
|
||||
}
|
||||
|
||||
/* Set to ones all elements in a bitmap. */
|
||||
/* Set all elements in a bitmap to ones. */
|
||||
|
||||
void
|
||||
sbitmap_ones (bmap)
|
||||
|
@ -117,14 +116,12 @@ sbitmap_ones (bmap)
|
|||
{
|
||||
unsigned int last_bit;
|
||||
|
||||
memset (bmap->elms, -1, bmap->bytes);
|
||||
memset ((PTR) bmap->elms, -1, bmap->bytes);
|
||||
|
||||
last_bit = bmap->n_bits % (unsigned) SBITMAP_ELT_BITS;
|
||||
last_bit = bmap->n_bits % SBITMAP_ELT_BITS;
|
||||
if (last_bit)
|
||||
{
|
||||
bmap->elms[bmap->size - 1]
|
||||
= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
|
||||
}
|
||||
bmap->elms[bmap->size - 1]
|
||||
= (SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit);
|
||||
}
|
||||
|
||||
/* Zero a vector of N_VECS bitmaps. */
|
||||
|
@ -132,22 +129,22 @@ sbitmap_ones (bmap)
|
|||
void
|
||||
sbitmap_vector_zero (bmap, n_vecs)
|
||||
sbitmap *bmap;
|
||||
int n_vecs;
|
||||
unsigned int n_vecs;
|
||||
{
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < n_vecs; i++)
|
||||
sbitmap_zero (bmap[i]);
|
||||
}
|
||||
|
||||
/* Set to ones a vector of N_VECS bitmaps. */
|
||||
/* Set a vector of N_VECS bitmaps to ones. */
|
||||
|
||||
void
|
||||
sbitmap_vector_ones (bmap, n_vecs)
|
||||
sbitmap *bmap;
|
||||
int n_vecs;
|
||||
unsigned int n_vecs;
|
||||
{
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < n_vecs; i++)
|
||||
sbitmap_ones (bmap[i]);
|
||||
|
@ -161,22 +158,22 @@ int
|
|||
sbitmap_union_of_diff (dst, a, b, c)
|
||||
sbitmap dst, a, b, c;
|
||||
{
|
||||
int i,changed;
|
||||
unsigned int i;
|
||||
sbitmap_ptr dstp, ap, bp, cp;
|
||||
int changed = 0;
|
||||
|
||||
changed = 0;
|
||||
dstp = dst->elms;
|
||||
ap = a->elms;
|
||||
bp = b->elms;
|
||||
cp = c->elms;
|
||||
for (i = 0; i < dst->size; i++)
|
||||
for (dstp = dst->elms, ap = a->elms, bp = b->elms, cp = c->elms, i = 0;
|
||||
i < dst->size; i++, dstp++)
|
||||
{
|
||||
SBITMAP_ELT_TYPE tmp = *ap | (*bp & ~*cp);
|
||||
SBITMAP_ELT_TYPE tmp = *ap++ | (*bp++ & ~*cp++);
|
||||
|
||||
if (*dstp != tmp)
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
dstp++; ap++; bp++; cp++;
|
||||
{
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
|
@ -186,34 +183,24 @@ void
|
|||
sbitmap_not (dst, src)
|
||||
sbitmap dst, src;
|
||||
{
|
||||
int i;
|
||||
sbitmap_ptr dstp, ap;
|
||||
unsigned int i;
|
||||
sbitmap_ptr dstp, srcp;
|
||||
|
||||
dstp = dst->elms;
|
||||
ap = src->elms;
|
||||
for (i = 0; i < dst->size; i++)
|
||||
{
|
||||
SBITMAP_ELT_TYPE tmp = ~(*ap);
|
||||
*dstp = tmp;
|
||||
dstp++; ap++;
|
||||
}
|
||||
for (dstp = dst->elms, srcp = src->elms, i = 0; i < dst->size; i++)
|
||||
*dstp++ = ~(*srcp++);
|
||||
}
|
||||
|
||||
/* Set the bits in DST to be the difference between the bits
|
||||
in A and the bits in B. i.e. dst = a - b.
|
||||
The - operator is implemented as a & (~b). */
|
||||
in A and the bits in B. i.e. dst = a & (~b). */
|
||||
|
||||
void
|
||||
sbitmap_difference (dst, a, b)
|
||||
sbitmap dst, a, b;
|
||||
{
|
||||
int i;
|
||||
unsigned int i;
|
||||
sbitmap_ptr dstp, ap, bp;
|
||||
|
||||
dstp = dst->elms;
|
||||
ap = a->elms;
|
||||
bp = b->elms;
|
||||
for (i = 0; i < dst->size; i++)
|
||||
|
||||
for (dstp = dst->elms, ap = a->elms, bp = b->elms, i = 0; i < dst->size; i++)
|
||||
*dstp++ = *ap++ & (~*bp++);
|
||||
}
|
||||
|
||||
|
@ -224,23 +211,25 @@ int
|
|||
sbitmap_a_and_b (dst, a, b)
|
||||
sbitmap dst, a, b;
|
||||
{
|
||||
int i,changed;
|
||||
unsigned int i;
|
||||
sbitmap_ptr dstp, ap, bp;
|
||||
int changed = 0;
|
||||
|
||||
changed = 0;
|
||||
dstp = dst->elms;
|
||||
ap = a->elms;
|
||||
bp = b->elms;
|
||||
for (i = 0; i < dst->size; i++)
|
||||
for (dstp = dst->elms, ap = a->elms, bp = b->elms, i = 0; i < dst->size;
|
||||
i++, dstp++)
|
||||
{
|
||||
SBITMAP_ELT_TYPE tmp = *ap & *bp;
|
||||
SBITMAP_ELT_TYPE tmp = *ap++ & *bp++;
|
||||
|
||||
if (*dstp != tmp)
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
dstp++; ap++; bp++;
|
||||
{
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
/* Set DST to be (A or B)).
|
||||
Return non-zero if any change is made. */
|
||||
|
||||
|
@ -248,40 +237,39 @@ int
|
|||
sbitmap_a_or_b (dst, a, b)
|
||||
sbitmap dst, a, b;
|
||||
{
|
||||
int i,changed;
|
||||
unsigned int i;
|
||||
sbitmap_ptr dstp, ap, bp;
|
||||
int changed = 0;
|
||||
|
||||
changed = 0;
|
||||
dstp = dst->elms;
|
||||
ap = a->elms;
|
||||
bp = b->elms;
|
||||
for (i = 0; i < dst->size; i++)
|
||||
for (dstp = dst->elms, ap = a->elms, bp = b->elms, i = 0; i < dst->size;
|
||||
i++, dstp++)
|
||||
{
|
||||
SBITMAP_ELT_TYPE tmp = *ap | *bp;
|
||||
SBITMAP_ELT_TYPE tmp = *ap++ | *bp++;
|
||||
|
||||
if (*dstp != tmp)
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
dstp++; ap++; bp++;
|
||||
{
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
/* Return non-zero if A is a subset of B. */
|
||||
|
||||
int
|
||||
sbitmap_a_subset_b_p (a, b)
|
||||
sbitmap a, b;
|
||||
{
|
||||
int i;
|
||||
unsigned int i;
|
||||
sbitmap_ptr ap, bp;
|
||||
|
||||
ap = a->elms;
|
||||
bp = b->elms;
|
||||
for (i = 0; i < a->size; i++)
|
||||
{
|
||||
if ((*ap | *bp) != *bp)
|
||||
return 0;
|
||||
ap++; bp++;
|
||||
}
|
||||
|
||||
for (ap = a->elms, bp = b->elms, i = 0; i < a->size; i++)
|
||||
if ((*ap++ | *bp++) != *bp)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -292,48 +280,48 @@ int
|
|||
sbitmap_a_or_b_and_c (dst, a, b, c)
|
||||
sbitmap dst, a, b, c;
|
||||
{
|
||||
int i,changed;
|
||||
unsigned int i;
|
||||
sbitmap_ptr dstp, ap, bp, cp;
|
||||
int changed = 0;
|
||||
|
||||
changed = 0;
|
||||
dstp = dst->elms;
|
||||
ap = a->elms;
|
||||
bp = b->elms;
|
||||
cp = c->elms;
|
||||
for (i = 0; i < dst->size; i++)
|
||||
for (dstp = dst->elms, ap = a->elms, bp = b->elms, cp = c->elms, i = 0;
|
||||
i < dst->size; i++, dstp++)
|
||||
{
|
||||
SBITMAP_ELT_TYPE tmp = *ap | (*bp & *cp);
|
||||
SBITMAP_ELT_TYPE tmp = *ap++ | (*bp++ & *cp++);
|
||||
|
||||
if (*dstp != tmp)
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
dstp++; ap++; bp++; cp++;
|
||||
{
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
/* Set DST to be (A ann (B or C)).
|
||||
/* Set DST to be (A and (B or C)).
|
||||
Return non-zero if any change is made. */
|
||||
|
||||
int
|
||||
sbitmap_a_and_b_or_c (dst, a, b, c)
|
||||
sbitmap dst, a, b, c;
|
||||
{
|
||||
int i,changed;
|
||||
unsigned int i;
|
||||
sbitmap_ptr dstp, ap, bp, cp;
|
||||
int changed = 0;
|
||||
|
||||
changed = 0;
|
||||
dstp = dst->elms;
|
||||
ap = a->elms;
|
||||
bp = b->elms;
|
||||
cp = c->elms;
|
||||
for (i = 0; i < dst->size; i++)
|
||||
for (dstp = dst->elms, ap = a->elms, bp = b->elms, cp = c->elms, i = 0;
|
||||
i < dst->size; i++, dstp++)
|
||||
{
|
||||
SBITMAP_ELT_TYPE tmp = *ap & (*bp | *cp);
|
||||
SBITMAP_ELT_TYPE tmp = *ap++ & (*bp++ | *cp++);
|
||||
|
||||
if (*dstp != tmp)
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
dstp++; ap++; bp++; cp++;
|
||||
{
|
||||
changed = 1;
|
||||
*dstp = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
|
@ -347,34 +335,34 @@ sbitmap_intersection_of_succs (dst, src, bb)
|
|||
int bb;
|
||||
{
|
||||
basic_block b = BASIC_BLOCK (bb);
|
||||
edge e = b->succ;
|
||||
int set_size = dst->size;
|
||||
unsigned int set_size = dst->size;
|
||||
edge e;
|
||||
|
||||
for ( ; e != NULL; e = e->succ_next)
|
||||
for (e = b->succ; e != 0; e = e->succ_next)
|
||||
{
|
||||
if (e->dest == EXIT_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
sbitmap_copy (dst, src[e->dest->index]);
|
||||
break;
|
||||
}
|
||||
if (e == NULL)
|
||||
|
||||
if (e == 0)
|
||||
sbitmap_ones (dst);
|
||||
else
|
||||
{
|
||||
for ( e = e->succ_next; e != NULL; e = e->succ_next)
|
||||
{
|
||||
int i;
|
||||
sbitmap_ptr p,r;
|
||||
for (e = e->succ_next; e != 0; e = e->succ_next)
|
||||
{
|
||||
unsigned int i;
|
||||
sbitmap_ptr p, r;
|
||||
|
||||
if (e->dest == EXIT_BLOCK_PTR)
|
||||
continue;
|
||||
if (e->dest == EXIT_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
p = src[e->dest->index]->elms;
|
||||
r = dst->elms;
|
||||
for (i = 0; i < set_size; i++)
|
||||
*r++ &= *p++;
|
||||
}
|
||||
}
|
||||
p = src[e->dest->index]->elms;
|
||||
r = dst->elms;
|
||||
for (i = 0; i < set_size; i++)
|
||||
*r++ &= *p++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the bitmap DST to the intersection of SRC of predecessors of
|
||||
|
@ -387,34 +375,34 @@ sbitmap_intersection_of_preds (dst, src, bb)
|
|||
int bb;
|
||||
{
|
||||
basic_block b = BASIC_BLOCK (bb);
|
||||
edge e = b->pred;
|
||||
int set_size = dst->size;
|
||||
unsigned int set_size = dst->size;
|
||||
edge e;
|
||||
|
||||
for ( ; e != NULL; e = e->pred_next)
|
||||
for (e = b->pred; e != 0; e = e->pred_next)
|
||||
{
|
||||
if (e->src== ENTRY_BLOCK_PTR)
|
||||
if (e->src == ENTRY_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
sbitmap_copy (dst, src[e->src->index]);
|
||||
break;
|
||||
}
|
||||
if (e == NULL)
|
||||
|
||||
if (e == 0)
|
||||
sbitmap_ones (dst);
|
||||
else
|
||||
{
|
||||
for ( e = e->pred_next; e != NULL; e = e->pred_next)
|
||||
{
|
||||
int i;
|
||||
sbitmap_ptr p,r;
|
||||
for (e = e->pred_next; e != 0; e = e->pred_next)
|
||||
{
|
||||
unsigned int i;
|
||||
sbitmap_ptr p, r;
|
||||
|
||||
if (e->src == ENTRY_BLOCK_PTR)
|
||||
continue;
|
||||
if (e->src == ENTRY_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
p = src[e->src->index]->elms;
|
||||
r = dst->elms;
|
||||
for (i = 0; i < set_size; i++)
|
||||
*r++ &= *p++;
|
||||
}
|
||||
}
|
||||
p = src[e->src->index]->elms;
|
||||
r = dst->elms;
|
||||
for (i = 0; i < set_size; i++)
|
||||
*r++ &= *p++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the bitmap DST to the union of SRC of successors of
|
||||
|
@ -427,34 +415,34 @@ sbitmap_union_of_succs (dst, src, bb)
|
|||
int bb;
|
||||
{
|
||||
basic_block b = BASIC_BLOCK (bb);
|
||||
edge e = b->succ;
|
||||
int set_size = dst->size;
|
||||
unsigned int set_size = dst->size;
|
||||
edge e;
|
||||
|
||||
for ( ; e != NULL; e = e->succ_next)
|
||||
for (e = b->succ; e != 0; e = e->succ_next)
|
||||
{
|
||||
if (e->dest == EXIT_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
sbitmap_copy (dst, src[e->dest->index]);
|
||||
break;
|
||||
}
|
||||
if (e == NULL)
|
||||
|
||||
if (e == 0)
|
||||
sbitmap_zero (dst);
|
||||
else
|
||||
{
|
||||
for ( e = e->succ_next; e != NULL; e = e->succ_next)
|
||||
{
|
||||
int i;
|
||||
sbitmap_ptr p,r;
|
||||
for (e = e->succ_next; e != 0; e = e->succ_next)
|
||||
{
|
||||
unsigned int i;
|
||||
sbitmap_ptr p, r;
|
||||
|
||||
if (e->dest == EXIT_BLOCK_PTR)
|
||||
continue;
|
||||
if (e->dest == EXIT_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
p = src[e->dest->index]->elms;
|
||||
r = dst->elms;
|
||||
for (i = 0; i < set_size; i++)
|
||||
*r++ |= *p++;
|
||||
}
|
||||
}
|
||||
p = src[e->dest->index]->elms;
|
||||
r = dst->elms;
|
||||
for (i = 0; i < set_size; i++)
|
||||
*r++ |= *p++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the bitmap DST to the union of SRC of predecessors of
|
||||
|
@ -467,34 +455,34 @@ sbitmap_union_of_preds (dst, src, bb)
|
|||
int bb;
|
||||
{
|
||||
basic_block b = BASIC_BLOCK (bb);
|
||||
edge e = b->pred;
|
||||
int set_size = dst->size;
|
||||
unsigned int set_size = dst->size;
|
||||
edge e;
|
||||
|
||||
for ( ; e != NULL; e = e->pred_next)
|
||||
for (e = b->pred; e != 0; e = e->pred_next)
|
||||
{
|
||||
if (e->src== ENTRY_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
sbitmap_copy (dst, src[e->src->index]);
|
||||
break;
|
||||
}
|
||||
if (e == NULL)
|
||||
|
||||
if (e == 0)
|
||||
sbitmap_zero (dst);
|
||||
else
|
||||
{
|
||||
for ( e = e->pred_next; e != NULL; e = e->pred_next)
|
||||
{
|
||||
int i;
|
||||
sbitmap_ptr p,r;
|
||||
for (e = e->pred_next; e != 0; e = e->pred_next)
|
||||
{
|
||||
unsigned int i;
|
||||
sbitmap_ptr p, r;
|
||||
|
||||
if (e->src == ENTRY_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
p = src[e->src->index]->elms;
|
||||
r = dst->elms;
|
||||
for (i = 0; i < set_size; i++)
|
||||
*r++ |= *p++;
|
||||
}
|
||||
}
|
||||
if (e->src == ENTRY_BLOCK_PTR)
|
||||
continue;
|
||||
|
||||
p = src[e->src->index]->elms;
|
||||
r = dst->elms;
|
||||
for (i = 0; i < set_size; i++)
|
||||
*r++ |= *p++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Return number of first bit set in the bitmap, -1 if none. */
|
||||
|
@ -503,7 +491,8 @@ int
|
|||
sbitmap_first_set_bit (bmap)
|
||||
sbitmap bmap;
|
||||
{
|
||||
int n;
|
||||
unsigned int n;
|
||||
|
||||
EXECUTE_IF_SET_IN_SBITMAP (bmap, 0, n, { return n; });
|
||||
return -1;
|
||||
}
|
||||
|
@ -516,22 +505,28 @@ sbitmap_last_set_bit (bmap)
|
|||
{
|
||||
int i;
|
||||
SBITMAP_ELT_TYPE *ptr = bmap->elms;
|
||||
|
||||
for (i = bmap->size - 1; i >= 0; i--)
|
||||
{
|
||||
SBITMAP_ELT_TYPE word = ptr[i];
|
||||
if (word)
|
||||
{
|
||||
int index = (i + 1) * SBITMAP_ELT_BITS - 1;
|
||||
SBITMAP_ELT_TYPE mask = (SBITMAP_ELT_TYPE) 1 << (SBITMAP_ELT_BITS - 1);
|
||||
while (1)
|
||||
{
|
||||
if (word & mask)
|
||||
return index;
|
||||
mask >>= 1;
|
||||
index--;
|
||||
}
|
||||
}
|
||||
|
||||
if (word != 0)
|
||||
{
|
||||
unsigned int index = (i + 1) * SBITMAP_ELT_BITS - 1;
|
||||
SBITMAP_ELT_TYPE mask
|
||||
= (SBITMAP_ELT_TYPE) 1 << (SBITMAP_ELT_BITS - 1);
|
||||
|
||||
while (1)
|
||||
{
|
||||
if ((word & mask) != 0)
|
||||
return index;
|
||||
|
||||
mask >>= 1;
|
||||
index--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -540,25 +535,48 @@ dump_sbitmap (file, bmap)
|
|||
FILE *file;
|
||||
sbitmap bmap;
|
||||
{
|
||||
int i, n;
|
||||
unsigned int j;
|
||||
int set_size = bmap->size;
|
||||
int total_bits = bmap->n_bits;
|
||||
unsigned int i, n, j;
|
||||
unsigned int set_size = bmap->size;
|
||||
unsigned int total_bits = bmap->n_bits;
|
||||
|
||||
fprintf (file, " ");
|
||||
for (i = n = 0; i < set_size && n < total_bits; i++)
|
||||
{
|
||||
for (j = 0; j < SBITMAP_ELT_BITS && n < total_bits; j++, n++)
|
||||
{
|
||||
if (n != 0 && n % 10 == 0)
|
||||
fprintf (file, " ");
|
||||
fprintf (file, "%d",
|
||||
(bmap->elms[i] & ((SBITMAP_ELT_TYPE) 1 << j)) != 0);
|
||||
}
|
||||
}
|
||||
for (j = 0; j < SBITMAP_ELT_BITS && n < total_bits; j++, n++)
|
||||
{
|
||||
if (n != 0 && n % 10 == 0)
|
||||
fprintf (file, " ");
|
||||
|
||||
fprintf (file, "%d",
|
||||
(bmap->elms[i] & ((SBITMAP_ELT_TYPE) 1 << j)) != 0);
|
||||
}
|
||||
|
||||
fprintf (file, "\n");
|
||||
}
|
||||
|
||||
void
|
||||
debug_sbitmap (bmap)
|
||||
sbitmap bmap;
|
||||
{
|
||||
unsigned int i, pos;
|
||||
|
||||
fprintf (stderr, "n_bits = %d, set = {", bmap->n_bits);
|
||||
|
||||
for (pos = 30, i = 0; i < bmap->n_bits; i++)
|
||||
if (TEST_BIT (bmap, i))
|
||||
{
|
||||
if (pos > 70)
|
||||
{
|
||||
fprintf (stderr, "\n");
|
||||
pos = 0;
|
||||
}
|
||||
|
||||
fprintf (stderr, "%d ", i);
|
||||
pos += 1 + (i >= 10) + (i >= 100);
|
||||
}
|
||||
|
||||
fprintf (stderr, "}\n");
|
||||
}
|
||||
|
||||
void
|
||||
dump_sbitmap_vector (file, title, subtitle, bmaps, n_maps)
|
||||
FILE *file;
|
||||
|
@ -574,5 +592,6 @@ dump_sbitmap_vector (file, title, subtitle, bmaps, n_maps)
|
|||
fprintf (file, "%s %d\n", subtitle, bb);
|
||||
dump_sbitmap (file, bmaps[bb]);
|
||||
}
|
||||
|
||||
fprintf (file, "\n");
|
||||
}
|
||||
|
|
155
gcc/sbitmap.h
155
gcc/sbitmap.h
|
@ -28,112 +28,111 @@ Boston, MA 02111-1307, USA. */
|
|||
#define SBITMAP_ELT_BITS ((unsigned) HOST_BITS_PER_WIDE_INT)
|
||||
#define SBITMAP_ELT_TYPE unsigned HOST_WIDE_INT
|
||||
|
||||
typedef struct simple_bitmap_def {
|
||||
/* Number of bits. */
|
||||
int n_bits;
|
||||
/* Size in elements. */
|
||||
int size;
|
||||
/* Size in bytes. */
|
||||
int bytes;
|
||||
/* The elements. */
|
||||
SBITMAP_ELT_TYPE elms[1];
|
||||
typedef struct simple_bitmap_def
|
||||
{
|
||||
unsigned int n_bits; /* Number of bits. */
|
||||
unsigned int size; /* Size in elements. */
|
||||
unsigned int bytes; /* Size in bytes. */
|
||||
SBITMAP_ELT_TYPE elms[1]; /* The elements. */
|
||||
} *sbitmap;
|
||||
|
||||
typedef SBITMAP_ELT_TYPE *sbitmap_ptr;
|
||||
|
||||
/* Return the set size needed for N elements. */
|
||||
#define SBITMAP_SET_SIZE(n) (((n) + SBITMAP_ELT_BITS - 1) / SBITMAP_ELT_BITS)
|
||||
#define SBITMAP_SET_SIZE(N) (((N) + SBITMAP_ELT_BITS - 1) / SBITMAP_ELT_BITS)
|
||||
|
||||
/* set bit number bitno in the bitmap */
|
||||
#define SET_BIT(bitmap, bitno) \
|
||||
((bitmap)->elms [(bitno) / SBITMAP_ELT_BITS] \
|
||||
|= (SBITMAP_ELT_TYPE) 1 << (bitno) % SBITMAP_ELT_BITS)
|
||||
/* Set bit number bitno in the bitmap. */
|
||||
#define SET_BIT(BITMAP, BITNO) \
|
||||
((BITMAP)->elms [(BITNO) / SBITMAP_ELT_BITS] \
|
||||
|= (SBITMAP_ELT_TYPE) 1 << (BITNO) % SBITMAP_ELT_BITS)
|
||||
|
||||
/* test if bit number bitno in the bitmap is set */
|
||||
#define TEST_BIT(bitmap, bitno) \
|
||||
((bitmap)->elms [(bitno) / SBITMAP_ELT_BITS] >> (bitno) % SBITMAP_ELT_BITS & 1)
|
||||
/* Test if bit number bitno in the bitmap is set. */
|
||||
#define TEST_BIT(BITMAP, BITNO) \
|
||||
((BITMAP)->elms [(BITNO) / SBITMAP_ELT_BITS] >> (BITNO) % SBITMAP_ELT_BITS & 1)
|
||||
|
||||
/* reset bit number bitno in the bitmap */
|
||||
#define RESET_BIT(bitmap, bitno) \
|
||||
((bitmap)->elms [(bitno) / SBITMAP_ELT_BITS] \
|
||||
&= ~((SBITMAP_ELT_TYPE) 1 << (bitno) % SBITMAP_ELT_BITS))
|
||||
/* Reset bit number bitno in the bitmap. */
|
||||
#define RESET_BIT(BITMAP, BITNO) \
|
||||
((BITMAP)->elms [(BITNO) / SBITMAP_ELT_BITS] \
|
||||
&= ~((SBITMAP_ELT_TYPE) 1 << (BITNO) % SBITMAP_ELT_BITS))
|
||||
|
||||
/* Loop over all elements of SBITSET, starting with MIN. */
|
||||
#define EXECUTE_IF_SET_IN_SBITMAP(SBITMAP, MIN, N, CODE) \
|
||||
do { \
|
||||
unsigned int bit_num_ = (MIN) % (unsigned) SBITMAP_ELT_BITS; \
|
||||
unsigned int word_num_ = (MIN) / (unsigned) SBITMAP_ELT_BITS; \
|
||||
unsigned int size_ = (SBITMAP)->size; \
|
||||
SBITMAP_ELT_TYPE *ptr_ = (SBITMAP)->elms; \
|
||||
unsigned int _word_num; \
|
||||
unsigned int _bit_num = (MIN) % (unsigned int) SBITMAP_ELT_BITS; \
|
||||
unsigned int _size = (SBITMAP)->size; \
|
||||
SBITMAP_ELT_TYPE *_ptr = (SBITMAP)->elms; \
|
||||
\
|
||||
while (word_num_ < size_) \
|
||||
for (_word_num = (MIN) / (unsigned int) SBITMAP_ELT_BITS; \
|
||||
_word_num < _size; _word_num++, _bit_num = 0) \
|
||||
{ \
|
||||
SBITMAP_ELT_TYPE word_ = ptr_[word_num_]; \
|
||||
if (word_ != 0) \
|
||||
{ \
|
||||
for (; bit_num_ < SBITMAP_ELT_BITS; ++bit_num_) \
|
||||
{ \
|
||||
SBITMAP_ELT_TYPE mask_ = (SBITMAP_ELT_TYPE)1 << bit_num_; \
|
||||
if ((word_ & mask_) != 0) \
|
||||
{ \
|
||||
word_ &= ~mask_; \
|
||||
(N) = word_num_ * SBITMAP_ELT_BITS + bit_num_; \
|
||||
CODE; \
|
||||
if (word_ == 0) \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
bit_num_ = 0; \
|
||||
word_num_++; \
|
||||
} \
|
||||
SBITMAP_ELT_TYPE _word = _ptr[_word_num]; \
|
||||
\
|
||||
if (_word != 0) \
|
||||
for (; _bit_num < SBITMAP_ELT_BITS; _bit_num++) \
|
||||
{ \
|
||||
SBITMAP_ELT_TYPE _mask = (SBITMAP_ELT_TYPE)1 << _bit_num; \
|
||||
\
|
||||
if ((_word & _mask) != 0) \
|
||||
{ \
|
||||
_word &= ~ _mask; \
|
||||
(N) = _word_num * SBITMAP_ELT_BITS + _bit_num; \
|
||||
CODE; \
|
||||
if (_word == 0) \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define sbitmap_free(map) free(map)
|
||||
#define sbitmap_vector_free(vec) free(vec)
|
||||
|
||||
extern void dump_sbitmap PARAMS ((FILE *, sbitmap));
|
||||
extern void dump_sbitmap_vector PARAMS ((FILE *, const char *, const char *,
|
||||
sbitmap *, int));
|
||||
|
||||
extern sbitmap sbitmap_alloc PARAMS ((int));
|
||||
extern sbitmap *sbitmap_vector_alloc PARAMS ((int, int));
|
||||
|
||||
extern void sbitmap_copy PARAMS ((sbitmap, sbitmap));
|
||||
extern void sbitmap_zero PARAMS ((sbitmap));
|
||||
extern void sbitmap_ones PARAMS ((sbitmap));
|
||||
extern void sbitmap_vector_zero PARAMS ((sbitmap *, int));
|
||||
extern void sbitmap_vector_ones PARAMS ((sbitmap *, int));
|
||||
|
||||
extern int sbitmap_union_of_diff PARAMS ((sbitmap, sbitmap, sbitmap, sbitmap));
|
||||
extern void sbitmap_difference PARAMS ((sbitmap, sbitmap, sbitmap));
|
||||
extern void sbitmap_not PARAMS ((sbitmap, sbitmap));
|
||||
extern int sbitmap_a_or_b_and_c PARAMS ((sbitmap, sbitmap, sbitmap, sbitmap));
|
||||
extern int sbitmap_a_and_b_or_c PARAMS ((sbitmap, sbitmap, sbitmap, sbitmap));
|
||||
extern int sbitmap_a_and_b PARAMS ((sbitmap, sbitmap, sbitmap));
|
||||
extern int sbitmap_a_or_b PARAMS ((sbitmap, sbitmap, sbitmap));
|
||||
extern int sbitmap_a_subset_b_p PARAMS ((sbitmap, sbitmap));
|
||||
|
||||
extern int sbitmap_first_set_bit PARAMS ((sbitmap));
|
||||
extern int sbitmap_last_set_bit PARAMS ((sbitmap));
|
||||
#define sbitmap_free(MAP) free(MAP)
|
||||
#define sbitmap_vector_free(VEC) free(VEC)
|
||||
|
||||
struct int_list;
|
||||
|
||||
extern void dump_sbitmap PARAMS ((FILE *, sbitmap));
|
||||
extern void dump_sbitmap_vector PARAMS ((FILE *, const char *,
|
||||
const char *, sbitmap *,
|
||||
int));
|
||||
extern sbitmap sbitmap_alloc PARAMS ((unsigned int));
|
||||
extern sbitmap *sbitmap_vector_alloc PARAMS ((unsigned int, unsigned int));
|
||||
extern void sbitmap_copy PARAMS ((sbitmap, sbitmap));
|
||||
extern void sbitmap_zero PARAMS ((sbitmap));
|
||||
extern void sbitmap_ones PARAMS ((sbitmap));
|
||||
extern void sbitmap_vector_zero PARAMS ((sbitmap *, unsigned int));
|
||||
extern void sbitmap_vector_ones PARAMS ((sbitmap *, unsigned int));
|
||||
|
||||
extern int sbitmap_union_of_diff PARAMS ((sbitmap, sbitmap, sbitmap,
|
||||
sbitmap));
|
||||
extern void sbitmap_difference PARAMS ((sbitmap, sbitmap, sbitmap));
|
||||
extern void sbitmap_not PARAMS ((sbitmap, sbitmap));
|
||||
extern int sbitmap_a_or_b_and_c PARAMS ((sbitmap, sbitmap, sbitmap,
|
||||
sbitmap));
|
||||
extern int sbitmap_a_and_b_or_c PARAMS ((sbitmap, sbitmap, sbitmap,
|
||||
sbitmap));
|
||||
extern int sbitmap_a_and_b PARAMS ((sbitmap, sbitmap, sbitmap));
|
||||
extern int sbitmap_a_or_b PARAMS ((sbitmap, sbitmap, sbitmap));
|
||||
extern int sbitmap_a_subset_b_p PARAMS ((sbitmap, sbitmap));
|
||||
|
||||
extern int sbitmap_first_set_bit PARAMS ((sbitmap));
|
||||
extern int sbitmap_last_set_bit PARAMS ((sbitmap));
|
||||
|
||||
extern void sbitmap_intersect_of_predsucc PARAMS ((sbitmap, sbitmap *,
|
||||
int, struct int_list **));
|
||||
#define sbitmap_intersect_of_predecessors sbitmap_intersect_of_predsucc
|
||||
#define sbitmap_intersect_of_successors sbitmap_intersect_of_predsucc
|
||||
|
||||
extern void sbitmap_union_of_predsucc PARAMS ((sbitmap, sbitmap *, int,
|
||||
struct int_list **));
|
||||
extern void sbitmap_union_of_predsucc PARAMS ((sbitmap, sbitmap *, int,
|
||||
struct int_list **));
|
||||
#define sbitmap_union_of_predecessors sbitmap_union_of_predsucc
|
||||
#define sbitmap_union_of_successors sbitmap_union_of_predsucc
|
||||
|
||||
/* Intersection and Union of preds/succs using the new flow graph
|
||||
structure instead of the pred/succ arrays. */
|
||||
|
||||
extern void sbitmap_intersection_of_succs PARAMS ((sbitmap, sbitmap *, int));
|
||||
extern void sbitmap_intersection_of_preds PARAMS ((sbitmap, sbitmap *, int));
|
||||
extern void sbitmap_union_of_succs PARAMS ((sbitmap, sbitmap *, int));
|
||||
extern void sbitmap_union_of_preds PARAMS ((sbitmap, sbitmap *, int));
|
||||
extern void sbitmap_intersection_of_succs PARAMS ((sbitmap, sbitmap *, int));
|
||||
extern void sbitmap_intersection_of_preds PARAMS ((sbitmap, sbitmap *, int));
|
||||
extern void sbitmap_union_of_succs PARAMS ((sbitmap, sbitmap *, int));
|
||||
extern void sbitmap_union_of_preds PARAMS ((sbitmap, sbitmap *, int));
|
||||
|
||||
#endif /* _SBITMAP_H */
|
||||
|
|
Loading…
Reference in New Issue