Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 1 | opt - LLVM optimizer |
| 2 | ==================== |
| 3 | |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 4 | SYNOPSIS |
| 5 | -------- |
| 6 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 7 | :program:`opt` [*options*] [*filename*] |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 8 | |
| 9 | DESCRIPTION |
| 10 | ----------- |
| 11 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 12 | The :program:`opt` command is the modular LLVM optimizer and analyzer. It |
| 13 | takes LLVM source files as input, runs the specified optimizations or analyses |
| 14 | on it, and then outputs the optimized file or the analysis results. The |
| 15 | function of :program:`opt` depends on whether the :option:`-analyze` option is |
| 16 | given. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 17 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 18 | When :option:`-analyze` is specified, :program:`opt` performs various analyses |
| 19 | of the input source. It will usually print the results on standard output, but |
| 20 | in a few cases, it will print output to standard error or generate a file with |
| 21 | the analysis output, which is usually done when the output is meant for another |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 22 | program. |
| 23 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 24 | While :option:`-analyze` is *not* given, :program:`opt` attempts to produce an |
| 25 | optimized output file. The optimizations available via :program:`opt` depend |
| 26 | upon what libraries were linked into it as well as any additional libraries |
| 27 | that have been loaded with the :option:`-load` option. Use the :option:`-help` |
| 28 | option to determine what optimizations you can use. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 29 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 30 | If ``filename`` is omitted from the command line or is "``-``", :program:`opt` |
| 31 | reads its input from standard input. Inputs can be in either the LLVM assembly |
| 32 | language format (``.ll``) or the LLVM bitcode format (``.bc``). |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 33 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 34 | If an output filename is not specified with the :option:`-o` option, |
| 35 | :program:`opt` writes its output to the standard output. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 36 | |
| 37 | OPTIONS |
| 38 | ------- |
| 39 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 40 | .. option:: -f |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 41 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 42 | Enable binary output on terminals. Normally, :program:`opt` will refuse to |
| 43 | write raw bitcode output if the output stream is a terminal. With this option, |
| 44 | :program:`opt` will write raw bitcode regardless of the output device. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 45 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 46 | .. option:: -help |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 47 | |
| 48 | Print a summary of command line options. |
| 49 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 50 | .. option:: -o <filename> |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 51 | |
| 52 | Specify the output filename. |
| 53 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 54 | .. option:: -S |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 55 | |
| 56 | Write output in LLVM intermediate language (instead of bitcode). |
| 57 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 58 | .. option:: -{passname} |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 59 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 60 | :program:`opt` provides the ability to run any of LLVM's optimization or |
| 61 | analysis passes in any order. The :option:`-help` option lists all the passes |
| 62 | available. The order in which the options occur on the command line are the |
| 63 | order in which they are executed (within pass constraints). |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 64 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 65 | .. option:: -std-compile-opts |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 66 | |
| 67 | This is short hand for a standard list of *compile time optimization* passes. |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 68 | This is typically used to optimize the output from the llvm-gcc front end. It |
| 69 | might be useful for other front end compilers as well. To discover the full |
| 70 | set of options available, use the following command: |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 71 | |
Dmitri Gribenko | 0d887a0 | 2012-06-12 15:45:07 +0000 | [diff] [blame] | 72 | .. code-block:: sh |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 73 | |
| 74 | llvm-as < /dev/null | opt -std-compile-opts -disable-output -debug-pass=Arguments |
| 75 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 76 | .. option:: -disable-inlining |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 77 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 78 | This option is only meaningful when :option:`-std-compile-opts` is given. It |
| 79 | simply removes the inlining pass from the standard list. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 80 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 81 | .. option:: -disable-opt |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 82 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 83 | This option is only meaningful when :option:`-std-compile-opts` is given. It |
| 84 | disables most, but not all, of the :option:`-std-compile-opts`. The ones that |
| 85 | remain are :option:`-verify`, :option:`-lower-setjmp`, and |
| 86 | :option:`-funcresolve`. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 87 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 88 | .. option:: -strip-debug |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 89 | |
| 90 | This option causes opt to strip debug information from the module before |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 91 | applying other optimizations. It is essentially the same as :option:`-strip` |
| 92 | but it ensures that stripping of debug information is done first. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 93 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 94 | .. option:: -verify-each |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 95 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 96 | This option causes opt to add a verify pass after every pass otherwise |
| 97 | specified on the command line (including :option:`-verify`). This is useful |
| 98 | for cases where it is suspected that a pass is creating an invalid module but |
| 99 | it is not clear which pass is doing it. The combination of |
| 100 | :option:`-std-compile-opts` and :option:`-verify-each` can quickly track down |
| 101 | this kind of problem. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 102 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 103 | .. option:: -profile-info-file <filename> |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 104 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 105 | Specify the name of the file loaded by the ``-profile-loader`` option. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 106 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 107 | .. option:: -stats |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 108 | |
| 109 | Print statistics. |
| 110 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 111 | .. option:: -time-passes |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 112 | |
| 113 | Record the amount of time needed for each pass and print it to standard |
| 114 | error. |
| 115 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 116 | .. option:: -debug |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 117 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 118 | If this is a debug build, this option will enable debug printouts from passes |
| 119 | which use the ``DEBUG()`` macro. See the `LLVM Programmer's Manual |
| 120 | <../ProgrammersManual.html>`_, section ``#DEBUG`` for more information. |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 121 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 122 | .. option:: -load=<plugin> |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 123 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 124 | Load the dynamic object ``plugin``. This object should register new |
| 125 | optimization or analysis passes. Once loaded, the object will add new command |
| 126 | line options to enable various optimizations or analyses. To see the new |
| 127 | complete list of optimizations, use the :option:`-help` and :option:`-load` |
| 128 | options together. For example: |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 129 | |
Dmitri Gribenko | 0d887a0 | 2012-06-12 15:45:07 +0000 | [diff] [blame] | 130 | .. code-block:: sh |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 131 | |
| 132 | opt -load=plugin.so -help |
| 133 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 134 | .. option:: -p |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 135 | |
| 136 | Print module after each transformation. |
| 137 | |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 138 | EXIT STATUS |
| 139 | ----------- |
| 140 | |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 141 | If :program:`opt` succeeds, it will exit with 0. Otherwise, if an error |
Daniel Dunbar | 3b709d5 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 142 | occurs, it will exit with a non-zero value. |
Dmitri Gribenko | f03b5e9 | 2012-11-29 19:02:50 +0000 | [diff] [blame] | 143 | |