Helper script for collecting profiling instrumentation. Simply run
authorChris Lattner <sabre@nondot.org>
Tue, 28 Oct 2003 22:11:31 +0000 (22:11 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 28 Oct 2003 22:11:31 +0000 (22:11 +0000)
$ profile.pl foo.bc <args>

... to instrument, run, then print a program profile!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9560 91177308-0d34-0410-b5e6-96231b3b80d8

utils/profile.pl [new file with mode: 0755]

diff --git a/utils/profile.pl b/utils/profile.pl
new file mode 100755 (executable)
index 0000000..27bfd71
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/perl -w
+#
+# Program:  profile.pl
+#
+# Synopsis: Insert instrumentation code into a program, run it with the JIT,
+#           then print out a profile report.
+#
+# Syntax:   profile.pl [OPTIONS] bytecodefile <arguments>
+#
+# OPTIONS may include one or more of the following:
+#     NONE SO FAR
+#
+#
+
+
+my $ProfilePass = "-insert-function-profiling";
+
+# Parse arguments...
+while (scalar(@ARGV) and ($_ = $ARGV[0], /^[-+]/)) {
+  shift;
+  last if /^--$/;  # Stop processing arguments on --
+
+  # List command line options here...
+  #if (/^-enable-foo$/)     { $FOO = 1; next; }
+
+  print "Unknown option: $_ : ignoring!\n";
+}
+
+die "Must specify LLVM bytecode file as first argument!" if (@ARGV == 0);
+
+my $BytecodeFile = $ARGV[0];
+
+shift @ARGV;
+
+my $LLIPath = `which lli`;
+$LLIPath = `dirname $LLIPath`;
+chomp $LLIPath;
+
+my $LibProfPath = $LLIPath . "/../../lib/Debug/libprofile_rt.so";
+
+system "opt $ProfilePass < $BytecodeFile | lli -load $LibProfPath - " .
+         (join ' ', @ARGV);
+
+system "llvm-prof $BytecodeFile";