]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/54862 (error: comparison between signed and unsigned integer express...
authorJakub Jelinek <jakub@redhat.com>
Wed, 10 Oct 2012 10:40:35 +0000 (12:40 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 10 Oct 2012 10:40:35 +0000 (12:40 +0200)
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

gcc/ChangeLog
gcc/simplify-rtx.c

index ab78559836e44bb182adee2facddf673d02d5587..72e19fcc60d2b12f061786ace5440ae81c2fdba8 100644 (file)
@@ -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
index 95cf1860af0114f8ee4482976b93a15586b4b421..cb63b80500e52296716644f208272b997e130f25 100644 (file)
@@ -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;