diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5ca6e38e0f79169c1b70515d74824a1b8314f602..576d5f7d6816f81a1f2ea859a8900ca6da878b79 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-15  Richard Biener  <rguenther@suse.de>
+
+	* tree-loop-distribution.c (tree_loop_distribution): Make sure
+	to distribute all stores.
+
 2013-11-15  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
 
 	* doc/invoke.texi (-mabi=elfv1, -mabi=elfv2): Document.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d395e736da3298f93c636ce75e5712098dd6b4b7..ddfc46a9aa6f6fa10f849ece8fccc58466ebcf44 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-15  Richard Biener  <rguenther@suse.de>
+
+	* gcc.dg/torture/20131115-1.c: New testcase.
+
 2013-11-15  Joseph Myers  <joseph@codesourcery.com>
 
 	* gcc.dg/cpp/ucnid-9.c: New test.
diff --git a/gcc/testsuite/gcc.dg/torture/20131115-1.c b/gcc/testsuite/gcc.dg/torture/20131115-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..edb05f04c47b8e6e07a1a1c6e0016c6f0d5ed5a3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/20131115-1.c
@@ -0,0 +1,38 @@
+/* { dg-do run } */
+
+struct S { int i; };
+__attribute__((const, noinline, noclone))
+struct S foo (int x)
+{
+  struct S s;
+  s.i = x;
+  return s;
+}
+
+int a[2048], b[2048], c[2048], d[2048];
+struct S e[2048];
+
+__attribute__((noinline, noclone)) void
+bar (void)
+{
+  int i;
+  for (i = 0; i < 1024; i++)
+    {
+      e[i] = foo (i);
+      a[i+2] = a[i] + a[i+1];
+      b[10] = b[10] + i;
+      c[i] = c[2047 - i];
+      d[i] = d[i + 1];
+    }
+}
+
+int
+main ()
+{
+  int i;
+  bar ();
+  for (i = 0; i < 1024; i++)
+    if (e[i].i != i)
+      __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index 331af04b5feaf5f1ccba7547d933fbb76c477b52..075487726f47a033f783e9b653e36aaa34c9db44 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -1724,8 +1724,7 @@ tree_loop_distribution (void)
 	      if (stmt_has_scalar_dependences_outside_loop (loop, stmt))
 		;
 	      /* Otherwise only distribute stores for now.  */
-	      else if (!gimple_assign_single_p (stmt)
-		       || is_gimple_reg (gimple_assign_lhs (stmt)))
+	      else if (!gimple_vdef (stmt))
 		continue;
 
 	      work_list.safe_push (stmt);