https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121048
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Last reconfirmed| |2025-07-14
Status|UNCONFIRMED |NEW
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Robin Dapp from comment #2)
> Those zve32 tests often do single-element vectorization.
>
> In zve32f-1.c we don't vectorize
>
> void
> foo1 (int16_t *__restrict f, int32_t *__restrict d, int n)
> {
> for (int i = 0; i < n; ++i)
> {
> f[i * 2 + 0] = 1;
> f[i * 2 + 1] = 2;
> d[i] = 3;
> }
> }
>
> any more due to
>
> if (known_le (TYPE_VECTOR_SUBPARTS (stmt_vectype), 1U))
> return opt_result::failure_at (STMT_VINFO_STMT (stmt_info),
> "not vectorized: unsupported "
> "data-type in %G",
> STMT_VINFO_STMT (stmt_info));
>
> where we give up on the single-element store (but the load has two elements).
>
> Without having had a closer look, would we not only want to fail when all
> statements have known_le (..., 1U) rather than just one?
I guess yes, this then depends on "partial vectorization" being done via
having vector(1) for all stmts not vectorizable. Note there isn't a
convenient place to assess this when only doing SLP. But I'll think
of one. Note there is the opposite testsuite coverage to verify we
are not vectorizing a loop with only vector(1) types.