Using LLVM opt with built-in passes

两盒软妹~` 提交于 2019-12-21 21:59:39

问题


I have successfully run llvm opt with my toy transformation pass but do not see how to use 'opt' with built-in transformation passes http://llvm.org/docs/Passes.html#introduction

I have an empty hi.c file

int main(){
}

For example, if I want to use -instcount pass,

opt -instcount hi.c

gives me strange error.

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

Use opt -instcount hi.bc does not work neither, with

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.

If I use opt -inst-count -f hi.bc, the output is a messy bitcode.

Question: how should we use 'opt' with built-in transformation passes (those from the link above)? Thanks for your ideas. 'opt -help' says

opt [options] <input bitcode file>

but my example above 'opt -instcount hi.bc' does not work as expected (see above).


回答1:


At first: opt only works on bitcode / readable LLVM IR files. So passing a .c file will never work. You have to compile the .c file first with clang:

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

The Warning you encounter says basicly everything:

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 has as output the probably modified bitcode file and since you do not support an output file it will print it to stdout. That is why you get "messy" bitcode.

To use opt the way it should be you can use /dev/null to get rid of the output:

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

or support an output file

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

or print the output as readable LLVM IR to stdout

opt -inst-count input.bc -S

or print the ouptut as readable LLVM IR file to disk

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


来源:https://stackoverflow.com/questions/29758987/using-llvm-opt-with-built-in-passes

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!