On Thu, 2020-10-22 at 18:11 -0400, Michael Meissner via Gcc-patches wrote: > PowerPC: Update __float128 and __ibm128 error messages. > > I have split all of these patches into separate patches to hopefully get them > into the tree. > > This patch attempts to make the error messages for intermixing IEEE 128-bit > floating point with IBM 128-bit extended double types to be clearer if the > long > double type uses the IEEE 128-bit format. > > I have tested this patch with bootstrap builds on a little endian power9 > system > running Linux. With the other patches, I have built two full bootstrap builds > using this patch and the patches after this patch. One build used the current > default for long double (IBM extended double) and the other build switched the > default to IEEE 128-bit. I used the Advance Toolchain AT 14.0 compiler as the > library used by this compiler. There are no regressions between the tests. > There are 3 fortran benchmarks (ieee/large_2.f90, default_format_2.f90, and > default_format_denormal_2.f90) that now pass. > > Can I install this into the trunk? > > We have gotten some requests to back port these changes to GCC 10.x. At the > moment, I am not planning to do the back port, but I may need to in the > future. > > gcc/ > 2020-10-22 Michael Meissner <meiss...@linux.ibm.com> > > * config/rs6000/rs6000.c (rs6000_invalid_binary_op): Update error > messages about mixing IBM long double and IEEE 128-bit. > > gcc/testsuite/ > 2020-10-22 Michael Meissner <meiss...@linux.ibm.com> > > * gcc.target/powerpc/bfp/scalar-extract-exp-4.c: Update failure > messages. > * gcc.target/powerpc/bfp/scalar-extract-sig-4.c: Update failure > messages. > * gcc.target/powerpc/bfp/scalar-test-data-class-11.c: Update > failure messages. > * gcc.target/powerpc/bfp/scalar-test-neg-5.c: Update failure > messages. > * gcc.target/powerpc/float128-mix-2.c: New test. > * gcc.target/powerpc/float128-mix-3.c: New test. > * gcc.target/powerpc/float128-mix.c: Update failure messages. > --- > gcc/config/rs6000/rs6000.c | 20 ++++--------------- > .../powerpc/bfp/scalar-extract-exp-4.c | 4 +--- > .../powerpc/bfp/scalar-extract-sig-4.c | 2 +- > .../powerpc/bfp/scalar-test-data-class-11.c | 2 +- > .../powerpc/bfp/scalar-test-neg-5.c | 2 +- > .../gcc.target/powerpc/float128-mix-2.c | 17 ++++++++++++++++ > .../gcc.target/powerpc/float128-mix-3.c | 17 ++++++++++++++++ > .../gcc.target/powerpc/float128-mix.c | 19 ++++++++++-------- > 8 files changed, 53 insertions(+), 30 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/powerpc/float128-mix-2.c > create mode 100644 gcc/testsuite/gcc.target/powerpc/float128-mix-3.c >
ok > diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c > index 8c2544ee88d..50039c0a53d 100644 > --- a/gcc/config/rs6000/rs6000.c > +++ b/gcc/config/rs6000/rs6000.c > @@ -14386,22 +14386,10 @@ rs6000_invalid_binary_op (int op ATTRIBUTE_UNUSED, > > if (!TARGET_FLOAT128_CVT) > { > - if ((mode1 == KFmode && mode2 == IFmode) > - || (mode1 == IFmode && mode2 == KFmode)) > - return N_("__float128 and __ibm128 cannot be used in the same " > - "expression"); > - > - if (TARGET_IEEEQUAD > - && ((mode1 == IFmode && mode2 == TFmode) > - || (mode1 == TFmode && mode2 == IFmode))) > - return N_("__ibm128 and long double cannot be used in the same " > - "expression"); > - > - if (!TARGET_IEEEQUAD > - && ((mode1 == KFmode && mode2 == TFmode) > - || (mode1 == TFmode && mode2 == KFmode))) > - return N_("__float128 and long double cannot be used in the same " > - "expression"); > + if ((FLOAT128_IEEE_P (mode1) && FLOAT128_IBM_P (mode2)) > + || (FLOAT128_IBM_P (mode1) && FLOAT128_IEEE_P (mode2))) > + return N_("Invalid mixing of IEEE 128-bit and IBM 128-bit floating " > + "point types"); ok > } > > return NULL; > diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c > b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c > index 850ff620490..2065a287bb3 100644 > --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c > +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c > @@ -11,7 +11,5 @@ get_exponent (__ieee128 *p) > { > __ieee128 source = *p; > > - return __builtin_vec_scalar_extract_exp (source); /* { dg-error > "'__builtin_vsx_scalar_extract_expq' requires" } */ > + return __builtin_vec_scalar_extract_exp (source); /* { dg-error > "'__builtin_vsx_scalar_extract_exp.*' requires" } */ > } > - > - ok > diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c > b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c > index 32a53c6fffd..37bc8332961 100644 > --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c > +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c > @@ -11,5 +11,5 @@ get_significand (__ieee128 *p) > { > __ieee128 source = *p; > > - return __builtin_vec_scalar_extract_sig (source); /* { dg-error > "'__builtin_vsx_scalar_extract_sigq' requires" } */ > + return __builtin_vec_scalar_extract_sig (source); /* { dg-error > "'__builtin_vsx_scalar_extract_sig.*' requires" } */ > } ok > diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c > b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c > index 7c6fca2b729..ec3118792c4 100644 > --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c > +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c > @@ -10,5 +10,5 @@ test_data_class (__ieee128 *p) > { > __ieee128 source = *p; > > - return __builtin_vec_scalar_test_data_class (source, 3); /* { dg-error > "'__builtin_vsx_scalar_test_data_class_qp' requires" } */ > + return __builtin_vec_scalar_test_data_class (source, 3); /* { dg-error > "'__builtin_vsx_scalar_test_data_class_.*' requires" } */ > } > diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c > b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c > index bab86040a7b..eb9cacf8c50 100644 > --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c > +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c > @@ -10,5 +10,5 @@ test_neg (__ieee128 *p) > { > __ieee128 source = *p; > > - return __builtin_vec_scalar_test_neg_qp (source); /* { dg-error > "'__builtin_vsx_scalar_test_neg_qp' requires" } */ > + return __builtin_vec_scalar_test_neg_qp (source); /* { dg-error > "'__builtin_vsx_scalar_test_neg_.*' requires" } */ > } ok > diff --git a/gcc/testsuite/gcc.target/powerpc/float128-mix-2.c > b/gcc/testsuite/gcc.target/powerpc/float128-mix-2.c > new file mode 100644 > index 00000000000..b88102118a9 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/float128-mix-2.c > @@ -0,0 +1,17 @@ > +/* { dg-do compile { target { powerpc*-*-linux* } } } */ > +/* { dg-require-effective-target ppc_float128_sw } */ > +/* { dg-options "-O2 -mvsx -Wno-psabi -mabi=ieeelongdouble > -mlong-double-128" } */ > + > +/* Test to make sure that __float128 and long double do not generate errors > if > + long double uses the IEEE 128-bit format. */ > +__float128 > +add (__float128 a, long double b) > +{ > + return a+b; > +} > + > +long double > +sub (long double a, __float128 b) > +{ > + return a-b; > +} > diff --git a/gcc/testsuite/gcc.target/powerpc/float128-mix-3.c > b/gcc/testsuite/gcc.target/powerpc/float128-mix-3.c > new file mode 100644 > index 00000000000..13fbe7fd08a > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/float128-mix-3.c > @@ -0,0 +1,17 @@ > +/* { dg-do compile { target { powerpc*-*-linux* } } } */ > +/* { dg-require-effective-target ppc_float128_sw } */ > +/* { dg-options "-O2 -mvsx" } */ > + > +/* Test to make sure that __float128 and __ibm128 cannot be combined > + together. */ > +__float128 > +add (__float128 a, __ibm128 b) > +{ > + return a+b; /* { dg-error "IEEE 128-bit and IBM 128-bit floating > point" } */ > +} > + > +__ibm128 > +sub (__ibm128 a, __float128 b) > +{ > + return a-b; /* { dg-error "IEEE 128-bit and IBM 128-bit floating > point" } */ > +} ok > diff --git a/gcc/testsuite/gcc.target/powerpc/float128-mix.c > b/gcc/testsuite/gcc.target/powerpc/float128-mix.c > index 71f840c9490..eb8e6ac27bc 100644 > --- a/gcc/testsuite/gcc.target/powerpc/float128-mix.c > +++ b/gcc/testsuite/gcc.target/powerpc/float128-mix.c > @@ -1,15 +1,18 @@ > /* { dg-do compile { target { powerpc*-*-linux* } } } */ > -/* { dg-require-effective-target powerpc_vsx_ok } */ > -/* { dg-options "-O2 -mvsx" } */ > +/* { dg-require-effective-target ppc_float128_sw } */ > +/* { dg-options "-O2 -mvsx -Wno-psabi -mabi=ibmlongdouble -mlong-double-128" > } */ > > - > -/* Test to make sure that __float128 and long double cannot be combined > together. */ > -__float128 add (__float128 a, long double b) > +/* Test to make sure that __float128 and long double cannot be combined > + together, when long double uses the IBM extended double format, and > + __float128 uses the IEEE 128-bit format. */ > +__float128 > +add (__float128 a, long double b) > { > - return a+b; /* { dg-error "__float128 and long double cannot be > used in the same expression" } */ > + return a+b; /* { dg-error "IEEE 128-bit and IBM 128-bit floating > point" } */ > } > > -__ibm128 sub (long double a, __float128 b) > +long double > +sub (long double a, __float128 b) > { > - return a-b; /* { dg-error "__float128 and long double cannot be > used in the same expression" } */ > + return a-b; /* { dg-error "IEEE 128-bit and IBM 128-bit floating > point" } */ > } ok. All lgtm, thanks -Will > -- > 2.22.0 > >