From: Bernd Schmidt Date: Wed, 6 Jul 2011 23:56:28 +0000 (+0000) Subject: revert: simplify-rtx.c (simplify_const_binary_operation): Use the shift_truncation_ma... X-Git-Tag: releases/gcc-4.7.0~5563 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d58c1a38e5c0ce489f788694a079433dc4b2be61;p=thirdparty%2Fgcc.git revert: simplify-rtx.c (simplify_const_binary_operation): Use the shift_truncation_mask hook instead of performing modulo by width. Revert: * simplify-rtx.c (simplify_const_binary_operation): Use the shift_truncation_mask hook instead of performing modulo by width. Compare against mode precision, not bitsize. * combine.c (combine_simplify_rtx, simplify_shift_const_1): Use shift_truncation_mask instead of constructing the value manually. From-SVN: r175949 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c4d352053ae..9295bb4fcaa0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -44,6 +44,14 @@ simplify_comparison, record_promoted_value, simplify_compare_const, record_dead_and_set_regs_1): Likewise. + Revert: + * simplify-rtx.c (simplify_const_binary_operation): Use the + shift_truncation_mask hook instead of performing modulo by + width. Compare against mode precision, not bitsize. + * combine.c (combine_simplify_rtx, simplify_shift_const_1): + Use shift_truncation_mask instead of constructing the value + manually. + 2011-07-06 Michael Meissner * config/rs6000/rs6000-protos.h (rs6000_call_indirect_aix): New diff --git a/gcc/combine.c b/gcc/combine.c index 787b0db98208..4dbf022fd1be 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -5939,7 +5939,9 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest, else if (SHIFT_COUNT_TRUNCATED && !REG_P (XEXP (x, 1))) SUBST (XEXP (x, 1), force_to_mode (XEXP (x, 1), GET_MODE (XEXP (x, 1)), - targetm.shift_truncation_mask (GET_MODE (x)), + ((unsigned HOST_WIDE_INT) 1 + << exact_log2 (GET_MODE_BITSIZE (GET_MODE (x)))) + - 1, 0)); break; @@ -9875,7 +9877,7 @@ simplify_shift_const_1 (enum rtx_code code, enum machine_mode result_mode, want to do this inside the loop as it makes it more difficult to combine shifts. */ if (SHIFT_COUNT_TRUNCATED) - orig_count &= targetm.shift_truncation_mask (mode); + orig_count &= GET_MODE_BITSIZE (mode) - 1; /* If we were given an invalid count, don't do anything except exactly what was requested. */ diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 5a98b69abbc9..82b818b02f1c 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -3768,8 +3768,8 @@ simplify_const_binary_operation (enum rtx_code code, enum machine_mode mode, shift_truncation_mask, since the shift might not be part of an ashlM3, lshrM3 or ashrM3 instruction. */ if (SHIFT_COUNT_TRUNCATED) - arg1 &= targetm.shift_truncation_mask (mode); - else if (arg1 < 0 || arg1 >= GET_MODE_PRECISION (mode)) + arg1 = (unsigned HOST_WIDE_INT) arg1 % width; + else if (arg1 < 0 || arg1 >= GET_MODE_BITSIZE (mode)) return 0; val = (code == ASHIFT