diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2010-12-21 21:41:44 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2010-12-21 21:41:44 +0000 |
commit | 7d6fe13efc9bcb69d3479e32f8eace933c5bd2d5 (patch) | |
tree | 8e3b48a1680e05cc29278670c62f1acff1a15c31 /lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | aad94aa4375d5ed43be728e03d91751c102ff958 (diff) |
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
Diffstat (limited to 'lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
0 files changed, 0 insertions, 0 deletions