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]

[PATCH], PR target/59054, powerpc code regression for power7/power8


This patch fixes PR 59054, which is a bug I introduced in early October, when I
added initial patches for allowing DFmode values in the traditional Altivec
registers on ISA 2.06, and SFmode values on ISA 2.07.  This patch eliminates
the constraints that allowed DImode values to go into the Altivec registers,
but had the result that for 0, the register allocator might choose to allocate
a floating point register instead of a GPR register, and then has to store the
value on the stack and reload (on ISA 2.06) or use direct move (on ISA 2.07) to
get the value in a register.

I have tested this with a bootstrap and make check on subversion id 204367 with
the fix from subversion id 204272 (fortran keyword problem).  At present, I
can't check it against the top of the trunk, due to PR 59009 (libsanitizer
breaking powerpc64-linux-gnu builds).

There were no regressions with the bootstrap or with make check.  This patch
also fixes the 64-bit failure in gcc.dg/stack-usage-1.c if you build the
compiler using the --with-cpu=power7 option.

In addition, I have included fixes for two other problems in my October
changes.  The first change only shows up when DFmode can go in the traditional
Altivec registers, in that I used %x on a CR register.  The second change is in
conversion of SFmode to DFmode, I used the wrong constraints.

Are these patches ok to install?  I would prefer to check in the patches right
now, but I can also wait until PR 59009 is fixed.

[gcc]
2013-11-11  Michael Meissner  <meissner@linux.vnet.ibm.com>

	PR target/59054
	* config/rs6000/rs6000.md (movdi_internal32): Eliminate
	constraints that would allow DImode into the traditional Altivec
	registers, but cause undesirable code generation when loading 0 as
	a constant.
	(movdi_internal32): Likewise.
	(cmp<mode>_fpr): Do not use %x for CR register output.
	(extendsfdf2_fpr): Fix constraints when -mallow-upper-df and
	-mallow-upper-sf debug switches are used.

[gcc/testsuite]
2013-11-11  Michael Meissner  <meissner@linux.vnet.ibm.com>

	PR target/59054
	* gcc.target/powerpc/pr59054.c: New test.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460, USA
email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797

Attachment: pr59054.patch01b
Description: Text document


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