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

--- Comment #4 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
Thanks for looking at this, and sorry for not having got to
it before now.  I've been spending most of the past week fighting
the WRF thing.

(In reply to Jakub Jelinek from comment #3)
> --- gcc/config/arm/arm.md.jj  2021-01-04 10:25:44.404170742 +0100
> +++ gcc/config/arm/arm.md     2021-02-11 12:50:26.049604711 +0100
> @@ -9216,6 +9216,11 @@
>        else
>       {
>         rtx mem = force_const_mem (SImode, operands[1]);
> +       if (!general_operand (mem, SImode))
> +         {
> +           emit_move_insn (operands[2], XEXP (mem, 0));
> +           mem = replace_equiv_address (mem, operands[2], false);
> +         }
>         emit_move_insn (operands[2], mem);
>       }
>      }
> @@ -9299,6 +9304,11 @@
>        else
>       {
>         rtx mem = force_const_mem (SImode, operands[1]);
> +       if (!general_operand (mem, SImode))
> +         {
> +           emit_move_insn (operands[3], XEXP (mem, 0));
> +           mem = replace_equiv_address (mem, operands[3], false);
> +         }
>         emit_move_insn (operands[3], mem);
>       }
>      }
> actually seems to work, and because before r11-3427 the code has done
> emit_move_insn (operands[{2,3}], XEXP (force_const_mem (...), [0])); I think
> it must work.
Yeah, this definitely looks plausible.

Reply via email to