Commit 69685820 by Richard Kenner

(assign_parms): Tighten up code that makes REG_EQUIV notes for parms.

From-SVN: r12186
parent 5fd7f37d
...@@ -3869,26 +3869,31 @@ assign_parms (fndecl, second_time) ...@@ -3869,26 +3869,31 @@ assign_parms (fndecl, second_time)
XEXP (entry_parm, 0))) XEXP (entry_parm, 0)))
{ {
rtx linsn = get_last_insn (); rtx linsn = get_last_insn ();
rtx sinsn, set;
/* Mark complex types separately. */ /* Mark complex types separately. */
if (GET_CODE (parmreg) == CONCAT) if (GET_CODE (parmreg) == CONCAT)
{ /* Scan backwards for the set of the real and
REG_NOTES (linsn) imaginary parts. */
for (sinsn = linsn; sinsn != 0;
sinsn = prev_nonnote_insn (sinsn))
{
set = single_set (sinsn);
if (set != 0
&& SET_DEST (set) == regno_reg_rtx [regnoi])
REG_NOTES (sinsn)
= gen_rtx (EXPR_LIST, REG_EQUIV, = gen_rtx (EXPR_LIST, REG_EQUIV,
parm_reg_stack_loc[regnoi], REG_NOTES (linsn)); parm_reg_stack_loc[regnoi],
REG_NOTES (sinsn));
/* Now search backward for where we set the real part. */ else if (set != 0
for (; linsn != 0 && SET_DEST (set) == regno_reg_rtx [regnor])
&& ! reg_referenced_p (parm_reg_stack_loc[regnor], REG_NOTES (sinsn)
PATTERN (linsn));
linsn = prev_nonnote_insn (linsn))
;
REG_NOTES (linsn)
= gen_rtx (EXPR_LIST, REG_EQUIV, = gen_rtx (EXPR_LIST, REG_EQUIV,
parm_reg_stack_loc[regnor], REG_NOTES (linsn)); parm_reg_stack_loc[regnor],
REG_NOTES (sinsn));
} }
else else if ((set = single_set (linsn)) != 0
&& SET_DEST (set) == parmreg)
REG_NOTES (linsn) REG_NOTES (linsn)
= gen_rtx (EXPR_LIST, REG_EQUIV, = gen_rtx (EXPR_LIST, REG_EQUIV,
entry_parm, REG_NOTES (linsn)); entry_parm, REG_NOTES (linsn));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment