Xcode 提供的标准 llvm 工具链似乎不支持从优化器获取调试信息。但是,如果您滚动自己的 llvm 并使用它,您应该能够按照上面的 mishr 建议传递标志。这是我使用的工作流程:
1.使用自制软件,安装llvm
brew tap homebrew/versions
brew install llvm33 --with-clang --with-asan
这应该安装完整且相对最新的 llvm 工具链。它链接到/usr/local/bin/*-3.3
(即clang++-3.3
)。实际的磁盘位置可通过brew info llvm33
- 可能/usr/local/Cellar/llvm33/3.3/bin
。
2. 使用 homebrew llvm 和标志构建您正在优化的单个文件
如果您在 Xcode 中构建,您可以轻松地复制粘贴构建参数,并使用您的 clang++-3.3 而不是 Xcode 自己的 clang。
附加-mllvm -debug-only=loop-vectorize
将为您提供自动矢量化报告。注意:这可能不适用于任何远程复杂的构建,例如,如果您有 PCH,但这是调整单个 cpp 文件以确保其正确矢量化的简单方法。
3.从新的llvm创建一个编译器插件
我能够通过 homebrew llvm 构建我的整个项目:
- 获取这个 Xcode 编译器插件:http ://trac.seqan.de/browser/trunk/util/xcode/Clang%20LLVM%20MacPorts.xcplugin.zip?order=name
- 修改与 clang 相关的路径以指向我的自制 llvm 和 clang bin 名称(通过附加“-3.3”)
- 将其放入
/Library/Application Support/Developer/5.0/Xcode/Plug-ins/
重新启动 Xcode 应该会在可用编译器列表中显示此插件。此时,-mllvm -debug-only=loop-vectorize
标志将显示自动矢量化报告。
我不知道为什么这没有在 Apple 版本中公开。
更新:这在 Xcode 的当前 (8.x) 版本中公开。唯一需要的是启用一个或多个loop-vectorize
标志。