https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61194
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #10)
> Created attachment 32805 [details]
> patch fixing the regression
>
> This would fix the regression (also without the previous patch?)
It does, on the 4.9 branch at least, for
static float x[1024];
static float y[1024];
static float z[1024];
static float w[1024];
static int k[1024];
void __attribute__((noinline,noclone)) barX()
{
int i;
for (i=0; i<1024; ++i)
{
k[i] = x[i]>0;
k[i] &= w[i]<y[i];
z[i] = (k[i]) ? z[i] : y[i];
}
}
but it doesn't change the outcome of the big testcase in the original report.
It does together with the other patch though:
> g++-4.9 t.C -Ofast -ftree-loop-if-convert-stores -fopt-info-vec -B. -fopenmp
t.C:11:5: note: loop vectorized
t.C:19:23: note: loop vectorized
t.C:24:5: note: loop vectorized
t.C:29:5: note: loop vectorized
t.C:35:5: note: loop vectorized
t.C:41:5: note: loop vectorized
t.C:47:5: note: loop vectorized
bar2 still not vectorized there.
But with 4.7 I see the same as with 4.8 and 4.9:
35: LOOP VECTORIZED.
41: LOOP VECTORIZED.
47: LOOP VECTORIZED.
so where exactly does the "regression" part appear for you? Is that only
for the code in comment#1?