OSDN Git Service

Implement evolution_function_right_is_integer_cst.
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 31 Jul 2009 02:39:06 +0000 (02:39 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 31 Jul 2009 02:39:06 +0000 (02:39 +0000)
2009-07-30  Sebastian Pop  <sebastian.pop@amd.com>

* tree-chrec.c (evolution_function_right_is_integer_cst): New.
* tree-chrec.h (evolution_function_right_is_integer_cst): Declared.

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

gcc/ChangeLog
gcc/tree-chrec.c
gcc/tree-chrec.h

index 2a06489..7bb289a 100644 (file)
@@ -1,5 +1,10 @@
 2009-07-30  Sebastian Pop  <sebastian.pop@amd.com>
 
+       * tree-chrec.c (evolution_function_right_is_integer_cst): New.
+       * tree-chrec.h (evolution_function_right_is_integer_cst): Declared.
+
+2009-07-30  Sebastian Pop  <sebastian.pop@amd.com>
+
        * tree-chrec.c (operator_is_linear): Handle BIT_NOT_EXPR.
        (scev_is_linear_expression): Return false if the evolution is not
        affine multivariate.
index caf7428..33d9f18 100644 (file)
@@ -1487,3 +1487,33 @@ scev_is_linear_expression (tree scev)
       return false;
     }
 }
+
+/* Determines whether the expression CHREC contains only interger consts
+   in the right parts.  */
+
+bool
+evolution_function_right_is_integer_cst (const_tree chrec)
+{
+  if (chrec == NULL_TREE)
+    return false;
+
+  switch (TREE_CODE (chrec))
+    {
+    case INTEGER_CST:
+      return true;
+
+    case POLYNOMIAL_CHREC:
+      if (!evolution_function_right_is_integer_cst (CHREC_RIGHT (chrec)))
+       return false;
+
+      if (TREE_CODE (CHREC_LEFT (chrec)) == POLYNOMIAL_CHREC
+       && !evolution_function_right_is_integer_cst (CHREC_LEFT (chrec)))
+       return false;
+
+      return true;
+
+    default:
+      return false;
+    }
+}
+
index db45eed..f21aa74 100644 (file)
@@ -86,6 +86,7 @@ extern bool evolution_function_is_univariate_p (const_tree);
 extern unsigned nb_vars_in_chrec (tree);
 extern bool evolution_function_is_invariant_p (tree, int);
 extern bool scev_is_linear_expression (tree);
+extern bool evolution_function_right_is_integer_cst (const_tree);
 
 /* Determines whether CHREC is equal to zero.  */