diff options
author | Jan Hubicka <jh@suse.cz> | 2001-08-04 14:08:43 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-08-04 12:08:43 +0000 |
commit | f133022600b6df6e3ed8eae718b22a8534b60874 (patch) | |
tree | 52edd2af4071bdd3a36e9e4326fda3898b0340fc /gcc/loop.c | |
parent | ef6e958a8611ff372211d0fd3cd9659614583bb4 (diff) | |
download | gcc-f133022600b6df6e3ed8eae718b22a8534b60874.zip gcc-f133022600b6df6e3ed8eae718b22a8534b60874.tar.gz gcc-f133022600b6df6e3ed8eae718b22a8534b60874.tar.bz2 |
* loop.c (try_copy_prop); Kill invalidated REG_EQUAL notes.
* reload1.c (fixup_abnormal_edges): New static function.
(reload): Use it.
* flow.c (need_fake_edge_p): New function.
(flow_call_edges_add): Fix handling of noreturn and sibbling calls;
avoid call insn to be very last insn in the insn stream.
* profile.c (branch_prob): Call flow_call_edges_add instead of
doing that by hand; cleanup cfg to re-merge basic blocks once
we are done.
From-SVN: r44635
Diffstat (limited to 'gcc/loop.c')
-rw-r--r-- | gcc/loop.c | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -9289,7 +9289,16 @@ try_copy_prop (loop, replacement, regno) arg.set_seen = 0; note_stores (PATTERN (insn), note_reg_stored, &arg); if (arg.set_seen) - break; + { + rtx note = find_reg_note (insn, REG_EQUAL, NULL); + + /* It is possible that we've turned previously valid REG_EQUAL to + invalid, as we change the REGNO to REPLACEMENT and unlike REGNO, + REPLACEMENT is modified, we get different meaning. */ + if (note && reg_mentioned_p (replacement, XEXP (note, 0))) + remove_note (insn, note); + break; + } } } if (! init_insn) |