diff options
author | Richard Sandiford <rsandifo@nildram.co.uk> | 2007-10-07 18:40:02 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2007-10-07 18:40:02 +0000 |
commit | cbc9503d788ea852d7821d1baf6711ee619492ee (patch) | |
tree | d068862ccb803da23231118cfebcfb111014f4bc /gcc/simplify-rtx.c | |
parent | ed540c0ab930daf080cfea8a07fd18b07c503842 (diff) | |
download | gcc-cbc9503d788ea852d7821d1baf6711ee619492ee.zip gcc-cbc9503d788ea852d7821d1baf6711ee619492ee.tar.gz gcc-cbc9503d788ea852d7821d1baf6711ee619492ee.tar.bz2 |
simplify-rtx.c (simplify_binary_operation_1): Canonicalize truncated shift counts.
gcc/
* simplify-rtx.c (simplify_binary_operation_1): Canonicalize
truncated shift counts.
From-SVN: r129072
Diffstat (limited to 'gcc/simplify-rtx.c')
-rw-r--r-- | gcc/simplify-rtx.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 8e02612..0371339 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -2562,6 +2562,13 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode, && (unsigned HOST_WIDE_INT) INTVAL (trueop0) == GET_MODE_MASK (mode) && ! side_effects_p (op1)) return op0; + canonicalize_shift: + if (SHIFT_COUNT_TRUNCATED && GET_CODE (op1) == CONST_INT) + { + val = INTVAL (op1) & (GET_MODE_BITSIZE (mode) - 1); + if (val != INTVAL (op1)) + return simplify_gen_binary (code, mode, op0, GEN_INT (val)); + } break; case ASHIFT: @@ -2571,7 +2578,7 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode, return op0; if (trueop0 == CONST0_RTX (mode) && ! side_effects_p (op1)) return op0; - break; + goto canonicalize_shift; case LSHIFTRT: if (trueop1 == CONST0_RTX (mode)) @@ -2593,7 +2600,7 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode, return simplify_gen_relational (EQ, mode, imode, XEXP (op0, 0), const0_rtx); } - break; + goto canonicalize_shift; case SMIN: if (width <= HOST_BITS_PER_WIDE_INT |