Commit 08158df3 by Richard Kenner Committed by Richard Kenner

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