mips.c (mips_kernel_reg_p): Replace with...
authorRichard Sandiford <richard.sandiford@arm.com>
Sun, 26 Oct 2014 10:41:13 +0000 (10:41 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 26 Oct 2014 10:41:13 +0000 (10:41 +0000)
gcc/
* config/mips/mips.c (mips_kernel_reg_p): Replace with...
(mips_refers_to_kernel_reg_p): ...this new function.
(mips_expand_prologue): Update accordingly.

From-SVN: r216709

gcc/ChangeLog
gcc/config/mips/mips.c

index dae8c32d146b6e16651a67ee5f69492413e6041e..47b122066ebfd3373d8222accf0b86a841b7601a 100644 (file)
@@ -1,3 +1,9 @@
+2014-10-26  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/mips/mips.c (mips_kernel_reg_p): Replace with...
+       (mips_refers_to_kernel_reg_p): ...this new function.
+       (mips_expand_prologue): Update accordingly.
+
 2014-10-26  Richard Sandiford  <richard.sandiford@arm.com>
 
        * config/mips/mips.c (mips_rewrite_small_data_1): Take the context
index 4d16d9b81fa8d13803af49521e8e685d8f7c2fb8..dd8a4c591155f722d74d25a108cdacfbc377ac91 100644 (file)
@@ -11045,12 +11045,16 @@ mips_output_probe_stack_range (rtx reg1, rtx reg2)
   return "";
 }
 
-/* A for_each_rtx callback.  Stop the search if *X is a kernel register.  */
+/* Return true if X contains a kernel register.  */
 
-static int
-mips_kernel_reg_p (rtx *x, void *data ATTRIBUTE_UNUSED)
+static bool
+mips_refers_to_kernel_reg_p (const_rtx x)
 {
-  return REG_P (*x) && KERNEL_REG_P (REGNO (*x));
+  subrtx_iterator::array_type array;
+  FOR_EACH_SUBRTX (iter, array, x, NONCONST)
+    if (REG_P (*iter) && KERNEL_REG_P (REGNO (*iter)))
+      return true;
+  return false;
 }
 
 /* Expand the "prologue" pattern.  */
@@ -11322,7 +11326,7 @@ mips_expand_prologue (void)
       rtx_insn *insn;
       for (insn = get_last_insn (); insn != NULL_RTX; insn = PREV_INSN (insn))
        if (INSN_P (insn)
-           && for_each_rtx (&PATTERN (insn), mips_kernel_reg_p, NULL))
+           && mips_refers_to_kernel_reg_p (PATTERN (insn)))
          break;
       /* Emit a move from K1 to COP0 Status after insn.  */
       gcc_assert (insn != NULL_RTX);
@@ -11669,7 +11673,7 @@ mips_expand_epilogue (bool sibcall_p)
     {
       for (insn = get_insns (); insn != NULL_RTX; insn = NEXT_INSN (insn))
        if (INSN_P (insn)
-           && for_each_rtx (&PATTERN(insn), mips_kernel_reg_p, NULL))
+           && mips_refers_to_kernel_reg_p (PATTERN (insn)))
          break;
       gcc_assert (insn != NULL_RTX);
       /* Insert disable interrupts before the first use of K0 or K1.  */