【问题标题】:How to make clang stop before a specified LLVM pass and dump the LLVM IR如何在指定的 LLVM 传递之前停止铿锵声并转储 LLVM IR
【发布时间】:2015-08-07 19:47:05
【问题描述】:

如何运行 clang 并让它在通过之前停止,比如 loop-vectorize,然后将 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不同。

【问题讨论】:

  • 正确的选项似乎是-print-after=loop-vectorize。但它不识别循环矢量化选项。我得到这个 clang (LLVM 选项解析):对于 -print-after 选项:找不到名为“循环矢量化”的选项`错误。

标签: clang llvm


【解决方案1】:

在使用 Clang 编译时,我不知道有什么方法可以在特定通过后停止,但我可以提供一个有希望的替代方法。

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

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

要解决您最初的问题,您可以简单地将在-O2 期间运行的通行证列表复制到loop-vectorize,然后简单地运行opt 手动将其传递给简化的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2018-01-12
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多