+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.
+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>
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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" } } */
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);