This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
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