simplify-rtx.c (simplify_relational_operation): If flag_wrapv is set...
2004-03-05 Paolo Bonzini <bonzini@gnu.org> * 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
This commit is contained in:
parent
f894b69b75
commit
d2782048a2
2 changed files with 9 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2004-03-05 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
* 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 <bonzini@gnu.org>
|
||||
|
||||
* rtlanal.c: Include target.h and output.h
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue