aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/expr.c15
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 604e937..bc2240d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2001-01-27 Alexandre Oliva <aoliva@redhat.com>
+ * expr.c (emit_move_insn): Add REG_EQUAL note when constant loaded
+ into register was forced into memory.
+
+2001-01-27 Alexandre Oliva <aoliva@redhat.com>
+
* Makefile.in: Remove uses of + before $(MAKE).
2001-01-26 Richard Henderson <rth@redhat.com>
diff --git a/gcc/expr.c b/gcc/expr.c
index 848431e..d363510 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -2709,6 +2709,8 @@ emit_move_insn (x, y)
rtx x, y;
{
enum machine_mode mode = GET_MODE (x);
+ rtx y_cst = NULL_RTX;
+ rtx last_insn;
x = protect_from_queue (x, 1);
y = protect_from_queue (y, 0);
@@ -2720,7 +2722,10 @@ emit_move_insn (x, y)
if (GET_CODE (y) == CONSTANT_P_RTX)
;
else if (CONSTANT_P (y) && ! LEGITIMATE_CONSTANT_P (y))
- y = force_const_mem (mode, y);
+ {
+ y_cst = y;
+ y = force_const_mem (mode, y);
+ }
/* If X or Y are memory references, verify that their addresses are valid
for the machine. */
@@ -2740,7 +2745,13 @@ emit_move_insn (x, y)
if (mode == BLKmode)
abort ();
- return emit_move_insn_1 (x, y);
+ last_insn = emit_move_insn_1 (x, y);
+
+ if (y_cst && GET_CODE (x) == REG)
+ REG_NOTES (last_insn)
+ = gen_rtx_EXPR_LIST (REG_EQUAL, y_cst, REG_NOTES (last_insn));
+
+ return last_insn;
}
/* Low level part of emit_move_insn.