https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87902
--- Comment #3 from Ilya Leoshkevich <iii at linux dot ibm.com> --- Judging by the following comment in lra-coalesce.c, RA doesn't do this intentionally: Here we coalesce only spilled pseudos. Coalescing non-spilled pseudos (with different hard regs) might result in spilling additional pseudos because of possible conflicts with other non-spilled pseudos and, as a consequence, in more constraint passes and even LRA infinite cycling. Trivial the same hard register moves will be removed by subsequent compiler passes. In which cases would moving copies down in prepare_shrink_wrap () make the code worse?