循环定义

循环 = 强连通子图 + 唯一入口节点(两条件必须同时满足)。

  • 强连通:子图中任意两节点间均有路径
  • 唯一入口:从循环外进入循环只能经过该节点

重点 循环两条件:强连通子图 + 唯一入口。

必经节点(Dominance)

定义

节点 是节点 的必经节点( dom ),当且仅当从程序入口到 的所有路径都经过

性质(偏序关系)

  • 自反性 dom
  • 传递性:若 dom dom ,则 dom
  • 反对称性:若 dom dom ,则

必经节点集迭代算法

重点 必经节点集迭代算法(常用大题)。

其中 的所有前驱节点。

初始化

  • (对

迭代直到不动点:

  • 对每个

回边(Back Edge)

定义:边 是回边,当且仅当 dom 的必经节点)。

重点 回边: dom

从回边找循环的栈算法

对每条回边

  1. 初始化
  2. 出发沿控制流图反向(前驱方向)DFS,将遇到的节点加入
  3. 重复直到到达 为止
  4. 最终 即为该回边对应的循环

找循环三步总结

重点 三步法是考试核心流程。

  1. 计算必经节点集 (迭代至不动点)
  2. 查找所有回边 dom
  3. 从回边找循环(栈/DFS 反向搜索)

完成循环查找后,需通过 数据流分析 确定循环内变量的定值-引用关系,进而应用 循环优化算法(代码外提、强度削弱、归纳变量删除)进行循环优化。