Skip to content

[Topic11/CFG] 补齐寄存器分配所需的统一 CFG 接口 #58

Description

@yuki-328

PR #41 应作为项目统一的 CFG 基础设施。寄存器分配相关 PR 将只提供机器指令语义并消费 CFG,不再独立维护 CFG 实现。

需要完善

  • 统一 scratchv/analysis/cfg_builder.pyscratchv/ir/cfg.py,只保留一个正式 CFG API。
  • 抽取可供 IR 和 Machine IR 共用的 CFG 数据结构与图算法。
  • 提供 Machine IR adapter,根据指令语义识别 label、terminator 和跳转目标。
  • 提供基本块级 uses/defs/live_in/live_out 反向数据流分析。
  • 明确控制流规则:
    • 条件分支:target + fallthrough
    • J/JAL:只有 target
    • JALR/return:无静态 successor
    • CALL:保留 fallthrough,不是 terminator
    • LABEL:基本块入口,不是可执行指令
  • 明确 FOR/ENDFOR 的建边规则,或在构建 CFG 前将其规范化为 BR/BR_IF
  • 校验 entry、重复块名、悬空跳转目标和 predecessor/successor 一致性。
  • 明确不可达代码接口是只分析 CFG,还是同步修改原始 IR。

测试要求

增加精确拓扑测试,覆盖:

  • 线性流、if/else、diamond/join
  • 单层与嵌套循环
  • 多回边循环
  • 条件分支和无条件跳转
  • return 与 call fallthrough
  • 无效 target、重复块名和空函数
  • join 和循环中的 live_in/live_out
  • IR CFG 降低到 Machine CFG 后的控制流一致性

验收标准

  • 项目只有一个正式 CFG 核心实现
  • IR 和 Machine IR 共用 CFG 数据结构与算法
  • 提供 Machine IR CFG adapter
  • 提供可复用的活跃变量分析
  • CFG 边和 terminator 规则有明确契约
  • 核心测试使用精确节点与边集合断言
  • 常量分析和寄存器分配集成测试通过
  • 全量测试通过

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions