##=== 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 = "[A-Za-z0-9.: ]+\\(([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.]+)/) {
    $Time = sprintf("%7.3f", $1*60.0+$2);
  }
  return $Time;
}

sub GCCCBERatio {
  my ($Cols, $Col) = @_;
  my $GCC = $Cols->[$Col-6];
  my $CBE = $Cols->[$Col-5];
  if ($GCC ne "*" and $CBE ne "*" and $CBE != "0") {
    return sprintf("%3.2f", $GCC/$CBE);
  } else {
    return "n/a";
  }
}

sub GCCLLCRatio {
  my ($Cols, $Col) = @_;
  my $GCC = $Cols->[$Col-7];
  my $LLC = $Cols->[$Col-5];
  if ($GCC ne "*" and $LLC ne "*" and $LLC != "0") {
    return sprintf("%3.2f", $GCC/$LLC);
  } else {
    return "n/a";
  }
}

sub GCCLLC_LSRatio {
  my ($Cols, $Col) = @_;
  my $GCC = $Cols->[$Col-8];
  my $LLC_LS = $Cols->[$Col-5];
  if ($GCC ne "*" and $LLC_LS ne "*" and $LLC_LS != "0") {
    return sprintf("%3.2f", $GCC/$LLC_LS);
  } else {
    return "n/a";
  }
}

# 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]+)'],
 ["Instrs"   , 'TEST-RESULT-compile: *([0-9]+).*Number of inst'],
 ["LLC<br>compile" , "TEST-RESULT-llc: $WallTimeRE"],
 ["LLC-LS<br>compile" , "TEST-RESULT-llc-ls: $WallTimeRE"],
 ["JIT<br>codegen" , "TEST-RESULT-jit-comptime: $WallTimeRE"],
 ["Machine<br>code", 'TEST-RESULT-jit-machcode: *([0-9]+).*bytes of machine code'],
 [],
 ["GCC"      , 'TEST-RESULT-nat-time: real\s*([.0-9m:]+)', \&FormatTime],
 ["CBE"      , 'TEST-RESULT-cbe-time: real\s*([.0-9m:]+)', \&FormatTime],
 ["LLC"      , 'TEST-RESULT-llc-time: real\s*([.0-9m:]+)', \&FormatTime],
 ["LLC-LS"   , 'TEST-RESULT-llc-ls-time: real\s*([.0-9m:]+)', \&FormatTime],
 ["JIT"      , 'TEST-RESULT-jit-time: real\s*([.0-9m:]+)', \&FormatTime],
 ["JIT-LS"   , 'TEST-RESULT-jit-ls-time: real\s*([.0-9m:]+)', \&FormatTime],
 ["GCC/CBE"  , \&GCCCBERatio],
 ["GCC/LLC"  , \&GCCLLCRatio],
 ["GCC/LLC-LS"  , \&GCCLLC_LSRatio]
);
