我正在尝试跟踪源代码中的数据流。为此,我查看load
类型的指令,并使用
*(LI->getPointerOperand())
LI
是LoadInst
类型的指令。现在我需要知道上次访问该寄存器的位置,以便我可以指出检查该指令的数据流到此。任何建议将受到高度赞赏。
答案 0 :(得分:0)
最初,通过排除具有多个出口的循环和函数来简化问题,以便将CFG函数作为单个条目和单个退出图形。
一种(可能是简单化的)方式是首先通过执行以下操作找到所有用户:
function myAction() {
return (dispatch, getState) => {
...
dispatch(firstAction);
const state = getState();
// Check your state conditions from first action here.
dispatch(secondAction);
...
}
}
然后使用PostDominatorTree
的DomTreeNodeBase
和llvm::Instruction i = [the register for that LoadInst];
auto users = i->users();
方法(我认为this引入了getLevel
5.0.0,如果不可用您可以使用LLVM
并执行BFS遍历的版本,您可以过滤那些级别最高的版本。
我不确定你想用循环做什么,但如果没什么特别的话,上面就足够了。对于处理函数的多个退出,您可以在任何处理之前使用mergereturn
传递。