docs: 更新人员 3 (hp) 的任务完成情况日志

hp 3 days ago
parent fc08c12f40
commit 3ad2437169

@ -99,4 +99,39 @@
**完整测试脚本**
```bash
for f in test/test_case/functional/*.sy; do echo "Testing $f..."; ./scripts/verify_ir.sh "$f" --run > /dev/null || echo "FAILED $f"; done
```
```
## 人员 3 完成情况详细说明(更新于 2026-04-06
### ✅ 已完成任务
人员 3 (hp) 已完整实现 Lab2 IR 生成中函数及常量的扩展支持,包括:
1. **支持全局变量声明与初始化**(任务 3.1
- 在 `IRGenDecl.cpp` 中通过判断 `func_ == nullptr` 区分全局和局部作用域。
- 扩充了 `Float` / `PtrFloat``ConstantFloat` 等浮点数支持,补充 `GlobalVariable` 派生类。
- 正确调用 `module_.CreateGlobalVariable` 处理整型和浮点型全局初始化,维护在 `storage_map_` 中。
2. **支持函数参数处理**(任务 3.2
- 在 `IR.h``Value` 体系中增加 `Argument` 类。
- 在 `IRGenFunc.cpp` 中实现对 `funcFParams` 的处理。
- 在入口块为每个参数 `alloca` 栈槽,通过 `store` 存入形参初值,并绑定至 `storage_map_` 供内部读取。
3. **支持函数调用生成**(任务 3.3
- 在 `IR.h``IRBuilder.cpp` 补充 `Opcode::Call``CallInst` 及其打印逻辑。
- 在 `IRGenExp.cpp` (`visitUnaryExp`) 支持 `funcCallExp` 解析。
- 提取计算所有的实参表达式 (`funcRParams`) 后生成 `call` 指令;对于库函数支持基于 `Sema` 的占位符签名构建。
4. **支持 const 常量声明**(任务 3.4
- 在 `IRGenDecl.cpp` 新增 `visitConstDecl``visitConstDef` 实现。
- 维护独立的 `const_values_` 映射表记录 `ConstantValue*`
- 在 `visitLVal` 时如果检测到是已定义的常量,直接嵌入常量值完成折叠,省去内存的 `load` 开销。
### 🧪 测试验证
- **全局/局部变量、常量引用测试**:✅ IR 输出正确(通过访问 `storage_map_``const_values_` 获取数据)。
- **参数传递与函数调用链路测试**:✅ 多参数函数(包含返回值)和调用外部 `putint` 的样例生成的 LLVM IR 结构清晰、运行正确。
- **集成测试验证**:✅ 能完美与人员 1 和人员 2 的前置工作合并通过,确保了控制流、运算体系与函数调用的兼容。
### 🔄 协作接口
人员 3 的实现对全局体系及调用链路做出了以下约定:
- **常量折叠访问机制**:扩展引入了 `const_values_` 映射机制,允许表达式树中的左值在编译期直接折叠为字面量常量。
- **参数栈操作模型**:统一了函数的栈变量调用约定(将传参全统一按 Alloca 栈分配处理),这为后续实验中后端进行简单且一致的寄存器/栈映射及死代码消除等数据流分析提供了稳定基础。
Loading…
Cancel
Save