diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/combine.c | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5878fe94ffd..3e3e3b7243f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-04-10 Chung-Ju Wu <jasonwucj@gmail.com> + + * combine.c (simplify_compare_const): Use GET_MODE_MASK to filter out + unnecessary bits in the constant power of two case. + 2013-04-10 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_get_and_check_slp_defs): Remove diff --git a/gcc/combine.c b/gcc/combine.c index feb6267b490..667b7b43c70 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -10759,8 +10759,9 @@ simplify_compare_const (enum rtx_code code, rtx op0, rtx *pop1) && (code == EQ || code == NE || code == GE || code == GEU || code == LT || code == LTU) && mode_width <= HOST_BITS_PER_WIDE_INT - && exact_log2 (const_op) >= 0 - && nonzero_bits (op0, mode) == (unsigned HOST_WIDE_INT) const_op) + && exact_log2 (const_op & GET_MODE_MASK (mode)) >= 0 + && (nonzero_bits (op0, mode) + == (unsigned HOST_WIDE_INT) (const_op & GET_MODE_MASK (mode)))) { code = (code == EQ || code == GE || code == GEU ? NE : EQ); const_op = 0; |

