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].