![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LLVM CFG
文章平均质量分 56
dreammeard
这个作者很懒,什么都没留下…
展开
-
在LLVM中如何判断二个基本块(Basic Block)的支配关系
一、支配的定义根据维基百科 支配的概念如下:控制流图(CFG)的一个节点 d 支配节点 n,当且仅当从开始节点(可以理解为源)到节点 n的每一条路径均要经过节点d,写作d dom n (一写作d \gg n)。根据上述定义,容易得到每个节点均控制其自身。英文维基百科中提到的一些概念There are a number of related concepts:A原创 2014-02-24 16:11:53 · 5800 阅读 · 0 评论 -
LLVM 的后序支配树(Post Dominator Tree)使用方法
在头文件llvm/Analysis/PostDominators.h中提供了后序支配树PostDominatorTree。方法与前序支配树DominatorTree类似,可以查看文章在LLVM中如何判断二个基本块(Basic Block)的支配关系。//为函数*F的控制流图构建后支配树(PostDominatorTree)PostDominatorTree* PostDT=n原创 2014-02-25 22:42:33 · 6180 阅读 · 0 评论 -
如何获得的LLVM控制流图(CFG)的强连通分量(SCC)的拓扑排序(topological order)
一、思路使用llvm/ADT/SCCIterator.h中定义的scc_iterator迭代器获得。但是scc_iterator获得是逆拓扑排序的。它的注释如下:// The SCC iterator has the important property that if a node in SCC S1 has an// edge to a node in SCC S2, then原创 2014-02-19 16:19:31 · 3313 阅读 · 0 评论 -
在LLVM控制流图(CFG)中如何获得某个块(Block)的前继块和后继块
如何遍历LLVM控制流图、块一 、获得block BB所有的前继块#include "llvm/Support/CFG.h"BasicBlock *BB = ...;for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { BasicBlock *Pred = *PI; /原创 2014-02-19 15:40:01 · 4206 阅读 · 1 评论 -
Tarjan求有向图的强连通分量
强连通分量的定义在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。Tarjan算法的原理如果u是某个强连通分量的根,那么:1) u不存在路径可以返回到它的祖先2转载 2014-03-04 14:09:31 · 887 阅读 · 0 评论