From af37f0dda914774e24ff384719f136795f76f2f4 Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Sun, 29 Aug 1999 01:42:28 +0000 Subject: [PATCH] jump.c (jump_optimize_1): Do not delete assignments to internal_arg_pointer. * 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 | 7 +++++++ gcc/cse.c | 8 +++++++- gcc/jump.c | 7 ++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47c76add5f6..07176b6a8e1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 * flow.c (flow_delete_insn_chain): Rename from delete_insn_chain. diff --git a/gcc/cse.c b/gcc/cse.c index 7a13a7b2d24..8197e42d5ea 100644 --- 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) diff --git a/gcc/jump.c b/gcc/jump.c index 7a4caaae13c..c5e27801bf2 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -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); } -- 2.30.2