This is the mail archive of the gcc-patches@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]
Other format: [Raw text]

Re: [PATCH, i386]: FIx PR target/32413, [4.3 Regression] internal compiler error: in reload_cse_simplify_operands, at postreload.c:396


H. J. Lu wrote:

The value itself or the fact that gcc moves SI value to SSE for this
value?

It is odd for gcc to move SI value to SSE for this value.
The value is the same as for reg-reg move. So, when RA is out of
integer registers, it starts to allocate SSE regs.


We don't want use SSE registers as integer registers. Even if
they have same cost, it is still odd for RA to do that since
you con't really use scalar integer mode on SSE registers.
It is possible to move SImode and DImode to mmx/sse registers (movd and movq), but practically, you can't do anything with the value there. And having instructions with memory operands, memory is far better choice for a temporary storage. The proposed patch will prevent SImode values from SSE registers for all but most extreme situations by simply raising the bar high enough.

I have committed the patch to SVN mainline. It produces noticeably better code for -march=core2, without interclass register moves.

Uros.


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