public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r11-9668] rs6000: Allow -mlong-double-64 after -mabi={ibm, ieee}longdouble [PR104208, PR87496]
@ 2022-03-18 19:10 Peter Bergner
0 siblings, 0 replies; only message in thread
From: Peter Bergner @ 2022-03-18 19:10 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:51a34fdff2af99e2bb096436d6872c8ea434d177
commit r11-9668-g51a34fdff2af99e2bb096436d6872c8ea434d177
Author: Peter Bergner <bergner@linux.ibm.com>
Date: Fri Mar 18 14:08:44 2022 -0500
rs6000: Allow -mlong-double-64 after -mabi={ibm,ieee}longdouble [PR104208, PR87496]
The glibc build is showing a build error due to extra "error" checking from my
PR87496 fix. That checking was overeager, disallowing setting the long double
size to 64-bits if the 128-bit long double ABI had already been specified.
Now we only emit an error if we specify a 128-bit long double ABI if our
long double size is not 128 bits. This also fixes an erroneous error when
-mabi=ieeelongdouble is used and ISA 2.06 is not enabled, but the long double
size has been changed to 64 bits.
2022-03-04 Peter Bergner <bergner@linux.ibm.com>
gcc/
PR target/87496
PR target/104208
* config/rs6000/rs6000.c (rs6000_option_override_internal): Make the
ISA 2.06 requirement for -mabi=ieeelongdouble conditional on
-mlong-double-128.
Move the -mabi=ieeelongdouble and -mabi=ibmlongdouble error checking
from here...
* common/config/rs6000/rs6000-common.c (rs6000_handle_option):
... to here.
gcc/testsuite/
PR target/87496
PR target/104208
* gcc.target/powerpc/pr104208-1.c: New test.
* gcc.target/powerpc/pr104208-2.c: Likewise.
* gcc.target/powerpc/pr87496-2.c: Swap long double options to trigger
the expected error.
* gcc.target/powerpc/pr87496-3.c: Likewise.
(cherry picked from commit cb16bc3b5f34733ef9bbf8d2e3acacdecb099a62)
Diff:
---
gcc/common/config/rs6000/rs6000-common.c | 10 ++++++++++
gcc/config/rs6000/rs6000.c | 11 ++---------
gcc/testsuite/gcc.target/powerpc/pr104208-1.c | 9 +++++++++
gcc/testsuite/gcc.target/powerpc/pr104208-2.c | 10 ++++++++++
gcc/testsuite/gcc.target/powerpc/pr87496-2.c | 2 +-
gcc/testsuite/gcc.target/powerpc/pr87496-3.c | 2 +-
6 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/gcc/common/config/rs6000/rs6000-common.c b/gcc/common/config/rs6000/rs6000-common.c
index 80abdf3dcc2..5d41c3f5a11 100644
--- a/gcc/common/config/rs6000/rs6000-common.c
+++ b/gcc/common/config/rs6000/rs6000-common.c
@@ -227,6 +227,16 @@ rs6000_handle_option (struct gcc_options *opts, struct gcc_options *opts_set,
}
break;
+ case OPT_mabi_ibmlongdouble:
+ case OPT_mabi_ieeelongdouble:
+ if (opts->x_rs6000_long_double_type_size == 64)
+ {
+ error_at (loc, "option %<%s%> requires %<-mlong-double-128%>",
+ decoded->orig_option_with_args_text);
+ return true;
+ }
+ break;
+
case OPT_mrecip:
opts->x_rs6000_recip_name = (value) ? "default" : "none";
break;
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8c221428cb9..1b482a8d904 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4174,13 +4174,6 @@ rs6000_option_override_internal (bool global_init_p)
}
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
@@ -4190,13 +4183,13 @@ rs6000_option_override_internal (bool global_init_p)
if (!global_options_set.x_rs6000_ieeequad)
rs6000_ieeequad = TARGET_IEEEQUAD_DEFAULT;
- else
+ else if (TARGET_LONG_DOUBLE_128)
{
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)
+ if (rs6000_ieeequad != TARGET_IEEEQUAD_DEFAULT)
{
/* Determine if the user can change the default long double type at
compilation time. Only C and C++ support this, and you need GLIBC
diff --git a/gcc/testsuite/gcc.target/powerpc/pr104208-1.c b/gcc/testsuite/gcc.target/powerpc/pr104208-1.c
new file mode 100644
index 00000000000..39d46027a19
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr104208-1.c
@@ -0,0 +1,9 @@
+/* PR target/104208 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-128 -mabi=ibmlongdouble -mlong-double-64 -Wno-psabi" } */
+
+/* Verify we do not emit an error with the options above. It is allowed
+ to reset the long double size to 64-bits after a 128-bit long double
+ ABI has been selected. */
+
+int i;
diff --git a/gcc/testsuite/gcc.target/powerpc/pr104208-2.c b/gcc/testsuite/gcc.target/powerpc/pr104208-2.c
new file mode 100644
index 00000000000..4e8ab5b099f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr104208-2.c
@@ -0,0 +1,10 @@
+/* PR target/104208 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-128 -mabi=ieeelongdouble -mlong-double-64 -mno-vsx -Wno-psabi" } */
+
+/* Verify we do not emit an error with the options above. IEEE 128-bit
+ long double requires VSX, so using -mno-vsx would normally generate
+ an error. However, if we have changed to a 64-bit long double, then
+ we should allow it. */
+
+int i;
diff --git a/gcc/testsuite/gcc.target/powerpc/pr87496-2.c b/gcc/testsuite/gcc.target/powerpc/pr87496-2.c
index 26c07ebb900..f9dc6426418 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr87496-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr87496-2.c
@@ -1,7 +1,7 @@
/* PR target/87496 */
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
-/* { dg-options "-O2 -mdejagnu-cpu=power7 -mabi=ieeelongdouble -mlong-double-64 -Wno-psabi" } */
+/* { dg-options "-O2 -mdejagnu-cpu=power7 -mlong-double-64 -mabi=ieeelongdouble -Wno-psabi" } */
int i;
diff --git a/gcc/testsuite/gcc.target/powerpc/pr87496-3.c b/gcc/testsuite/gcc.target/powerpc/pr87496-3.c
index 1be39975f64..39fb73cbb32 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr87496-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr87496-3.c
@@ -1,7 +1,7 @@
/* PR target/87496 */
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
-/* { dg-options "-O2 -mabi=ibmlongdouble -mlong-double-64 -Wno-psabi" } */
+/* { dg-options "-O2 -mlong-double-64 -mabi=ibmlongdouble -Wno-psabi" } */
int i;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-03-18 19:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-18 19:10 [gcc r11-9668] rs6000: Allow -mlong-double-64 after -mabi={ibm, ieee}longdouble [PR104208, PR87496] Peter Bergner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).