diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 604e937f5c5..bc2240df35d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-01-27 Alexandre Oliva + + * expr.c (emit_move_insn): Add REG_EQUAL note when constant loaded + into register was forced into memory. + 2001-01-27 Alexandre Oliva * Makefile.in: Remove uses of + before $(MAKE). diff --git a/gcc/expr.c b/gcc/expr.c index 848431e0440..d36351020bf 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.