updated pptx and speech pdf

This commit is contained in:
2026-06-30 11:51:38 +08:00
parent d9d36e017f
commit a8b5d9c864
5 changed files with 1569 additions and 1244 deletions

View File

@@ -53,7 +53,7 @@
#block(width: 100%, breakable: true)[
== 第 1 页:封面页(~10 秒)
*【逐字演讲稿】* 各位老师、同学们,下午好!我是程景愉。今天代表我们小组——程景愉、舒钰权、杨力嘉,汇报 SysY 编译器课程实验成果。我们实现了从 SysY AArch64 汇编的完整编译器六个实验全部完成21 项完整回归测试通过,并将全量测试耗时优化到 217.293 秒。 \
*【逐字演讲稿】* 各位老师、同学们,下午好!我是舒钰权。今天代表我们小组——程景愉、舒钰权、杨力嘉,汇报 SysY 编译器课程实验成果。我们实现了从 SysY AArch64 汇编的完整编译器六个实验全部完成21 项完整回归测试通过,并将全量测试耗时优化到 217.293 秒。 \
*【演讲技巧】* 站姿挺拔,声音洪亮。一句话自我介绍 + 一句话项目概括。
]
@@ -71,13 +71,13 @@
#block(width: 100%, breakable: true)[
== 第 4 页Lab1 语法树构建 — 前端基石(~20 秒)
*【逐字演讲稿】* Lab1 舒钰权负责。核心是扩展 ANTLR4 文法,覆盖完整 SysY——控制流、表达式、浮点、数组、函数参数。关键认知ANTLR 文法的 rule 命名直接决定生成 C++ 类的类型名——意味着 sem irgen 所有 visit\* 函数必须与文法精确匹配。文法一变,下游全部同步适配。这是前端工程"牵一发而动全身"的典型体现。 \
*【逐字演讲稿】* Lab1 负责。核心是扩展 ANTLR4 文法,覆盖完整 SysY——控制流、表达式、浮点、数组、函数参数。关键认知ANTLR 文法的 rule 命名直接决定生成 C++ 类的类型名——意味着 sem irgen 所有 visit\* 函数必须与文法精确匹配。文法一变,下游全部同步适配。这是前端工程"牵一发而动全身"的典型体现。 \
*【演讲技巧】* 强调文法与下游耦合关系。快速带过,不展开细节。
]
#block(width: 100%, breakable: true)[
== 第 5 页Lab2 中间表示生成 — IR 语义全覆盖(~45 秒)
*【逐字演讲稿】* Lab2 工作量最大,由负责。扩展了 IR 类型系统和指令集,实现了短路求值、控制流、函数调用与多维数组的 IR 翻译。
*【逐字演讲稿】* Lab2 工作量最大,由程景愉负责。扩展了 IR 类型系统和指令集,实现了短路求值、控制流、函数调用与多维数组的 IR 翻译。
讲两个最核心的难点。第一,"编译期/运行期路径混用"——原 EvalConstExpr 内部调用了需要插入点的 IRBuilder全局初始化时直接崩溃。解决方案彻底分离常量路径只返回 ConstantInt/ConstantFloat绝不碰 IRBuilder。这是编译器设计的基本原则但初学者极易违反。
@@ -87,13 +87,13 @@
#block(width: 100%, breakable: true)[
== 第 6 页Lab3 指令选择与汇编生成 — AArch64 后端(~30 秒)
*【逐字演讲稿】* Lab3 由舒钰权负责。采用高可靠栈槽模型——每个 IR Value 分配专属栈槽100% 保证变量活跃期正确性。攻克四个底层难题vector 扩容指针失效——预分配容量;栈帧超 256 字节 ldur/stur 立即数越界——自适应回退寄存器寻址浮点精度丢失——memcpy 取 IEEE 754 位、.word 原样输出,全链路位精确;重写 sylib.c 补齐 I/O。 \
*【逐字演讲稿】* Lab3 由负责。采用高可靠栈槽模型——每个 IR Value 分配专属栈槽100% 保证变量活跃期正确性。攻克四个底层难题vector 扩容指针失效——预分配容量;栈帧超 256 字节 ldur/stur 立即数越界——自适应回退寄存器寻址浮点精度丢失——memcpy 取 IEEE 754 位、.word 原样输出,全链路位精确;重写 sylib.c 补齐 I/O。 \
*【演讲技巧】* "浮点位精确"和"大栈帧自适应寻址"最体现工程严谨性。
]
#block(width: 100%, breakable: true)[
== 第 7 页Lab4 基本标量优化 — SSA 中端核心(~45 秒)
*【逐字演讲稿】* Lab4 理论深度最高,由负责。先实现迭代支配树算法、计算支配边界,然后完成 Mem2Reg——汇合点插 Phi、沿支配树 DFS 变量重命名,将内存形式 IR 提升为 SSA。
*【逐字演讲稿】* Lab4 理论深度最高,由程景愉负责。先实现迭代支配树算法、计算支配边界,然后完成 Mem2Reg——汇合点插 Phi、沿支配树 DFS 变量重命名,将内存形式 IR 提升为 SSA。
在此基础上实现五个优化 Pass。ConstFold 做编译期计算与代数简化。ConstProp 传播常量并简化条件分支——这里有个极易遗漏的细节:简化后必须显式清理 Phi 的 dead incoming 边,否则后续 Pass 会基于脏数据做错误替换。CSE 做块内公共子表达式消除DCE 用 Mark-and-SweepCFGSimplify 合并线性块。
@@ -109,7 +109,7 @@
#block(width: 100%, breakable: true)[
== 第 9 页Lab6 并行与循环优化 — LICM~25 秒)
*【逐字演讲稿】* Lab6 由负责实现循环不变式外提。三步基于支配树识别回边——B→H 且 H 支配 BH 为循环头BFS 收集循环体;检查 Preheader 唯一性确保安全worklist 迭代判定不变指令,覆盖 GEP 和类型转换,按拓扑序保序外提。
*【逐字演讲稿】* Lab6 由程景愉负责实现循环不变式外提。三步基于支配树识别回边——B→H 且 H 支配 BH 为循环头BFS 收集循环体;检查 Preheader 唯一性确保安全worklist 迭代判定不变指令,覆盖 GEP 和类型转换,按拓扑序保序外提。
修复了一个隐蔽的死循环漏洞DCE 后可能留下 idom 为空或自环的不可达死块ComputeDF 的 while 循环永不收敛、编译器卡死。定位两三小时,修复只需两行阻断代码。 \
*【演讲技巧】* 死循环漏洞是精彩的调试故事。
@@ -153,7 +153,7 @@
#block(width: 100%, breakable: true)[
== 第 13 页:人员分工(~15 秒)
*【逐字演讲稿】* 三人分工。负责中端优化——Lab2 IR 生成、Lab4 支配树与全部 Pass、Lab6 LICM。舒钰权负责 Lab1 文法扩展和 Lab3 AArch64 后端,攻克了浮点位精确等底层难题。杨力嘉负责 Lab5 窥孔优化与全量测试回归,在寄存器别名感知方面做出关键贡献。通过 Git 分支 + MR + Code Review 完成协作。 \
*【逐字演讲稿】* 三人分工。程景愉负责中端优化——Lab2 IR 生成、Lab4 支配树与全部 Pass、Lab6 LICM。负责 Lab1 文法扩展和 Lab3 AArch64 后端,攻克了浮点位精确等底层难题。杨力嘉负责 Lab5 窥孔优化与全量测试回归,在寄存器别名感知方面做出关键贡献。通过 Git 分支 + MR + Code Review 完成协作。 \
*【演讲技巧】* 真诚肯定组员贡献。
]