[Bug target/92038] Extremely inefficient x86_64 code for trivally copyable types passed in registers.

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Oct 10 09:43:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92038

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #4)
> Store-merging sees:
>   MEM[(struct  &)&D.16119] ={v} {CLOBBER};
>   MEM[(struct _Uninitialized *)&D.16119] ={v} {CLOBBER};
>   MEM[(struct _Uninitialized *)&D.16119]._M_storage = 0;
>   MEM[(struct _Variant_storage *)&D.16119]._M_index = 0;
> so perhaps we could just add handling of clobbers to store-merging,
> similarly like we already handle = {} initializers; of course never remove
> the clobbers, but just assume that zeros (or anything else) can be stored in
> the bytes that actually weren't stored.

Ah, yeah - that sounds like a nice trick.  There may be cases where another
value besides zero is cheaper (-1 comes to my mind here), not sure if we
need to try optimize that.


More information about the Gcc-bugs mailing list