使用来自另一个通道的通道时出现 LLVM 错误
LLVM Error When Using a Pass from Another Pass
这是我的 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);
当我尝试编译它时,收到以下错误:
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 代码库中找到上述示例。
这是我的 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);
当我尝试编译它时,收到以下错误:
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 代码库中找到上述示例。