[PING^4][PATCH v2] rs6000: Fix issue in specifying PTImode as an attribute [PR106895]

jeevitha jeevitha@linux.ibm.com
Wed Jul 10 01:38:28 GMT 2024


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\]" } } */
>>>>
>>>>


More information about the Gcc-patches mailing list