diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index acf8454abf124e5ff8a757509626c9960deb19ea..fcfbfdccee9b674d6326ee8f2d10295afc0f906b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-04-04  Roger Sayle  <roger@eyesopen.com>
+
+	* cse.c (cse_insn): Correct usage of simplify_replace_rtx when
+	updating the REG_EQUAL note on an insn's libcall_insn.
+
 2004-04-04  Roger Sayle  <roger@eyesopen.com>
 
 	* df.h: Tidy up whitespace in the definitions of the DF_ flags.
diff --git a/gcc/cse.c b/gcc/cse.c
index 38f6ef06004634b7f0ba3a3b427d31ef55eba9b1..0a7281ecc426b4bbe75c00eabd4b714e6b19faa9 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5402,8 +5402,13 @@ cse_insn (rtx insn, rtx libcall_insn)
 		  && (GET_CODE (sets[i].orig_src) == REG
 		      || GET_CODE (sets[i].orig_src) == SUBREG
 		      || GET_CODE (sets[i].orig_src) == MEM))
-		simplify_replace_rtx (REG_NOTES (libcall_insn),
-				      sets[i].orig_src, copy_rtx (new));
+		{
+	          rtx note = find_reg_equal_equiv_note (libcall_insn);
+		  if (note != 0)
+		    XEXP (note, 0) = simplify_replace_rtx (XEXP (note, 0),
+							   sets[i].orig_src,
+							   copy_rtx (new));
+		}
 
 	      /* The result of apply_change_group can be ignored; see
 		 canon_reg.  */