Do not enable -mpcrel by default at the current time
authorMichael Meissner <meissner@linux.ibm.com>
Tue, 11 Jun 2019 17:36:58 +0000 (17:36 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Tue, 11 Jun 2019 17:36:58 +0000 (17:36 +0000)
From-SVN: r272165

gcc/ChangeLog
gcc/config/rs6000/rs6000-cpus.def
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/localentry-1.c
gcc/testsuite/gcc.target/powerpc/localentry-detect-1.c
gcc/testsuite/gcc.target/powerpc/notoc-direct-1.c
gcc/testsuite/gcc.target/powerpc/pcrel-sibcall-1.c

index 95cdab713ca3d22b5d04ca2e74a16597d5ff4a70..bf0dc947e8fa13fd5387a8ec030f45d66a85cbac 100644 (file)
@@ -1,3 +1,13 @@
+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>
 
        PR target/90811
index 14f8a0ef7464ac82bcc2b258f50eaebbd695d8d3..972d19fabc76d7a4890ca3ea253aa847bcb06c18 100644 (file)
                                 | 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.  */
index 91fafc4e7664794052fb4adef8337eae2bb20440..f17faebff6a7b10f7c0eee9bd959cba2136cc7d0 100644 (file)
@@ -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"           },
index 1d543337d7abcc71b72da64488b1572b51a59f56..d5b92198587caf7c3aa317c82b14ddd65280d167 100644 (file)
@@ -1,3 +1,12 @@
+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>
 
        * gcc.dg/tree-ssa/cmpexactdiv-5.c: New file.
index dc4867d0a3c3902a823697754faad68c97d063d2..068b0c080bb7036470998ce38587379d0149753f 100644 (file)
@@ -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);
 
index 70b18ff0aca9f1eb632fe51c9cdda0e21d107bd9..e67e7f824f8e55916243db5e3a7d5f4afdefbaed 100644 (file)
@@ -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} } } */
index 0917f307e65ac0b4b9fee1caddfa04f47d02848d..8603ff7706b8c4a31b4ecd0c2f12c18995bb259a 100644 (file)
@@ -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);
index bd7a0a9bcda25bcecb9d201ca5061052cc76b074..0cb40d45ace5dc204379b080a10a3a073c638464 100644 (file)
@@ -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 ();