From 4669036917f42b1cdbf4ef2e4440648e8891f289 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sun, 21 Jul 2002 21:38:08 +0200 Subject: [PATCH] gcse.c (do_local_cprop): Do not extend lifetimes of registers set by do_local_cprop. * gcse.c (do_local_cprop): Do not extend lifetimes of registers set by do_local_cprop. From-SVN: r55626 --- gcc/ChangeLog | 5 +++++ gcc/gcse.c | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3d4ad2769b1..0f5b87b1305 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sun Jul 21 21:36:41 CEST 2002 Jan Hubicka + + * gcse.c (do_local_cprop): Do not extend lifetimes of registers set by + do_local_cprop. + 2002-07-21 Andreas Jaeger * reload1.c (fixup_abnormal_edges): Remove unused variable. diff --git a/gcc/gcse.c b/gcc/gcse.c index d46f81bc800..7fdcdea2a6c 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -4312,9 +4312,18 @@ do_local_cprop (x, insn, alter_jumps) for (l = val->locs; l; l = l->next) { rtx this_rtx = l->loc; + rtx note; + if (CONSTANT_P (this_rtx)) newcnst = this_rtx; - if (REG_P (this_rtx) && REGNO (this_rtx) >= FIRST_PSEUDO_REGISTER) + if (REG_P (this_rtx) && REGNO (this_rtx) >= FIRST_PSEUDO_REGISTER + /* Don't copy propagate if it has attached REG_EQUIV note. + At this point this only function parameters should have + REG_EQUIV notes and if the argument slot is used somewhere + explicitly, it means address of parameter has been taken, + so we should not extend the lifetime of the pseudo. */ + && (!(note = find_reg_note (l->setting_insn, REG_EQUIV, NULL_RTX)) + || GET_CODE (XEXP (note, 0)) != MEM)) newreg = this_rtx; } if (newcnst && constprop_register (insn, x, newcnst, alter_jumps))