gpt4 book ai didi

c++ - LLVM GetAnalysis() 因所需的传递而失败

转载 作者:行者123 更新时间:2023-11-28 04:07:20 32 4
gpt4 key购买 nike

我有一组使用 LLVM 创建的自定义 channel ,以在某些位码上运行。我设法让它编译,但每当我尝试使用调用 getAnalysis() 的传递来运行它时在另一种传递类型上它失败了:

Assertion `ResultPass && "getAnalysis*() called on an analysis that was not " "'required' by pass!"' failed.

调用 getAnalysis() 的自定义通行证需要它的类型,特别是;

bool Operators::doInitialization(){
ParseConfig &parseConfig = getAnalysis<ParseConfig>(); // Fails here.
}
.
.
.
void Operators::getAnalysisUsage(AnalysisUsage &AU) const{
AU.addRequired<ParseConfig>();
return;
}

我已经在这上面花了几天时间,我很迷茫。我知道以下内容是正确的:

  • ParseConfig 已通过 RegisterPass<> 成功注册模板,我在 GDB 中逐步检查它,发现它确实被注册了。
  • 同样使用 GDB,我发现在查看 getAnalysis() 时已注册通行证列表始终为空(这会导致断言)。

重要说明:我最终会在使用 Flang 编译的 Fortran 项目中使用它,因此我使用的 LLVM 库版本是 Flang 分支(发现 here )。该分支就在 LLVM 7.1 周围,但与注册通行证相关的特定文件似乎与当前的 LLVM 库没有什么不同。

最佳答案

getAnalysis 函数从 doInitialization 移动到 runOnFunction 将使其工作。


来自 LLVM page

This method call getAnalysis* returns a reference to the pass desired. You may get a runtime assertion failure if you attempt to get an analysis that you did not declare as required in your getAnalysisUsage implementation. This method can be called by your run* method implementation, or by any other local method invoked by your run* method.

关于c++ - LLVM GetAnalysis() 因所需的传递而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489142/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com