https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91198
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
The first issue to address is
t.c:4:20: note: Analyze phi: j_26 = PHI <j_10(8), 0(15)>
t.c:4:20: missed: reduction used in loop.
t.c:4:20: missed: Unknown def-use cycle pattern.
and then
t.c:4:20: note: mark relevant 5, live 0: _9 = .MASK_LOAD (_5, 32B, _33, 0.0);
t.c:4:20: note: vect_is_simple_use: operand j_26 = PHI <j_10(8), 0(15)>, type
of def: unknown
t.c:4:20: missed: Unsupported pattern.
t.c:6:14: missed: not vectorized: unsupported use in stmt.
t.c:4:20: missed: unexpected pattern.
t.c:4:20: note: ***** Analysis failed with vector mode V16SI
so the compress/expand address evolution and it's compute isn't yet supported.
A related testcase would just store the indices:
void expand(float const * __restrict__ input,
int * __restrict__ output,
int size)
{
float const threshold = 0.5;
int o = 0;
for (int i = 0; i < size; ++i)
{
if (input[i] < threshold)
{
output[i] = o;
o++;
}
}
}
that has just the unsupported "induction" and might be the "easiest" start
t2.c:7:23: note: Analyze phi: o_21 = PHI <o_6(8), 0(15)>
t2.c:7:23: missed: reduction used in loop.
t2.c:7:23: missed: Unknown def-use cycle pattern.