From 08158df35aaccfdb532a7ad441f5f2a93513b9df Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Mon, 10 Apr 2000 12:31:19 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 18 +++ gcc/sbitmap.c | 429 ++++++++++++++++++++++++++------------------------ gcc/sbitmap.h | 153 +++++++++--------- 3 files changed, 318 insertions(+), 282 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 191d44434033..6e68d124924d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,23 @@ Mon Apr 10 07:21:13 2000 Richard Kenner + * 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. diff --git a/gcc/sbitmap.c b/gcc/sbitmap.c index 335659d9b357..da27c3212b38 100644 --- a/gcc/sbitmap.c +++ b/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; - - 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++; - } - } + 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; + + 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; - - 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++; - } - } + 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++; + } } /* 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; - - 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++; - } - } + 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; + + 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; - - 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++; - } - } + 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++; + } } /* 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"); } diff --git a/gcc/sbitmap.h b/gcc/sbitmap.h index 41d8324d35a1..b82b92b1ae19 100644 --- a/gcc/sbitmap.h +++ b/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)); +#define sbitmap_free(MAP) free(MAP) +#define sbitmap_vector_free(VEC) free(VEC) -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)); +struct int_list; -extern int sbitmap_first_set_bit PARAMS ((sbitmap)); -extern int sbitmap_last_set_bit PARAMS ((sbitmap)); +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)); -struct int_list; 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 */ -- 2.43.5