# 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:
  <di> x86
    IA-32 (Pentium and above)
  <di> sparc
    SPARC V9

- -o <filename>
  Specify the output filename.

- -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 simple. Valid register allocators are:
  <di> simple
    Very simple register allocator
  <di> local
    Local register allocator

#### Sparc Specific Options

- -disable-peephole
  Disable peephole optimization pass.

- -disable-preopt
  Disable optimizations prior to instruction selection.

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