+2001-02-20 Aldy Hernandez <aldyh@redhat.com>
+
+ * tm.texi (REVERSE_CONDEXEC_PREDICATES_P): New macro documentation.
+
+ * flow.c (ior_reg_cond): Use REVERSE_CONDEXEC_PREDICATES_P macro.
+ (REVERSE_CONDEXEC_PREDICATES_P): Define macro.
+
2001-02-21 Jason Merrill <jason@redhat.com>
* tree.h (DECL_UNINLINABLE): Move from C++ frontend.
#define EPILOGUE_USES(REGNO) 0
#endif
+#ifdef HAVE_conditional_execution
+#ifndef REVERSE_CONDEXEC_PREDICATES_P
+#define REVERSE_CONDEXEC_PREDICATES_P(x, y) ((x) == reverse_condition (y))
+#endif
+#endif
+
/* The obstack on which the flow graph components are allocated. */
struct obstack flow_obstack;
if (GET_RTX_CLASS (GET_CODE (old)) == '<')
{
if (GET_RTX_CLASS (GET_CODE (x)) == '<'
- && GET_CODE (x) == reverse_condition (GET_CODE (old))
+ && REVERSE_CONDEXEC_PREDICATES_P (GET_CODE (x), GET_CODE (old))
&& REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0)))
return const1_rtx;
if (GET_CODE (x) == GET_CODE (old)
: reverse_condition_maybe_unordered (CODE))
@end smallexample
+@findex REVERSE_CONDEXEC_PREDICATES_P
+@item REVERSE_CONDEXEC_PREDICATES_P (@var{code1}, @var{code2})
+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 none is specified, this macro expands to:
+
+@smallexample
+#define REVERSE_CONDEXEC_PREDICATES_P (x, y) ((x) == reverse_condition (y))
+@end smallexample
+
@end table
@node Costs