##=== 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;

# 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
            []
           );
