diff options
author | Chris Lattner <sabre@nondot.org> | 2005-10-30 19:42:35 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-10-30 19:42:35 +0000 |
commit | bf209489ad3f7a38ce6b2159b22d8727500e60c2 (patch) | |
tree | bea0ea10cb942e50d803cf178dbb919fb49cd339 /docs/GettingStartedVS.html | |
parent | 65026a72ef4dceb2ccb813ebcf3cc55cbc55e26b (diff) | |
download | external_llvm-bf209489ad3f7a38ce6b2159b22d8727500e60c2.zip external_llvm-bf209489ad3f7a38ce6b2159b22d8727500e60c2.tar.gz external_llvm-bf209489ad3f7a38ce6b2159b22d8727500e60c2.tar.bz2 |
Significantly simplify this code and make it more aggressive. Instead of having
a special case hack for X86, make the hack more general: if an incoming argument
register is not used in any block other than the entry block, don't copy it to
a vreg. This helps us compile code like this:
%struct.foo = type { int, int, [0 x ubyte] }
int %test(%struct.foo* %X) {
%tmp1 = getelementptr %struct.foo* %X, int 0, uint 2, int 100
%tmp = load ubyte* %tmp1 ; <ubyte> [#uses=1]
%tmp2 = cast ubyte %tmp to int ; <int> [#uses=1]
ret int %tmp2
}
to:
_test:
lbz r3, 108(r3)
blr
instead of:
_test:
lbz r2, 108(r3)
or r3, r2, r2
blr
The (dead) copy emitted to copy r3 into a vreg for extra-block uses was
increasing the live range of r3 past the load, preventing the coallescing.
This implements CodeGen/PowerPC/reg-coallesce-simple.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24115 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/GettingStartedVS.html')
0 files changed, 0 insertions, 0 deletions