# LLVM: `llc` tool

### NAME

`llc`

### SYNOPSIS

`llc [options] [filename]`

### DESCRIPTION

The `llc` command compiles LLVM bytecode into assembly language for a specified architecture. The assembly language output can then be passed through a native assembler and linker to generate native code.

The choice of architecture for the output assembly code is determined as follows:

- If the user has specified an architecture with the -m option, use that architecture.

- Examine the input LLVM bytecode file:
  - If it specifies little endian and a pointer size of 32 bits, select the x86 architecture.

  - If it specifies big endian and a pointer size of 64 bit pointers, select the SparcV9 architecture.

- If `llc` was compiled on an architecture for which it can generate code, select the architecture upon which `llc` was compiled.

- Print a message to the user asking him or her to specify the output architecture explicitly.

If filename is not specified, or if filename is -, `llc` reads its input from standard input. Otherwise, it will read its input from filename.

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

If no -o option is specified and an input file other than - is specified, then `llc` creates the output filename as follows:

- If the file ends in .bc, then the .bc suffix is removed, and the .s suffix is appended.

- Otherwise, the .s suffix is appended to the input filename.

### OPTIONS

- -f
  Overwrite output files

- -m<arch>
  Specify the architecture for which to generate assembly. Valid architectures are:
  x86
    IA-32 (Pentium and above)
  sparcv9
    SPARC V9
  c
    Emit C code

- -o <filename>
  Specify the output filename.

- -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.

- -help
  Print a summary of command line options.

- -stats
  Print statistics.

- -time-passes
  Record the amount of time needed for each pass and print it to standard error.

#### X86 Specific Options

- -disable-fp-elim
  Disable frame pointer elimination optimization.

- -disable-pattern-isel
  Use the 'simple' X86 instruction selector (the default).

- -print-machineinstrs
  Print generated machine code.

- -regalloc=<ra>
  Specify the register allocator to use. The default is local. Valid register allocators are:

  simple
    Very simple register allocator
  local
    Local register allocator
  linearscan
    Linear scan global register allocator (experimental)
- -spiller=<sp>
  Specify the spiller to use for register allocators that support it. Currently this option is used by the linear scan register allocator. The default is local. Valid spillers are:

  simple
    Simple spiller
  local
    Local spiller

#### Sparc Specific Options

- -disable-peephole
  Disable peephole optimization pass.

- -disable-sched
  Disable local scheduling pass.

- -disable-strip
  Do not strip the LLVM bytecode included in executable.

- -enable-maps
  Emit LLVM-to-MachineCode mapping info to assembly.

### EXIT STATUS

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

### SEE ALSO

`lli`

Maintained by the LLVM Team.