From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonicconh5003.mail.kks.yahoo.co.jp (sonicconh5003.mail.kks.yahoo.co.jp [114.110.61.42]) by sourceware.org (Postfix) with ESMTPS id 1614D3858D28 for ; Wed, 18 Jan 2023 05:25:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1614D3858D28 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=yahoo.co.jp Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.co.jp X-YMail-OSG: 9DSYGvwVM1kUR3cufoUR_aJpwJSL5N20EhYJppjm3U85qrfdUu2Bpz.JukBFquK 0SQej9RhiTo9gablD4Rp5b7AFq6vNlzJhPFDDDuaoAhi.v1gODx8p9uyqTOOq_Xdzrfy6e5hcX_e zf.aMDvSbKfHmoBaIVtPgZyHrBFJtGh13v5lAFz4GCN5ynGmHtmkm7HiGLtsl8CR9ZL.KlGRCKsi WKJJm5GOUgIaRh4sx5ajovhByVsq4RleGZ__I8FoB5riw5BYbB3rAHF711z.M2BnTWvylVErzb3G tRmSQYABMr22.Z3zKTcD0ue8XwUINbqnHDrqFrPbqj3fnar96jv0EfXNkNk5Xlu.xBvR48OUOqER ALWM2lROog7CXDnZJFJRil0anB44Q3oYZdnkYgltn3P0UGk8V7GyuRz2Ti7wsluJOphevF_TubDS AcRn4ffvnhjKsgWFnAxc44.y94kicnkks.R39ZSiE9kVpEfMD0sZsarxdNW19j4ZgE0qM6Ab4WxP 5QlJVMqvMYrmkJ3wUf1gtI3.TZ.CLL5nqqQ1y760eDSiUHCp0k7RM44zo1kvjxz8V9K7raIEG8.o we20ijW0Gfvghqbi6GnlvdeYyXPWz_cLt5CRVFXFTCsRMq2SRQqMXArOLA0mGidc1A24G6rS3rAq eruB72Ru5SUnqBwwvcfcVnCvocIEYeVUKOucVPGApYIjFqj4EvxSVIqUUgH.eo4ZghwxeUW8oj4N qYo3fM3nS.H.3CFFs4UVe_gxYOyb89FJe4JVnQXCNbkEXd4qo.DBi1pqQtrGOCqEabFhjHPqzOoY JfysPy90uSvU2WThzIWYTPVy4lecQlCePmJ0fdPBGQ_pY00vXgFlglWUBlIYIm7Maixj4ZcIUHUe GKJaPX49bYgToiPaN4hYKvpWc3lkWv4a6KBXQD.puoB0gDzqQpldOK9YdqyXA0j84lBvJlmlGEbA Jp3s_61zx Received: from sonicgw.mail.yahoo.co.jp by sonicconh5003.mail.kks.yahoo.co.jp with HTTP; Wed, 18 Jan 2023 05:25:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1674019546; s=yj20110701; d=yahoo.co.jp; h=Message-ID:Date:MIME-Version:To:Cc:From:Subject:Content-Type:Content-Transfer-Encoding:References; bh=MzYfadqVS3MUCcvRqhb95hWkWCRR+iWtkbg5anjzBlA=; b=rdlX5xQPQGHR/GBZcUAvMF1hBXHmn/dOGFrVmAS6GyqncLMllv73uKR7oIS855e8 0JTzGovj30VNST5Wi69RKuwYcSYUQK/1eJZX/MqDYrldXzn0f3M6I1LvEjzAwl9wswu Fcn5+NEtRA7euXTqSJu8rLKTIzDbJaQk0YClpZ6A= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=yj20110701; d=yahoo.co.jp; h=Message-ID:Date:MIME-Version:Cc:From:Content-Type:Content-Transfer-Encoding:References; b=haU6iaKnAgIm/m6NxyhMudUjHYJKvLhADWV6o+cC28zj95hZ8OuJt5AT/yMgw8dV UOi8umO7IrCnhJmFnPiVJNpwvm8Ivn+Jm7Nr/7bklGD0Nq/1bCxmDHelt4w/fdxtB0V OXVo4c9Dy/4jb6h21efwXG4zHsM2H4jSPQocKJGw=; Received: by smtphe5001.mail.kks.ynwp.yahoo.co.jp (YJ Hermes SMTP Server) with ESMTPA ID c8e7ba0bfe89a06c88b86d2a27b65aa1; Wed, 18 Jan 2023 14:25:43 +0900 (JST) Message-ID: Date: Wed, 18 Jan 2023 14:25:41 +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 From: Takayuki 'January June' Suwa Subject: [PATCH v2] xtensa: Eliminate unnecessary general-purpose reg-reg moves Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit References: X-Spam-Status: No, score=-11.7 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,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 List-Id: 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 | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 3694d95ad..0a477e711 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -3091,3 +3091,46 @@ 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_insn *head = BB_HEAD (bb), *insn; + rtx dest = operands[0], src = operands[1], pattern, t_dest; + int i; + for (insn = PREV_INSN (curr_insn); + insn && insn != head; + 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)) + { + 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:; +}) -- 2.30.2