LLVM New Pass Manager - Как передать дополнительные аргументы? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть пользовательский проход 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
}
...