https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104153
--- Comment #3 from rdapp at linux dot ibm.com --- Both of your guesses are correct :) or1k_expand_compare () indeed modifies the condition/comparison in-place. As I use cc_cmp directly from the condition of the jump it is changed but never reverted. The following helps for me: diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc index fe250d508e1..20debc0822a 100644 --- a/gcc/ifcvt.cc +++ b/gcc/ifcvt.cc @@ -3390,7 +3390,7 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info, /* Decompose the condition attached to the jump. */ rtx cond = noce_get_condition (jump, &cond_earliest, false); - rtx cc_cmp = cond_exec_get_condition (jump); + rtx cc_cmp = copy_rtx (cond_exec_get_condition (jump)); rtx rev_cc_cmp = cond_exec_get_condition (jump, /* get_reversed */ true); rtx_insn *insn;