aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-10-10 12:40:35 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2012-10-10 12:40:35 +0200
commit0365ba7cd0e4c3800a7b3249455c7d9620325949 (patch)
tree66d7a0dd67554633acdf73f382f98b92c700e5a0 /gcc
parentf739e97a835efea413749d5505cd64fe1d0ad922 (diff)
downloadgcc-0365ba7cd0e4c3800a7b3249455c7d9620325949.zip
gcc-0365ba7cd0e4c3800a7b3249455c7d9620325949.tar.gz
gcc-0365ba7cd0e4c3800a7b3249455c7d9620325949.tar.bz2
re PR middle-end/54862 (error: comparison between signed and unsigned integer expressions in simplify-rtx.c)
PR middle-end/54862 * simplify-rtx.c (simplify_truncation): Compare UINTVAL instead of INTVAL of second argument with precision resp. op_precision. From-SVN: r192302
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/simplify-rtx.c9
2 files changed, 10 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ab78559..72e19fc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/54862
+ * simplify-rtx.c (simplify_truncation): Compare UINTVAL instead of
+ INTVAL of second argument with precision resp. op_precision.
+
2012-10-10 Dodji Seketeli <dodji@redhat.com>
PR middle-end/54860 - Make sure attributes hash table is created
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index 95cf186..cb63b80 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -668,7 +668,7 @@ simplify_truncation (enum machine_mode mode, rtx op,
&& CONST_INT_P (XEXP (op, 1))
&& GET_CODE (XEXP (op, 0)) == SIGN_EXTEND
&& GET_MODE (XEXP (XEXP (op, 0), 0)) == mode
- && INTVAL (XEXP (op, 1)) < precision)
+ && UINTVAL (XEXP (op, 1)) < precision)
return simplify_gen_binary (ASHIFTRT, mode,
XEXP (XEXP (op, 0), 0), XEXP (op, 1));
@@ -680,7 +680,7 @@ simplify_truncation (enum machine_mode mode, rtx op,
&& CONST_INT_P (XEXP (op, 1))
&& GET_CODE (XEXP (op, 0)) == ZERO_EXTEND
&& GET_MODE (XEXP (XEXP (op, 0), 0)) == mode
- && INTVAL (XEXP (op, 1)) < precision)
+ && UINTVAL (XEXP (op, 1)) < precision)
return simplify_gen_binary (LSHIFTRT, mode,
XEXP (XEXP (op, 0), 0), XEXP (op, 1));
@@ -692,7 +692,7 @@ simplify_truncation (enum machine_mode mode, rtx op,
&& (GET_CODE (XEXP (op, 0)) == ZERO_EXTEND
|| GET_CODE (XEXP (op, 0)) == SIGN_EXTEND)
&& GET_MODE (XEXP (XEXP (op, 0), 0)) == mode
- && INTVAL (XEXP (op, 1)) < precision)
+ && UINTVAL (XEXP (op, 1)) < precision)
return simplify_gen_binary (ASHIFT, mode,
XEXP (XEXP (op, 0), 0), XEXP (op, 1));
@@ -705,8 +705,7 @@ simplify_truncation (enum machine_mode mode, rtx op,
&& 2 * precision <= op_precision
&& CONST_INT_P (XEXP (op, 1))
&& (INTVAL (XEXP (op, 1)) & (precision - 1)) == 0
- && INTVAL (XEXP (op, 1)) >= 0
- && INTVAL (XEXP (op, 1)) < op_precision)
+ && UINTVAL (XEXP (op, 1)) < op_precision)
{
int byte = subreg_lowpart_offset (mode, op_mode);
int shifted_bytes = INTVAL (XEXP (op, 1)) / BITS_PER_UNIT;