Skip to content

Commit

Permalink
maint: optimize extracterrmsgs
Browse files Browse the repository at this point in the history
Re-initializing %KnownErrRoutines for every line of the source code is
waste of time. Just load once can make the script run much faster --
from 3 seconds to a fraction of a second.
  • Loading branch information
hzhou committed Feb 1, 2022
1 parent 63212bc commit c581075
Showing 1 changed file with 79 additions and 67 deletions.
146 changes: 79 additions & 67 deletions maint/extracterrmsgs
Original file line number Diff line number Diff line change
Expand Up @@ -648,8 +648,14 @@ sub ReadErrnamesFile {
# The last two are used to provide better error reporting.
#
$filename = ""; # Make global so that other routines can echo filename
%KnownErrRoutines;

sub ProcessFile
{
if (!%KnownErrRoutines) {
load_KnownErrRoutines();
}

# Leave filename global for AddTest
$filename = $_[0];
my $linecount = 0;
Expand All @@ -672,74 +678,13 @@ sub ProcessFile
$_ = StripComments( FD, $_ );
# Skip the definition of the function
if (/int\s+MPI[OUR]_Err_create_code/) { $remainder = ""; next; }
# Match the known routines and macros.
# Then check that the arguments match if there is a
# specific string (number of args matches the number present)
# MPIR_ERR_CHK(FATAL)?ANDJUMP[1-4]?(cond,code,class,gmsg[,smsg,args])
# MPIR_ERR_SET(FATAL)?ANDJUMP[1-4]?(code,class,gmsg[,smsg,args])
# MPIR_ERR_CHK(FATAL)?ANDSTMT[1-4]?(cond,code,class,stmt,gmsg[,smsg,args])
# MPIR_ERR_SET(FATAL)?ANDSTMT[1-4]?(code,class,stmt,gmsg[,smsg,args])
# Value is a tuple of:
# the count of args where the generic msg begins (starting from 0)
# location of __LINE__ (-1 for none)
# specific msg arg required (0 for no, > 0 for yes)
# is the generic message an indirect from errnames.txt (1=yes 0=no)
# location of the error class
%KnownErrRoutines = ( 'MPIR_Err_create_code' => '5:3:1:1:4',
'MPIO_Err_create_code' => '5:3:1:0:-1',
'MPIR_ERR_SET' => '2:-1:0:1:1',
'MPIR_ERR_SETSIMPLE' => '2:-1:0:1:1',
'MPIR_ERR_SET1' => '2:-1:1:1:1',
'MPIR_ERR_SET2' => '2:-1:2:1:1',
'MPIR_ERR_SETANDSTMT' => '3:-1:0:1:1',
'MPIR_ERR_SETANDSTMT1' => '3:-1:1:1:1',
'MPIR_ERR_SETANDSTMT2' => '3:-1:1:1:1',
'MPIR_ERR_SETANDSTMT3' => '3:-1:1:1:1',
'MPIR_ERR_SETANDSTMT4' => '3:-1:1:1:1',
'MPIR_ERR_SETANDJUMP' => '2:-1:0:1:1',
'MPIR_ERR_SETANDJUMP1' => '2:-1:1:1:1',
'MPIR_ERR_SETANDJUMP2' => '2:-1:1:1:1',
'MPIR_ERR_SETANDJUMP3' => '2:-1:1:1:1',
'MPIR_ERR_SETANDJUMP4' => '2:-1:1:1:1',
'MPIR_ERR_CHKANDSTMT' => '4:-1:0:1:2',
'MPIR_ERR_CHKANDSTMT1' => '4:-1:1:1:2',
'MPIR_ERR_CHKANDSTMT2' => '4:-1:1:1:2',
'MPIR_ERR_CHKANDSTMT3' => '4:-1:1:1:2',
'MPIR_ERR_CHKANDSTMT4' => '4:-1:1:1:2',
'MPIR_ERR_CHKANDJUMP' => '3:-1:0:1:2',
'MPIR_ERR_CHKANDJUMP1' => '3:-1:1:1:2',
'MPIR_ERR_CHKANDJUMP2' => '3:-1:1:1:2',
'MPIR_ERR_CHKANDJUMP3' => '3:-1:1:1:2',
'MPIR_ERR_CHKANDJUMP4' => '3:-1:1:1:2',
'MPIR_ERR_SETFATAL' => '2:-1:0:1:1',
'MPIR_ERR_SETFATALSIMPLE' => '2:-1:0:1:1',
'MPIR_ERR_SETFATAL1' => '2:-1:1:1:1',
'MPIR_ERR_SETFATAL2' => '2:-1:2:1:1',
'MPIR_ERR_SETFATALANDSTMT' => '3:-1:0:1:1',
'MPIR_ERR_SETFATALANDSTMT1' => '3:-1:1:1:1',
'MPIR_ERR_SETFATALANDSTMT2' => '3:-1:1:1:1',
'MPIR_ERR_SETFATALANDSTMT3' => '3:-1:1:1:1',
'MPIR_ERR_SETFATALANDSTMT4' => '3:-1:1:1:1',
'MPIR_ERR_SETFATALANDJUMP' => '2:-1:0:1:1',
'MPIR_ERR_SETFATALANDJUMP1' => '2:-1:1:1:1',
'MPIR_ERR_SETFATALANDJUMP2' => '2:-1:1:1:1',
'MPIR_ERR_SETFATALANDJUMP3' => '2:-1:1:1:1',
'MPIR_ERR_SETFATALANDJUMP4' => '2:-1:1:1:1',
'MPIR_ERR_CHKFATALANDSTMT' => '4:-1:0:1:2',
'MPIR_ERR_CHKFATALANDSTMT1' => '4:-1:1:1:2',
'MPIR_ERR_CHKFATALANDSTMT2' => '4:-1:1:1:2',
'MPIR_ERR_CHKFATALANDSTMT3' => '4:-1:1:1:2',
'MPIR_ERR_CHKFATALANDSTMT4' => '4:-1:1:1:2',
'MPIR_ERR_CHKFATALANDJUMP' => '3:-1:0:1:2',
'MPIR_ERR_CHKFATALANDJUMP1' => '3:-1:1:1:2',
'MPIR_ERR_CHKFATALANDJUMP2' => '3:-1:1:1:2',
'MPIR_ERR_CHKFATALANDJUMP3' => '3:-1:1:1:2',
'MPIR_ERR_CHKFATALANDJUMP4' => '3:-1:1:1:2',
'MPIR_ERRTEST_VALID_HANDLE' => '4:-1:0:1:3',
);
while (/(MPI[OUR]_E[A-Za-z0-9_]+)\s*(\(.*)$/) {
while (/(MPI[OUR]_Err[A-Za-z0-9_]+)\s*(\(.*)$/i) {
my $routineName = $1;
my $arglist = $2;
if ($routineName =~ /MPIR_ERR_(CHECK|POP|ADD|GET_CLASS|COLL_CHECKANDCONT|is_fatal)/i) {
# skip known false positives
next;
}
if (!defined($KnownErrRoutines{$routineName})) {
print "Skipping $routineName\n" if $debug;
last;
Expand Down Expand Up @@ -939,7 +884,74 @@ sub ExpandDir {
return @files;
}


sub load_KnownErrRoutines {
# Match the known routines and macros.
# Then check that the arguments match if there is a
# specific string (number of args matches the number present)
# MPIR_ERR_CHK(FATAL)?ANDJUMP[1-4]?(cond,code,class,gmsg[,smsg,args])
# MPIR_ERR_SET(FATAL)?ANDJUMP[1-4]?(code,class,gmsg[,smsg,args])
# MPIR_ERR_CHK(FATAL)?ANDSTMT[1-4]?(cond,code,class,stmt,gmsg[,smsg,args])
# MPIR_ERR_SET(FATAL)?ANDSTMT[1-4]?(code,class,stmt,gmsg[,smsg,args])
# Value is a tuple of:
# the count of args where the generic msg begins (starting from 0)
# location of __LINE__ (-1 for none)
# specific msg arg required (0 for no, > 0 for yes)
# is the generic message an indirect from errnames.txt (1=yes 0=no)
# location of the error class
%KnownErrRoutines = (
'MPIR_Err_create_code' => '5:3:1:1:4',
'MPIO_Err_create_code' => '5:3:1:0:-1',
'MPIR_ERR_SET' => '2:-1:0:1:1',
'MPIR_ERR_SETSIMPLE' => '2:-1:0:1:1',
'MPIR_ERR_SET1' => '2:-1:1:1:1',
'MPIR_ERR_SET2' => '2:-1:2:1:1',
'MPIR_ERR_SETANDSTMT' => '3:-1:0:1:1',
'MPIR_ERR_SETANDSTMT1' => '3:-1:1:1:1',
'MPIR_ERR_SETANDSTMT2' => '3:-1:1:1:1',
'MPIR_ERR_SETANDSTMT3' => '3:-1:1:1:1',
'MPIR_ERR_SETANDSTMT4' => '3:-1:1:1:1',
'MPIR_ERR_SETANDJUMP' => '2:-1:0:1:1',
'MPIR_ERR_SETANDJUMP1' => '2:-1:1:1:1',
'MPIR_ERR_SETANDJUMP2' => '2:-1:1:1:1',
'MPIR_ERR_SETANDJUMP3' => '2:-1:1:1:1',
'MPIR_ERR_SETANDJUMP4' => '2:-1:1:1:1',
'MPIR_ERR_CHKANDSTMT' => '4:-1:0:1:2',
'MPIR_ERR_CHKANDSTMT1' => '4:-1:1:1:2',
'MPIR_ERR_CHKANDSTMT2' => '4:-1:1:1:2',
'MPIR_ERR_CHKANDSTMT3' => '4:-1:1:1:2',
'MPIR_ERR_CHKANDSTMT4' => '4:-1:1:1:2',
'MPIR_ERR_CHKANDJUMP' => '3:-1:0:1:2',
'MPIR_ERR_CHKANDJUMP1' => '3:-1:1:1:2',
'MPIR_ERR_CHKANDJUMP2' => '3:-1:1:1:2',
'MPIR_ERR_CHKANDJUMP3' => '3:-1:1:1:2',
'MPIR_ERR_CHKANDJUMP4' => '3:-1:1:1:2',
'MPIR_ERR_SETFATAL' => '2:-1:0:1:1',
'MPIR_ERR_SETFATALSIMPLE' => '2:-1:0:1:1',
'MPIR_ERR_SETFATAL1' => '2:-1:1:1:1',
'MPIR_ERR_SETFATAL2' => '2:-1:2:1:1',
'MPIR_ERR_SETFATALANDSTMT' => '3:-1:0:1:1',
'MPIR_ERR_SETFATALANDSTMT1' => '3:-1:1:1:1',
'MPIR_ERR_SETFATALANDSTMT2' => '3:-1:1:1:1',
'MPIR_ERR_SETFATALANDSTMT3' => '3:-1:1:1:1',
'MPIR_ERR_SETFATALANDSTMT4' => '3:-1:1:1:1',
'MPIR_ERR_SETFATALANDJUMP' => '2:-1:0:1:1',
'MPIR_ERR_SETFATALANDJUMP1' => '2:-1:1:1:1',
'MPIR_ERR_SETFATALANDJUMP2' => '2:-1:1:1:1',
'MPIR_ERR_SETFATALANDJUMP3' => '2:-1:1:1:1',
'MPIR_ERR_SETFATALANDJUMP4' => '2:-1:1:1:1',
'MPIR_ERR_CHKFATALANDSTMT' => '4:-1:0:1:2',
'MPIR_ERR_CHKFATALANDSTMT1' => '4:-1:1:1:2',
'MPIR_ERR_CHKFATALANDSTMT2' => '4:-1:1:1:2',
'MPIR_ERR_CHKFATALANDSTMT3' => '4:-1:1:1:2',
'MPIR_ERR_CHKFATALANDSTMT4' => '4:-1:1:1:2',
'MPIR_ERR_CHKFATALANDJUMP' => '3:-1:0:1:2',
'MPIR_ERR_CHKFATALANDJUMP1' => '3:-1:1:1:2',
'MPIR_ERR_CHKFATALANDJUMP2' => '3:-1:1:1:2',
'MPIR_ERR_CHKFATALANDJUMP3' => '3:-1:1:1:2',
'MPIR_ERR_CHKFATALANDJUMP4' => '3:-1:1:1:2',
'MPIR_ERRTEST_VALID_HANDLE' => '4:-1:0:1:3',
);
}

#
# Other todos:
Expand Down

0 comments on commit c581075

Please sign in to comment.