public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] i386: Fix up types in __builtin_{inf,huge_val,nan{,s},fabs,copysign}q builtins [PR109884]
@ 2023-05-17 18:08 Jakub Jelinek
  2023-05-17 18:30 ` Uros Bizjak
  0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2023-05-17 18:08 UTC (permalink / raw)
  To: Uros Bizjak; +Cc: gcc-patches

Hi!

When _Float128 support has been added to C++ for 13.1,  float128t_type_node
tree has been added - in C float128_type_node and float128t_type_node is
the same and represents both _Float128 and __float128, but in C++ they
are distinct types which have different handling in the FEs.
When doing that change, I mistakenly forgot to change FLOAT128 primitive
type, which is used for the __builtin_{inf,huge_val,nan{,s},fabs,copysign}q
builtins results and some of their arguments (and nothing else).

The following patch fixes that.
On ia64 we already use float128t_type_node for those builtins, pa while
it has __float128 that type is the same as long double and so those builtins
have long double types and on powerpc seems we  don't have these builtins
but instead define macros which map them to __builtin_*f128.  That will
not work properly in C++, perhaps we should change those macros to be
function-like and cast to __float128.

Anyway, bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk
and 13.2?

2023-05-17  Jakub Jelinek  <jakub@redhat.com>

	PR c++/109884
	* config/i386/i386-builtin-types.def (FLOAT128): Use
	float128t_type_node rather than float128_type_node.

	* c-c++-common/pr109884.c: New test.

--- gcc/config/i386/i386-builtin-types.def.jj	2022-11-28 22:25:15.838734978 +0100
+++ gcc/config/i386/i386-builtin-types.def	2023-05-17 10:24:04.297929428 +0200
@@ -73,7 +73,7 @@ DEF_PRIMITIVE_TYPE (BFLOAT16, ix86_bf16_
 DEF_PRIMITIVE_TYPE (FLOAT, float_type_node)
 DEF_PRIMITIVE_TYPE (DOUBLE, double_type_node)
 DEF_PRIMITIVE_TYPE (FLOAT80, float80_type_node)
-DEF_PRIMITIVE_TYPE (FLOAT128, float128_type_node)
+DEF_PRIMITIVE_TYPE (FLOAT128, float128t_type_node)
 DEF_PRIMITIVE_TYPE (CONST_STRING, const_string_type_node)
 
 # MMX vectors
--- gcc/testsuite/c-c++-common/pr109884.c.jj	2023-05-17 10:41:42.295838862 +0200
+++ gcc/testsuite/c-c++-common/pr109884.c	2023-05-17 10:56:51.731872318 +0200
@@ -0,0 +1,32 @@
+/* PR c++/109884 */
+/* PowerPC doesn't define these as builtins, but macros expanding to
+   *f128 builtins.  */
+/* { dg-do compile { target { __float128 && { { c || c++11 } && { ! powerpc*-*-* } } } } } */
+/* { dg-add-options __float128 } */
+
+#ifdef __cplusplus
+template <typename T, typename U>
+struct is_same {
+  static const bool value = false;
+};
+
+template <typename T>
+struct is_same <T, T> {
+  static const bool value = true;
+};
+#define HAS_TYPE(E, U) static_assert (is_same <decltype (E), U>::value, "")
+#else
+#define HAS_TYPE(E, U) _Static_assert (_Generic (E, default : 0, U : 1), "")
+#endif
+
+void
+foo ()
+{
+  __float128 a = 0;
+  HAS_TYPE (__builtin_infq (), __float128);
+  HAS_TYPE (__builtin_huge_valq (), __float128);
+  HAS_TYPE (__builtin_nanq (""), __float128);
+  HAS_TYPE (__builtin_nansq (""), __float128);
+  HAS_TYPE (__builtin_fabsq (a), __float128);
+  HAS_TYPE (__builtin_copysignq (a, a), __float128);
+}

	Jakub


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] i386: Fix up types in __builtin_{inf,huge_val,nan{,s},fabs,copysign}q builtins [PR109884]
  2023-05-17 18:08 [PATCH] i386: Fix up types in __builtin_{inf,huge_val,nan{,s},fabs,copysign}q builtins [PR109884] Jakub Jelinek
@ 2023-05-17 18:30 ` Uros Bizjak
  0 siblings, 0 replies; 2+ messages in thread
From: Uros Bizjak @ 2023-05-17 18:30 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches

On Wed, May 17, 2023 at 8:08 PM Jakub Jelinek <jakub@redhat.com> wrote:
>
> Hi!
>
> When _Float128 support has been added to C++ for 13.1,  float128t_type_node
> tree has been added - in C float128_type_node and float128t_type_node is
> the same and represents both _Float128 and __float128, but in C++ they
> are distinct types which have different handling in the FEs.
> When doing that change, I mistakenly forgot to change FLOAT128 primitive
> type, which is used for the __builtin_{inf,huge_val,nan{,s},fabs,copysign}q
> builtins results and some of their arguments (and nothing else).
>
> The following patch fixes that.
> On ia64 we already use float128t_type_node for those builtins, pa while
> it has __float128 that type is the same as long double and so those builtins
> have long double types and on powerpc seems we  don't have these builtins
> but instead define macros which map them to __builtin_*f128.  That will
> not work properly in C++, perhaps we should change those macros to be
> function-like and cast to __float128.
>
> Anyway, bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk
> and 13.2?
>
> 2023-05-17  Jakub Jelinek  <jakub@redhat.com>
>
>         PR c++/109884
>         * config/i386/i386-builtin-types.def (FLOAT128): Use
>         float128t_type_node rather than float128_type_node.
>
>         * c-c++-common/pr109884.c: New test.

OK for master and branch.

Thanks,
Uros.

>
> --- gcc/config/i386/i386-builtin-types.def.jj   2022-11-28 22:25:15.838734978 +0100
> +++ gcc/config/i386/i386-builtin-types.def      2023-05-17 10:24:04.297929428 +0200
> @@ -73,7 +73,7 @@ DEF_PRIMITIVE_TYPE (BFLOAT16, ix86_bf16_
>  DEF_PRIMITIVE_TYPE (FLOAT, float_type_node)
>  DEF_PRIMITIVE_TYPE (DOUBLE, double_type_node)
>  DEF_PRIMITIVE_TYPE (FLOAT80, float80_type_node)
> -DEF_PRIMITIVE_TYPE (FLOAT128, float128_type_node)
> +DEF_PRIMITIVE_TYPE (FLOAT128, float128t_type_node)
>  DEF_PRIMITIVE_TYPE (CONST_STRING, const_string_type_node)
>
>  # MMX vectors
> --- gcc/testsuite/c-c++-common/pr109884.c.jj    2023-05-17 10:41:42.295838862 +0200
> +++ gcc/testsuite/c-c++-common/pr109884.c       2023-05-17 10:56:51.731872318 +0200
> @@ -0,0 +1,32 @@
> +/* PR c++/109884 */
> +/* PowerPC doesn't define these as builtins, but macros expanding to
> +   *f128 builtins.  */
> +/* { dg-do compile { target { __float128 && { { c || c++11 } && { ! powerpc*-*-* } } } } } */
> +/* { dg-add-options __float128 } */
> +
> +#ifdef __cplusplus
> +template <typename T, typename U>
> +struct is_same {
> +  static const bool value = false;
> +};
> +
> +template <typename T>
> +struct is_same <T, T> {
> +  static const bool value = true;
> +};
> +#define HAS_TYPE(E, U) static_assert (is_same <decltype (E), U>::value, "")
> +#else
> +#define HAS_TYPE(E, U) _Static_assert (_Generic (E, default : 0, U : 1), "")
> +#endif
> +
> +void
> +foo ()
> +{
> +  __float128 a = 0;
> +  HAS_TYPE (__builtin_infq (), __float128);
> +  HAS_TYPE (__builtin_huge_valq (), __float128);
> +  HAS_TYPE (__builtin_nanq (""), __float128);
> +  HAS_TYPE (__builtin_nansq (""), __float128);
> +  HAS_TYPE (__builtin_fabsq (a), __float128);
> +  HAS_TYPE (__builtin_copysignq (a, a), __float128);
> +}
>
>         Jakub
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-05-17 18:30 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-17 18:08 [PATCH] i386: Fix up types in __builtin_{inf,huge_val,nan{,s},fabs,copysign}q builtins [PR109884] Jakub Jelinek
2023-05-17 18:30 ` Uros Bizjak

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).