cse.c (cse_insn): Avoid RTL sharing when updating the RETVAL insn's notes following...
authorRoger Sayle <roger@eyesopen.com>
Tue, 21 Jan 2003 01:52:46 +0000 (01:52 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Tue, 21 Jan 2003 01:52:46 +0000 (01:52 +0000)
* cse.c (cse_insn): Avoid RTL sharing when updating the RETVAL
insn's notes following a substitution inside a libcall.

From-SVN: r61524

gcc/ChangeLog
gcc/cse.c

index 9f4a2d63c81f530ce43a2058c34f69b558b75f6f..c0ed2d3d31bd19ad4e40153d6f25516fbc9487e8 100644 (file)
@@ -1,3 +1,8 @@
+2003-01-20  Roger Sayle  <roger@eyesopen.com>
+
+       * cse.c (cse_insn): Avoid RTL sharing when updating the RETVAL
+       insn's notes following a substitution inside a libcall.
+
 2003-01-20  Zack Weinberg  <zack@codesourcery.com>
 
        * configure.in: Check for system-provided 'uchar' type.
index c9ba3c0e5932ca3c822007e879703c467a185101..1a4ca2e77652a862cc837a260b1770aa62605f19 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5557,6 +5557,8 @@ cse_insn (insn, libcall_insn)
          /* Look for a substitution that makes a valid insn.  */
          else if (validate_change (insn, &SET_SRC (sets[i].rtl), trial, 0))
            {
+             rtx new = canon_reg (SET_SRC (sets[i].rtl), insn);
+
              /* If we just made a substitution inside a libcall, then we
                 need to make the same substitution in any notes attached
                 to the RETVAL insn.  */
@@ -5565,14 +5567,12 @@ cse_insn (insn, libcall_insn)
                      || GET_CODE (sets[i].orig_src) == SUBREG
                      || GET_CODE (sets[i].orig_src) == MEM))
                replace_rtx (REG_NOTES (libcall_insn), sets[i].orig_src,
-                            canon_reg (SET_SRC (sets[i].rtl), insn));
+                            copy_rtx (new));
 
              /* The result of apply_change_group can be ignored; see
                 canon_reg.  */
 
-             validate_change (insn, &SET_SRC (sets[i].rtl),
-                              canon_reg (SET_SRC (sets[i].rtl), insn),
-                              1);
+             validate_change (insn, &SET_SRC (sets[i].rtl), new, 1);
              apply_change_group ();
              break;
            }