微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LLVM-包装合格等级

如何解决LLVM-包装合格等级

我正在尝试为我编写的自定义LLVM通过创建包装器通过类。

我主要是试图从依赖分析source code派生它。我能够成功构建以下包装器类。代码如下:

INITIALIZE_PASS_BEGIN(ArrayDependenceWrapperPass,"dda","try1",false,true)
INITIALIZE_PASS_END(ArrayDependenceWrapperPass,true)

char ArrayDependenceWrapperPass::ID=0;

ArrayDependenceWrapperPass::ArrayDependenceWrapperPass() : FunctionPass(ID) {
   initializeArrayDependenceWrapperPasspass(*PassRegistry::getpassRegistry());
 }

FunctionPass *llvm::createArrayDependenceWrapperPass() {
   return new ArrayDependenceWrapperPass();
}

bool ArrayDependenceWrapperPass::runOnFunction(Function &F) {
     //code for analysis
   return false;
}

我已将initializeArrayDependenceWrapperPasspass(*PassRegistry::getpassRegistry())添加initializePasses.h,并将(void) llvm::createArrayDependenceWrapperPass()添加LinkallPasses.h。当我尝试通过另一遍运行此文件时,请遵循以下步骤:

class Driver : public FunctionPass {
   public:
   static char ID;      
   Driver() : FunctionPass(ID) {}   
  
   void getAnalysisUsage(AnalysisUsage &AU) const {
      AU.addrequired<ArrayDependenceWrapperPass>();
    }

   bool runOnFunction(Function &F) override {
    //getAnalysis<ArrayDependenceWrapperPass>();    
      F.dump();
   }
};
char Driver::ID=0;
static RegisterPass<Driver> X("dda","test");

我得到一个带有以下断言的核心转储:

Assertion `PI && "Expected required passes to be initialized"' Failed

我猜这需要将我已经完成的通行证初始化吗?对可能是什么问题有任何想法吗?

任何帮助将不胜感激!

解决方法

该断言错误在constexpr const char* base_filename() { const char* p = __FILE__; const size_t i = std::string_view(p).find_last_of('/'); return std::string_view::npos == i ? p : p + i + 1 ; } 函数中,如here in lib/IR/LegacyPassManager.cpp所示。您是否仅收到该断言错误?没有更多信息吗?您是否尝试过使用void PMTopLevelManager::schedulePass(Pass *P)进行调试?

LLVM API多年来已经发生了很大的变化,因此也许几个月前仍有效的解决方案在当前版本中无效。这样说,在邮件列表中也出现此错误has been reported for other passes herehere

您应该考虑执行LLVM's documentation中提到的步骤。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。