re PR tree-optimization/33860 (ICE in vectorizable_load, at tree-vect-transform.c...
authorDorit Nuzman <dorit@gcc.gnu.org>
Tue, 23 Oct 2007 19:50:18 +0000 (19:50 +0000)
committerDorit Nuzman <dorit@gcc.gnu.org>
Tue, 23 Oct 2007 19:50:18 +0000 (19:50 +0000)
        PR tree-optimization/33860
        * tree-vect-transform.c (vect_analyze_data_ref_access): Don't allow
        interleaved accesses in case the dr is inside the inner-loop during
        outer-loop vectorization.

From-SVN: r129587

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/vect/pr33860.cc [new file with mode: 0644]
gcc/testsuite/g++.dg/vect/pr33860a.cc [new file with mode: 0644]
gcc/tree-vect-analyze.c

index 9217faaa790e00cac99d50371e2f4465f884821b..a8d8a9f5a3a08c2eda76ca501e91cfc5fccb130c 100644 (file)
@@ -1,3 +1,10 @@
+2007-10-23  Dorit Nuzman  <dorit@il.ibm.com>
+
+       PR tree-optimization/33860
+       * tree-vect-transform.c (vect_analyze_data_ref_access): Don't allow
+       interleaved accesses in case the dr is inside the inner-loop during
+       outer-loop vectorization.
+
 2007-10-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * doc/rtl.texi (Flags): Fix MEM_SCALAR_P entry.
index 9a78b16afe158f45c0cf5f358c7a11c89637fbf1..a1bf668c44e3e1af1023d0e28f4d06255aa470ad 100644 (file)
@@ -1,3 +1,10 @@
+2007-10-23  Martin Michlmayr <tbm@cyrius.com>  
+           Dorit Nuzman  <dorit@il.ibm.com>
+
+       PR tree-optimization/33860
+       * g++.dg/vect/pr33860.cc: New test.
+       * g++.dg/vect/pr33860a.cc: New test.
+
 2007-10-23  Tehila Meyzels  <tehila@il.ibm.com>
            Revital Eres  <eres@il.ibm.com>      
 
diff --git a/gcc/testsuite/g++.dg/vect/pr33860.cc b/gcc/testsuite/g++.dg/vect/pr33860.cc
new file mode 100644 (file)
index 0000000..e70ec67
--- /dev/null
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* Testcase by Martin Michlmayr <tbm@cyrius.com> */
+
+class Matrix
+{
+  public:
+    double data[4][4];
+    Matrix operator* (const Matrix matrix) const;
+    void makeRotationAboutVector (void);
+};
+void Matrix::makeRotationAboutVector (void)
+{
+   Matrix irx;
+   *this = irx * (*this);
+}
+Matrix Matrix::operator* (const Matrix matrix) const
+{
+  Matrix ret;
+  for (int i = 0; i < 4; i++)
+    for (int j = 0; j < 4; j++)
+      ret.data[j][i] = matrix.data[j][2] + matrix.data[j][3];
+  return ret;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/g++.dg/vect/pr33860a.cc b/gcc/testsuite/g++.dg/vect/pr33860a.cc
new file mode 100644 (file)
index 0000000..a4f7bec
--- /dev/null
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* Testcase by Martin Michlmayr <tbm@cyrius.com> */
+
+class Matrix
+{
+  public:
+    float data[4][4] __attribute__ ((__aligned__(16)));
+    Matrix operator* (const Matrix matrix) const;
+    void makeRotationAboutVector (void);
+};
+void Matrix::makeRotationAboutVector (void)
+{
+   Matrix irx;
+   *this = irx * (*this);
+}
+Matrix Matrix::operator* (const Matrix matrix) const
+{
+  Matrix ret;
+  for (int i = 0; i < 4; i++)
+    for (int j = 0; j < 4; j++)
+      ret.data[j][i] = matrix.data[j][2] + matrix.data[j][3];
+  return ret;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
index b91fbc05bb97b1ad9adfe2e712e0aa6918f641fa..ff81f9d033f510293a42eab1900f9800c1c9819b 100644 (file)
@@ -2322,6 +2322,10 @@ vect_analyze_data_ref_access (struct data_reference *dr)
 
   if (nested_in_vect_loop_p (loop, stmt))
     {
+      /* Interleaved accesses are not yet supported within outer-loop
+        vectorization for references in the inner-loop.  */
+      DR_GROUP_FIRST_DR (vinfo_for_stmt (stmt)) = NULL_TREE;
+
       /* For the rest of the analysis we use the outer-loop step.  */
       step = STMT_VINFO_DR_STEP (stmt_info);
       dr_step = TREE_INT_CST_LOW (step);