1 llc - LLVM static compiler 2 ========================== 3 4 SYNOPSIS 5 -------- 6 7 :program:`llc` [*options*] [*filename*] 8 9 DESCRIPTION 10 ----------- 11 12 The :program:`llc` command compiles LLVM source inputs into assembly language 13 for a specified architecture. The assembly language output can then be passed 14 through a native assembler and linker to generate a native executable. 15 16 The choice of architecture for the output assembly code is automatically 17 determined from the input file, unless the :option:`-march` option is used to 18 override the default. 19 20 OPTIONS 21 ------- 22 23 If ``filename`` is "``-``" or omitted, :program:`llc` reads from standard input. 24 Otherwise, it will from ``filename``. Inputs can be in either the LLVM assembly 25 language format (``.ll``) or the LLVM bitcode format (``.bc``). 26 27 If the :option:`-o` option is omitted, then :program:`llc` will send its output 28 to standard output if the input is from standard input. If the :option:`-o` 29 option specifies "``-``", then the output will also be sent to standard output. 30 31 If no :option:`-o` option is specified and an input file other than "``-``" is 32 specified, then :program:`llc` creates the output filename by taking the input 33 filename, removing any existing ``.bc`` extension, and adding a ``.s`` suffix. 34 35 Other :program:`llc` options are described below. 36 37 End-user Options 38 ~~~~~~~~~~~~~~~~ 39 40 .. option:: -help 41 42 Print a summary of command line options. 43 44 .. option:: -O=uint 45 46 Generate code at different optimization levels. These correspond to the 47 ``-O0``, ``-O1``, ``-O2``, and ``-O3`` optimization levels used by 48 :program:`llvm-gcc` and :program:`clang`. 49 50 .. option:: -mtriple=<target triple> 51 52 Override the target triple specified in the input file with the specified 53 string. 54 55 .. option:: -march=<arch> 56 57 Specify the architecture for which to generate assembly, overriding the target 58 encoded in the input file. See the output of ``llc -help`` for a list of 59 valid architectures. By default this is inferred from the target triple or 60 autodetected to the current architecture. 61 62 .. option:: -mcpu=<cpuname> 63 64 Specify a specific chip in the current architecture to generate code for. 65 By default this is inferred from the target triple and autodetected to 66 the current architecture. For a list of available CPUs, use: 67 68 .. code-block:: none 69 70 llvm-as < /dev/null | llc -march=xyz -mcpu=help 71 72 .. option:: -mattr=a1,+a2,-a3,... 73 74 Override or control specific attributes of the target, such as whether SIMD 75 operations are enabled or not. The default set of attributes is set by the 76 current CPU. For a list of available attributes, use: 77 78 .. code-block:: none 79 80 llvm-as < /dev/null | llc -march=xyz -mattr=help 81 82 .. option:: --disable-fp-elim 83 84 Disable frame pointer elimination optimization. 85 86 .. option:: --disable-excess-fp-precision 87 88 Disable optimizations that may produce excess precision for floating point. 89 Note that this option can dramatically slow down code on some systems 90 (e.g. X86). 91 92 .. option:: --enable-no-infs-fp-math 93 94 Enable optimizations that assume no Inf values. 95 96 .. option:: --enable-no-nans-fp-math 97 98 Enable optimizations that assume no NAN values. 99 100 .. option:: --enable-unsafe-fp-math 101 102 Enable optimizations that make unsafe assumptions about IEEE math (e.g. that 103 addition is associative) or may not work for all input ranges. These 104 optimizations allow the code generator to make use of some instructions which 105 would otherwise not be usable (such as ``fsin`` on X86). 106 107 .. option:: --enable-correct-eh-support 108 109 Instruct the **lowerinvoke** pass to insert code for correct exception 110 handling support. This is expensive and is by default omitted for efficiency. 111 112 .. option:: --stats 113 114 Print statistics recorded by code-generation passes. 115 116 .. option:: --time-passes 117 118 Record the amount of time needed for each pass and print a report to standard 119 error. 120 121 .. option:: --load=<dso_path> 122 123 Dynamically load ``dso_path`` (a path to a dynamically shared object) that 124 implements an LLVM target. This will permit the target name to be used with 125 the :option:`-march` option so that code can be generated for that target. 126 127 Tuning/Configuration Options 128 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 129 130 .. option:: --print-machineinstrs 131 132 Print generated machine code between compilation phases (useful for debugging). 133 134 .. option:: --regalloc=<allocator> 135 136 Specify the register allocator to use. The default ``allocator`` is *local*. 137 Valid register allocators are: 138 139 *simple* 140 141 Very simple "always spill" register allocator 142 143 *local* 144 145 Local register allocator 146 147 *linearscan* 148 149 Linear scan global register allocator 150 151 *iterativescan* 152 153 Iterative scan global register allocator 154 155 .. option:: --spiller=<spiller> 156 157 Specify the spiller to use for register allocators that support it. Currently 158 this option is used only by the linear scan register allocator. The default 159 ``spiller`` is *local*. Valid spillers are: 160 161 *simple* 162 163 Simple spiller 164 165 *local* 166 167 Local spiller 168 169 Intel IA-32-specific Options 170 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 171 172 .. option:: --x86-asm-syntax=[att|intel] 173 174 Specify whether to emit assembly code in AT&T syntax (the default) or Intel 175 syntax. 176 177 EXIT STATUS 178 ----------- 179 180 If :program:`llc` succeeds, it will exit with 0. Otherwise, if an error 181 occurs, it will exit with a non-zero value. 182 183 SEE ALSO 184 -------- 185 186 lli 187 188