From ef6eedee83286c9993d79aae51ff790ab66b7c26 Mon Sep 17 00:00:00 2001 From: lzkk <956449176@qq.com> Date: Tue, 26 May 2026 14:44:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(infra):=20count=5Fasm.sh=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84=E6=9B=BF=E4=BB=A3?= =?UTF-8?q?=E7=A1=AC=E7=BC=96=E7=A0=81=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原硬编码 /home/vega/compile/compiler/nudt-compiler-cpp 导致在其他机器上 输出全 0。改为自动检测脚本所在目录。 --- count_asm.sh | 3 ++- 优化记录.md | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/count_asm.sh b/count_asm.sh index e44d51ce..c886b7ac 100755 --- a/count_asm.sh +++ b/count_asm.sh @@ -1,5 +1,6 @@ #!/bin/bash -cd /home/vega/compile/compiler/nudt-compiler-cpp +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" COMPILER=./build/bin/compiler TESTS=( "huffman-01" "huffman-02" "huffman-03" diff --git a/优化记录.md b/优化记录.md index 92a5a414..e4fba4bc 100644 --- a/优化记录.md +++ b/优化记录.md @@ -136,3 +136,21 @@ - **退化**:无(matmul +3 是之前 sdiv 优化的残留退化) - **功能测试**:87/88 functional 通过(1 个不稳定故障 87_many_params) - **已知局限**:仅处理同寄存器复用的特例;不同寄存器间的转发/复用转为 MovReg(指令数不减少) + +--- + +## 2026-05-26 | MAX_SPILL_ROUNDS 缩减 + 保守修复阈值提高 + +- **类型**:后端(寄存器分配 Bug 修复) +- **问题**:`04_arr_defn3` 段错误、`05_arr_defn4` 输出错误、`09_BFS` bad_alloc/段错误、`13_LCA`/`54_hidden_var` 等多个用例输出不匹配 +- **根因**:block-level liveness 下多轮 spill(MAX_SPILL_ROUNDS=3)创建的 reload vreg 与保守修复(block_defs 全干涉,阈值>20)产生错误交互。保守修复对任意有 >20 个 vreg 定义的 block 强制所有 def 间全干涉,与多轮 spill 的新 vreg 结合导致图着色无法找到合法物理寄存器分配,产生错误的 spill 代码 +- **修复**(RegAlloc.cpp 2 处改动): + - MAX_SPILL_ROUNDS:3 → 1,循环外 RewriteWithAllocation 用 scratch 寄存器处理剩余 spill + - 保守修复阈值:block_defs.size() > 20 → > 200,仅对真正的大 block 启用 +- **效果**(门禁): + - functional:84/85(98.8%),仅预存 `84_long_array2` 编译超时 + - h_functional:30/31(96.8%),仅预存 `30_many_dimensions` 输出不匹配 + - 新修复用例(8+):04_arr_defn3、05_arr_defn4、09_BFS、13_LCA、54_hidden_var、53_scope2、75_max_flow、87_many_params +- **指令数效果**(mm1 等):mm1 从 85,728 降至 309(-99.6%),杜绝 spill 爆炸 +- **退化**:无 +- **已知局限**:`84_long_array2`(4096 元素全局数组初始化)编译超时,需单独修复;`30_many_dimensions`(多维数组参数 GEP)仍失败