integrate.c (copy_insn_list): Use returnjump_p.
* integrate.c (copy_insn_list): Use returnjump_p. (copy_insn_notes): Recurse for CALL_PLACEHOLDER. From-SVN: r40912
This commit is contained in:
parent
89996b6e7c
commit
8cd442715f
|
@ -1,5 +1,8 @@
|
|||
2001-03-27 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* integrate.c (copy_insn_list): Use returnjump_p.
|
||||
(copy_insn_notes): Recurse for CALL_PLACEHOLDER.
|
||||
|
||||
* function.h (struct function): Move all boolean valued fields
|
||||
to single bit fields at the end of the struct.
|
||||
|
||||
|
|
|
@ -1391,9 +1391,7 @@ copy_insn_list (insns, map, static_chain_value)
|
|||
break;
|
||||
|
||||
case JUMP_INSN:
|
||||
if (GET_CODE (PATTERN (insn)) == RETURN
|
||||
|| (GET_CODE (PATTERN (insn)) == PARALLEL
|
||||
&& GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == RETURN))
|
||||
if (map->integrating && returnjump_p (insn))
|
||||
{
|
||||
if (map->local_return_label == 0)
|
||||
map->local_return_label = gen_label_rtx ();
|
||||
|
@ -1593,30 +1591,46 @@ copy_insn_notes (insns, map)
|
|||
rtx insns;
|
||||
struct inline_remap *map;
|
||||
{
|
||||
rtx insn;
|
||||
rtx insn, new_insn;
|
||||
|
||||
map->const_age++;
|
||||
for (insn = insns; insn; insn = NEXT_INSN (insn))
|
||||
if (INSN_P (insn)
|
||||
&& map->insn_map[INSN_UID (insn)]
|
||||
&& REG_NOTES (insn))
|
||||
{
|
||||
rtx next, note = copy_rtx_and_substitute (REG_NOTES (insn), map, 0);
|
||||
{
|
||||
if (! INSN_P (insn))
|
||||
continue;
|
||||
|
||||
/* We must also do subst_constants, in case one of our parameters
|
||||
has const type and constant value. */
|
||||
subst_constants (¬e, NULL_RTX, map, 0);
|
||||
apply_change_group ();
|
||||
REG_NOTES (map->insn_map[INSN_UID (insn)]) = note;
|
||||
new_insn = map->insn_map[INSN_UID (insn)];
|
||||
if (! new_insn)
|
||||
continue;
|
||||
|
||||
/* Finally, delete any REG_LABEL notes from the chain. */
|
||||
for (; note; note = next)
|
||||
{
|
||||
next = XEXP (note, 1);
|
||||
if (REG_NOTE_KIND (note) == REG_LABEL)
|
||||
remove_note (map->insn_map[INSN_UID (insn)], note);
|
||||
}
|
||||
}
|
||||
if (REG_NOTES (insn))
|
||||
{
|
||||
rtx next, note = copy_rtx_and_substitute (REG_NOTES (insn), map, 0);
|
||||
|
||||
/* We must also do subst_constants, in case one of our parameters
|
||||
has const type and constant value. */
|
||||
subst_constants (¬e, NULL_RTX, map, 0);
|
||||
apply_change_group ();
|
||||
REG_NOTES (new_insn) = note;
|
||||
|
||||
/* Delete any REG_LABEL notes from the chain. Remap any
|
||||
REG_EH_REGION notes. */
|
||||
for (; note; note = next)
|
||||
{
|
||||
next = XEXP (note, 1);
|
||||
if (REG_NOTE_KIND (note) == REG_LABEL)
|
||||
remove_note (new_insn, note);
|
||||
}
|
||||
}
|
||||
|
||||
if (GET_CODE (insn) == CALL_INSN
|
||||
&& GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 3; i++)
|
||||
copy_insn_notes (XEXP (PATTERN (insn), i), map);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Given a chain of PARM_DECLs, ARGS, copy each decl into a VAR_DECL,
|
||||
|
|
Loading…
Reference in New Issue