diff options
author | Chris Lattner <sabre@nondot.org> | 2007-04-13 20:42:26 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-04-13 20:42:26 +0000 |
commit | efd3051d60ddf653ec9515b802687305ff5bbb38 (patch) | |
tree | 718a00b90f359d47ab67734f72ddcf3defeef5ab /llvm/test | |
parent | 03bf40e70ecbedc3bc5951f59cbb16a96923aefb (diff) | |
download | bcm5719-llvm-efd3051d60ddf653ec9515b802687305ff5bbb38.tar.gz bcm5719-llvm-efd3051d60ddf653ec9515b802687305ff5bbb38.zip |
Now that codegen prepare isn't defeating me, I can finally fix what I set
out to do! :)
This fixes a problem where LSR would insert a bunch of code into each MBB
that uses a particular subexpression (e.g. IV+base+C). The problem is that
this code cannot be CSE'd back together if inserted into different blocks.
This patch changes LSR to attempt to insert a single copy of this code and
share it, allowing codegenprepare to duplicate the code if it can be sunk
into various addressing modes. On CodeGen/ARM/lsr-code-insertion.ll,
for example, this gives us code like:
add r8, r0, r5
str r6, [r8, #+4]
..
ble LBB1_4 @cond_next
LBB1_3: @cond_true
str r10, [r8, #+4]
LBB1_4: @cond_next
...
LBB1_5: @cond_true55
ldr r6, LCPI1_1
str r6, [r8, #+4]
instead of:
add r10, r0, r6
str r8, [r10, #+4]
...
ble LBB1_4 @cond_next
LBB1_3: @cond_true
add r8, r0, r6
str r10, [r8, #+4]
LBB1_4: @cond_next
...
LBB1_5: @cond_true55
add r8, r0, r6
ldr r10, LCPI1_1
str r10, [r8, #+4]
Besides being smaller and more efficient, this makes it immediately
obvious that it is profitable to predicate LBB1_3 now :)
llvm-svn: 35972
Diffstat (limited to 'llvm/test')
0 files changed, 0 insertions, 0 deletions