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.  */