From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by sourceware.org (Postfix) with ESMTPS id E2F8A3858C41 for ; Fri, 19 May 2023 19:32:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E2F8A3858C41 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-64d3fbb8c1cso626789b3a.3 for ; Fri, 19 May 2023 12:32:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684524772; x=1687116772; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=4AUnm4pclcmihtR8An8+aR9bvpq/eQzBL1bZc33Rzic=; b=kLl9iRx97n5yenjcGySQJbZhlDsqsVAF6XvKobsSACG0BXo2ozxSrFVEurBngS69mq 5PkcC+qpO/M1U0cycpxrBFv7paF8FBcL53sPeGL/EMJmW4Ghw7n9E5WcpP7VyWtwzs3r rOIerQHIfH5f4J0rykOe0Y9P66PeTv4KjNxUhmAgyFz3zoGapaAsj7TmcNXQ0mulOXe6 9M554AgiJfbn6cHTfejYUiHLBf7lYrpfhrTBBvLIk8sK77s+65DG4z1xNafprsOKjnYX oSakw1mcrtr06iVnRxrzTetzYao/KV+pEJVFRrs2N0mi+6TeM3s7YnvcFPj9evDsZZvt +/nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684524772; x=1687116772; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4AUnm4pclcmihtR8An8+aR9bvpq/eQzBL1bZc33Rzic=; b=T71/d+LBEr9bdHvsaNpg0mjVAqFWsSNr6OdzizsXr7GuxRisfiVpUhHnDLKIJriOrD FOpuX+2O5xJkLf9K+qdg981W3zRHVYRzkBTPE/jF9SqsMDIQ4MfC7TZ/kwH/5Tq70Gf3 WoMQsyrJYcreVEwBXTS8dSwzo7lgulyhNuE8Z+kjdp0tXbytr5G5bDk87zbZa52gTHen nghofbd3KbUbosEB1FmjSvkt4kYUAOHJnhzRjdEO76CR/boCpi5W89Rbr4SggE00qDH5 r2rLPEl24IIjJPcFz10pXh0I89kiMYYWZpBFus6cr8THsCDTHXBJ23xFsdjy2SIFw1rx dgUQ== X-Gm-Message-State: AC+VfDzdRFkEKD+2RM13HgxgsCvnj6btGFwNg0f64QRO45kbC1xJQQGX tATuBKoZIFBU/T/z1qQRpfM= X-Google-Smtp-Source: ACHHUZ487Od3gsz04bdQJoSVElUw2TVGRDMVLMs/NcUjzq4MIC75T9J0/oHBn9voH1XfmGtOlWD38w== X-Received: by 2002:a05:6a20:72a0:b0:103:9d9b:1ead with SMTP id o32-20020a056a2072a000b001039d9b1eadmr3626436pzk.50.1684524771636; Fri, 19 May 2023 12:32:51 -0700 (PDT) Received: from ?IPV6:2601:681:8d00:265::f0a? ([2601:681:8d00:265::f0a]) by smtp.gmail.com with ESMTPSA id t11-20020a63460b000000b004ff6b744248sm85938pga.48.2023.05.19.12.32.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 May 2023 12:32:51 -0700 (PDT) Message-ID: <18f2005d-3f59-1c3f-b1e4-97572416441e@gmail.com> Date: Fri, 19 May 2023 13:32:49 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: [PATCH v4 4/4] ree: Improve ree pass for rs6000 target using defined ABI interfaces. Content-Language: en-US To: Ajit Agarwal , 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> <438860a6-4c03-2d5b-c465-833998e80bab@linux.ibm.com> From: Jeff Law In-Reply-To: <438860a6-4c03-2d5b-c465-833998e80bab@linux.ibm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,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 5/16/23 06:35, Ajit Agarwal wrote: > > > 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. You're working with one of many ABIs, some of which have useful properties, some of which do not. Simply testing FUNCTION_VALUE_REGNO_P/FUNCTION_ARG_REGNO_P is not sufficient. You need to be able to query the ABI properties. jeff