llvm llc命令详解(llvm编译器)

概要

llc [options] [filename]

描述

llc命令编译LLVM源文件到用于指定的体系结构的汇编语言。然后,汇编语言输出可以通过本机汇编器和链接器传递,以生成本机可执行文件。

除非使用-march选项覆盖默认值,否则将自输入文件中自动确定输出汇编代码的体系结构选择。

如果filename-或省略,则llc从标准输入读取。否则,它将来自filename。输入可以是LLVM汇编语言格式(.ll)或LLVM bitcode格式(.bc)。

如果-o省略该选项,则如果输入来自标准输入,则llc将其输出发送到标准输出。如果-o选项指定” -“,则输出也将发送到标准输出。

如果未-o指定任何选项且指定了” -“ 以外的输入文件,则llc通过获取输入文件名,删除任何现有.bc扩展名并添加.s后缀来创建输出文件名。

选项

  • -help

    打印命令行选项的摘要。

  • -O=uint

    生成不同优化级别的代码。这些对应于clang的 -O0-O1-O2,和-O3优化所使用的优化级别。

  • -mtriple=traget 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-unsafe-fp-math

    启用对IEEE数学做出不安全假设的优化(例如,该添加是关联的),或者可能不适用于所有输入范围。这些优化允许代码生成器使用一些原本不可用的指令(例如fsin在X86上)。

  • –stats

    打印由代码生成通行证记录的统计信息。

  • –time-passes

    记录每次传递所需的时间并将报告输出到标准错误。

  • –load=dso_path

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

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

    指定应遵循的EABI版本。有效的EABI版本是 gnu*, *45。默认值取决于三元组。

  • -stack-size-section

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

  • -remarks-section

    发出.remarks(ELF)/__remarks(MachO)部分,其中包含有关备注诊断的元数据。

调整/配置选项

  • –print-machineinstrs

    在编译阶段之间打印生成的机器代码(对调试很有用)。

  • –regalloc=allocator

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

    • basic:基本寄存器分配器。
    • fast:快速寄存器分配器。它是未优化代码的默认值。
    • greedy:贪婪的注册分配器。它是优化代码的默认值。
    • pbqp:基于”分区布尔二次规划”的寄存器分配器。
  • –spiller=spiller

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

    • simple: 简单spiller
    • local:本地spiller

Intel IA-32选项

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

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

退出状态

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

另请参见

lli