diff --git a/Pass_ID_List.md b/Pass_ID_List.md index 177ead1..5618060 100644 --- a/Pass_ID_List.md +++ b/Pass_ID_List.md @@ -3,12 +3,26 @@ | 名称 | 优化级别 | 开发进度 | | ------------ | ------------ | ---------- | | CFG优化 | 函数级 | 已完成 | -| DCE | 函数级 | 待测试 | +| DCE | 函数级 | 待正确性测试 | +| Mem2Reg | 函数级 | 待正确性测试 | +| Reg2Mem | 函数级 | 待正确性测试 | + + +# 部分优化遍的说明 + +## Mem2Reg + +Mem2Reg 遍的主要目标是将那些不必要的、只用于局部标量变量的内存分配 (alloca 指令) 消除,并将这些变量的值转换为 SSA 形式。这有助于减少内存访问,提高代码效率,并为后续的优化创造更好的条件。 + +## Reg2Mem + +我们的Reg2Mem 遍的主要目标是作为 Mem2Reg 的一种逆操作,但更具体是解决后端无法识别 PhiInst 指令的问题。主要的速录是将函数参数和 PhiInst 指令的结果从 SSA 形式转换回内存形式,通过插入 alloca、load 和 store 指令来实现。其他非 Phi 的指令结果将保持 SSA 形式。 + # 后续优化可能涉及的改动 ## 1)将所有的alloca集中到entryblock中 -好处:优化友好性,方面mem2reg提升 +好处:优化友好性,方便mem2reg提升 目前没有实现这个机制,如果想要实现首先解决同一函数不同域的同名变量命名区分 需要保证符号表能正确维护域中的局部变量 \ No newline at end of file