| 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> | |
| Delta passes to run, separated by commas. By default, run all delta passes. | |
| .. 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 --delta-passes as a comma separated liste. | |
| .. 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: | |
| .. code-block:: 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: | |
| .. code-block:: 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`. |