Commit d35dfca9 by Jeff Law Committed by Jeff Law

flow.c (propagate_one_insn): Revise yesterday's patch.

        * flow.c (propagate_one_insn): Revise yesterday's patch.  Delete
        a dead insn with a REG_RETVAL note when the entire libcall is not
        dead and remove the associated REG_LIBCALL note at the same time.

From-SVN: r54065
parent 81b40b72
2002-05-30 Jeff Law <law@redhat.com>
* flow.c (propagate_one_insn): Revise yesterday's patch. Delete
a dead insn with a REG_RETVAL note when the entire libcall is not
dead and remove the associated REG_LIBCALL note at the same time.
Thu May 30 19:54:30 2002 J"orn Rennecke <joern.rennecke@superh.com> Thu May 30 19:54:30 2002 J"orn Rennecke <joern.rennecke@superh.com>
* lcm.c (output.h): #include. * lcm.c (output.h): #include.
......
...@@ -1643,8 +1643,27 @@ propagate_one_insn (pbi, insn) ...@@ -1643,8 +1643,27 @@ propagate_one_insn (pbi, insn)
if (libcall_is_dead) if (libcall_is_dead)
prev = propagate_block_delete_libcall ( insn, note); prev = propagate_block_delete_libcall ( insn, note);
else if (!note) else
propagate_block_delete_insn (insn); {
if (note)
{
/* If INSN contains a RETVAL note and is dead, but the libcall
as a whole is not dead, then we want to remove INSN, but
not the whole libcall sequence.
However, we need to also remove the dangling REG_LIBCALL
note so that we do not have mis-matched LIBCALL/RETVAL
notes. In theory we could find a new location for the
REG_RETVAL note, but it hardly seems worth the effort. */
rtx libcall_note;
libcall_note
= find_reg_note (XEXP (note, 0), REG_LIBCALL, NULL_RTX);
remove_note (XEXP (note, 0), libcall_note);
}
propagate_block_delete_insn (insn);
}
return prev; return prev;
} }
......
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