=pod

=head1 NAME

llvmc - The LLVM Compiler Driver (experimental)

=head1 SYNOPSIS

B<llvmc> [I<options>] [I<filenames>...]

=head1 DESCRIPTION

B<llvmc> is a configurable driver for invoking other LLVM (and non-LLVM) tools
in order to compile, optimize and link software for multiple languages. For
those familiar with FSF's B<gcc> tool, it is very similar.  Please note that
B<llvmc> is considered an experimental tool.  B<llvmc> has the following goals:

=over

=item * provide a single point of access to the LLVM tool set,

=item * hide the complexities of the LLVM tools through a single interface,

=item * make integration of existing non-LLVM tools simple,

=item * extend the capabilities of minimal front ends, and

=item * make the interface for compiling consistent for all languages.

=back

The tool itself does nothing with a user's program. It merely invokes other
tools to get the compilation tasks done.

The options supported by B<llvmc> generalize the compilation process and
provide a consistent and simple interface for multiple programming languages.
This makes it easier for developers to get their software compiled with LLVM.
Without B<llvmc>, developers would need to understand how to invoke the 
front-end compiler, optimizer, assembler, and linker in order to compile their 
programs. B<llvmc>'s sole mission is to trivialize that process.

=head2 Basic Operation

B<llvmc> always takes the following basic actions:

=over

=item * Command line options and filenames are collected.

The command line options provide the marching orders to B<llvmc> on what actions
it should perform. This is the I<request> the user is making of B<llvmc> and it
is interpreted first.

=item * Configuration files are read.

Based on the options and the suffixes of the filenames presented, a set of 
configuration files are read to configure the actions B<llvmc> will take. 
Configuration files are provided by either LLVM or the front end compiler tools
that B<llvmc> invokes. Users generally don't need to be concerned with the
contents of the configuration files. 

=item * Determine actions to take.

The tool chain needed to complete the task is determined. This is the primary 
work of B<llvmc>. It breaks the request specified by the command line options 
into a set of basic actions to be done: 

=over

=item * Pre-processing: gathering/filtering compiler input (optional).

=item * Translation: source language to bytecode conversion.

=item * Assembly: bytecode to native code conversion.

=item * Optimization: conversion of bytecode to something that runs faster.

=item * Linking: combining multiple bytecodes to produce executable program.

=back

=item * Execute actions.

The actions determined previously are executed sequentially and then
B<llvmc> terminates.

=back

=head1 OPTIONS

=head2 Control Options

Control options tell B<llvmc> what to do at a high level. The 
following control options are defined:

=over

=item B<-c> or B<--compile>

This option specifies that the linking phase is not to be run. All
previous phases, if applicable will run. This is generally how a given
bytecode file is compiled and optimized for a source language module.

=item B<-k> or B<--link> or default

This option (or the lack of any control option) specifies that all stages
of compilation, optimization, and linking should be attempted.  Source files
specified on the command line will be compiled and linked with objects and
libraries also specified. 

=item B<-S>

This option specifies that compilation should end in the creation of
an LLVM assembly file that can be later converted to an LLVM object
file.

=item B<-E>

This option specifies that no compilation or linking should be 
performed. Only pre-processing, if applicable to the language being
compiled, is performed. For languages that support it, this will
result in the output containing the raw input to the compiler.

=back

=head2 Optimization Options

Optimization with B<llvmc> is based on goals and specified with
the following -O options. The specific details of which
optimizations run is controlled by the configuration files because
each source language will have different needs. 

=over

=item B<-O1> or B<-O0> (default, fast compilation)

Only those optimizations that will hasten the compilation (mostly by reducing
the output) are applied. In general these are extremely fast and simple 
optimizations that reduce emitted code size. The goal here is not to make the 
resulting program fast but to make the compilation fast.  If not specified, 
this is the default level of optimization.

=item B<-O2> (basic optimization)

This level of optimization specifies a balance between generating good code 
that will execute reasonably quickly and not spending too much time optimizing
the code to get there. For example, this level of optimization may include 
things like global common subexpression elimination, aggressive dead code 
elimination, and scalar replication.

=item B<-O3> (aggressive optimization)

This level of optimization aggressively optimizes each set of files compiled 
together. However, no link-time inter-procedural optimization is performed.
This level implies all the optimizations of the B<-O1> and B<-O2> optimization
levels, and should also provide loop optimizations and compile time 
inter-procedural optimizations. Essentially, this level tries to do as much
as it can with the input it is given but doesn't do any link time IPO.

=item B<-O4> (link time optimization)

In addition to the previous three levels of optimization, this level of 
optimization aggressively optimizes each program at link time. It employs
basic analysis and basic link-time inter-procedural optimizations, 
considering the program as a whole.

=item B<-O5> (aggressive link time optimization)

This is the same as B<-O4> except it employs aggressive analyses and
aggressive inter-procedural optimization. 

=item B<-O6> (profile guided optimization: not implemented)

This is the same as B<-O5> except that it employs profile-guided
re-optimization of the program after it has executed. Note that this implies
a single level of re-optimization based on runtime profile analysis. Once
the re-optimization has completed, the profiling instrumentation is
removed and final optimizations are employed.

=item B<-O7> (lifelong optimization: not implemented)

This is the same as B<-O5> and similar to B<-O6> except that re-optimization
is performed through the life of the program. That is, each run will update
the profile by which future re-optimizations are directed.

=back

=head2 Input Options

=over

=item B<-l> I<LIBRARY>

This option instructs B<llvmc> to locate a library named I<LIBRARY> and search
it for unresolved symbols when linking the program.

=item B<-L> F<path>

This option instructs B<llvmc> to add F<path> to the list of places in which
the linker will

=item B<-x> I<LANGUAGE>

This option instructs B<llvmc> to regard the following input files as 
containing programs in the language I<LANGUAGE>. Normally, input file languages
are identified by their suffix but this option will override that default
behavior. The B<-x> option stays in effect until the end of the options or
a new B<-x> option is encountered.

=back

=head2 Output Options

=over

=item B<-m>I<arch>

This option selects the back end code generator to use. The I<arch> portion
of the option names the back end to use.

=item B<--native>

Normally, B<llvmc> produces bytecode files at most stages of compilation.
With this option, B<llvmc> will arrange for native object files to be
generated with the B<-c> option, native assembly files to be generated
with the B<-S> option, and native executables to be generated with the
B<--link> option. In the case of the B<-E> option, the output will not
differ as there is no I<native> version of pre-processed output.

=item B<-o> F<filename>

Specify the output file name.  The contents of the file  depend on other 
options. 

=back

=head2 Information Options

=over

=item B<-n> or B<--no-op>

This option tells B<llvmc> to do everything but actually execute the
resulting tools. In combination with the B<-v> option, this causes B<llvmc>
to merely print out what it would have done.

=item B<-v> or B<--verbose>

This option will cause B<llvmc> to print out (on standard output) each of the 
actions it takes to accomplish the objective. The output will immediately
precede the invocation of other tools.

=item B<--stats>

Print all statistics gathered during the compilation to the standard error. 
Note that this option is merely passed through to the sub-tools to do with 
as they please.

=item B<--time-passes>

Record the amount of time needed for each optimization pass and print it 
to standard error. Like B<--stats> this option is just passed through to
the sub-tools to do with as they please.

=item B<--time-programs>

Record the amount of time each program (compilation tool) takes and print
it to the standard error. 

=back

=head2 Language Specific Options

=over

=item B<-T,pre>=I<options>

Pass an arbitrary option to the pre-processor.

=item B<-T,opt>=I<options>

Pass an arbitrary option to the optimizer.

=item B<-T,lnk>=I<options>

Pass an arbitrary option to the linker.

=item B<-T,asm>=I<options>

Pass an arbitrary option to the code generator.

=back

=head2 C/C++ Specific Options

=over

=item B<-I>F<path>

This option is just passed through to a C or C++ front end compiler to tell it
where include files can be found.

=item B<-D>F<symbol>

This option is just passed through to a C or C++ front end compiler to tell it
to define a symbol.

=back

=head2 Miscellaneous Options

=over

=item B<--help>

Print a summary of command line options.

=item B<--version>

This option will cause B<llvmc> to print out its version number and terminate.

=back

=head2 Advanced Options

You better know what you're doing if you use these options. Improper use
of these options can produce drastically wrong results.

=over 

=item B<--config-dir> F<dirname>

This option tells B<llvmc> to read configuration data from the I<directory>
named F<dirname>. Data from such directories will be read in the order
specified on the command line after all other standard configuration files have
been read. This allows users or groups of users to conveniently create 
their own configuration directories in addition to the standard ones to which 
they may not have write access.

=back


=head2 Unimplemented Options

The options below are not currently implemented in B<llvmc> but will be
eventually. They are documented here as "future design".

=over

=item B<--show-config> I<[suffixes...]>

When this option is given, the only action taken by B<llvmc> is to show its
final configuration state in the form of a configuration file. No compilation
tasks will be conducted when this option is given; processing will stop once
the configuration has been printed. The optional (comma separated) list of 
suffixes controls what is printed. Without any suffixes, the configuration
for all languages is printed. With suffixes, only the languages pertaining
to those file suffixes will be printed. The configuration information is
printed after all command line options and configuration files have been
read and processed. This allows the user to verify that the correct
configuration data has been read by B<llvmc>.

=item B<--config> :I<section>:I<name>=I<value>

This option instructs B<llvmc> to accept I<value> as the value for configuration
item I<name> in the section named I<section>. This is a quick way to override
a configuration item on the command line without resorting to changing the
configuration files. 

=item B<--config-only-from> F<dirname>

This option tells B<llvmc> to skip the normal processing of configuration
files and only configure from the contents of the F<dirname> directory. Multiple
B<--config-only-from> options may be given in which case the directories are
read in the order given on the command line.

=item B<--emit-raw-code>

No optimization is done whatsoever. The compilers invoked by B<llvmc> with 
this option given will be instructed to produce raw, unoptimized code.  This 
option is useful only to front end language developers and therefore does not 
participate in the list of B<-O> options. This is distinctly different from
the B<-O0> option (a synonym for B<-O1>) because those optimizations will
reduce code size to make compilation faster. With B<--emit-raw-code>, only
the full raw code produced by the compiler will be generated.

=back


=head1 EXIT STATUS

If B<llvmc> succeeds, it will exit with 0.  Otherwise, if an error
occurs, it will exit with a non-zero value and no compilation actions
will be taken. If one of the compilation tools returns a non-zero 
status, pending actions will be discarded and B<llvmc> will return the
same result code as the failing compilation tool.

=head1 DEFICIENCIES

B<llvmc> is considered an experimental LLVM tool because it has these
deficiencies: 

=over

=item Insufficient support for native linking

Because B<llvm-ld> doesn't handle native linking, neither can B<llvmc>

=item Poor configuration support

The support for configuring new languages, etc. is weak. There are many
command line configurations that cannot be achieved with the current
support. Furthermore the grammar is cumbersome for configuration files.
Please see L<http://llvm.org/PR686> for further details.

=item Does not handle target specific configurations

This is one of the major deficiencies, also addressed in 
L<http://llvm.org/PR686>

=back

=head1 SEE ALSO

L<llvm-as|llvm-as>, L<llvm-dis|llvm-dis>, L<llc|llc>, L<llvm-link|llvm-link>

=head1 AUTHORS

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

=cut
