Why take Op as a non-const reference? I don't see it being modified so it is not an output operand AFAICT.
As far as I can tell, this is in a block that only sets let Predicates = [VSX]. It is not safe to use direct moves on subtargets that don't have direct moves.
Definitely bad. P7 doesn't have direct moves.
For this case, now we use one more instruction than the left ones. But I think it should still be a win as we don't use the stack which is always good for some opts, like leaf calls related optimizations. And now it uses fewer memory operations 2 vs 3.