On 06/12/14 04:12, Richard Biener wrote:
This implements the requested inlining of memmove for possibly
overlapping arguments by doing first all loads and then all stores.
The easiest place is to do this in memory op folding where we already
perform inlining of some memcpy cases (but fail to do the equivalent
memcpy optimization - though RTL expansion later does it).
The following patch restricts us to max. word-mode size. Ideally
we'd have a way to check for the number of real instructions needed
to load an (aligned) value of size N. But maybe we don't care
and are fine with doing multiple loads / stores?
Anyway, the following is conservative (but maybe not enough).
Bootstrap / regtest running on x86_64-unknown-linux-gnu.
These transforms don't really belong to GENERIC folding (they
also run at -O0 ...), similar to most builtin foldings. But this
patch is not to change that.
Any comments on the size/cost issue?
I recall seeing something in one of the BZ databases that asked for
double-word to be expanded inline. Presumably the reporter's code did
lots of double-word things of this nature.
Obviously someone else might want quad-word and so-on. However, double
words seem like a very reasonable request.
jeff