When possible, compilers do this renaming. But compilers are limited by the number of register inside the CPU. Many high performance CPUs have more physical registers than may be named directly in the instruction set and they can rename registers in hardware to achieve better instruction level parallelism.