From patchwork Thu Sep 1 05:49:13 2022 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: 57230 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 84AB6382DB38 for ; Thu, 1 Sep 2022 05:51:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 84AB6382DB38 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1662011468; bh=6kyEfrDXUZ1A7Zlhzi4NEgmIasmuWjjpTnnGEkwARKo=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=Ii1P2VkD/E70N4oe7Hla/N8RRjLpi/ND4EQFbVJiwWNADlmpt6AnN9bgWdBbMFS8n 15ssKYrA3ISLeaMiyYPVE+6V3iiEk6k/fvOtFcvSUUfq8qzngZ/WnDnzv7QXXI+Uzq ApKm/gjbIsuVjtMZPL5014VieTQvs8XaRaJw/fm4= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from nh602-vm9.bullet.mail.ssk.yahoo.co.jp (nh602-vm9.bullet.mail.ssk.yahoo.co.jp [182.22.90.34]) by sourceware.org (Postfix) with SMTP id 3D3B13854150 for ; Thu, 1 Sep 2022 05:50:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3D3B13854150 Received: from [182.22.66.105] by nh602.bullet.mail.ssk.yahoo.co.jp with NNFMP; 01 Sep 2022 05:50:34 -0000 Received: from [182.22.91.130] by t603.bullet.mail.ssk.yahoo.co.jp with NNFMP; 01 Sep 2022 05:50:33 -0000 Received: from [127.0.0.1] by omp603.mail.ssk.yahoo.co.jp with NNFMP; 01 Sep 2022 05:50:33 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 959472.74411.bm@omp603.mail.ssk.yahoo.co.jp Received: (qmail 71717 invoked by alias); 1 Sep 2022 05:50:33 -0000 Received: from unknown (HELO ?192.168.2.3?) (175.177.45.181 with ) by smtp5003.mail.kks.ynwp.yahoo.co.jp with SMTP; 1 Sep 2022 05:50:33 -0000 X-YMail-JAS: PjqgVAQVM1n1onOCzcg8qXxdaaUGrLHcQoUGCEQcbAehqItXqQMgUURuAnun_tNVtWj5113OHZ_Xg6LVq0RepCofGcqCCSd0L1gAlgYMLAMFqbqFuSkyPifeoNKXzMJJq0U8hO_Z_A-- X-Apparently-From: X-YMail-OSG: wKmG1q8VM1kt7jCtsbsnEXjdyQE9GwAYXX.IBCoes5AYn_t BSsZ1AB8UjztbCN5CUD03HD4pqUUhrGsEr4_csjBZEVirEqSVQxeOebR_rUb WxMHZNSLX3Gk1UyU5A__dGbFi.0sF10fbHKs7CGrBcfDMw6lqMwgixMtW95H mu0lmMHa6en81Us_lzI1eSfQr8ceTwlloDR0FEXOSrJJLW08s8xBlo2gw7DP jnNtBo4vXW9GjkE6W0sTblp0olPJYzvWkd7C6wqYG_vmDArrSnJShHMPbgMX G6SDGTVfXPGuA1nVyLKEl.Ps5AZ3QUOsi7a1Ix79SxWzpBD4SrEyg8.sdbMZ NlmVQ7KQlK_.tSr9mgXdye36HUL27Tnu6ym.B4sQnk7IUuxl9yF6Z4THeg6e rQ63d37sbDUao2AxlTI2U6oS0zj8bdBq1tIPfVjOkp2NEb3JOP2LVN9hkBRw P2gfJRU2Z_gkso1N2kupLeHcKS5NPMIP.y9VdFcx15x72C_Nq52GfH.JcMMF 9c4ri2sp10QNS5ArSDW3V7DPzQ0UDgkzznjSIzVH9gXGwF4yM9nBWIxMzjfm 7hU9NifIVK2RGVWHYVz62589p0zOg1j06twsk.8l7.lv4wXw1pb.mWsC6Vy7 97jG7ZIm1zU8Qv0hE8SQIg7MZSTWJjCCIV_l0hnF9gfP4SqIjR7sZEpZYnzh X6Ezk.BEUFrFhRTEhJvlLGLZ5byuGfUIs5y02U1kXKKpxmQ80D_97SaGhOQe 5MOwqo8E65LuqhpXho0QwQlnQQtezT7d1ANFCNa_dVTEWnbF8RNPfAbUgDz3 aE6rMektzHwuZT3VNFBF3UZKvfGDrk2XO8auckZi4NwOIx_rKYOvGJHdmuCy 7NhR7N967O7EE7xIDUTeTuPt2_QKbMbHoFFtIJirpg64jpJNjjT_OXMWyE1F OdpkWAYqZGsrC9na9yg-- Message-ID: <1a486e72-8b3a-752e-f1b8-4383a38c004b@yahoo.co.jp> Date: Thu, 1 Sep 2022 14:49:13 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 To: GCC Patches Subject: [PATCH 2/2] xtensa: Make complex hard register clobber elimination more robust and accurate X-Spam-Status: No, score=-12.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, 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-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+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This patch eliminates all clobbers for complex hard registers that will be overwritten entirely afterwards (supersedence of 3867d414bd7d9e5b6fb2a51b1fb3d9e9e1eae9). gcc/ChangeLog: * config/xtensa/xtensa.md: Rewrite the split pattern that performs the abovementioned process so that insns that overwrite clobbered register no longer need to be contiguous. (DSC): Remove as no longer needed. --- gcc/config/xtensa/xtensa.md | 67 +++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 3ed269249a4..f722ea56289 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -86,10 +86,6 @@ ;; This code iterator is for *shlrd and its variants. (define_code_iterator ior_op [ior plus]) -;; This mode iterator allows the DC and SC patterns to be defined from -;; the same template. -(define_mode_iterator DSC [DC SC]) - ;; Attributes. @@ -2843,27 +2839,54 @@ }) (define_split - [(clobber (match_operand:DSC 0 "register_operand"))] - "GP_REG_P (REGNO (operands[0]))" + [(clobber (match_operand 0 "register_operand"))] + "HARD_REGISTER_P (operands[0]) + && COMPLEX_MODE_P (GET_MODE (operands[0]))" [(const_int 0)] { - unsigned int regno = REGNO (operands[0]); - machine_mode inner_mode = GET_MODE_INNER (mode); + auto_sbitmap bmp (FIRST_PSEUDO_REGISTER); rtx_insn *insn; - rtx x; - if (! ((insn = next_nonnote_nondebug_insn (curr_insn)) - && NONJUMP_INSN_P (insn) - && GET_CODE (x = PATTERN (insn)) == SET - && REG_P (x = XEXP (x, 0)) - && GET_MODE (x) == inner_mode - && REGNO (x) == regno - && (insn = next_nonnote_nondebug_insn (insn)) - && NONJUMP_INSN_P (insn) - && GET_CODE (x = PATTERN (insn)) == SET - && REG_P (x = XEXP (x, 0)) - && GET_MODE (x) == inner_mode - && REGNO (x) == regno + REG_NREGS (operands[0]) / 2)) - FAIL; + rtx reg = gen_rtx_REG (SImode, 0); + bitmap_set_range (bmp, REGNO (operands[0]), REG_NREGS (operands[0])); + for (insn = next_nonnote_nondebug_insn_bb (curr_insn); + insn; insn = next_nonnote_nondebug_insn_bb (insn)) + { + sbitmap_iterator iter; + unsigned int regno; + if (NONJUMP_INSN_P (insn)) + { + EXECUTE_IF_SET_IN_BITMAP (bmp, 2, regno, iter) + { + set_regno_raw (reg, regno, REG_NREGS (reg)); + if (reg_overlap_mentioned_p (reg, PATTERN (insn))) + break; + } + if (GET_CODE (PATTERN (insn)) == SET) + { + rtx x = SET_DEST (PATTERN (insn)); + if (REG_P (x) && HARD_REGISTER_P (x)) + bitmap_clear_range (bmp, REGNO (x), REG_NREGS (x)); + else if (SUBREG_P (x) && HARD_REGISTER_P (SUBREG_REG (x))) + { + struct subreg_info info; + subreg_get_info (regno = REGNO (SUBREG_REG (x)), + GET_MODE (SUBREG_REG (x)), + SUBREG_BYTE (x), GET_MODE (x), &info); + if (!info.representable_p) + break; + bitmap_clear_range (bmp, regno + info.offset, info.nregs); + } + } + if (bitmap_empty_p (bmp)) + goto FALLTHRU; + } + else if (CALL_P (insn)) + EXECUTE_IF_SET_IN_BITMAP (bmp, 2, regno, iter) + if (call_used_or_fixed_reg_p (regno)) + break; + } + FAIL; +FALLTHRU:; }) (define_peephole2