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: movl 4(%esp), %eax movl 8(%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.