[llvm-commits] [llvm] r44372 - /llvm/trunk/utils/GenLibDeps.pl

Ted Kremenek kremenek at apple.com
Tue Nov 27 11:31:11 PST 2007


Author: kremenek
Date: Tue Nov 27 13:31:11 2007
New Revision: 44372

URL: http://llvm.org/viewvc/llvm-project?rev=44372&view=rev
Log:
Updated GenLibDeps.pl to employ "use strict" to help prevent uses of variables
that have not yet been defined.

Removed used of grep and sed when parsing the results of "nm". This was
originally motivated because if the user has specified options to grep using
the environment variable GREP_OPTIONS this could break the script. Piping
through grep/sed/sort/uniq is also (to my understanding) not necessary, and
the equivalent operations can be done much faster in the Perl script.

Using a crude benchmark, these changes resulted in a 3x speedup in the
execution of GenLibDeps.pl.

Modified:
    llvm/trunk/utils/GenLibDeps.pl

Modified: llvm/trunk/utils/GenLibDeps.pl
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/GenLibDeps.pl?rev=44372&r1=44371&r2=44372&view=diff

==============================================================================
--- llvm/trunk/utils/GenLibDeps.pl (original)
+++ llvm/trunk/utils/GenLibDeps.pl Tue Nov 27 13:31:11 2007
@@ -8,6 +8,7 @@
 #
 # Syntax:   GenLibDeps.pl [-flat] <directory_with_libraries_in_it> [path_to_nm_binary]
 #
+use strict;
 
 # Parse arguments... 
 my $FLAT = 0;
@@ -47,8 +48,8 @@
 opendir DIR,$Directory;
 my @files = readdir DIR;
 closedir DIR;
- at libs = grep(/libLLVM.*\.a$/,sort(@files));
- at objs = grep(/LLVM.*\.o$/,sort(@files));
+my @libs = grep(/libLLVM.*\.a$/,sort(@files));
+my @objs = grep(/LLVM.*\.o$/,sort(@files));
 
 # Declare the hashes we will use to keep track of the library and object file
 # symbol definitions.
@@ -56,10 +57,11 @@
 my %objdefs;
 
 # Gather definitions from the libraries
-foreach $lib (@libs ) {
-  open DEFS, 
-    "$nmPath -g $Directory/$lib | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
+foreach my $lib (@libs ) {
+  open DEFS, "$nmPath -g $Directory/$lib|";
   while (<DEFS>) {
+    next if (! / [ABCDGRST] /);
+    s/^[^ ]* [ABCDGRST] //;    
     chomp($_);
     $libdefs{$_} = $lib;
   }
@@ -67,10 +69,11 @@
 }
 
 # Gather definitions from the object files.
-foreach $obj (@objs ) {
-  open DEFS, 
-    "$nmPath -g $Directory/$obj | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
+foreach my $obj (@objs ) {
+  open DEFS, "$nmPath -g $Directory/$obj |";
   while (<DEFS>) {
+    next if (! / [ABCDGRST] /);
+    s/^[^ ]* [ABCDGRST] //;
     chomp($_);
     $objdefs{$_} = $obj;
   }
@@ -100,7 +103,7 @@
       $DepLibs{$libdefs{$_}} = [] unless exists $DepLibs{$libdefs{$_}};
       push(@{$DepLibs{$libdefs{$_}}}, $_);
     } elsif (defined($objdefs{$_}) && $objdefs{$_} ne $lib) {
-      $libroot = $lib;
+      my $libroot = $lib;
       $libroot =~ s/lib(.*).a/$1/;
       if ($objdefs{$_} ne "$libroot.o") {
         $DepLibs{$objdefs{$_}} = [] unless exists $DepLibs{$objdefs{$_}};
@@ -115,14 +118,14 @@
       if ($WHY) {
         print "\n";
         my @syms = @{$DepLibs{$key}};
-        foreach $sym (@syms) {
+        foreach my $sym (@syms) {
           print "  $sym\n";
         }
       }
     } else {
       print "    <li>$key</li>\n";
     }
-    $suffix = substr($key,length($key)-1,1);
+    my $suffix = substr($key,length($key)-1,1);
     $key =~ s/(.*)\.[oa]/$1/;
     if ($suffix eq "a") {
       if (!$FLAT) { print DOT "$lib_ns -> $key [ weight=0 ];\n" };
@@ -169,7 +172,7 @@
 }
 
 # Print libraries first
-foreach $lib (@libs) {
+foreach my $lib (@libs) {
   gen_one_entry($lib);
 }
 
@@ -196,7 +199,7 @@
 }
 
 # Print objects second
-foreach $obj (@objs) {
+foreach my $obj (@objs) {
   gen_one_entry($obj);
 }
 





More information about the llvm-commits mailing list