有没有办法显示LLVM自动矢量化的位置?

Swi*_*zlr 8 c loops objective-c vectorization llvm

上下文:我在Objective-C库中有几个循环,它处理大型文本数组.我现在可以看到它以单线程方式运行.

据我所知,LLVM现在能够自动矢量化循环,如Apple在WWDC上的会议所述.但是它的方式非常谨慎,其中一个原因是由于CPU流水线操作而导致变量被修改的可能性.

我的问题:我怎样才能看到LLVM在哪里对我的代码进行了矢量化,更有用的是,我如何才能收到解释为什么它无法向我的代码进行矢量化的调试消息?我敢肯定,如果它能看出为什么它不能自动矢量化它,它可以指出我,我可以进行必要的手动调整,使其可以矢量化.

如果我没有指出这个问题已经或多或少地问了,但很钝,我将是失职这里.

shr*_*hrm 0

假设您正在使用optllvm 并且有调试版本,您可以按如下方式进行操作:

opt -O1 -loop-vectorize -debug-only=loop-vectorize code.ll

其中code.llIR 是要矢量化的。

如果您使用clang,则需要-debug-only=loop-vectorize使用-mllvm选项传递标志。