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.(来自: