https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92190
--- Comment #12 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> --- Sorry, I was wrong in comment 10. I'd forgotten that the original point of all this was that, without the clobber, -fipa-ra would assume that the register isn't clobbered at all. The RA could then try to keep even a 256-bit value across a call. Something has to indicate that at least the upper bits of the register are clobbered. The choice of which registers we save and which we don't should be final after RA. So if we're trying to recompute that set later then perhaps the fix is to stop doing that. (In reply to Jakub Jelinek from comment #11) > Is CLOBBER the right representation of what vzeroupper does anyway? > I mean, for AVX512F+, shouldn't it be > (set (reg:V8DI xmm0) (vec_merge:V8DI (reg:V8DI xmm0) (const_vector:V8DI 0) > (const_int 3))) > ... > and similarly for AVX/AVX2 (in that case V4DI instead of V8DI)? We use clobbers for registers that aren't live at that point and sets for registers that are. Using sets unconditionally makes the register live on input and so leaves them upwards-exposed.