[Patch AArch64] Turn on frame pointer / partial fix for PR84521
authorRamana Radhakrishnan <ramana.radhakrishnan@arm.com>
Mon, 26 Feb 2018 09:25:21 +0000 (09:25 +0000)
committerRamana Radhakrishnan <ramana@gcc.gnu.org>
Mon, 26 Feb 2018 09:25:21 +0000 (09:25 +0000)
This fixes a GCC-8 regression that we accidentally switched off frame
pointers in the AArch64 backend when changing the defaults in the common
parts of the code. This breaks an ABI decision that was made in GCC at
the dawn of the port with respect to having a frame pointer at all
times.  If we really want to turn this off lets have a discussion around
that separately.

For now turn this back on and I believe this will leave PR84521 latent
again with -fomit-frame-pointer and (hopefully) make the ruby issue go
away. I'm asking Sudi to pick that up.

Bootstrapped and regression tested on AArch64-none-linux-gnu but I see
one regression in gcc.c-torture/execute/960419-2.c which needs to be
looked at next (PR84528, thanks Kyrill).

Ok to put in and then look at PR84528 ?

2018-02-26  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

        PR target/84521
* common/config/aarch64/aarch64-common.c
(aarch_option_optimization_table[]): Switch
off fomit-frame-pointer

2018-02-26  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

PR target/84521
* gcc.target/aarch64/lr_free_2.c: Revert changes in
r254814 disabling -fomit-frame-pointer by default.
* gcc.target/aarch64/spill_1.c: Likewise.
* gcc.target/aarch64/test_frame_11.c: Likewise.
* gcc.target/aarch64/test_frame_12.c: Likewise.
* gcc.target/aarch64/test_frame_13.c: Likewise.
* gcc.target/aarch64/test_frame_14.c: Likewise.
* gcc.target/aarch64/test_frame_15.c: Likewise.
* gcc.target/aarch64/test_frame_3.c: Likewise.
* gcc.target/aarch64/test_frame_5.c: Likewise.
* gcc.target/aarch64/test_frame_9.c: Likewise.

From-SVN: r257984

13 files changed:
gcc/ChangeLog
gcc/common/config/aarch64/aarch64-common.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/lr_free_2.c
gcc/testsuite/gcc.target/aarch64/spill_1.c
gcc/testsuite/gcc.target/aarch64/test_frame_11.c
gcc/testsuite/gcc.target/aarch64/test_frame_12.c
gcc/testsuite/gcc.target/aarch64/test_frame_13.c
gcc/testsuite/gcc.target/aarch64/test_frame_14.c
gcc/testsuite/gcc.target/aarch64/test_frame_15.c
gcc/testsuite/gcc.target/aarch64/test_frame_3.c
gcc/testsuite/gcc.target/aarch64/test_frame_5.c
gcc/testsuite/gcc.target/aarch64/test_frame_9.c

index bc2bde0..85181cf 100644 (file)
@@ -1,3 +1,10 @@
+2018-02-26  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+        PR target/84521
+       * common/config/aarch64/aarch64-common.c
+       (aarch_option_optimization_table[]): Switch
+       off fomit-frame-pointer
+
 2018-02-26  Kito Cheng  <kito.cheng@gmail.com>
            Chung-Ju Wu  <jasonwucj@gmail.com>
 
index 71d3953..7fd9305 100644 (file)
@@ -47,6 +47,8 @@ static const struct default_options aarch_option_optimization_table[] =
   {
     /* Enable section anchors by default at -O1 or higher.  */
     { OPT_LEVELS_1_PLUS, OPT_fsection_anchors, NULL, 1 },
+    /* Disable fomit-frame-pointer by default.  */
+    { OPT_LEVELS_ALL, OPT_fomit_frame_pointer, NULL, 0 },
     /* Enable -fsched-pressure by default when optimizing.  */
     { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 },
     /* Enable redundant extension instructions removal at -O2 and higher.  */
index 86fce26..37ae751 100644 (file)
@@ -1,3 +1,18 @@
+2018-02-26  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       PR target/84521
+       * gcc.target/aarch64/lr_free_2.c: Revert changes in
+       r254814 disabling -fomit-frame-pointer by default.
+       * gcc.target/aarch64/spill_1.c: Likewise.
+       * gcc.target/aarch64/test_frame_11.c: Likewise.
+       * gcc.target/aarch64/test_frame_12.c: Likewise.
+       * gcc.target/aarch64/test_frame_13.c: Likewise.
+       * gcc.target/aarch64/test_frame_14.c: Likewise.
+       * gcc.target/aarch64/test_frame_15.c: Likewise.
+       * gcc.target/aarch64/test_frame_3.c: Likewise.
+       * gcc.target/aarch64/test_frame_5.c: Likewise.
+       * gcc.target/aarch64/test_frame_9.c: Likewise.
+
 2018-02-25  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/83633
index 5d9500f..e2b9490 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do run } */
-/* { dg-options "-fno-omit-frame-pointer -fno-inline -O2 -ffixed-x2 -ffixed-x3 -ffixed-x4 -ffixed-x5 -ffixed-x6 -ffixed-x7 -ffixed-x8 -ffixed-x9 -ffixed-x10 -ffixed-x11 -ffixed-x12 -ffixed-x13 -ffixed-x14 -ffixed-x15 -ffixed-x16 -ffixed-x17 -ffixed-x18 -ffixed-x19 -ffixed-x20 -ffixed-x21 -ffixed-x22 -ffixed-x23 -ffixed-x24 -ffixed-x25 -ffixed-x26 -ffixed-x27 -ffixed-x28 --save-temps -mgeneral-regs-only -fno-ipa-cp -fdump-rtl-ira" } */
+/* { dg-options "-fno-inline -O2 -ffixed-x2 -ffixed-x3 -ffixed-x4 -ffixed-x5 -ffixed-x6 -ffixed-x7 -ffixed-x8 -ffixed-x9 -ffixed-x10 -ffixed-x11 -ffixed-x12 -ffixed-x13 -ffixed-x14 -ffixed-x15 -ffixed-x16 -ffixed-x17 -ffixed-x18 -ffixed-x19 -ffixed-x20 -ffixed-x21 -ffixed-x22 -ffixed-x23 -ffixed-x24 -ffixed-x25 -ffixed-x26 -ffixed-x27 -ffixed-x28 --save-temps -mgeneral-regs-only -fno-ipa-cp -fdump-rtl-ira" } */
 
 extern void abort ();
 
index c9528cb..8474258 100644 (file)
@@ -14,3 +14,5 @@ foo (void)
 }
 
 /* { dg-final { scan-assembler-times {\tmovi\tv[0-9]+\.4s,} 2 } } */
+/* { dg-final { scan-assembler-not {\tldr\t} } } */
+/* { dg-final { scan-assembler-not {\tstr\t} } } */
index 67f8582..f162cc0 100644 (file)
@@ -5,7 +5,7 @@
      * optimized code should use "stp !" for stack adjustment.  */
 
 /* { dg-do run } */
-/* { dg-options "-fno-omit-frame-pointer -O2 --save-temps" } */
+/* { dg-options "-O2 --save-temps" } */
 
 #include "test_frame_common.h"
 
index 02e48b4..62761e7 100644 (file)
@@ -4,7 +4,7 @@
      * number of callee-save reg >= 2.  */
 
 /* { dg-do run } */
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
+/* { dg-options "-O2 --save-temps" } */
 
 #include "test_frame_common.h"
 
@@ -14,5 +14,5 @@ t_frame_run (test12)
 /* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 1 } } */
 
 /* Check epilogue using no write-back.  */
-/* { dg-final { scan-assembler "ldr\tx30, \\\[sp, \[0-9\]+\\\]" } } */
+/* { dg-final { scan-assembler "ldp\tx29, x30, \\\[sp, \[0-9\]+\\\]" } } */
 
index 3313936..74b3370 100644 (file)
@@ -5,7 +5,7 @@
      * Use a single stack adjustment, no writeback.  */
 
 /* { dg-do run } */
-/* { dg-options "-fno-omit-frame-pointer -O2 --save-temps" } */
+/* { dg-options "-O2 --save-temps" } */
 
 #include "test_frame_common.h"
 
index 95e2bf3..78818de 100644 (file)
@@ -4,12 +4,9 @@
      * number of callee-save reg >= 2.  */
 
 /* { dg-do run } */
-/* { dg-options "-O2 -fno-omit-frame-pointer --save-temps" } */
+/* { dg-options "-O2" } */
 
 #include "test_frame_common.h"
 
 t_frame_pattern_outgoing (test14, 700, , 8, a[8])
 t_frame_run (test14)
-
-/* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 1 } } */
-/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, \[0-9\]+\\\]" 1 } } */
index aebf6d1..bed6714 100644 (file)
@@ -6,7 +6,7 @@
      * Use a single stack adjustment, no writeback.  */
 
 /* { dg-do run } */
-/* { dg-options "-fno-omit-frame-pointer -O2 --save-temps" } */
+/* { dg-options "-O2 --save-temps" } */
 
 #include "test_frame_common.h"
 
index b34a0dd..f90ea4a 100644 (file)
@@ -6,12 +6,9 @@
      * we can't use "str !" to optimize stack adjustment.  */
 
 /* { dg-do run } */
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
+/* { dg-options "-O2 -fomit-frame-pointer" } */
 
 #include "test_frame_common.h"
 
 t_frame_pattern (test3, 400, )
 t_frame_run (test3)
-
-/* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 1 } } */
-/* { dg-final { scan-assembler "str\tx30, \\\[sp\\\]" } } */
index 2d7c83a..0624b5b 100644 (file)
@@ -5,12 +5,9 @@
      * one subtraction of the whole frame size.  */
 
 /* { dg-do run } */
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
+/* { dg-options "-O2 -fomit-frame-pointer" } */
 
 #include "test_frame_common.h"
 
 t_frame_pattern_outgoing (test5, 300, "x19", 8, a[8])
 t_frame_run (test5)
-
-/* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 1 } } */
-/* { dg-final { scan-assembler "stp\tx\[0-9\]+, x30, \\\[sp, \[0-9\]+\\\]" } } */
index a28fbce..0dffbf8 100644 (file)
@@ -4,15 +4,14 @@
      * total frame size > 512.
        area except outgoing <= 512
      * number of callee-saved reg = 1.
-     * Use a single stack adjustment.  */
+     * Split stack adjustment into two subtractions.
+       the first subtractions couldn't be optimized
+       into "str !" as it's > 256.  */
 
 /* { dg-do run } */
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
+/* { dg-options "-O2 -fomit-frame-pointer" } */
 
 #include "test_frame_common.h"
 
 t_frame_pattern_outgoing (test9, 480, , 24, a[8], a[9], a[10])
 t_frame_run (test9)
-
-/* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 1 } } */
-/* { dg-final { scan-assembler "str\tx30, \\\[sp, \[0-9\]+\\\]" } } */