expr.c (emit_move_insn): Add REG_EQUAL note when constant loaded into register was...
authorAlexandre Oliva <aoliva@redhat.com>
Sat, 27 Jan 2001 20:24:34 +0000 (20:24 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Sat, 27 Jan 2001 20:24:34 +0000 (20:24 +0000)
* expr.c (emit_move_insn): Add REG_EQUAL note when constant loaded
into register was forced into memory.

From-SVN: r39301

gcc/ChangeLog
gcc/expr.c

index 604e937..bc2240d 100644 (file)
@@ -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>
index 848431e..d363510 100644 (file)
@@ -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.