On 11/28/18 3:27 PM, Peter Bergner wrote:
> gcc/
>       PR target/87496
>       * config/rs6000/rs6000.c (rs6000_option_override_internal): Disallow
>       -mabi=ieeelongdouble without both -mpopcntd and -mvsx.

So this "fix" ended up accidentally disallowing -mabi=ibmlongdouble as well,
which is wrong.  I need to look at not only whether the variable
global_options_set.x_rs6000_ieeequad is set, which tells us whether we
used -mabi={ibm,ieee}longdouble, but whether we actually enabled ieee128.
The patch below fixes that oversight.  As we talked offline, we also should
not allow either -mabi={ibm,ieee}longdouble with -mlong-double-64, since
they are conflicting options.  I have added code to test for that as well.
I have also added extra test cases to test for those.

Is this ok for mainline once bootstrap and regtesting come back clean?
Since I backported the earlier fix to GCC8, I'd like to backport this
there too.

Peter


gcc/
        PR target/87496
        * config/rs6000/rs6000.c (rs6000_option_override_internal): Disallow
        -mabi=ieeelongdouble and -mabi=ibmlongdouble without -mlong-double-128.
        Do not error for -mabi=ibmlongdouble and no ISA 2.06 support.

gcc/testsuite/
        PR target/87496
        * gcc.target/powerpc/pr87496.c: Rename from this...
        * gcc.target/powerpc/pr87496-1.c: ...to this.  Update comment.
        * gcc.target/powerpc/pr87496-2.c: New test.
        * gcc.target/powerpc/pr87496-3.c: New test.

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 266792)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -4282,6 +4282,13 @@ rs6000_option_override_internal (bool gl
     }
   else if (rs6000_long_double_type_size == 128)
     rs6000_long_double_type_size = FLOAT_PRECISION_TFmode;
+  else if (global_options_set.x_rs6000_ieeequad)
+    {
+      if (global_options.x_rs6000_ieeequad)
+       error ("%qs requires %qs", "-mabi=ieeelongdouble", "-mlong-double-128");
+      else
+       error ("%qs requires %qs", "-mabi=ibmlongdouble", "-mlong-double-128");
+    }
 
   /* Set -mabi=ieeelongdouble on some old targets.  In the future, power server
      systems will also set long double to be IEEE 128-bit.  AIX and Darwin
@@ -4293,7 +4300,8 @@ rs6000_option_override_internal (bool gl
 
   else
     {
-      if (!TARGET_POPCNTD || !TARGET_VSX)
+      if (global_options.x_rs6000_ieeequad
+         && (!TARGET_POPCNTD || !TARGET_VSX))
        error ("%qs requires full ISA 2.06 support", "-mabi=ieeelongdouble");
 
       if (rs6000_ieeequad != TARGET_IEEEQUAD_DEFAULT && TARGET_LONG_DOUBLE_128)
Index: gcc/testsuite/gcc.target/powerpc/pr87496-1.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pr87496-1.c        (revision 266792)
+++ gcc/testsuite/gcc.target/powerpc/pr87496-1.c        (working copy)
@@ -1,4 +1,4 @@
-/* PR target/87496.c */
+/* PR target/87496 */
 /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { 
"-mcpu=power7" } } */
Index: gcc/testsuite/gcc.target/powerpc/pr87496-2.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pr87496-2.c        (nonexistent)
+++ gcc/testsuite/gcc.target/powerpc/pr87496-2.c        (working copy)
@@ -0,0 +1,9 @@
+/* PR target/87496 */
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { 
"-mcpu=power7" } } */
+/* { dg-options "-O2 -mcpu=power7 -mabi=ieeelongdouble -mlong-double-64 
-Wno-psabi" } */
+
+int i;
+
+/* { dg-error "'-mabi=ieeelongdouble' requires '-mlong-double-128'" "PR87496" 
{ target *-*-* } 0 } */
Index: gcc/testsuite/gcc.target/powerpc/pr87496-3.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pr87496-3.c        (nonexistent)
+++ gcc/testsuite/gcc.target/powerpc/pr87496-3.c        (working copy)
@@ -0,0 +1,8 @@
+/* PR target/87496 */
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } } */
+/* { dg-options "-O2 -mabi=ibmlongdouble -mlong-double-64 -Wno-psabi" } */
+
+int i;
+
+/* { dg-error "'-mabi=ibmlongdouble' requires '-mlong-double-128'" "PR87496" { 
target *-*-* } 0 } */
Index: gcc/testsuite/gcc.target/powerpc/pr87496.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pr87496.c  (revision 266792)
+++ gcc/testsuite/gcc.target/powerpc/pr87496.c  (nonexistent)
@@ -1,10 +0,0 @@
-/* PR target/87496.c */
-/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
-/* { dg-skip-if "" { powerpc*-*-darwin* } } */
-/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { 
"-mcpu=power7" } } */
-/* { dg-require-effective-target longdouble128 } */
-/* { dg-options "-O2 -mcpu=power7 -mabi=ieeelongdouble -mno-popcntd 
-Wno-psabi" } */
-
-int i;
-
-/* { dg-error "'-mabi=ieeelongdouble' requires full ISA 2.06 support" 
"PR87496" { target *-*-* } 0 } */

Reply via email to