##=== TEST.optzn.report - Report description for optzn ---------*- perl -*-===##
#
# This file defines a report to be generated for the pool allocator 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->[4] ne "*" and
      $Cols->[4] != "0") {
    return sprintf "%7.2f", 100*$Cols->[$Col-1]/$Cols->[4];
  } 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 = (
                     "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'],
 [],
# Times
 ["BasePA",         'CBE-RUN-TIME-BASEPA: program\s*([.0-9m:]+)', \&FormatTime],
 ["NoSelectivePA",  'CBE-RUN-TIME-SELECTIVEPA: program\s*([.0-9m:]+)', \&FormatTime],
 ["NoFreeElim",     'CBE-RUN-TIME-FREEELIM: program\s*([.0-9m:]+)', \&FormatTime],
 ["NoBumpPtr",      'CBE-RUN-TIME-BUMPPTR: program\s*([.0-9m:]+)', \&FormatTime],
 ["NoAlign",        'CBE-RUN-TIME-ALIGN: program\s*([.0-9m:]+)', \&FormatTime],
 []
);

