Debug: Tree compare between versions; merge from dtype branch. No functional change.
This commit is contained in:
parent
799afac05b
commit
d5e19661bd
|
|
@ -14,6 +14,19 @@ use vars qw ($Debug);
|
||||||
|
|
||||||
#======================================================================
|
#======================================================================
|
||||||
|
|
||||||
|
# Old version 1 dump nodes with no dtypep's
|
||||||
|
our %Ver1_Non_Dtyped = map {$_ => 1} qw(
|
||||||
|
ACTIVE ALWAYS ALWAYSPOST ALWAYSPUBLIC ATTROF BEGIN BREAK CASE CASEITEM
|
||||||
|
CCALL CELL CELLINLINE CFILE CFUNC CHANGEDET CLOCKING COMMENT CONTINUE
|
||||||
|
COVERDECL COVERINC COVERTOGGLE CRETURN CSTMT DEFPARAM DISABLE DISPLAY DOT
|
||||||
|
DPIEXPORT FCLOSE FFLUSH FINAL FINISH FOPEN GENCASE GENERATE GENFOR GENIF
|
||||||
|
IF IMPLICIT INITARRAY INITIAL JUMPGO JUMPLABEL MODULE NETLIST
|
||||||
|
NOTFOUNDMODULE PACKAGE PACKAGEIMPORT PARSEREF PIN PORT PRAGMA PRIMITIVE
|
||||||
|
PSLASSERT PSLCOVER PSLDEFCLOCK PULL RANGE READMEM REPEAT RETURN SCCTOR
|
||||||
|
SCDTOR SCHDR SCIMP SCIMPHDR SCINT SCOPE SELBIT SELEXTRACT SELMINUS
|
||||||
|
SELPLUS SENGATE SENITEM SENTREE SFORMAT SFORMATF STOP SYSIGNORE SYSTEMT
|
||||||
|
TASK TASKREF TEXT TOPSCOPE TYPEDEFFWD TYPETABLE UCSTMT UDPTABLE
|
||||||
|
UDPTABLELINE UNTILSTABLE VASSERT WHILE );
|
||||||
|
|
||||||
#======================================================================
|
#======================================================================
|
||||||
# main
|
# main
|
||||||
|
|
@ -82,24 +95,67 @@ sub diff_file {
|
||||||
my $tmp_a = "/tmp/$$.a";
|
my $tmp_a = "/tmp/$$.a";
|
||||||
my $tmp_b = "/tmp/$$.b";
|
my $tmp_b = "/tmp/$$.b";
|
||||||
|
|
||||||
filter ($a, $tmp_a);
|
my $vera = version_from($a);
|
||||||
filter ($b, $tmp_b);
|
my $verb = version_from($b);
|
||||||
|
my $verCvt = (($vera < 0x3900 && $verb >= 0x3900)
|
||||||
|
|| ($vera >= 0x3900 && $verb < 0x3900));
|
||||||
|
|
||||||
|
filter ($a, $tmp_a, $verCvt);
|
||||||
|
filter ($b, $tmp_b, $verCvt);
|
||||||
system("diff -u $tmp_a $tmp_b");
|
system("diff -u $tmp_a $tmp_b");
|
||||||
unlink $tmp_a;
|
unlink $tmp_a;
|
||||||
unlink $tmp_b;
|
unlink $tmp_b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub version_from {
|
||||||
|
my $fn = shift;
|
||||||
|
# Return dump format
|
||||||
|
my $f1 = IO::File->new ($fn) or die "%Error: $! $fn,";
|
||||||
|
while (defined (my $line=$f1->getline())) {
|
||||||
|
last if $. > 10;
|
||||||
|
return hex $1 if $line =~ /\(format (0x[0-9.]+)\)/;
|
||||||
|
}
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
sub filter {
|
sub filter {
|
||||||
my $fn1 = shift;
|
my $fn1 = shift;
|
||||||
my $fn2 = shift;
|
my $fn2 = shift;
|
||||||
|
my $verCvt = shift;
|
||||||
# Remove hex numbers before diffing
|
# Remove hex numbers before diffing
|
||||||
my $f1 = IO::File->new ($fn1) or die "%Error: $! $fn1,";
|
my $f1 = IO::File->new ($fn1) or die "%Error: $! $fn1,";
|
||||||
my $f2 = IO::File->new ($fn2,"w") or die "%Error: $! $fn2,";
|
my $f2 = IO::File->new ($fn2,"w") or die "%Error: $! $fn2,";
|
||||||
while (defined (my $line=$f1->getline())) {
|
while (defined (my $line=$f1->getline())) {
|
||||||
|
same_line:
|
||||||
next if $line =~ / This=/;
|
next if $line =~ / This=/;
|
||||||
$line =~ s/0x[a-f0-9]+/0x/g;
|
$line =~ s/0x[a-f0-9]+/0x/g;
|
||||||
$line =~ s/<e[0-9]+\#?>/<e>/g;
|
$line =~ s/<e[0-9]+\#?>/<e>/g;
|
||||||
$line =~ s/{[a-z]*\d+}/{}/g if !$Opt_Lineno;
|
$line =~ s/{[a-z]*\d+}/{}/g if !$Opt_Lineno;
|
||||||
|
if ($verCvt) {
|
||||||
|
next if $line =~ /^ NETLIST/;
|
||||||
|
$line =~ s!\@dt=0x\(G?/?([^)]+)\)!$1!g; # NEW: @dt -> OLD: non @dt format
|
||||||
|
# # Below Ver1_Non_Dtyped may replace above further
|
||||||
|
if ($line =~ /: ([A-Z]+) /) {
|
||||||
|
my $type = $1;
|
||||||
|
next if $type =~ 'DTYPE';
|
||||||
|
if ($type eq 'TYPETABLE' || $type eq 'RANGE') {
|
||||||
|
$line =~ /^(\s+\S+:) /; my $prefix = $1;
|
||||||
|
while (defined ($line=$f1->getline())) {
|
||||||
|
next if $line =~ /^\s+[a-z]/; # Table body
|
||||||
|
next if $line =~ /^${prefix}[0-9]:/;
|
||||||
|
goto same_line;
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if ($Ver1_Non_Dtyped{$type}) {
|
||||||
|
$line =~ s! w[0-9]+!!g;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$line =~ s!\@dt=0$!NoW!g; # NEW: dt=null -> common format
|
||||||
|
$line =~ s!\@dt=0 !NoW !g; # NEW: dt=null -> common format
|
||||||
|
$line =~ s! s?w0$! NoW!g; # OLD: no width -> common format
|
||||||
|
$line =~ s! s?w0 ! NoW !g; # OLD: no width -> common format
|
||||||
|
}
|
||||||
print $f2 $line;
|
print $f2 $line;
|
||||||
}
|
}
|
||||||
$f1->close;
|
$f1->close;
|
||||||
|
|
|
||||||
|
|
@ -1014,7 +1014,7 @@ void AstNode::dumpTreeFile(const string& filename, bool append) {
|
||||||
UINFO(2,"Dumping "<<filename<<endl);
|
UINFO(2,"Dumping "<<filename<<endl);
|
||||||
const auto_ptr<ofstream> logsp (V3File::new_ofstream(filename, append));
|
const auto_ptr<ofstream> logsp (V3File::new_ofstream(filename, append));
|
||||||
if (logsp->fail()) v3fatalSrc("Can't write "<<filename);
|
if (logsp->fail()) v3fatalSrc("Can't write "<<filename);
|
||||||
*logsp<<"Tree Dump from <e"<<dec<<editCountLast()<<">";
|
*logsp<<"Verilator Tree Dump (format 0x3800) from <e"<<dec<<editCountLast()<<">";
|
||||||
*logsp<<" to <e"<<dec<<editCountGbl()<<">"<<endl;
|
*logsp<<" to <e"<<dec<<editCountGbl()<<">"<<endl;
|
||||||
if (editCountGbl()==editCountLast()
|
if (editCountGbl()==editCountLast()
|
||||||
&& !(v3Global.opt.dumpTree()>=9)) {
|
&& !(v3Global.opt.dumpTree()>=9)) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue