| # opt - LLVM optimizer |
| |
| :::{program} opt |
| ::: |
| |
| ## SYNOPSIS |
| |
| {program}`opt` \[*options*\] \[*filename*\] |
| |
| ## DESCRIPTION |
| |
| The {program}`opt` command is the modular LLVM optimizer and analyzer. It takes |
| LLVM source files as input, runs the specified optimizations or analyses on it, |
| and then outputs the optimized file. The optimizations available via |
| {program}`opt` depend upon what libraries were linked into it as well as any |
| additional libraries that have been loaded with the {option}`-load` option. Use |
| the {option}`-help` option to determine what optimizations you can use. |
| |
| If `filename` is omitted from the command line or is "`-`", {program}`opt` |
| reads its input from standard input. Inputs can be in either the LLVM assembly |
| language format (`.ll`) or the LLVM bitcode format (`.bc`). |
| |
| If an output filename is not specified with the {option}`-o` option, |
| {program}`opt` writes its output to the standard output. |
| |
| ## OPTIONS |
| |
| :::{option} -f |
| Enable binary output on terminals. Normally, {program}`opt` will refuse to |
| write raw bitcode output if the output stream is a terminal. With this option, |
| {program}`opt` will write raw bitcode regardless of the output device. |
| ::: |
| |
| :::{option} -help |
| Print a summary of command line options. |
| ::: |
| |
| :::{option} -o <filename> |
| Specify the output filename. |
| ::: |
| |
| :::{option} -S |
| Write output in LLVM intermediate language (instead of bitcode). |
| ::: |
| |
| :::{option} -passes=<string> |
| A textual (comma-separated) description of the pass pipeline, |
| e.g., `-passes="sroa,instcombine"`. See |
| [invoking opt](../NewPassManager.md#invoking-opt) for more details on the |
| pass pipeline syntax. |
| ::: |
| |
| :::{option} -mtriple=<target triple> |
| Override the target triple specified in the input file with the specified |
| string. |
| ::: |
| |
| :::{option} -mtune=<cpuname> |
| Specify a specific chip microarchitecture in the current architecture |
| to tune code for. By default this is inferred from the target triple and |
| autodetected to the current architecture. For a list of available tuning |
| CPUs, use: |
| |
| ```none |
| llvm-as < /dev/null | opt -march=xyz -mtune=help |
| ``` |
| ::: |
| |
| :::{option} -strip-debug |
| This option causes opt to strip debug information from the module before |
| applying other optimizations. It is essentially the same as `-strip` |
| but it ensures that stripping of debug information is done first. |
| ::: |
| |
| :::{option} -verify-each |
| This option causes opt to add a verify pass after every pass otherwise |
| specified on the command line (including `-verify`). This is useful |
| for cases where it is suspected that a pass is creating an invalid module but |
| it is not clear which pass is doing it. |
| ::: |
| |
| :::{option} -stats |
| Print statistics. |
| ::: |
| |
| :::{option} --save-stats, --save-stats=cwd, --save-stats=obj |
| Save LLVM statistics to a file in the current directory |
| ({option}`--save-stats`/"--save-stats=cwd") or the directory |
| of the output file ("--save-stats=obj") in JSON format. |
| ::: |
| |
| :::{option} -time-passes |
| Record the amount of time needed for each pass and print it to standard |
| error. |
| ::: |
| |
| :::{option} -debug |
| If this is a debug build, this option will enable debug printouts from passes |
| which use the `LLVM_DEBUG()` macro. See {ref}`the LDBG and LLVM_DEBUG() macros |
| and -debug option <debug>` for more |
| information. |
| ::: |
| |
| :::{option} -load=<plugin> |
| Load the dynamic object `plugin`. This object should register new |
| optimization or analysis passes. Once loaded, the object will add new command |
| line options to enable various optimizations or analyses. To see the new |
| complete list of optimizations, use the {option}`-help` and {option}`-load` |
| options together. For example: |
| |
| ```sh |
| opt -load=plugin.so -help |
| ``` |
| ::: |
| |
| :::{option} -print-passes |
| Print all available passes and exit. |
| ::: |
| |
| ## EXIT STATUS |
| |
| If {program}`opt` succeeds, it will exit with 0. Otherwise, if an error |
| occurs, it will exit with a non-zero value. |