Comments
Patch
@@ -22581,7 +22581,7 @@ thumb1_expand_epilogue (void)
/* Emit a USE (stack_pointer_rtx), so that
the stack adjustment will not be deleted. */
- emit_insn (gen_prologue_use (stack_pointer_rtx));
+ emit_insn (gen_epilogue_use (stack_pointer_rtx));
if (crtl->profile || !TARGET_SCHED_PROLOG)
emit_insn (gen_blockage ());
@@ -22805,7 +22805,7 @@ arm_expand_epilogue (bool really_return)
/* Emit USE(stack_pointer_rtx) to ensure that stack adjustment is not
deleted. */
- emit_insn (gen_prologue_use (stack_pointer_rtx));
+ emit_insn (gen_epilogue_use (stack_pointer_rtx));
}
else
{
@@ -22823,7 +22823,7 @@ arm_expand_epilogue (bool really_return)
emit_insn (gen_movsi (stack_pointer_rtx, hard_frame_pointer_rtx));
/* Emit USE(stack_pointer_rtx) to ensure that stack adjustment is not
deleted. */
- emit_insn (gen_prologue_use (stack_pointer_rtx));
+ emit_insn (gen_epilogue_use (stack_pointer_rtx));
}
}
else
@@ -22841,7 +22841,7 @@ arm_expand_epilogue (bool really_return)
GEN_INT (amount)));
/* Emit USE(stack_pointer_rtx) to ensure that stack adjustment is
not deleted. */
- emit_insn (gen_prologue_use (stack_pointer_rtx));
+ emit_insn (gen_epilogue_use (stack_pointer_rtx));
}
}
@@ -81,6 +81,7 @@
; instructions setting registers for EH handling
; and stack frame generation. Operand 0 is the
; register to "use".
+ UNSPEC_EPILOGUE_USE ; Same for epilogue.
UNSPEC_CHECK_ARCH ; Set CCs to indicate 26-bit or 32-bit mode.
UNSPEC_WSHUFH ; Used by the intrinsic form of the iWMMXt WSHUFH instruction.
UNSPEC_WACC ; Used by the intrinsic form of the iWMMXt WACC instruction.
@@ -10610,7 +10611,7 @@
"TARGET_EITHER"
"
if (crtl->calls_eh_return)
- emit_insn (gen_prologue_use (gen_rtx_REG (Pmode, 2)));
+ emit_insn (gen_epilogue_use (gen_rtx_REG (Pmode, 2)));
if (TARGET_THUMB1)
{
thumb1_expand_epilogue ();
@@ -10644,7 +10645,7 @@
;; does not think that it is unused by the sibcall branch that
;; will replace the standard function epilogue.
(define_expand "sibcall_epilogue"
- [(parallel [(unspec:SI [(reg:SI LR_REGNUM)] UNSPEC_PROLOGUE_USE)
+ [(parallel [(unspec:SI [(reg:SI LR_REGNUM)] UNSPEC_EPILOGUE_USE)
(unspec_volatile [(return)] VUNSPEC_EPILOGUE)])]
"TARGET_32BIT"
"
@@ -11267,6 +11268,12 @@
[(set_attr "length" "0")]
)
+(define_insn "epilogue_use"
+ [(unspec:SI [(match_operand:SI 0 "register_operand" "")] UNSPEC_EPILOGUE_USE)]
+ ""
+ "%@ %0 needed for epilogue"
+ [(set_attr "length" "0")]
+)
;; Patterns for exception handling
The pattern prologue_use is emitted for both prologue and epilogue. In particular, the assembly comment "@sp needed for prologue" is printed out for both prologue and epilogue. This patch adds a separate pattern for epilogue_use and replaces prologue_use with epilogue_use where appropriate. No regression on qemu for arm-none-eabi. Ok for trunk? Thanks, Greta 2012-09-17 Greta Yorsh <Greta.Yorsh@arm.com> * config/arm/arm.md (UNSPEC_EPILOGUE_USE): New unspec value. (sibcall_epilogue): Use UNSPEC_EPILOGUE_USE instead of UNSPEC_PROLOGUE_USE. (epilogue_use): New define_insn. (epilogue): Use gen_epilogue_use instead of gen_prologue_use. * config/arm/arm.c (arm_expand_epilogue): Likewise. (thumb1_expand_epilogue) Likewise.