[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