Add command-line option-parsing to the testcases, so that we can
manipulate them without needing a recompile (e.g. varying
optimization levels etc).
This uses getopt_long, which is a GNU extension to libc. Is that
acceptable?
Implement a --num-iterations option, to override the default of 5.
When running tests under valgrind, pass in "--num-iterations=1",
speeding up the tests by a factor of 5.
gcc/testsuite/ChangeLog:
* jit.dg/harness.h (num_iterations): New variable.
(parse_options): New function.
(main): Use "num_iterations", rather than hardcoding 5.
* jit.dg/jit.exp (fixed_host_execute): When running tests under
valgrind, pass in "--num-iterations=1".
---
gcc/testsuite/jit.dg/harness.h | 46 +++++++++++++++++++++++++++++++++++++++---
gcc/testsuite/jit.dg/jit.exp | 5 +++++
2 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/gcc/testsuite/jit.dg/harness.h b/gcc/testsuite/jit.dg/harness.h
index bff64de..a30b66e 100644
--- a/gcc/testsuite/jit.dg/harness.h
+++ b/gcc/testsuite/jit.dg/harness.h
@@ -247,17 +247,57 @@ extract_progname (const char *argv0)
}
#ifndef TEST_PROVIDES_MAIN
+
+/* Option parsing, for varying how we run the built testcases
+ (e.g. when poking at things in the debugger). */
+
+#include <getopt.h>
+int num_iterations = 5;
+
+static void
+parse_options (int argc, char **argv)
+{
+ while (1)
+ {
+ static struct option long_options[] =
+ {
+ {"num-iterations", required_argument, 0, 'i'},
+ {0, 0, 0, 0}
+ };
+
+ int option_index = 0;
+ /* getopt_long is a GNU extension to libc. */
+ int c = getopt_long (argc, argv, "i:",
+ long_options, &option_index);
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case 'i':
+ num_iterations = atoi (optarg);
+ break;
+ default:
+ fprintf (stderr, "Usage: %s [--num-iterations NUM]\n",
+ argv[0]);
+ exit(EXIT_FAILURE);
+ }
+ }
+}
+
int
main (int argc, char **argv)
{
int i;
- for (i = 1; i <= 5; i++)
+ parse_options (argc, argv);
+
+ for (i = 1; i <= num_iterations; i++)
{
snprintf (test, sizeof (test),
"%s iteration %d of %d",
- extract_progname (argv[0]),
- i, 5);
+ extract_progname (argv[0]),
+ i, num_iterations);
//printf ("ITERATION %d\n", i);
test_jit (argv[0], NULL);
diff --git a/gcc/testsuite/jit.dg/jit.exp b/gcc/testsuite/jit.dg/jit.exp
index a37ccc7..438aabd 100644
--- a/gcc/testsuite/jit.dg/jit.exp
+++ b/gcc/testsuite/jit.dg/jit.exp
@@ -157,6 +157,11 @@ proc fixed_host_execute {args} {
set valgrind_params {"valgrind"}
lappend valgrind_params "--leak-check=full"
lappend valgrind_params "--log-file=${valgrind_logfile}"
+ # When running under valgrind, speed things up by only running one
+ # in-process iteration of the testcase, rather than the default of 5.
+ # Only testcases that use the "main" from harness.h
+ # (#ifndef TEST_PROVIDES_MAIN) will respond to this option.
+ lappend params "--num-iterations=1"
} else {
set valgrind_params {}
}
--
1.8.5.3