bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] bench.pl -d, --directive.


From: Akim Demaille
Subject: [PATCH] bench.pl -d, --directive.
Date: Sun, 09 Nov 2008 18:57:34 -0000

        * etc/bench.pl.in (@directive): New.
        (&bench_grammar): Use it.
        (&bench_list_grammar): New, to provide access to the "variant"
        grammar.
        Use it.
        (getopts): Support -d, --directive.
---
 ChangeLog       |   10 +++++++++
 etc/bench.pl.in |   60 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 64 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 40127fc..fd5fcb8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2008-11-09  Akim Demaille  <address@hidden>
 
+       bench.pl -d, --directive.
+       * etc/bench.pl.in (@directive): New.
+       (&bench_grammar): Use it.
+       (&bench_list_grammar): New, to provide access to the "variant"
+       grammar.
+       Use it.
+       (getopts): Support -d, --directive.
+
+2008-11-09  Akim Demaille  <address@hidden>
+
        Use inline for small operations.
        * data/lalr1.cc (symbol_base_type, symbol_type)
        (stack_symbol_type): Declare constructor and other operations as
diff --git a/etc/bench.pl.in b/etc/bench.pl.in
index 91c35b9..bdde3ce 100755
--- a/etc/bench.pl.in
+++ b/etc/bench.pl.in
@@ -52,6 +52,10 @@ Test the use of variants instead of union in the C++ parser.
 
 Flags to pass to the C or C++ compiler.  Defaults to -O2.
 
+=item B<-d>, B<--directive>=I<directives>
+
+Add a set of Bison directives to bench against each other.
+
 =item B<-h>, B<--help>
 
 Display this message and exit succesfully.  The more verbose, the more
@@ -104,6 +108,10 @@ The C++ compiler.
 
 Compiler flags (C or C++).
 
+=item C<@directive>
+
+A list of directive sets to measure against each other.
+
 =item C<$iterations>
 
 The number of times the parser is run for a bench.
@@ -120,6 +128,7 @@ my $bison = $ENV{'BISON'} || 
'@abs_top_builddir@/tests/bison';
 my $cc = $ENV{'CC'} || 'gcc';
 my $cxx = $ENV{'CXX'} || 'g++';
 my $cflags = '-O2';
+my @directive = ();
 my $iterations = -1;
 my $verbose = 1;
 
@@ -734,13 +743,31 @@ sub bench_grammar ($%)
   my %bench;
   # For each bench, capture the size.
   my %size;
-  while (my ($name, $directives) = each %test)
+  # If there are no user specified directives, use an empty one.
+  @directive = ('')
+    unless @directive;
+  my %directive;
+  # A counter of directive sets.
+  my $count = 1;
+  for my $d (@directive)
     {
-      generate_grammar ($gram, $name, @$directives);
-      # Compile the executable.
-      compile ($name);
-      $bench{$name} = "system ('./$name');";
-      chop($size{$name} = `wc -c <$name`);
+      $directive{$count} = $d;
+      while (my ($name, $directives) = each %test)
+        {
+          $name = "$count-$name";
+          generate_grammar ($gram, $name, (@$directives, $d));
+          # Compile the executable.
+          compile ($name);
+          $bench{$name} = "system ('./$name');";
+          chop($size{$name} = `wc -c <$name`);
+        }
+      $count++;
+    }
+
+  # Display the directives.
+  for my $d (sort keys %directive)
+    {
+      printf " %2d. %s\n", $d, $directive{$d};
     }
 
   # Run the benches.
@@ -840,6 +867,25 @@ sub bench_fusion_parser ()
     );
 }
 
+######################################################################
+
+=item C<bench_list_parser ()>
+
+Bench the "variant" grammar with debug and no-debug.
+
+=cut
+
+sub bench_list_parser ()
+{
+  bench_grammar
+    ('variant',
+     (
+      "nodbd"  => [''],
+      "debug"  => ['%debug'],
+     )
+    );
+}
+
 ############################################################################
 
 sub help ($)
@@ -860,6 +906,7 @@ sub getopt ()
   use Getopt::Long;
   my %option = (
     "c|cflags=s"     => \$cflags,
+    "d|directive=s"  => address@hidden,
     "h|help"         => sub { help ($verbose) },
     "i|iterations=i" => \$iterations,
     "q|quiet"        => sub { --$verbose },
@@ -882,6 +929,7 @@ for my $b (@ARGV)
 {
   verbose 1, "Running benchmark $b.\n";
   bench_fusion_parser()  if $b eq "fusion";
+  bench_list_parser()    if $b eq "list";
   bench_push_parser()    if $b eq "push";
   bench_variant_parser() if $b eq "variant";
 }
-- 
1.6.0.2.588.g3102





reply via email to

[Prev in Thread] Current Thread [Next in Thread]