From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 355BF3858C20; Thu, 14 Jul 2022 02:54:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 355BF3858C20 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26E2bFLl009453; Thu, 14 Jul 2022 02:54:33 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3haa55rqs3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 14 Jul 2022 02:54:32 +0000 Received: from m0098409.ppops.net (m0098409.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26E2DcKR012612; Thu, 14 Jul 2022 02:54:32 GMT Received: from ppma01fra.de.ibm.com (46.49.7a9f.ip4.static.sl-reverse.com [159.122.73.70]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3haa55rqre-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 14 Jul 2022 02:54:32 +0000 Received: from pps.filterd (ppma01fra.de.ibm.com [127.0.0.1]) by ppma01fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 26E2qv0E023704; Thu, 14 Jul 2022 02:54:29 GMT Received: from b06cxnps4076.portsmouth.uk.ibm.com (d06relay13.portsmouth.uk.ibm.com [9.149.109.198]) by ppma01fra.de.ibm.com with ESMTP id 3h71a8wqnt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 14 Jul 2022 02:54:29 +0000 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 26E2sRCl24642022 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 14 Jul 2022 02:54:27 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6B45A42049; Thu, 14 Jul 2022 02:54:27 +0000 (GMT) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AB20F42042; Thu, 14 Jul 2022 02:54:25 +0000 (GMT) Received: from [9.197.245.91] (unknown [9.197.245.91]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 14 Jul 2022 02:54:25 +0000 (GMT) Message-ID: <248b65bd-5a2a-8315-1b18-3c8d0606643f@linux.ibm.com> Date: Thu, 14 Jul 2022 10:54:23 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [PATCH] HIGH part of symbol ref is invalid for constant pool Content-Language: en-US To: Jiufu Guo Cc: segher@kernel.crashing.org, dje.gcc@gmail.com, linkw@gcc.gnu.org, gcc-patches@gcc.gnu.org References: <20220704065831.55961-1-guojiufu@linux.ibm.com> From: "Kewen.Lin" In-Reply-To: <20220704065831.55961-1-guojiufu@linux.ibm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 6rGM_ShMH0qvZa2VgRE9uct4zqTNC_-A X-Proofpoint-ORIG-GUID: 7X2suErogj_bVaO3EuVWL6tLMqr7U_un X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-13_13,2022-07-13_03,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 impostorscore=0 mlxscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 phishscore=0 adultscore=0 clxscore=1011 bulkscore=0 spamscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207140009 X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Jul 2022 02:54:35 -0000 Hi Jeff, Thanks for the patch, one question is inlined below. on 2022/7/4 14:58, Jiufu Guo wrote: > The high part of the symbol address is invalid for the constant pool. In > function rs6000_cannot_force_const_mem, we already return true for > "HIGH with UNSPEC" rtx. During debug GCC, I found that > rs6000_cannot_force_const_mem is called for some other HIGH code rtx > expressions which also indicate the high part of a symbol_ref. > For example: > (high:DI (const:DI (plus:DI (symbol_ref:DI ("xx") (const_int 12 [0xc]))))) > (high:DI (symbol_ref:DI ("var_1")..))) > > In the below case, this kind of rtx could occur in the middle of optimizations > pass but was not dumped to a file. So, no test case is attached to this > patch. > Could you help to expand this more on how it affects some tree-optimization pass? I guess some tree-opt will expand gimple expression to rtx, evaluate the cost or similar and make some decision basing on it. If that is the case, you probably can construct one test case to show that: without this patch, the evaluated cost or similar looks off, the optimization decision is sub-optimal; with this patch, the optimization result is expected. BR, Kewen > extern const unsigned int __decPOWERS[10]; > void > decSetCoeff (int *residue, const unsigned int *up) > { > unsigned int half = (unsigned int) __decPOWERS1[3] >> 1; > > if (*up >= half) > *residue = 7; > > return; > } > > This patch updates rs6000_cannot_force_const_mem to return true for > rtx with HIGH code. > > > Bootstrapped and regtested on ppc64le and ppc64. > Is it ok for trunk? > > BR, > Jiufu Guo > > > gcc/ChangeLog: > > * config/rs6000/rs6000.cc (rs6000_cannot_force_const_mem): > Return true for HIGH code rtx. > > --- > gcc/config/rs6000/rs6000.cc | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc > index 3ff16b8ae04..c2b10669627 100644 > --- a/gcc/config/rs6000/rs6000.cc > +++ b/gcc/config/rs6000/rs6000.cc > @@ -9707,8 +9707,11 @@ rs6000_init_stack_protect_guard (void) > static bool > rs6000_cannot_force_const_mem (machine_mode mode ATTRIBUTE_UNUSED, rtx x) > { > - if (GET_CODE (x) == HIGH > - && GET_CODE (XEXP (x, 0)) == UNSPEC) > + /* High part of a symbol ref/address can not be put into constant pool. e.g. > + (high:DI (symbol_ref:DI ("var")..)) or > + (high:DI (unspec:DI [(symbol_ref/u:DI ("*.LC0")..) > + (high:DI (const:DI (plus:DI (symbol_ref:DI ("xx")) (const_int 12)))). */ > + if (GET_CODE (x) == HIGH) > return true; > > /* A TLS symbol in the TOC cannot contain a sum. */