https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101885
--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> --- For instructions that inherently set a condition code register, the @code{compare} operator is always written as the first RTL expression of the @code{parallel} instruction pattern. For example, @smallexample (define_insn "" [(set (reg:CCZ FLAGS_REG) (compare:CCZ (plus:SI (match_operand:SI 1 "register_operand" "%r") (match_operand:SI 2 "register_operand" "r")) (const_int 0))) (set (match_operand:SI 0 "register_operand" "=r") (plus:SI (match_dup 1) (match_dup 2)))] "" "addl %0, %1, %2") @end smallexample see the https://gcc.gnu.org/pipermail/gcc-patches/2017-May/thread.html#474080 thread.