我已成功运行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'上面的例子并没有按预期工作(见上文)。
答案 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