https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116353

--- Comment #5 from ptomsich at gcc dot gnu.org ---
To add on to the info provided by Manolis, this is the diff for the proposed
fix:

diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc
index 3e25f30b67e..da59c907891 100644
--- a/gcc/ifcvt.cc
+++ b/gcc/ifcvt.cc
@@ -3938,8 +3938,10 @@ bb_ok_for_noce_convert_multiple_sets (basic_block
test_bb, unsigned *cost)
       rtx src = SET_SRC (set);

       /* Do not handle anything involving memory loads/stores since it might
-        violate data-race-freedom guarantees.  */
-      if (!REG_P (dest) || contains_mem_rtx_p (src))
+        violate data-race-freedom guarantees.  Make sure we can force SRC
+        to a register as that may be needed in try_emit_cmove_seq.  */
+      if (!REG_P (dest) || contains_mem_rtx_p (src)
+         || !noce_can_force_operand (src))
        return false;

       /* Destination and source must be appropriate.  */

Reply via email to