llc - LLVM 静态编译器¶
概要¶
llc [选项] [文件名]
描述¶
llc 命令将 LLVM 源代码输入编译为指定架构的汇编语言。然后,汇编语言输出可以通过本地汇编器和链接器传递,以生成本地可执行文件。
除非使用 -march
选项覆盖默认值,否则将根据输入文件自动确定输出汇编代码的架构。
选项¶
如果 文件名
是“-
”或省略,llc 将从标准输入读取。否则,它将从 文件名
读取。输入可以是 LLVM 汇编语言格式 (.ll
) 或 LLVM 位码格式 (.bc
)。
如果省略 -o
选项,则如果输入来自标准输入,llc 会将其输出发送到标准输出。如果 -o
选项指定“-
”,则输出也将发送到标准输出。
如果没有指定 -o
选项,并且指定了“-
”以外的输入文件,则 llc 通过获取输入文件名,删除任何现有的 .bc
扩展名并添加 .s
后缀来创建输出文件名。
其他 llc 选项如下所述。
最终用户选项¶
- -help¶
打印命令行选项的摘要。
- -o <文件名>¶
使用
<文件名>
作为输出文件名。有关更多详细信息,请参见上面的摘要。
- -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) 區段。
調整/配置選項¶
- --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 結束。否則,如果發生錯誤,它將會以非零值結束。