diff options
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index e5c2052..e040b2a 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -10006,7 +10006,7 @@ fold_binary_loc (location_t loc, mode which allows further optimizations. */ int pop = wi::popcount (warg1); if (!(pop >= BITS_PER_UNIT - && exact_log2 (pop) != -1 + && pow2p_hwi (pop) && wi::mask (pop, false, warg1.get_precision ()) == warg1)) return fold_build2_loc (loc, code, type, op0, wide_int_to_tree (type, masked)); @@ -14252,7 +14252,7 @@ round_up_loc (location_t loc, tree value, unsigned int divisor) } /* If divisor is a power of two, simplify this to bit manipulation. */ - if (divisor == (divisor & -divisor)) + if (pow2_or_zerop (divisor)) { if (TREE_CODE (value) == INTEGER_CST) { @@ -14315,7 +14315,7 @@ round_down_loc (location_t loc, tree value, int divisor) } /* If divisor is a power of two, simplify this to bit manipulation. */ - if (divisor == (divisor & -divisor)) + if (pow2_or_zerop (divisor)) { tree t; |