Skip to content

suite: parse phase is superlinear, making t27c suite unrunnable on specs/scratch (12.4M lines) #1781

Description

@gHashTag

t27c suite --repo-root . cannot complete on a clean checkout. Phase 1 (Parse) stalls on the large generated wave-loop benchmark specs under specs/scratch/.

Not a regression — reproduced identically on the pre-#1775 compiler and on current master.

Measured parse scaling

lines parse time
3,114 0.23s
4,629 0.55s
9,237 1.18s

Roughly quadratic: ~3x the lines costs ~5x the time.

Consequence

specs/scratch/ holds 329 specs totalling 12,364,121 lines. The largest:

lines file
1,179,669 w584_bench_17d_aos_call_dedup.t27
786,483 w590_bench_module_17d_aos_var_call_reassign.t27
786,479 w591_bench_module_17d_aos_var_literal_reassign.t27
589,845 w582_bench_16d_aos_call_dedup.t27
491,567 w593_bench_module_5x2p15_aos_var_call_write.t27

Extrapolating the quadratic fit, w584 alone is on the order of hours for a single parse. Observed directly: w593 (491,567 lines) ran >30s without finishing; w595 (221,223 lines) ran >60s without finishing.

The suite spawns one t27c parse subprocess per file, so a full run is effectively unbounded. --fast does not help — its help text notes parse/typecheck/gen still run.

Impact

Contributors cannot use ./scripts/tri test or t27c suite as the documented local CI-like gate (CLAUDE.md section 2). Work has to fall back to partial verification.

Workaround in use

Running the suite against a mirror of the repo root whose specs/ omits scratch/ completes in minutes over the remaining 560 specs and exercises every phase (parse, typecheck, GF16, gen zig/rust/verilog/C, yosys smoke, FPGA smoke, seal, fixed-point).

Possible directions

  • Profile the parser for the quadratic factor — likely a repeated linear scan over accumulated state per declaration.
  • And/or give suite a flag to exclude specs/scratch/ (or sample it), so the default local run is usable.

Aside

That same filtered run reports 8 pre-existing gen-verilog-yosys-smoke failures on current master (e.g. igla/race/backend.t27, igla/race/rtl.t27, igla/coder/weights.t27). Unrelated to parse; filing here only so they are on record.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions