我想使用 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
}
}
}
我曾经用烟灰做过数据流分析。烟灰提供了一个接口 BackFlowAnalysis,我只需要在方法 doAnalysis(( 中实现传递函数。实现定点分析的工作清单算法由其接口提供。但是,在LLVM中,是否有类似的机制?这是否意味着我需要实现工作清单算法并自己以倒序浏览所有指令?
我鼓励你看看我们的LLVM扩展Phasar:https://phasar.org/
它提供的功能类似于Soot对Java所做的功能。