DAGCombine add (sext i1), X into sub X, (zext i1) if sext from i1 is illegal. The...
authorBenjamin Kramer <benny.kra@googlemail.com>
Wed, 22 Dec 2010 23:17:45 +0000 (23:17 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Wed, 22 Dec 2010 23:17:45 +0000 (23:17 +0000)
commitf50125ecaab0cc379892280de33f0a2d387f7f5b
tree0d93b7f2f1e721b6081b3c140a773ae14aded3ef
parent4ac19470dc26decba85f5bf4dd7e6edb54d77152
DAGCombine add (sext i1), X into sub X, (zext i1) if sext from i1 is illegal.  The latter usually compiles into smaller code.

example code:
unsigned foo(unsigned x, unsigned y) {
  if (x != 0) y--;
  return y;
}

before:
  _foo:                           ## @foo
    cmpl  $1, 4(%esp)             ## encoding: [0x83,0x7c,0x24,0x04,0x01]
    sbbl  %eax, %eax              ## encoding: [0x19,0xc0]
    notl  %eax                    ## encoding: [0xf7,0xd0]
    addl  8(%esp), %eax           ## encoding: [0x03,0x44,0x24,0x08]
    ret                           ## encoding: [0xc3]

after:
  _foo:                           ## @foo
    cmpl  $1, 4(%esp)             ## encoding: [0x83,0x7c,0x24,0x04,0x01]
    movl  8(%esp), %eax           ## encoding: [0x8b,0x44,0x24,0x08]
    adcl  $-1, %eax               ## encoding: [0x83,0xd0,0xff]
    ret                           ## encoding: [0xc3]

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