diff options
author | Nick Clifton <nickc@cambridge.redhat.com> | 2002-01-23 11:04:56 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2002-01-23 11:04:56 +0000 |
commit | 6bacc7b094be8ab0fff0a465298d14d298fc9d29 (patch) | |
tree | 7955cd4e2e139d8d28ff744dad4db31d3c71b516 | |
parent | a415f7bc81c2bf55356a093b49bd05e142c6bdf9 (diff) | |
download | gcc-6bacc7b094be8ab0fff0a465298d14d298fc9d29.zip gcc-6bacc7b094be8ab0fff0a465298d14d298fc9d29.tar.gz gcc-6bacc7b094be8ab0fff0a465298d14d298fc9d29.tar.bz2 |
Use an UNSPEC instead of a USE to prevent prologue/epilogue insns from being
deleted.
From-SVN: r49130
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 10 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 14 |
3 files changed, 28 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f12b7ab8..5c5da99 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2002-01-23 Nick Clifton <nickc@cambridge.redhat.com> + + * config/arm/arm.md (UNSPEC_PROLOGUE_USE): New unspec constant. + (prologue_use): New pattern. + * config/arm/arm.c (expand_prologue): Use gen_prologue_use in + preference to gen_rtx_USE. + (thumb_expand_prologue): Use gen_prologue_use in preference to + gen_rtx_USE. + (thumb_expand_epilogue): Use gen_prologue_use in preference to + gen_rtx_USE. + 2002-01-23 Hans-Peter Nilsson <hp@bitrange.com> * loop.c [!HAVE_prefetch] (CODE_FOR_prefetch): Define to 0. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 04f06ae..567daa3 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -8331,7 +8331,7 @@ arm_expand_prologue () emit_insn (gen_rtx_SET (SImode, ip_rtx, insn)); /* Add a USE to stop propagate_one_insn() from barfing. */ - emit_insn (gen_rtx_USE (VOIDmode, ip_rtx)); + emit_insn (gen_prologue_use (ip_rtx)); } } @@ -8377,7 +8377,7 @@ arm_expand_prologue () then make sure that it does not get reused by the ce2 pass. */ if ((live_regs_mask & (1 << LR_REGNUM)) == 0) { - emit_insn (gen_rtx_USE (VOIDmode, gen_rtx_REG (SImode, LR_REGNUM))); + emit_insn (gen_prologue_use (gen_rtx_REG (SImode, LR_REGNUM))); cfun->machine->lr_save_eliminated = 1; } } @@ -10186,7 +10186,7 @@ thumb_expand_prologue () /* Save it by copying it into a high, scratch register. */ emit_insn (gen_movsi (spare, reg)); /* Add a USE to stop propagate_one_insn() from barfing. */ - emit_insn (gen_rtx_USE (VOIDmode, spare)); + emit_insn (gen_prologue_use (spare)); /* Decrement the stack. */ emit_insn (gen_movsi (reg, GEN_INT (- amount))); @@ -10200,7 +10200,7 @@ thumb_expand_prologue () analysis will not consider the restore redundant. The register won't be used again in this function and isn't restored by the epilogue. */ - emit_insn (gen_rtx_USE (VOIDmode, reg)); + emit_insn (gen_prologue_use (reg)); } else { @@ -10248,7 +10248,7 @@ thumb_expand_epilogue () /* Emit a USE (stack_pointer_rtx), so that the stack adjustment will not be deleted. */ - emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx)); + emit_insn (gen_prologue_use (stack_pointer_rtx)); if (current_function_profile || TARGET_NO_SCHED_PRO) emit_insn (gen_blockage ()); diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 5f508dd..3646fe5 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -1,6 +1,6 @@ ;;- Machine description for ARM for GNU compiler -;; Copyright 1991, 1993, 1994, 1995, 1996, 1996, 1997, 1998, 1999, 2000, 2001 -;; Free Software Foundation, Inc. +;; Copyright 1991, 1993, 1994, 1995, 1996, 1996, 1997, 1998, 1999, 2000, +;; 2001, 2002 Free Software Foundation, Inc. ;; Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) ;; and Martin Simmons (@harleqn.co.uk). ;; More major hacks by Richard Earnshaw (rearnsha@arm.com). @@ -64,6 +64,11 @@ (UNSPEC_CLZ 5) ; `clz' instruction, count leading zeros (SImode): ; operand 0 is the result, ; operand 1 is the parameter. + (UNSPEC_PROLOGUE_USE 6) ; As USE insns are not meaningful after reload, + ; this unspec is used to prevent the deletion of + ; instructions setting registers for EH handling + ; and stack frame generation. Operand 0 is the + ; register to "use". ] ) @@ -9187,3 +9192,8 @@ "" ) +(define_insn "prologue_use" + [(unspec:SI [(match_operand:SI 0 "register_operand" "")] UNSPEC_PROLOGUE_USE)] + "" + "%@ %0 needed for prologue" +) |