diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f2c9808a5990dd2e701c116d5560c0c957598038..5a3a71e3bfe0e361d1f63be0204c712cb2fb3d6a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-07-26 Sebastian Pop <sebastian.pop@amd.com> + + PR middle-end/47046 + * tree-chrec.h (evolution_function_is_affine_p): Recursively call + evolution_function_is_affine_p on CHREC_RIGHT. + 2011-07-26 Sebastian Pop <sebastian.pop@amd.com> * tree-data-ref.c (max_stmt_executions_tree): Do not call diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d1fc84f8cab427ba943c123a257c75f33a48168e..b201960d301d6b39614006aecc800a24869d0e62 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-07-26 Sebastian Pop <sebastian.pop@amd.com> + + PR middle-end/47046 + * gcc.dg/graphite/id-pr47046.c: New. + 2011-07-26 Sebastian Pop <sebastian.pop@amd.com> PR middle-end/47653 diff --git a/gcc/testsuite/gcc.dg/graphite/id-pr47046.c b/gcc/testsuite/gcc.dg/graphite/id-pr47046.c new file mode 100644 index 0000000000000000000000000000000000000000..aba38ed5e3260271f468b3b64e396940b311f227 --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/id-pr47046.c @@ -0,0 +1,13 @@ +void +init_movntdqa (int *src) +{ + int i, j, sign = 1; + + for (i = 0; i < 20; i++) + for (j = 0; j < 4; j++) + { + src[i * 4 + j] = j * i * i * sign; + sign = -sign; + } +} + diff --git a/gcc/tree-chrec.h b/gcc/tree-chrec.h index b9bf71e9d08ed747e0838b25c9eda864680866c5..9b971bde1afdc6cd113a443c940e2c492cd4a97d 100644 --- a/gcc/tree-chrec.h +++ b/gcc/tree-chrec.h @@ -205,7 +205,9 @@ evolution_function_is_affine_p (const_tree chrec) return chrec && TREE_CODE (chrec) == POLYNOMIAL_CHREC && evolution_function_is_invariant_p (CHREC_RIGHT (chrec), - CHREC_VARIABLE (chrec)); + CHREC_VARIABLE (chrec)) + && (TREE_CODE (CHREC_RIGHT (chrec)) != POLYNOMIAL_CHREC + || evolution_function_is_affine_p (CHREC_RIGHT (chrec))); } /* Determines whether EXPR does not contains chrec expressions. */