summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-06 23:56:28 +0000
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-06 23:56:28 +0000
commitb3003238b9afd59336643098e278a06860af126b (patch)
treed99807e2dbeb0883a50f58e795079c5ca73dd4dc /gcc
parentded805e6c3cca686d517a87123a42b986baeae9a (diff)
downloadgcc-b3003238b9afd59336643098e278a06860af126b.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@175949 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/combine.c6
-rw-r--r--gcc/simplify-rtx.c4
3 files changed, 14 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6c4d352053a..9295bb4fcaa 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 <meissner@linux.vnet.ibm.com>
* config/rs6000/rs6000-protos.h (rs6000_call_indirect_aix): New
diff --git a/gcc/combine.c b/gcc/combine.c
index 787b0db9820..4dbf022fd1b 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 5a98b69abbc..82b818b02f1 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