I think that you do not want the register to coalesce to pass arguments from the virtual register to the register of arguments relative to the actual arguments of the function (or for formal arguments of the function, copied back to the function record) before the distribution of the register.
However, when you see such a move, you can mark the hint for the dispenser that the preferred choice is to move the register of target arguments. When the preferred choice does not intervene appropriately *, you can use it for distribution, as a result, after highlighting you will have move rx,rx , which you can easily eliminate later.
(Of course, you can find more than one such hint, so you can use the most suitable one, most (and often all) of them will be excluded from other hindrances: the same register is transferred to several calls; loop, etc.)
(* Correspondingly, it means that the register of the argument (real) is otherwise not used or broken during the life of the virtual register, for example, by a nested function call or some other. (Identifying this can be as simple as checking the interference of the virtual register.))
source share