=pod

=head1 NAME

llvm-bcanalyzer - LLVM bitcode analyzer

=head1 SYNOPSIS

B<llvm-bcanalyzer> [I<options>] [F<filename>]

=head1 DESCRIPTION

The B<llvm-bcanalyzer> command is a small utility for analyzing bitcode files.
The tool reads a bitcode file (such as generated with the B<llvm-as> tool) and
produces a statistical report on the contents of the bitcode file.  The tool
can also dump a low level but human readable version of the bitcode file. 
This tool is probably not of much interest or utility except for those working 
directly with the bitcode file format. Most LLVM users can just ignore
this tool.

If F<filename> is omitted or is C<->, then B<llvm-bcanalyzer> reads its input 
from standard input. This is useful for combining the tool into a pipeline.
Output is written to the standard output.

=head1 OPTIONS

=over

=item B<-nodetails>

Causes B<llvm-bcanalyzer> to abbreviate its output by writing out only a module 
level summary. The details for individual functions are not displayed.

=item B<-dump>

Causes B<llvm-bcanalyzer> to dump the bitcode in a human readable format. This 
format is significantly different from LLVM assembly and provides details about 
the encoding of the bitcode file.

=item B<-verify>

Causes B<llvm-bcanalyzer> to verify the module produced by reading the 
bitcode. This ensures that the statistics generated are based on a consistent
module.

=item B<-help>

Print a summary of command line options.

=back

=head1 EXIT STATUS

If B<llvm-bcanalyzer> succeeds, it will exit with 0.  Otherwise, if an error
occurs, it will exit with a non-zero value, usually 1.

=head1 SUMMARY OUTPUT DEFINITIONS

The following items are always printed by llvm-bcanalyzer. They comprize the
summary output.

=over

=item B<Bitcode Analysis Of Module>

This just provides the name of the module for which bitcode analysis is being
generated.

=item B<Bitcode Version Number>

The bitcode version (not LLVM version) of the file read by the analyzer.

=item B<File Size>

The size, in bytes, of the entire bitcode file.

=item B<Module Bytes>

The size, in bytes, of the module block. Percentage is relative to File Size.

=item B<Function Bytes>

The size, in bytes, of all the function blocks. Percentage is relative to File
Size.

=item B<Global Types Bytes>

The size, in bytes, of the Global Types Pool. Percentage is relative to File
Size. This is the size of the definitions of all types in the bitcode file.

=item B<Constant Pool Bytes>

The size, in bytes, of the Constant Pool Blocks Percentage is relative to File
Size.

=item B<Module Globals Bytes>

Ths size, in bytes, of the Global Variable Definitions and their initializers.
Percentage is relative to File Size.

=item B<Instruction List Bytes>

The size, in bytes, of all the instruction lists in all the functions.
Percentage is relative to File Size. Note that this value is also included in
the Function Bytes.

=item B<Compaction Table Bytes>

The size, in bytes, of all the compaction tables in all the functions.
Percentage is relative to File Size. Note that this value is also included in
the Function Bytes.

=item B<Symbol Table Bytes>

The size, in bytes, of all the symbol tables in all the functions. Percentage is
relative to File Size. Note that this value is also included in the Function
Bytes.

=item B<Dependent Libraries Bytes>

The size, in bytes, of the list of dependent libraries in the module. Percentage
is relative to File Size. Note that this value is also included in the Module
Global Bytes.

=item B<Number Of Bitcode Blocks>

The total number of blocks of any kind in the bitcode file.

=item B<Number Of Functions>

The total number of function definitions in the bitcode file.

=item B<Number Of Types>

The total number of types defined in the Global Types Pool.

=item B<Number Of Constants>

The total number of constants (of any type) defined in the Constant Pool.

=item B<Number Of Basic Blocks>

The total number of basic blocks defined in all functions in the bitcode file.

=item B<Number Of Instructions>

The total number of instructions defined in all functions in the bitcode file.

=item B<Number Of Long Instructions>

The total number of long instructions defined in all functions in the bitcode
file. Long instructions are those taking greater than 4 bytes. Typically long
instructions are GetElementPtr with several indices, PHI nodes, and calls to
functions with large numbers of arguments.

=item B<Number Of Operands>

The total number of operands used in all instructions in the bitcode file.

=item B<Number Of Compaction Tables>

The total number of compaction tables in all functions in the bitcode file.

=item B<Number Of Symbol Tables>

The total number of symbol tables in all functions in the bitcode file.

=item B<Number Of Dependent Libs>

The total number of dependent libraries found in the bitcode file.

=item B<Total Instruction Size>

The total size of the instructions in all functions in the bitcode file.

=item B<Average Instruction Size>

The average number of bytes per instruction across all functions in the bitcode
file. This value is computed by dividing Total Instruction Size by Number Of
Instructions.

=item B<Maximum Type Slot Number>

The maximum value used for a type's slot number. Larger slot number values take 
more bytes to encode.

=item B<Maximum Value Slot Number>

The maximum value used for a value's slot number. Larger slot number values take 
more bytes to encode.

=item B<Bytes Per Value>

The average size of a Value definition (of any type). This is computed by
dividing File Size by the total number of values of any type.

=item B<Bytes Per Global>

The average size of a global definition (constants and global variables).

=item B<Bytes Per Function>

The average number of bytes per function definition. This is computed by
dividing Function Bytes by Number Of Functions.

=item B<# of VBR 32-bit Integers>

The total number of 32-bit integers encoded using the Variable Bit Rate
encoding scheme.

=item B<# of VBR 64-bit Integers>

The total number of 64-bit integers encoded using the Variable Bit Rate encoding
scheme.

=item B<# of VBR Compressed Bytes>

The total number of bytes consumed by the 32-bit and 64-bit integers that use
the Variable Bit Rate encoding scheme.

=item B<# of VBR Expanded Bytes>

The total number of bytes that would have been consumed by the 32-bit and 64-bit
integers had they not been compressed with the Variable Bit Rage encoding
scheme.

=item B<Bytes Saved With VBR>

The total number of bytes saved by using the Variable Bit Rate encoding scheme.
The percentage is relative to # of VBR Expanded Bytes.

=back

=head1 DETAILED OUTPUT DEFINITIONS

The following definitions occur only if the -nodetails option was not given.
The detailed output provides additional information on a per-function basis.

=over

=item B<Type>

The type signature of the function.

=item B<Byte Size>

The total number of bytes in the function's block.

=item B<Basic Blocks>

The number of basic blocks defined by the function.

=item B<Instructions>

The number of instructions defined by the function.

=item B<Long Instructions>

The number of instructions using the long instruction format in the function.

=item B<Operands>

The number of operands used by all instructions in the function.

=item B<Instruction Size>

The number of bytes consumed by instructions in the function.

=item B<Average Instruction Size>

The average number of bytes consumed by the instructions in the funtion. This
value is computed by dividing Instruction Size by Instructions.

=item B<Bytes Per Instruction>

The average number of bytes used by the function per instruction. This value is
computed by dividing Byte Size by Instructions. Note that this is not the same
as Average Instruction Size. It computes a number relative to the total function
size not just the size of the instruction list.

=item B<Number of VBR 32-bit Integers>

The total number of 32-bit integers found in this function (for any use).

=item B<Number of VBR 64-bit Integers>

The total number of 64-bit integers found in this function (for any use).

=item B<Number of VBR Compressed Bytes>

The total number of bytes in this function consumed by the 32-bit and 64-bit 
integers that use the Variable Bit Rate encoding scheme.

=item B<Number of VBR Expanded Bytes>

The total number of bytes in this function that would have been consumed by 
the 32-bit and 64-bit integers had they not been compressed with the Variable 
Bit Rate encoding scheme.

=item B<Bytes Saved With VBR>

The total number of bytes saved in this function by using the Variable Bit 
Rate encoding scheme. The percentage is relative to # of VBR Expanded Bytes.

=back

=head1 SEE ALSO

L<llvm-dis|llvm-dis>, L<http://llvm.org/docs/BitCodeFormat.html>

=head1 AUTHORS

Maintained by the LLVM Team (L<http://llvm.org>).

=cut
