https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102847
Kewen Lin <linkw at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
Last reconfirmed| |2021-10-21
Ever confirmed|0 |1
CC| |rguenth at gcc dot gnu.org
Resolution|DUPLICATE |---
--- Comment #4 from Kewen Lin <linkw at gcc dot gnu.org> ---
(In reply to seurer from comment #3)
> I reran my bisects on two different systems and both resolved to
>
> g:793d2549b173a0a2da6dd20ffc27acb9fd2de73e, r12-4501
>
> as when the builds started failing. r12-4500 worked on both systems.
Thanks! It makes more sense, I tried my local fix for PR102767 on a Power7 BE
machine yesterday, this issue still existed, seems not an actual dup. Some
relevant commits are r11-1945 and r11-6717.
In function get_load_store_type, we just simply assign the
alignment_support_scheme to dr_unaligned_supported for VMAT_INVARIANT, without
going through the check in vect_supportable_dr_alignment (including target hook
checks).
IIUC, VMAT_INVARIANT memory accesses will end up with scalar accesses, it looks
intentional, but it's unexpected for rs6000_builtin_vectorization_cost, as
function rs6000_builtin_support_vector_misalignment says it only allows
element_size 32 and 64 for misalignment -1. In this failure, it's V16QI (aka,
element_size 8).
Not sure if it's a good idea to change *alignment_support_scheme to dr_aligned
for VMAT_INVARIANT (also for strided)? Or force *misalignment to zero, then we
can distinguish this kind of special case in builtin_vectorization_cost hook to
avoid ICE?