The compiler, configured with --enable-checking=yes,rtl,extra ICEs with: internal compiler error: RTL check: expected elt 0 type 'e' or 'u', have 'E' (rtx unspec) in try_combine, at combine.cc:3237 This is 3236 /* Just replace the CC reg with a new mode. */ 3237 SUBST (XEXP (*cc_use_loc, 0), newpat_dest); 3238 undobuf.other_insn = cc_use_insn; in combine.cc, where *cc_use_loc is (unspec:DI [ (reg:CC 17 flags) ] UNSPEC_PUSHFL) combine assumes CC must be used inside of a comparison and uses XEXP (..., 0) without checking on the RTX type of the argument. Skip the modification of CC-using operation if *cc_use_loc is not COMPARISON_P. PR middle-end/112560 gcc/ChangeLog: * combine.cc (try_combine): Skip the modification of CC-using operation if *cc_use_loc is not COMPARISON_P. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. OK for master? Uros.