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

$SortNumeric = 1;               # Sort numerically, not textually.
$TrimAllDirectories = 1;        # Trim off benchmark directories.
$SortCol = 2;                   # Sort by #MemInstrs
$SortReverse = 1;               # Sort in descending order


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

sub TypeSafeRatio {
  my ($Cols, $Col) = @_;
  my $TS = $Cols->[$Col-2];
  my $NTS = $Cols->[$Col-1];
  $TS = 0 if ($TS eq "*");
  $NTS = 0 if ($NTS eq "*");

  if ($TS + $NTS != 0) {
    return sprintf("%4.1f%%", 100*$TS/($TS+$NTS+0.0));
  } 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;
}

# For latex output, limit benchmarks and rename as appropriate
@LatexRowMapOrder = (
            '-' => '-',

            '181.mcf'       => '181.mcf',
            '256.bzip2'     => '256.bzip2',
            '164.gzip'      => '164.gzip',
            '175.vpr'       => '175.vpr',
            '197.parser'    => '197.parser',
            '186.crafty'    => '186.crafty',
            '300.twolf'     => '300.twolf',
            '255.vortex'    => '255.vortex',
            '254.gap'       => '254.gap',
            '252.eon'       => '252.eon',
            '253.perlbmk'   => '253.perlbmk',
            '176.gcc'       => '176.gcc',
            '-' => '-',
            '179.art'       => '179.art',
            '183.equake'    => '183.equake',
            '171.swim'      => '171.swim',
            '172.mgrid'     => '172.mgrid',
            '168.wupwise'   => '168.wupwise',
            '173.applu'     => '173.applu',
            '188.ammp'      => '188.ammp',
            '177.mesa'      => '177.mesa',
            '-' => '-',
            '129.compress'  => '129.compress',
            '130.li'        => '130.li',
            '124.m88ksim'   => '124.m88ksim',
            '132.ijpeg'     => '132.ijpeg',
            '099.go'        => '099.go',
            '134.perl'      => '134.perl',
            '147.vortex'    => '147.vortex',
            '126.gcc'       => '126.gcc',
            '-' => '-',
            '102.swim'      => '102.swim',
            '101.tomcatv'   => '101.tomcatv',
            '107.mgrid'     => '107.mgrid',
            '145.fpppp'     => '145.fpppp',
            '104.hydro2d'   => '104.hydro2d',
            '110.applu'     => '110.applu',
            '103.su2cor'    => '103.su2cor',
            '146.wave5'     => '146.wave5',
            '-' => '-',
            'fpgrowth' => 'fpgrowth',
            'bsim'     => 'boxed-sim',
            'namd'     => 'NAMD',
            'povray'   => 'povray31',
           );

@LxxatexColumns = (1, 2, 19,    # LOC, #MemInstrs, MaxSCC
                 15,16,       # Total/Collapsed nodes
                 17, 18);     # Max Size, GG Size

@LatexColumns = (2, 21, 22, 23);  # Type safety numbers


# Specify how to format columns nicely for printing...
%LatexColumnFormat = (
#                      11 => \&FormatSize,
#                      12 => \&FormatSize,
                      16 => \&NoStar,
                      15 => \&NoCallNodes,
                      18 => \&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.

my $USERSYSTTIME = '([0-9.]+)[ 0-9.]+\([^)]+\)[ 0-9.]+\([^)]+\) +';
(
# Name
            ["Name:" , '\'([^\']+)\' Program'],
            ["LOC:"  , 'LOC: *([0-9]+)'],
            ["MemInsts", '([0-9]+).*Number of memory instructions'],
            [],
# Misc stuff
            ["NumNodes", "TOTALNODES: *([0-9]+)"],
            ["NumFold",  "FOLDEDNODES: *([0-9]+)"],
            [],
            ["TypeSafeO", "ACCESSES TYPED_O: *([0-9]+)"],
            ["NonTypeO",  "ACCESSES UNTYPED_O: *([0-9]+)"],
            ["TSO%" , sub { return TypeSafeRatio(@_); }],
            [],
            ["TypeSafe", "ACCESSES TYPED: *([0-9]+)"],
            ["NonType",  "ACCESSES UNTYPED: *([0-9]+)"],
            ["TS%" , sub { return TypeSafeRatio(@_); }],
            [],
            ["Ign", "IGN: *([0-9]+)"],
            ["GEP-Ign", "GEPI: *([0-9]+)"],
            ["Type0", "ACCESSES TYPED0: *([0-9]+)"],
            ["Type1", "ACCESSES TYPED1: *([0-9]+)"],
            ["Type2", "ACCESSES TYPED2: *([0-9]+)"],
            ["Type3", "ACCESSES TYPED3: *([0-9]+)"],
            ["Type4", "ACCESSES TYPED4: *([0-9]+)"],
            ["I", "ACCESSES I: *([0-9]+)"],
            ["E", "ACCESSES E: *([0-9]+)"],
            ["F", "ACCESSES F: *([0-9]+)"],
            ["U", "ACCESSES U: *([0-9]+)"],
            ["I2P", "ACCESSES I2P: *([0-9]+)"],
# Nodes Folded
            [],
            ["GEPFUNC", "GEP_CALLS: *([0-9]+)"],
            ["ARGSMPL", "ARG_SMPL: *([0-9]+)"],
            ["FUNCSPEC", "CLONED_FUNCSPEC: *([0-9]+)"],
            ["INDCLONE", "CLONED_INDCLONE: *([0-9]+)"],
            ["I2PB", "I2PB: *([0-9]+)"],
            ["I2PS", "I2PS: *([0-9]+)"],
            ["EV", "EV: *([0-9]+)"],
            ["AL", "ALLOC: *([0-9]+)"],
            ["DE", "DEALLOC: *([0-9]+)"],
            ["CAST", "CAST: *([0-9]+)"],
            ["Calls", "INDCALLS: *([0-9]+)"],
            [],
            ["DTotal", "DTOTAL: *([0-9]+)"],
            ["DSafe", "DSAFE: *([0-9]+)"],
            ["DTS%" , sub { return Ratio(@_); }],
            [],
            ["DTotalO", "DTOTALO: *([0-9]+)"],
            ["DSafeO", "DSAFEO: *([0-9]+)"],
            ["DTS%" , sub { return Ratio(@_); }],
            #[],
            #["LoadChk", "LCHK: *([0-9]+)"],
            #["StoreChk", "SCHK: *([0-9]+)"],
            [],
            ["OptTime", "OPT-RUN_TIME: program *([.0-9]+)"],
            ["TcTime", "TC-RUN_TIME: program *([.0-9]+)"],
            ["TcdTime", "TCD-RUN_TIME: program *([.0-9]+)"],
            ["TcoTime", "TCO-RUN_TIME: program *([.0-9]+)"],
            ["TcooTime", "TCOO-RUN_TIME: program *([.0-9]+)"],
            ["Tcoo1Time", "TCOO1-RUN_TIME: program *([.0-9]+)"],
           );
