On Tue, Aug 9, 2011 at 12:40 AM, Uros Bizjak <ubiz...@gmail.com> wrote: > On Mon, Aug 8, 2011 at 7:11 PM, Uros Bizjak <ubiz...@gmail.com> wrote: > >>> Moves are special as far as reload is concerned. If there is already >>> a move instruction present *before* reload, it will get fixed up >>> according to its constraints as any other instruction. >>> >>> However, reload will *introduce* new moves as part of its operation, >>> and those will *not* themselves get reloaded. Instead, reload simply >>> assumes that every plain move will just succeed without requiring >>> any reload; if this is not true, the target *must* provide a >>> secondary reload for this move. >>> >>> (Note that the secondary reload could also work by reloading the >>> target address into a temporary; that's up to the target to >>> implement.) >> >> Whoa, indeed. >> >> Using attached patch that reloads memory address instead of going >> through XMM register, the code for the testcase improves from: > > Committed to mainline with following ChangeLog entry: > > 2011-08-09 Uros Bizjak <ubiz...@gmail.com> > > PR target/49781 > * config/i386/i386.md (reload_noff_load): New. > (reload_noff_store): Ditto. > * config/i386/i386.c (ix86_secondary_reload): Use > CODE_FOR_reload_noff_load and CODE_FOR_reload_noff_store to handle > double-word moves from/to non-offsetable addresses instead of > generating XMM temporary. > > Re-bootstrapped and re-tested on x86_64-pc-linux-gnu {,-m32}. >
No regressions on x32 with GCC, glibc and SPEC CPU 2K/2006. Thanks. -- H.J.