Fix a problem that Nate noticed that boils down to an over conservative check
authorChris Lattner <sabre@nondot.org>
Fri, 24 Feb 2006 18:05:58 +0000 (18:05 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 24 Feb 2006 18:05:58 +0000 (18:05 +0000)
commit97f37a439c8025ac1a7a3cdbc4cc8a0aa2c65cf2
treeec0b3c082d2a69e9a774056bc9cde609661f5777
parent6990600f93c212bd73623d523eb8f53ae0b6eee5
Fix a problem that Nate noticed that boils down to an over conservative check
in the code that does "select C, (X+Y), (X-Y) --> (X+(select C, Y, (-Y)))".
We now compile this loop:

LBB1_1: ; no_exit
        add r6, r2, r3
        subf r3, r2, r3
        cmpwi cr0, r2, 0
        addi r7, r5, 4
        lwz r2, 0(r5)
        addi r4, r4, 1
        blt cr0, LBB1_4 ; no_exit
LBB1_3: ; no_exit
        mr r3, r6
LBB1_4: ; no_exit
        cmpwi cr0, r4, 16
        mr r5, r7
        bne cr0, LBB1_1 ; no_exit

into this instead:

LBB1_1: ; no_exit
        srawi r6, r2, 31
        add r2, r2, r6
        xor r6, r2, r6
        addi r7, r5, 4
        lwz r2, 0(r5)
        addi r4, r4, 1
        add r3, r3, r6
        cmpwi cr0, r4, 16
        mr r5, r7
        bne cr0, LBB1_1 ; no_exit

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