使用内置传递的LLVM opt

时间:2015-04-20 21:45:01

标签: llvm

我已成功运行llvm opt并使用我的玩具转换过程,但看不到如何使用内置转换过程的'opt'http://llvm.org/docs/Passes.html#introduction

我有一个空的hi.c文件

int main(){
}

例如,如果我想使用-instcount pass,

opt -instcount hi.c

给了我奇怪的错误。

opt: hi.c:1:1: error: expected top-level entity
int main(){
^

使用opt -instcount hi.bc也不起作用,

WARNING: You're attempting to print out a bitcode file.
This is inadvisable as it may cause display problems. If
you REALLY want to taste LLVM bitcode first-hand, you
can force output with the `-f' option.

如果我使用opt -inst-count -f hi.bc,则输出是一个混乱的bitcode。

问题:我们应该如何使用内置转换过程的'opt'(来自上面的链接)?谢谢你的想法。 'opt -help'说

opt [options] <input bitcode file>

但我在'opt -instcount hi.bc'上面的例子并没有按预期工作(见上文)。

1 个答案:

答案 0 :(得分:9)

首先:opt仅适用于bitcode /可读LLVM IR文件。因此传递.c文件永远不会有效。 您必须首先使用clang编译.c文件:

clang -emit-llvm in.c -o input.bc

您遇到的警告基本上都说明了一切:

  

警告:您正在尝试打印出bitcode文件。这是   不建议,因为它可能会导致显示问题。如果你真的想要   亲自品尝LLVM bitcode,可以用`-f'强制输出   选项。

opt将可能修改的bitcode文件作为输出,因为您不支持输出文件,所以它会将其打印到stdout。这就是为什么你得到“凌乱”的bitcode。

要以可能的方式使用opt,您可以使用/ dev / null来删除输出:

opt -inst-count input.bc -o /dev/null

或支持输出文件

opt -inst-count input.bc -o output.bc

或将输出打印为可读LLVM IR到stdout

opt -inst-count input.bc -S

或将ouptut打印为可读的LLVM IR文件到磁盘

opt -inst-count input.bc -S -o output.ll