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

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

# FormatTime - Convert a time from 1m23.45 into 83.45
sub FormatTime {
  my $Time = shift;
  if ($Time =~ m/([0-9]+)[m:]([0-9.]+)/) {
    return sprintf("%7.3f", $1*60.0+$2);
  }

  return sprintf("%6.2f", $Time);
}


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

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

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

@LatexRowMapOrder = (
                     '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',
                     '-' => '-',
                     "anagram/anagram"       => 'anagram',
                     "bc/bc"                 => 'bc',
                     "ft/ft"                 => 'ft',
                     "ks/ks"                 => 'ks',
                     "yacr2/yacr2"           => 'yacr2',
                     '-' => '-',
                     "analyzer"     => 'analyzer',
                     "neural"       => 'neural',
                     "pcompress2"   => 'pcompress2',
                     "piff2"        => 'piff2',
                     '-' => '-',
                     "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',
                     '-' => '-',
                     "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
 ["GCC",            'GCC-RUN-TIME: program\s*([.0-9m:]+)', \&FormatTime],
 ["LLVMOptTime",      'RUN-TIME-LLVMOPT: program\s*([.0-9m:]+)', \&FormatTime],
 ["LLVMOpt run%",        \&RuntimePercent],
 [],
 ["DSA Time",        'RUN-TIME-DSAAOPT: program\s*([.0-9m:]+)', \&FormatTime],
 ["DSA run%",        \&RuntimePercent],
# [],
# ["NoAlias",        'no alias responses[^0-9]*([0-9]*\.[0-9]*)'],
# ["MayAlias",        'may alias responses[^0-9]*([0-9]*\.[0-9]*)'],
# ["MustAlias",        'must alias responses[^0-9]*([0-9]*\.[0-9]*)'],
#["NumPools",       '([0-9]+).*Number of pools allocated'],
#["Typesafe",       '([0-9]+).*Number of typesafe pools'],
#["BumpPtr",        '([0-9]+).*Number of bump pointer pools'],
#["PFE",            '([0-9]+).*Number of poolfree.s elided'],
#["NumArgs",        '([0-9]+).*Number of function arguments added'],
#["MaxArgs",        '([0-9]+).*Maximum function arguments added'],
#["Nonprofit",      '([0-9]+).*Number of DSNodes not profitable'],
 []
);

