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