代码之家  ›  专栏  ›  技术社区  ›  Jon Kartago Lamida

如何在LLVM CFG中获取或遍历两个节点之间的所有可能路径?

  •  0
  • Jon Kartago Lamida  · 技术社区  · 3 年前

    给定一个LLVM控制流图,如何使用LLVM获取或遍历两个节点之间的所有可能路径?

    LLVM CFG Example

    例如,从上图中可以看出,在节点%23和节点%30之间,我想得到这两条路径:[[%23,%26,%30],[%23,%30]]。

    我研究过LLVM有这两个迭代器用于简单的图遍历:

    然而,迭代器只是以深度优先和广度优先的方式遍历(两者都只是从%23、%26步行,然后直接到达%30),并且没有直接的特征来枚举节点之间的路径。

    我曾尝试将DFS/BFS与BasicBlock后继/前导迭代器相结合,以枚举分支块中的路径,但经过一些混乱的尝试,我没有得到任何预期的结果。

    我也检查了这两个类似的问题,不幸的是,那里仍然没有解决方案的建议:

    我只是想知道LLVM中是否已经有一个API可以处理这个或任何提示,我可以探索API组合以获得预期结果。

    0 回复  |  直到 3 年前