From patchwork Tue Jan 17 04:54:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Takayuki 'January June' Suwa X-Patchwork-Id: 44492 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1563017wrn; Mon, 16 Jan 2023 20:55:36 -0800 (PST) X-Google-Smtp-Source: AMrXdXsRByHGB+oC4y+U/lTypziEl4Nvru9zvNlu+V2oBH3rtevVI8psslR4C4OddwOhkqIkqkBF X-Received: by 2002:a17:906:2c45:b0:843:a9fe:f112 with SMTP id f5-20020a1709062c4500b00843a9fef112mr1440662ejh.16.1673931336867; Mon, 16 Jan 2023 20:55:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673931336; cv=none; d=google.com; s=arc-20160816; b=NGjHs+UvBCr9fJTFrruC8vBzzRlgzXW5iKKW+cR+HSbqpXmORUr93WbnvsSsfTErux ppnxZXeWKFr4tYpbYQJeEOVg7FnwWEFrt2VQXl5uyXW1+m1AGmPci+5SuwbH0Yi0yk1i JYdspkFJpijsJjf7Cqmo6arFIr+mgJFv8F1drgLSYwirizbVTBgAUMbBSgfRIxEh3a2m Iz+wtI5GRkgzt8pO/gGppRqQO59PfK6D1zDu2vlt6oSLB3OZTEDwbE/isIoek17uG7fe gMER2MVk0PB/cWBxoC2w2ZrWjZPFDOwZYCsql9eJ+AjZ1+5+P0LqDNrVFKCCChsf9J3P 2Z1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:references :content-transfer-encoding:subject:cc:to:user-agent:mime-version :date:message-id:dmarc-filter:delivered-to:dkim-signature :dkim-filter; bh=mAik8icehAsaOjFmMdzisHd0j/Qo3OrnWxSw7Qj+S5A=; b=uS+UPfv0G8g2By5rJ6eWn3+tfOr0FM51WeBlLhmxO0nwijx5Lj37aY7eq9sU6L9WJx 4RTb9xAai2zAVmDH7LKWfObA7fvhUqc7bqzcl/b6bc5gCETHFWyiK72bLUbG64eZoqLu nV8gITaldGR9AYIMQZyUIOLUuC3rskBO7hlv9miBRuvGSYYeaOJ2sV+Of5w8ZHVB359H r6QxXQIJ36oLGQVri+QXTA22tBEEXyfJ5SwQxwG+tEPNwpHaAdh8DGD4tT2Pe8cRJ+Xj zxTRQuHho4EnxkNbGWN3msuCh+O0k99ZO1DilvJiN/dcox5qr6bt1RNun9oE1fc0smLK nK6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=sJ2Pkn8P; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id ds17-20020a170907725100b008225eae8867si31608616ejc.108.2023.01.16.20.55.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 20:55:36 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=sJ2Pkn8P; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A4EE3385842A for ; Tue, 17 Jan 2023 04:55:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A4EE3385842A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1673931335; bh=mAik8icehAsaOjFmMdzisHd0j/Qo3OrnWxSw7Qj+S5A=; h=Date:To:Cc:Subject:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=sJ2Pkn8PW5x5vk/+Ddk9dEfNSrl6bm1DF826+QCj2dzbm3eGeYZqiAB1o9NJgvDl+ SEB7RW42cQtTSJQi+BHwy6nswvhWJXAKnM8PDKjEcI7yNIisDsEZMRMDCjGhM6RTgW ixg15Hkg2v01nzGO8ylXmBweuQFNXQ2B2BskB7VM= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from sonicconh5001-vm0.mail.kks.yahoo.co.jp (sonicconh5001-vm0.mail.kks.yahoo.co.jp [114.110.61.11]) by sourceware.org (Postfix) with ESMTPS id 4461A3858C83 for ; Tue, 17 Jan 2023 04:54:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4461A3858C83 X-YMail-OSG: aHxVKlUVM1lzfuJmTMp_oYruqhkkgGU_v.3QC1OLPjRafA4G.3WfzESfN9G6EAY 2EzV663qFlt5gb6XVne2JR7AdFmCL4TxYYofflRhUCfDelm6iwdX54DTdsPcNFcj3tiv7puZGtfJ wVG.KclRa3FJWqfbcr3W9vo95ZrSDXQkWs8AhjiPHqZLfo23ZMJ0gsEZfso9Df9gqCZX6akM7elJ k_mVM9z7fGyEk65JUgI.mgHmUcad3CXrzIvsJTG.tV50QXUIUj_mULGzr_m5vYkr6DXXy46tRDeS mOZNbi6.AVbxh8pWlomYFo4XVSq.dgjsPa1KuE7bSrpdngNy1Qb9lBefmdsKI4ofCvNURGy8TG6u jQ92XsKhIIO7WFLT76I.dNKSzNeFt6XWivfy4BB6M_eAW76bpwX3hVp0XUTnFmDtOnmTKyo2Kjzd BZuFOd5wW50I7bN0J0hhPoOyFTJPjHc9KHYNgjz7bep2jTJi.6mw642p79GFhiRmkQHWXkRCCDOT H0.TY_egDE5CPOlPZJNftEFjvl4OYR30rhGk4nR8FuSO040bgZzBvycAlLDSMxUjfUsUMDEo1GVA YS79tOqk3QXnTlCC.YSDAMn.tc45HTUVbQ4rfz.V.RAKUz4RB6k6iDbWNe0ctUWYhcAuR1rf5yS1 YRC6ftMSUR6gm9BFZQ8Sjknoh2oviAG1DydeTtQFs6WNlWcl5KB2MHBhn40jetCswDA_IdUNuyZI iuDw98D7CWYDxHE7FPXhelqGfPyRU198aWv7imf6B0OLC69tqBBjxvgkT1SrxHbf1tIouDJLAnAs sTP8hve7CNXSBFqsfdqT7Q9.W3qymnO2ATK0mDOsNl0hCub90xX.DWziF5LepBRAmKMm4IkrWb5S 9.tgJMjYlkrdNEcaP3TWqF4DK.BDgs6EKL1hePj2kNxWB83qyNIXdmdbJDSUWHbbahxS0hHOE9LA RSXa9wDE- Received: from sonicgw.mail.yahoo.co.jp by sonicconh5001.mail.kks.yahoo.co.jp with HTTP; Tue, 17 Jan 2023 04:54:45 +0000 Received: by smtphe5007.mail.kks.ynwp.yahoo.co.jp (YJ Hermes SMTP Server) with ESMTPA ID 489a5b99ff033b184c6f0ed7caf17388; Tue, 17 Jan 2023 13:54:45 +0900 (JST) Message-ID: Date: Tue, 17 Jan 2023 13:54:44 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 To: GCC Patches Cc: Max Filippov Subject: [PATCH] xtensa: Eliminate unnecessary general-purpose reg-reg moves References: X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP 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-Patchwork-Original-From: Takayuki 'January June' Suwa via Gcc-patches From: Takayuki 'January June' Suwa Reply-To: Takayuki 'January June' Suwa Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755244225689388031?= X-GMAIL-MSGID: =?utf-8?q?1755244225689388031?= Register-register move instructions that can be easily seen as unnecessary by the human eye may remain in the compiled result. For example: /* example */ double test(double a, double b) { return __builtin_copysign(a, b); } test: add.n a3, a3, a3 extui a5, a5, 31, 1 ssai 1 ;; be in the same BB src a7, a5, a3 ;; No '0' in the source constraints ;; No CALL insns in this span ;; Both A3 and A7 are irrelevant to ;; insns in this span mov.n a3, a7 ;; An unnecessary reg-reg move ;; A7 is not used after this ret.n The last two instructions above, excluding the return instruction, could be done like this: src a3, a5, a3 This symptom often occurs when handling DI/DFmode values with SImode instructions. This patch solves the above problem using peephole2 pattern. gcc/ChangeLog: * config/xtensa/xtensa.md: New peephole2 pattern that eliminates the occurrence of genral-purpose register used only once and for transferring intermediate value. --- gcc/config/xtensa/xtensa.md | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 61bbad8e4..1b53c8c9e 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -3089,3 +3089,47 @@ FALLTHRU:; df_insn_rescan (insnR); set_insn_deleted (insnP); }) + +(define_peephole2 + [(set (match_operand 0 "register_operand") + (match_operand 1 "register_operand"))] + "GET_MODE_SIZE (GET_MODE (operands[0])) == 4 + && GET_MODE_SIZE (GET_MODE (operands[1])) == 4 + && GP_REG_P (REGNO (operands[0])) && GP_REG_P (REGNO (operands[1])) + && peep2_reg_dead_p (1, operands[1])" + [(const_int 0)] +{ + basic_block bb = BLOCK_FOR_INSN (curr_insn); + rtx dest = operands[0], src = operands[1], pattern, t_dest; + rtx_insn *insn; + int i; + for (insn = PREV_INSN (curr_insn); + insn && BLOCK_FOR_INSN (insn) == bb; + insn = PREV_INSN (insn)) + if (CALL_P (insn)) + break; + else if (INSN_P (insn)) + { + if (GET_CODE (pattern = PATTERN (insn)) == SET + && REG_P (t_dest = SET_DEST (pattern)) + && GET_MODE_SIZE (GET_MODE (t_dest)) == 4 + && REGNO (t_dest) == REGNO (src) + && ! REG_P (SET_SRC (pattern))) + { + extract_constrain_insn (insn); + for (i = 1; i < recog_data.n_operands; ++i) + if (strchr (recog_data.constraints[i], '0')) + goto ABORT; + SET_REGNO (t_dest, REGNO (dest)); + goto FALLTHRU; + } + if (reg_overlap_mentioned_p (dest, pattern) + || reg_overlap_mentioned_p (src, pattern) + || set_of (dest, insn) + || set_of (src, insn)) + break; + } +ABORT: + FAIL; +FALLTHRU:; +})