mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 05:36:05 +00:00

The script is based on an example provided by Tim Northover (https://github.com/TNorthover).
138 lines
3.7 KiB
ReStructuredText
138 lines
3.7 KiB
ReStructuredText
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:: --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.
|
|
|
|
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`.
|