代码之家  ›  专栏  ›  技术社区  ›  Indiana Kernick Michael Durrant

如何在LLVM中运行模块传递

  •  1
  • Indiana Kernick Michael Durrant  · 技术社区  · 7 年前

    我试图找到一种方法来优化空的全局构造函数。以前的优化将把构造函数转换为不做任何事情的函数。我需要添加一个新的过程来从 llvm.global_ctors .

    首先,我试过 optimizeGlobalCtorsList 但这个函数实际上并不调用我给它的回调,即使 llvm.global目录 填充。

    然后我试着跑步 GlobalOptPass .我试过这个:

    llvm::GlobalOptPass pass;
    llvm::ModuleAnalysisManager MAM{true};
    pass.run(module, MAM);
    

    这最终导致在 AnalysisManager::lookupPass . 我认为我需要执行某种初始化或注册,但我不知道如何执行。“llvm pass registration”上的所有引用都谈到了用 opt .我不想那样做。我只想传球。

    1 回复  |  直到 7 年前
        1
  •  0
  •   David Greene    7 年前

    拜访 lib/Transforms/IPO/PassManagerBuilder.cpp (或) lib/Passes/PassBuilder.cpp 对于新的通行证管理者)了解如何 opt 设置其传递管道。的代码 选择 是在 tools/opt/opt.cpp 而且非常小,几乎所有的工作都委托给核心图书馆。

    你可以使用 选择 作为你自己工具的模板,或者你可以黑客在通行证建设管道插入你想要的地方。

    推荐文章