diff options
author | Jan Hubicka <jh@suse.cz> | 2002-07-21 21:38:08 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2002-07-21 19:38:08 +0000 |
commit | 4669036917f42b1cdbf4ef2e4440648e8891f289 (patch) | |
tree | e5d26e074b1d30e38ff9d762813992c901f36622 /gcc | |
parent | 60ffc1b8165aa3fbd6d26880a56451970c116bcb (diff) | |
download | gcc-4669036917f42b1cdbf4ef2e4440648e8891f289.zip gcc-4669036917f42b1cdbf4ef2e4440648e8891f289.tar.gz gcc-4669036917f42b1cdbf4ef2e4440648e8891f289.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/gcse.c | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3d4ad27..0f5b87b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sun Jul 21 21:36:41 CEST 2002 Jan Hubicka <jh@suse.cz> + + * gcse.c (do_local_cprop): Do not extend lifetimes of registers set by + do_local_cprop. + 2002-07-21 Andreas Jaeger <aj@suse.de> * reload1.c (fixup_abnormal_edges): Remove unused variable. @@ -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)) |