如何在指定的LLVM传递之前使clang stop并转储LLVM IR
如何运行clang并让它在传递前停止,比如说如何在指定的LLVM传递之前使clang stop并转储LLVM IR,clang,llvm,Clang,Llvm,如何运行clang并让它在传递前停止,比如说循环矢量化,然后将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 '-sto
循环矢量化
,然后将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
。在使用clang
编译时,我不知道有什么方法可以在特定的过程后停止,但我可以提供一个希望有用的替代方法
首先,为了解决产生不同IR文件的opt
和Clang
问题,手动比较Clang-O2
和opt-O2
的通过列表可能会有所帮助。这可以通过传递-debug pass=Arguments
来实现。运行Clang时,需要-mllvm
来传递参数
我自己做了这件事之后,似乎每个人都有不同的传球方式,但我建议你自己确认一下
为了解决您的初始问题,您可以简单地将
-O2
期间运行的过程列表复制到循环向量化
上,然后简单地运行opt
手动将简化的列表传递给它。正确的选项似乎是-print after=循环向量化
。但它无法识别循环向量化选项。我得到以下提示(LLVM选项解析):对于-print-after选项:找不到名为“loop-vectorize”的选项,`error。