recog: Split out a register_asm_p function
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 17 Dec 2020 00:15:04 +0000 (00:15 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Thu, 17 Dec 2020 00:15:04 +0000 (00:15 +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...
* rtlanal.c (register_asm_p): ...this new function.

gcc/recog.c
gcc/rtl.h
gcc/rtlanal.c

index 6d8b7d560eed7f4785c3c870f641240787d4dbb3..2d934169a81d1f40b7c57dbaa8f91a3cd4ba3ff7 100644 (file)
@@ -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").  */
index fcec9dc6387226a4edb364cdd1f808eafbbb3e57..5a1670f295cdf492bfe347f93ec6bcf1cfdb2b7d 100644 (file)
--- 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
index 6f521503c39d4009b341f052da2fcb1d232697a9..30d5b0c6b7664d3f2ba3e4a686d9507c31fb0219 100644 (file)
@@ -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)));
+}