summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/local-alloc.c7
2 files changed, 14 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6355ac14586..ffa9e03fa7a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2000-09-12 Bernd Schmidt <bernds@redhat.co.uk>
+
+ From Joern Rennecke:
+ * local-alloc.c (update_equiv_regs): If there is no REG_EQUAL note
+ on an insn and function_invariant_p returns nonzero for the source,
+ add a REG_EQUAL note.
+
Thu Sep 14 00:51:57 EDT 2000 John Wehle (john@feith.com)
* alias.c (memrefs_conflict_p): An ADDRESSOF doesn't
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c
index 666faca1705..04b1613b689 100644
--- a/gcc/local-alloc.c
+++ b/gcc/local-alloc.c
@@ -787,6 +787,13 @@ update_equiv_regs ()
note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
+ /* cse sometimes generates function invariants, but doesn't put a
+ REG_EQUAL note on the insn. Since this note would be redundant,
+ there's no point creating it earlier than here. */
+ if (! note && function_invariant_p (src))
+ REG_NOTES (insn)
+ = note = gen_rtx_EXPR_LIST (REG_EQUAL, src, REG_NOTES (insn));
+
if (REG_N_SETS (regno) != 1
&& (! note
|| ! function_invariant_p (XEXP (note, 0))