aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-08-04 14:08:43 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2001-08-04 12:08:43 +0000
commitf133022600b6df6e3ed8eae718b22a8534b60874 (patch)
tree52edd2af4071bdd3a36e9e4326fda3898b0340fc /gcc/loop.c
parentef6e958a8611ff372211d0fd3cd9659614583bb4 (diff)
downloadgcc-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.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index 998832c..fbbef73 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -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)