summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>2005-03-21 14:38:01 +0000
committerbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>2005-03-21 14:38:01 +0000
commit0fc1e6fa55ab2c412298e947ef56fff54d256d8d (patch)
tree11d1dc2d20769a88c452555a826eb05acdb56978
parent4a4d48d5d8e969366d5109f5508b3bb53f0693a9 (diff)
downloadgcc-0fc1e6fa55ab2c412298e947ef56fff54d256d8d.tar.gz
2005-03-21 Paolo Bonzini <bonzini@gnu.org>
* combine.c (combine_simplify_rtx, simplify_if_then_else, simplify_logical, if_then_else_cond, known_cond, simplify_comparison): Adjust calls to reverse_comparison. Don't use combine_reversed_comparison_code). (combine_reversed_comparison_code): Remove. (reversed_comparison): Using reversed_comparison_code, move it... * jump.c (reversed_comparison): ... here. * rtl.h (reversed_comparison): Add prototype. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96801 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/combine.c72
-rw-r--r--gcc/jump.c14
-rw-r--r--gcc/rtl.h1
4 files changed, 40 insertions, 59 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7adad7cbcf3..429d32c4528 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2005-03-21 Paolo Bonzini <bonzini@gnu.org>
+
+ * combine.c (combine_simplify_rtx, simplify_if_then_else,
+ simplify_logical, if_then_else_cond, known_cond,
+ simplify_comparison): Adjust calls to reverse_comparison.
+ Don't use combine_reversed_comparison_code).
+ (combine_reversed_comparison_code): Remove.
+ (reversed_comparison): Using reversed_comparison_code, move it...
+ * jump.c (reversed_comparison): ... here.
+ * rtl.h (reversed_comparison): Add prototype.
+
2005-03-21 Kazu Hirata <kazu@cs.umass.edu>
* builtins.c (fold_builtin): Take decomposed arguments of
@@ -271,7 +282,6 @@
scale_bbs_frequencies_int.
* tree-ssa-loop-ch.c (copy_loop_headers): Fix profiling info.
->>>>>>> 2.7929
2005-03-18 Kazu Hirata <kazu@cs.umass.edu>
* config/m32r/m32r-protos.h: Remove the prototypes for
diff --git a/gcc/combine.c b/gcc/combine.c
index 87a2f8dc1cf..5981403eea9 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -413,8 +413,6 @@ static void distribute_links (rtx);
static void mark_used_regs_combine (rtx);
static int insn_cuid (rtx);
static void record_promoted_value (rtx, rtx);
-static rtx reversed_comparison (rtx, enum machine_mode, rtx, rtx);
-static enum rtx_code combine_reversed_comparison_code (rtx);
static int unmentioned_reg_p_1 (rtx *, void *);
static bool unmentioned_reg_p (rtx, rtx);
@@ -4377,9 +4375,7 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest)
if (COMPARISON_P (XEXP (x, 0))
&& ((STORE_FLAG_VALUE == -1 && XEXP (x, 1) == const1_rtx)
|| (STORE_FLAG_VALUE == 1 && XEXP (x, 1) == constm1_rtx))
- && (reversed = reversed_comparison (XEXP (x, 0), mode,
- XEXP (XEXP (x, 0), 0),
- XEXP (XEXP (x, 0), 1))))
+ && (reversed = reversed_comparison (XEXP (x, 0), mode)))
return
simplify_gen_unary (NEG, mode, reversed, mode);
@@ -4425,9 +4421,7 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest)
if (STORE_FLAG_VALUE == 1
&& XEXP (x, 0) == const1_rtx
&& COMPARISON_P (XEXP (x, 1))
- && (reversed = reversed_comparison (XEXP (x, 1), mode,
- XEXP (XEXP (x, 1), 0),
- XEXP (XEXP (x, 1), 1))))
+ && (reversed = reversed_comparison (XEXP (x, 1), mode)))
return reversed;
/* (minus <foo> (and <foo> (const_int -pow2))) becomes
@@ -4829,8 +4823,7 @@ simplify_if_then_else (rtx x)
/* Also when the truth value has to be reversed. */
if (comparison_p
&& true_rtx == const0_rtx && false_rtx == const_true_rtx
- && (reversed = reversed_comparison (cond, mode, XEXP (cond, 0),
- XEXP (cond, 1))))
+ && (reversed = reversed_comparison (cond, mode)))
return reversed;
/* Sometimes we can simplify the arm of an IF_THEN_ELSE if a register used
@@ -4838,7 +4831,7 @@ simplify_if_then_else (rtx x)
comparisons and see if that says anything about the value of each arm. */
if (comparison_p
- && ((false_code = combine_reversed_comparison_code (cond))
+ && ((false_code = reversed_comparison_code (cond, NULL))
!= UNKNOWN)
&& REG_P (XEXP (cond, 0)))
{
@@ -4896,7 +4889,7 @@ simplify_if_then_else (rtx x)
the false arm is more complicated than the true arm. */
if (comparison_p
- && combine_reversed_comparison_code (cond) != UNKNOWN
+ && reversed_comparison_code (cond, NULL) != UNKNOWN
&& (true_rtx == pc_rtx
|| (CONSTANT_P (true_rtx)
&& GET_CODE (false_rtx) != CONST_INT && false_rtx != pc_rtx)
@@ -4908,10 +4901,7 @@ simplify_if_then_else (rtx x)
|| rtx_equal_p (false_rtx, XEXP (cond, 0))))
{
true_code = reversed_comparison_code (cond, NULL);
- SUBST (XEXP (x, 0),
- reversed_comparison (cond, GET_MODE (cond), XEXP (cond, 0),
- XEXP (cond, 1)));
-
+ SUBST (XEXP (x, 0), reversed_comparison (cond, GET_MODE (cond)));
SUBST (XEXP (x, 1), false_rtx);
SUBST (XEXP (x, 2), true_rtx);
@@ -5710,8 +5700,7 @@ simplify_logical (rtx x)
if (STORE_FLAG_VALUE == 1
&& op1 == const1_rtx
&& COMPARISON_P (op0)
- && (reversed = reversed_comparison (op0, mode, XEXP (op0, 0),
- XEXP (op0, 1))))
+ && (reversed = reversed_comparison (op0, mode)))
return reversed;
/* (lshiftrt foo C) where C is the number of bits in FOO minus 1
@@ -5732,8 +5721,7 @@ simplify_logical (rtx x)
== (unsigned HOST_WIDE_INT) 1 << (GET_MODE_BITSIZE (mode) - 1))
&& op1 == const_true_rtx
&& COMPARISON_P (op0)
- && (reversed = reversed_comparison (op0, mode, XEXP (op0, 0),
- XEXP (op0, 1))))
+ && (reversed = reversed_comparison (op0, mode)))
return reversed;
break;
@@ -7505,11 +7493,11 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse)
if (COMPARISON_P (cond0)
&& COMPARISON_P (cond1)
- && ((GET_CODE (cond0) == combine_reversed_comparison_code (cond1)
+ && ((GET_CODE (cond0) == reversed_comparison_code (cond1, NULL)
&& rtx_equal_p (XEXP (cond0, 0), XEXP (cond1, 0))
&& rtx_equal_p (XEXP (cond0, 1), XEXP (cond1, 1)))
|| ((swap_condition (GET_CODE (cond0))
- == combine_reversed_comparison_code (cond1))
+ == reversed_comparison_code (cond1, NULL))
&& rtx_equal_p (XEXP (cond0, 0), XEXP (cond1, 1))
&& rtx_equal_p (XEXP (cond0, 1), XEXP (cond1, 0))))
&& ! side_effects_p (x))
@@ -7536,11 +7524,11 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse)
if (COMPARISON_P (cond0)
&& COMPARISON_P (cond1)
- && ((GET_CODE (cond0) == combine_reversed_comparison_code (cond1)
+ && ((GET_CODE (cond0) == reversed_comparison_code (cond1, NULL)
&& rtx_equal_p (XEXP (cond0, 0), XEXP (cond1, 0))
&& rtx_equal_p (XEXP (cond0, 1), XEXP (cond1, 1)))
|| ((swap_condition (GET_CODE (cond0))
- == combine_reversed_comparison_code (cond1))
+ == reversed_comparison_code (cond1, NULL))
&& rtx_equal_p (XEXP (cond0, 0), XEXP (cond1, 1))
&& rtx_equal_p (XEXP (cond0, 1), XEXP (cond1, 0))))
&& ! side_effects_p (x))
@@ -7685,7 +7673,7 @@ known_cond (rtx x, enum rtx_code cond, rtx reg, rtx val)
if (comparison_dominates_p (cond, code))
return const_true_rtx;
- code = combine_reversed_comparison_code (x);
+ code = reversed_comparison_code (x, NULL);
if (code != UNKNOWN
&& comparison_dominates_p (cond, code))
return const0_rtx;
@@ -10324,7 +10312,7 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
if (code == LT || code == NE)
new_code = GET_CODE (op0);
else
- new_code = combine_reversed_comparison_code (op0);
+ new_code = reversed_comparison_code (op0, NULL);
if (new_code != UNKNOWN)
{
@@ -10796,38 +10784,6 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
return code;
}
-/* Like jump.c' reversed_comparison_code, but use combine infrastructure for
- searching backward. */
-static enum rtx_code
-combine_reversed_comparison_code (rtx exp)
-{
- enum rtx_code code1 = reversed_comparison_code (exp, NULL);
- rtx x;
-
- if (code1 != UNKNOWN
- || GET_MODE_CLASS (GET_MODE (XEXP (exp, 0))) != MODE_CC)
- return code1;
- /* Otherwise try and find where the condition codes were last set and
- use that. */
- x = get_last_value (XEXP (exp, 0));
- if (!x || GET_CODE (x) != COMPARE)
- return UNKNOWN;
- return reversed_comparison_code_parts (GET_CODE (exp),
- XEXP (x, 0), XEXP (x, 1), NULL);
-}
-
-/* Return comparison with reversed code of EXP and operands OP0 and OP1.
- Return NULL_RTX in case we fail to do the reversal. */
-static rtx
-reversed_comparison (rtx exp, enum machine_mode mode, rtx op0, rtx op1)
-{
- enum rtx_code reversed_code = combine_reversed_comparison_code (exp);
- if (reversed_code == UNKNOWN)
- return NULL_RTX;
- else
- return simplify_gen_relational (reversed_code, mode, VOIDmode, op0, op1);
-}
-
/* Utility function for record_value_for_reg. Count number of
rtxs in X. */
static int
diff --git a/gcc/jump.c b/gcc/jump.c
index a120300fc09..dc81c521851 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -449,6 +449,20 @@ reversed_comparison_code (rtx comparison, rtx insn)
XEXP (comparison, 0),
XEXP (comparison, 1), insn);
}
+
+/* Return comparison with reversed code of EXP.
+ Return NULL_RTX in case we fail to do the reversal. */
+rtx
+reversed_comparison (rtx exp, enum machine_mode mode)
+{
+ enum rtx_code reversed_code = reversed_comparison_code (exp, NULL_RTX);
+ if (reversed_code == UNKNOWN)
+ return NULL_RTX;
+ else
+ return simplify_gen_relational (reversed_code, mode, VOIDmode,
+ XEXP (exp, 0), XEXP (exp, 1));
+}
+
/* Given an rtx-code for a comparison, return the code for the negated
comparison. If no such code exists, return UNKNOWN.
diff --git a/gcc/rtl.h b/gcc/rtl.h
index ba3277f6917..0d507ccba77 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1915,6 +1915,7 @@ extern int redirect_jump_1 (rtx, rtx);
extern void redirect_jump_2 (rtx, rtx, rtx, int, int);
extern int redirect_jump (rtx, rtx, int);
extern void rebuild_jump_labels (rtx);
+extern rtx reversed_comparison (rtx, enum machine_mode);
extern enum rtx_code reversed_comparison_code (rtx, rtx);
extern enum rtx_code reversed_comparison_code_parts (enum rtx_code,
rtx, rtx, rtx);