From 9d03928e221780899e000baf0bb33c08c1256a54 Mon Sep 17 00:00:00 2001 From: Ramana Radhakrishnan Date: Mon, 9 Jan 2012 16:55:16 +0000 Subject: [PATCH] backport: re PR rtl-optimization/38644 (Optimization flag -O1 -fschedule-insns2 causes wrong code) 2012-01-09 Ramana Radhakrishnan Backport from mainline 2011-11-04 Jiangning Liu PR rtl-optimization/38644 * config/arm/arm.c (thumb1_expand_epilogue): Add memory barrier for epilogue having stack adjustment. 2012-01-09 Ramana Radhakrishnan Backport from mainline: 2011-11-04 Jiangning Liu PR rtl-optimization/38644 * gcc.target/arm/stack-red-zone.c: New. From-SVN: r183019 --- gcc/ChangeLog | 9 +++++++++ gcc/config/arm/arm.c | 2 ++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.target/arm/stack-red-zone.c | 12 ++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/gcc.target/arm/stack-red-zone.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e4cb8ccded14..ca61c0ba976e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2012-01-09 Ramana Radhakrishnan + + Backport from mainline + 2011-11-04 Jiangning Liu + + PR rtl-optimization/38644 + * config/arm/arm.c (thumb1_expand_epilogue): Add memory barrier + for epilogue having stack adjustment. + 2012-01-09 Eric Botcazou PR ada/41929 diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 0683fc634191..d7316524d9e9 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -20867,6 +20867,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/ChangeLog b/gcc/testsuite/ChangeLog index 531c585ab682..84faeb2155eb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2012-01-09 Ramana Radhakrishnan + + Backport from mainline: + 2011-11-04 Jiangning Liu + + PR rtl-optimization/38644 + * gcc.target/arm/stack-red-zone.c: New. + 2012-01-09 Andrew Stubbs Backport from mainline: 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 000000000000..b9f0f99371ef --- /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; +} -- 2.47.2