Commit af3b4514 by Ramana Radhakrishnan Committed by Ramana Radhakrishnan

[Patch AArch64] Turn on frame pointer / partial fix for PR84521

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
parent cc9b241b
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>
......
......@@ -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. */
......
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
......
/* { 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 ();
......
......@@ -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} } } */
......@@ -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"
......
......@@ -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\]+\\\]" } } */
......@@ -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"
......
......@@ -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 } } */
......@@ -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"
......
......@@ -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\\\]" } } */
......@@ -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\]+\\\]" } } */
......@@ -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\]+\\\]" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment