llc - LLVM 静态编译器¶
概要¶
llc [options] [filename]
描述¶
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¶
指定帧指针消除优化的效果(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¶
记录每个过程所需的时间量,并将报告打印到标准错误。
- -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 退出。否则,如果发生错误,它将以非零值退出。