mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-30 07:14:09 +08:00
flow.c (REVERSE_CONDEXEC_PREDICATES_P): Use the whole comparison, not just the codes, call reversed_comparison_code ().
* 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. From-SVN: r86737
This commit is contained in:
parent
6903ecd491
commit
15dce8121c
@ -1,3 +1,13 @@
|
|||||||
|
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>
|
2004-08-29 Richard Earnshaw <rearnsha@arm.com>
|
||||||
|
|
||||||
* sched-deps.c (get_condition): Rewrite using jump support functions.
|
* sched-deps.c (get_condition): Rewrite using jump support functions.
|
||||||
|
@ -5240,16 +5240,17 @@ like:
|
|||||||
@end smallexample
|
@end smallexample
|
||||||
@end defmac
|
@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
|
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
|
@var{op1}, a comparison operation, is the inverse of @var{op2} and vice
|
||||||
return 0 if the target has conditional execution predicates that cannot be
|
versa. Define this to return 0 if the target has conditional execution
|
||||||
reversed safely. If no expansion is specified, this macro is defined as
|
predicates that cannot be reversed safely. There is no need to validate
|
||||||
follows:
|
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
|
@smallexample
|
||||||
#define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
|
#define REVERSE_CONDEXEC_PREDICATES_P (x, y) \
|
||||||
((x) == reverse_condition (y))
|
(GET_CODE ((x)) == reversed_comparison_code ((y), NULL))
|
||||||
@end smallexample
|
@end smallexample
|
||||||
@end defmac
|
@end defmac
|
||||||
|
|
||||||
|
14
gcc/flow.c
14
gcc/flow.c
@ -160,7 +160,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|||||||
|
|
||||||
#ifdef HAVE_conditional_execution
|
#ifdef HAVE_conditional_execution
|
||||||
#ifndef REVERSE_CONDEXEC_PREDICATES_P
|
#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
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -2996,7 +2997,7 @@ ior_reg_cond (rtx old, rtx x, int add)
|
|||||||
if (COMPARISON_P (old))
|
if (COMPARISON_P (old))
|
||||||
{
|
{
|
||||||
if (COMPARISON_P (x)
|
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)))
|
&& REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
|
||||||
return const1_rtx;
|
return const1_rtx;
|
||||||
if (GET_CODE (x) == GET_CODE (old)
|
if (GET_CODE (x) == GET_CODE (old)
|
||||||
@ -3079,14 +3080,11 @@ ior_reg_cond (rtx old, rtx x, int add)
|
|||||||
static rtx
|
static rtx
|
||||||
not_reg_cond (rtx x)
|
not_reg_cond (rtx x)
|
||||||
{
|
{
|
||||||
enum rtx_code x_code;
|
|
||||||
|
|
||||||
if (x == const0_rtx)
|
if (x == const0_rtx)
|
||||||
return const1_rtx;
|
return const1_rtx;
|
||||||
else if (x == const1_rtx)
|
else if (x == const1_rtx)
|
||||||
return const0_rtx;
|
return const0_rtx;
|
||||||
x_code = GET_CODE (x);
|
if (GET_CODE (x) == NOT)
|
||||||
if (x_code == NOT)
|
|
||||||
return XEXP (x, 0);
|
return XEXP (x, 0);
|
||||||
if (COMPARISON_P (x)
|
if (COMPARISON_P (x)
|
||||||
&& REG_P (XEXP (x, 0)))
|
&& REG_P (XEXP (x, 0)))
|
||||||
@ -3094,7 +3092,7 @@ not_reg_cond (rtx x)
|
|||||||
if (XEXP (x, 1) != const0_rtx)
|
if (XEXP (x, 1) != const0_rtx)
|
||||||
abort ();
|
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);
|
VOIDmode, XEXP (x, 0), const0_rtx);
|
||||||
}
|
}
|
||||||
return gen_rtx_NOT (0, x);
|
return gen_rtx_NOT (0, x);
|
||||||
@ -3108,7 +3106,7 @@ and_reg_cond (rtx old, rtx x, int add)
|
|||||||
if (COMPARISON_P (old))
|
if (COMPARISON_P (old))
|
||||||
{
|
{
|
||||||
if (COMPARISON_P (x)
|
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)))
|
&& REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
|
||||||
return const0_rtx;
|
return const0_rtx;
|
||||||
if (GET_CODE (x) == GET_CODE (old)
|
if (GET_CODE (x) == GET_CODE (old)
|
||||||
|
@ -491,6 +491,7 @@ cond_exec_process_if_block (ce_if_block_t * ce_info,
|
|||||||
{
|
{
|
||||||
rtx start, end;
|
rtx start, end;
|
||||||
rtx t, f;
|
rtx t, f;
|
||||||
|
enum rtx_code f_code;
|
||||||
|
|
||||||
bb = block_fallthru (bb);
|
bb = block_fallthru (bb);
|
||||||
start = first_active_insn (bb);
|
start = first_active_insn (bb);
|
||||||
@ -510,11 +511,11 @@ cond_exec_process_if_block (ce_if_block_t * ce_info,
|
|||||||
if (! t)
|
if (! t)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
f = gen_rtx_fmt_ee (reverse_condition (GET_CODE (t)),
|
f_code = reversed_comparison_code (t, BB_END (bb));
|
||||||
GET_MODE (t),
|
if (f_code == UNKNOWN)
|
||||||
XEXP (t, 0),
|
goto fail;
|
||||||
XEXP (t, 1));
|
|
||||||
|
|
||||||
|
f = gen_rtx_fmt_ee (f_code, GET_MODE (t), XEXP (t, 0), XEXP (t, 1));
|
||||||
if (ce_info->and_and_p)
|
if (ce_info->and_and_p)
|
||||||
{
|
{
|
||||||
t = gen_rtx_AND (GET_MODE (t), true_expr, t);
|
t = gen_rtx_AND (GET_MODE (t), true_expr, t);
|
||||||
|
Loading…
Reference in New Issue
Block a user