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

--- Comment #7 from Christoph Müllner <cmuellner 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.  */

I've successfully bootstrapped the proposed change on top of master with
`--enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,lto` on x86-64 and
aarch64.

So the change is:
  Tested-by: Christoph Müllner <christoph.muell...@vrull.eu>

Reply via email to