http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59968
--- Comment #19 from H.J. Lu <hjl.tools at gmail dot com> --- For --- int foo1 (int x, int y) { x &= 1 << y; return x != 0; } --- combine fails to try (set (reg:CCZ 17 flags) (compare:CCZ (and:SI (lshiftrt:SI (reg/v:SI 88 [ x ]) (subreg:QI (reg/v:SI 89 [ y ]) 0)) (const_int 1 [0x1])) (const_int 0 [0]))) (set (reg:SI 94 [ D.1754 ]) (ne:SI (reg:CCZ 17 flags) (const_int 0 [0]))) which can be turned into (set (reg:CCC 17 flags) (compare:CCC (and:SI (lshiftrt:SI (reg/v:SI 88 [ x ]) (subreg:QI (reg/v:SI 89 [ y ]) 0)) (const_int 1 [0x1])) (const_int 0 [0]))) (set (reg:SI 94 [ D.1754 ]) (ne:SI (reg:CCC 17 flags) (const_int 0 [0])))