如何运行clang并让它在传递之前停止,比如说loop-vectorize
,然后将IR转储到.ll
文件中,以后可以将其传送到opt
?
opt
有一个-stop-after=
选项,但Clang似乎缺少等效选项。以下是使用Clang 3.7.0rc2失败的尝试:
$ ../build/bin/clang -O2 -mllvm -stop-after=loop-vectorize a.cpp
clang (LLVM option parsing): Unknown command line argument '-stop-after=loop-vectorize'. Try: 'clang (LLVM option parsing) -help'
clang (LLVM option parsing): Did you mean '-print-after=loop-vectorize'?
我还尝试运行clang -O0 -emit-llvm -S
然后运行opt -O2
,但结果与直接运行clang -O2
不同。
答案 0 :(得分:1)
在使用Clang
进行编译时,我不知道在特定传递后有任何停止方法,但我可以提供一个有希望的替代方案。
首先,要解决生成不同IR文件的opt
和Clang
问题,手动比较clang -O2
和opt -O2
的通过列表可能会有所帮助。这可以通过传递-debug-pass=Arguments
来完成。运行Clang时,您需要-mllvm
来传递参数。
自己完成后,似乎每个人都有不同的通行证,但我建议你自己确认。
要解决您的初始问题,您只需复制-O2
期间仅通过loop-vectorize
运行的通行证列表,然后只需手动将opt
传递给简化列表即可。