From e7c705bbbdc98ccb45cb953582f8964cfa3de61e Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Fri, 31 Jul 2009 02:39:06 +0000 Subject: [PATCH] Implement evolution_function_right_is_integer_cst. 2009-07-30 Sebastian Pop * tree-chrec.c (evolution_function_right_is_integer_cst): New. * tree-chrec.h (evolution_function_right_is_integer_cst): Declared. From-SVN: r150299 --- gcc/ChangeLog | 5 +++++ gcc/tree-chrec.c | 30 ++++++++++++++++++++++++++++++ gcc/tree-chrec.h | 1 + 3 files changed, 36 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a06489a083..7bb289a058c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-07-30 Sebastian Pop + + * 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 * tree-chrec.c (operator_is_linear): Handle BIT_NOT_EXPR. diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c index caf7428dc4e..33d9f18c099 100644 --- a/gcc/tree-chrec.c +++ b/gcc/tree-chrec.c @@ -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; + } +} + diff --git a/gcc/tree-chrec.h b/gcc/tree-chrec.h index db45eedc595..f21aa74d795 100644 --- a/gcc/tree-chrec.h +++ b/gcc/tree-chrec.h @@ -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. */ -- 2.30.2