Commit c27b5c62 by Jim Wilson

(simplify_relational_operation): Don't simplify A-B for

compare of A and B when the compare is unsigned.

From-SVN: r9296
parent e3124505
...@@ -4378,20 +4378,16 @@ simplify_relational_operation (code, mode, op0, op1) ...@@ -4378,20 +4378,16 @@ simplify_relational_operation (code, mode, op0, op1)
a register or a CONST_INT, this can't help; testing for these cases will a register or a CONST_INT, this can't help; testing for these cases will
prevent infinite recursion here and speed things up. prevent infinite recursion here and speed things up.
If CODE is an unsigned comparison, we can only do this if A - B is a If CODE is an unsigned comparison, then we can never do this optimization,
constant integer, and then we have to compare that integer with zero as a because it gives an incorrect result if the subtraction wraps around zero.
signed comparison. Note that this will give the incorrect result from ANSI C defines unsigned operations such that they never overflow, and
comparisons that overflow. Since these are undefined, this is probably thus such cases can not be ignored. */
OK. If it causes a problem, we can check for A or B being an address
(fp + const or SYMBOL_REF) and only do it in that case. */
if (INTEGRAL_MODE_P (mode) && op1 != const0_rtx if (INTEGRAL_MODE_P (mode) && op1 != const0_rtx
&& ! ((GET_CODE (op0) == REG || GET_CODE (op0) == CONST_INT) && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == CONST_INT)
&& (GET_CODE (op1) == REG || GET_CODE (op1) == CONST_INT)) && (GET_CODE (op1) == REG || GET_CODE (op1) == CONST_INT))
&& 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1)) && 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1))
&& (GET_CODE (tem) == CONST_INT && code != GTU && code != GEU && code != LTU && code != LEU)
|| (code != GTU && code != GEU &&
code != LTU && code != LEU)))
return simplify_relational_operation (signed_condition (code), return simplify_relational_operation (signed_condition (code),
mode, tem, const0_rtx); mode, tem, const0_rtx);
......
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