https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80571
--- Comment #1 from Peter Cordes <peter at cordes dot ca> --- Tracking "cold" registers that are safe to use as a read-only source (whether or not they're holding a useful value like a constant) has a couple other applications for x86: * vcvtsi2ss/sd %src,%merge_into, %xmm destination * vsqrtss (mem),%merge_into, %xmm * vpcmpeqd %same,%same, %dest # false dep on KNL / Silvermont * vcmptrueps %same,%same, %ymm # splat -1 without AVX2. false dep on all known uarches * _mm_undefined_ps() Or before clobbering a dead reg, whether we can skip the xor-zeroing before: * any of the above without AVX, e.g. sqrtss %src, %dst * vpternlogd $0xff,any,any, src3/dst # zmm splat -1: false dep See https://bugs.llvm.org/show_bug.cgi?id=32863 for a more detailed writeup of this idea. ---- Current out-of-order execution designs always retire in-order, so a register is guaranteed to be ready if it hasn't been written in the last N instructions, where N is the out-of-order window size. (AKA ROB size, 224 on Skylake for example).