mips.exp (mips_option_groups): Add -mframe-header-opt and -mno-frame-header-opt options.
authorSteve Ellcey <sellcey@imgtec.com>
Fri, 9 Oct 2015 17:12:26 +0000 (17:12 +0000)
committerSteve Ellcey <sje@gcc.gnu.org>
Fri, 9 Oct 2015 17:12:26 +0000 (17:12 +0000)
2015-10-09  Steve Ellcey  <sellcey@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.

From-SVN: r228667

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/frame-header-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/mips/frame-header-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/mips/frame-header-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/mips/mips.exp

index 929bfa57a97495f4a187ee9f72974b023ad5b53f..d73a9028f131c51cdccb9621277ca7012c85b4eb 100644 (file)
@@ -1,3 +1,11 @@
+2015-10-09  Steve Ellcey  <sellcey@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.
+
 2015-10-09  Andre Vieira  <andre.simoesdiasvieira@arm.com>
            Hale Wang  <hale.wang@arm.com>
 
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 (file)
index 0000000..971656d
--- /dev/null
@@ -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 (file)
index 0000000..0e86bc9
--- /dev/null
@@ -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 (file)
index 0000000..2a8c515
--- /dev/null
@@ -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);
+}
index 42e7fff0de5073114ec99e8b272c69d887c2d375..0f2d6a21f5df233dded721384275c26ca8dbb362 100644 (file)
@@ -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 } {