diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-08-28 06:21:54 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-08-28 06:21:54 +0000 |
commit | 0e74eb286a4ee0aa6fec42df1902e981ac4b1233 (patch) | |
tree | 207b1acebc77c4adb9b025a0fa852effbda5a9b8 /gcc/caller-save.c | |
parent | cb1be7ac51f21d8f68294de048e194816e1a45d8 (diff) | |
download | gcc-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.c | 39 |
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. */ |