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> 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 * rtlanal.c: Include target.h and output.h
(rtx_cost, address_cost, default_address_cost): Move from... (rtx_cost, address_cost, default_address_cost): Move from...
* cse.c (rtx_cost, address_cost, default_address_cost): * cse.c (rtx_cost, address_cost, default_address_cost):
......
...@@ -2559,9 +2559,10 @@ simplify_relational_operation (enum rtx_code code, enum machine_mode mode, ...@@ -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, 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. because it gives an incorrect result if the subtraction wraps around zero.
ANSI C defines unsigned operations such that they never overflow, and 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 (op0) == REG || GET_CODE (trueop0) == CONST_INT)
&& (GET_CODE (op1) == REG || GET_CODE (trueop1) == CONST_INT)) && (GET_CODE (op1) == REG || GET_CODE (trueop1) == CONST_INT))
&& 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1)) && 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