Add some x86 specific dagcombines for conditional increments.
authorBenjamin Kramer <benny.kra@googlemail.com>
Tue, 21 Dec 2010 21:41:44 +0000 (21:41 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Tue, 21 Dec 2010 21:41:44 +0000 (21:41 +0000)
commit7d6fe13efc9bcb69d3479e32f8eace933c5bd2d5
tree8e3b48a1680e05cc29278670c62f1acff1a15c31
parentaad94aa4375d5ed43be728e03d91751c102ff958
Add some x86 specific dagcombines for conditional increments.

(add Y, (sete  X, 0)) -> cmp X, 1; adc  0, Y
(add Y, (setne X, 0)) -> cmp X, 1; sbb -1, Y
(sub (sete  X, 0), Y) -> cmp X, 1; sbb  0, Y
(sub (setne X, 0), Y) -> cmp X, 1; adc -1, Y

for
  unsigned foo(unsigned a, unsigned b) {
    if (a == 0) b++;
    return b;
  }
we now get:
  foo:
    cmpl  $1, %edi
    movl  %esi, %eax
    adcl  $0, %eax
    ret
instead of:
  foo:
    testl %edi, %edi
    sete  %al
    movzbl  %al, %eax
    addl  %esi, %eax
    ret

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122364 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/conditional-indecrement.ll [new file with mode: 0644]