[Bug tree-optimization/57223] New: Auto-vectorization fails for nested multiple loops depending on type of array
snagavallis at outlook dot com
gcc-bugzilla@gcc.gnu.org
Thu May 9 05:04:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57223
Bug #: 57223
Summary: Auto-vectorization fails for nested multiple loops
depending on type of array
Classification: Unclassified
Product: gcc
Version: 4.7.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: snagavallis@outlook.com
The second nested loop in the following code is not auto-vectorized if test_t
is a floating point type.
void foo(test_t * d, int n)
{
int i, j, k;
for (k=0; k<n; ++k) {
for (i=0; i<n; ++i) {
test_t t;
for (j=0; j<k; ++j) {
t = d[i*n+k] + d[k*n+j];
d[i*n+j] = (d[i*n+j] < t) ? d[i*n+j] : t;
}
j = k;
t = d[i*n+k] + d[k*n+j];
d[i*n+j] = (d[i*n+j] < t) ? d[i*n+j] : t;
for (j=k+1; j<n; ++j) {
t = d[i*n+k] + d[k*n+j];
d[i*n+j] = (d[i*n+j] < t) ? d[i*n+j] : t;
}
}
}
}
However, the following seems to be auto-vectorized for all types.
void foo(test_t * d, int n)
{
int i, j, k;
for (k=0; k<n; ++k) {
for (i=0; i<n; ++i) {
for (j=0; j<k; ++j) {
test_t t = d[i*n+k] + d[k*n+j];
d[i*n+j] = (d[i*n+j] < t) ? d[i*n+j] : t;
}
for (j=k; j<n; ++j) {
test_t t = d[i*n+k] + d[k*n+j];
d[i*n+j] = (d[i*n+j] < t) ? d[i*n+j] : t;
}
}
}
}
More information about the Gcc-bugs
mailing list