summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/LevelRaise.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-08-13 07:27:18 +0000
committerChris Lattner <sabre@nondot.org>2005-08-13 07:27:18 +0000
commit5949d49032fcb75ecf55fda8b9d37fd81232ddcc (patch)
tree09738b2958951546ed42cded96bd7b8de44f8e08 /llvm/lib/Transforms/LevelRaise.cpp
parentdc3154ec66d5534f98cf558652fd6c6e98e41a24 (diff)
downloadbcm5719-llvm-5949d49032fcb75ecf55fda8b9d37fd81232ddcc.tar.gz
bcm5719-llvm-5949d49032fcb75ecf55fda8b9d37fd81232ddcc.zip
Recursively scan scev expressions for common subexpressions. This allows us
to handle nested loops much better, for example, by being able to tell that these two expressions: {( 8 + ( 16 * ( 1 + %Tmp11 + %Tmp12)) + %c_),+,( 16 * %Tmp 12)}<loopentry.1> {(( 16 * ( 1 + %Tmp11 + %Tmp12)) + %c_),+,( 16 * %Tmp12)}<loopentry.1> Have the following common part that can be shared: {(( 16 * ( 1 + %Tmp11 + %Tmp12)) + %c_),+,( 16 * %Tmp12)}<loopentry.1> This allows us to codegen an important inner loop in 168.wupwise as: .LBB_foo_4: ; no_exit.1 lfd f2, 16(r9) fmul f3, f0, f2 fmul f2, f1, f2 fadd f4, f3, f2 stfd f4, 8(r9) fsub f2, f3, f2 stfd f2, 16(r9) addi r8, r8, 1 addi r9, r9, 16 cmpw cr0, r8, r4 ble .LBB_foo_4 ; no_exit.1 instead of: .LBB_foo_3: ; no_exit.1 lfdx f2, r6, r9 add r10, r6, r9 lfd f3, 8(r10) fmul f4, f1, f2 fmadd f4, f0, f3, f4 stfd f4, 8(r10) fmul f3, f1, f3 fmsub f2, f0, f2, f3 stfdx f2, r6, r9 addi r9, r9, 16 addi r8, r8, 1 cmpw cr0, r8, r4 ble .LBB_foo_3 ; no_exit.1 llvm-svn: 22781
Diffstat (limited to 'llvm/lib/Transforms/LevelRaise.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud