LLVM每日谈之五十六 从RegionPass看Region

Posted snsn1984

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LLVM每日谈之五十六 从RegionPass看Region相关的知识,希望对你有一定的参考价值。

RegionPass是Pass的一个子类,和其他Pass的子类(ModulePass、FunctionPass、LoopPass、BasicBlockPass)一样,都是同样的一个模式:运行在每一个XX之上。(注:这里的XX代表着这几个Pass的针对的对象,每个都不同。FunctionPass运行在每一个Function之上,RegionPass运行在每一个Region之上。其他同样)

但是RegionPass有一些特殊之处,这主要是由于Region和Module、Function、Loop、BasicBlock的差别造成的。众所周知,Module、Function、Loop、BasicBlock都是LLVM IR的基本结构,相对而言比较容易理解。尤其是Module、Function、BasicBlock这三层结构,接触过LLVM IR的都比较熟悉。而Region则不能算是一个基本结构,它的定义为:

Region is a connected subgraph of a control flow graph that has exactly two connections to the remaining graph. It can be used to analyze or optimize parts of the control flow graph.(来自:RegionInfo.h 的注释)

翻译过来就是:Region是一个控制流图的连接的子图,它和剩余的部分有两个连接。它可以被用来分析和优化控制流图中的部分内容。

所以,一个简单的Region和剩余的图有两个边的连接,一个是入点,一个是出点。Region的入点是进入Region之后的第一个BasicBlock;Region的出点是离开Region之后的第一个BasicBlock。Region的入点BasicBlock主导Region的所有BasicBlock;Region的出点BasicBlock后置主导Region的所有BasicBlock。

来一起看个具体的实例:

图中是Region的实例,图中共有两个Region,一个A一个B。这里的出点还容易让有点迷惑,需要针对图仔细揣摩一下。A是B的父Region。

相关内容:

小乖他爹:LLVM每日谈之四 Pass初探

小乖他爹:LLVM每日谈之八 PASS例子分析

小乖他爹:LLVM每日谈之十二 LLVM的源码分析之Pass相关

小乖他爹:LLVM每日谈之十三 使用LLVM自带的PASS

小乖他爹:LLVM每日谈之四十二 一个添加pass的实例

小乖他爹:LLVM每日谈之四十三 LLVM的utility pass

小乖他爹:LLVM每日谈之五十五 浅谈对Pass的错误认知及其原因

以上是关于LLVM每日谈之五十六 从RegionPass看Region的主要内容,如果未能解决你的问题,请参考以下文章

LLVM每日谈之五十三 Target Registration的更正

LLVM每日谈之五十四 新建后端的第二步校正(register set)

LLVM每日谈之五十五 浅谈对Pass的错误认知及其原因

LLVM每日谈之十九 LLVM的第一本系统的书<Getting Started with LLVM Core Libraries>

通信算法之五十六:成型滤波算法仿真与工程实现

Python实例浅谈之五Python守护进程和脚本单例运行