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], Remove power9 fusion support


As I discussed in my 2018 Cauldron talk, the PowerPC GCC compiler supported a
subset of the original design for fusion in the power9 hardware using peepholes
to fuse together ADDIS instructions and floating point load/store operations.

However, while fusion was part of the original power9 design, by the time the
machine came out, the fusion support was no longer part of the architecture.

This patch removes all of the so-called power9 fusion support for the GCC
compiler.  It leaves -mpower9-fusion as a deprecated switch in case somebody
used it (the switch was never documented).  If you do -mcpu=power9, it will
turn off the power8 fusion support.  If you do -mcpu=power8 and -mtune=power9,
it will also turn off the power8 fusion support.

I have done a bootstrap on a power9 system and there were no regressions in the
tests, other than the two tests for power9 fusion that are now deleted as part
of this patch.  I have also done runs of the Spec 2006 benchmark on the same
machine with and without the patches.  The CactusADM benchmark gets a slight
bump (1.6%) if it doesn't do the power9 fusion.

Can I check these changes into the GCC 9 trunk?

[gcc]
2018-11-02  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/constraints.md (wF constraint): Only document the
	wF constraint for power8 fusion.  Remove documentation for power9
	fusion.
	* config/rs6000/predicates.md (p9_fusion_reg_operand): Delete, the
	predicate only used for power9 fusion support.
	(fusion_gpr_addis): Drop support to allow fusing offsets where the
	top 11 bits weren't all 0 or all 1's.
	(fusion_gpr_mem_load): Add comment about not allowing SFmode or
	DFmode in power8 fusion.
	(fusion_addis_mem_combo_load): Drop power9 fusion support.  Only
	support power8 fusion.  Add comment about not allowing SFmode or
	DFmode in power8 fusion.
	(fusion_offsettable_mem_operand): Delete, the predicate only used
	for power9 fusion support.
	* config/rs6000/rs6000-cpus.def (ISA_2_7_MASKS_NO_FUSION): New
	option masks that is all of the ISA 2.07 bits except for fusion.
	(ISA_2_7_MASKS_SERVER): Add fusion bits back in.
	(ISA_3_0_MASKS_SERVER): Delete power9 fusion.  Use ISA 2.07 bits
	without enabling power8 fusion.
	(POWERPC_MASKS): Delete power9 fusion option mask.
	* config/rs6000/rs6000-protos.h (emit_fusion_load_store): Delete
	function declarations used for power9 fusion.
	(fusion_p9_p): Likewise.
	(expand_fusion_p9_load): Likewise.
	(expand_fusion_p9_store): Likewise.
	(emit_fusion_p9_load): Likewise.
	(emit_fusion_p9_store): Likewise.
	* config/rs6000/rs6000.c (rs6000_debug_reg_global): Delete power9
	fusion debug print.
	(rs6000_option_override_internal): Delete power9 fusion option
	support.  If we do -mcpu=power8 -mtune=power9, turn off power8
	fusion.
	(rs6000_opt_masks): Delete power9 fusion option.
	(emit_fusion_load): Rename function from emit_fusion_load_store.
	Make the function static.  Delete support for fusing stores, since
	we are deleting power9 fusion.
	(fusion_p9_p): Delete power9 fusion support functions.
	(expand_fusion_p9_load): Likewise.
	(expand_fusion_p9_store): Likewise.
	(emit_fusion_p9_load): Likewise.
	(emit_fusion_p9_store): Likewise.
	* config/rs6000/rs6000.h: Delete comment about power9 fusion.
	* config/rs6000/rs6000.md (UNSPEC_FUSION_P9): Delete, no longer
	used since power9 fusion support has been deleted.
	(GPR_FUSION iterator): Likewise.
	(FPR_FUSION iterator): Likewise.
	(power9 fusion peephole2's): Likewise.
	(fusion_gpr_<P:mode>_<GPR_FUSION:mode>_load): Likewise.
	(fusion_gpr_<P:mode>_<GPR_FUSION:mode>_store): Likewise.
	(fusion_vsx_<P:mode>_<FPR_FUSION:mode>_load): Likewise.
	(fusion_vsx_<P:mode>_<FPR_FUSION:mode>_store): Likewise.
	(fusion_p9_<mode>_constant): Likewise.
	* config/rs6000/rs6000.opt (-mpower9-fusion): Mark as deprecated.
	* doc/md.texi (PowerPC constraints): Update wF documentation.

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

	* gcc.target/powerpc/fusion3.c: Delete power9 fusion.
	* gcc.target/powerpc/fusion4.c: Likewise.


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

Attachment: gcc-power9.patch338b
Description: Text document


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