[PING][Patch, ARM] cleanup prologue_use pattern
Richard Earnshaw
rearnsha@arm.com
Wed Oct 17 13:35:00 GMT 2012
On 17/10/12 13:37, Greta Yorsh wrote:
> I am attaching a new version of the patch, addressing Richard's comments.
>
> This patch renames the exiting pattern prologue_use to force_register_use,
> because the pattern is used in both prologue and epilogue.
>
> No regression on qemu for arm-none-eabi.
>
> Ok for trunk?
>
> Thanks,
> Greta
>
> ChangeLog
>
> gcc/
>
> 2012-10-17 Greta Yorsh <Greta.Yorsh@arm.com>
>
> * config/arm/arm.md (UNSPEC_PROLOGUE_USE): Rename this...
> (UNSPEC_REGISTER_USE): ... to this.
> (prologue_use): Rename this...
> (force_register_use): ... to this and update output assembly.
> (epilogue) Rename gen_prologue_use to gen_force_register_use.
> * config/arm/arm.c (arm_expand_prologue): Likewise.
> (thumb1_expand_epilogue): Likewise.
> (arm_expand_epilogue): Likewise.
> (arm_expand_epilogue): Likewise.
>
>
>
OK.
R.
>
> -----Original Message-----
> From: Richard Earnshaw
> Sent: 17 October 2012 11:14
> To: Greta Yorsh
> Cc: GCC Patches; Ramana Radhakrishnan; nickc@redhat.com;
> paul@codesourcery.com
> Subject: Re: [PING][Patch, ARM] cleanup prologue_use pattern
>
> On 17/10/12 11:08, Greta Yorsh wrote:
>> Ping!
>>
>
> I've been pondering why this was being asked for. As far as I can tell
> it's just a naming issue (mention of the epilogue in the prologue).
>
> The right thing to do is to rename the pattern to reflect the dual use
> rather than add additional patterns with identical NOP behaviour. Can't
> you just rename the existing pattern? Something like "force_register_use"?
>
> R.
>
>> Thanks,
>> Greta
>>
>> -----Original Message-----
>> From: Greta Yorsh [mailto:greta.yorsh@arm.com]
>> Sent: 10 October 2012 16:14
>> To: GCC Patches
>> Cc: Ramana Radhakrishnan; Richard Earnshaw; nickc@redhat.com;
>> paul@codesourcery.com
>> Subject: [Patch, ARM] cleanup prologue_use pattern
>>
>> 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.
>>
>>
>> rename-prolog-use.v2.patch.txt
>>
>>
>> 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
>>
>>
>
>
> rename_prologue_use.v3.patch.txt
>
>
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index 11f0037..248ed09 100644
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -16671,7 +16671,7 @@ arm_expand_prologue (void)
> }
> emit_set_insn (ip_rtx, insn);
> /* Add a USE to stop propagate_one_insn() from barfing. */
> - emit_insn (gen_prologue_use (ip_rtx));
> + emit_insn (gen_force_register_use (ip_rtx));
> }
> }
> else
> @@ -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_force_register_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_force_register_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_force_register_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_force_register_use (stack_pointer_rtx));
> }
> }
>
> diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
> index 4735ad2..6cc4e81 100644
> --- a/gcc/config/arm/arm.md
> +++ b/gcc/config/arm/arm.md
> @@ -76,7 +76,7 @@
> ; that points at the containing instruction.
> UNSPEC_PRLG_STK ; A special barrier that prevents frame accesses
> ; being scheduled before the stack adjustment insn.
> - UNSPEC_PROLOGUE_USE ; As USE insns are not meaningful after reload,
> + UNSPEC_REGISTER_USE ; 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
> @@ -10748,7 +10748,7 @@
> "TARGET_EITHER"
> "
> if (crtl->calls_eh_return)
> - emit_insn (gen_prologue_use (gen_rtx_REG (Pmode, 2)));
> + emit_insn (gen_force_register_use (gen_rtx_REG (Pmode, 2)));
> if (TARGET_THUMB1)
> {
> thumb1_expand_epilogue ();
> @@ -10782,7 +10782,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_REGISTER_USE)
> (unspec_volatile [(return)] VUNSPEC_EPILOGUE)])]
> "TARGET_32BIT"
> "
> @@ -11398,10 +11398,10 @@
> ""
> )
>
> -(define_insn "prologue_use"
> - [(unspec:SI [(match_operand:SI 0 "register_operand" "")] UNSPEC_PROLOGUE_USE)]
> +(define_insn "force_register_use"
> + [(unspec:SI [(match_operand:SI 0 "register_operand" "")] UNSPEC_REGISTER_USE)]
> ""
> - "%@ %0 needed for prologue"
> + "%@ %0 needed"
> [(set_attr "length" "0")]
> )
>
>
More information about the Gcc-patches
mailing list