https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115397
Roger Sayle <roger at nextmovesoftware dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed| |2024-06-08 Assignee|unassigned at gcc dot gnu.org |roger at nextmovesoftware dot com Status|UNCONFIRMED |ASSIGNED --- Comment #4 from Roger Sayle <roger at nextmovesoftware dot com> --- Created attachment 58386 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58386&action=edit proposed patch This patch appears to fix (or more accurately workaround) the issue with this testcase. The (immediate) constant operand is: (const_vector:V8SI [ (const_int 1 [0x1]) repeated x8 ]) After the call to force_const_mem this becomes: (mem/u/c:V8SI (symbol_ref/u:SI ("*.LC1") [flags 0x2]) [0 S32 A256]) But after the call to validize_mem it becomes: (mem/u/c:V8SI (plus:SI (reg:SI 98) (const:SI (unspec:SI [ (symbol_ref/u:SI ("*.LC1") [flags 0x2]) ] UNSPEC_GOTOFF))) [0 S32 A256]) The call get_pool_constant (and ix86_broadcast_from_constant) can correctly handle the intermediate form, but not the "validized" MEM. Currently bootstrapping and regression testing...