循环定义
循环 = 强连通子图 + 唯一入口节点(两条件必须同时满足)。
- 强连通:子图中任意两节点间均有路径
- 唯一入口:从循环外进入循环只能经过该节点
重点 循环两条件:强连通子图 + 唯一入口。
必经节点(Dominance)
定义
节点 是节点 的必经节点( dom ),当且仅当从程序入口到 的所有路径都经过 。
性质(偏序关系)
- 自反性: dom
- 传递性:若 dom 且 dom ,则 dom
- 反对称性:若 dom 且 dom ,则
必经节点集迭代算法
重点 必经节点集迭代算法(常用大题)。
其中 是 的所有前驱节点。
初始化:
- (对 )
迭代直到不动点:
- 对每个 :
回边(Back Edge)
定义:边 是回边,当且仅当 dom ( 是 的必经节点)。
重点 回边: 且 dom 。
从回边找循环的栈算法
对每条回边 :
- 初始化
- 从 出发沿控制流图反向(前驱方向)DFS,将遇到的节点加入
- 重复直到到达 为止
- 最终 即为该回边对应的循环
找循环三步总结
重点 三步法是考试核心流程。
- 计算必经节点集 (迭代至不动点)
- 查找所有回边( 且 dom )
- 从回边找循环(栈/DFS 反向搜索)
完成循环查找后,需通过 数据流分析 确定循环内变量的定值-引用关系,进而应用 循环优化算法(代码外提、强度削弱、归纳变量删除)进行循环优化。