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;

Reply via email to