https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82518

--- Comment #43 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Wilco from comment #42)
> Cut down example:
> 
> typedef struct { int x, y; } X;
> 
> void f (X *p, int n)
> {
>   for (int i = 0; i < n; i++)
>   { p[i].x = i;
>     p[i].y = i + 1;
>   }
> }

Can't reproduce your assembler with -O3 -mcpu=cortex-a9 -mfpu=neon-fp16
[-fno-vect-cost-model] [-mthumb]

Without -fno-vect-cost-model we don't vectorize anything.  With we only
SLP vectorize and that using V1SI vector types (huh).

For the loop case:

t.c:6:3: note: Build SLP for _3->x = i_15;
t.c:6:3: note: Build SLP for _3->y = _4;
t.c:6:3: note: vect_is_simple_use: operand i_15
t.c:6:3: note: def_stmt: i_15 = PHI <0(5), _4(6)>
t.c:6:3: note: type of def: induction
t.c:6:3: note: vect_is_simple_use: operand _4
t.c:6:3: note: def_stmt: _4 = i_15 + 1;
t.c:6:3: note: type of def: internal
t.c:6:3: note: Build SLP failed: different types

ok, known missed handling of SLP induction.

t.c:6:3: note: ==> examining statement: _3->x = i_15;
t.c:6:3: note: vect_is_simple_use: operand i_15
t.c:6:3: note: def_stmt: i_15 = PHI <0(5), _4(6)>
t.c:6:3: note: type of def: induction
t.c:6:3: note: no array mode for DI[2]
permutaion op not supported by target.

so we don't support intereaving either.  Not sure why it talks about DI[2]
instead of SI[2].

Reply via email to