介绍
opt命令是LLVM的优化器和分析器。输入LLVM源文件,会对其进行优化或分析,然后输出优化文件或分析结果。
OPT用法
opt [options] [filename]
$opt –passname input.ll –o output.ll
eg: $ opt –S –instcombine testfile.ll –o output1.ll
OPT命令一些选项
-
-f
在终端上启用二进制输出。通常,如果输出流是终端,opt将拒绝写入原始bitcode输出。使用此选项, opt将写入原始bitcode,而不管输出设备如何。
-
-help
打印命令行选项的摘要。
-
-o filename
指定输出文件名。
-
-p
每次转换后打印模块。
-
-S
输出LLVM IR而不是LLVM字节码
-
-{passname}
opt提供了以任何顺序运行任何LLVM优化或分析Pass的能力。选项列出了所有可用的Passes。选项在命令行中出现的顺序是它们的执行顺序(在传递约束内)。
eg:–instcombine为指令合并pass, –deadargelim为无用参数消除pass;
-
-disable-inlining:此选项只是从标准列表中删除内联传递。
-
-disable-opt:只有在给出-std-link-opts时,此选项才有意义。它会禁用大多数Pass。
-
-strip-debug:此选项导致opt在应用其他优化之前从模块中剥离调试信息。它与-strip基本相同, 但它确保首先完成调试信息的剥离。
-
-verify-each:此选项导致opt在命令行上另外指定的每次传递后添加验证传递(包括-verify)。这对于怀疑传递正在创建无效模块但不清楚哪个传递正在执行它的情况很有用。
-
-stats:打印统计信息
-
-time-passes:记录每个Pass所需的时间并将其打印到标准错误。
-
-debug:如果这是一个调试版本,则此选项将启用使用该
LLVM_DEBUG()
宏的传递的调试打印输出。 -
-load=<plugin>
加载动态对象
plugin
。此对象应注册新的优化或分析过程。加载后,该对象将添加新的命令行选项以启用各种优化或分析。要查看新的完整优化列表,请同时使用-help
和-load
选项。 -
adce:入侵式无用代码消除。
-
bb-vectorize:基本块向量化。
-
constprop:简单常量传播。
-
dce:无用代码消除。
-
deadargelim:无用参数消除。
-
globaldce:无用全局变量消除。
-
globalopt:全局变量优化。
-
gvn:全局变量编号。
-
inline:函数内联。
-
instcombine:冗余指令合并。
-
licm:循环常量代码外提。
-
loop-unswitch:循环外提。
-
loweratomic:原子内建函数 lowering。
-
lowerinvoke:invode 指令 lowering,以支持不稳定的代码生成器。
-
lowerswitch:switch 指令 lowering。
-
mem2reg:内存访问优化。
-
memcpyopt: MemCpy 优化。
-
simplifycfg:简化 CFG。
-
sink:代码提升。
-
tailcallelim:尾调用消除。
退出状态
如果opt成功,它将以0退出。否则,如果发生错误,它将以非零值退出。