Before issuing loads or stores for a block move, adjust the MEM
alignments if analysis of the addresses enabled the inference of
stricter alignment. This ensures that the MEMs are sufficiently
aligned for the corresponding insns, which avoids trouble in case of
e.g. substitutions into SUBREGs.
for gcc/ChangeLog
PR target/115459
* config/alpha/alpha.cc (alpha_expand_block_move): Adjust
MEMs to match inferred alignment.
else if (a >= 16 && c % 2 == 0)
src_align = 16;
}
+
+ if (MEM_P (orig_src) && MEM_ALIGN (orig_src) < src_align)
+ {
+ orig_src = shallow_copy_rtx (orig_src);
+ set_mem_align (orig_src, src_align);
+ }
}
tmp = XEXP (orig_dst, 0);
else if (a >= 16 && c % 2 == 0)
dst_align = 16;
}
+
+ if (MEM_P (orig_dst) && MEM_ALIGN (orig_dst) < dst_align)
+ {
+ orig_dst = shallow_copy_rtx (orig_dst);
+ set_mem_align (orig_dst, dst_align);
+ }
}
ofs = 0;