summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-18 21:40:29 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-18 21:40:29 +0000
commit620aadcf97defc2f2215574a420e1d60888c22b9 (patch)
treefa4695a1fac95ed4c12dda4bdb61642a7e102c3b
parent1acd6f55accc85ec31e24e237bc4e62910d9cc7a (diff)
downloadppe42-gcc-620aadcf97defc2f2215574a420e1d60888c22b9.tar.gz
ppe42-gcc-620aadcf97defc2f2215574a420e1d60888c22b9.zip
PR target/55562
* sbitmap.c (bitmap_and, bitmap_xor, bitmap_ior): Return whether dst sbitmap changed even if it doesn't have popcount. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194591 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/sbitmap.c36
2 files changed, 21 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 952c7e793e0..7b103fe89be 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-12-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/55562
+ * sbitmap.c (bitmap_and, bitmap_xor, bitmap_ior): Return whether
+ dst sbitmap changed even if it doesn't have popcount.
+
2012-12-18 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64.md (insv_imm<mode>): Add modes
diff --git a/gcc/sbitmap.c b/gcc/sbitmap.c
index b50c82e5e91..884c9a65738 100644
--- a/gcc/sbitmap.c
+++ b/gcc/sbitmap.c
@@ -434,28 +434,26 @@ bitmap_and (sbitmap dst, const_sbitmap a, const_sbitmap b)
const_sbitmap_ptr bp = b->elms;
bool has_popcount = dst->popcount != NULL;
unsigned char *popcountp = dst->popcount;
- bool anychange = false;
+ SBITMAP_ELT_TYPE changed = 0;
for (i = 0; i < n; i++)
{
const SBITMAP_ELT_TYPE tmp = *ap++ & *bp++;
+ SBITMAP_ELT_TYPE wordchanged = *dstp ^ tmp;
if (has_popcount)
{
- bool wordchanged = (*dstp ^ tmp) != 0;
if (wordchanged)
- {
- *popcountp = do_popcount (tmp);
- anychange = true;
- }
+ *popcountp = do_popcount (tmp);
popcountp++;
}
*dstp++ = tmp;
+ changed |= wordchanged;
}
#ifdef BITMAP_DEBUGGING
if (has_popcount)
sbitmap_verify_popcount (dst);
#endif
- return anychange;
+ return changed != 0;
}
/* Set DST to be (A xor B)).
@@ -470,28 +468,26 @@ bitmap_xor (sbitmap dst, const_sbitmap a, const_sbitmap b)
const_sbitmap_ptr bp = b->elms;
bool has_popcount = dst->popcount != NULL;
unsigned char *popcountp = dst->popcount;
- bool anychange = false;
+ SBITMAP_ELT_TYPE changed = 0;
for (i = 0; i < n; i++)
{
const SBITMAP_ELT_TYPE tmp = *ap++ ^ *bp++;
+ SBITMAP_ELT_TYPE wordchanged = *dstp ^ tmp;
if (has_popcount)
{
- bool wordchanged = (*dstp ^ tmp) != 0;
if (wordchanged)
- {
- *popcountp = do_popcount (tmp);
- anychange = true;
- }
+ *popcountp = do_popcount (tmp);
popcountp++;
}
*dstp++ = tmp;
+ changed |= wordchanged;
}
#ifdef BITMAP_DEBUGGING
if (has_popcount)
sbitmap_verify_popcount (dst);
#endif
- return anychange;
+ return changed != 0;
}
/* Set DST to be (A or B)).
@@ -506,28 +502,26 @@ bitmap_ior (sbitmap dst, const_sbitmap a, const_sbitmap b)
const_sbitmap_ptr bp = b->elms;
bool has_popcount = dst->popcount != NULL;
unsigned char *popcountp = dst->popcount;
- bool anychange = false;
+ SBITMAP_ELT_TYPE changed = 0;
for (i = 0; i < n; i++)
{
const SBITMAP_ELT_TYPE tmp = *ap++ | *bp++;
+ SBITMAP_ELT_TYPE wordchanged = *dstp ^ tmp;
if (has_popcount)
{
- bool wordchanged = (*dstp ^ tmp) != 0;
if (wordchanged)
- {
- *popcountp = do_popcount (tmp);
- anychange = true;
- }
+ *popcountp = do_popcount (tmp);
popcountp++;
}
*dstp++ = tmp;
+ changed |= wordchanged;
}
#ifdef BITMAP_DEBUGGING
if (has_popcount)
sbitmap_verify_popcount (dst);
#endif
- return anychange;
+ return changed != 0;
}
/* Return nonzero if A is a subset of B. */
OpenPOWER on IntegriCloud