aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2009-07-31 02:38:13 +0000
committerSebastian Pop <spop@gcc.gnu.org>2009-07-31 02:38:13 +0000
commit765deab7d02db9c60b0851ce6448014548d89bfc (patch)
tree2b674e35bc8f607728c146ac395409f97ac81742 /gcc
parented91d6616c2342c560a71c3ca17248d1e52c364e (diff)
downloadgcc-765deab7d02db9c60b0851ce6448014548d89bfc.zip
gcc-765deab7d02db9c60b0851ce6448014548d89bfc.tar.gz
gcc-765deab7d02db9c60b0851ce6448014548d89bfc.tar.bz2
Make scev_is_linear_expression return false if the evolution is not affine multivariate.
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. From-SVN: r150298
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-chrec.c9
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c15abd7..2a06489 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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.
+
+2009-07-30 Sebastian Pop <sebastian.pop@amd.com>
+
* tree-data-ref.c (graphite_find_data_references_in_stmt): New.
* tree-data-ref.h (graphite_find_data_references_in_stmt): Declared.
diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c
index 7493504..caf7428 100644
--- a/gcc/tree-chrec.c
+++ b/gcc/tree-chrec.c
@@ -1411,7 +1411,7 @@ for_each_scev_op (tree *scev, bool (*cbck) (tree *, void *), void *data)
case 2:
for_each_scev_op (&TREE_OPERAND (*scev, 1), cbck, data);
-
+
case 1:
for_each_scev_op (&TREE_OPERAND (*scev, 0), cbck, data);
@@ -1438,6 +1438,7 @@ operator_is_linear (tree scev)
case NEGATE_EXPR:
case SSA_NAME:
case NON_LVALUE_EXPR:
+ case BIT_NOT_EXPR:
CASE_CONVERT:
return true;
@@ -1461,6 +1462,10 @@ scev_is_linear_expression (tree scev)
return !(tree_contains_chrecs (TREE_OPERAND (scev, 0), NULL)
&& tree_contains_chrecs (TREE_OPERAND (scev, 1), NULL));
+ if (TREE_CODE (scev) == POLYNOMIAL_CHREC
+ && !evolution_function_is_affine_multivariate_p (scev, CHREC_VARIABLE (scev)))
+ return false;
+
switch (TREE_CODE_LENGTH (TREE_CODE (scev)))
{
case 3:
@@ -1471,7 +1476,7 @@ scev_is_linear_expression (tree scev)
case 2:
return scev_is_linear_expression (TREE_OPERAND (scev, 0))
&& scev_is_linear_expression (TREE_OPERAND (scev, 1));
-
+
case 1:
return scev_is_linear_expression (TREE_OPERAND (scev, 0));