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。