summaryrefslogtreecommitdiff
path: root/gcc/caller-save.c
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2014-08-28 06:21:54 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2014-08-28 06:21:54 +0000
commit0e74eb286a4ee0aa6fec42df1902e981ac4b1233 (patch)
tree207b1acebc77c4adb9b025a0fa852effbda5a9b8 /gcc/caller-save.c
parentcb1be7ac51f21d8f68294de048e194816e1a45d8 (diff)
downloadgcc-0e74eb286a4ee0aa6fec42df1902e981ac4b1233.tar.gz
gcc/
* caller-save.c: Include rtl-iter.h. (add_used_regs_1): Delete. (add_used_regs): Use FOR_EACH_SUBRTX rather than for_each_rtx to iterate over subrtxes. Assert that any remaining pseudos have been spilled. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@214621 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/caller-save.c')
-rw-r--r--gcc/caller-save.c39
1 files changed, 15 insertions, 24 deletions
diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index 8bdca517e0b..d94343edfe9 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see
#include "addresses.h"
#include "ggc.h"
#include "dumpfile.h"
+#include "rtl-iter.h"
#define MOVE_MAX_WORDS (MOVE_MAX / UNITS_PER_WORD)
@@ -1336,36 +1337,26 @@ insert_save (struct insn_chain *chain, int before_p, int regno,
return numregs - 1;
}
-/* A for_each_rtx callback used by add_used_regs. Add the hard-register
- equivalent of each REG to regset DATA. */
-
-static int
-add_used_regs_1 (rtx *loc, void *data)
-{
- unsigned int regno;
- regset live;
- rtx x;
-
- x = *loc;
- live = (regset) data;
- if (REG_P (x))
- {
- regno = REGNO (x);
- if (HARD_REGISTER_NUM_P (regno))
- bitmap_set_range (live, regno, hard_regno_nregs[regno][GET_MODE (x)]);
- else
- regno = reg_renumber[regno];
- }
- return 0;
-}
-
/* A note_uses callback used by insert_one_insn. Add the hard-register
equivalent of each REG to regset DATA. */
static void
add_used_regs (rtx *loc, void *data)
{
- for_each_rtx (loc, add_used_regs_1, data);
+ subrtx_iterator::array_type array;
+ FOR_EACH_SUBRTX (iter, array, *loc, NONCONST)
+ {
+ const_rtx x = *iter;
+ if (REG_P (x))
+ {
+ unsigned int regno = REGNO (x);
+ if (HARD_REGISTER_NUM_P (regno))
+ bitmap_set_range ((regset) data, regno,
+ hard_regno_nregs[regno][GET_MODE (x)]);
+ else
+ gcc_checking_assert (reg_renumber[regno] < 0);
+ }
+ }
}
/* Emit a new caller-save insn and set the code. */