On Tue, 2015-10-06 at 12:02 +0000, Moore, Catherine wrote: > > Moore, Catherine <catherine_mo...@mentor.com> writes: > > > The patch itself looks good, but the tests that you added need a little > > > more > > work.
Here is a new patch for just the tests. I added NOMIPS16 and the -mabi=32 flag as Matthew suggested and I also added -mno-abicalls. Without the -mno-abicalls the MIPS linux compiler defaulted to -mabicalls and allocated 32 bytes without the optimization and the MIPS elf compiler defaulted to -mno-abicalls and allocated 24 bytes without the optimization. This synchronizes them so they both allocate 24 bytes without the optimization and 8 bytes with it. Everything should pass now, it passed for me using mips-mti-linux-gnu and mips-mti-elf. Steve Ellcey sell...@imgtec.com 2015-10-06 Steve Ellcey <sell...@imgtec.com> * 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. 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 0000000..971656d --- /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 0000000..0e86bc9 --- /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 0000000..2a8c515 --- /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 42e7fff..0f2d6a2 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 } {