OSDN Git Service

2005-03-25 Pat Haugen <pthaugen@us.ibm.com>
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Mar 2005 20:08:30 +0000 (20:08 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Mar 2005 20:08:30 +0000 (20:08 +0000)
        PR tree-optimization/20470
        * fold-const.c (fold_cond_expr_with_comparison): Recognize/fold
        ABS(x-y).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97062 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c

index 4a096a0..71e4822 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 d32172f..4ac921b 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: