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

如何在指定的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

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