Add a couple more heuristics to neuter machine cse some more.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 10 Mar 2010 02:12:03 +0000 (02:12 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 10 Mar 2010 02:12:03 +0000 (02:12 +0000)
commit2938a00f29dae82e47bf4939bcc8d0ff734ef582
tree38d58bef9442d259be6ec0ce3f19e2b626c859d9
parent07a9641ebf420ae90aa3667ab4df83cd1ade2117
Add a couple more heuristics to neuter machine cse some more.

1. Be careful with cse "cheap" expressions. e.g. constant materialization. Only cse them when the common expression is local or in a direct predecessor. We don't want cse of cheap instruction causing other expressions to be spilled.
2. Watch out for the case where the expression doesn't itself uses a virtual register. e.g. lea of frame object. If the common expression itself is used by copies (common for passing addresses to function calls), don't perform the cse. Since these expressions do not use a register, it creates a live range but doesn't close any, we want to be very careful with increasing register pressure.

Note these are heuristics so machine cse doesn't make register allocator unhappy. Once we have proper live range splitting and re-materialization support in place, these should be evaluated again.

Now machine cse is almost always a win on llvm nightly tests on x86 and x86_64.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98121 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/MachineCSE.cpp