Ideally the CLR takes care of that (it's in Microsoft's own interest to have it create good native code)
I don't mean to translate "mov eax, ecx" to the CLR bytecodes of "ecx = eax;", but targetting CLR as kind of a CPU in its own right (with whatever capabilities it has).