SuperAPI AI 工具集

bisect-ssa-pass

测试与质量

查看项目

更新于 10-16 02:32

技能介绍

用途:调试 Noir 的 SSA 优化缺陷,即某个 SSA pass 未能保持程序语义、导致程序行为异常的场景,例如 fuzzer(pass_vs_prev)发现某 pass 后结果不同、已有测试在修改 SSA pass 后失败,或手动怀疑存在优化 bug。

主要能力:编译时用 --show-ssa 输出每个优化 pass 后的 SSA,拆分并清理为单 pass 文件;用 noir-ssa CLI 对每个 pass 做解释执行,二分找出首个失败的 pass;对比失败前后 SSA 差异;并基于实际 SSA 文件编写回归测试。

使用方式:需要带 Prover.toml 的 Noir 项目。编译:nargo compile --show-ssa 2>&1 | tee ssa_output.txt(不要接 head 截断)。拆分:./scripts/split-ssa-passes.sh ssa_output.txt ssa_passes,再 ./scripts/clean-ssa-files.sh ssa_passes。构建 CLI:cargo build --release -p noir_ssa_cli。二分:./scripts/bisect-ssa.sh 'v0 = "-92"' ssa_passes /path/to/noir-ssa。手动解释:noir-ssa interpret --source-path ssa_passes/07_Mem2Reg_.ssa --input-toml 'v0 = "-92"',可选 --trace、--input-path。对比:diff ssa_passes/06_.ssa ssa_passes/07_*.ssa。其他命令:noir-ssa list、noir-ssa check --source-path file.ssa、noir-ssa transform --source-path file.ssa --passes "Mem2Reg,Simplifying"。

适用场景:定位 SSA 优化引入的语义变化,并为其添加回归测试(可用 assert_normalized_ssa_equals、assert_ssa_does_not_change,未修复 bug 可用 #[should_panic])。

限制与注意:SSA 参数按位置命名 v0、v1,需据此映射 Prover.toml 输入;Noir 包名须用下划线;tee 输出不可接 head 截断;测试应直接使用 ssa_passes 中的真实 SSA,避免手动简化丢失触发模式。具体脚本路径与测试模块位置以实际仓库为准。