Skip to content
  • Chris Lattner's avatar
    Add a simple transformation. This allows us to compile one of the inner · 3d5d5022
    Chris Lattner authored
    loops in stepanov to this:
    
    .LBB_Z5test0PdS__2:     # no_exit.1
            fldl data(,%eax,8)
            fldl 24(%esp)
            faddp %st(1)
            fstl 24(%esp)
            incl %eax
            cmpl $2000, %eax
            fstpl 16(%esp)
            #FP_REG_KILL
            jl .LBB_Z5test0PdS__2
    
    instead of this:
    
    .LBB_Z5test0PdS__2:     # no_exit.1
            fldl data(,%eax,8)
            fldl 24(%esp)
            faddp %st(1)
            fstl 24(%esp)
            incl %eax
            movl $data, %ecx
            movl %ecx, %edx
            addl $16000, %edx
            subl %ecx, %edx
            movl %edx, %ecx
            sarl $2, %ecx
            shrl $29, %ecx
            addl %ecx, %edx
            sarl $3, %edx
            cmpl %edx, %eax
            fstpl 16(%esp)
            #FP_REG_KILL
            jl .LBB_Z5test0PdS__2
    
    The old instruction selector produced:
    
    .LBB_Z5test0PdS__2:     # no_exit.1
            fldl 24(%esp)
            faddl data(,%eax,8)
            fstl 24(%esp)
            movl %eax, %ecx
            incl %ecx
            incl %eax
            leal data+16000, %edx
            movl $data, %edi
            subl %edi, %edx
            movl %edx, %edi
            sarl $2, %edi
            shrl $29, %edi
            addl %edi, %edx
            sarl $3, %edx
            cmpl %edx, %ecx
            fstpl 16(%esp)
            #FP_REG_KILL
            jl .LBB_Z5test0PdS__2   # no_exit.1
    
    Which is even worse!
    
    llvm-svn: 19419
    3d5d5022
Loading