Commit f6af9c21 by Richard Earnshaw Committed by Richard Earnshaw

[aarch64] PR target/91386 Use copy_rtx to avoid modifying original insns in peep2 pattern

PR target/91386 is a situation where a peephole2 pattern substitution
is discarded late because the selected instructions contain
frame-related notes that we cannot redistribute (because the pattern
has more than one insn in the output).  Unfortunately, the original
insns were being modified during the generation, so after the undo we
are left with corrupt RTL.

We avoid this by ensuring that the modifications are always made on a
copy, so that the original insns are never changed.

	PR target/91386
	* config/aarch64/aarch64.c (aarch64_gen_adjusted_ldpstp): Use copy_rtx
	to preserve the contents of the original insns.

From-SVN: r274238
parent d092f6fc
2019-09-09 Richard Earnshaw <rearnsha@arm.com>
PR target/91386
* config/aarch64/aarch64.c (aarch64_gen_adjusted_ldpstp): Use copy_rtx
to preserve the contents of the original insns.
2019-08-09 Richard Earnshaw <rearnsha@arm.com>
*confit/arm/arm.md (addsi3_compare_op1): Add 16-bit thumb-2 variants.
*config/arm/arm.md (addsi3_compare_op1): Add 16-bit thumb-2 variants.
(addsi3_compare_op2): Likewise.
2019-08-09 Martin Liska <mliska@suse.cz>
......
......@@ -18546,19 +18546,21 @@ aarch64_gen_adjusted_ldpstp (rtx *operands, bool load,
/* Sort the operands. */
qsort (temp_operands, 4, 2 * sizeof (rtx *), aarch64_ldrstr_offset_compare);
/* Copy the memory operands so that if we have to bail for some
reason the original addresses are unchanged. */
if (load)
{
mem_1 = temp_operands[1];
mem_2 = temp_operands[3];
mem_3 = temp_operands[5];
mem_4 = temp_operands[7];
mem_1 = copy_rtx (temp_operands[1]);
mem_2 = copy_rtx (temp_operands[3]);
mem_3 = copy_rtx (temp_operands[5]);
mem_4 = copy_rtx (temp_operands[7]);
}
else
{
mem_1 = temp_operands[0];
mem_2 = temp_operands[2];
mem_3 = temp_operands[4];
mem_4 = temp_operands[6];
mem_1 = copy_rtx (temp_operands[0]);
mem_2 = copy_rtx (temp_operands[2]);
mem_3 = copy_rtx (temp_operands[4]);
mem_4 = copy_rtx (temp_operands[6]);
gcc_assert (code == UNKNOWN);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment