[RS6000] -mno-vsx should force -mno-power9-dform
authorAlan Modra <amodra@gmail.com>
Thu, 14 Jul 2016 04:26:36 +0000 (13:56 +0930)
committerAlan Modra <amodra@gcc.gnu.org>
Thu, 14 Jul 2016 04:26:36 +0000 (13:56 +0930)
PR target/71733
gcc/
* config/rs6000/rs6000.c (rs6000_option_override_internal): Deal
with p9_vector override before power9-dform override.
gcc/testsuite/
* gcc.target/powerpc/p9-novsx.c: New.

From-SVN: r238326

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/p9-novsx.c [new file with mode: 0644]

index 134db049278c76744da1fad46dfd01dabc0c73a6..a1cf7424d9dfa6feaa759aee1ed98549cfa081f9 100644 (file)
@@ -1,3 +1,9 @@
+2016-07-14  Alan Modra  <amodra@gmail.com>
+
+       PR target/71733
+       * config/rs6000/rs6000.c (rs6000_option_override_internal): Deal
+       with p9_vector override before power9-dform override.
+
 2016-07-13  Andi Kleen  <ak@linux.intel.com>
 
        * value-prof.c (gimple_value_profile_transformations): Don't run
index 99a2e36911b8e8b4d6a11523374958de7d93566c..63655b1d267a86bd0facfec8dfc250bd30be89af 100644 (file)
@@ -4256,6 +4256,14 @@ rs6000_option_override_internal (bool global_init_p)
       && !(rs6000_isa_flags_explicit & OPTION_MASK_TOC_FUSION))
     rs6000_isa_flags |= OPTION_MASK_TOC_FUSION;
 
+  /* ISA 3.0 vector instructions include ISA 2.07.  */
+  if (TARGET_P9_VECTOR && !TARGET_P8_VECTOR)
+    {
+      if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR)
+       error ("-mpower9-vector requires -mpower8-vector");
+      rs6000_isa_flags &= ~OPTION_MASK_P9_VECTOR;
+    }
+
   /* -mpower9-dform turns on both -mpower9-dform-scalar and
       -mpower9-dform-vector.  */
   if (TARGET_P9_DFORM_BOTH > 0)
@@ -4298,14 +4306,6 @@ rs6000_option_override_internal (bool global_init_p)
       rs6000_isa_flags &= ~OPTION_MASK_P9_DFORM_SCALAR;
     }
 
-  /* ISA 3.0 vector instructions include ISA 2.07.  */
-  if (TARGET_P9_VECTOR && !TARGET_P8_VECTOR)
-    {
-      if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR)
-       error ("-mpower9-vector requires -mpower8-vector");
-      rs6000_isa_flags &= ~OPTION_MASK_P9_VECTOR;
-    }
-
   /* There have been bugs with -mvsx-timode that don't show up with -mlra,
      but do show up with -mno-lra.  Given -mlra will become the default once
      PR 69847 is fixed, turn off the options with problems by default if
index 6119421f7b43c93fbc74a1e696d1383150c4624c..4591803c5fac69f6880113dc041b1f6bd0a1b35a 100644 (file)
@@ -1,3 +1,8 @@
+2016-07-14  Alan Modra  <amodra@gmail.com>
+
+       PR target/71733
+       * gcc.target/powerpc/p9-novsx.c: New.
+
 2016-07-13  Andi Kleen  <ak@linux.intel.com>
 
        * g++.dg/tree-prof/indir-call-prof.C: Basic fixes for autofdo.
diff --git a/gcc/testsuite/gcc.target/powerpc/p9-novsx.c b/gcc/testsuite/gcc.target/powerpc/p9-novsx.c
new file mode 100644 (file)
index 0000000..7e41030
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-options "-mcpu=power9 -mno-vsx -O1" } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-final { scan-assembler-times "lvx %?v?2,%?r?3" 1 } } */
+/* { dg-final { scan-assembler-times "stvx %?v?2,%?r?3" 1 } } */
+
+/* PR target/71733.  */
+typedef __attribute__ ((altivec(vector__), aligned(16))) unsigned char vec_t;
+
+vec_t
+f1 (vec_t *dst)
+{
+  return dst[1];
+}
+
+void
+f2 (vec_t *dst, vec_t src)
+{
+  dst[1] = src;
+}