]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/38644 (Optimization flag -O1 -fschedule-insns2 causes wrong...
authorJiangning Liu <jiangning.liu@arm.com>
Fri, 4 Nov 2011 16:50:04 +0000 (16:50 +0000)
committerJoey Ye <jye2@gcc.gnu.org>
Fri, 4 Nov 2011 16:50:04 +0000 (16:50 +0000)
2011-11-04  Jiangning Liu  <jiangning.liu@arm.com>

PR rtl-optimization/38644
* config/arm/arm.c (thumb1_expand_epilogue): Add memory barrier
for epilogue having stack adjustment.

testcase:
* gcc.target/arm/stack-red-zone.c: New.

From-SVN: r180964

gcc/ChangeLog
gcc/config/arm/arm.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/stack-red-zone.c [new file with mode: 0644]

index d6e9551bc61003746d5e8948079dab58d3dbb0f2..2c2c15448584f0bd2a32c45121f6b07316952ac5 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-04  Jiangning Liu  <jiangning.liu@arm.com>
+
+       PR rtl-optimization/38644
+       * config/arm/arm.c (thumb1_expand_epilogue): Add memory barrier
+       for epilogue having stack adjustment.
+
 2011-11-04  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/50931
index 5f0d5629462f6aebfd48e5bf85a2729c4b134f44..6ef6f62d28d0bea798cf314f9b141b7dd8d25308 100644 (file)
@@ -22216,6 +22216,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)));
index d5a6ea510d6a4380eb53d7ab51dcca8568a6b934..f47a503822c8de8c5c1768d92d08b2261d79160d 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-04  Jiangning Liu  <jiangning.liu@arm.com>
+
+       PR rtl-optimization/38644
+       * gcc.target/arm/stack-red-zone.c: New.
+
 2011-11-04  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/48420
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 (file)
index 0000000..b9f0f99
--- /dev/null
@@ -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;
+}