This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: dangerous cleverness? ppc int<->float conversions, subreg


On Fri, Oct 26, 2001 at 12:55:14PM -0400, David Edelsohn wrote:
> Zack,
> 
> 	Have you looked into my comment about move_by_pieces?
> 
> 	The problem is how to discourage GCC from using FPRs for DImode.
> GCC only uses FPRs for DImode to move blocks of memory and float->int
> conversions.  In trying to avoid the block memory moves, you hit problems
> with the fixunsdfsi pattern.  Now the conversation has veered off trying
> to solve the symptom instead of the problem, IMHO.
> 
> 	If wecan change the block move register preferences, we will have
> solved the original problem and avoiding a lot of unnecessary complexity.

I'm not sure about this.  move_by_pieces on a PPC generates a plain

(set (reg:DI 123) (mem:DI location1))
(set (mem:DI location2) (reg:DI 123))

It's register allocation that decides that (reg:DI 123) will be
assigned to a floating point register.  If I use -msoft-float, we
*still* get a DImode pseudo from move_by_pieces.  Register allocation
then assigns it to an integer register pair - without breaking up the
DImode move.

What are you suggesting move_by_pieces do instead?

Note also that it is acceptable and perhaps even desirable, in the
special mode I want, to do block move through FPRs if there's other
floating-point activity in the same function.

zw


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]