https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61872
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |x86_64-*-*, i?86-*-* Status|ASSIGNED |NEW CC| |ebotcazou at gcc dot gnu.org Component|c++ |target Assignee|rguenth at gcc dot gnu.org |unassigned at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Err, not exactly mine but the issue is that we have (insn 6 5 7 (set (mem/c:DI (reg:DI 85) [0 MEM[(void *)&a]+0 S8 A128]) (const_int 0 [0])) t.c:5 -1 (nil)) (insn 7 6 0 (set (mem/c:DI (plus:DI (reg:DI 85) (const_int 8 [0x8])) [0 MEM[(void *)&a]+8 S8 A64]) (const_int 0 [0])) t.c:5 -1 (nil)) ... (insn 9 8 0 (set (mem/c:XF (plus:DI (reg/f:DI 78 virtual-stack-vars) (const_int -16 [0xfffffffffffffff0])) [0 a+0 S16 A128]) (float_extend:XF (reg:SF 86))) t.c:6 -1 (nil)) but the actual store via fstpt is _not_ 16 bytes. Thus the XFmode store for some reason got a MEM_SIZE of 16. And RTL DSE only looks at MEM_SIZE. And even the default mode_mem_attrs[XFmode] have 16 bytes size. And mode_size[XFmode] is 16. But FRACTIONAL_FLOAT_MODE (XF, 80, 12, ieee_extended_intel_96_format); ?! Making target dependent for now.