2005-03-16  Pat Haugen  <pthaugen@us.ibm.com>

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

Index: gcc/fold-const.c
===================================================================
RCS file: /cvsroot/gcc/gcc/gcc/fold-const.c,v
retrieving revision 1.542
diff -c -3 -p -r1.542 fold-const.c
*** gcc/fold-const.c	13 Mar 2005 22:34:03 -0000	1.542
--- gcc/fold-const.c	16 Mar 2005 16:00:26 -0000
*************** fold_cond_expr_with_comparison (tree typ
*** 4187,4194 ****
    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))
      switch (comp_code)
        {
        case EQ_EXPR:
--- 4187,4203 ----
    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))
! 	     /* 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)
! 	      && negate_expr_p(arg2))))
      switch (comp_code)
        {
        case EQ_EXPR:
