re PR tree-optimization/33860 (ICE in vectorizable_load, at tree-vect-transform.c:5503)

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
This commit is contained in:
Dorit Nuzman 2007-10-23 19:50:18 +00:00
parent d1ed933d78
commit 68cba9eee7
5 changed files with 68 additions and 0 deletions

View 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.

View 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>

View File

@ -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" } } */

View File

@ -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" } } */

View 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);