caller-save.c (insert_one_insn): If inserting before a call_insn then the registers containing the arguments of...
* caller-save.c (insert_one_insn): If inserting before a call_insn then the registers containing the arguments of the call are live_throughout in the new insn. Co-Authored-By: Hans-Peter Nilsson <hp@axis.com> From-SVN: r130733
This commit is contained in:
parent
79e790677d
commit
ac8bc93ea6
@ -1,3 +1,10 @@
|
||||
2007-12-10 Pranav Bhandarkar <pranav.bhandarkar@celunite.com>
|
||||
Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* caller-save.c (insert_one_insn): If inserting before a call_insn
|
||||
then the registers containing the arguments of the call are
|
||||
live_throughout in the new insn.
|
||||
|
||||
2007-12-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
PR middle-end/32889
|
||||
|
@ -850,6 +850,38 @@ insert_one_insn (struct insn_chain *chain, int before_p, int code, rtx pat)
|
||||
SET_REGNO_REG_SET (&new->live_throughout, regno + i);
|
||||
}
|
||||
}
|
||||
|
||||
/* If CHAIN->INSN is a call, then the registers which contain
|
||||
the arguments to the function are live in the new insn. */
|
||||
if (CALL_P (chain->insn))
|
||||
{
|
||||
for (link = CALL_INSN_FUNCTION_USAGE (chain->insn);
|
||||
link != NULL_RTX;
|
||||
link = XEXP (link, 1))
|
||||
{
|
||||
rtx arg = XEXP (link, 0);
|
||||
|
||||
if (GET_CODE (arg) == USE)
|
||||
{
|
||||
rtx reg = XEXP (arg, 0);
|
||||
|
||||
if (REG_P (reg))
|
||||
{
|
||||
int i, regno = REGNO (reg);
|
||||
|
||||
/* Registers in CALL_INSN_FUNCTION_USAGE are always
|
||||
hard registers. */
|
||||
gcc_assert (regno < FIRST_PSEUDO_REGISTER);
|
||||
|
||||
for (i = hard_regno_nregs[regno][GET_MODE (reg)] - 1;
|
||||
i >= 0; i--)
|
||||
SET_REGNO_REG_SET (&new->live_throughout, regno + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
CLEAR_REG_SET (&new->dead_or_set);
|
||||
if (chain->insn == BB_HEAD (BASIC_BLOCK (chain->block)))
|
||||
BB_HEAD (BASIC_BLOCK (chain->block)) = new->insn;
|
||||
|
Loading…
Reference in New Issue
Block a user