This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Patch to improve x86 FP move patterns
- To: John Wehle <john at feith dot com>
- Subject: Re: Patch to improve x86 FP move patterns
- From: Jeffrey A Law <law at upchuck dot cygnus dot com>
- Date: Fri, 02 Apr 1999 13:38:15 -0700
- cc: egcs-patches at egcs dot cygnus dot com
- Reply-To: law at cygnus dot com
In message <199904022037.PAA13810@jwlab.FEITH.COM>you write:
> > > Thu Apr 1 23:23:18 EST 1999 John Wehle (john@feith.com)
> > >
> > > * i386.md (movsf+1, movdf+1, movxf+1): Update constraints
> > > so that SECONDARY_MEMORY_RELOAD is used. Remove dead code.
> > Thanks. Installed!
>
> After posting the patch last night I tweaked the movdf+1 and movxf+1
> constraints further by adding earlyclobber to alternative three.
>
> So instead of:
>
> [(set (match_operand:DF 0 "nonimmediate_operand" "=f,m,!*r,!o")
>
> it reads:
>
> [(set (match_operand:DF 0 "nonimmediate_operand" "=f,m,!&*r,!o")
>
> Okay to update the source tree?
Is that really necessary? That alternative is a *rmF -> !*r copy. Doesn't
output_move_double already handle the overlapping register issue? ie, even
if the input & output overlap, output_move_double (I think) will generate the
correct code.
If that is the case, then adding the '&' doesn't help, and in fact just makes
register allocation worse.
Am I missing something?
jeff
ps. No, I don't think output_move_double is required to handle overlapping
moves; however most if not all do. And a very quick scan of the x86 version
leads me to believe it handles overlapping moves.