Я хочу сделать обратный анализ потока данных, используя LLVM. В настоящее время я просто создаю новый класс Pass:
class BwdfPass: public llvm::ModulePass{}
Затем реализуйте метод runOnModule и метод runOnFunction. Тем не менее, я только что видел несколько примеров, таких как:
void BwdfPass::runOnFunction(Function &function){
for(BasicBlock & bb: function){
for(Instruction &inst:bb){
//do some action
}
}
}
Однажды я провел анализ потока данных с помощью сажи. Сажи предоставляют интерфейс BackwardFlowAnalysis, и мне нужно только реализовать функцию переноса в методе doAnalysis (). Алгоритм рабочего списка, который выполняет анализ с фиксированной точкой, обеспечивается его интерфейсом.
Однако в LLVM есть ли подобный механизм? Означает ли это, что мне нужно самостоятельно реализовать алгоритм рабочего списка и выполнить все инструкции в обратном порядке?