控制流分析是数据流分析以及后端优化的基础,其的目标是建立控制流图(control flow graph)。
控制流图的结点代表一个基本块(basic block), 边代表控制流的运动方向。
基本块: 其中的代码要么全部执行,要么全部不执行。基于这原则,有下列3种情况导致代码分入不同的basic block中。
1. 当前处理指令为分支指令,比如 if,goto,throw,switch
2. 当前指令为其他跳入指令的目标指令
3. 当前指令为return指令
通过对指令序列的一遍扫描,记录每个基本块的出边,以及出边的目标结点(successor),同时记录基本块的前驱结点(predecessor),以此建立控制流图的整体逻辑。
在后继数据流分析以及优化中,loop的识别尤为的重要。这里的loop不是通常意义下的loop,而是称为自然循环的loop。对他的定义是存在n->d,d为n的支配结点&#x