On Wed, Nov 2, 2011 at 3:27 AM, Jiangning Liu <jiangning....@arm.com> wrote:
> Hi,
>
> This patch is to fix PR38644 in ARM back-end. OK for trunk?
>
> For every detail, please refer to
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38644.

Ok in absence of any target maintainer objection within 24h.

Thanks,
Richard.

> ChangeLog:
>
> 2011-11-2  Jiangning Liu  <jiangning....@arm.com>
>
>        PR rtl-optimization/38644
>        * config/arm/arm.c (thumb1_expand_epilogue): Add memory barrier
>        for epilogue having stack adjustment.
>
> ChangeLog of testsuite:
>
> 2011-11-2  Jiangning Liu  <jiangning....@arm.com>
>
>        PR rtl-optimization/38644
>        * gcc.target/arm/stack-red-zone.c: New.
>
> Thanks,
> -Jiangning
>
> Patch:
>
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index f1ada6f..1f6fc26
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -22215,6 +22215,8 @@ thumb1_expand_epilogue (void)
>   gcc_assert (amount >= 0);
>   if (amount)
>     {
> +      emit_insn (gen_blockage ());
> +
>       if (amount < 512)
>        emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
>                               GEN_INT (amount)));
> diff --git a/gcc/testsuite/gcc.target/arm/stack-red-zone.c
> b/gcc/testsuite/gcc.target/arm/stack-red-zone.c
> new file mode 100644
> index 0000000..b9f0f99
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/arm/stack-red-zone.c
> @@ -0,0 +1,12 @@
> +/* No stack red zone.  PR38644.  */
> +/* { dg-options "-mthumb -O2" } */
> +/* { dg-final { scan-assembler "ldrb\[^\n\]*\\n\[\t \]*add\[\t \]*sp" } }
> */
> +
> +extern int doStreamReadBlock (int *, char *, int size, int);
> +
> +char readStream (int *s)
> +{
> +       char c = 0;
> +       doStreamReadBlock (s, &c, 1, *s);
> +       return c;
> +}
>
>
>
>
>
>

Reply via email to