- ✅ 前端完整 (Lexer → Parser → Type Checker)
- ✅ 中端完整 (IR Generator → IR)
⚠️ 后端部分完整 (缺少代码生成核心)
- 定义统一的Target基类接口
- 实现CodeGenerator抽象基类
- 设计AssemblyEmitter接口
- 实现RISCVTarget主类
- 集成现有的RISCVRegisterInfo和RISCVTargetInstInfo
- 添加RISCVFrameLowering
- 测试 Source → AST → IR 流程
- 验证现有组件集成
- 修复发现的问题
- 定义RISC-V指令选择模式
- 实现IR指令到RISC-V指令映射
- 处理复杂寻址模式
- 实现基于模式匹配的指令选择
- 处理函数调用约定
- 实现栈帧管理
- IR BasicBlock → MachineBasicBlock
- IR Function → MachineFunction
- 生成未优化的机器码
- 集成现有LRA算法
- 优化寄存器分配策略
- 处理寄存器溢出
- 实现RISC-V汇编输出器
- 支持符号和标签
- 生成标准RISC-V汇编格式
- 完善mo_compiler二进制程序
- 添加命令行选项
- 错误处理和诊断
- RISC-V Target组件测试
- 指令选择测试
- 寄存器分配测试
- 简单程序端到端编译
- 复杂语言特性测试
- 性能基准测试
- API文档
- 使用示例
- 架构设计文档
- 可以从IR生成空的MachineFunction
- 编译管道基本连通
- 可以编译简单的算术表达式
- 生成基本的RISC-V指令序列
- 支持函数、控制流、内存操作
- 生成优化的RISC-V汇编
- 完整测试覆盖
- 可编译复杂的Mo程序
- 性能可接受
Source Code (.mo)
↓
Lexer → Parser → Type Checker
↓
IR Generator → IR Module
↓
RISC-V Target:
- Instruction Selection
- Register Allocation (LRA)
- Assembly Emission
↓
RISC-V Assembly (.s)
- 渐进式开发: 每阶段都有可测试的输出
- 接口优先: 先设计接口,后实现细节
- 测试驱动: 每个组件都有对应测试
- 不破坏现有: 保持现有代码的功能性
- 可扩展性: 设计支持未来添加其他Target