fix(infra): count_asm.sh 使用相对路径替代硬编码路径

原硬编码 /home/vega/compile/compiler/nudt-compiler-cpp 导致在其他机器上
输出全 0。改为自动检测脚本所在目录。
lzk
lzkk 4 days ago
parent c12b6830b8
commit ef6eedee83

@ -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"

@ -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 下多轮 spillMAX_SPILL_ROUNDS=3创建的 reload vreg 与保守修复block_defs 全干涉,阈值>20产生错误交互。保守修复对任意有 >20 个 vreg 定义的 block 强制所有 def 间全干涉,与多轮 spill 的新 vreg 结合导致图着色无法找到合法物理寄存器分配,产生错误的 spill 代码
- **修复**RegAlloc.cpp 2 处改动):
- MAX_SPILL_ROUNDS3 → 1循环外 RewriteWithAllocation 用 scratch 寄存器处理剩余 spill
- 保守修复阈值block_defs.size() > 20 → > 200仅对真正的大 block 启用
- **效果**(门禁):
- functional84/8598.8%),仅预存 `84_long_array2` 编译超时
- h_functional30/3196.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仍失败

Loading…
Cancel
Save