llvm-6502/lib/CodeGen/SelectionDAG
Chris Lattner 0ea26ca45b Expand 64-bit shifts more optimally if we know that the high bit of the
shift amount is one or zero.  For example, for:

long long foo1(long long X, int C) {
  return X << (C|32);
}

long long foo2(long long X, int C) {
  return X << (C&~32);
}

we get:

_foo1:
        movb $31, %cl
        movl 4(%esp), %edx
        andb 12(%esp), %cl
        shll %cl, %edx
        xorl %eax, %eax
        ret
_foo2:
        movb $223, %cl
        movl 4(%esp), %eax
        movl 8(%esp), %edx
        andb 12(%esp), %cl
        shldl %cl, %eax, %edx
        shll %cl, %eax
        ret

instead of:

_foo1:
        subl $4, %esp
        movl %ebx, (%esp)
        movb $32, %bl
        movl 8(%esp), %eax
        movl 12(%esp), %edx
        movb %bl, %cl
        orb 16(%esp), %cl
        shldl %cl, %eax, %edx
        shll %cl, %eax
        xorl %ecx, %ecx
        testb %bl, %bl
        cmovne %eax, %edx
        cmovne %ecx, %eax
        movl (%esp), %ebx
        addl $4, %esp
        ret
_foo2:
        subl $4, %esp
        movl %ebx, (%esp)
        movb $223, %cl
        movl 8(%esp), %eax
        movl 12(%esp), %edx
        andb 16(%esp), %cl
        shldl %cl, %eax, %edx
        shll %cl, %eax
        xorl %ecx, %ecx
        xorb %bl, %bl
        testb %bl, %bl
        cmovne %eax, %edx
        cmovne %ecx, %eax
        movl (%esp), %ebx
        addl $4, %esp
        ret


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30506 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-20 03:38:48 +00:00
..
DAGCombiner.cpp Fold (X & C1) | (Y & C2) -> (X|Y) & C3 when possible. 2006-09-14 21:11:37 +00:00
LegalizeDAG.cpp Expand 64-bit shifts more optimally if we know that the high bit of the 2006-09-20 03:38:48 +00:00
Makefile For PR780: 2006-07-26 16:18:00 +00:00
ScheduleDAG.cpp Added support for machine specific constantpool values. These are useful for 2006-09-12 21:00:35 +00:00
ScheduleDAGList.cpp s|llvm/Support/Visibility.h|llvm/Support/Compiler.h| 2006-08-27 12:54:02 +00:00
ScheduleDAGRRList.cpp s|llvm/Support/Visibility.h|llvm/Support/Compiler.h| 2006-08-27 12:54:02 +00:00
ScheduleDAGSimple.cpp s|llvm/Support/Visibility.h|llvm/Support/Compiler.h| 2006-08-27 12:54:02 +00:00
SelectionDAG.cpp Fold extract_element(cst) to cst 2006-09-19 05:02:39 +00:00
SelectionDAGCSEMap.cpp Added support for machine specific constantpool values. These are useful for 2006-09-12 21:00:35 +00:00
SelectionDAGISel.cpp absolute addresses must match pointer size 2006-09-18 17:59:35 +00:00
SelectionDAGPrinter.cpp Added support for machine specific constantpool values. These are useful for 2006-09-12 21:00:35 +00:00
TargetLowering.cpp Change the default to 0, which means 'default'. 2006-09-05 17:39:15 +00:00