Pull and through and/or/xor. This compiles some bitfield code to:
authorChris Lattner <sabre@nondot.org>
Fri, 5 May 2006 06:10:43 +0000 (06:10 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 5 May 2006 06:10:43 +0000 (06:10 +0000)
commita3dc3f692c2967dc9cfac6344c7216f62098feda
treef00aba1775a5ba9e712d02af4b72a121593e9ac4
parent5ffc066912ce4f5c32741c5e56dc28a8fe1dc050
Pull and through and/or/xor.  This compiles some bitfield code to:

        mov EAX, DWORD PTR [ESP + 4]
        mov ECX, DWORD PTR [EAX]
        mov EDX, ECX
        add EDX, EDX
        or EDX, ECX
        and EDX, -2147483648
        and ECX, 2147483647
        or EDX, ECX
        mov DWORD PTR [EAX], EDX
        ret

instead of:

        sub ESP, 4
        mov DWORD PTR [ESP], ESI
        mov EAX, DWORD PTR [ESP + 8]
        mov ECX, DWORD PTR [EAX]
        mov EDX, ECX
        add EDX, EDX
        mov ESI, ECX
        and ESI, -2147483648
        and EDX, -2147483648
        or EDX, ESI
        and ECX, 2147483647
        or EDX, ECX
        mov DWORD PTR [EAX], EDX
        mov ESI, DWORD PTR [ESP]
        add ESP, 4
        ret

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28122 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/DAGCombiner.cpp