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.

Reply via email to