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 59E3A3A1B40C for ; Fri, 13 Nov 2020 08:18:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 59E3A3A1B40C 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 0DB69142F for ; Fri, 13 Nov 2020 00:18:30 -0800 (PST) Received: from localhost (e121540-lin.manchester.arm.com [10.32.98.126]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AA6F83F718 for ; Fri, 13 Nov 2020 00:18:29 -0800 (PST) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Subject: [13/23] recog: Split out a register_asm_p function References: Date: Fri, 13 Nov 2020 08:18:27 +0000 In-Reply-To: (Richard Sandiford's message of "Fri, 13 Nov 2020 08:10:54 +0000") 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=-12.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, 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: Fri, 13 Nov 2020 08:18:31 -0000 verify_changes has a test for whether a particular hard register is a user-defined register asm. A later patch needs to test the same thing, so this patch splits it out into a helper. gcc/ * rtl.h (register_asm_p): Declare. * recog.c (verify_changes): Split out the test for whether a hard register is a register asm to... (register_asm_p): ...this new function. --- gcc/recog.c | 5 +---- gcc/rtl.h | 1 + gcc/rtlanal.c | 12 ++++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/gcc/recog.c b/gcc/recog.c index 6d8b7d560ee..2d934169a81 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -408,10 +408,7 @@ verify_changes (int num) changes[i].old && REG_P (changes[i].old) && asm_noperands (PATTERN (object)) > 0 - && REG_EXPR (changes[i].old) != NULL_TREE - && HAS_DECL_ASSEMBLER_NAME_P (REG_EXPR (changes[i].old)) - && DECL_ASSEMBLER_NAME_SET_P (REG_EXPR (changes[i].old)) - && DECL_REGISTER (REG_EXPR (changes[i].old))) + && register_asm_p (changes[i].old)) { /* Don't allow changes of hard register operands to inline assemblies if they have been defined as register asm ("x"). */ diff --git a/gcc/rtl.h b/gcc/rtl.h index fcec9dc6387..5a1670f295c 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -3525,6 +3525,7 @@ extern rtx tablejump_casesi_pattern (const rtx_insn *insn); extern int computed_jump_p (const rtx_insn *); extern bool tls_referenced_p (const_rtx); extern bool contains_mem_rtx_p (rtx x); +extern bool register_asm_p (const_rtx); /* Overload for refers_to_regno_p for checking a single register. */ inline bool diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 6f521503c39..30d5b0c6b76 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -6617,3 +6617,15 @@ add_auto_inc_notes (rtx_insn *insn, rtx x) add_auto_inc_notes (insn, XVECEXP (x, i, j)); } } + +/* Return true if X is register asm. */ + +bool +register_asm_p (const_rtx x) +{ + return (REG_P (x) + && REG_EXPR (x) != NULL_TREE + && HAS_DECL_ASSEMBLER_NAME_P (REG_EXPR (x)) + && DECL_ASSEMBLER_NAME_SET_P (REG_EXPR (x)) + && DECL_REGISTER (REG_EXPR (x))); +} -- 2.17.1