=pod

=head1 NAME

llvm-prof - print execution profile of LLVM program

=head1 SYNOPSIS

B<llvm-prof> [I<options>] [I<bytecode file>] [I<llvmprof.out>]

=head1 DESCRIPTION

The B<llvm-prof> tool reads in an F<llvmprof.out> file (which can
optionally use a specific file with the third program argument), a bytecode file
for the program, and produces a human readable report, suitable for determining
where the program hotspots are.

This program is often used in conjunction with the F<utils/profile.pl>
script.  This script automatically instruments a program, runs it with the JIT,
then runs B<llvm-prof> to format a report.  To get more information about
F<utils/profile.pl>, execute it with the B<--help> option.

=head1 OPTIONS

=over

=item B<--annotated-llvm> or B<-A>

In addition to the normal report printed, print out the code for the
program, annotated with execution frequency information. This can be
particularly useful when trying to visualize how frequently basic blocks
are executed.  This is most useful with basic block profiling
information or better.

=item B<--print-all-code>

Using this option enables the B<--annotated-llvm> option, but it
prints the entire module, instead of just the most commonly executed
functions.

=item B<--time-passes>

Record the amount of time needed for each pass and print it to standard
error.

=back

=head1 EXIT STATUS

B<llvm-prof> returns 1 if it cannot load the bytecode file or the profile
information. Otherwise, it exits with zero.

=head1 AUTHOR

B<llvm-prof> is maintained by the LLVM Team (L<http://llvm.org>).

=cut
