https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31271
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
Known to work|4.7.1 |
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
We produce in 4.7.0+
in_canforward(unsigned int):
.LFB0:
.cfi_startproc
andl $224, %edi
xorl %eax, %eax
cmpl $224, %edi
setne %al
ret
That is:
D.2201_1 = in_2(D) & 224;
D.2199_10 = D.2201_1 != 224;
I think we could do slightly better
((~in_2(D)) & 224) == 0
But only at exand time.
This gives:
notl %edi
xorl %eax, %eax
testb $-32, %dil
setne %al
Or for aarch64:
mov w8, #224
bics wzr, w8, w0
cset w0, ne
ret