Commit 85775141 by Michael Meissner Committed by Michael Meissner

Do not enable -mpcrel by default at the current time

From-SVN: r272165
parent ce9c4ec3
2019-06-11 Michael Meissner <meissner@linux.ibm.com>
* 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 <jakub@redhat.com> 2019-06-11 Jakub Jelinek <jakub@redhat.com>
PR target/90811 PR target/90811
......
...@@ -75,10 +75,10 @@ ...@@ -75,10 +75,10 @@
| OPTION_MASK_P8_VECTOR \ | OPTION_MASK_P8_VECTOR \
| OPTION_MASK_P9_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 \ #define ISA_FUTURE_MASKS_SERVER (ISA_3_0_MASKS_SERVER \
| OPTION_MASK_FUTURE \ | OPTION_MASK_FUTURE \
| OPTION_MASK_PCREL \
| OPTION_MASK_PREFIXED_ADDR) | OPTION_MASK_PREFIXED_ADDR)
/* Flags that need to be turned off if -mno-future. */ /* Flags that need to be turned off if -mno-future. */
......
...@@ -4245,22 +4245,24 @@ rs6000_option_override_internal (bool global_init_p) ...@@ -4245,22 +4245,24 @@ rs6000_option_override_internal (bool global_init_p)
rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW; rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW;
} }
/* -mpcrel requires prefixed load/store addressing. */ /* -mprefixed-addr (and hence -mpcrel) requires -mcpu=future. */
if (TARGET_PCREL && !TARGET_PREFIXED_ADDR) if (TARGET_PREFIXED_ADDR && !TARGET_FUTURE)
{ {
if ((rs6000_isa_flags_explicit & OPTION_MASK_PCREL) != 0) 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. */ /* -mpcrel requires prefixed load/store addressing. */
if (TARGET_PREFIXED_ADDR && !TARGET_FUTURE) if (TARGET_PCREL && !TARGET_PREFIXED_ADDR)
{ {
if ((rs6000_isa_flags_explicit & OPTION_MASK_PCREL) != 0) 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. */ /* Print the options after updating the defaults. */
...@@ -37155,6 +37157,7 @@ rs6000_disable_incompatible_switches (void) ...@@ -37155,6 +37157,7 @@ rs6000_disable_incompatible_switches (void)
const HOST_WIDE_INT dep_flags; /* flags that depend on this option. */ const HOST_WIDE_INT dep_flags; /* flags that depend on this option. */
const char *const name; /* name of the switch. */ const char *const name; /* name of the switch. */
} flags[] = { } flags[] = {
{ OPTION_MASK_FUTURE, OTHER_FUTURE_MASKS, "future" },
{ OPTION_MASK_P9_VECTOR, OTHER_P9_VECTOR_MASKS, "power9-vector" }, { OPTION_MASK_P9_VECTOR, OTHER_P9_VECTOR_MASKS, "power9-vector" },
{ OPTION_MASK_P8_VECTOR, OTHER_P8_VECTOR_MASKS, "power8-vector" }, { OPTION_MASK_P8_VECTOR, OTHER_P8_VECTOR_MASKS, "power8-vector" },
{ OPTION_MASK_VSX, OTHER_VSX_VECTOR_MASKS, "vsx" }, { OPTION_MASK_VSX, OTHER_VSX_VECTOR_MASKS, "vsx" },
2019-06-11 Michael Meissner <meissner@linux.ibm.com>
* 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 <marc.glisse@inria.fr> 2019-06-11 Marc Glisse <marc.glisse@inria.fr>
* gcc.dg/tree-ssa/cmpexactdiv-5.c: New file. * gcc.dg/tree-ssa/cmpexactdiv-5.c: New file.
......
/* { dg-do compile } */ /* { 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_elfv2 } */
/* { dg-require-effective-target powerpc_future_ok } */ /* { dg-require-effective-target powerpc_future_ok } */
/* Ensure we generate ".localentry fn,1" for both leaf and non-leaf /* Ensure we generate ".localentry fn,1" for both leaf and non-leaf functions.
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); extern int y (int);
......
...@@ -3,10 +3,12 @@ ...@@ -3,10 +3,12 @@
/* { dg-require-effective-target powerpc_future_ok } */ /* { dg-require-effective-target powerpc_future_ok } */
/* { dg-options "-O2 -mdejagnu-cpu=future" } */ /* { 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; } int localentry1 () { return 5; }
#pragma GCC target ("cpu=power9") #pragma GCC target ("cpu=power9,no-pcrel")
int localentry2 () { return 5; } int localentry2 () { return 5; }
/* { dg-final { scan-assembler {\.localentry\tlocalentry1,1\M} } } */ /* { dg-final { scan-assembler {\.localentry\tlocalentry1,1\M} } } */
......
/* { dg-do compile } */ /* { 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_elfv2 } */
/* { dg-require-effective-target powerpc_future_ok } */ /* { dg-require-effective-target powerpc_future_ok } */
/* Test that calls generated from PC-relative code are /* Test that calls generated from PC-relative code are annotated with @notoc.
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 int yy0 (int);
extern void yy1 (int); extern void yy1 (int);
......
...@@ -3,9 +3,12 @@ ...@@ -3,9 +3,12 @@
/* { dg-require-effective-target powerpc_elfv2 } */ /* { dg-require-effective-target powerpc_elfv2 } */
/* { dg-require-effective-target powerpc_future_ok } */ /* { dg-require-effective-target powerpc_future_ok } */
/* Test that potential sibcalls are not generated when the caller preserves /* Test that potential sibcalls are not generated when the caller preserves the
the TOC and the callee doesn't, or vice versa. */ 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 x (void) __attribute__((noinline));
int y (void) __attribute__((noinline)); int y (void) __attribute__((noinline));
int xx (void) __attribute__((noinline)); int xx (void) __attribute__((noinline));
...@@ -25,7 +28,7 @@ int sib_call (void) ...@@ -25,7 +28,7 @@ int sib_call (void)
return x (); return x ();
} }
#pragma GCC target ("cpu=power9") #pragma GCC target ("cpu=power9,no-pcrel")
int normal_call (void) int normal_call (void)
{ {
return y (); return y ();
...@@ -36,7 +39,7 @@ int xx (void) ...@@ -36,7 +39,7 @@ int xx (void)
return 1; return 1;
} }
#pragma GCC target ("cpu=future") #pragma GCC target ("cpu=future,pcrel")
int notoc_call (void) int notoc_call (void)
{ {
return xx (); return xx ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment