Patchwork [SH] PR 34777 - Add test case

login
register
mail settings
Submitter Oleg Endo
Date Oct. 14, 2012, 6:19 p.m.
Message ID <1350238758.2348.13.camel@yam-132-YW-E178-FTW>
Download mbox | patch
Permalink /patch/191374/
State New
Headers show

Comments

Oleg Endo - Oct. 14, 2012, 6:19 p.m.
On Wed, 2012-10-10 at 07:46 +0900, Kaz Kojima wrote:
> Oleg Endo <oleg.endo@t-online.de> wrote:
> > Uhm, yes, I forgot to add the -fschedule-insns and -mprefergot options.
> > Regarding the -Os option, I think it's better to test this one at
> > multiple optimization levels, just in case.  I've looked through
> > gcc.c-torture/compile and found some target specific test cases there,
> > so I thought it would be OK to do the same :)
> > Some targets also have their own torture subdir.  If it's better, I
> > could also create gcc.target/sh/torture.
> 
> Maybe.  For this specific test, I thought that "-Os -fschedule-insns
> -fPIC -mprefergot" would be enough because empirically these options
> will give high R0 register pressure which had caused that PR.
> 

Sorry for the delayed reply.
The attached patch adds gcc.target/sh/torture and puts the test there.
The torture subdir might be also useful in the future.
Tested on rev 192417 with
make -k check-gcc RUNTESTFLAGS="--target_board=sh-sim\{-m2/-ml}"

OK?

Cheers,
Oleg

testsuite/ChangeLog:

	PR target/34777
	* gcc.target/sh/torture/sh-torture.exp: New.
	* gcc.target/sh/torture/pr34777.c: New.
Kaz Kojima - Oct. 15, 2012, 11:32 a.m.
Oleg Endo <oleg.endo@t-online.de> wrote:
> The attached patch adds gcc.target/sh/torture and puts the test there.
> The torture subdir might be also useful in the future.
> Tested on rev 192417 with
> make -k check-gcc RUNTESTFLAGS="--target_board=sh-sim\{-m2/-ml}"
> 
> OK?

OK.

Regards,
	kaz

Patch

Index: gcc/testsuite/gcc.target/sh/torture/pr34777.c
===================================================================
--- gcc/testsuite/gcc.target/sh/torture/pr34777.c	(revision 0)
+++ gcc/testsuite/gcc.target/sh/torture/pr34777.c	(revision 0)
@@ -0,0 +1,30 @@ 
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-additional-options "-fschedule-insns -fPIC -mprefergot" }  */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } }  */
+
+static __inline __attribute__ ((__always_inline__)) void *
+_dl_mmap (void * start, int length, int prot, int flags, int fd,
+	  int offset)
+{
+  register long __sc3 __asm__ ("r3") = 90;
+  register long __sc4 __asm__ ("r4") = (long) start;
+  register long __sc5 __asm__ ("r5") = (long) length;
+  register long __sc6 __asm__ ("r6") = (long) prot;
+  register long __sc7 __asm__ ("r7") = (long) flags;
+  register long __sc0 __asm__ ("r0") = (long) fd;
+  register long __sc1 __asm__ ("r1") = (long) offset;
+  __asm__ __volatile__ ("trapa	%1"
+			: "=z" (__sc0)
+			: "i" (0x10 + 6), "0" (__sc0), "r" (__sc4),
+			  "r" (__sc5), "r" (__sc6), "r" (__sc7),
+			  "r" (__sc3), "r" (__sc1)
+			: "memory" );
+}
+
+extern int _dl_pagesize;
+void
+_dl_dprintf(int fd, const char *fmt, ...)
+{
+  static char *buf;
+  buf = _dl_mmap ((void *) 0, _dl_pagesize, 0x1 | 0x2, 0x02 | 0x20, -1, 0);
+}
Index: gcc/testsuite/gcc.target/sh/torture/sh-torture.exp
===================================================================
--- gcc/testsuite/gcc.target/sh/torture/sh-torture.exp	(revision 0)
+++ gcc/testsuite/gcc.target/sh/torture/sh-torture.exp	(revision 0)
@@ -0,0 +1,41 @@ 
+#   Copyright (C) 2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `gcc-dg.exp' driver, looping over
+# optimization options.
+
+# Exit immediately if this isn't a SH target.
+if { ![istarget sh*-*-*] } then {
+  return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# If a testcase doesn't have special options, use these.
+global DEFAULT_CFLAGS
+if ![info exists DEFAULT_CFLAGS] then {
+    set DEFAULT_CFLAGS " -ansi -pedantic-errors"
+}
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] $DEFAULT_CFLAGS
+
+# All done.
+dg-finish