diff options
author | Jeff Law <law@gcc.gnu.org> | 1996-05-20 10:44:05 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1996-05-20 10:44:05 -0600 |
commit | eed04dff2e14b06ada0b50b5571f7b143c589c90 (patch) | |
tree | 1e8bcfc31111a0cba816c5ba13059a7fd0138c5b | |
parent | da3c5e3c8d8d6eaef928f0d1265442886b255c61 (diff) | |
download | gcc-eed04dff2e14b06ada0b50b5571f7b143c589c90.zip gcc-eed04dff2e14b06ada0b50b5571f7b143c589c90.tar.gz gcc-eed04dff2e14b06ada0b50b5571f7b143c589c90.tar.bz2 |
reorg.c (relax_delay_slots): Call update_block before redirecting a branch past a redundant insn.
* reorg.c (relax_delay_slots): Call update_block before
redirecting a branch past a redundant insn.
From-SVN: r12060
-rw-r--r-- | gcc/reorg.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c index 11e5fc7..ab30336 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -4066,11 +4066,20 @@ relax_delay_slots (first) if (trial && GET_CODE (PATTERN (trial)) != SEQUENCE && redundant_insn (trial, insn, 0)) { - trial = next_active_insn (trial); - if (trial == 0) - target_label = find_end_label (); - else - target_label = get_label_before (trial); + rtx tmp; + + /* Figure out where to emit the special USE insn so we don't + later incorrectly compute register live/death info. */ + tmp = next_active_insn (trial); + if (tmp == 0) + tmp = find_end_label (); + + /* Insert the special USE insn and update dataflow info. */ + update_block (trial, tmp); + + /* Now emit a label before the special USE insn, and + redirect our jump to the new label. */ + target_label = get_label_before (PREV_INSN (tmp)); reorg_redirect_jump (delay_insn, target_label); next = insn; continue; |