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/80510, Optimize 32-bit offsettable memory references on power7/power8


Andreas Schwab noticed that the two tests for PR 80510 failed on 32-bit systems
due to long being only a 32-bit type.

Yesterday, I committed this patch to disable the test for 32-bit:
https://gcc.gnu.org/ml/gcc-patches/2017-06/msg01607.html

This patch implements the necessary move and peephole support for 32-bit ISA
2.05/2.06 (power7/power8) targets, so that the compiler can optimize:

	load FPR, <offsettable memory>		move FPR, ALTIVEC
	move ALTIVEC, FPR			store FPR, <offsettable memory>

into:

	ADDI GPR, <offsettable address>		ADDI GPR, <offsettable address>
	load ALTIVEC, GPR			store ALTIVEC, GPR

I tested it on two systems: 1) a big endian power7 system that has the 32-bit
libraries installed, and 2) a little endian power8 system.  On both systems, it
bootstrapped and passed make check.  I did verify on the power7 system that it
ran the two tests for the functionality correctly.

FWIW, I built two 32-bit versions of Spec 2006, using the compiler without and
with the changes installed.  Unlike 64-bit, I don't see any code changes as a
result of this optimization, and all 30 spec benchmarks built correctly.

However, the tests show that it will generate the instructions in some cases,
but it is evidently not currently triggered.

Can I install this into the trunk and after a burn in period, install it on the
GCC 7 and GCC 6 branches (the previous patch for 64-bit is already installed on
both branches)?  If desired, I can make sure it gets into 6.4, or I can wait to
install the patch until after 6.4 ships.

[gcc]
2017-06-22  Michael Meissner  <meissner@linux.vnet.ibm.com>

	PR target/80510
	* config/rs6000/rs6000.md (ALTIVEC_DFORM): Do not allow DImode in
	32-bit, since indexed is not valid for DImode.
	(mov<mode>_hardfloat32): Reorder ISA 2.07 load/stores before ISA
	3.0 d-form load/stores to be the same as mov<mode>_hardfloat64.
	(define_peephole2 for Altivec d-form load): Add 32-bit support.
	(define_peephole2 for Altivec d-form store): Likewise.

[gcc/testsuite]
2017-06-22  Michael Meissner  <meissner@linux.vnet.ibm.com>

	PR target/80510
	* gcc.target/powerpc/pr80510-1.c: Allow test to run on 32-bit.
	* gcc.target/powerpc/pr80510-2.c: Likewise.

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

Attachment: pr80510.patch04b
Description: Text document


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