Commit 315d849a by Mostafa Hagog Committed by Roger Sayle

sbitmap.c (sbitmap_union_of_diff_cg, [...]): Accumulate "changed" properly.

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.

From-SVN: r75182
parent b8da67fa
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.
2003-12-27 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz> 2003-12-27 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
PR opt/13159 PR opt/13159
......
...@@ -250,9 +250,16 @@ sbitmap_not (sbitmap dst, sbitmap src) ...@@ -250,9 +250,16 @@ sbitmap_not (sbitmap dst, sbitmap src)
unsigned int i, n = dst->size; unsigned int i, n = dst->size;
sbitmap_ptr dstp = dst->elms; sbitmap_ptr dstp = dst->elms;
sbitmap_ptr srcp = src->elms; sbitmap_ptr srcp = src->elms;
unsigned int last_bit;
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
*dstp++ = ~*srcp++; *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 /* 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) ...@@ -298,7 +305,7 @@ sbitmap_a_and_b_cg (sbitmap dst, sbitmap a, sbitmap b)
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
SBITMAP_ELT_TYPE tmp = *ap++ & *bp++; SBITMAP_ELT_TYPE tmp = *ap++ & *bp++;
changed = *dstp ^ tmp; changed |= *dstp ^ tmp;
*dstp++ = tmp; *dstp++ = tmp;
} }
...@@ -332,7 +339,7 @@ sbitmap_a_xor_b_cg (sbitmap dst, sbitmap a, sbitmap b) ...@@ -332,7 +339,7 @@ sbitmap_a_xor_b_cg (sbitmap dst, sbitmap a, sbitmap b)
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
SBITMAP_ELT_TYPE tmp = *ap++ ^ *bp++; SBITMAP_ELT_TYPE tmp = *ap++ ^ *bp++;
changed = *dstp ^ tmp; changed |= *dstp ^ tmp;
*dstp++ = tmp; *dstp++ = tmp;
} }
...@@ -366,7 +373,7 @@ sbitmap_a_or_b_cg (sbitmap dst, sbitmap a, sbitmap b) ...@@ -366,7 +373,7 @@ sbitmap_a_or_b_cg (sbitmap dst, sbitmap a, sbitmap b)
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
SBITMAP_ELT_TYPE tmp = *ap++ | *bp++; SBITMAP_ELT_TYPE tmp = *ap++ | *bp++;
changed = *dstp ^ tmp; changed |= *dstp ^ tmp;
*dstp++ = tmp; *dstp++ = tmp;
} }
......
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