llvm-reduce - LLVM 自動テストケース縮小ツール。

概要

llvm-reduce [options] [input…]

説明

llvm-reduce ツールは、LLVM テストケースのサイズを縮小するために使用できるプロジェクトです。これは、LLVM テストケースから冗長または不要なコードを削除し、バグを検出する能力を維持することで機能します。

input が「-」の場合、llvm-reduce は標準入力から読み込みます。それ以外の場合は、指定された filenames から読み込みます。

LLVM-Reduce は、LLVM テストケースのサイズと複雑さを軽減するための便利なツールであり、LLVM コンパイラ基盤の問題を特定およびデバッグするのに役立ちます。

汎用オプション

--help

利用可能なオプションを表示します (より詳細な情報を表示するには --help-hidden を使用)。

--abort-on-invalid-reduction

縮小の結果、無効な IR が生成された場合、中止します

--in-place

警告: このオプションは、入力ファイルを縮小されたバージョンに置き換えます!

--ir-passes=<string>

パスパイプラインのテキストによる説明。 opt -passes に渡されるものと同じです。

-j <uint>

チャンクの処理に使用する最大スレッド数。並列処理を無効にするには 1 に設定します。

--max-pass-iterations=<int>

デルタパスのフルセットを実行する最大回数 (デフォルト=5)。

--mtriple=<string>

ターゲットトリプルを設定します。

--preserve-debug-environment

クラッシュデバッグに使用される機能 (クラッシュレポート、llvm-symbolizer、コアダンプ) を無効にしません

--print-delta-passes

--delta-passes にカンマ区切りリストとして渡すことができるデルタパスのリストを出力します。

--skip-delta-passes=<string>

実行しないデルタパスをカンマで区切って指定します。デフォルトでは、すべてのデルタパスを実行します。

--starting-granularity-level=<uint>

最初のテストの前にチャンクを分割する回数。

注: 粒度は、縮小プロセスが動作する詳細レベルを指します。粒度が低いほど、縮小プロセスがより粗いレベルで動作し、粒度が高いほど、より細かいレベルで動作することを意味します。

--test=<string>

実行する興味深いテストの名前。

--test-arg=<string>

興味深いテストに渡される引数。

--verbose

追加のデバッグ情報を出力します。

--write-tmp-files-as-bitcode

一時ファイルを常にテキスト形式の IR ではなくビットコードとして書き込みます。

-x={ir|mir}

入力言語を ir または mir として指定します。

終了ステータス

llvm-reduce は、通常の操作では 0 を返します。エラーが発生した場合は、0 以外の終了コードを返します。

llvm-reduce を使用して、コンパイラのクラッシュを引き起こすテストを簡略化できます。

たとえば、opt が IR ファイル test.ll で、-O2 で実行すると、WhateverFile.cpp の 1234 行目でアサーションエラーが発生してクラッシュすると仮定します。

test.ll のテストケースは、次のコマンドを呼び出すことで縮小できます。

$(LLVM_BUILD_FOLDER)/bin/llvm-reduce --test=script.sh <path to>/test.ll

test オプションに渡されるシェルスクリプトは、次のようになります

$(LLVM_BUILD_FOLDER)/bin/opt -O2 -disable-output $1 \
  |& grep "Assertion failed at line 1234 of WhateverFile.cpp"

(このスクリプトでは、grep は文字列を見つけると 0 で終了し、それがスクリプト全体のステータスになります。)

この例は、llc など、IR ファイルを処理する他のツールにも一般化できます。