diff --git a/gcc/builtins.c b/gcc/builtins.c index 6f67eb7eeb5..bc40bad54e7 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -6775,9 +6775,10 @@ try_store_by_multiple_pieces (rtx to, rtx len, unsigned int ctz_len, /* Adjust PTR, TO and REM. Since TO's address is likely PTR+offset, we have to replace it. */ - emit_move_insn (ptr, XEXP (to, 0)); + emit_move_insn (ptr, force_operand (XEXP (to, 0), NULL_RTX)); to = replace_equiv_address (to, ptr); - emit_move_insn (rem, plus_constant (ptr_mode, rem, -blksize)); + rtx rem_minus_blksize = plus_constant (ptr_mode, rem, -blksize); + emit_move_insn (rem, force_operand (rem_minus_blksize, NULL_RTX)); } /* Iterate over power-of-two block sizes from the maximum length to @@ -6811,9 +6812,10 @@ try_store_by_multiple_pieces (rtx to, rtx len, unsigned int ctz_len, /* Adjust REM and PTR, unless this is the last iteration. */ if (i != sctz_len) { - emit_move_insn (ptr, XEXP (to, 0)); + emit_move_insn (ptr, force_operand (XEXP (to, 0), NULL_RTX)); to = replace_equiv_address (to, ptr); - emit_move_insn (rem, plus_constant (ptr_mode, rem, -blksize)); + rtx rem_minus_blksize = plus_constant (ptr_mode, rem, -blksize); + emit_move_insn (rem, force_operand (rem_minus_blksize, NULL_RTX)); } if (label)