llvm-reduce - LLVM 自動化測試用例精簡器

概要

llvm-reduce [選項] [輸入…]

描述

llvm-reduce 工具專案可用於縮減 LLVM 測試用例的大小。它透過從 LLVM 測試用例中移除冗餘或不必要的程式碼來運作,同時保留其偵測錯誤的能力。

如果 輸入 是「-」,llvm-reduce 會從標準輸入讀取。否則,它將從指定的 檔名 讀取。

LLVM-Reduce 是一個用於縮減 LLVM 測試用例的大小和複雜性的有用工具,可以更輕鬆地在 LLVM 編譯器基礎架構中識別和除錯問題。

通用選項

--help

顯示可用選項(–help-hidden 可顯示更多)。

--abort-on-invalid-reduction

如果任何縮減導致無效的 IR,則中止

--in-place

警告:此選項會將您的輸入檔案替換為縮減後的版本!

--ir-passes=<string>

Pass 管線的文字描述,與傳遞給 opt -passes 的內容相同。

-j <uint>

用於處理區塊的最大執行緒數。設定為 1 可停用平行處理。

--max-pass-iterations=<int>

執行完整 delta pass 集的最大次數(預設值 = 5)。

--mtriple=<string>

設定目標三元組。

--preserve-debug-environment

不要停用用於當機除錯的功能(當機報告、llvm-symbolizer 和核心傾印)

--print-delta-passes

列印 delta pass 列表,可作為以逗號分隔的清單傳遞給 –delta-passes。

--skip-delta-passes=<string>

要跳過的 Delta Pass,以逗號分隔。預設情況下,會執行所有 Delta Pass。

--starting-granularity-level=<uint>

在第一次測試之前要分割區塊的次數。

注意:粒度是指縮減過程運作的細節程度。較低的粒度表示縮減過程以較粗粒度的層級運作,而較高的粒度表示它以較細粒度的層級運作。

--test=<string>

要執行的有趣性測試的名稱。

--test-arg=<string>

傳遞給有趣性測試的參數。

--verbose

列印額外的除錯資訊。

--write-tmp-files-as-bitcode

一律將暫存檔案寫入為位元碼,而不是文字格式的 IR。

-x={ir|mir}

輸入語言為 ir 或 mir。

結束狀態

llvm-reduce 在正常操作下會返回 0。如果發生任何錯誤,它會返回非零的結束代碼。

範例

llvm-reduce 可用於簡化導致編譯器崩潰的測試。

例如,假設 opt 在 IR 檔案 test.ll 上崩潰,並出現錯誤訊息 Assertion failed at line 1234 of WhateverFile.cpp,當以 -O2 執行時。

可以透過叫用以下命令來縮減 test.ll 的測試案例

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

傳遞給選項 test 的 shell 腳本包含以下內容

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

(在此腳本中,如果 grep 找到字串,它會以 0 結束,並成為整個腳本的狀態。)

此範例可以推廣到處理 IR 檔案的其他工具,例如 llc