Commit 8cd44271 by Richard Henderson Committed by Richard Henderson

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
parent 89996b6e
2001-03-27 Richard Henderson <rth@redhat.com> 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 * function.h (struct function): Move all boolean valued fields
to single bit fields at the end of the struct. to single bit fields at the end of the struct.
......
...@@ -1391,9 +1391,7 @@ copy_insn_list (insns, map, static_chain_value) ...@@ -1391,9 +1391,7 @@ copy_insn_list (insns, map, static_chain_value)
break; break;
case JUMP_INSN: case JUMP_INSN:
if (GET_CODE (PATTERN (insn)) == RETURN if (map->integrating && returnjump_p (insn))
|| (GET_CODE (PATTERN (insn)) == PARALLEL
&& GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == RETURN))
{ {
if (map->local_return_label == 0) if (map->local_return_label == 0)
map->local_return_label = gen_label_rtx (); map->local_return_label = gen_label_rtx ();
...@@ -1593,30 +1591,46 @@ copy_insn_notes (insns, map) ...@@ -1593,30 +1591,46 @@ copy_insn_notes (insns, map)
rtx insns; rtx insns;
struct inline_remap *map; struct inline_remap *map;
{ {
rtx insn; rtx insn, new_insn;
map->const_age++; map->const_age++;
for (insn = insns; insn; insn = NEXT_INSN (insn)) for (insn = insns; insn; insn = NEXT_INSN (insn))
if (INSN_P (insn) {
&& map->insn_map[INSN_UID (insn)] if (! INSN_P (insn))
&& REG_NOTES (insn)) continue;
{
rtx next, note = copy_rtx_and_substitute (REG_NOTES (insn), map, 0);
/* We must also do subst_constants, in case one of our parameters new_insn = map->insn_map[INSN_UID (insn)];
has const type and constant value. */ if (! new_insn)
subst_constants (&note, NULL_RTX, map, 0); continue;
apply_change_group ();
REG_NOTES (map->insn_map[INSN_UID (insn)]) = note;
/* Finally, delete any REG_LABEL notes from the chain. */ if (REG_NOTES (insn))
for (; note; note = next) {
{ rtx next, note = copy_rtx_and_substitute (REG_NOTES (insn), map, 0);
next = XEXP (note, 1);
if (REG_NOTE_KIND (note) == REG_LABEL) /* We must also do subst_constants, in case one of our parameters
remove_note (map->insn_map[INSN_UID (insn)], note); has const type and constant value. */
} subst_constants (&note, 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, /* Given a chain of PARM_DECLs, ARGS, copy each decl into a VAR_DECL,
......
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