The patch is to solve the problem mentioned in PR29154.
This pass tries to split the live ranges of params which are passed via hard registers and live across calls inside the function. The live range of such param could be split into two parts: The first part contains the copy from param passing register and will never live across call, so it gets the freedom to be allocated to any non-CSR (Callee-Saved-Register). The second part will live across calls and will only be allocated to CSR.
The benefit of doing the split is we may get a better chance to do shrinkwrap. Another benefit is param passing copy may be sinked from entry to a colder branch (The fact that copy from hardreg cannot be sinked by machine sinking pass makes this patch more meaningful).
We get 2% performance improvement for an internal protobuf benchmark (https://github.com/google/protobuf) on SandyBridge. I am getting more performance number using spec2000.