mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/perl
 | |
| # parse 'yosys -t' logfile and find slow passes
 | |
| 
 | |
| my $max_depth = 0;
 | |
| my %last_line_by_depth;
 | |
| my %last_time_by_depth;
 | |
| 
 | |
| my @lines_text;
 | |
| my @lines_depth;
 | |
| my @lines_time;
 | |
| 
 | |
| while (<>)
 | |
| {
 | |
| 	chomp;
 | |
| 	next unless /^\[([0-9.]+)\] (([0-9]+\.)+)/;
 | |
| 	my ($this_time, $this_id, $this_header) = ($1, $2, $4);
 | |
| 
 | |
| 	push @lines_text, $_;
 | |
| 	push @lines_depth, 0;
 | |
| 	push @lines_time, 0;
 | |
| 
 | |
| 	my $depth = $this_id;
 | |
| 	$depth =~ s/[^.]//g;
 | |
| 	$depth = length $depth;
 | |
| 	$max_depth = $depth if $depth > $max_depth;
 | |
| 
 | |
| 	for (my $i = $depth; $i <= $max_depth; $i++) {
 | |
| 		next unless exists $last_time_by_depth{$i};
 | |
| 		$lines_time[$last_line_by_depth{$i}] = $this_time-$last_time_by_depth{$i};
 | |
| 		delete $last_time_by_depth{$i};
 | |
| 		delete $last_header_by_depth{$i};
 | |
| 	}
 | |
| 
 | |
| 	$last_time_by_depth{$depth} = $this_time;
 | |
| 	$last_line_by_depth{$depth} = $#lines_text;
 | |
| 	$lines_depth[$#lines_text] = $depth;
 | |
| }
 | |
| 
 | |
| for (my $depth = 1; $depth <= $max_depth; $depth++) {
 | |
| 	printf "\nSlow passes on recursion depth %d:\n", $depth;
 | |
| 	my @lines;
 | |
| 	for (my $i = 0; $i <= $#lines_text; $i++) {
 | |
| 		next if $lines_depth[$i] != $depth or $lines_time[$i] < 1.0;
 | |
| 		push @lines, sprintf("%3d  %08.2f  %s\n", $lines_depth[$i], $lines_time[$i], $lines_text[$i]);
 | |
| 	}
 | |
| 	for my $line (sort {$b cmp $a} @lines) {
 | |
| 		print $line;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| printf "\nFull journal of headers:\n";
 | |
| for (my $i = 0; $i <= $#lines_text; $i++) {
 | |
| 	printf "%3d  %08.2f  %s\n", $lines_depth[$i], $lines_time[$i], $lines_text[$i];
 | |
| }
 | |
| 
 |