llvm-reduce - LLVM 自動化測試案例縮減工具。¶
概要¶
llvm-reduce [選項] [輸入…]
描述¶
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>¶
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。