[{"id":3677536,"web_url":"http://patchwork.ozlabs.org/comment/3677536/","msgid":"<42bdc5ab-1c67-46f4-955c-d86ffd2706ec@linux.ibm.com>","list_archive_url":null,"date":"2026-04-15T08:49:08","subject":"Re: [PATCH v2] rs6000: Fix PTImode attribute handling [PR106895]","submitter":{"id":88474,"url":"http://patchwork.ozlabs.org/api/people/88474/","name":"Surya Kumari Jangala","email":"jskumari@linux.ibm.com"},"content":"The patch looks fine to me. I cannot approve it though.\n\n-Surya\n\nOn 14/04/26 5:04 PM, jeevitha wrote:\n> Hi All,\n> \n> The following patch has been bootstrapped and regtested on powerpc64le-linux.\n> \n> Changes from V1:\n> * Added new test pr106895-2.c.\n> \n> PTImode is used to generate even/odd register pairs for 128-bit values.\n> When PTImode is specified via a type attribute, compilation fails\n> because no internal type exists to represent this mode.\n> \n> Introduce signed and unsigned PTImode internal builtin types to handle\n> PTImode. These __pti_internal types are not documented, as they are not\n> intended for direct user use.\n> \n> 2026-04-14  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>\n> \n> gcc/\n> \tPR target/106895\n> \t* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add\n> \tRS6000_BTI_INTPTI and RS6000_BTI_UINTPTI.\n> \t(intPTI_type_internal_node, uintPTI_type_internal_node): New\n> \tPTImode type macros.\n> \t* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Register\n> \tsigned and unsigned PTImode internal builtin types.\n> \t* config/rs6000/sync.md (trunctipti2): New splitter.\n> \t(extendptiti2): Likewise.\n> \t(zero_extendptiti2): Likewise.\n> \n> gcc/testsuite/\n> \tPR target/106895\n> \t* gcc.target/powerpc/pr106895-1.c: New test.\n> \t* gcc.target/powerpc/pr106895-2.c: New test.\n> \n> diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc\n> index bbf60de3b1b..8561cd67f53 100644\n> --- a/gcc/config/rs6000/rs6000-builtin.cc\n> +++ b/gcc/config/rs6000/rs6000-builtin.cc\n> @@ -756,6 +756,19 @@ rs6000_init_builtins (void)\n>    else\n>      ieee128_float_type_node = NULL_TREE;\n>  \n> +  /* PTImode to get even/odd register pairs.  */\n> +  intPTI_type_internal_node = make_signed_type (GET_MODE_BITSIZE (PTImode));\n> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);\n> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);\n> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,\n> +\t\t\t\t\t  \"__pti_internal\");\n> +\n> +  uintPTI_type_internal_node = make_unsigned_type (GET_MODE_BITSIZE (PTImode));\n> +  SET_TYPE_MODE (uintPTI_type_internal_node, PTImode);\n> +  t = build_qualified_type (uintPTI_type_internal_node, TYPE_QUAL_CONST);\n> +  lang_hooks.types.register_builtin_type (uintPTI_type_internal_node,\n> +\t\t\t\t\t  \"__upti_internal\");\n> +\n>    /* Vector pair and vector quad support.  */\n>    vector_pair_type_node = make_node (OPAQUE_TYPE);\n>    SET_TYPE_MODE (vector_pair_type_node, OOmode);\n> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h\n> index 2b90694cef1..d85f71aa65d 100644\n> --- a/gcc/config/rs6000/rs6000.h\n> +++ b/gcc/config/rs6000/rs6000.h\n> @@ -2285,6 +2285,8 @@ enum rs6000_builtin_type_index\n>    RS6000_BTI_ptr_vector_quad,\n>    RS6000_BTI_ptr_long_long,\n>    RS6000_BTI_ptr_long_long_unsigned,\n> +  RS6000_BTI_INTPTI,\n> +  RS6000_BTI_UINTPTI,\n>    RS6000_BTI_MAX\n>  };\n>  \n> @@ -2329,6 +2331,8 @@ enum rs6000_builtin_type_index\n>  #define uintDI_type_internal_node\t (rs6000_builtin_types[RS6000_BTI_UINTDI])\n>  #define intTI_type_internal_node\t (rs6000_builtin_types[RS6000_BTI_INTTI])\n>  #define uintTI_type_internal_node\t (rs6000_builtin_types[RS6000_BTI_UINTTI])\n> +#define intPTI_type_internal_node\t (rs6000_builtin_types[RS6000_BTI_INTPTI])\n> +#define uintPTI_type_internal_node\t (rs6000_builtin_types[RS6000_BTI_UINTPTI])\n>  #define float_type_internal_node\t (rs6000_builtin_types[RS6000_BTI_float])\n>  #define double_type_internal_node\t (rs6000_builtin_types[RS6000_BTI_double])\n>  #define long_double_type_internal_node\t (rs6000_builtin_types[RS6000_BTI_long_double])\n> diff --git a/gcc/config/rs6000/sync.md b/gcc/config/rs6000/sync.md\n> index 7087daf7e4c..4e392584bbc 100644\n> --- a/gcc/config/rs6000/sync.md\n> +++ b/gcc/config/rs6000/sync.md\n> @@ -198,6 +198,54 @@\n>    DONE;\n>  })\n>  \n> +;; PTI and TI are both 128-bit modes; the following conversions are\n> +;; register-class changes only, no actual truncation, sign or zero\n> +;; extension occurs.\n> +(define_insn_and_split \"trunctipti2\"\n> +  [(set (match_operand:PTI 0 \"register_operand\" \"=r\")\n> +        (truncate:PTI (match_operand:TI 1 \"register_operand\" \"r\")))]\n> +  \"\"\n> +  \"#\"\n> +  \"&& reload_completed\"\n> +  [(set (match_dup 2) (match_dup 4))\n> +   (set (match_dup 3) (match_dup 5))]\n> +{\n> +  operands[2] = gen_lowpart (DImode, operands[0]);\n> +  operands[3] = gen_highpart (DImode, operands[0]);\n> +  operands[4] = gen_lowpart (DImode, operands[1]);\n> +  operands[5] = gen_highpart (DImode, operands[1]);\n> +})\n> +\n> +(define_insn_and_split \"extendptiti2\"\n> +  [(set (match_operand:TI 0 \"register_operand\" \"=r\")\n> +        (sign_extend:TI (match_operand:PTI 1 \"register_operand\" \"r\")))]\n> +  \"\"\n> +  \"#\"\n> +  \"&& reload_completed\"\n> +  [(set (match_dup 2) (match_dup 4))\n> +   (set (match_dup 3) (match_dup 5))]\n> +{\n> +  operands[2] = gen_lowpart (DImode, operands[0]);\n> +  operands[3] = gen_highpart (DImode, operands[0]);\n> +  operands[4] = gen_lowpart (DImode, operands[1]);\n> +  operands[5] = gen_highpart (DImode, operands[1]);\n> +})\n> +\n> +(define_insn_and_split \"zero_extendptiti2\"\n> +  [(set (match_operand:TI 0 \"register_operand\" \"=r\")\n> +        (zero_extend:TI (match_operand:PTI 1 \"register_operand\" \"r\")))]\n> +  \"\"\n> +  \"#\"\n> +  \"&& reload_completed\"\n> +  [(set (match_dup 2) (match_dup 4))\n> +   (set (match_dup 3) (match_dup 5))]\n> +{\n> +  operands[2] = gen_lowpart (DImode, operands[0]);\n> +  operands[3] = gen_highpart (DImode, operands[0]);\n> +  operands[4] = gen_lowpart (DImode, operands[1]);\n> +  operands[5] = gen_highpart (DImode, operands[1]);\n> +})\n> +\n>  ;; If TARGET_PREFIXED, always use pstq rather than stq.\n>  (define_insn \"store_quadpti\"\n>    [(set (match_operand:PTI 0 \"quad_memory_operand\" \"=wQ\")\n> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895-1.c b/gcc/testsuite/gcc.target/powerpc/pr106895-1.c\n> new file mode 100644\n> index 00000000000..dfcafcd57e7\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895-1.c\n> @@ -0,0 +1,16 @@\n> +/* PR target/106895 */\n> +/* { dg-do assemble } */\n> +/* { dg-require-effective-target int128 } */\n> +/* { dg-options \"-O2 -save-temps\" } */\n> +\n> +/* Verify the following generates even/odd register pairs.  */\n> +\n> +typedef __int128 pti __attribute__((mode(PTI)));\n> +\n> +void\n> +set128 (pti val, pti *mem)\n> +{\n> +  asm (\"stq %1,%0\" : \"=m\" (*mem) : \"r\" (val));\n> +}\n> +\n> +/* { dg-final { scan-assembler {\\mstq\\M} } } */\n> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895-2.c b/gcc/testsuite/gcc.target/powerpc/pr106895-2.c\n> new file mode 100644\n> index 00000000000..7a197ff65cf\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895-2.c\n> @@ -0,0 +1,21 @@\n> +/* PR target/106895 */\n> +/* { dg-do run } */\n> +/* { dg-require-effective-target int128 } */\n> +/* { dg-options \"-O2\" } */\n> +\n> +#include <stdlib.h>\n> +\n> +typedef __int128 ti;\n> +typedef __int128 pti __attribute__((mode(PTI)));\n> +\n> +int main(void)\n> +{\n> +  ti a = 140;\n> +  pti b = (pti) a;\n> +  ti c = (ti) b;\n> +\n> +  if (c != a)\n> +    abort();\n> +\n> +  return 0;\n> +}\n>","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=eVQA7j8l;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=eVQA7j8l","sourceware.org;\n dmarc=none (p=none dis=none) header.from=linux.ibm.com","sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com","server2.sourceware.org;\n arc=none smtp.remote-ip=148.163.158.5"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fwZb02LKjz1yHM\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 18:49:46 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id AA4F04BA2E1C\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 08:49:44 +0000 (GMT)","from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com\n [148.163.158.5])\n by sourceware.org (Postfix) with ESMTPS id 2243E4BA5439\n for <gcc-patches@gcc.gnu.org>; Wed, 15 Apr 2026 08:49:15 +0000 (GMT)","from pps.filterd (m0360072.ppops.net [127.0.0.1])\n by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63F5PUVX1807454; Wed, 15 Apr 2026 08:49:14 GMT","from ppma11.dal12v.mail.ibm.com\n (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219])\n by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4dh89k6pug-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Wed, 15 Apr 2026 08:49:13 +0000 (GMT)","from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1])\n by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id\n 63F50n3E025803;\n Wed, 15 Apr 2026 08:49:13 GMT","from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7])\n by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4dg3b1n51f-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Wed, 15 Apr 2026 08:49:13 +0000","from smtpav02.wdc07v.mail.ibm.com (smtpav02.wdc07v.mail.ibm.com\n [10.39.53.229])\n by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n 63F8nC7333686206\n (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n Wed, 15 Apr 2026 08:49:12 GMT","from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id 0AD225805C;\n Wed, 15 Apr 2026 08:49:12 +0000 (GMT)","from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id F1C8A58058;\n Wed, 15 Apr 2026 08:49:09 +0000 (GMT)","from [9.109.198.156] (unknown [9.109.198.156])\n by smtpav02.wdc07v.mail.ibm.com (Postfix) with ESMTP;\n Wed, 15 Apr 2026 08:49:09 +0000 (GMT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org AA4F04BA2E1C","OpenDKIM Filter v2.11.0 sourceware.org 2243E4BA5439"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 2243E4BA5439","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 2243E4BA5439","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776242955; cv=none;\n b=PriHp2T4vBnevKRjpSymDotrpRrDL1LqwqRcKgpFUQPVVdgXNZZ3gUABcJTewfGPb3UqRoGJuKIDlFogvnqkr3IdE5t9S3a56Bk9mELlCRh4qVtWK0n5Rb6dKJSCIlE7cDIjAUmDLM1Vwntpm+SOrSH/cdxvlfsreuQisbtcF1M=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776242955; c=relaxed/simple;\n bh=rEhTIoBu9SqtIcrDJJtQiaCcdU3rVcS1iU+ovgrttx4=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=N+8wRSuUpEVT7/8g30TsSP1obzg31OBUfuvxES0Aq8jayGDeiyKb0CShcd54WuLo7qAB6vlJ8r547bvwRtCx8WVDHp0tQs13tRKn8g8cSWsNRW7hOVm+QcDFqFCRh5s7a1D2T6b6ElBFCbyj1rAyfmHLOne3YN2YKynrDZxF2og=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=\n content-transfer-encoding:content-type:date:from:in-reply-to\n :message-id:mime-version:references:subject:to; s=pp1; bh=sPimDY\n JiMws2H2x4jiFrK+39OtGx6djIx2tI3byWUhI=; b=eVQA7j8lWFvuf7NyZVMzUy\n DuHVPn7KOlkdzID+akQlsYj//SlhA4HcaUYJ5fu2PjPXugbFhZC7j0K0zP+gW3ZE\n qXlyMYxpVgUw0XXcYKQRM1fiQ+7x1nQrISmMTSbDh+gzxKqd0J2v0JJxKLwYsmyN\n Ec8QIjvk8RkxiGiHTfZ5pcqlEykUZQGzpMJdKWRFF2YDffpH3U23v1WiceqVdE6N\n 96zL8hrapO5jK543nDH6poNUwtFZ9SJAbQcLp3zkPRi6ZOU6J7tidFceQEsO1F5A\n /0p/kMGz4lH3+WCZQHxc5lptcw4BtNZKUD06XgCCaCESj6L+Az4sreUXSnvuDgRQ\n ==","Message-ID":"<42bdc5ab-1c67-46f4-955c-d86ffd2706ec@linux.ibm.com>","Date":"Wed, 15 Apr 2026 14:19:08 +0530","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2] rs6000: Fix PTImode attribute handling [PR106895]","To":"jeevitha <jeevitha@linux.ibm.com>, GCC Patches <gcc-patches@gcc.gnu.org>,\n Michael Meissner <meissner@linux.ibm.com>,\n Avinash Jayakar <avinashd@linux.ibm.com>,\n Segher Boessenkool <segher@kernel.crashing.org>","References":"<b5119df8-a47c-4d35-8228-6d3f9386d808@linux.ibm.com>","From":"Surya Kumari Jangala <jskumari@linux.ibm.com>","Content-Language":"en-US","In-Reply-To":"<b5119df8-a47c-4d35-8228-6d3f9386d808@linux.ibm.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","X-TM-AS-GCONF":"00","X-Proofpoint-GUID":"GOgu67hxjLTEOtup7fiYPasoFruHhNq6","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDE1MDA4MCBTYWx0ZWRfX5KebMH7soiqT\n 6aGJ3Ta7M7IPKlAA+gHE55LV08GBXqKNG4Qr7rJhsfyKFtYbjNnzP9Dl7Yr1M7b45OvZFjYpUkH\n 0IDo094nEf31LfQyw2gkvIpiAQ2caxcM9abrPvo5OplfhiLWT9zMicHK2dtkHNfy5BNDEDlJVCd\n wLtrDvJDBURUzMjVaQPBwc/7QAN6EfQJh1tn4X1e9nftB5BdX7a+Nm8In+HML7Am54PHiDuJwLn\n NB6YljXhZZ2qP83jn23ZDXARcfu8d8FhmoR8FZ3o2ml6bun0fmaavoeIkx6eRrrg4uQe5+iNY2x\n 8m81hVCct7Juo++Am/LZ/NjCNfy6JpZYdIoq1NMB0io/+abur+iRb0VUmXP6if8UsgDOj+lbSxL\n cMSDT5iex5HTMMjemDwIqfGWR/jUBcxJ43Hcp7HFaHbbKXgySyPHrp0M1WHOxhKIpXOib1JHVWk\n xEnHOY242cPEzaqxO1A==","X-Proofpoint-ORIG-GUID":"GOgu67hxjLTEOtup7fiYPasoFruHhNq6","X-Authority-Analysis":"v=2.4 cv=W60IkxWk c=1 sm=1 tr=0 ts=69df510a cx=c_pps\n a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17\n a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8\n a=mn8nIIa2fBopP9xHLuEA:9 a=QEXdDO2ut3YA:10","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-14_04,2026-04-13_04,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n impostorscore=0 clxscore=1015 priorityscore=1501 spamscore=0 bulkscore=0\n adultscore=0 phishscore=0 lowpriorityscore=0 suspectscore=0 malwarescore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2604070000 definitions=main-2604150080","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]