diff options
author | Jeff Law <law@redhat.com> | 2002-05-30 14:20:28 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2002-05-30 14:20:28 -0600 |
commit | d35dfca9e6ebe2e9990dca1c5ee4d36a79cf0604 (patch) | |
tree | d6477ccdc3c648dfc1d17513d3af2b0fa2ff2bf7 /gcc/flow.c | |
parent | 81b40b72d1e15987d2a04ecead8e14de4694a5dd (diff) | |
download | gcc-d35dfca9e6ebe2e9990dca1c5ee4d36a79cf0604.zip gcc-d35dfca9e6ebe2e9990dca1c5ee4d36a79cf0604.tar.gz gcc-d35dfca9e6ebe2e9990dca1c5ee4d36a79cf0604.tar.bz2 |
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
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -1643,8 +1643,27 @@ propagate_one_insn (pbi, insn) if (libcall_is_dead) prev = propagate_block_delete_libcall ( insn, note); - else if (!note) - propagate_block_delete_insn (insn); + else + { + + 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; } |