]> gcc.gnu.org Git - gcc.git/commit
Eliminate power8 fusion options, use power8 tuning, PR target/102059
authorMichael Meissner <meissner@linux.ibm.com>
Tue, 12 Apr 2022 18:45:08 +0000 (14:45 -0400)
committerMichael Meissner <meissner@linux.ibm.com>
Tue, 12 Apr 2022 18:45:08 +0000 (14:45 -0400)
commitb249979e995d94e5c5f98c445386197378f2d96d
tree762ca03592219d1754346d0879af9461a394046a
parent7af9753a81dc9374da3fbc6db8cffc2a4770aec8
Eliminate power8 fusion options, use power8 tuning, PR target/102059

This is V4 of the patch.  Compared to V3 of the patch, GCC will just
ignore -m{,no-}power8-fusion and -m{,no-}power8-fusion-sign.

The splitting of signed halfword and word loads into unsigned load and
sign extension is now suppressed with -Os, but it is done normally if we
are not optimizing for space.

The power8 fusion support used to be set automatically when -mcpu=power8 or
-mtune=power8 was used, and it was cleared for other cpu's.  However, if you
used the target attribute or target #pragma to change the default cpu type or
tuning, you would get an error that a target specifiction option mismatch
occurred.

This occurred because the rs6000_can_inline_p function just compares the ISA
bits between the called inline function and the caller.  If the ISA flags of
the called function is not a subset of the ISA flags of the caller, we won't do
the inlinging.  When a power9 or power10 function inlines a function that is
explicitly compiled for power8, the power8 function has the power8 fusion bits
set and the power9 or power10 functions do not have the fusion bits set.

This code removes the -mpower8-fusion option.  It also removes the
undocumented -mpower8-fusion-sign option.  It only enables power8 fusion
if we are tuning for a power8.

Similarly, I left in the pragma target and attribute target support for
power8-fusion, but using it doesn't do anything now.  This is because I
told the customer who encountered this problem that one solution was to
add an explicit no-power8-fusion option in their target pragma or
attribute to work around the problem.

I have tested this patch on a little endian power10 system.  I have tested
previous versions on little endian power9 and big endian power8 systems.
Can I apply this patch to the master branch?

2022-04-12   Michael Meissner  <meissner@linux.ibm.com>

gcc/
PR target/102059
* config/rs6000/rs6000-cpus.def (OTHER_FUSION_MASKS): Delete.
(ISA_3_0_MASKS_SERVER): Don't clear the fusion masks.
(POWERPC_MASKS): Remove OPTION_MASK_P8_FUSION.
* config/rs6000/rs6000.cc (rs6000_option_override_internal):
Delete code that set the power8 fusion options automatically.
(rs6000_opt_masks): Allow #pragma target and attribute target
power8-fusion option for backwards compatibility.
(rs6000_print_options_internal): Skip printing backward
compatibility options that are just ignored.
* config/rs6000/rs6000.h (TARGET_P8_FUSION): New macro.
(TARGET_P8_FUSION_SIGN): Likewise.
(MASK_P8_FUSION): Delete.
* config/rs6000/rs6000.opt (-mpower8-fusion): Recognize the option but
ignore the no form and warn that the option was removed for the regular
form.
(-mpower8-fusion-sign): Warn that the option has been removed.
* doc/invoke.texi (RS/6000 and PowerPC Options): Delete
-mpower8-fusion.

gcc/testsuite/
PR target/102059
* gcc.dg/lto/pr102059-1_0.c: Remove -mno-power8-fusion.
* gcc.dg/lto/pr102059-2_0.c: Likewise.
* gcc.target/powerpc/pr102059-3.c: Likewise.
* gcc.target/powerpc/pr102059-4.c: New test.
gcc/config/rs6000/rs6000-cpus.def
gcc/config/rs6000/rs6000.cc
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.opt
gcc/doc/invoke.texi
gcc/testsuite/gcc.dg/lto/pr102059-1_0.c
gcc/testsuite/gcc.dg/lto/pr102059-2_0.c
gcc/testsuite/gcc.target/powerpc/pr102059-3.c
gcc/testsuite/gcc.target/powerpc/pr102059-4.c [new file with mode: 0644]
This page took 0.065623 seconds and 6 git commands to generate.