summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/simplify-rtx.c19
2 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a53a42b4230..3c8be9ececb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-05-22 Richard Henderson <rth@cygnus.com>
+
+ * simplify-rtx.c (simplify_ternary_operation): Try to simplify
+ IF_THEN_ELSE to a setcc form.
+
2000-05-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* fixinc/inclhack.def (sun_malloc): Handle `calloc'.
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index af16f115cba..270371c371d 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -1963,6 +1963,25 @@ simplify_ternary_operation (code, mode, op0_mode, op0, op1, op2)
return op2;
else if (temp == const1_rtx)
return op1;
+ else if (temp)
+ op0 = temp;
+
+ /* Look for happy constants in op1 and op2. */
+ if (GET_CODE (op1) == CONST_INT && GET_CODE (op2) == CONST_INT)
+ {
+ HOST_WIDE_INT t = INTVAL (op1);
+ HOST_WIDE_INT f = INTVAL (op2);
+
+ if (t == STORE_FLAG_VALUE && f == 0)
+ code = GET_CODE (op0);
+ else if (t == 0 && f == STORE_FLAG_VALUE
+ && can_reverse_comparison_p (op0, NULL_RTX))
+ code = reverse_condition (GET_CODE (op0));
+ else
+ break;
+
+ return gen_rtx_fmt_ee (code, mode, XEXP (op0, 0), XEXP (op0, 1));
+ }
}
break;