implement Transforms/LoopStrengthReduce/dont-hoist-simple-loop-constants.ll.
authorChris Lattner <sabre@nondot.org>
Sat, 10 Sep 2005 01:18:45 +0000 (01:18 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 10 Sep 2005 01:18:45 +0000 (01:18 +0000)
commit7259df3ab862d378427cf96cd69d1bc69aa2e5cb
tree70af6869845571b4d8b5ff2d8c1453d9a9257b66
parentbe040812401b48ee2cb6886e5ffef448c38cf375
implement Transforms/LoopStrengthReduce/dont-hoist-simple-loop-constants.ll.

We used to emit this code for it:

_test:
        li r2, 1     ;; Value tying up a register for the whole loop
        li r5, 0
LBB_test_1:     ; no_exit.2
        or r6, r5, r5
        li r5, 0
        stw r5, 0(r3)
        addi r5, r6, 1
        addi r3, r3, 4
        add r7, r2, r5  ;; should be addi r7, r5, 1
        cmpwi cr0, r7, 701
        blt cr0, LBB_test_1     ; no_exit.2
LBB_test_2:     ; loopexit.2.loopexit
        addi r2, r6, 2
        stw r2, 0(r4)
        blr

now we emit this:

_test:
        li r2, 0
LBB_test_1:     ; no_exit.2
        or r5, r2, r2
        li r2, 0
        stw r2, 0(r3)
        addi r3, r3, 4
        addi r2, r5, 1
        addi r6, r5, 2   ;; whoa, fold those adds!
        cmpwi cr0, r6, 701
        blt cr0, LBB_test_1     ; no_exit.2
LBB_test_2:     ; loopexit.2.loopexit
        addi r2, r5, 2
        stw r2, 0(r4)
        blr

more improvement coming.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23306 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/LoopStrengthReduce.cpp