aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2001-03-16 12:34:13 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2001-03-16 12:34:13 +0000
commitfd969c7c33a8afc22d246bffe29dd18a51a9de4d (patch)
tree5fe46b49d648adb2793bacef3ccf2b70ddd4f20b
parent91c251fdff4f796576f836b08fb3fa063189bcf9 (diff)
downloadgcc-fd969c7c33a8afc22d246bffe29dd18a51a9de4d.zip
gcc-fd969c7c33a8afc22d246bffe29dd18a51a9de4d.tar.gz
gcc-fd969c7c33a8afc22d246bffe29dd18a51a9de4d.tar.bz2
sh.c (sh_expand_prologue): Insns that set up the PIC register may be dead.
* config/sh/sh.c (sh_expand_prologue): Insns that set up the PIC register may be dead. From-SVN: r40550
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/sh/sh.c18
2 files changed, 22 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 755267d..7d3d804 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-03-16 Alexandre Oliva <aoliva@redhat.com>
+
+ * config/sh/sh.c (sh_expand_prologue): Insns that set up the PIC
+ register may be dead.
+
2001-03-16 Brad Lucier <lucier@math.purdue.edu>
* Makefile.in (hash.o): Depend on CONFIG_H.
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 4385a0f..f991fe7 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -3987,7 +3987,23 @@ sh_expand_prologue ()
push_regs (live_regs_mask, live_regs_mask2);
if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
- emit_insn (gen_GOTaddr2picreg ());
+ {
+ rtx insn = get_last_insn ();
+ rtx last = emit_insn (gen_GOTaddr2picreg ());
+
+ /* Mark these insns as possibly dead. Sometimes, flow2 may
+ delete all uses of the PIC register. In this case, let it
+ delete the initialization too. */
+ do
+ {
+ insn = NEXT_INSN (insn);
+
+ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD,
+ const0_rtx,
+ REG_NOTES (insn));
+ }
+ while (insn != last);
+ }
if (target_flags != save_flags)
{