From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 149D1385783F for ; Tue, 16 May 2023 12:39:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 149D1385783F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 34GCVpAV003958; Tue, 16 May 2023 12:39:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=pp1; bh=ffL9Z/+zoDlLnz92s85tvsWh36tT0xTiSdgMtHngieo=; b=eV9jSfXevzriLvp2Un+HujpkaT/zCvSVMCEf4YzX8W3ctCZ6at4h88XbzlQtsMGIWCnb bpcHc7J2+s73gnIJKX+rRLwKEVEXhL/nMymIvUnSMDGcuGaJvqsz1LHbArZNLq0Wh9DA jZBGjx0RE6+F55BNtq9YNb8KKJ+atE/jpq5H5yiriOemdVSxBv0iCTBnfbDeQn61wFb3 BHBzkRmUg/wtB9EDnmdG3hu7YFHX6U+lMkg6IPpi8uwJpKJ/Abne97e7KM5tATbT5dxv QjVseiRcyqWMait5/GgvVqsrl+PI60plKZZs4odUNj0PiiLgaV6ZEIMLYqqqPi0Mb8Ev ug== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3qm90623jn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 16 May 2023 12:39:07 +0000 Received: from m0356516.ppops.net (m0356516.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 34GCYODZ017846; Tue, 16 May 2023 12:38:43 GMT Received: from ppma01wdc.us.ibm.com (fd.55.37a9.ip4.static.sl-reverse.com [169.55.85.253]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3qm906203x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 16 May 2023 12:38:39 +0000 Received: from pps.filterd (ppma01wdc.us.ibm.com [127.0.0.1]) by ppma01wdc.us.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 34G9xdgI017377; Tue, 16 May 2023 12:35:38 GMT Received: from smtprelay07.wdc07v.mail.ibm.com ([9.208.129.116]) by ppma01wdc.us.ibm.com (PPS) with ESMTPS id 3qj2658cfp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 16 May 2023 12:35:37 +0000 Received: from smtpav03.wdc07v.mail.ibm.com (smtpav03.wdc07v.mail.ibm.com [10.39.53.230]) by smtprelay07.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 34GCZaeV55181672 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 16 May 2023 12:35:37 GMT Received: from smtpav03.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D39985805A; Tue, 16 May 2023 12:35:36 +0000 (GMT) Received: from smtpav03.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7688C5805F; Tue, 16 May 2023 12:35:33 +0000 (GMT) Received: from [9.43.24.128] (unknown [9.43.24.128]) by smtpav03.wdc07v.mail.ibm.com (Postfix) with ESMTP; Tue, 16 May 2023 12:35:33 +0000 (GMT) Message-ID: <438860a6-4c03-2d5b-c465-833998e80bab@linux.ibm.com> Date: Tue, 16 May 2023 18:05:30 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH v4 4/4] ree: Improve ree pass for rs6000 target using defined ABI interfaces. Content-Language: en-US To: Jeff Law , Hans-Peter Nilsson Cc: gcc-patches , Segher Boessenkool , Peter Bergner , Richard Biener References: <8b50f07a-994e-1637-ae4d-2be8dbb25807@linux.ibm.com> <77213cc0-f666-8233-5af7-0aa199455b54@gmail.com> From: Ajit Agarwal In-Reply-To: <77213cc0-f666-8233-5af7-0aa199455b54@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: klQ2t4tgG7JLHf7ZxVLoBqgBfmQpsWAs X-Proofpoint-GUID: ld1moCLBGwVI8iErL6YjNkwG403OSaQB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-05-16_06,2023-05-16_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 phishscore=0 impostorscore=0 lowpriorityscore=0 adultscore=0 mlxlogscore=891 clxscore=1011 bulkscore=0 malwarescore=0 spamscore=0 priorityscore=1501 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2304280000 definitions=main-2305160107 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,BODY_8BITS,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 List-Id: On 29/04/23 5:03 am, Jeff Law wrote: > > > On 4/28/23 16:42, Hans-Peter Nilsson wrote: >> On Sat, 22 Apr 2023, Ajit Agarwal via Gcc-patches wrote: >> >>> Hello All: >>> >>> This new version of patch 4 use improve ree pass for rs6000 target using defined ABI interfaces. >>> Bootstrapped and regtested on power64-linux-gnu. >>> >>> Thanks & Regards >>> Ajit >>> >>> >>>     ree: Improve ree pass for rs6000 target using defined abi interfaces >>> >>>          For rs6000 target we see redundant zero and sign >>>          extension and done to improve ree pass to eliminate >>>          such redundant zero and sign extension using defines >>>          ABI interfaces. >>> >>>          2023-04-22  Ajit Kumar Agarwal  >>> >>> gcc/ChangeLog: >>> >>>          * ree.cc (combline_reaching_defs): Add zero_extend >>>          using defined abi interfaces. >>>          (add_removable_extension): use of defined abi interfaces >>>          for no reaching defs. >>>          (abi_extension_candidate_return_reg_p): New defined ABI function. >>>          (abi_extension_candidate_p): New defined ABI function. >>>          (abi_extension_candidate_argno_p): New defined ABI function. >>>          (abi_handle_regs_without_defs_p): New defined ABI function. >>> >>> gcc/testsuite/ChangeLog: >>> >>>          * g++.target/powerpc/zext-elim-3.C >>> --- >>>   gcc/ree.cc                                    | 176 +++++++++++++++--- >>>   .../g++.target/powerpc/zext-elim-3.C          |  16 ++ >>>   2 files changed, 162 insertions(+), 30 deletions(-) >>>   create mode 100644 gcc/testsuite/g++.target/powerpc/zext-elim-3.C >>> >>> diff --git a/gcc/ree.cc b/gcc/ree.cc >>> index 413aec7c8eb..0de96b1ece1 100644 >>> --- a/gcc/ree.cc >>> +++ b/gcc/ree.cc >>> @@ -473,7 +473,8 @@ get_defs (rtx_insn *insn, rtx reg, vec *dest) >>>       break; >>>       } >>>   -  gcc_assert (use != NULL); >>> +  if (use == NULL) >>> +    return NULL; >>>       ref_chain = DF_REF_CHAIN (use); >>>   @@ -514,7 +515,8 @@ get_uses (rtx_insn *insn, rtx reg) >>>       if (REGNO (DF_REF_REG (def)) == REGNO (reg)) >>>         break; >>>   -  gcc_assert (def != NULL); >>> +  if (def == NULL) >>> +    return NULL; >>>       ref_chain = DF_REF_CHAIN (def); >>>   @@ -750,6 +752,103 @@ get_extended_src_reg (rtx src) >>>     return src; >>>   } >>>   +/* Return TRUE if the candidate insn is zero extend and regno is >>> +   an return  registers.  */ >>> + >>> +static bool >>> +abi_extension_candidate_return_reg_p (rtx_insn *insn, int regno) >>> +{ >>> +  rtx set = single_set (insn); >>> + >>> +  if (GET_CODE (SET_SRC (set)) !=  ZERO_EXTEND) >>> +    return false; >>> + >>> +  if (FUNCTION_VALUE_REGNO_P (regno)) >>> +    return true; >>> + >>> +  return false; >>> +} >>> + >>> +/* Return TRUE if reg source operand of zero_extend is argument registers >>> +   and not return registers and source and destination operand are same >>> +   and mode of source and destination operand are not same.  */ >>> + >>> +static bool >>> +abi_extension_candidate_p (rtx_insn *insn) >>> +{ >>> +  rtx set = single_set (insn); >>> + >>> +  if (GET_CODE (SET_SRC (set)) !=  ZERO_EXTEND) >>> +    return false; >>> + >>> +  machine_mode ext_dst_mode = GET_MODE (SET_DEST (set)); >>> +  rtx orig_src = XEXP (SET_SRC (set),0); >>> + >>> +  bool copy_needed >>> +    = (REGNO (SET_DEST (set)) != REGNO (XEXP (SET_SRC (set), 0))); >>> + >>> +  if (!copy_needed && ext_dst_mode != GET_MODE (orig_src) >>> +      && FUNCTION_ARG_REGNO_P (REGNO (orig_src)) >>> +      && !abi_extension_candidate_return_reg_p (insn, REGNO (orig_src))) >>> +    return true; >>> + >>> +  return false; >>> +} >>> + >>> +/* Return TRUE if the candidate insn is zero extend and regno is >>> +   an argument registers.  */ >>> + >>> +static bool >>> +abi_extension_candidate_argno_p (rtx_code code, int regno) >>> +{ >>> +  if (code !=  ZERO_EXTEND) >>> +    return false; >>> + >>> +  if (FUNCTION_ARG_REGNO_P (regno)) >>> +    return true; >>> + >>> +  return false; >>> +} >> >> I don't see anything in those functions that checks if >> ZERO_EXTEND is actually a feature of the ABI, e.g. as opposed to >> no extension or SIGN_EXTEND.  Do I miss something? > I don't think you missed anything.  That was one of the points I was making last week.  Somewhere, somehow we need to describe what the ABI mandates and guarantees. > > So while what Ajit has done is a step forward, at some point the actual details of the ABI need to be described in a way that can be checked and consumed by REE. The ABI we need for ree pass are the argument registers and return registers. Based on that I have described interfaces that we need. Other than that we dont any other ABI hooks. I have used FUNCTION_VALUE_REGNO_P and FuNCTION_ARG_REGNO_P abi hooks. Thanks & Regards Ajit > > Jeff