From patchwork Wed Oct 10 15:13:37 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [ARM] cleanup prologue_use pattern From: Greta Yorsh X-Patchwork-Id: 190690 Message-Id: <002701cda6f9$d3204f70$7960ee50$@yorsh@arm.com> To: "GCC Patches" Cc: "Ramana Radhakrishnan" , "Richard Earnshaw" , , Date: Wed, 10 Oct 2012 16:13:37 +0100 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 * 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. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index dd073da..f23c2d0 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -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)); } } diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index a60e659..6a910a3 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -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