OSDN Git Service

Completely rewrite addressing-mode related sinking of code. In particular,
authorChris Lattner <sabre@nondot.org>
Fri, 13 Apr 2007 20:30:56 +0000 (20:30 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 13 Apr 2007 20:30:56 +0000 (20:30 +0000)
commitdd77df3cbc2301c14f56c9d2cfd412a032c27241
treed34ee5731f259c3347a31994478b6e15e343f0c7
parentd617d39f746549bb9f6891ef53aa34c9e1a67a70
Completely rewrite addressing-mode related sinking of code.  In particular,
this fixes problems where codegenprepare would sink expressions into load/stores
that are not valid, and fixes cases where it would miss important valid ones.

This fixes several serious codesize and perf issues, particularly on targets
with complex addressing modes like arm and x86.  For example, now we compile
CodeGen/X86/isel-sink.ll to:

_test:
        movl 8(%esp), %eax
        movl 4(%esp), %ecx
        cmpl $1233, %eax
        ja LBB1_2       #F
LBB1_1: #T
        movl $4, (%ecx,%eax,4)
        movl $141, %eax
        ret
LBB1_2: #F
        movl (%ecx,%eax,4), %eax
        ret

instead of:

_test:
        movl 8(%esp), %eax
        leal (,%eax,4), %ecx
        addl 4(%esp), %ecx
        cmpl $1233, %eax
        ja LBB1_2       #F
LBB1_1: #T
        movl $4, (%ecx)
        movl $141, %eax
        ret
LBB1_2: #F
        movl (%ecx), %eax
        ret

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