http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54829
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|bad optimization: sub |bad optimization: sub |followed by cmp w/ zero |followed by cmp w/ zero |(x86 & ARM) |(ARM) --- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> 2012-10-06 13:31:00 UTC --- i386.md has (define_insn "*cmp<mode>_minus_1" [(set (reg FLAGS_REG) (compare (minus:SWI (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>") (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m")) (const_int 0)))] "ix86_match_ccmode (insn, CCGOCmode)" "cmp{<imodesuffix>}\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "<MODE>")]) Since cmp will also set OF and CF flags, it can't be used for GT and LE which checks OF.