【问题标题】:LLVM - Run Own Pass automatically with clangLLVM - 使用 clang 自动运行自己的通行证
【发布时间】:2014-06-01 14:06:35
【问题描述】:

我为 llvm 编写了一些自己的通行证,以便在 clang 中使用它们。

我将它们集成在 llvm 中(不是动态加载的)。当我键入时,它们甚至会列在 可用的优化: 部分:

opt --help-hidden

我现在想在我调用 clang 时自动运行我自己的一张通行证作为最后一张

clang ./hello.bc -o ./hello

甚至使用 c 代码:

clang ./hello.c -o ./hello

当我使用 opt 手动运行我的 pass 时,会生成修改后的 ByteCode 并写入一个新的 .bc 文件:

opt -my-pass < ./hello.bc > ./hello_optimized.bc

当我用 clang 编译修改后的 .bc 时,会再次运行正常的 clang 优化,这会破坏我手动执行 pass 的优化:

clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized

我的问题是:

  • 如何使用 clang 作为最后一个 pass 自动运行我自己的书面 pass?
  • 另一种可能的解决方案是完全停用所有通道,或至少停用 clang/opt 的死代码/功能。我怎么能这样做?

【问题讨论】:

  • 使用 clang -flto,并将你的 pass 序列传递给 gold lto 插件。

标签: c++ c compiler-construction clang llvm


【解决方案1】:

执行此操作的正确方法是让 clang 将您的通行证添加到它构建的通行证管理器中。请参阅clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses() 了解如何处理消毒剂。

【讨论】:

    【解决方案2】:

    您可以直接使用 -Xclang 运行自己的通行证。

    clang++ -Xclang -load -Xclang ./libmypass.so input.cpp
    

    Source

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多