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?