summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>2004-08-29 22:10:44 +0000
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>2004-08-29 22:10:44 +0000
commit367dc0cdc359d5c2ee19a4d2f983f092d185f00e (patch)
treea4ec15aceec0b091ed501e69eca717c1e7b43626 /gcc
parentbbb82bbf2e7663e15d60b83225ae3e363c55c11d (diff)
downloadgcc-367dc0cdc359d5c2ee19a4d2f983f092d185f00e.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@86737 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/doc/tm.texi13
-rw-r--r--gcc/flow.c14
-rw-r--r--gcc/ifcvt.c9
4 files changed, 28 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7f0869775bc..e4134edff1f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,15 @@
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.
Use reversed_comparison_code.
(conditions_mutex_p): Use reversed_comparison_code.
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index b15cb53dec6..2a873985703 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -5240,16 +5240,17 @@ like:
@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
diff --git a/gcc/flow.c b/gcc/flow.c
index 3db96daf4ea..abbac675b80 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -160,7 +160,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#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
@@ -2996,7 +2997,7 @@ ior_reg_cond (rtx old, rtx x, int add)
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)
@@ -3079,14 +3080,11 @@ ior_reg_cond (rtx old, rtx x, int add)
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)))
@@ -3094,7 +3092,7 @@ not_reg_cond (rtx x)
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);
@@ -3108,7 +3106,7 @@ and_reg_cond (rtx old, rtx x, int add)
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)
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 7473054757f..0767eb25008 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -491,6 +491,7 @@ cond_exec_process_if_block (ce_if_block_t * ce_info,
{
rtx start, end;
rtx t, f;
+ enum rtx_code f_code;
bb = block_fallthru (bb);
start = first_active_insn (bb);
@@ -510,11 +511,11 @@ cond_exec_process_if_block (ce_if_block_t * ce_info,
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);