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

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

my $WallTimeRE = "Time: ([0-9.]+) seconds \\([0-9.]+ wall clock";

# 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("%7.2f", $Time);
}

sub GCCCBERatio {
  my ($Cols, $Col) = @_;
  my $GCC = $Cols->[$Col-7];
  my $CBE = $Cols->[$Col-6];
  return "n/a" if ($GCC eq "*" or $CBE eq "*");
  return sprintf("%3.2f", $GCC/$CBE) if ($GCC >= 0.1 and $CBE >= 0.1);
  return "-";
}

sub GCCLLCRatio {
  my ($Cols, $Col) = @_;
  my $GCC = $Cols->[$Col-8];
  my $LLC = $Cols->[$Col-6];
  return "n/a" if ($GCC eq "*" or $LLC eq "*");
  return sprintf("%3.2f", $GCC/$LLC) if ($GCC >= 0.1 and $LLC >= 0.1);
  return "-";
}

sub GCCLLC_BETARatio {
  my ($Cols, $Col) = @_;
  my $GCC = $Cols->[$Col-9];
  my $LLC_BETA = $Cols->[$Col-6];
  return "n/a" if ($GCC eq "*" or $LLC_BETA eq "*");
  return sprintf("%3.2f", $GCC/$LLC_BETA) if ($GCC >= 0.1 and $LLC_BETA >= 0.1);
  return "-";
}

sub LLCLLC_BETARatio {   # LLC/LLC-BETA
  my ($Cols, $Col) = @_;
  my $LLC = $Cols->[$Col-8];
  my $LLC_BETA = $Cols->[$Col-7];
  return "n/a" if ($LLC eq "*" or $LLC_BETA eq "*");
  return sprintf("%3.2f", $LLC/$LLC_BETA) if ($LLC >= 0.1 and $LLC_BETA >= 0.1);
  return "-";
}

sub OPTOPT_BETARatio {   # OPT/OPT-BETA
  my ($Cols, $Col) = @_;
  my $LLC = $Cols->[$Col-9];
  my $OPT_BETA = $Cols->[$Col-7];
  return "n/allc" if ($LLC eq "*");
  return "n/aopt" if ($OPT_BETA eq "*");
  return "n/a" if ($LLC eq "*" or $OPT_BETA eq "*");
  return sprintf("%3.2f", $LLC/$OPT_BETA) if ($LLC >= 0.1 and $OPT_BETA >= 0.1);
  return "-";
}

# highlight the RATIO columns with green/red.
$HilightColumns{14} = 1;
$HilightColumns{15} = 1;
$HilightColumns{16} = 1;
$HilightColumns{17} = 1;

# 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
# separators, and closures may be put in for custom processing.
(
# Name
 ["Program"  , '\'([^\']+)\' Program'],
 [],
# Times
 ["GCCAS"    , "TEST-RESULT-compile: .*$WallTimeRE"],
 ["Bytecode" , 'TEST-RESULT-compile: *([0-9]+)'],
 ["LLC compile" , "TEST-RESULT-llc: .*$WallTimeRE"],
 ["LLC-BETA compile" , "TEST-RESULT-llc-beta: .*$WallTimeRE"],
 ["OPT-BETA compile" , "TEST-RESULT-opt-beta: .*$WallTimeRE"],
 ["JIT codegen" , "TEST-RESULT-jit-comptime: .*$WallTimeRE"],
 [],
 ["GCC"      , 'TEST-RESULT-nat-time: program\s*([.0-9m:]+)', \&FormatTime],
 ["CBE"      , 'TEST-RESULT-cbe-time: program\s*([.0-9m:]+)', \&FormatTime],
 ["LLC"      , 'TEST-RESULT-llc-time: program\s*([.0-9m:]+)', \&FormatTime],
 ["LLC-BETA" , 'TEST-RESULT-llc-beta-time: program\s*([.0-9m:]+)',\&FormatTime],
 ["OPT-BETA" , 'TEST-RESULT-opt-beta-time: program\s*([.0-9m:]+)',\&FormatTime],
 ["JIT"      , 'TEST-RESULT-jit-time: program\s*([.0-9m:]+)', \&FormatTime],
 [],
 ["GCC/CBE"  , \&GCCCBERatio],
 ["GCC/LLC"  , \&GCCLLCRatio],
 ["GCC/LLC-BETA"  , \&GCCLLC_BETARatio],
 ["LLC/LLC-BETA"  , \&LLCLLC_BETARatio],
 ["OPT/OPT-BETA"  , \&OPTOPT_BETARatio]
);
