mirror of git://gcc.gnu.org/git/gcc.git
combine.c (combine_simplify_rtx, [...]): Adjust calls to reverse_comparison.
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. From-SVN: r96801
This commit is contained in:
parent
49d1af8985
commit
14f02e7315
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
14
gcc/jump.c
14
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.
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue