From patchwork Fri Jan 20 03:33:37 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: 1729262 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=Ocsw7nyg; dkim-atps=neutral Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4NylTz06x8z23fT for ; Fri, 20 Jan 2023 14:34:13 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 306753858C27 for ; Fri, 20 Jan 2023 03:34:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 306753858C27 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1674185650; bh=NFjZ+q4RhTQ8NkSQsT9V2M++QmjLP7NWu6fT0+dHv18=; h=Date:To:Cc:Subject:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=Ocsw7nygrLod+ZJZCVWfg345V5DY55zP/I5qC83CVZrbYSNiLyYgd7GVRXoWN1dx+ I1b6cdW3HKRaQegzdKm3tWp7evzLFktcQYivEBkEUX80om9az9jpaKlS1H9F1xQvDH +mAbbZQiXHU7A6iU9m/ByqSWL1y2PMoM3nB12xPo= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from sonicconh5002-vm0.mail.kks.yahoo.co.jp (sonicconh5002-vm0.mail.kks.yahoo.co.jp [114.110.61.27]) by sourceware.org (Postfix) with ESMTPS id 30A6A3858CDA for ; Fri, 20 Jan 2023 03:33:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 30A6A3858CDA X-YMail-OSG: k1Sc99gVM1mCJ.8MlgQkBoknklXVPeK7o4pv.njRY7spwPfbyCpQSzgBXTFAEcB qGKUHq_wmwuUIdxlyw9wgPDdyl4hHiB_OYErMhyA.KEf95pfp5QaDJYldquDxHhKI_ROBJrFWFOA pxF7_0jN8kjB8O6.W_6on78EZrQ9a_K7wfbn766ls8eMSYDRtkL_eDDXKbiAVvdde0lM.JB8ZApj X3wbar1BQBjGYdEv2rhsKv9nx8nd.qknQPq1surLsxn0kE_AoQNgWPr1G5GflpH5nMQFs.NECDCq D17Q5MWVt60a_9a7glNhPIcIiq6Wftqweilj1B7k6Iu.N_iSlpO5pftMdHa620qWJEntfkbWMSQ2 PtBDiOwvAvNJ8xo0oQCtqYsDWWVcqny1APnFb3NhrWe7xtYO14iEQ9kK58S0ut.lNAodqbWNMh6W d4sxO4uO89MmMb1boY8BnVR7uWhBM3wA3DbPi42ZMLd2whZfDdxe4cNqRuQfaVfF44gWPQ49MyIh FDeS1OoMP4i9EafsxkAfTZoWavUQygQK3wvX.LikKmfVagHKUyj7xA76p0VZdrxkyA2tO2x40v3x zUiOp0MAfgnIHRvQrf8yNsnI.TcJwl.RaCXJPiG2O5SmLqA5DX.jTLxM8Ic7335dInkblgM5qqmR pKW1s6ZGYhCOC9Dd1bf_GvqJTXFHPR07Rh6.9K77lL1sjFHvkQrOX962ul5sz_gSCnTyeIaRGxF6 6HHnsOxf3Zu1HddAskKbnAgBI27DHsiFE2dv9BIBiJIWauwsjYBloqnHAGQHpBEm0WbWXi36quag Kx8B5uh7MdolmjrOZ66VEPaX3z.4nrLSEcqRCzKPOx9eIy76MaXgI23usHi09N2MvISL0lF5rugd UF.TUnTSn1_SxdxFWeVyFZ_ftCg6tFsjPpxB3.id7INsyE_EuiyJW.SL.fBwMY0zN0MWNDtlOcI6 HXNOaue.D Received: from sonicgw.mail.yahoo.co.jp by sonicconh5002.mail.kks.yahoo.co.jp with HTTP; Fri, 20 Jan 2023 03:33:41 +0000 Received: by smtphe5008.mail.kks.ynwp.yahoo.co.jp (YJ Hermes SMTP Server) with ESMTPA ID 1c1ef87b89c6dbcfd62fd63ad4d05da2; Fri, 20 Jan 2023 12:33:37 +0900 (JST) Message-ID: <28f483f8-3ace-2150-3352-886a11a9e514@yahoo.co.jp> Date: Fri, 20 Jan 2023 12:33:37 +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: Revise 89afb2e86fcb29c559b2957fdcbea0d01740c49b References: <28f483f8-3ace-2150-3352-886a11a9e514.ref@yahoo.co.jp> X-Spam-Status: No, score=-11.8 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 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" In the previously posted patch "xtensa: Make complex hard register clobber elimination more robust and accurate", the check code for insns that refer to the [DS]Cmode hard register before it is overwritten after it is clobbered is incomplete. Fortunately such insns are seldom emitted, so it didn't matter. This patch fixes that for the sake of completeness. gcc/ChangeLog: * config/xtensa/xtensa.md: Fix exit from loops detecting references before overwriting in the split pattern. --- gcc/config/xtensa/xtensa.md | 72 +++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 8432d7bcb..e26772413 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -2976,45 +2976,47 @@ { auto_sbitmap bmp (FIRST_PSEUDO_REGISTER); rtx_insn *insn; - rtx reg = gen_rtx_REG (SImode, 0); + rtx reg = gen_rtx_REG (SImode, 0), dest; + unsigned int regno; + sbitmap_iterator iter; 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)) + if (NONJUMP_INSN_P (insn)) + { EXECUTE_IF_SET_IN_BITMAP (bmp, 2, regno, iter) - if (call_used_or_fixed_reg_p (regno)) - break; - } + { + set_regno_raw (reg, regno, REG_NREGS (reg)); + if (reg_referenced_p (reg, PATTERN (insn))) + goto ABORT; + } + if (GET_CODE (PATTERN (insn)) == SET + || GET_CODE (PATTERN (insn)) == CLOBBER) + { + dest = SET_DEST (PATTERN (insn)); + if (REG_P (dest) && HARD_REGISTER_P (dest)) + bitmap_clear_range (bmp, REGNO (dest), REG_NREGS (dest)); + else if (SUBREG_P (dest) + && HARD_REGISTER_P (SUBREG_REG (dest))) + { + struct subreg_info info; + subreg_get_info (regno = REGNO (SUBREG_REG (dest)), + GET_MODE (SUBREG_REG (dest)), + SUBREG_BYTE (dest), GET_MODE (dest), + &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)) + goto ABORT; +ABORT: FAIL; FALLTHRU:; })