public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
       [not found] <9ea38d87-180f-46b5-a723-45061680980f@linux.vnet.ibm.com>
@ 2024-02-23  9:34 ` jeevitha
  2024-03-07 15:27   ` [PING^1][PATCH] " jeevitha
  2024-03-18 14:36   ` [PATCH] " Segher Boessenkool
  0 siblings, 2 replies; 14+ messages in thread
From: jeevitha @ 2024-02-23  9:34 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Hi All,

The following patch has been bootstrapped and regtested on powerpc64le-linux.

PTImode attribute assists in generating even/odd register pairs on 128 bits.
When the user specifies PTImode as an attribute, it breaks because there is no
internal type to handle this mode . We have created a tree node with dummy type
to handle PTImode. We are not documenting this dummy type since users are not
allowed to use this type externally.

2024-02-23  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>

gcc/
	PR target/106895
	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add fields
	to hold PTImode type.
	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
	for PTImode type.

gcc/testsuite/
	PR target/106895
	* gcc.target/powerpc/pr106895.c: New testcase.

diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index 6698274031b..f553c72779e 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -756,6 +756,15 @@ rs6000_init_builtins (void)
   else
     ieee128_float_type_node = NULL_TREE;
 
+  /* PTImode to get even/odd register pairs.  */
+  intPTI_type_internal_node = make_node(INTEGER_TYPE);
+  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
+  layout_type (intPTI_type_internal_node);
+  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
+  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
+  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
+					  "__dummypti");
+
   /* Vector pair and vector quad support.  */
   vector_pair_type_node = make_node (OPAQUE_TYPE);
   SET_TYPE_MODE (vector_pair_type_node, OOmode);
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 2291fe8d3a3..77bb937a28b 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -2304,6 +2304,7 @@ enum rs6000_builtin_type_index
   RS6000_BTI_ptr_vector_quad,
   RS6000_BTI_ptr_long_long,
   RS6000_BTI_ptr_long_long_unsigned,
+  RS6000_BTI_PTI,
   RS6000_BTI_MAX
 };
 
@@ -2348,6 +2349,7 @@ enum rs6000_builtin_type_index
 #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
 #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
 #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
+#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_PTI])
 #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
 #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
 #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
new file mode 100644
index 00000000000..56547b7fa9d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
@@ -0,0 +1,15 @@
+/* PR target/106895 */
+/* { dg-require-effective-target int128 } */
+/* { dg-options "-O2" } */
+
+/* Verify the following generates even/odd register pairs.  */
+
+typedef __int128 pti __attribute__((mode(PTI)));
+
+void
+set128 (pti val, pti *mem)
+{
+    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
+}
+
+/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */


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

* [PING^1][PATCH] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-02-23  9:34 ` [PATCH] rs6000: Fix issue in specifying PTImode as an attribute [PR106895] jeevitha
@ 2024-03-07 15:27   ` jeevitha
  2024-03-21 12:51     ` [PATCH v2] " jeevitha
  2024-03-18 14:36   ` [PATCH] " Segher Boessenkool
  1 sibling, 1 reply; 14+ messages in thread
From: jeevitha @ 2024-03-07 15:27 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Ping!

please review.

Thanks & Regards
Jeevitha

On 23/02/24 3:04 pm, jeevitha wrote:
> Hi All,
> 
> The following patch has been bootstrapped and regtested on powerpc64le-linux.
> 
> PTImode attribute assists in generating even/odd register pairs on 128 bits.
> When the user specifies PTImode as an attribute, it breaks because there is no
> internal type to handle this mode . We have created a tree node with dummy type
> to handle PTImode. We are not documenting this dummy type since users are not
> allowed to use this type externally.
> 
> 2024-02-23  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
> 
> gcc/
> 	PR target/106895
> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add fields
> 	to hold PTImode type.
> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
> 	for PTImode type.
> 
> gcc/testsuite/
> 	PR target/106895
> 	* gcc.target/powerpc/pr106895.c: New testcase.
> 
> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
> index 6698274031b..f553c72779e 100644
> --- a/gcc/config/rs6000/rs6000-builtin.cc
> +++ b/gcc/config/rs6000/rs6000-builtin.cc
> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>    else
>      ieee128_float_type_node = NULL_TREE;
>  
> +  /* PTImode to get even/odd register pairs.  */
> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
> +  layout_type (intPTI_type_internal_node);
> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
> +					  "__dummypti");
> +
>    /* Vector pair and vector quad support.  */
>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
> index 2291fe8d3a3..77bb937a28b 100644
> --- a/gcc/config/rs6000/rs6000.h
> +++ b/gcc/config/rs6000/rs6000.h
> @@ -2304,6 +2304,7 @@ enum rs6000_builtin_type_index
>    RS6000_BTI_ptr_vector_quad,
>    RS6000_BTI_ptr_long_long,
>    RS6000_BTI_ptr_long_long_unsigned,
> +  RS6000_BTI_PTI,
>    RS6000_BTI_MAX
>  };
>  
> @@ -2348,6 +2349,7 @@ enum rs6000_builtin_type_index
>  #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
>  #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
>  #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
> +#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_PTI])
>  #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
>  #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
>  #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> new file mode 100644
> index 00000000000..56547b7fa9d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> @@ -0,0 +1,15 @@
> +/* PR target/106895 */
> +/* { dg-require-effective-target int128 } */
> +/* { dg-options "-O2" } */
> +
> +/* Verify the following generates even/odd register pairs.  */
> +
> +typedef __int128 pti __attribute__((mode(PTI)));
> +
> +void
> +set128 (pti val, pti *mem)
> +{
> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
> +}
> +
> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
> 

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

* Re: [PATCH] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-02-23  9:34 ` [PATCH] rs6000: Fix issue in specifying PTImode as an attribute [PR106895] jeevitha
  2024-03-07 15:27   ` [PING^1][PATCH] " jeevitha
@ 2024-03-18 14:36   ` Segher Boessenkool
  2024-03-18 17:35     ` Peter Bergner
  1 sibling, 1 reply; 14+ messages in thread
From: Segher Boessenkool @ 2024-03-18 14:36 UTC (permalink / raw)
  To: jeevitha; +Cc: GCC Patches, Kewen.Lin, Peter Bergner

Hi!

On Fri, Feb 23, 2024 at 03:04:13PM +0530, jeevitha wrote:
> PTImode attribute assists in generating even/odd register pairs on 128 bits.

It is a mode, not an attribute.  Attributes are on declarations, while
modes are on a much more fundamental level (every value has a mode, in
GCC!)

> When the user specifies PTImode as an attribute, it breaks because there is no
> internal type to handle this mode . We have created a tree node with dummy type
> to handle PTImode.

You are talking about the mode attribute.  Aha.

This attribute says the mode of the datum is something specific; it is
the only way a user can specify the mode directly.  Not something you
want to use normally, but it's a nice escape hatch (like here).

> We are not documenting this dummy type since users are not
> allowed to use this type externally.

Not sure what this is meant to mean?  What does "allowed to" mean, even?
We do not forbid people from doing anything (we can discourage them
though).  Or dso you mean something just doesn't work?

> gcc/
> 	PR target/106895
> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add fields
> 	to hold PTImode type.

An enum does not have fields.  What do you actually mean?

> --- a/gcc/config/rs6000/rs6000.h
> +++ b/gcc/config/rs6000/rs6000.h
> @@ -2304,6 +2304,7 @@ enum rs6000_builtin_type_index
>    RS6000_BTI_ptr_vector_quad,
>    RS6000_BTI_ptr_long_long,
>    RS6000_BTI_ptr_long_long_unsigned,
> +  RS6000_BTI_PTI,

Please call it RS6000_BTI_INTPTI, to be more in line with the naming of
other things.

With that fixed it should be good.  Please repost with a good commit
comment and changelog :-)

Thanks,


Segher

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

* Re: [PATCH] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-03-18 14:36   ` [PATCH] " Segher Boessenkool
@ 2024-03-18 17:35     ` Peter Bergner
  0 siblings, 0 replies; 14+ messages in thread
From: Peter Bergner @ 2024-03-18 17:35 UTC (permalink / raw)
  To: Segher Boessenkool, P Jeevitha; +Cc: GCC Patches, Kewen.Lin

On 3/18/24 9:36 AM, Segher Boessenkool wrote:
> Hi!
> 
> On Fri, Feb 23, 2024 at 03:04:13PM +0530, jeevitha wrote:
>> PTImode attribute assists in generating even/odd register pairs on 128 bits.
> 
> It is a mode, not an attribute.  Attributes are on declarations, while
> modes are on a much more fundamental level (every value has a mode, in
> GCC!)
> 
>> When the user specifies PTImode as an attribute, it breaks because there is no
>> internal type to handle this mode . We have created a tree node with dummy type
>> to handle PTImode.
> 
> You are talking about the mode attribute.  Aha.

Correct.



>> We are not documenting this dummy type since users are not
>> allowed to use this type externally.
> 
> Not sure what this is meant to mean?  What does "allowed to" mean, even?
> We do not forbid people from doing anything (we can discourage them
> though).  Or dso you mean something just doesn't work?

The use case is the Linux kernel will use the mode attribute as shown in
the test case.  The type she created was needed for the code to "work"
internally, but we don't want to advertise it to users, so that's why we're
not documenting it.  Yes, pesky users who go digging through the GCC source
could find it and use it, but we don't want to encourage them. :-)


>> 	PR target/106895
>> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add fields
>> 	to hold PTImode type.
> 
> An enum does not have fields.  What do you actually mean?

Yeah, as per your follow-on comment, I think a simple "Add RS6000_BTI_INTPTI."
should suffice.


Peter


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

* [PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-03-07 15:27   ` [PING^1][PATCH] " jeevitha
@ 2024-03-21 12:51     ` jeevitha
  2024-04-17  9:14       ` [PING^1][PATCH " jeevitha
                         ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: jeevitha @ 2024-03-21 12:51 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Hi All,

The following patch has been bootstrapped and regtested on powerpc64le-linux.

PTImode assists in generating even/odd register pairs on 128 bits. When the user 
specifies PTImode as an attribute, it breaks because there is no internal type 
to handle this mode. To address this, we have created a tree node with dummy type
to handle PTImode. We are not documenting this dummy type since users are not
allowed to use this type externally.

2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>

gcc/
	PR target/110411
	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
	RS6000_BTI_INTPTI.
	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
	for PTImode type.

gcc/testsuite/
	PR target/106895
	* gcc.target/powerpc/pr106895.c: New testcase.

diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index 6698274031b..f553c72779e 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -756,6 +756,15 @@ rs6000_init_builtins (void)
   else
     ieee128_float_type_node = NULL_TREE;
 
+  /* PTImode to get even/odd register pairs.  */
+  intPTI_type_internal_node = make_node(INTEGER_TYPE);
+  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
+  layout_type (intPTI_type_internal_node);
+  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
+  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
+  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
+					  "__dummypti");
+
   /* Vector pair and vector quad support.  */
   vector_pair_type_node = make_node (OPAQUE_TYPE);
   SET_TYPE_MODE (vector_pair_type_node, OOmode);
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 68bc45d65ba..b6078077b20 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
   RS6000_BTI_ptr_vector_quad,
   RS6000_BTI_ptr_long_long,
   RS6000_BTI_ptr_long_long_unsigned,
+  RS6000_BTI_INTPTI,
   RS6000_BTI_MAX
 };
 
@@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
 #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
 #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
 #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
+#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTPTI])
 #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
 #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
 #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
new file mode 100644
index 00000000000..56547b7fa9d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
@@ -0,0 +1,15 @@
+/* PR target/106895 */
+/* { dg-require-effective-target int128 } */
+/* { dg-options "-O2" } */
+
+/* Verify the following generates even/odd register pairs.  */
+
+typedef __int128 pti __attribute__((mode(PTI)));
+
+void
+set128 (pti val, pti *mem)
+{
+    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
+}
+
+/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */



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

* [PING^1][PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-03-21 12:51     ` [PATCH v2] " jeevitha
@ 2024-04-17  9:14       ` jeevitha
  2024-05-21  4:58         ` [PING^2][PATCH " jeevitha
  2024-08-22  7:39       ` [PING^5][PATCH " jeevitha
                         ` (3 subsequent siblings)
  4 siblings, 1 reply; 14+ messages in thread
From: jeevitha @ 2024-04-17  9:14 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Ping!

I've incorporated all the suggested changes. Please review.

Thanks & Regards
Jeevitha

On 21/03/24 6:21 pm, jeevitha wrote:
> Hi All,
> 
> The following patch has been bootstrapped and regtested on powerpc64le-linux.
> 
> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
> specifies PTImode as an attribute, it breaks because there is no internal type 
> to handle this mode. To address this, we have created a tree node with dummy type
> to handle PTImode. We are not documenting this dummy type since users are not
> allowed to use this type externally.
> 
> 2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
> 
> gcc/
> 	PR target/110411
> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
> 	RS6000_BTI_INTPTI.
> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
> 	for PTImode type.
> 
> gcc/testsuite/
> 	PR target/106895
> 	* gcc.target/powerpc/pr106895.c: New testcase.
> 
> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
> index 6698274031b..f553c72779e 100644
> --- a/gcc/config/rs6000/rs6000-builtin.cc
> +++ b/gcc/config/rs6000/rs6000-builtin.cc
> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>    else
>      ieee128_float_type_node = NULL_TREE;
>  
> +  /* PTImode to get even/odd register pairs.  */
> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
> +  layout_type (intPTI_type_internal_node);
> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
> +					  "__dummypti");
> +
>    /* Vector pair and vector quad support.  */
>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
> index 68bc45d65ba..b6078077b20 100644
> --- a/gcc/config/rs6000/rs6000.h
> +++ b/gcc/config/rs6000/rs6000.h
> @@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
>    RS6000_BTI_ptr_vector_quad,
>    RS6000_BTI_ptr_long_long,
>    RS6000_BTI_ptr_long_long_unsigned,
> +  RS6000_BTI_INTPTI,
>    RS6000_BTI_MAX
>  };
>  
> @@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
>  #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
>  #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
>  #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
> +#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTPTI])
>  #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
>  #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
>  #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> new file mode 100644
> index 00000000000..56547b7fa9d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> @@ -0,0 +1,15 @@
> +/* PR target/106895 */
> +/* { dg-require-effective-target int128 } */
> +/* { dg-options "-O2" } */
> +
> +/* Verify the following generates even/odd register pairs.  */
> +
> +typedef __int128 pti __attribute__((mode(PTI)));
> +
> +void
> +set128 (pti val, pti *mem)
> +{
> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
> +}
> +
> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
> 
> 

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

* Re: [PING^2][PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-04-17  9:14       ` [PING^1][PATCH " jeevitha
@ 2024-05-21  4:58         ` jeevitha
  2024-06-19 12:42           ` [PING^3][PATCH " jeevitha
  0 siblings, 1 reply; 14+ messages in thread
From: jeevitha @ 2024-05-21  4:58 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Ping!

please review.

Thanks & Regards
Jeevitha


On 17/04/24 2:44 pm, jeevitha wrote:
> Ping!
> 
> I've incorporated all the suggested changes. Please review.
> 
> Thanks & Regards
> Jeevitha
> 
> On 21/03/24 6:21 pm, jeevitha wrote:
>> Hi All,
>>
>> The following patch has been bootstrapped and regtested on powerpc64le-linux.
>>
>> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
>> specifies PTImode as an attribute, it breaks because there is no internal type 
>> to handle this mode. To address this, we have created a tree node with dummy type
>> to handle PTImode. We are not documenting this dummy type since users are not
>> allowed to use this type externally.
>>
>> 2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
>>
>> gcc/
>> 	PR target/110411
>> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
>> 	RS6000_BTI_INTPTI.
>> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
>> 	for PTImode type.
>>
>> gcc/testsuite/
>> 	PR target/106895
>> 	* gcc.target/powerpc/pr106895.c: New testcase.
>>
>> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
>> index 6698274031b..f553c72779e 100644
>> --- a/gcc/config/rs6000/rs6000-builtin.cc
>> +++ b/gcc/config/rs6000/rs6000-builtin.cc
>> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>>    else
>>      ieee128_float_type_node = NULL_TREE;
>>  
>> +  /* PTImode to get even/odd register pairs.  */
>> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
>> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
>> +  layout_type (intPTI_type_internal_node);
>> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
>> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
>> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
>> +					  "__dummypti");
>> +
>>    /* Vector pair and vector quad support.  */
>>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
>> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
>> index 68bc45d65ba..b6078077b20 100644
>> --- a/gcc/config/rs6000/rs6000.h
>> +++ b/gcc/config/rs6000/rs6000.h
>> @@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
>>    RS6000_BTI_ptr_vector_quad,
>>    RS6000_BTI_ptr_long_long,
>>    RS6000_BTI_ptr_long_long_unsigned,
>> +  RS6000_BTI_INTPTI,
>>    RS6000_BTI_MAX
>>  };
>>  
>> @@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
>>  #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
>>  #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
>>  #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
>> +#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTPTI])
>>  #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
>>  #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
>>  #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
>> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>> new file mode 100644
>> index 00000000000..56547b7fa9d
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>> @@ -0,0 +1,15 @@
>> +/* PR target/106895 */
>> +/* { dg-require-effective-target int128 } */
>> +/* { dg-options "-O2" } */
>> +
>> +/* Verify the following generates even/odd register pairs.  */
>> +
>> +typedef __int128 pti __attribute__((mode(PTI)));
>> +
>> +void
>> +set128 (pti val, pti *mem)
>> +{
>> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
>> +}
>> +
>> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
>>
>>

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

* Re: [PING^3][PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-05-21  4:58         ` [PING^2][PATCH " jeevitha
@ 2024-06-19 12:42           ` jeevitha
  2024-07-10  1:38             ` [PING^4][PATCH " jeevitha
  0 siblings, 1 reply; 14+ messages in thread
From: jeevitha @ 2024-06-19 12:42 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Ping!

Please review. Are there any more changes required?

Thanks & Regards
Jeevitha

On 21/05/24 10:28 am, jeevitha wrote:
> Ping!
> 
> please review.
> 
> Thanks & Regards
> Jeevitha
> 
> 
> On 17/04/24 2:44 pm, jeevitha wrote:
>> Ping!
>>
>> I've incorporated all the suggested changes. Please review.
>>
>> Thanks & Regards
>> Jeevitha
>>
>> On 21/03/24 6:21 pm, jeevitha wrote:
>>> Hi All,
>>>
>>> The following patch has been bootstrapped and regtested on powerpc64le-linux.
>>>
>>> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
>>> specifies PTImode as an attribute, it breaks because there is no internal type 
>>> to handle this mode. To address this, we have created a tree node with dummy type
>>> to handle PTImode. We are not documenting this dummy type since users are not
>>> allowed to use this type externally.
>>>
>>> 2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
>>>
>>> gcc/
>>> 	PR target/110411
>>> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
>>> 	RS6000_BTI_INTPTI.
>>> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
>>> 	for PTImode type.
>>>
>>> gcc/testsuite/
>>> 	PR target/106895
>>> 	* gcc.target/powerpc/pr106895.c: New testcase.
>>>
>>> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
>>> index 6698274031b..f553c72779e 100644
>>> --- a/gcc/config/rs6000/rs6000-builtin.cc
>>> +++ b/gcc/config/rs6000/rs6000-builtin.cc
>>> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>>>    else
>>>      ieee128_float_type_node = NULL_TREE;
>>>  
>>> +  /* PTImode to get even/odd register pairs.  */
>>> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
>>> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
>>> +  layout_type (intPTI_type_internal_node);
>>> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
>>> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
>>> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
>>> +					  "__dummypti");
>>> +
>>>    /* Vector pair and vector quad support.  */
>>>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>>>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
>>> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
>>> index 68bc45d65ba..b6078077b20 100644
>>> --- a/gcc/config/rs6000/rs6000.h
>>> +++ b/gcc/config/rs6000/rs6000.h
>>> @@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
>>>    RS6000_BTI_ptr_vector_quad,
>>>    RS6000_BTI_ptr_long_long,
>>>    RS6000_BTI_ptr_long_long_unsigned,
>>> +  RS6000_BTI_INTPTI,
>>>    RS6000_BTI_MAX
>>>  };
>>>  
>>> @@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
>>>  #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
>>>  #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
>>>  #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
>>> +#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTPTI])
>>>  #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
>>>  #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
>>>  #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
>>> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>>> new file mode 100644
>>> index 00000000000..56547b7fa9d
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>>> @@ -0,0 +1,15 @@
>>> +/* PR target/106895 */
>>> +/* { dg-require-effective-target int128 } */
>>> +/* { dg-options "-O2" } */
>>> +
>>> +/* Verify the following generates even/odd register pairs.  */
>>> +
>>> +typedef __int128 pti __attribute__((mode(PTI)));
>>> +
>>> +void
>>> +set128 (pti val, pti *mem)
>>> +{
>>> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
>>> +}
>>> +
>>> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
>>>
>>>

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

* [PING^4][PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-06-19 12:42           ` [PING^3][PATCH " jeevitha
@ 2024-07-10  1:38             ` jeevitha
  0 siblings, 0 replies; 14+ messages in thread
From: jeevitha @ 2024-07-10  1:38 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Ping!

Please review.

Thanks & Regards
Jeevitha

On 19/06/24 6:12 pm, jeevitha wrote:
> Ping!
> 
> Please review. Are there any more changes required?
> 
> Thanks & Regards
> Jeevitha
> 
> On 21/05/24 10:28 am, jeevitha wrote:
>> Ping!
>>
>> please review.
>>
>> Thanks & Regards
>> Jeevitha
>>
>>
>> On 17/04/24 2:44 pm, jeevitha wrote:
>>> Ping!
>>>
>>> I've incorporated all the suggested changes. Please review.
>>>
>>> Thanks & Regards
>>> Jeevitha
>>>
>>> On 21/03/24 6:21 pm, jeevitha wrote:
>>>> Hi All,
>>>>
>>>> The following patch has been bootstrapped and regtested on powerpc64le-linux.
>>>>
>>>> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
>>>> specifies PTImode as an attribute, it breaks because there is no internal type 
>>>> to handle this mode. To address this, we have created a tree node with dummy type
>>>> to handle PTImode. We are not documenting this dummy type since users are not
>>>> allowed to use this type externally.
>>>>
>>>> 2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
>>>>
>>>> gcc/
>>>> 	PR target/110411
>>>> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
>>>> 	RS6000_BTI_INTPTI.
>>>> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
>>>> 	for PTImode type.
>>>>
>>>> gcc/testsuite/
>>>> 	PR target/106895
>>>> 	* gcc.target/powerpc/pr106895.c: New testcase.
>>>>
>>>> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
>>>> index 6698274031b..f553c72779e 100644
>>>> --- a/gcc/config/rs6000/rs6000-builtin.cc
>>>> +++ b/gcc/config/rs6000/rs6000-builtin.cc
>>>> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>>>>    else
>>>>      ieee128_float_type_node = NULL_TREE;
>>>>  
>>>> +  /* PTImode to get even/odd register pairs.  */
>>>> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
>>>> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
>>>> +  layout_type (intPTI_type_internal_node);
>>>> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
>>>> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
>>>> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
>>>> +					  "__dummypti");
>>>> +
>>>>    /* Vector pair and vector quad support.  */
>>>>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>>>>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
>>>> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
>>>> index 68bc45d65ba..b6078077b20 100644
>>>> --- a/gcc/config/rs6000/rs6000.h
>>>> +++ b/gcc/config/rs6000/rs6000.h
>>>> @@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
>>>>    RS6000_BTI_ptr_vector_quad,
>>>>    RS6000_BTI_ptr_long_long,
>>>>    RS6000_BTI_ptr_long_long_unsigned,
>>>> +  RS6000_BTI_INTPTI,
>>>>    RS6000_BTI_MAX
>>>>  };
>>>>  
>>>> @@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
>>>>  #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
>>>>  #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
>>>>  #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
>>>> +#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTPTI])
>>>>  #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
>>>>  #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
>>>>  #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
>>>> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>>>> new file mode 100644
>>>> index 00000000000..56547b7fa9d
>>>> --- /dev/null
>>>> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>>>> @@ -0,0 +1,15 @@
>>>> +/* PR target/106895 */
>>>> +/* { dg-require-effective-target int128 } */
>>>> +/* { dg-options "-O2" } */
>>>> +
>>>> +/* Verify the following generates even/odd register pairs.  */
>>>> +
>>>> +typedef __int128 pti __attribute__((mode(PTI)));
>>>> +
>>>> +void
>>>> +set128 (pti val, pti *mem)
>>>> +{
>>>> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
>>>> +}
>>>> +
>>>> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
>>>>
>>>>

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

* [PING^5][PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-03-21 12:51     ` [PATCH v2] " jeevitha
  2024-04-17  9:14       ` [PING^1][PATCH " jeevitha
@ 2024-08-22  7:39       ` jeevitha
  2024-09-09  6:21       ` [PING^6][PATCH " jeevitha
                         ` (2 subsequent siblings)
  4 siblings, 0 replies; 14+ messages in thread
From: jeevitha @ 2024-08-22  7:39 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Ping * 5.

Segher, I've incorporated all the suggested changes. Are there any more changes required?

Jeevitha


On 21/03/24 6:21 pm, jeevitha wrote:
> Hi All,
> 
> The following patch has been bootstrapped and regtested on powerpc64le-linux.
> 
> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
> specifies PTImode as an attribute, it breaks because there is no internal type 
> to handle this mode. To address this, we have created a tree node with dummy type
> to handle PTImode. We are not documenting this dummy type since users are not
> allowed to use this type externally.
> 
> 2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
> 
> gcc/
> 	PR target/110411
> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
> 	RS6000_BTI_INTPTI.
> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
> 	for PTImode type.
> 
> gcc/testsuite/
> 	PR target/106895
> 	* gcc.target/powerpc/pr106895.c: New testcase.
> 
> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
> index 6698274031b..f553c72779e 100644
> --- a/gcc/config/rs6000/rs6000-builtin.cc
> +++ b/gcc/config/rs6000/rs6000-builtin.cc
> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>    else
>      ieee128_float_type_node = NULL_TREE;
>  
> +  /* PTImode to get even/odd register pairs.  */
> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
> +  layout_type (intPTI_type_internal_node);
> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
> +					  "__dummypti");
> +
>    /* Vector pair and vector quad support.  */
>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
> index 68bc45d65ba..b6078077b20 100644
> --- a/gcc/config/rs6000/rs6000.h
> +++ b/gcc/config/rs6000/rs6000.h
> @@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
>    RS6000_BTI_ptr_vector_quad,
>    RS6000_BTI_ptr_long_long,
>    RS6000_BTI_ptr_long_long_unsigned,
> +  RS6000_BTI_INTPTI,
>    RS6000_BTI_MAX
>  };
>  
> @@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
>  #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
>  #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
>  #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
> +#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTPTI])
>  #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
>  #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
>  #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> new file mode 100644
> index 00000000000..56547b7fa9d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> @@ -0,0 +1,15 @@
> +/* PR target/106895 */
> +/* { dg-require-effective-target int128 } */
> +/* { dg-options "-O2" } */
> +
> +/* Verify the following generates even/odd register pairs.  */
> +
> +typedef __int128 pti __attribute__((mode(PTI)));
> +
> +void
> +set128 (pti val, pti *mem)
> +{
> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
> +}
> +
> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
> 


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

* [PING^6][PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-03-21 12:51     ` [PATCH v2] " jeevitha
  2024-04-17  9:14       ` [PING^1][PATCH " jeevitha
  2024-08-22  7:39       ` [PING^5][PATCH " jeevitha
@ 2024-09-09  6:21       ` jeevitha
  2024-09-25 15:04       ` [PING^7][PATCH " jeevitha
  2024-10-03 19:24       ` [PATCH " Segher Boessenkool
  4 siblings, 0 replies; 14+ messages in thread
From: jeevitha @ 2024-09-09  6:21 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Ping * 6

Please review!

On 21/03/24 6:21 pm, jeevitha wrote:
> Hi All,
> 
> The following patch has been bootstrapped and regtested on powerpc64le-linux.
> 
> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
> specifies PTImode as an attribute, it breaks because there is no internal type 
> to handle this mode. To address this, we have created a tree node with dummy type
> to handle PTImode. We are not documenting this dummy type since users are not
> allowed to use this type externally.
> 
> 2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
> 
> gcc/
> 	PR target/110411
> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
> 	RS6000_BTI_INTPTI.
> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
> 	for PTImode type.
> 
> gcc/testsuite/
> 	PR target/106895
> 	* gcc.target/powerpc/pr106895.c: New testcase.
> 
> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
> index 6698274031b..f553c72779e 100644
> --- a/gcc/config/rs6000/rs6000-builtin.cc
> +++ b/gcc/config/rs6000/rs6000-builtin.cc
> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>    else
>      ieee128_float_type_node = NULL_TREE;
>  
> +  /* PTImode to get even/odd register pairs.  */
> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
> +  layout_type (intPTI_type_internal_node);
> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
> +					  "__dummypti");
> +
>    /* Vector pair and vector quad support.  */
>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
> index 68bc45d65ba..b6078077b20 100644
> --- a/gcc/config/rs6000/rs6000.h
> +++ b/gcc/config/rs6000/rs6000.h
> @@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
>    RS6000_BTI_ptr_vector_quad,
>    RS6000_BTI_ptr_long_long,
>    RS6000_BTI_ptr_long_long_unsigned,
> +  RS6000_BTI_INTPTI,
>    RS6000_BTI_MAX
>  };
>  
> @@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
>  #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
>  #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
>  #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
> +#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTPTI])
>  #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
>  #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
>  #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> new file mode 100644
> index 00000000000..56547b7fa9d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> @@ -0,0 +1,15 @@
> +/* PR target/106895 */
> +/* { dg-require-effective-target int128 } */
> +/* { dg-options "-O2" } */
> +
> +/* Verify the following generates even/odd register pairs.  */
> +
> +typedef __int128 pti __attribute__((mode(PTI)));
> +
> +void
> +set128 (pti val, pti *mem)
> +{
> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
> +}
> +
> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
> 


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

* [PING^7][PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-03-21 12:51     ` [PATCH v2] " jeevitha
                         ` (2 preceding siblings ...)
  2024-09-09  6:21       ` [PING^6][PATCH " jeevitha
@ 2024-09-25 15:04       ` jeevitha
  2024-10-03 19:24       ` [PATCH " Segher Boessenkool
  4 siblings, 0 replies; 14+ messages in thread
From: jeevitha @ 2024-09-25 15:04 UTC (permalink / raw)
  To: GCC Patches, Kewen.Lin, Segher Boessenkool; +Cc: Peter Bergner

Ping * 7

Please review!

On 21/03/24 6:21 pm, jeevitha wrote:
> Hi All,
> 
> The following patch has been bootstrapped and regtested on powerpc64le-linux.
> 
> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
> specifies PTImode as an attribute, it breaks because there is no internal type 
> to handle this mode. To address this, we have created a tree node with dummy type
> to handle PTImode. We are not documenting this dummy type since users are not
> allowed to use this type externally.
> 
> 2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
> 
> gcc/
> 	PR target/110411
> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
> 	RS6000_BTI_INTPTI.
> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
> 	for PTImode type.
> 
> gcc/testsuite/
> 	PR target/106895
> 	* gcc.target/powerpc/pr106895.c: New testcase.
> 
> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
> index 6698274031b..f553c72779e 100644
> --- a/gcc/config/rs6000/rs6000-builtin.cc
> +++ b/gcc/config/rs6000/rs6000-builtin.cc
> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>    else
>      ieee128_float_type_node = NULL_TREE;
>  
> +  /* PTImode to get even/odd register pairs.  */
> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
> +  layout_type (intPTI_type_internal_node);
> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
> +					  "__dummypti");
> +
>    /* Vector pair and vector quad support.  */
>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
> index 68bc45d65ba..b6078077b20 100644
> --- a/gcc/config/rs6000/rs6000.h
> +++ b/gcc/config/rs6000/rs6000.h
> @@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
>    RS6000_BTI_ptr_vector_quad,
>    RS6000_BTI_ptr_long_long,
>    RS6000_BTI_ptr_long_long_unsigned,
> +  RS6000_BTI_INTPTI,
>    RS6000_BTI_MAX
>  };
>  
> @@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
>  #define uintDI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTDI])
>  #define intTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTTI])
>  #define uintTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_UINTTI])
> +#define intPTI_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_INTPTI])
>  #define float_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_float])
>  #define double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_double])
>  #define long_double_type_internal_node	 (rs6000_builtin_types[RS6000_BTI_long_double])
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> new file mode 100644
> index 00000000000..56547b7fa9d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> @@ -0,0 +1,15 @@
> +/* PR target/106895 */
> +/* { dg-require-effective-target int128 } */
> +/* { dg-options "-O2" } */
> +
> +/* Verify the following generates even/odd register pairs.  */
> +
> +typedef __int128 pti __attribute__((mode(PTI)));
> +
> +void
> +set128 (pti val, pti *mem)
> +{
> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
> +}
> +
> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
> 


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

* Re: [PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-03-21 12:51     ` [PATCH v2] " jeevitha
                         ` (3 preceding siblings ...)
  2024-09-25 15:04       ` [PING^7][PATCH " jeevitha
@ 2024-10-03 19:24       ` Segher Boessenkool
  2024-10-03 20:16         ` Peter Bergner
  4 siblings, 1 reply; 14+ messages in thread
From: Segher Boessenkool @ 2024-10-03 19:24 UTC (permalink / raw)
  To: jeevitha; +Cc: GCC Patches, Kewen.Lin, Peter Bergner

On Thu, Mar 21, 2024 at 06:21:48PM +0530, jeevitha wrote:
Hi!

> The following patch has been bootstrapped and regtested on powerpc64le-linux.

Please send v2 patches as their own, new thread.  Replies are for
replies (duh), and for patch series.  If you mix several versions in one
thread things become much, much harder to deal with.

> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
> specifies PTImode as an attribute, it breaks because there is no internal type 
> to handle this mode. To address this, we have created a tree node with dummy type
> to handle PTImode. We are not documenting this dummy type since users are not
> allowed to use this type externally.

Like discussed before, do not say this.  Users are perfectly well
allowed to use whatever type they want.  But we don't *encourage* using
this type, a very different thing.

> 2024-03-21  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
> 
> gcc/
> 	PR target/110411

That is the wrong PR #.  To prevent such things, never copy such lines,
always type them from scratch.  It is a very short line anyway!

> 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
> 	RS6000_BTI_INTPTI.
> 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
> 	for PTImode type.

Please don't break lines early.  Changelog lines are 80 positions wide.

> gcc/testsuite/
> 	PR target/106895
> 	* gcc.target/powerpc/pr106895.c: New testcase.

> +  /* PTImode to get even/odd register pairs.  */
> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
> +  layout_type (intPTI_type_internal_node);
> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
> +					  "__dummypti");

Please use a real name, not something "dummy".  It is a real type after
all!

> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
> @@ -0,0 +1,15 @@
> +/* PR target/106895 */
> +/* { dg-require-effective-target int128 } */
> +/* { dg-options "-O2" } */
> +
> +/* Verify the following generates even/odd register pairs.  */
> +
> +typedef __int128 pti __attribute__((mode(PTI)));
> +
> +void
> +set128 (pti val, pti *mem)
> +{
> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
> +}
> +
> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */

Please use {} quoting, and no backslashes.  Also use \m and \M.

Or something like
  scan-assembler { \mstq .*[02468], }
(you do not have to match the things you don't care about, and you only
need to look at the last digit to see if a number is even).

The patch looks good otherwise, but please fix these things and repost.
In a new thread :-)

Thanks,


Segher

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

* Re: [PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]
  2024-10-03 19:24       ` [PATCH " Segher Boessenkool
@ 2024-10-03 20:16         ` Peter Bergner
  0 siblings, 0 replies; 14+ messages in thread
From: Peter Bergner @ 2024-10-03 20:16 UTC (permalink / raw)
  To: Segher Boessenkool, jeevitha; +Cc: GCC Patches, Kewen.Lin

On 10/3/24 2:24 PM, Segher Boessenkool wrote:
> On Thu, Mar 21, 2024 at 06:21:48PM +0530, jeevitha wrote:
>> PTImode assists in generating even/odd register pairs on 128 bits. When the user 
>> specifies PTImode as an attribute, it breaks because there is no internal type 
>> to handle this mode. To address this, we have created a tree node with dummy type
>> to handle PTImode. We are not documenting this dummy type since users are not
>> allowed to use this type externally.
> 
> Like discussed before, do not say this.  Users are perfectly well
> allowed to use whatever type they want.  But we don't *encourage* using
> this type, a very different thing.

I think a simple s/allowed/encouraged/ should suffice.




>> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
>> +					  "__dummypti");
> 
> Please use a real name, not something "dummy".  It is a real type after
> all!

Segher, how about __internal_pti or __pti_internal instead?



>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>> @@ -0,0 +1,15 @@
>> +/* PR target/106895 */
>> +/* { dg-require-effective-target int128 } */
>> +/* { dg-options "-O2" } */
>> +
>> +/* Verify the following generates even/odd register pairs.  */
>> +
>> +typedef __int128 pti __attribute__((mode(PTI)));
>> +
>> +void
>> +set128 (pti val, pti *mem)
>> +{
>> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
>> +}
>> +
>> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
> 
> Please use {} quoting, and no backslashes.  Also use \m and \M.
> 
> Or something like
>   scan-assembler { \mstq .*[02468], }
> (you do not have to match the things you don't care about, and you only
> need to look at the last digit to see if a number is even).

I think a better idea is to change this to a { dg-do assemble } test case,
since the assembler will verify that the register number is even and will
also verify the offset is valid too.  Then the dg-final can be just:

/* { dg-final { scan-assembler {\mstq\M} } } */

Peter



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

end of thread, other threads:[~2024-10-03 20:16 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <9ea38d87-180f-46b5-a723-45061680980f@linux.vnet.ibm.com>
2024-02-23  9:34 ` [PATCH] rs6000: Fix issue in specifying PTImode as an attribute [PR106895] jeevitha
2024-03-07 15:27   ` [PING^1][PATCH] " jeevitha
2024-03-21 12:51     ` [PATCH v2] " jeevitha
2024-04-17  9:14       ` [PING^1][PATCH " jeevitha
2024-05-21  4:58         ` [PING^2][PATCH " jeevitha
2024-06-19 12:42           ` [PING^3][PATCH " jeevitha
2024-07-10  1:38             ` [PING^4][PATCH " jeevitha
2024-08-22  7:39       ` [PING^5][PATCH " jeevitha
2024-09-09  6:21       ` [PING^6][PATCH " jeevitha
2024-09-25 15:04       ` [PING^7][PATCH " jeevitha
2024-10-03 19:24       ` [PATCH " Segher Boessenkool
2024-10-03 20:16         ` Peter Bergner
2024-03-18 14:36   ` [PATCH] " Segher Boessenkool
2024-03-18 17:35     ` 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).