ifcvt: Add missing call to `onlyjump_p'
authorMaciej W. Rozycki <macro@linux-mips.org>
Sat, 5 Dec 2020 18:26:24 +0000 (18:26 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Sat, 5 Dec 2020 18:26:24 +0000 (18:26 +0000)
Do not convert a conditional jump into conditional execution (and remove
the jump as a consequence) if the jump has side effects.

gcc/
* ifcvt.c (dead_or_predicable) [!IFCVT_MODIFY_TESTS]: Bail out
if `!onlyjump_p'.

gcc/ifcvt.c

index a9ea7b1808d0498dd5a1dca8f1f9f0baef5be5b3..0bd05dc26227f6d278fe3ca675af02082532a108 100644 (file)
@@ -5127,6 +5127,11 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
 
       rtx cond;
 
+      /* If the conditional jump is more than just a conditional jump,
+        then we cannot do conditional execution conversion on this block.  */
+      if (!onlyjump_p (jump))
+       goto nce;
+
       cond = cond_exec_get_condition (jump);
       if (! cond)
        return FALSE;
@@ -5154,6 +5159,7 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
 
       earliest = jump;
     }
+ nce:
 #endif
 
   /* If we allocated new pseudos (e.g. in the conditional move