[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 bc2bde03e584c086f075ea61469b41173e88bd2c..85181cf325a96b088d89062ba5a2c21822a65341 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 71d395398c7912685be908abe3043317053b8e22..7fd93050037734d52f9f5fc4eec03be320995fe5 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 86fce26c0835f972befd75a530b061effd69ecac..37ae7517e327daff4cc455ca57e524e4dfb4016a 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 5d9500f4fb144bdae5d0199f0b0a218deb504176..e2b9490fab1a27755d239ad6802325a619f73db3 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 c9528cb21daaefcdd5f1218ee13edf40ee44bd99..847425895d456e4433b0d15556d60a66a8f8f70c 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 67f858260d9156ac00951a21aa57353182188133..f162cc091e0090ece943715ae573d0c11821b19b 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 02e48b4acac0a27a4beca0a3011d8d2c1a408117..62761e7ff9b3fd0afc064f9a9b737583261b0610 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 33139363785d6befcb5eb009bc4324df785d32c4..74b3370fa463b652265e00fff80cc8856524d509 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 95e2bf301d71d7f3e9ff2d6545e0e08923d009d5..78818dec32af95c43b610cab1832ea29041c3b36 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 aebf6d1e43f7cdd70eb927fd365a78f122ccea62..bed6714b4fe529a3b81ad8c5253924aa97bf8806 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 b34a0ddd41d650521ca68d96bc79f0645b69caa0..f90ea4a1ae880c69d88cf8b38558312510e66c63 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 2d7c83a7404bc97a959f534bb2344aa3607a9e22..0624b5b747339b851daff5d265701c241e5c1231 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 a28fbcee9598a52cacc08a40694430ad4d2d7104..0dffbf8ad1706d224b933a9a849f3136797e97a3 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\]+\\\]" } } */