From: Paolo Bonzini Date: Fri, 5 Mar 2004 10:41:27 +0000 (+0000) Subject: simplify-rtx.c (simplify_relational_operation): If flag_wrapv is set... X-Git-Tag: releases/gcc-4.0.0~9605 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d2782048a2d28004bbb2fca8aad5ced64774b638;p=thirdparty%2Fgcc.git simplify-rtx.c (simplify_relational_operation): If flag_wrapv is set... 2004-03-05 Paolo Bonzini * simplify-rtx.c (simplify_relational_operation): If flag_wrapv is set, do not move terms between the two side of a relational operator. From-SVN: r78962 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 00236182f837..723492a658a7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-03-05 Paolo Bonzini + + * simplify-rtx.c (simplify_relational_operation): If + flag_wrapv is set, do not move terms between the two + side of a relational operator. + 2004-03-05 Paolo Bonzini * rtlanal.c: Include target.h and output.h diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index bae37f870a2e..b86a8b214734 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -2559,9 +2559,10 @@ simplify_relational_operation (enum rtx_code code, enum machine_mode mode, If CODE is an unsigned comparison, then we can never do this optimization, because it gives an incorrect result if the subtraction wraps around zero. ANSI C defines unsigned operations such that they never overflow, and - thus such cases can not be ignored. */ + thus such cases can not be ignored; but we cannot do it even for + signed comparisons for languages such as Java, so test flag_wrapv. */ - if (INTEGRAL_MODE_P (mode) && trueop1 != const0_rtx + if (!flag_wrapv && INTEGRAL_MODE_P (mode) && trueop1 != const0_rtx && ! ((GET_CODE (op0) == REG || GET_CODE (trueop0) == CONST_INT) && (GET_CODE (op1) == REG || GET_CODE (trueop1) == CONST_INT)) && 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1))