我如何运行 clang 并让它在传递之前停止,例如 loop-vectorize
,并将 IR 转储到 .ll
文件,稍后可以提供选择
?
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
直接。
最佳答案
在使用 Clang
进行编译时,我不知道有什么方法可以在特定的传递之后停止,但我可以提供一个很有帮助的替代方法。
首先,要解决 opt
和 Clang
生成不同 IR 文件的问题,比较 clang -O2
和opt -O2
手动。这可以通过传递 -debug-pass=Arguments
来完成。运行 Clang 时,您需要 -mllvm
来传递参数。
我自己完成了这项工作后,似乎正在为每个 channel 运行一组不同的 channel ,但我建议您自己确认一下。
为了解决您最初的问题,您可以简单地复制在 -O2
期间运行的通行证列表,仅向上通过 loop-vectorize
并简单地运行 opt
手动将简化列表传递给它。
关于clang - 如何在指定的 LLVM 通过之前停止 clang 并转储 LLVM IR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31885517/