llc - LLVM 靜態編譯器¶
概要¶
llc [選項] [檔案名稱]
描述¶
llc 命令會將 LLVM 原始碼輸入編譯成指定架構的組合語言。然後,組合語言輸出可以透過原生組譯器和連結器傳遞,以產生原生可執行檔。
輸出組合碼的架構選擇會自動從輸入檔案中決定,除非使用 -march
選項來覆寫預設值。
選項¶
如果 filename
是 “-
” 或省略,llc 會從標準輸入讀取。否則,它將從 filename
讀取。輸入可以是 LLVM 組譯語言格式 (.ll
) 或 LLVM 位元碼格式 (.bc
)。
如果省略 -o
選項,則如果輸入來自標準輸入,llc 會將其輸出傳送到標準輸出。如果 -o
選項指定 “-
”,則輸出也將傳送到標準輸出。
如果未指定 -o
選項且指定了 “-
” 以外的輸入檔案,則 llc 會透過取得輸入檔案名稱、移除任何現有的 .bc
副檔名,並新增 .s
後綴來建立輸出檔案名稱。
其他 llc 選項如下所述。
終端使用者選項¶
- -help¶
印出命令列選項的摘要。
- -o <filename>¶
使用
<filename>
作為輸出檔案名稱。請參閱上面的摘要以瞭解更多詳細資訊。
- -O=uint¶
以不同的最佳化層級產生程式碼。這些對應於 clang 使用的
-O0
、-O1
、-O2
和-O3
最佳化層級。
- -mtriple=<target triple>¶
使用指定的字串覆寫輸入檔案中指定的目標三元組。
- -march=<arch>¶
指定要產生組合碼的架構,覆寫輸入檔案中編碼的目標。請參閱
llc -help
的輸出,以取得有效架構的列表。預設情況下,這會從目標三元組推斷或自動偵測為目前的架構。
- -mcpu=<cpuname>¶
在目前的架構中指定要為其產生程式碼的特定晶片。預設情況下,這會從目標三元組推斷或自動偵測為目前的架構。如需可用 CPU 的列表,請使用
llvm-as < /dev/null | llc -march=xyz -mcpu=help
- -filetype=<output file type>¶
指定
llc
應產生的輸出類型。選項為:asm
代表文字組譯碼 ('.s'
)、obj
代表原生物件檔案 ('.o'
) 和null
代表不發出任何內容 (用於效能測試)。請注意,並非所有目標都支援所有選項。
- -mattr=a1,+a2,-a3,...¶
覆寫或控制目標的特定屬性,例如是否啟用 SIMD 運算。預設屬性集由目前的 CPU 設定。如需可用屬性的列表,請使用
llvm-as < /dev/null | llc -march=xyz -mattr=help
- --frame-pointer¶
指定堆疊框架指標消除最佳化的效果 (全部、非葉節點、無)。
- --disable-excess-fp-precision¶
停用可能產生浮點數過高精度的最佳化。請注意,此選項可能會大幅降低某些系統 (例如 X86) 上的程式碼速度。
- --enable-no-infs-fp-math¶
啟用假設沒有 Inf 值的最佳化。
- --enable-no-nans-fp-math¶
啟用假設沒有 NAN 值的最佳化。
- --enable-no-signed-zeros-fp-math¶
啟用假設 0 的符號不重要的 FP 數學最佳化。
- --enable-no-trapping-fp-math¶
啟用設定 FP 例外組建屬性為不使用例外。
- --enable-unsafe-fp-math¶
啟用對 IEEE 數學進行不安全假設 (例如,加法具有結合律) 或可能不適用於所有輸入範圍的最佳化。這些最佳化允許程式碼產生器使用一些原本無法使用的指令 (例如 X86 上的
fsin
)。
- --stats¶
印出程式碼產生階段記錄的統計資訊。
- --time-passes¶
記錄每個階段所需的時間量,並將報告印出到標準錯誤。
- -meabi=[default|gnu|4|5]¶
指定應符合哪個 EABI 版本。有效的 EABI 版本為 gnu、4 和 5。預設值 (default) 取決於三元組。
- -stack-size-section¶
發出包含堆疊大小中繼資料的 .stack_sizes 區段。該區段包含函數符號值 (指標大小) 和堆疊大小 (無號 LEB128) 的配對陣列。堆疊大小值僅包含在函數序言中配置的空間。不包含具有動態堆疊配置的函數。
- -remarks-section¶
發出 __remarks (MachO) 區段,其中包含關於 remark 診斷的中繼資料。
調整/組態選項¶
- --print-after-isel¶
在指令選擇後印出產生的機器碼 (對除錯很有用)。
- --regalloc=<allocator>¶
指定要使用的暫存器分配器。有效的暫存器分配器為
basic
基本暫存器分配器。
fast
快速暫存器分配器。它是未最佳化程式碼的預設值。
greedy
貪婪暫存器分配器。它是最佳化程式碼的預設值。
pbqp
基於「分割布林二次規劃」的暫存器分配器。
- --spiller=<spiller>¶
指定要用於支援它的暫存器分配器的溢出器。目前,此選項僅由線性掃描暫存器分配器使用。預設
spiller
為 local。有效的溢出器為simple
簡單溢出器
local
本地溢出器
Intel IA-32 特定選項¶
- --x86-asm-syntax=[att|intel]¶
指定是否以 AT&T 語法 (預設) 或 Intel 語法發出組合碼。
結束狀態¶
如果 llc 成功,它將以 0 結束。否則,如果發生錯誤,它將以非零值結束。