OSDN Git Service

2009-04-08 Paolo Bonzini <bonzini@gnu.org>
authorbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Apr 2009 15:18:49 +0000 (15:18 +0000)
committerbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Apr 2009 15:18:49 +0000 (15:18 +0000)
        * recog.c (ordered_comparison_operator): New.
        * gensupport.c (std_preds): Add it.
* doc/md.texi (Machine-Independent Predicates): Document it.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145748 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/doc/md.texi
gcc/gensupport.c
gcc/recog.c

index c6ec14d..7934933 100644 (file)
@@ -1,3 +1,9 @@
+2009-04-08  Paolo Bonzini  <bonzini@gnu.org>
+
+        * 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  <jh@suse.cz>
 
        * tree-eh.c (cleanup_eh): When not optimizing, do not try EH merging.
index 18a1a4d..25de8b1 100644 (file)
@@ -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
index 0851596..3c94863 100644 (file)
@@ -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,
index 70370e3..95f6e9a 100644 (file)
@@ -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.  */