summaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-31 22:48:58 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-31 22:48:58 +0000
commit78690da30420a0a57cf2a50c24cb0ced9e410d8d (patch)
tree5939ebfd2ec6fdb99ee8a5d2b7da426f50b58c8a /gcc/cse.c
parent82575fa702c5782ac79aad4b5d7c86b597bc71b0 (diff)
downloadgcc-78690da30420a0a57cf2a50c24cb0ced9e410d8d.tar.gz
* cse.c (delete_trivially_dead_insns): Do not delete stores to
the internal_arg_pointer. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29017 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 6c7aef31ecd..68fe7b04a92 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)