From: Jakub Jelinek Date: Wed, 10 Oct 2012 10:40:35 +0000 (+0200) Subject: re PR middle-end/54862 (error: comparison between signed and unsigned integer express... X-Git-Tag: misc/gccgo-go1_1_2~274 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0365ba7cd0e4c3800a7b3249455c7d9620325949;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ab78559836e4..72e19fcc60d2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-10-10 Jakub Jelinek + + 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 PR middle-end/54860 - Make sure attributes hash table is created diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 95cf1860af01..cb63b80500e5 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;