[PR40457] [arm] expand SI-aligned movdi into pair of movsi

When expanding a misaligned DImode move, emit aligned SImode moves if
the parts are sufficiently aligned.  This enables neighboring stores
to be peephole-combined into stm, as expected by the PR40457 testcase,
even after SLP vectorizes the originally aligned SImode stores into a
misaligned DImode store.


for  gcc/ChangeLog

	PR target/40457
	* config/arm/arm.md (movmisaligndi): Prefer aligned SImode
	moves.
This commit is contained in:
Alexandre Oliva 2023-01-13 21:15:41 -03:00 committed by Alexandre Oliva
parent ccd4df81aa
commit acddf6665f

View file

@ -12783,8 +12783,16 @@
rtx hi_op0 = gen_highpart_mode (SImode, DImode, operands[0]);
rtx hi_op1 = gen_highpart_mode (SImode, DImode, operands[1]);
emit_insn (gen_movmisalignsi (lo_op0, lo_op1));
emit_insn (gen_movmisalignsi (hi_op0, hi_op1));
if (aligned_operand (lo_op0, SImode) && aligned_operand (lo_op1, SImode))
{
emit_move_insn (lo_op0, lo_op1);
emit_move_insn (hi_op0, hi_op1);
}
else
{
emit_insn (gen_movmisalignsi (lo_op0, lo_op1));
emit_insn (gen_movmisalignsi (hi_op0, hi_op1));
}
DONE;
})