http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56175
--- Comment #2 from Uros Bizjak ubizjak at gmail dot com 2013-02-02 12:01:56
UTC ---
(In reply to comment #1)
Created attachment 29330 [details]
testcase
This test must be compiled with the following options:
-O2 -ffast-math -msse2 -mfpmath=sse -m32 -march=atom -mtune=atom
-ftree-loop-if-convert
Compiling attached test with above flags, I got:
foo:
movl4(%esp), %eax
movl8(%esp), %edx
testb %al, %al
je .L3
testw %dx, %dx
je .L3
shrb%al
shrw%dx
xorl%edx, %eax
andl$1, %eax
ret
.L3:
xorl%eax, %eax
ret
which looks the same as your optimal assembly in Description - maybe due to the
fact that the attached test source is the same as the source in Description.
BTW: This is probably the case of missing CSE in tree optimizers. Combine pass
is not powerful enough to figure out optimal sequence, it more-or-less blindly
combines various patterns.
Please provide the test that exposes this missing optimization.