On 12/3/20 4:34 AM, Maciej W. Rozycki wrote:
> 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'.
OK
jeff
> ---
> gcc/ifcvt.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> gcc-ifcvt-dead-or-predicable-ce-only-jump.diff
> Index: gcc/gcc/ifcvt.c
> ===================================================================
> --- gcc.orig/gcc/ifcvt.c
> +++ gcc/gcc/ifcvt.c
> @@ -5127,6 +5127,11 @@ dead_or_predicable (basic_block test_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,
>
> earliest = jump;
> }
> + nce:
> #endif
>
> /* If we allocated new pseudos (e.g. in the conditional move
>