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

記錄每個階段所需的時間,並將報告列印到標準錯誤輸出。

--load=<dso_path>

動態載入實作 LLVM 目標的 dso_path(動態共享物件的路徑)。這將允許在 -march 選項中使用目標名稱,以便為該目標產生程式碼。

-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 結束。否則,如果發生錯誤,它將會以非零值結束。

另請參閱

lli(1)