后端Pass简介——MachineCycleAnalysis
MachineCycleAnalysis
MachineCycleAnalysis 是一个只读分析 Pass,用于识别并记录 MachineFunction 中的循环结构,以支持后续的优化分析。
Pass 比较简单,直接举个例子:
entry:
br label %loop
loop:
%i = phi [0, %entry], [%inc, %loop]
%inc = add %i, 1
cmp %inc, 10
br lt %inc, 10, label %loop, label %exit
exit:
ret
该 Pass 会识别 %loop 为一个循环头,loop 基本块属于一个循环结构,生成 MachineCycle 对象表示这个循环。
可通过 llc -print-machine-cycles 查看分析结果。
该 Pass 会分析:
- 循环的存在与边界
- 是否存在循环(Cycles)
- 每个循环的入口块(Header)
- 每个循环中包含哪些 MachineBasicBlock(基本块)
- 循环嵌套关系
- 哪些循环是内层(子循环)
- 哪些是外层(父循环)
- 循环头部是否为入口块
- 是否为循环的 “自然头”(即所有入口都从后边跳转回来)
- 循环是否包含退出块
- 是否存在跳出循环的路径(循环出口)
- 是否是自然循环(Natural Loop)
- 通过分析后边缘回跳的路径(Backedge)确定
打印类似:
Cycle at header: %bb.1
Members:
- %bb.1
- %bb.2
评论