jump.c (jump_optimize_1): Do not delete assignments to internal_arg_pointer.
authorJeffrey A Law <law@cygnus.com>
Sun, 29 Aug 1999 01:42:28 +0000 (01:42 +0000)
committerJeff Law <law@gcc.gnu.org>
Sun, 29 Aug 1999 01:42:28 +0000 (19:42 -0600)
        * jump.c (jump_optimize_1): Do not delete assignments to
        internal_arg_pointer.
        * cse.c (delete_trivially_dead_insns): Always consider a set of
        the internal_arg_pointer live.

From-SVN: r28957

gcc/ChangeLog
gcc/cse.c
gcc/jump.c

index 47c76add5f6e78bf5fdd3b6f3dbf3f3ffb0901fb..07176b6a8e1848a29fe71f4a35b2ddce3f0413f0 100644 (file)
@@ -1,3 +1,10 @@
+Sat Aug 28 19:36:05 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * jump.c (jump_optimize_1): Do not delete assignments to 
+       internal_arg_pointer.
+       * cse.c (delete_trivially_dead_insns): Always consider a set of
+       the internal_arg_pointer live.
+
 Sat Aug 28 16:24:31 1999  Richard Henderson  <rth@cygnus.com>
 
        * flow.c (flow_delete_insn_chain): Rename from delete_insn_chain.
index 7a13a7b2d249fee9e8f47aaa6fad21bfe51b8d13..8197e42d5ea5a2d660aefc0ee3cc6a9d50efb5d4 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -9215,7 +9215,13 @@ delete_trivially_dead_insns (insns, nreg)
                else if (GET_CODE (SET_DEST (elt)) != REG
                         || REGNO (SET_DEST (elt)) < FIRST_PSEUDO_REGISTER
                         || counts[REGNO (SET_DEST (elt))] != 0
-                        || side_effects_p (SET_SRC (elt)))
+                        || side_effects_p (SET_SRC (elt))
+                        /* An ADDRESSOF expression can turn into a use of the
+                           internal arg pointer, so always consider the
+                           internal arg pointer live.  If it is truly dead,
+                           flow will delete the initializing insn.  */
+                        || (SET_DEST (elt)
+                            == current_function_internal_arg_pointer))
                  live_insn = 1;
              }
            else if (GET_CODE (elt) != CLOBBER && GET_CODE (elt) != USE)
index 7a4caaae13c1f315d785a00b5f37b05c3a5d4d8a..c5e27801bf28d0631b809cdcc18f95b0e895b869 100644 (file)
@@ -290,7 +290,12 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only)
               might arrange to use that reg for real.  */             
            && REGNO_LAST_NOTE_UID (REGNO (SET_DEST (set))) == INSN_UID (insn)
            && ! side_effects_p (SET_SRC (set))
-           && ! find_reg_note (insn, REG_RETVAL, 0))
+           && ! find_reg_note (insn, REG_RETVAL, 0)
+           /* An ADDRESSOF expression can turn into a use of the internal arg
+              pointer, so do not delete the initialization of the internal
+              arg pointer yet.  If it is truly dead, flow will delete the
+              initializing insn.  */
+           && SET_DEST (set) != current_function_internal_arg_pointer)
          delete_insn (insn);
       }