Skip to content
  • Chris Lattner's avatar
    Completely rewrite addressing-mode related sinking of code. In particular, · feee64e9
    Chris Lattner authored
    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
    
    llvm-svn: 35970
    feee64e9
Loading