Commit d2782048 by Paolo Bonzini Committed by Paolo Bonzini

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
parent f894b69b
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
(rtx_cost, address_cost, default_address_cost): Move from...
* cse.c (rtx_cost, address_cost, default_address_cost):
......
......@@ -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))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment