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

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

--load=<dso_path>

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

-meabi=[default|gnu|4|5]

指定應符合哪個 EABI 版本。有效的 EABI 版本為 gnu45。預設值 (default) 取決於三元組。

-stack-size-section

發出包含堆疊大小中繼資料的 .stack_sizes 區段。該區段包含函數符號值 (指標大小) 和堆疊大小 (無號 LEB128) 的配對陣列。堆疊大小值僅包含在函數序言中配置的空間。不包含具有動態堆疊配置的函數。

-remarks-section

發出 __remarks (MachO) 區段,其中包含關於 remark 診斷的中繼資料。

調整/組態選項

--print-after-isel

在指令選擇後印出產生的機器碼 (對除錯很有用)。

--regalloc=<allocator>

指定要使用的暫存器分配器。有效的暫存器分配器為

basic

基本暫存器分配器。

fast

快速暫存器分配器。它是未最佳化程式碼的預設值。

greedy

貪婪暫存器分配器。它是最佳化程式碼的預設值。

pbqp

基於「分割布林二次規劃」的暫存器分配器。

--spiller=<spiller>

指定要用於支援它的暫存器分配器的溢出器。目前,此選項僅由線性掃描暫存器分配器使用。預設 spillerlocal。有效的溢出器為

simple

簡單溢出器

local

本地溢出器

Intel IA-32 特定選項

--x86-asm-syntax=[att|intel]

指定是否以 AT&T 語法 (預設) 或 Intel 語法發出組合碼。

結束狀態

如果 llc 成功,它將以 0 結束。否則,如果發生錯誤,它將以非零值結束。

參見

lli(1)