У меня есть пользовательский проход LLVM AnalysisInfo, который состоит из двух файлов.Я пытаюсь выяснить, как передать дополнительные агенты, такие как bool , в run () в AnalysisPass.h ?
В настоящее время я вызываю пропуск следующим образом:
AnalysisInfo &FA = FAM.getResult<FunctionInfoPass>(*f);
Я хочу, чтобы можно было вызывать пропуск следующим образом:
AnalysisInfo &FA = FAM.getResult<FunctionInfoPass>(*f, true);
Как мне это сделать?
AnalysisPass.h
#include "AnalysisInfo.h"
class AnalysisPass : public llvm::AnalysisInfoMixin<AnalysisPass>
{
friend llvm::AnalysisInfoMixin<AnalysisPass>;
static llvm::AnalysisKey Key;
public:
using Result = AnalysisInfo;`//object to collect analysis data
AnalysisInfo run(llvm::Function &function, llvm::FunctionAnalysisManager &FAM)
{
AnalysisInfo analysis(&function);
gatherAnalysis(function, analysis, FAM);
return analysis;
}
void gatherAnalysis(llvm::Function &function, AnalysisInfo &analysis,
llvm::FunctionAnalysisManager &FAM);
};
AnalysisPass.cpp
#include "AnalysisPass.h"
llvm::AnalysisKey AnalysisPass::Key;
void AnalysisPass::gatherAnalysis(llvm::Function &function, AnalysisInfo &analysis, llvm::FunctionAnalysisManager &FAM)
{
//do stuff
}