llvm lli命令详解(LLVM解释器)

概要

lli [options] [filename] [program args]

描述

lli直接以LLVM bitcode格式执行程序。它采用LLVM bitcode格式的程序,并使用即时编译器或解释器执行它。

lli不是一个模拟器。它不会执行不同体系结构的IR,它只能解释(或JIT编译)主机体系结构。

JIT编译器使用与其他工具(如llc)相同的参数,但它们不一定适用于解释器。

如果未指定filename,则lli从标准输入读取程序的LLVM bitcode。

命令行中指定的可选参数作为参数传递给程序。

一般选项

  • -fake-argv0=executable

    覆盖argv[0]传递给执行程序的值。

  • -force-interpreter={false,true}

    如果设置为true,即使此架构可以使用即时编译器,也请使用解释器。默认为false。

  • -help

    打印命令行选项的摘要。

  • -load=pluginfilename

    导致lli加载名为pluginfilename的插件(共享对象)并将其用于优化。

  • -stats

    从代码生成过程中打印统计信息。目前这仅JIT编译器有意义。

  • -time-passes

    记录每次代码生成所需的时间并将其打印到标准错误。

  • -verison

    打印出lli的版本并退出而不做任何其他事情。

目标选项

  • -mtriple=target triple

    使用指定的字符串覆盖输入bitcode文件中指定的目标三元组。如果选择与当前系统不兼容的体系结构,则可能会导致崩溃。

  • -march=arch

    指定要为其生成程序集的体系结构,覆盖bitcode文件中编码的目标。请参阅llc -help的输出以获取有效体系结构的列表。默认情况下,这是从目标三元组推断或自动检测到当前架构。

  • -mcpu=cpuname

    在当前体系结构中指定特定芯片以生成代码。默认情况下,这是从目标三元组推断出来的,并自动检测到当前架构。有关可用CPU的列表,请使用:

    llvm-as < dev/null | llc -march=xyz -mcpu=help
  • -mattr=a1,+a2,-a3,…

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

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

浮点选项

  • -disable-excess-fp-precision

    禁用可能会提高浮点精度的优化。

  • -enable-no-infs-fp-math

    启用不包含Inf值的优化。

  • -enable-no-nans-fp-math

    启用不采用NAN值的优化。

  • -enable-unsafe-fp-math

    导致lli启用可能降低浮点精度的优化。

  • -soft-float

    导致lli生成软件浮点库调用而不是等效的硬件指令。

代码生成选项

  • -code-model=model

    从以下选择代码模型:

    • default: Target default code model
    • tiny: Tiny code model
    • small: Small code model
    • kernel: Kernel code model
    • medium: Medium code model
    • large: Large code model
  • -disable-post-RA-scheduler

    在寄存器分配后禁用调度。

  • -disable-spill-fusing

    禁止将溢出代码融合到指令中。

  • -jit-enable-eh

    应在即时编译器中启用异常处理。

  • -join-liveintervals

    合并副本(默认= true)。

  • -nozero-initialized-in-bss

    不要将零初始化符号放入BSS部分。

  • -pre-RA-sched=scheduler

    可用的指令调度程序(在寄存器分配之前):

    • default: Best scheduler for the target
    • none: No scheduling: breadth first sequencing
    • simple: Simple two pass scheduling: minimize critical path and maximize processor utilization
    • simple-noitin: Simple two pass scheduling: Same as simple except using generic latency
    • list-burr: Bottom-up register reduction list scheduling
    • list-tdrr: Top-down register reduction list scheduling
    • list-td: Top-down list scheduler -print-machineinstrs - Print generated machine code
  • -regalloc=allocator

    注册分配器使用(默认= linearscan)

    • bigblock: Big-block register allocator
    • linearscan: linear scan register allocator -
    • local: local register allocator
    • simple: simple register allocator
  • -relocation-model=model

    从以下选择重定位模型:

    • default: Target default relocation model
    • static: Non-relocatable code
    • pic: Fully relocatable, position independent code
    • dynamic-no-pic: Relocatable external references, non-relocatable code
  • -spiller

    Spiller使用(默认=本地)

    • simple: simple spiller
    • local: local spiller
  • -x86-asm-syntax=syntax

    选择要从X86后端发出的代码样式:

    • att: Emit AT&T-style assembly
    • intel: Emit Intel-style assembly

退出状态

如果lli无法加载程序,它将以退出代码1退出。否则,它将返回它执行的程序的退出代码。

另请参见

llc