From f9a20af005da47acab478766857fe8419fc06d09 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 27 Oct 2014 18:41:02 +0000 Subject: [PATCH] alpha.c (alpha_set_memflags_1): Delete. gcc/ * config/alpha/alpha.c (alpha_set_memflags_1): Delete. (alpha_set_memflags): Use FOR_EACH_SUBRTX_VAR. From-SVN: r216755 --- gcc/ChangeLog | 5 +++++ gcc/config/alpha/alpha.c | 43 +++++++++++++++++----------------------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4080aee2242..bee2fba7147 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-10-27 Richard Sandiford + + * config/alpha/alpha.c (alpha_set_memflags_1): Delete. + (alpha_set_memflags): Use FOR_EACH_SUBRTX_VAR. + 2014-10-27 Richard Sandiford * config/alpha/alpha.c: Include rtl-iter.h. diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 4d1263297eb..09ab4ba16cb 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1676,30 +1676,6 @@ alpha_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i, return NO_REGS; } -/* 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 (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 (); } -- 2.30.2