aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteve Ellcey <sellcey@imgtec.com>2015-10-09 17:12:26 +0000
committerSteve Ellcey <sje@gcc.gnu.org>2015-10-09 17:12:26 +0000
commit4c926b8a613d7be44154c55a9dcaa6f2b84ea66e (patch)
tree1a9bdb0f68a8a0e11df04a08d4018697379c28ec /gcc
parentd41c8b4c43d7050f05668f23ad4563ed6e9b41d0 (diff)
downloadgcc-4c926b8a613d7be44154c55a9dcaa6f2b84ea66e.zip
gcc-4c926b8a613d7be44154c55a9dcaa6f2b84ea66e.tar.gz
gcc-4c926b8a613d7be44154c55a9dcaa6f2b84ea66e.tar.bz2
mips.exp (mips_option_groups): Add -mframe-header-opt and -mno-frame-header-opt options.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.target/mips/frame-header-1.c21
-rw-r--r--gcc/testsuite/gcc.target/mips/frame-header-2.c21
-rw-r--r--gcc/testsuite/gcc.target/mips/frame-header-3.c22
-rw-r--r--gcc/testsuite/gcc.target/mips/mips.exp1
5 files changed, 73 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 929bfa5..d73a902 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
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 } {