https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122762
--- Comment #23 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
And if you want to see it in vectorization action, perhaps
#pragma omp declare simd simdlen(64) inbranch
char foo (char x);
#pragma omp declare simd simdlen(64) inbranch
short qux (short x);
#pragma omp declare simd simdlen(64) inbranch
int bar (int x);
#pragma omp declare simd simdlen(32) inbranch
long long baz (long long x);
char a[1024], b[1024];
void
xyzzy ()
{
for (int i = 0; i < 1024; ++i)
if (a[i])
b[i] = foo (b[i]);
}
short c[1024], d[1024];
void
fred ()
{
for (int i = 0; i < 1024; ++i)
if (c[i])
d[i] = qux (d[i]);
}
int e[1024], f[1024];
void
garply ()
{
for (int i = 0; i < 1024; ++i)
if (e[i])
f[i] = bar (f[i]);
}
long long g[1024], h[1024];
void
corge ()
{
for (int i = 0; i < 1024; ++i)
if (g[i])
h[i] = baz (h[i]);
}
-O3 -mavx512f I'd say.