=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
