clang - 如何在指定的 LLVM 通过之前停止 clang 并转储 LLVM IR

标签 clang llvm

我如何运行 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 进行编译时,我不知道有什么方法可以在特定的传递之后停止,但我可以提供一个很有帮助的替代方法。

首先,要解决 optClang 生成不同 IR 文件的问题,比较 clang -O2opt -O2 手动。这可以通过传递 -debug-pass=Arguments 来完成。运行 Clang 时,您需要 -mllvm 来传递参数。

我自己完成了这项工作后,似乎正在为每个 channel 运行一组不同的 channel ,但我建议您自己确认一下。

为了解决您最初的问题,您可以简单地复制在 -O2 期间运行的通行证列表,仅向上通过 loop-vectorize 并简单地运行 opt 手动将简化列表传递给它。

关于clang - 如何在指定的 LLVM 通过之前停止 clang 并转储 LLVM IR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31885517/

相关文章:

找不到 C 结构的 clang_complete 模式

c++ - 预评估 LLVM IR

LLVM 提供的 main() 返回类型无效

c++ - clang 与 gcc 运行时差异 : c++ class template built w clang crashes w/o copy constructor, 使用复制构造函数构建 gcc 崩溃

clang 没有停留在#include "/dev/whatever"

c++ - Clang-Tidy llvm-header-guard 目录配置

llvm - 如何修复 "warning: overriding the module target triple with x86_64-pc-linux-gnu [-Woverride-module]"

python - 我可以有一个嵌套 numba 对象数组吗?

swift - Cocoapods 0.35 构建失败

c++ - 禁用 Clang 工具诊断