OSDN Git Service

Codegen signed divides by 2 and -2 more efficiently. In particular
authorChris Lattner <sabre@nondot.org>
Wed, 6 Oct 2004 04:02:39 +0000 (04:02 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 6 Oct 2004 04:02:39 +0000 (04:02 +0000)
commit610f1e2785d7278175ed6c332840756e20bc1142
tree7284ee3a8f0f5f46bd77253f106df489e63bcb64
parentd93d3b047cad68de985d413d2cad953ac758d2a7
Codegen signed divides by 2 and -2 more efficiently.  In particular
instead of:

s:   ;; X / 2
        movl 4(%esp), %eax
        movl %eax, %ecx
        shrl $31, %ecx
        movl %eax, %edx
        addl %ecx, %edx
        sarl $1, %eax
        ret

t:   ;; X / -2
        movl 4(%esp), %eax
        movl %eax, %ecx
        shrl $31, %ecx
        movl %eax, %edx
        addl %ecx, %edx
        sarl $1, %eax
        negl %eax
        ret

Emit:

s:
        movl 4(%esp), %eax
        cmpl $-2147483648, %eax
        sbbl $-1, %eax
        sarl $1, %eax
        ret

t:
        movl 4(%esp), %eax
        cmpl $-2147483648, %eax
        sbbl $-1, %eax
        sarl $1, %eax
        negl %eax
        ret

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16760 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelSimple.cpp