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?

Reply via email to