=pod

=head1 NAME

llvm-prof - print execution profile of LLVM program

=head1 SYNOPSIS

B<llvm-prof> [I<options>] [I<bitcode 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 bitcode 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 bitcode 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
