i386.md splits 1

Jeffrey A Law law@cygnus.com
Sun Oct 25 14:00:00 GMT 1998

  In message < 19981002122000.43390@atrey.karlin.mff.cuni.cz >you write:
  > >   > IMO, movdi and zero_extendsidi3 should both be deleted.  Neither
  > >   > defines any machine-specific instructions; both can be handled
  > >   > better by the middle-end.
  > > Don't be so hasty.
  > > 
  > > I've actually run into codegen bugs when ports haven't defined movdi :(
  > Strange, it ought be fixed or not? :)
Every bug should be fixed.  But everything has to be prioritized.  Some things
just never become high enough priority on anyone's queue.

  > > I've also generally seen better code when ports define double-word move
  > > patterns -- even on register poor targets.
  > According to my experinece with removing zero_extendsidi is, that it
  > generates seqence of insn starting with clobber target register, two moves
  > and move DI register to itself.
Actually I was speaking strictly about the movXX patterns.  I wasn't including
zero_extendXXYY in that generalization. 

The extension patterns are kind of funny.  They often have matching constraints
but can't be optimized during regmove because the operands have different modes
(at least regmove used to have that limitation, I haven't looked recently).

>From quickly looking at the x86 zero_extendsidi2 I would probably leave it in
i386.md, but add a define_split which breaks it up into its component insns
after reload if operands 0 != operands 1.


More information about the Gcc-patches mailing list