From 85775141e3d551b880baefc7e6f8151737fc497c Mon Sep 17 00:00:00 2001 From: Michael Meissner Date: Tue, 11 Jun 2019 17:36:58 +0000 Subject: [PATCH] Do not enable -mpcrel by default at the current time From-SVN: r272165 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/rs6000/rs6000-cpus.def | 4 ++-- gcc/config/rs6000/rs6000.c | 19 +++++++++++-------- gcc/testsuite/ChangeLog | 9 +++++++++ .../gcc.target/powerpc/localentry-1.c | 7 ++++--- .../gcc.target/powerpc/localentry-detect-1.c | 6 ++++-- .../gcc.target/powerpc/notoc-direct-1.c | 7 ++++--- .../gcc.target/powerpc/pcrel-sibcall-1.c | 11 +++++++---- 8 files changed, 51 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 95cdab713ca..bf0dc947e8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2019-06-11 Michael Meissner + + * config/rs6000/rs6000-cpus.def (ISA_FUTURE_MASKS_SERVER): Delete + enabling -mpcrel by default. + * config/rs6000/rs6000.c (rs6000_option_override_internal): Update + test for -mpcrel and/or -mprefixed-addr needing -mcpu=future, so + that the test against -mcpu=future is done first. Then test if + -mprefixed-addr is on for -mpcrel. + (rs6000_disable_incompatible_switches): Add -mcpu=future support. + 2019-06-11 Jakub Jelinek PR target/90811 diff --git a/gcc/config/rs6000/rs6000-cpus.def b/gcc/config/rs6000/rs6000-cpus.def index 14f8a0ef746..972d19fabc7 100644 --- a/gcc/config/rs6000/rs6000-cpus.def +++ b/gcc/config/rs6000/rs6000-cpus.def @@ -75,10 +75,10 @@ | OPTION_MASK_P8_VECTOR \ | OPTION_MASK_P9_VECTOR) -/* Support for a future processor's features. */ +/* Support for a future processor's features. Do not enable -mpcrel until it + is fully functional. */ #define ISA_FUTURE_MASKS_SERVER (ISA_3_0_MASKS_SERVER \ | OPTION_MASK_FUTURE \ - | OPTION_MASK_PCREL \ | OPTION_MASK_PREFIXED_ADDR) /* Flags that need to be turned off if -mno-future. */ diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 91fafc4e766..f17faebff6a 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -4245,22 +4245,24 @@ rs6000_option_override_internal (bool global_init_p) rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW; } - /* -mpcrel requires prefixed load/store addressing. */ - if (TARGET_PCREL && !TARGET_PREFIXED_ADDR) + /* -mprefixed-addr (and hence -mpcrel) requires -mcpu=future. */ + if (TARGET_PREFIXED_ADDR && !TARGET_FUTURE) { if ((rs6000_isa_flags_explicit & OPTION_MASK_PCREL) != 0) - error ("%qs requires %qs", "-mpcrel", "-mprefixed-addr"); + error ("%qs requires %qs", "-mpcrel", "-mcpu=future"); + else if ((rs6000_isa_flags_explicit & OPTION_MASK_PREFIXED_ADDR) != 0) + error ("%qs requires %qs", "-mprefixed-addr", "-mcpu=future"); - rs6000_isa_flags &= ~OPTION_MASK_PCREL; + rs6000_isa_flags &= ~(OPTION_MASK_PCREL | OPTION_MASK_PREFIXED_ADDR); } - /* -mprefixed-addr (and hence -mpcrel) requires -mcpu=future. */ - if (TARGET_PREFIXED_ADDR && !TARGET_FUTURE) + /* -mpcrel requires prefixed load/store addressing. */ + if (TARGET_PCREL && !TARGET_PREFIXED_ADDR) { if ((rs6000_isa_flags_explicit & OPTION_MASK_PCREL) != 0) - error ("%qs requires %qs", "-mprefixed-addr", "-mcpu=future"); + error ("%qs requires %qs", "-mpcrel", "-mprefixed-addr"); - rs6000_isa_flags &= ~(OPTION_MASK_PCREL | OPTION_MASK_PREFIXED_ADDR); + rs6000_isa_flags &= ~OPTION_MASK_PCREL; } /* Print the options after updating the defaults. */ @@ -37155,6 +37157,7 @@ rs6000_disable_incompatible_switches (void) const HOST_WIDE_INT dep_flags; /* flags that depend on this option. */ const char *const name; /* name of the switch. */ } flags[] = { + { OPTION_MASK_FUTURE, OTHER_FUTURE_MASKS, "future" }, { OPTION_MASK_P9_VECTOR, OTHER_P9_VECTOR_MASKS, "power9-vector" }, { OPTION_MASK_P8_VECTOR, OTHER_P8_VECTOR_MASKS, "power8-vector" }, { OPTION_MASK_VSX, OTHER_VSX_VECTOR_MASKS, "vsx" }, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1d543337d7a..d5b92198587 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2019-06-11 Michael Meissner + + * gcc.target/powerpc/localentry-1.c: Add -mpcrel option. + * gcc.target/powerpc/localentry-detect-1.c: Explicitly set and + unset -mpcrel in the target pragmas. + * gcc.target/powerpc/notoc-direct-1.c: Add -mpcrel option. + * gcc.target/powerpc/pcrel-sibcall-1.c: Explicitly set and + unset -mpcrel in the target pragmas. + 2019-06-11 Marc Glisse * gcc.dg/tree-ssa/cmpexactdiv-5.c: New file. diff --git a/gcc/testsuite/gcc.target/powerpc/localentry-1.c b/gcc/testsuite/gcc.target/powerpc/localentry-1.c index dc4867d0a3c..068b0c080bb 100644 --- a/gcc/testsuite/gcc.target/powerpc/localentry-1.c +++ b/gcc/testsuite/gcc.target/powerpc/localentry-1.c @@ -1,10 +1,11 @@ /* { dg-do compile } */ -/* { dg-options "-mdejagnu-cpu=future -O2" } */ +/* { dg-options "-mdejagnu-cpu=future -O2 -mpcrel" } */ /* { dg-require-effective-target powerpc_elfv2 } */ /* { dg-require-effective-target powerpc_future_ok } */ -/* Ensure we generate ".localentry fn,1" for both leaf and non-leaf - functions. */ +/* Ensure we generate ".localentry fn,1" for both leaf and non-leaf functions. + At present, -mcpu=future does not enable pc-relative mode, so make sure we + enable it to be able to check for .localentry. */ extern int y (int); diff --git a/gcc/testsuite/gcc.target/powerpc/localentry-detect-1.c b/gcc/testsuite/gcc.target/powerpc/localentry-detect-1.c index 70b18ff0aca..e67e7f824f8 100644 --- a/gcc/testsuite/gcc.target/powerpc/localentry-detect-1.c +++ b/gcc/testsuite/gcc.target/powerpc/localentry-detect-1.c @@ -3,10 +3,12 @@ /* { dg-require-effective-target powerpc_future_ok } */ /* { dg-options "-O2 -mdejagnu-cpu=future" } */ - +/* At present, -mcpu=future does not enable pc-relative mode. Enable it here + explicitly until it is turned on by default. */ +#pragma GCC target ("cpu=future,pcrel") int localentry1 () { return 5; } -#pragma GCC target ("cpu=power9") +#pragma GCC target ("cpu=power9,no-pcrel") int localentry2 () { return 5; } /* { dg-final { scan-assembler {\.localentry\tlocalentry1,1\M} } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/notoc-direct-1.c b/gcc/testsuite/gcc.target/powerpc/notoc-direct-1.c index 0917f307e65..8603ff7706b 100644 --- a/gcc/testsuite/gcc.target/powerpc/notoc-direct-1.c +++ b/gcc/testsuite/gcc.target/powerpc/notoc-direct-1.c @@ -1,10 +1,11 @@ /* { dg-do compile } */ -/* { dg-options "-mdejagnu-cpu=future -O2" } */ +/* { dg-options "-mdejagnu-cpu=future -O2 -mpcrel" } */ /* { dg-require-effective-target powerpc_elfv2 } */ /* { dg-require-effective-target powerpc_future_ok } */ -/* Test that calls generated from PC-relative code are - annotated with @notoc. */ +/* Test that calls generated from PC-relative code are annotated with @notoc. + At present, -mcpu=future does not enable pc-relative mode. Enable it here + explicitly until it is turned on by default. */ extern int yy0 (int); extern void yy1 (int); diff --git a/gcc/testsuite/gcc.target/powerpc/pcrel-sibcall-1.c b/gcc/testsuite/gcc.target/powerpc/pcrel-sibcall-1.c index bd7a0a9bcda..0cb40d45ace 100644 --- a/gcc/testsuite/gcc.target/powerpc/pcrel-sibcall-1.c +++ b/gcc/testsuite/gcc.target/powerpc/pcrel-sibcall-1.c @@ -3,9 +3,12 @@ /* { dg-require-effective-target powerpc_elfv2 } */ /* { dg-require-effective-target powerpc_future_ok } */ -/* Test that potential sibcalls are not generated when the caller preserves - the TOC and the callee doesn't, or vice versa. */ +/* Test that potential sibcalls are not generated when the caller preserves the + TOC and the callee doesn't, or vice versa. At present, -mcpu=future does + not enable pc-relative mode. Enable it here explicitly until it is turned + on by default. */ +#pragma GCC target ("cpu=future,pcrel") int x (void) __attribute__((noinline)); int y (void) __attribute__((noinline)); int xx (void) __attribute__((noinline)); @@ -25,7 +28,7 @@ int sib_call (void) return x (); } -#pragma GCC target ("cpu=power9") +#pragma GCC target ("cpu=power9,no-pcrel") int normal_call (void) { return y (); @@ -36,7 +39,7 @@ int xx (void) return 1; } -#pragma GCC target ("cpu=future") +#pragma GCC target ("cpu=future,pcrel") int notoc_call (void) { return xx (); -- 2.30.2