Hi all! Currently GCC generates rather bad code for the following test case:
int test(int a)
{
return a % 2 != 0 ? 4 : 2;
}
The code looks like this:
test:
andl $1, %edi
cmpl $1, %edi
sbbl %eax, %eax
andl $-2, %eax
addl $4, %eax
ret
Clang seems to generate optimal code:
test:
andl $1, %edi
leal 2(%rdi,%rdi), %eax
retq
After applying this series of 2 patches GCC generates:
test:
movl %edi, %eax
andl $1, %eax
leal 2(%rax,%rax), %eax
ret
--
Regards,
Mikhail Maltsev
