aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-08-31 22:48:58 +0000
committerJeff Law <law@gcc.gnu.org>1999-08-31 16:48:58 -0600
commit61c48fbf260c7b77da7905c7de56b52c255d4da8 (patch)
tree5939ebfd2ec6fdb99ee8a5d2b7da426f50b58c8a
parentede7cd44999a94c3eeb6708db37d6939045b554e (diff)
downloadgcc-61c48fbf260c7b77da7905c7de56b52c255d4da8.zip
gcc-61c48fbf260c7b77da7905c7de56b52c255d4da8.tar.gz
gcc-61c48fbf260c7b77da7905c7de56b52c255d4da8.tar.bz2
cse.c (delete_trivially_dead_insns): Do not delete stores to the internal_arg_pointer.
* cse.c (delete_trivially_dead_insns): Do not delete stores to the internal_arg_pointer. From-SVN: r29017
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cse.c8
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c5fa34c..f8a0981 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Tue Aug 31 16:44:52 1999 Jeffrey A Law (law@cygnus.com)
+
+ * cse.c (delete_trivially_dead_insns): Do not delete stores to
+ the internal_arg_pointer.
+
Tue Aug 31 13:35:42 1999 Richard Henderson <rth@cygnus.com>
Merge peephole2 from new_ia32_branch:
diff --git a/gcc/cse.c b/gcc/cse.c
index 6c7aef3..68fe7b0 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -9191,7 +9191,13 @@ delete_trivially_dead_insns (insns, nreg)
else if (GET_CODE (SET_DEST (PATTERN (insn))) != REG
|| REGNO (SET_DEST (PATTERN (insn))) < FIRST_PSEUDO_REGISTER
|| counts[REGNO (SET_DEST (PATTERN (insn)))] != 0
- || side_effects_p (SET_SRC (PATTERN (insn))))
+ || side_effects_p (SET_SRC (PATTERN (insn)))
+ /* 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 (PATTERN (insn))
+ == current_function_internal_arg_pointer))
live_insn = 1;
}
else if (GET_CODE (PATTERN (insn)) == PARALLEL)