使用其他通行证时的LLVM错误 [英] LLVM Error When Using a Pass from Another Pass

查看:180
本文介绍了使用其他通行证时的LLVM错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的LLVM Pass:

Here is my LLVM Pass:

#include <llvm/IR/Function.h>
#include <llvm/Pass.h>
#include <llvm/Support/raw_ostream.h>
#include <llvm/Analysis/MemoryDependenceAnalysis.h>

using namespace llvm;

namespace
{
    struct MemDepend : public FunctionPass
    {
        static char ID;
        MemDepend() : FunctionPass(ID){}

        virtual bool runOnFunction(Function &F)
        {
            MemoryDependenceAnalysis *MDA = &getAnalysis<MemoryDependenceAnalysis>();
            return false;
        }

        virtual void getAnalysisUsage(AnalysisUsage &AU) const
        {
              AU.setPreservesAll();
        }
    };
}

char MemDepend::ID = 0;
static RegisterPass<MemDepend> X("memdep", "Memory Pass", false, false);

当我尝试编译它时,出现以下错误:

When I try to compile it, I receive the following error:

在/usr/local/include/llvm/Pass.h:388:0中包含的文件中,
从/home/ahmad/Codes/LLVM/MyPass/myPass.cpp:3: /usr/local/include/llvm/PassAnalysisSupport.h:在"AnalysisType& llvm :: Pass :: getAnalysis()const [with AnalysisType = llvm :: MemoryDe​​pendenceAnalysis]": /home/ahmad/Codes/LLVM/MyPass/myPass.cpp:18:79:从此处开始 /usr/local/include/llvm/PassAnalysisSupport.h:223:37:错误:没有匹配的函数可以调用"llvm :: Pass :: getAnalysisID(void *(*)())const" 返回getAnalysisID(& AnalysisType :: ID); ^

In file included from /usr/local/include/llvm/Pass.h:388:0,
from /home/ahmad/Codes/LLVM/MyPass/myPass.cpp:3: /usr/local/include/llvm/PassAnalysisSupport.h: In instantiation of ‘AnalysisType& llvm::Pass::getAnalysis() const [with AnalysisType = llvm::MemoryDependenceAnalysis]’: /home/ahmad/Codes/LLVM/MyPass/myPass.cpp:18:79: required from here /usr/local/include/llvm/PassAnalysisSupport.h:223:37: error: no matching function for call to ‘llvm::Pass::getAnalysisID(void* (*)()) const’ return getAnalysisID(&AnalysisType::ID); ^

我如何正确编译它?

推荐答案

我相信规范的方法是

MemoryDependenceResults &MDA =
    getAnalysis<MemoryDependenceWrapperPass>().getMemDep();

同样,

AU.addRequired<MemoryDependenceWrapperPass>();

您可以在LLVM代码库中找到上述示例.

You can find examples of the above in the LLVM codebase.

这篇关于使用其他通行证时的LLVM错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆