You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
analyzer/sim: fast and compact handling of large arrays
Two large-memory testbench arrays (e.g. `var dram: logic<32>[8M]`)
previously dominated both analyze_pass2 CPU time and RSS in the IR.
pass2 speedup:
- AssignDestination: skip full-range iteration when the index is
non-const and total_array > evaluate_array_limit.
- Factor::eval_assign: avoid cloning the full Variable for
large-array references (insert_reference bails anyway).
Compact storage:
- `var` / port / let initializers (all-same x-state) store a single
template Value instead of N copies; `const` / `param` with
`'{...}` literals keep per-element values.
- Variable::new derives `assigned` length from r#type.total_array()
and skips allocation for arrays past evaluate_array_limit.
- fmt::Display replicates the template across total_array().
- Simulator mirrors via `v.value.len() < total_array`.
heliodor linux_boot: pass2 75 s -> 27 s, Max RSS 3.5 GB -> 2.2 GB.
0 commit comments