(optimize_reg_copy_2): Don't attempt optimization if destination
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 16 Dec 1995 23:16:01 +0000 (18:16 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 16 Dec 1995 23:16:01 +0000 (18:16 -0500)
register dies.

From-SVN: r10780

gcc/local-alloc.c

index 647b2d53304b092d6b692c62227544e601b410bd..9d941fef162c006bf9185b5213753abf18106b86 100644 (file)
@@ -865,7 +865,7 @@ optimize_reg_copy_1 (insn, dest, src)
    In that case, we can replace all uses of DEST, starting with INSN and
    ending with the set of SRC to DEST, with SRC.  We do not do this
    optimization if a CALL_INSN is crossed unless SRC already crosses a
-   call.
+   call or if DEST dies before the copy back to SRC.
 
    It is assumed that DEST and SRC are pseudos; it is too complicated to do
    this for hard registers since the substitutions we may make might fail.  */
@@ -930,6 +930,7 @@ optimize_reg_copy_2 (insn, dest, src)
        }
 
       if (reg_set_p (src, p)
+         || find_reg_note (p, REG_DEAD, dest)
          || (GET_CODE (p) == CALL_INSN && reg_n_calls_crossed[sregno] == 0))
        break;
     }