aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/mips/mips.c20
2 files changed, 12 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c10b1ee..89f29ed 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2014-10-26 Richard Sandiford <richard.sandiford@arm.com>
+ * config/mips/mips.c (mips_at_reg_p): Delete.
+ (mips_need_noat_wrapper_p): Use FOR_EACH_SUBRTX.
+
+2014-10-26 Richard Sandiford <richard.sandiford@arm.com>
+
* config/mips/mips.c (mips_record_lo_sum): Replace with...
(mips_record_lo_sums): ...this new function.
(mips_reorg_process_insns): Update accordingly.
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index e0d701b..fc16a40 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -17528,26 +17528,20 @@ mips_epilogue_uses (unsigned int regno)
return false;
}
-/* A for_each_rtx callback. Stop the search if *X is an AT register. */
-
-static int
-mips_at_reg_p (rtx *x, void *data ATTRIBUTE_UNUSED)
-{
- return REG_P (*x) && REGNO (*x) == AT_REGNUM;
-}
-
/* Return true if INSN needs to be wrapped in ".set noat".
INSN has NOPERANDS operands, stored in OPVEC. */
static bool
mips_need_noat_wrapper_p (rtx_insn *insn, rtx *opvec, int noperands)
{
- int i;
-
if (recog_memoized (insn) >= 0)
- for (i = 0; i < noperands; i++)
- if (for_each_rtx (&opvec[i], mips_at_reg_p, NULL))
- return true;
+ {
+ subrtx_iterator::array_type array;
+ for (int i = 0; i < noperands; i++)
+ FOR_EACH_SUBRTX (iter, array, opvec[i], NONCONST)
+ if (REG_P (*iter) && REGNO (*iter) == AT_REGNUM)
+ return true;
+ }
return false;
}