From: Steve Ellcey Date: Fri, 9 Oct 2015 17:12:26 +0000 (+0000) Subject: mips.exp (mips_option_groups): Add -mframe-header-opt and -mno-frame-header-opt options. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4c926b8a613d7be44154c55a9dcaa6f2b84ea66e;p=gcc.git mips.exp (mips_option_groups): Add -mframe-header-opt and -mno-frame-header-opt options. 2015-10-09 Steve Ellcey * gcc.target/mips/mips.exp (mips_option_groups): Add -mframe-header-opt and -mno-frame-header-opt options. * gcc.target/mips/frame-header-1.c: New file. * gcc.target/mips/frame-header-2.c: New file. * gcc.target/mips/frame-header-3.c: New file. From-SVN: r228667 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 929bfa57a97..d73a9028f13 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2015-10-09 Steve Ellcey + + * gcc.target/mips/mips.exp (mips_option_groups): Add -mframe-header-opt + and -mno-frame-header-opt options. + * gcc.target/mips/frame-header-1.c: New file. + * gcc.target/mips/frame-header-2.c: New file. + * gcc.target/mips/frame-header-3.c: New file. + 2015-10-09 Andre Vieira Hale Wang diff --git a/gcc/testsuite/gcc.target/mips/frame-header-1.c b/gcc/testsuite/gcc.target/mips/frame-header-1.c new file mode 100644 index 00000000000..971656ddaa3 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/frame-header-1.c @@ -0,0 +1,21 @@ +/* Verify that we do not optimize away the frame header in foo when using + -mno-frame-header-opt by checking the stack pointer increment done in + that function. Without the optimization foo should increment the stack + by 24 bytes, with the optimization it would only be 8 bytes. */ + +/* { dg-do compile } */ +/* { dg-options "-mno-frame-header-opt -mabi=32 -mno-abicalls" } */ +/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ +/* { dg-final { scan-assembler "\taddiu\t\\\$sp,\\\$sp,-24" } } */ + +NOMIPS16 void __attribute__((noinline)) +bar (int* a) +{ + *a = 1; +} + +NOMIPS16 void +foo (int a) +{ + bar (&a); +} diff --git a/gcc/testsuite/gcc.target/mips/frame-header-2.c b/gcc/testsuite/gcc.target/mips/frame-header-2.c new file mode 100644 index 00000000000..0e86bc91994 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/frame-header-2.c @@ -0,0 +1,21 @@ +/* Verify that we do optimize away the frame header in foo when using + -mframe-header-opt by checking the stack pointer increment done in + that function. Without the optimization foo should increment the + stack by 24 bytes, with the optimization it would only be 8 bytes. */ + +/* { dg-do compile } */ +/* { dg-options "-mframe-header-opt -mabi=32 -mno-abicalls" } */ +/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ +/* { dg-final { scan-assembler "\taddiu\t\\\$sp,\\\$sp,-8" } } */ + +NOMIPS16 void __attribute__((noinline)) +bar (int* a) +{ + *a = 1; +} + +NOMIPS16 void +foo (int a) +{ + bar (&a); +} diff --git a/gcc/testsuite/gcc.target/mips/frame-header-3.c b/gcc/testsuite/gcc.target/mips/frame-header-3.c new file mode 100644 index 00000000000..2a8c5156368 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/frame-header-3.c @@ -0,0 +1,22 @@ +/* Verify that we do not optimize away the frame header in foo when using + -mframe-header-opt but are calling a weak function that may be overridden + by a different function that does need the frame header. Without the + optimization foo should increment the stack by 24 bytes, with the + optimization it would only be 8 bytes. */ + +/* { dg-do compile } */ +/* { dg-options "-mframe-header-opt -mabi=32 -mno-abicalls" } */ +/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ +/* { dg-final { scan-assembler "\taddiu\t\\\$sp,\\\$sp,-24" } } */ + +NOMIPS16 void __attribute__((noinline, weak)) +bar (int* a) +{ + *a = 1; +} + +void +NOMIPS16 foo (int a) +{ + bar (&a); +} diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp index 42e7fff0de5..0f2d6a21f5d 100644 --- a/gcc/testsuite/gcc.target/mips/mips.exp +++ b/gcc/testsuite/gcc.target/mips/mips.exp @@ -256,6 +256,7 @@ set mips_option_groups { maddps "HAS_MADDPS" lsa "(|!)HAS_LSA" section_start "-Wl,--section-start=.*" + frame-header "-mframe-header-opt|-mno-frame-header-opt" } for { set option 0 } { $option < 32 } { incr option } {