summaryrefslogtreecommitdiff
path: root/gcc/sbitmap.c
diff options
context:
space:
mode:
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2003-12-28 16:53:27 +0000
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2003-12-28 16:53:27 +0000
commit93036b9bdcf5509edb24e91734fef7a4c9c344f1 (patch)
treee6a5748acc32c525d3030085f49922c8596edf81 /gcc/sbitmap.c
parentfdae225d05556545b097570bff36e69240b5af56 (diff)
downloadgcc-93036b9bdcf5509edb24e91734fef7a4c9c344f1.tar.gz
2003-12-28 Mostafa Hagog <mustafa@il.ibm.com>
* sbitmap.c (sbitmap_union_of_diff_cg, sbitmap_a_and_b_cg, sbitmap_a_xor_b_cg): Accumulate "changed" properly. (sbitmap_not): Zero all bits past n_bit. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75182 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sbitmap.c')
-rw-r--r--gcc/sbitmap.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/gcc/sbitmap.c b/gcc/sbitmap.c
index 3cec45de627..1d27a871097 100644
--- a/gcc/sbitmap.c
+++ b/gcc/sbitmap.c
@@ -250,9 +250,16 @@ sbitmap_not (sbitmap dst, sbitmap src)
unsigned int i, n = dst->size;
sbitmap_ptr dstp = dst->elms;
sbitmap_ptr srcp = src->elms;
+ unsigned int last_bit;
for (i = 0; i < n; i++)
*dstp++ = ~*srcp++;
+
+ /* Zero all bits past n_bits, by ANDing dst with sbitmap_ones. */
+ last_bit = src->n_bits % SBITMAP_ELT_BITS;
+ if (last_bit)
+ dst->elms[n-1] = dst->elms[n-1]
+ & ((SBITMAP_ELT_TYPE)-1 >> (SBITMAP_ELT_BITS - last_bit));
}
/* Set the bits in DST to be the difference between the bits
@@ -298,7 +305,7 @@ sbitmap_a_and_b_cg (sbitmap dst, sbitmap a, sbitmap b)
for (i = 0; i < n; i++)
{
SBITMAP_ELT_TYPE tmp = *ap++ & *bp++;
- changed = *dstp ^ tmp;
+ changed |= *dstp ^ tmp;
*dstp++ = tmp;
}
@@ -332,7 +339,7 @@ sbitmap_a_xor_b_cg (sbitmap dst, sbitmap a, sbitmap b)
for (i = 0; i < n; i++)
{
SBITMAP_ELT_TYPE tmp = *ap++ ^ *bp++;
- changed = *dstp ^ tmp;
+ changed |= *dstp ^ tmp;
*dstp++ = tmp;
}
@@ -366,7 +373,7 @@ sbitmap_a_or_b_cg (sbitmap dst, sbitmap a, sbitmap b)
for (i = 0; i < n; i++)
{
SBITMAP_ELT_TYPE tmp = *ap++ | *bp++;
- changed = *dstp ^ tmp;
+ changed |= *dstp ^ tmp;
*dstp++ = tmp;
}