llc - LLVM static compiler
==========================

SYNOPSIS
--------

:program:`llc` [*options*] [*filename*]

DESCRIPTION
-----------

The :program:`llc` command compiles LLVM source inputs into assembly language
for a specified architecture.  The assembly language output can then be passed
through a native assembler and linker to generate a native executable.

The choice of architecture for the output assembly code is automatically
determined from the input file, unless the :option:`-march` option is used to
override the default.

OPTIONS
-------

If ``filename`` is "``-``" or omitted, :program:`llc` reads from standard input.
Otherwise, it will from ``filename``.  Inputs can be in either the LLVM assembly
language format (``.ll``) or the LLVM bitcode format (``.bc``).

If the :option:`-o` option is omitted, then :program:`llc` will send its output
to standard output if the input is from standard input.  If the :option:`-o`
option specifies "``-``", then the output will also be sent to standard output.

If no :option:`-o` option is specified and an input file other than "``-``" is
specified, then :program:`llc` creates the output filename by taking the input
filename, removing any existing ``.bc`` extension, and adding a ``.s`` suffix.

Other :program:`llc` options are described below.

End-user Options
~~~~~~~~~~~~~~~~

.. option:: -help

 Print a summary of command line options.

.. option:: -O=uint

 Generate code at different optimization levels.  These correspond to the
 ``-O0``, ``-O1``, ``-O2``, and ``-O3`` optimization levels used by
 :program:`llvm-gcc` and :program:`clang`.

.. option:: -mtriple=<target triple>

 Override the target triple specified in the input file with the specified
 string.

.. option:: -march=<arch>

 Specify the architecture for which to generate assembly, overriding the target
 encoded in the input file.  See the output of ``llc -help`` for a list of
 valid architectures.  By default this is inferred from the target triple or
 autodetected to the current architecture.

.. option:: -mcpu=<cpuname>

 Specify a specific chip in the current architecture to generate code for.
 By default this is inferred from the target triple and autodetected to
 the current architecture.  For a list of available CPUs, use:

 .. code-block:: none

   llvm-as < /dev/null | llc -march=xyz -mcpu=help

.. option:: -mattr=a1,+a2,-a3,...

 Override or control specific attributes of the target, such as whether SIMD
 operations are enabled or not.  The default set of attributes is set by the
 current CPU.  For a list of available attributes, use:

 .. code-block:: none

   llvm-as < /dev/null | llc -march=xyz -mattr=help

.. option:: --disable-fp-elim

 Disable frame pointer elimination optimization.

.. option:: --disable-excess-fp-precision

 Disable optimizations that may produce excess precision for floating point.
 Note that this option can dramatically slow down code on some systems
 (e.g. X86).

.. option:: --enable-no-infs-fp-math

 Enable optimizations that assume no Inf values.

.. option:: --enable-no-nans-fp-math

 Enable optimizations that assume no NAN values.

.. option:: --enable-unsafe-fp-math

 Enable optimizations that make unsafe assumptions about IEEE math (e.g. that
 addition is associative) or may not work for all input ranges.  These
 optimizations allow the code generator to make use of some instructions which
 would otherwise not be usable (such as ``fsin`` on X86).

.. option:: --enable-correct-eh-support

 Instruct the **lowerinvoke** pass to insert code for correct exception
 handling support.  This is expensive and is by default omitted for efficiency.

.. option:: --stats

 Print statistics recorded by code-generation passes.

.. option:: --time-passes

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

.. option:: --load=<dso_path>

 Dynamically load ``dso_path`` (a path to a dynamically shared object) that
 implements an LLVM target.  This will permit the target name to be used with
 the :option:`-march` option so that code can be generated for that target.

Tuning/Configuration Options
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. option:: --print-machineinstrs

 Print generated machine code between compilation phases (useful for debugging).

.. option:: --regalloc=<allocator>

 Specify the register allocator to use.  The default ``allocator`` is *local*.
 Valid register allocators are:

 *simple*

  Very simple "always spill" register allocator

 *local*

  Local register allocator

 *linearscan*

  Linear scan global register allocator

 *iterativescan*

  Iterative scan global register allocator

.. option:: --spiller=<spiller>

 Specify the spiller to use for register allocators that support it.  Currently
 this option is used only by the linear scan register allocator.  The default
 ``spiller`` is *local*.  Valid spillers are:

 *simple*

  Simple spiller

 *local*

  Local spiller

Intel IA-32-specific Options
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. option:: --x86-asm-syntax=[att|intel]

 Specify whether to emit assembly code in AT&T syntax (the default) or Intel
 syntax.

EXIT STATUS
-----------

If :program:`llc` succeeds, it will exit with 0.  Otherwise, if an error
occurs, it will exit with a non-zero value.

SEE ALSO
--------

lli

