如何在指定的LLVM传递之前使clang停止并转储LLVM IR

时间:2015-08-07 19:47:05

标签: clang llvm

如何运行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不同。

1 个答案:

答案 0 :(得分:1)

在使用Clang进行编译时,我不知道在特定传递后有任何停止方法,但我可以提供一个有希望的替代方案。

首先,要解决生成不同IR文件的optClang问题,手动比较clang -O2opt -O2的通过列表可能会有所帮助。这可以通过传递-debug-pass=Arguments来完成。运行Clang时,您需要-mllvm来传递参数。

自己完成后,似乎每个人都有不同的通行证,但我建议你自己确认。

要解决您的初始问题,您只需复制-O2期间仅通过loop-vectorize运行的通行证列表,然后只需手动将opt传递给简化列表即可。