| 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`. |