+2004-08-29 Richard Earnshaw <rearnsha@arm.com>
+
+ * flow.c (REVERSE_CONDEXEC_PREDICATES_P): Use the whole comparison, not
+ just the codes, call reversed_comparison_code ().
+ (ior_reg_cond): Update arguments to REVERSE_CONDEXEC_PREDICATES_P.
+ (not_reg_cond): Use reversed_comparison_code.
+ (and_reg_cond): Likewise.
+ * ifcvt.c (cond_exec_process_if_block): Likewise.
+ * doc/tm.texi (REVERSE_CONDEXEC_PREDICATES_P): Update documentation.
+
2004-08-29 Richard Earnshaw <rearnsha@arm.com>
* sched-deps.c (get_condition): Rewrite using jump support functions.
@end smallexample
@end defmac
-@defmac REVERSE_CONDEXEC_PREDICATES_P (@var{code1}, @var{code2})
+@defmac REVERSE_CONDEXEC_PREDICATES_P (@var{op1}, @var{op2})
A C expression that returns true if the conditional execution predicate
-@var{code1} is the inverse of @var{code2} and vice versa. Define this to
-return 0 if the target has conditional execution predicates that cannot be
-reversed safely. If no expansion is specified, this macro is defined as
-follows:
+@var{op1}, a comparison operation, is the inverse of @var{op2} and vice
+versa. Define this to return 0 if the target has conditional execution
+predicates that cannot be reversed safely. There is no need to validate
+that the arguments of op1 and op2 are the same, this is done separately.
+If no expansion is specified, this macro is defined as follows:
@smallexample
#define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
- ((x) == reverse_condition (y))
+ (GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
@end smallexample
@end defmac
#ifdef HAVE_conditional_execution
#ifndef REVERSE_CONDEXEC_PREDICATES_P
-#define REVERSE_CONDEXEC_PREDICATES_P(x, y) ((x) == reverse_condition (y))
+#define REVERSE_CONDEXEC_PREDICATES_P(x, y) \
+ (GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
#endif
#endif
if (COMPARISON_P (old))
{
if (COMPARISON_P (x)
- && REVERSE_CONDEXEC_PREDICATES_P (GET_CODE (x), GET_CODE (old))
+ && REVERSE_CONDEXEC_PREDICATES_P (x, old)
&& REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
return const1_rtx;
if (GET_CODE (x) == GET_CODE (old)
static rtx
not_reg_cond (rtx x)
{
- enum rtx_code x_code;
-
if (x == const0_rtx)
return const1_rtx;
else if (x == const1_rtx)
return const0_rtx;
- x_code = GET_CODE (x);
- if (x_code == NOT)
+ if (GET_CODE (x) == NOT)
return XEXP (x, 0);
if (COMPARISON_P (x)
&& REG_P (XEXP (x, 0)))
if (XEXP (x, 1) != const0_rtx)
abort ();
- return gen_rtx_fmt_ee (reverse_condition (x_code),
+ return gen_rtx_fmt_ee (reversed_comparison_code (x, NULL),
VOIDmode, XEXP (x, 0), const0_rtx);
}
return gen_rtx_NOT (0, x);
if (COMPARISON_P (old))
{
if (COMPARISON_P (x)
- && GET_CODE (x) == reverse_condition (GET_CODE (old))
+ && GET_CODE (x) == reversed_comparison_code (old, NULL)
&& REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
return const0_rtx;
if (GET_CODE (x) == GET_CODE (old)
{
rtx start, end;
rtx t, f;
+ enum rtx_code f_code;
bb = block_fallthru (bb);
start = first_active_insn (bb);
if (! t)
goto fail;
- f = gen_rtx_fmt_ee (reverse_condition (GET_CODE (t)),
- GET_MODE (t),
- XEXP (t, 0),
- XEXP (t, 1));
+ f_code = reversed_comparison_code (t, BB_END (bb));
+ if (f_code == UNKNOWN)
+ goto fail;
+ f = gen_rtx_fmt_ee (f_code, GET_MODE (t), XEXP (t, 0), XEXP (t, 1));
if (ce_info->and_and_p)
{
t = gen_rtx_AND (GET_MODE (t), true_expr, t);