From c6963675ebad4a3396521df8e49d558a04cf12b3 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 8 Apr 2009 15:18:49 +0000 Subject: [PATCH] recog.c (ordered_comparison_operator): New. 2009-04-08 Paolo Bonzini * recog.c (ordered_comparison_operator): New. * gensupport.c (std_preds): Add it. * doc/md.texi (Machine-Independent Predicates): Document it. From-SVN: r145748 --- gcc/ChangeLog | 6 ++++++ gcc/doc/md.texi | 10 +++++++++- gcc/gensupport.c | 3 +++ gcc/recog.c | 26 ++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c6ec14d3b41..7934933fb8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-04-08 Paolo Bonzini + + * recog.c (ordered_comparison_operator): New. + * gensupport.c (std_preds): Add it. + * doc/md.texi (Machine-Independent Predicates): Document it. + 2009-04-08 Jan Hubicka * tree-eh.c (cleanup_eh): When not optimizing, do not try EH merging. diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 18a1a4df27d..25de8b113e8 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -860,7 +860,7 @@ valid for @var{mode}. @end defun @noindent -Finally, there is one generic operator predicate. +Finally, there are two generic operator predicates. @defun comparison_operator This predicate matches any expression which performs an arithmetic @@ -868,6 +868,14 @@ comparison in @var{mode}; that is, @code{COMPARISON_P} is true for the expression code. @end defun +@defun ordered_comparison_operator +This predicate matches any expression which performs an arithmetic +comparison in @var{mode} and whose expression code is valid for integer +modes; that is, the expression code will be one of @code{eq}, @code{ne}, +@code{lt}, @code{ltu}, @code{le}, @code{leu}, @code{gt}, @code{gtu}, +@code{ge}, @code{geu}. +@end defun + @node Defining Predicates @subsection Defining Machine-Specific Predicates @cindex defining predicates diff --git a/gcc/gensupport.c b/gcc/gensupport.c index 0851596585b..3c94863e5fd 100644 --- a/gcc/gensupport.c +++ b/gcc/gensupport.c @@ -1367,6 +1367,9 @@ static const struct std_pred_table std_preds[] = { {"pop_operand", false, false, {MEM}}, {"memory_operand", false, false, {SUBREG, MEM}}, {"indirect_operand", false, false, {SUBREG, MEM}}, + {"ordered_comparison_operator", false, false, {EQ, NE, + LE, LT, GE, GT, + LEU, LTU, GEU, GTU}}, {"comparison_operator", false, false, {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU, diff --git a/gcc/recog.c b/gcc/recog.c index 70370e3ad81..95f6e9a0965 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -1319,6 +1319,32 @@ indirect_operand (rtx op, enum machine_mode mode) && general_operand (XEXP (op, 0), Pmode)); } +/* Return 1 if this is an ordered comparison operator (not including + ORDERED and UNORDERED). */ + +int +ordered_comparison_operator (rtx op, enum machine_mode mode) +{ + if (mode != VOIDmode && GET_MODE (op) != mode) + return false; + switch (GET_CODE (op)) + { + case EQ: + case NE: + case LT: + case LTU: + case LE: + case LEU: + case GT: + case GTU: + case GE: + case GEU: + return true; + default: + return false; + } +} + /* Return 1 if this is a comparison operator. This allows the use of MATCH_OPERATOR to recognize all the branch insns. */ -- 2.30.2