reg-stack.c: Include rtl-iter.h.
gcc/ * reg-stack.c: Include rtl-iter.h. (subst_stack_regs_in_debug_insn): Delete. (subst_all_stack_regs_in_debug_insn): Use FOR_EACH_SUBRTX_PTR instead of for_each_rtx. From-SVN: r214650
This commit is contained in:
parent
a36a1928e2
commit
6c0cda9157
@ -1,3 +1,10 @@
|
||||
2014-08-28 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* reg-stack.c: Include rtl-iter.h.
|
||||
(subst_stack_regs_in_debug_insn): Delete.
|
||||
(subst_all_stack_regs_in_debug_insn): Use FOR_EACH_SUBRTX_PTR
|
||||
instead of for_each_rtx.
|
||||
|
||||
2014-08-28 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* lower-subreg.c (find_decomposable_subregs): Turn from being
|
||||
|
@ -170,6 +170,7 @@
|
||||
#include "target.h"
|
||||
#include "df.h"
|
||||
#include "emit-rtl.h" /* FIXME: Can go away once crtl is moved to rtl.h. */
|
||||
#include "rtl-iter.h"
|
||||
|
||||
#ifdef STACK_REGS
|
||||
|
||||
@ -1308,31 +1309,6 @@ compare_for_stack_reg (rtx_insn *insn, stack_ptr regstack, rtx pat_src)
|
||||
}
|
||||
}
|
||||
|
||||
/* Substitute new registers in LOC, which is part of a debug insn.
|
||||
REGSTACK is the current register layout. */
|
||||
|
||||
static int
|
||||
subst_stack_regs_in_debug_insn (rtx *loc, void *data)
|
||||
{
|
||||
stack_ptr regstack = (stack_ptr)data;
|
||||
int hard_regno;
|
||||
|
||||
if (!STACK_REG_P (*loc))
|
||||
return 0;
|
||||
|
||||
hard_regno = get_hard_regnum (regstack, *loc);
|
||||
|
||||
/* If we can't find an active register, reset this debug insn. */
|
||||
if (hard_regno == -1)
|
||||
return 1;
|
||||
|
||||
gcc_assert (hard_regno >= FIRST_STACK_REG);
|
||||
|
||||
replace_reg (loc, hard_regno);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Substitute hardware stack regs in debug insn INSN, using stack
|
||||
layout REGSTACK. If we can't find a hardware stack reg for any of
|
||||
the REGs in it, reset the debug insn. */
|
||||
@ -1340,14 +1316,27 @@ subst_stack_regs_in_debug_insn (rtx *loc, void *data)
|
||||
static void
|
||||
subst_all_stack_regs_in_debug_insn (rtx_insn *insn, struct stack_def *regstack)
|
||||
{
|
||||
int ret = for_each_rtx (&INSN_VAR_LOCATION_LOC (insn),
|
||||
subst_stack_regs_in_debug_insn,
|
||||
regstack);
|
||||
subrtx_ptr_iterator::array_type array;
|
||||
FOR_EACH_SUBRTX_PTR (iter, array, &INSN_VAR_LOCATION_LOC (insn), NONCONST)
|
||||
{
|
||||
rtx *loc = *iter;
|
||||
rtx x = *loc;
|
||||
if (STACK_REG_P (x))
|
||||
{
|
||||
int hard_regno = get_hard_regnum (regstack, x);
|
||||
|
||||
if (ret == 1)
|
||||
/* If we can't find an active register, reset this debug insn. */
|
||||
if (hard_regno == -1)
|
||||
{
|
||||
INSN_VAR_LOCATION_LOC (insn) = gen_rtx_UNKNOWN_VAR_LOC ();
|
||||
else
|
||||
gcc_checking_assert (ret == 0);
|
||||
return;
|
||||
}
|
||||
|
||||
gcc_assert (hard_regno >= FIRST_STACK_REG);
|
||||
replace_reg (loc, hard_regno);
|
||||
iter.skip_subrtxes ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Substitute new registers in PAT, which is part of INSN. REGSTACK
|
||||
|
Loading…
Reference in New Issue
Block a user