From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1464) id C6AA53888825; Fri, 18 Mar 2022 19:10:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C6AA53888825 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Peter Bergner To: gcc-cvs@gcc.gnu.org Subject: [gcc r11-9668] rs6000: Allow -mlong-double-64 after -mabi={ibm, ieee}longdouble [PR104208, PR87496] X-Act-Checkin: gcc X-Git-Author: Peter Bergner X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 67e70a1a48ebf7db44710f3b022465ec38dfe5aa X-Git-Newrev: 51a34fdff2af99e2bb096436d6872c8ea434d177 Message-Id: <20220318191019.C6AA53888825@sourceware.org> Date: Fri, 18 Mar 2022 19:10:19 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Mar 2022 19:10:19 -0000 https://gcc.gnu.org/g:51a34fdff2af99e2bb096436d6872c8ea434d177 commit r11-9668-g51a34fdff2af99e2bb096436d6872c8ea434d177 Author: Peter Bergner 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 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;