re PR tree-optimization/20470 (Branching sequence generated for ABS(x-y))
authorPat Haugen <pthaugen@us.ibm.com>
Fri, 25 Mar 2005 20:08:30 +0000 (20:08 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Fri, 25 Mar 2005 20:08:30 +0000 (15:08 -0500)
2005-03-25  Pat Haugen  <pthaugen@us.ibm.com>

        PR tree-optimization/20470
        * fold-const.c (fold_cond_expr_with_comparison): Recognize/fold
        ABS(x-y).

From-SVN: r97062

gcc/ChangeLog
gcc/fold-const.c

index 4a096a0b9d810525a94492c2aa8393df3c3300ff..71e4822bf089a54852554ca2cfafd889783c7f97 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-25  Pat Haugen  <pthaugen@us.ibm.com>
+
+       PR tree-optimization/20470
+       * fold-const.c (fold_cond_expr_with_comparison): Recognize/fold
+       ABS(x-y).
+
 2005-03-25  Mike Stump  <mrs@apple.com>
 
        * config/darwin.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Don't allow 0
index d32172f2453acb6e792b8a65cb05c7e8cc2eb9fc..4ac921b3a55b4353247470ae25fc5b4e4c92285a 100644 (file)
@@ -4187,8 +4187,16 @@ fold_cond_expr_with_comparison (tree type, tree arg0, tree arg1, tree arg2)
   if ((FLOAT_TYPE_P (TREE_TYPE (arg01))
        ? real_zerop (arg01)
        : integer_zerop (arg01))
-      && TREE_CODE (arg2) == NEGATE_EXPR
-      && operand_equal_p (TREE_OPERAND (arg2, 0), arg1, 0))
+      && ((TREE_CODE (arg2) == NEGATE_EXPR
+          && operand_equal_p (TREE_OPERAND (arg2, 0), arg1, 0))
+            /* In the case that A is of the form X-Y, '-A' (arg2) may
+               have already been folded to Y-X, check for that. */
+         || (TREE_CODE (arg1) == MINUS_EXPR
+             && TREE_CODE (arg2) == MINUS_EXPR
+             && operand_equal_p (TREE_OPERAND (arg1, 0),
+                                 TREE_OPERAND (arg2, 1), 0)
+             && operand_equal_p (TREE_OPERAND (arg1, 1),
+                                 TREE_OPERAND (arg2, 0), 0))))
     switch (comp_code)
       {
       case EQ_EXPR: