##=== TEST.dsgraph.report - Report description for dsgraph -----*- perl -*-===##
#
# This file defines a report to be generated for the dsgraph test.
#
##===----------------------------------------------------------------------===##

# Sort numerically, not textually...
$SortNumeric = 1;
$TrimRepeatedPrefix = 1;


# Helper function
sub Ratio {
  my ($Cols, $Col) = @_;
  if ($Cols->[$Col-2] ne "*" and
      $Cols->[$Col-2] != "0") {
    return $Cols->[$Col-1]/$Cols->[$Col-2];
  } else {
    return "n/a";
  }
}

sub FormatSize {
  my $Size = shift;
  if ($Size > 10*1024*1024) {
    return (int $Size*10 / (1024*1024))/10 . "MB";
  } elsif ($Size > 10*1024) {
    return (int $Size / 1024);
  } else {
    return $Size . "B";
  }
}

sub NoStar {
  return "0" if ($_[0] eq '*');
  return $_[0];
}

sub NoCallNodes {
  $_[0] =~ m/([0-9]+)\+/;
  return $1;
}

# Sort by total analyze time
$SortCol = 7;

# Sort in descending order
$SortReverse = 1;

# For latex output, limit benchmarks and rename as appropriate
@LatexRowMapOrder = (
            'MultiSource/Olden/treeadd/treeadd'      => 'Olden-treeadd',
            'MultiSource/Olden/bisort/bisort'        => 'Olden-bisort',
            'MultiSource/Olden/mst/mst'              => 'Olden-mst',
            'MultiSource/Olden/perimeter/perimeter'  => 'Olden-perimeter',
            'MultiSource/Olden/health/health'        => 'Olden-health',
            'MultiSource/Olden/tsp/tsp'              => 'Olden-tsp',
            'MultiSource/Olden/power/power'          => 'Olden-power',
            'MultiSource/Olden/em3d/em3d'            => 'Olden-em3d',
            'MultiSource/Olden/voronoi/voronoi'      => 'Olden-voronoi',
            'MultiSource/Olden/bh/bh'                => 'Olden-bh',
            '-' => '-',
            'MultiSource/Ptrdist/anagram/anagram'    => 'ptrdist-anagram',
            'MultiSource/Ptrdist/ks/ks'              => 'ptrdist-ks',
            'MultiSource/Ptrdist/ft/ft'              => 'ptrdist-ft',
            'MultiSource/Ptrdist/yacr2/yacr2'        => 'ptrdist-yacr2',
            'MultiSource/Ptrdist/bc/bc'              => 'ptrdist-bc',
            '-' => '-',
            'External/SPEC/CFP2000/179.art/179.art'        => '179.art',
            'External/SPEC/CFP2000/183.equake/183.equake'  => '183.equake',
            'External/SPEC/CINT2000/181.mcf/181.mcf'       => '181.mcf',
            'External/SPEC/CINT2000/256.bzip2/256.bzip2'   => '256.bzip2',
            'External/SPEC/CINT2000/164.gzip/164.gzip'     => '164.gzip',
            'External/SPEC/CINT2000/197.parser/197.parser' => '197.parser',
            'External/SPEC/CFP2000/188.ammp/188.ammp'      => '188.ammp',
            'External/SPEC/CINT2000/175.vpr/175.vpr'       => '175.vpr',
            'External/SPEC/CINT2000/300.twolf/300.twolf'   => '300.twolf',
            'External/SPEC/CINT2000/186.crafty/186.crafty' => '186.crafty',
            'External/SPEC/CINT2000/255.vortex/255.vortex' => '255.vortex',
            'External/SPEC/CINT2000/254.gap/254.gap'       => '254.gap',
            '-' => '-',
            'MultiSource/sgefa/sgefa'         => 'sgefa',
            'MultiSource/sim/sim'             => 'sim',
            'MultiSource/Burg/burg'           => 'burg',
            'MultiSource/gnuchess/gnuchess'   => 'gnuchess',
            'MultiSource/larn/larn'           => 'larn',
            'MultiSource/flex/flex'           => 'flex',
            'MultiSource/moria/moria'         => 'moria',
            'MultiSource/povray31/povray31'   => 'povray31'
           );

@LatexColumns = (1, 27, 19,    # LOC, #MemInstrs, MaxSCC
                 4, 5, 6, 7,   # Execution times
                 11,           # Memory BU
                 12,           # Memory TD
                 16, 17,       # Total, Max Nodes
                 15);          # NumFolded

# Specify how to format columns nicely for printing...
%LatexColumnFormat = (
                      11 => \&FormatSize,
                      12 => \&FormatSize,
                      15 => \&NoStar,
                      16 => \&NoCallNodes
                     );

@Graphs = (["scatter", "timeVmem.txt", 27, 7],
           ["scatter", "timeVloc.txt", 1, 7]);


# 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: *([0-9]+)'],
            [],
# Times
            ["Anlyz:", '([0-9.]+) \([^)]+\)[ 0-9]+TOTAL'],
            ["LocTm:", '([0-9.]+) \([^)]+\)[ 0-9]+Local'],
            ["BUTim:", '([0-9.]+) \([^)]+\)[ 0-9]+Bottom'],
            ["TDTim:", '([0-9.]+) \([^)]+\)[ 0-9]+Top'],
            ["SumTm:", sub { return SumCols(@_, 3); }],
            ["SteTm:", '([0-9.]+) \([^)]+\)[ 0-9]+Steensgaard'],
            [],
# Sizes
            ["LcSize:" , '([0-9]+)  Local'],
            ["BUSize:" , '([0-9]+)  Bottom-up'],
            ["TDSize:" , '([0-9]+)  Top-down'],
            ["BUTDSz:" , sub { return SumCols(@_, 2); }],
            [],
# Misc stuff
            ["NumFold" , '([0-9]+).*Number of folded nodes '],
            ["NumNodes", 'Graphs contain \\[([0-9+]+)\\] nodes total'],
            ["MaxSz"   , '([0-9]+).*Maximum graph size'],
            ["GlobGr"  , '\\.GlobalsGraph\\.dot\'... \\[([0-9+]+)\\]'],
            ["MaxSCC"  , '([0-9]+).*Maximum SCC Size in Call Graph'],
            [],
            ["Loads"   , '([0-9]+).*Number of Load insts'],
            ["Store"   , '([0-9]+).*Number of Store insts'],
            ["Calls"   , '([0-9]+).*Number of Call insts'],
            ["Allca"   , '([0-9]+).*Number of Alloca insts'],
            ["Mallc"   , '([0-9]+).*Number of Malloc insts'],
            ["GEP"     , '([0-9]+).*Number of GetElementPtr insts'],
            ["Sum"   , sub { return SumCols(@_, 6); }],
            [],
            ["num/ind" , '([0-9]+).*number of indirect call sites'],
            ["indcallee",'([0-9]+).*number of callee functions at'],
            ["ratio"   , \&Ratio],  # indcallee / num/ind
            []
           );
