diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-18 21:40:29 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-18 21:40:29 +0000 |
| commit | 620aadcf97defc2f2215574a420e1d60888c22b9 (patch) | |
| tree | fa4695a1fac95ed4c12dda4bdb61642a7e102c3b | |
| parent | 1acd6f55accc85ec31e24e237bc4e62910d9cc7a (diff) | |
| download | ppe42-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/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/sbitmap.c | 36 |
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. */ |

