| # llvm-reduce - LLVM automatic testcase reducer. |
| |
| :::{program} llvm-reduce |
| ::: |
| |
| ## SYNOPSIS |
| |
| {program}`llvm-reduce` \[*options*\] \[*input...*\] |
| |
| ## DESCRIPTION |
| |
| The {program}`llvm-reduce` tool project that can be used for reducing the size of LLVM test cases. |
| It works by removing redundant or unnecessary code from LLVM test cases while still preserving |
| their ability to detect bugs. |
| |
| If `input` is "`-`", {program}`llvm-reduce` reads from standard |
| input. Otherwise, it will read from the specified `filenames`. |
| |
| LLVM-Reduce is a useful tool for reducing the size and |
| complexity of LLVM test cases, making it easier to identify and debug issues in |
| the LLVM compiler infrastructure. |
| |
| ## GENERIC OPTIONS |
| |
| :::{option} --help |
| Display available options (--help-hidden for more). |
| ::: |
| |
| :::{option} --abort-on-invalid-reduction |
| Abort if any reduction results in invalid IR |
| ::: |
| |
| :::{option} --delta-passes=<string> |
| A comma-separated list of delta passes to run. By default, {program}`llvm-reduce` |
| runs all available delta passes for the input format (IR or MIR). When specified, |
| only the listed passes will be executed, in the given order. |
| |
| Available delta passes can be listed using {option}`--print-delta-passes`. |
| Specific passes can also be excluded using {option}`--skip-delta-passes`. |
| If an unrecognized pass name is specified, {program}`llvm-reduce` will report an |
| error and exit. |
| ::: |
| |
| :::{option} --in-place |
| WARNING: This option will replace your input file with the reduced version! |
| ::: |
| |
| :::{option} --ir-passes=<string> |
| A textual description of the pass pipeline, same as what's passed to `opt -passes`. |
| ::: |
| |
| :::{option} -j <uint> |
| Maximum number of threads to use to process chunks. Set to 1 to disable parallelism. |
| ::: |
| |
| :::{option} --max-pass-iterations=<int> |
| Maximum number of times to run the full set of delta passes (default=5). |
| ::: |
| |
| :::{option} --mtriple=<string> |
| Set the target triple. |
| ::: |
| |
| :::{option} --preserve-debug-environment |
| Don't disable features used for crash debugging (crash reports, llvm-symbolizer and core dumps) |
| ::: |
| |
| :::{option} --print-delta-passes |
| Print list of delta passes, passable to {option}`--delta-passes` as a comma-separated list. |
| ::: |
| |
| :::{option} --skip-delta-passes=<string> |
| Delta passes to not run, separated by commas. By default, run all delta passes. |
| ::: |
| |
| :::{option} --skip-verify-interesting-after-counting-chunks |
| Do not validate testcase is interesting after counting chunks. This |
| will save time by avoiding extra executions of the interestingness |
| test, but a warning will no longer be printed on flaky reproducers. |
| ::: |
| |
| :::{option} --starting-granularity-level=<uint> |
| Number of times to divide chunks prior to first test. |
| |
| Note : Granularity refers to the level of detail at which the reduction process operates. |
| A lower granularity means that the reduction process operates at a more coarse-grained level, |
| while a higher granularity means that it operates at a more fine-grained level. |
| ::: |
| |
| :::{option} --test=<string> |
| Name of the interesting-ness test to be run. |
| ::: |
| |
| :::{option} --test-arg=<string> |
| Arguments passed onto the interesting-ness test. |
| ::: |
| |
| :::{option} --verbose |
| Print extra debugging information. |
| ::: |
| |
| :::{option} --write-tmp-files-as-bitcode |
| Always write temporary files as bitcode instead of textual IR. |
| ::: |
| |
| :::{option} -x={ir|mir} |
| Input language as ir or mir. |
| ::: |
| |
| ## EXIT STATUS |
| |
| {program}`llvm-reduce` returns 0 under normal operation. It returns a |
| non-zero exit code if there were any errors. Returns 2 if the |
| interestingness test reported the initial input was not interesting. |
| |
| ## EXAMPLE |
| |
| {program}`llvm-reduce` can be used to simplify a test that causes a |
| compiler crash. |
| |
| For example, let's assume that `opt` is crashing on the IR file |
| `test.ll` with error message `Assertion failed at line 1234 of |
| WhateverFile.cpp`, when running at `-O2`. |
| |
| The test case of `test.ll` can be reduced by invoking the following |
| command: |
| |
| ```bash |
| $(LLVM_BUILD_FOLDER)/bin/llvm-reduce --test=script.sh <path to>/test.ll |
| ``` |
| |
| The shell script passed to the option `test` consists of the |
| following: |
| |
| ```bash |
| $(LLVM_BUILD_FOLDER)/bin/opt -O2 -disable-output $1 \ |
| |& grep "Assertion failed at line 1234 of WhateverFile.cpp" |
| ``` |
| |
| (In this script, `grep` exits with 0 if it finds the string and that |
| becomes the whole script's status.) |
| |
| This example can be generalized to other tools that process IR files, |
| for example `llc`. |
| |