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 | f6ddc4a1deddc05e1310c338e46adf4f66eccf6b (patch) | |
tree | 9779371fe5b1fa914a647ff12ff5a8bae348b8dc /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | 7f6ae6958cbc208edff23a160a0a424fe386c070 (diff) | |
download | bcm5719-llvm-f6ddc4a1deddc05e1310c338e46adf4f66eccf6b.tar.gz bcm5719-llvm-f6ddc4a1deddc05e1310c338e46adf4f66eccf6b.zip |
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
llvm-svn: 122364
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
0 files changed, 0 insertions, 0 deletions