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=<目标三元组>

用指定的字符串覆盖输入文件中指定的目标三元组。

-march=<架构>

指定要为其生成汇编的架构,覆盖输入文件中编码的目标。有关有效架构的列表,请参阅 llc -help 的输出。默认情况下,这将从目标三元组推断或自动检测为当前架构。

-mcpu=<cpu名称>

指定当前架构中要为其生成代码的特定芯片。默认情况下,这将从目标三元组推断或自动检测为当前架构。有关可用 CPU 的列表,请使用

llvm-as < /dev/null | llc -march=xyz -mcpu=help
-filetype=<输出文件类型>

指定 llc 应该生成的输出类型。选项有:asm 用于文本汇编('.s')、obj 用于本地目标文件('.o')和 null 用于不发出任何内容(用于性能测试)。

请注意,并非所有目标都支持所有选项。

-mattr=a1,+a2,-a3,...

覆盖或控制目标的特定属性,例如是否启用 SIMD 操作。属性的默认集由当前 CPU 设置。有关可用属性的列表,请使用

llvm-as < /dev/null | llc -march=xyz -mattr=help
--frame-pointer

指定帧指针消除优化(all、non-leaf、none)的效果。

--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路径>

动态加载 dso路径(动态共享对象的路径),该路径实现了 LLVM 目标。这将允许使用 -march 选项使用目标名称,以便可以为该目标生成代码。

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

指定应符合哪个 EABI 版本。有效的 EABI 版本为 gnu45。默认值(default)取决于三元组。

-stack-size-section

发出 .stack_sizes 部分,其中包含堆栈大小元数据。该部分包含函数符号值(指针大小)和堆栈大小(无符号 LEB128)对的数组。堆栈大小值仅包括在函数序言中分配的空间。不包括具有动态堆栈分配的函数。

-remarks-section

发出包含有关备注诊断的元数据的 __remarks(MachO)部分。

调整/配置选项

--print-after-isel

在指令选择后打印生成的机器代码(用于调试)。

--regalloc=<分配器>

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

basic

基本寄存器分配器。

fast

快速寄存器分配器。它是未优化代码的默认值。

greedy

贪婪寄存器分配器。它是优化代码的默认选项。

pbqp

基于“分块布尔二次规划”的寄存器分配器。

--spiller=<spiller>

指定用于支持它的寄存器分配器的溢出器。当前,此选项仅由线性扫描寄存器分配器使用。默认的spillerlocal。有效的溢出器有

simple

简单溢出器

local

本地溢出器

Intel IA-32 特定选项

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

指定是否以 AT&T 语法(默认)或 Intel 语法发出汇编代码。

退出状态

如果llc成功,它将以 0 退出。否则,如果发生错误,它将以非零值退出。

另请参见

lli(1)