]> gcc.gnu.org Git - gcc.git/commitdiff
(simplify_relational_operation): Don't simplify A-B for
authorJim Wilson <wilson@gcc.gnu.org>
Sun, 2 Apr 1995 21:34:42 +0000 (14:34 -0700)
committerJim Wilson <wilson@gcc.gnu.org>
Sun, 2 Apr 1995 21:34:42 +0000 (14:34 -0700)
compare of A and B when the compare is unsigned.

From-SVN: r9296

gcc/cse.c

index 76f70e28c36b9715820e3bef6e303dbe7667dc91..7a0aba82ef121391d2841ca80fdd68355acab543 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -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
      prevent infinite recursion here and speed things up.
 
-     If CODE is an unsigned comparison, we can only do this if A - B is a
-     constant integer, and then we have to compare that integer with zero as a
-     signed comparison.  Note that this will give the incorrect result from
-     comparisons that overflow.  Since these are undefined, this is probably
-     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 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.  */
 
   if (INTEGRAL_MODE_P (mode) && op1 != const0_rtx
       && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == CONST_INT)
            && (GET_CODE (op1) == REG || GET_CODE (op1) == CONST_INT))
       && 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),
                                          mode, tem, const0_rtx);
 
This page took 0.080818 seconds and 5 git commands to generate.