##=== TEST.poolalloc.report - Report description for poolalloc -*- perl -*-===##
#
# This file defines a report to be generated for the pool allocator tests.
#
##===----------------------------------------------------------------------===##

# Sort by program name
$SortCol = 0;
$TrimRepeatedPrefix = 1;

sub Ratio {
  my ($Cols, $Col) = @_;
  if ($Cols->[$Col-1] ne "*" and $Cols->[5] ne "*" and
      $Cols->[$Col-1] != "0") {
    return sprintf "%1.3f", $Cols->[5]/$Cols->[$Col-1];
  } else {
    return "n/a";
  }
}

sub Sum {
  my ($Cols, $Col) = @_;
  if ($Cols->[$Col-1] ne "*" and $Cols->[$Col-2] ne "*") {
    return sprintf "%1.3f", $Cols->[$Col-2]+$Cols->[$Col-1];
  } else {
    return "n/a";
  }
}


sub FormatTime {
  my $Time = shift;
  if ($Time =~ m/([0-9]+)[m:]([0-9.]+)/) {
    $Time = sprintf("%7.3f", $1*60.0+$2);
  }
  return $Time;
}

@LatexColumns = (1, 5, 8, 12, 9, 13, 14, 15, 2, 16);

my $OLDEN     = 'MultiSource/Benchmarks/Olden';
my $FREEBENCH = 'MultiSource/Benchmarks/FreeBench';
my $PTRDIST   = 'MultiSource/Benchmarks/Ptrdist';

@LatexRowMapOrder = (
                     "bh/bh"           => 'bh',
                     "bisort/bisort"   => 'bisort',
                     "em3d/em3d"       => 'em3d',
                     "health/health"   => 'health',
                     "mst/mst"         => 'mst',
                     "perimeter/perimeter" => 'perimeter',
                     "power/power"     => 'power',
                     "treeadd/treeadd" => 'treeadd',
                     "tsp/tsp"         => 'tsp',
                     "voronoi/voronoi" => 'voronoi',
                     '-' => '-',
                     "anagram/anagram"       => 'anagram',
                     "bc/bc"                 => 'bc',
                     "ft/ft"                 => 'ft',
                     "ks/ks"                 => 'ks',
                     "yacr2/yacr2"           => 'yacr2',
                     '-' => '-',
                     '164.gzip/164.gzip' => '164.gzip',
                     '175.vpr/175.vpr' => '175.vpr',
                     '181.mcf/181.mcf' => '181.mcf',
                     '186.crafty/186.crafty' => '186.crafty',
                     '197.parser/197.parser' => '197.parser',
                     '197.parser.hacked/197.parser.hacked' => '197.parser(b)',
                     '255.vortex/255.vortex' => '255.vortex',
                     '256.bzip2/256.bzip2' => '256.bzip2',
                     '300.twolf/300.twolf' => '300.twolf',
                     '-' => '-',
                     "analyzer"     => 'analyzer',
                     "llu"          => 'llu-bench',
                  );


# These are the columns for the report.  The first entry is the header for the
# column, the second is the regex to use to match the value.  Empty list create
# seperators, and closures may be put in for custom processing.
(
# Name
 ["Name:" , '\'([^\']+)\' Program'],
 ["LOC"   , 'LOC:\s*([0-9]+)'],
 [],
# Times
 ["NormalUser",    'CBE-RUN-TIME-NORMAL-USER: user\s*([.0-9m:]+)',    \&FormatTime],
 ["NormalSys",    'CBE-RUN-TIME-NORMAL-SYS: sys\s*([.0-9m:]+)',    \&FormatTime],
 ["NormalSum",     \&Sum],

 ["AllNodesUser", 'CBE-RUN-TIME-ALLNODES-USER: user\s*([.0-9m:]+)', \&FormatTime],
 ["AllNodesSys", 'CBE-RUN-TIME-ALLNODES-SYS: sys\s*([.0-9m:]+)', \&FormatTime],
 ["AllNodesSum",     \&Sum],
 ["AN Speedup", \&Ratio],

 ["PoolAllocUser", 'CBE-RUN-TIME-POOLALLOC-USER: user\s*([.0-9m:]+)', \&FormatTime],
 ["PoolAllocSys", 'CBE-RUN-TIME-POOLALLOC-SYS: sys\s*([.0-9m:]+)', \&FormatTime],
 ["PoolAllocSum",     \&Sum],
 ["PA Speedup", \&Ratio],
 ["AP NumPools",          '([0-9]+).*Number of pools allocated'],
 ["AP Typesafe",          '([0-9]+).*Number of typesafe pools'],
 ["NumArgs",              '([0-9]+).*Number of function arguments added'],
# ["Nonprofit",            '([0-9]+).*Number of DSNodes not profitable'],
 []
);

