alpha.c (alpha_set_memflags_1): Delete.
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 27 Oct 2014 18:41:02 +0000 (18:41 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 27 Oct 2014 18:41:02 +0000 (18:41 +0000)
gcc/
* config/alpha/alpha.c (alpha_set_memflags_1): Delete.
(alpha_set_memflags): Use FOR_EACH_SUBRTX_VAR.

From-SVN: r216755

gcc/ChangeLog
gcc/config/alpha/alpha.c

index 4080aee2242e4e5a10df12e95fb3837064c8bafa..bee2fba71478751850f1ef854db59c30d4ac1e62 100644 (file)
@@ -1,3 +1,8 @@
+2014-10-27  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/alpha/alpha.c (alpha_set_memflags_1): Delete.
+       (alpha_set_memflags): Use FOR_EACH_SUBRTX_VAR.
+
 2014-10-27  Richard Sandiford  <richard.sandiford@arm.com>
 
        * config/alpha/alpha.c: Include rtl-iter.h.
index 4d1263297eba0987247d42aff8f9a914f66a65f3..09ab4ba16cbf1b279e1f4c06c8098600d7ece692 100644 (file)
@@ -1676,30 +1676,6 @@ alpha_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i,
   return NO_REGS;
 }
 \f
-/* Subfunction of the following function.  Update the flags of any MEM
-   found in part of X.  */
-
-static int
-alpha_set_memflags_1 (rtx *xp, void *data)
-{
-  rtx x = *xp, orig = (rtx) data;
-
-  if (!MEM_P (x))
-    return 0;
-
-  MEM_VOLATILE_P (x) = MEM_VOLATILE_P (orig);
-  MEM_NOTRAP_P (x) = MEM_NOTRAP_P (orig);
-  MEM_READONLY_P (x) = MEM_READONLY_P (orig);
-
-  /* Sadly, we cannot use alias sets because the extra aliasing
-     produced by the AND interferes.  Given that two-byte quantities
-     are the only thing we would be able to differentiate anyway,
-     there does not seem to be any point in convoluting the early
-     out of the alias check.  */
-
-  return -1;
-}
-
 /* Given SEQ, which is an INSN list, look for any MEMs in either
    a SET_DEST or a SET_SRC and copy the in-struct, unchanging, and
    volatile flags from REF into each of the MEMs found.  If REF is not
@@ -1721,9 +1697,26 @@ alpha_set_memflags (rtx seq, rtx ref)
       && !MEM_READONLY_P (ref))
     return;
 
+  subrtx_var_iterator::array_type array;
   for (insn = as_a <rtx_insn *> (seq); insn; insn = NEXT_INSN (insn))
     if (INSN_P (insn))
-      for_each_rtx (&PATTERN (insn), alpha_set_memflags_1, (void *) ref);
+      FOR_EACH_SUBRTX_VAR (iter, array, PATTERN (insn), NONCONST)
+       {
+         rtx x = *iter;
+         if (MEM_P (x))
+           {
+             MEM_VOLATILE_P (x) = MEM_VOLATILE_P (ref);
+             MEM_NOTRAP_P (x) = MEM_NOTRAP_P (ref);
+             MEM_READONLY_P (x) = MEM_READONLY_P (ref);
+             /* Sadly, we cannot use alias sets because the extra
+                aliasing produced by the AND interferes.  Given that
+                two-byte quantities are the only thing we would be
+                able to differentiate anyway, there does not seem to
+                be any point in convoluting the early out of the
+                alias check.  */
+             iter.skip_subrtxes ();
+           }
+       }
     else
       gcc_unreachable ();
 }