> On Jun 6, 2014, at 1:50 AM, James Greenhalgh <james.greenha...@arm.com> wrote: > > > Hi, > > The move_by_pieces infrastructure performs a copy by repeatedly trying > the largest safe copy it can make. So for a 15-byte copy we might see: > > offset amount bytes copied > 0 8 0-7 > 8 4 8-11 > 12 2 12-13 > 14 1 14 > > However, we can implement a 15-byte copy as so: > > offset amount bytes copied > 0 8 0-7 > 7 8 7-14 > > Which can prove more efficient for both space and speed. > > In this patch we set MOVE_RATIO low to avoid using move_by_pieces, and > implement the movmem pattern name to expand small block copy cases. Note, this > optimization does not apply for -mstrict-align targets, which must continue > copying byte-by-byte.
Why not change move_by_pieces instead of having a target specific code? This seems like a better option. You can check is unaligned slow target macro to see if you want to do this optimization too. As I mentioned in the other email make sure you check the volatile ness of the from and to before doing this optimization. Thanks, Andrew > > Setting MOVE_RATIO low in this way causes a few tests to begin failing, > both of these are documented in the test-case as expected to fail for > low MOVE_RATIO targets, which do not allow certain Tree-Level optimizations. > > Bootstrapped on aarch64-unknown-linux-gnu with no issues. > > OK for trunk? > > Thanks, > James > > --- > gcc/ > > 2014-06-06 James Greenhalgh <james.greenha...@arm.com> > > * config/aarch64/aarch64-protos.h (aarch64_expand_movmem): New. > * config/aarch64/aarch64.c (aarch64_move_pointer): New. > (aarch64_progress_pointer): Likewise. > (aarch64_copy_one_part_and_move_pointers): Likewise. > (aarch64_expand_movmen): Likewise. > * config/aarch64/aarch64.h (MOVE_RATIO): Set low. > * config/aarch64/aarch64.md (movmem<mode>): New. > > gcc/testsuite/ > > 2014-06-06 James Greenhalgh <james.greenha...@arm.com> > > * gcc.dg/tree-ssa/pr42585.c: Skip for AArch64. > * gcc.dg/tree-ssa/sra-12.c: Likewise. > <0001-AArch64-Implement-movmem-for-the-benefit-of-inline-m.patch>