From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 66CFA3857C62 for ; Thu, 27 May 2021 10:50:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 66CFA3857C62 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 09A6613A1; Thu, 27 May 2021 03:50:21 -0700 (PDT) Received: from localhost (e121540-lin.manchester.arm.com [10.32.98.126]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1ADB23F73D; Thu, 27 May 2021 03:50:19 -0700 (PDT) From: Richard Sandiford To: Jakub Jelinek Mail-Followup-To: Jakub Jelinek , Hongtao Liu , Eric Botcazou , gcc-patches@gcc.gnu.org, Uros Bizjak , "H. J. Lu" , richard.sandiford@arm.com Cc: Hongtao Liu , Eric Botcazou , gcc-patches@gcc.gnu.org, Uros Bizjak , "H. J. Lu" Subject: Re: [PATCH] [i386] Fix _mm256_zeroupper to notify LRA that vzeroupper will kill sse registers. [PR target/82735] References: <20210513113704.GI1179226@tucnak> <20210527072006.GL7746@tucnak> Date: Thu, 27 May 2021 11:50:18 +0100 In-Reply-To: <20210527072006.GL7746@tucnak> (Jakub Jelinek's message of "Thu, 27 May 2021 09:20:06 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-6.5 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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-List-Received-Date: Thu, 27 May 2021 10:50:23 -0000 Jakub Jelinek writes: > On Thu, May 27, 2021 at 01:07:09PM +0800, Hongtao Liu via Gcc-patches wrote: >> + /* Flag used for call_insn indicates it's a fake call. */ >> + RTX_FLAG (insn, used) = 1; > >> + /* CALL_INSN use "used" flag to indicate it's a fake call. */ >> + if (i == STACK_POINTER_REGNUM >> + && !RTX_FLAG (insn_info->insn, used)) > >> - && ! SIBLING_CALL_P (insn)) >> + && ! SIBLING_CALL_P (insn) >> + && !RTX_FLAG (insn, used)) > >> - /* For all other RTXes clear the used flag on the copy. */ >> - RTX_FLAG (copy, used) = 0; >> + /* For all other RTXes clear the used flag on the copy. >> + CALL_INSN use "used" flag to indicate it's a fake call. */ >> + if (!INSN_P (orig)) >> + RTX_FLAG (copy, used) = 0; >> break; >> } >> return copy; >> @@ -57,7 +57,8 @@ requires_stack_frame_p (rtx_insn *insn, HARD_REG_SET prologue_used, >> HARD_REG_SET hardregs; >> unsigned regno; >> >> - if (CALL_P (insn)) >> + /* CALL_INSN use "used" flag to indicate it's a fake call. */ >> + if (CALL_P (insn) && !RTX_FLAG (insn, used)) >> return !SIBLING_CALL_P (insn); > > Please define a macro for this in rtl.h (and mention it above used; > member too in a comment, see all the other comments in there), like: > /* 1 if RTX is a call_insn for a fake call. */ > #define FAKE_CALL_P(RTX) \ > (RTL_FLAG_CHECK1 ("FAKE_CALL_P", (RTX), CALL_INSN)->used) > Though, I'm also not sure if used can be actually used for this, > because it is used e.g. in emit-rtl.c for verification of RTL sharing. I thought it should be OK, since: - copy_rtx_if_shared_1 and mark_used_flags do nothing for insns - verify_rtx_sharing is only called for parts of an insn, rather than an insn itself I guess an alternative would be to add a new rtx_code for fake call insns and use CALL_P to test for both. However, that would lose the property that the default behaviour is conservatively correct (even for direct checks of CALL_INSN), so the flag IMO seems better. Thanks, Richard > Though, it seems no other rtl flag is free for CALL_INSN. > Could this fake call flag sit on the CALL rtx instead? > > Jakub