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

记录每个过程所需的时间量,并将报告打印到标准错误。

--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) 区段。

调优/配置选项

--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)