[gcc(refs/users/meissner/heads/work098)] Revert patch.

Michael Meissner meissner@gcc.gnu.org
Sat Aug 20 22:21:46 GMT 2022


https://gcc.gnu.org/g:cef601a3a7dea2889593522d9f0fcbcd00a785b8

commit cef601a3a7dea2889593522d9f0fcbcd00a785b8
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Sat Aug 20 18:20:56 2022 -0400

    Revert patch.
    
    2022-08-20   Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            Revert patch.
            * config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Always use the
            _Float128 type for __float128.
            (rs6000_expand_builtin): If the predicate failed because the modes were
            different, use convert_move to load up the value instead of
            copy_to_mode_reg.
            * ChangeLog.meissner: Update.
    
    gcc/testsuite/
    
            Revert patch.
            * gcc.target/powerpc/float128-hw12.c: New test.
            * gcc.target/powerpc/float128-hw13.c: Likewise.

Diff:
---
 gcc/ChangeLog.meissner                           |  35 ------
 gcc/config/rs6000/rs6000-builtin.cc              |  32 +-----
 gcc/testsuite/gcc.target/powerpc/float128-hw12.c | 137 -----------------------
 gcc/testsuite/gcc.target/powerpc/float128-hw13.c | 137 -----------------------
 4 files changed, 5 insertions(+), 336 deletions(-)

diff --git a/gcc/ChangeLog.meissner b/gcc/ChangeLog.meissner
index fb172190f81..2a32a0ef837 100644
--- a/gcc/ChangeLog.meissner
+++ b/gcc/ChangeLog.meissner
@@ -1,38 +1,3 @@
-==================== work098, patch #21
-
-Make __float128 use the _Float128 type.
-
-Currently GCC uses the long double type node for __float128 if long double is
-IEEE 128-bit.  It did not use the node for _Float128.
-
-Problems showed up if you call the nansq function to make a signaling NaN (nansq
-is mapped to nansf128).  Because the type node for _Float128 is different from
-__float128, the machine independent code converts signaling NaNs to quiet NaNs
-if the types are  not compatible.  The following tests used to fail when run on
-a system where long double is IEEE 128-bit:
-
-	gcc.dg/torture/float128-nan.c
-	gcc.target/powerpc/nan128-1.c
-
-This patch makes both __float128 and _Float128 use the same type node.  Both of
-these types will continue to use the TFmode when long double is IEEE 128-bit,
-and KFmode otherwise.
-
-2022-08-20   Michael Meissner  <meissner@linux.ibm.com>
-
-gcc/
-
-	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Always use the
-	_Float128 type for __float128.
-	(rs6000_expand_builtin): If the predicate failed because the modes were
-	different, use convert_move to load up the value instead of
-	copy_to_mode_reg.
-
-gcc/testsuite/
-
-	* gcc.target/powerpc/float128-hw12.c: New test.
-	* gcc.target/powerpc/float128-hw13.c: Likewise.
-
 ==================== work098, patch #20 was reverted.
 
 ==================== work098, patch #19 was reverted.
diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index 4e160f3f478..70680890415 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -733,15 +733,10 @@ rs6000_init_builtins (void)
 
   if (TARGET_FLOAT128_TYPE)
     {
-      /* In the past we used long_double_type_node when long double was IEEE
-	 128-bit.  However, this means that the _Float128 type
-	 (i.e. float128_type_node) is a different type from __float128
-	 (i.e. ieee128_float_type_nonde).  This leads to some corner cases,
-	 such as processing signaling NaNs with the nansf128 built-in function
-	 (which returns a _Float128 value) and assign it to a long double or
-	 __float128 value.  The two explicit IEEE 128-bit types should always
-	 use the same internal type.  */
-      ieee128_float_type_node = float128_type_node;
+      if (TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128)
+	ieee128_float_type_node = long_double_type_node;
+      else
+	ieee128_float_type_node = float128_type_node;
       t = build_qualified_type (ieee128_float_type_node, TYPE_QUAL_CONST);
       lang_hooks.types.register_builtin_type (ieee128_float_type_node,
 					      "__ieee128");
@@ -3622,24 +3617,7 @@ rs6000_expand_builtin (tree exp, rtx target, rtx /* subtarget */,
 
   for (int i = 0; i < nargs; i++)
     if (!insn_data[icode].operand[i+k].predicate (op[i], mode[i+k]))
-      {
-	/* If the predicate failed because the modes are different, do a
-	   convert instead of copy_to_mode_reg, since copy_to_mode_reg will
-	   abort in this case.  The modes might be different if we have two
-	   different 128-bit floating point modes (i.e. KFmode and TFmode if
-	   long double is IEEE 128-bit and IFmode and TFmode if long double is
-	   IBM 128-bit).  */
-	machine_mode mode_insn = mode[i+k];
-	machine_mode mode_op = GET_MODE (op[i]);
-	if (mode_insn != mode_op && mode_op != VOIDmode)
-	  {
-	    rtx tmp = gen_reg_rtx (mode_insn);
-	    convert_move (tmp, op[i], 0);
-	    op[i] = tmp;
-	  }
-	else
-	  op[i] = copy_to_mode_reg (mode_insn, op[i]);
-      }
+      op[i] = copy_to_mode_reg (mode[i+k], op[i]);
 
   rtx pat;
 
diff --git a/gcc/testsuite/gcc.target/powerpc/float128-hw12.c b/gcc/testsuite/gcc.target/powerpc/float128-hw12.c
deleted file mode 100644
index d08b4cbc883..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/float128-hw12.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* { dg-do compile { target lp64 } } */
-/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-require-effective-target float128 } */
-/* { dg-options "-mpower9-vector -O2 -mabi=ieeelongdouble -Wno-psabi" } */
-
-/* Insure that the ISA 3.0 IEEE 128-bit floating point built-in functions work
-   with _Float128.  This is the same as float128-hw4.c, except the type
-   _Float128 is used, and the IEEE 128-bit long double ABI is used.  */
-
-#ifndef TYPE
-#define TYPE _Float128
-#endif
-
-unsigned int
-get_double_exponent (double a)
-{
-  return __builtin_vec_scalar_extract_exp (a);
-}
-
-unsigned int
-get_float128_exponent (TYPE a)
-{
-  return __builtin_vec_scalar_extract_exp (a);
-}
-
-unsigned long
-get_double_mantissa (double a)
-{
-  return __builtin_vec_scalar_extract_sig (a);
-}
-
-__uint128_t
-get_float128_mantissa (TYPE a)
-{
-  return __builtin_vec_scalar_extract_sig (a);
-}
-
-double
-set_double_exponent_ulong (unsigned long a, unsigned long e)
-{
-  return __builtin_vec_scalar_insert_exp (a, e);
-}
-
-TYPE
-set_float128_exponent_uint128 (__uint128_t a, unsigned long e)
-{
-  return __builtin_vec_scalar_insert_exp (a, e);
-}
-
-double
-set_double_exponent_double (double a, unsigned long e)
-{
-  return __builtin_vec_scalar_insert_exp (a, e);
-}
-
-TYPE
-set_float128_exponent_float128 (TYPE a, __uint128_t e)
-{
-  return __builtin_vec_scalar_insert_exp (a, e);
-}
-
-TYPE
-sqrt_odd (TYPE a)
-{
-  return __builtin_sqrtf128_round_to_odd (a);
-}
-
-double
-trunc_odd (TYPE a)
-{
-  return __builtin_truncf128_round_to_odd (a);
-}
-
-TYPE
-add_odd (TYPE a, TYPE b)
-{
-  return __builtin_addf128_round_to_odd (a, b);
-}
-
-TYPE
-sub_odd (TYPE a, TYPE b)
-{
-  return __builtin_subf128_round_to_odd (a, b);
-}
-
-TYPE
-mul_odd (TYPE a, TYPE b)
-{
-  return __builtin_mulf128_round_to_odd (a, b);
-}
-
-TYPE
-div_odd (TYPE a, TYPE b)
-{
-  return __builtin_divf128_round_to_odd (a, b);
-}
-
-TYPE
-fma_odd (TYPE a, TYPE b, TYPE c)
-{
-  return __builtin_fmaf128_round_to_odd (a, b, c);
-}
-
-TYPE
-fms_odd (TYPE a, TYPE b, TYPE c)
-{
-  return __builtin_fmaf128_round_to_odd (a, b, -c);
-}
-
-TYPE
-nfma_odd (TYPE a, TYPE b, TYPE c)
-{
-  return -__builtin_fmaf128_round_to_odd (a, b, c);
-}
-
-TYPE
-nfms_odd (TYPE a, TYPE b, TYPE c)
-{
-  return -__builtin_fmaf128_round_to_odd (a, b, -c);
-}
-
-/* { dg-final { scan-assembler 	   {\mxsiexpdp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsiexpqp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsxexpdp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsxexpqp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsxsigdp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsxsigqp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsaddqpo\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsdivqpo\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsmaddqpo\M}  } } */
-/* { dg-final { scan-assembler 	   {\mxsmsubqpo\M}  } } */
-/* { dg-final { scan-assembler 	   {\mxsmulqpo\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsnmaddqpo\M} } } */
-/* { dg-final { scan-assembler 	   {\mxsnmsubqpo\M} } } */
-/* { dg-final { scan-assembler 	   {\mxssqrtqpo\M}  } } */
-/* { dg-final { scan-assembler 	   {\mxssubqpo\M}   } } */
-/* { dg-final { scan-assembler-not {\mbl\M}         } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/float128-hw13.c b/gcc/testsuite/gcc.target/powerpc/float128-hw13.c
deleted file mode 100644
index 51a3cd4802b..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/float128-hw13.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* { dg-do compile { target lp64 } } */
-/* { dg-require-effective-target powerpc_p9vector_ok } */
-/* { dg-require-effective-target float128 } */
-/* { dg-options "-mpower9-vector -O2 -mabi=ibmlongdouble -Wno-psabi" } */
-
-/* Insure that the ISA 3.0 IEEE 128-bit floating point built-in functions work
-   with __float128.  This is the same as float128-hw4.c, except the type
-   __float128 is used, and the IBM 128-bit long double ABI is used.  */
-
-#ifndef TYPE
-#define TYPE __float128
-#endif
-
-unsigned int
-get_double_exponent (double a)
-{
-  return __builtin_vec_scalar_extract_exp (a);
-}
-
-unsigned int
-get_float128_exponent (TYPE a)
-{
-  return __builtin_vec_scalar_extract_exp (a);
-}
-
-unsigned long
-get_double_mantissa (double a)
-{
-  return __builtin_vec_scalar_extract_sig (a);
-}
-
-__uint128_t
-get_float128_mantissa (TYPE a)
-{
-  return __builtin_vec_scalar_extract_sig (a);
-}
-
-double
-set_double_exponent_ulong (unsigned long a, unsigned long e)
-{
-  return __builtin_vec_scalar_insert_exp (a, e);
-}
-
-TYPE
-set_float128_exponent_uint128 (__uint128_t a, unsigned long e)
-{
-  return __builtin_vec_scalar_insert_exp (a, e);
-}
-
-double
-set_double_exponent_double (double a, unsigned long e)
-{
-  return __builtin_vec_scalar_insert_exp (a, e);
-}
-
-TYPE
-set_float128_exponent_float128 (TYPE a, __uint128_t e)
-{
-  return __builtin_vec_scalar_insert_exp (a, e);
-}
-
-TYPE
-sqrt_odd (TYPE a)
-{
-  return __builtin_sqrtf128_round_to_odd (a);
-}
-
-double
-trunc_odd (TYPE a)
-{
-  return __builtin_truncf128_round_to_odd (a);
-}
-
-TYPE
-add_odd (TYPE a, TYPE b)
-{
-  return __builtin_addf128_round_to_odd (a, b);
-}
-
-TYPE
-sub_odd (TYPE a, TYPE b)
-{
-  return __builtin_subf128_round_to_odd (a, b);
-}
-
-TYPE
-mul_odd (TYPE a, TYPE b)
-{
-  return __builtin_mulf128_round_to_odd (a, b);
-}
-
-TYPE
-div_odd (TYPE a, TYPE b)
-{
-  return __builtin_divf128_round_to_odd (a, b);
-}
-
-TYPE
-fma_odd (TYPE a, TYPE b, TYPE c)
-{
-  return __builtin_fmaf128_round_to_odd (a, b, c);
-}
-
-TYPE
-fms_odd (TYPE a, TYPE b, TYPE c)
-{
-  return __builtin_fmaf128_round_to_odd (a, b, -c);
-}
-
-TYPE
-nfma_odd (TYPE a, TYPE b, TYPE c)
-{
-  return -__builtin_fmaf128_round_to_odd (a, b, c);
-}
-
-TYPE
-nfms_odd (TYPE a, TYPE b, TYPE c)
-{
-  return -__builtin_fmaf128_round_to_odd (a, b, -c);
-}
-
-/* { dg-final { scan-assembler 	   {\mxsiexpdp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsiexpqp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsxexpdp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsxexpqp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsxsigdp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsxsigqp\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsaddqpo\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsdivqpo\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsmaddqpo\M}  } } */
-/* { dg-final { scan-assembler 	   {\mxsmsubqpo\M}  } } */
-/* { dg-final { scan-assembler 	   {\mxsmulqpo\M}   } } */
-/* { dg-final { scan-assembler 	   {\mxsnmaddqpo\M} } } */
-/* { dg-final { scan-assembler 	   {\mxsnmsubqpo\M} } } */
-/* { dg-final { scan-assembler 	   {\mxssqrtqpo\M}  } } */
-/* { dg-final { scan-assembler 	   {\mxssubqpo\M}   } } */
-/* { dg-final { scan-assembler-not {\mbl\M}         } } */


More information about the Gcc-cvs mailing list