3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2026-03-02 03:36:56 +00:00
Commit graph

760 commits

Author SHA1 Message Date
Emil J. Tywoniak
d2d97433b6 opt_clean: refactor 2026-02-27 14:17:58 +01:00
Emil J. Tywoniak
818aad7542 opt_clean: resolve TODOs 2026-02-26 01:41:22 +01:00
Emil J. Tywoniak
c17bbeb291 opt_clean: refactor 2026-02-25 13:55:06 +01:00
Emil J. Tywoniak
71af584530 opt_clean: refactor 2026-02-25 13:41:33 +01:00
Emil J. Tywoniak
89fdc05784 opt_clean: refactor 2026-02-25 13:38:44 +01:00
Emil J. Tywoniak
ff67ef6377 opt_clean: refactor 2026-02-24 15:41:47 +01:00
Emil J. Tywoniak
ba3d62f8f1 opt_clean: fix out of tree build 2026-02-24 13:09:03 +01:00
Emil J. Tywoniak
d33acfe65f opt_clean: refactor 2026-02-24 13:03:16 +01:00
Emil J. Tywoniak
5d3b3ff18d opt_clean: refactor 2026-02-24 12:54:03 +01:00
Emil J. Tywoniak
930bd3acc5 opt_clean: refactor 2026-02-24 12:28:41 +01:00
Emil J. Tywoniak
60681ff126 opt_clean: refactor 2026-02-24 12:11:01 +01:00
Emil J. Tywoniak
e13f989234 opt_clean: refactor 2026-02-24 11:33:06 +01:00
Emil J. Tywoniak
90bd16f600 opt_clean: refactor 2026-02-24 10:39:26 +01:00
Emil J. Tywoniak
723258de2d opt_clean: refactor 2026-02-24 10:39:26 +01:00
Emil J. Tywoniak
ef536c4b1d opt_clean: refactor 2026-02-24 10:39:26 +01:00
Emil J. Tywoniak
17d667eab0 opt_clean: refactor 2026-02-24 10:39:26 +01:00
Emil J. Tywoniak
8dc9c48d4a opt_clean: refactor 2026-02-24 10:39:17 +01:00
Emil J. Tywoniak
97166d5aad opt_clean: refactor 2026-02-24 10:39:13 +01:00
Emil J. Tywoniak
187e91ad65 opt_clean: refactor 2026-02-24 10:39:13 +01:00
Emil J. Tywoniak
17688f053b opt_clean: refactor 2026-02-24 10:39:13 +01:00
Emil J. Tywoniak
090a0fd575 opt_clean: refactor 2026-02-24 10:39:13 +01:00
Emil J. Tywoniak
7d7978a929 opt_clean: more comments 2026-02-24 10:38:59 +01:00
Emil J. Tywoniak
9710be2f84 opt_clean: more comments 2026-02-24 10:38:59 +01:00
Emil J. Tywoniak
a5f554f00a opt_clean: add extra comments 2026-02-24 10:38:59 +01:00
Robert O'Callahan
f2340639e8 Pass the module Subpool to rmunused_module_signals and parallelize that function 2026-02-17 03:24:52 +00:00
Robert O'Callahan
cbb5d8fa12 Pass the module Subpool to rmunused_module_cells and parallelize that function 2026-02-17 03:24:52 +00:00
Robert O'Callahan
e213437095 Pass the module Subpool to rmunused_module_init and parallelize that function 2026-02-17 03:24:51 +00:00
Robert O'Callahan
2659f32616 Pass the toplevel thread pool to rmunused_module, create a Subpool, and parallelize remove_temporary_cells 2026-02-17 03:24:51 +00:00
Robert O'Callahan
0a64402dde Create a toplevel ParallelDispatchThreadPool and parallelize keep_cache_t::scan_module() with it 2026-02-17 03:24:51 +00:00
Robert O'Callahan
20189460bd Introduce RmStats struct to encapsulate removal statistics
Turns out this is not strictly necessary for this PR but it's
still a good thing to do and makes it clearer that the stats
are not modified in a possibly racy way.
2026-02-17 03:24:51 +00:00
Robert O'Callahan
b153fc2d16 Make keep_cache_t process all modules up-front instead of on-demand
We will want to query `keep_cache` from parallel threads. If we compute
the results on-demand, that means we need synchronization for cache
access in those queries, which adds complexity and overhead. Instead, prefill
the cache with the status of all relevant modules. Note that this doesn't
actually do more work --- we always consult `keep_cache` for all cells of
all selected modules, so scanning all those cells and determining the kept
status of all dependency modules is always required.

Later in this PR we're going to parallelize `scan_module` itself, and that's also
much easier to do when no other parallel threads are running.
2026-02-17 03:24:51 +00:00
Emil J
1717fa0180
Merge pull request #5663 from YosysHQ/emil/opt_expr-fix-pow-shift
opt_expr: fix const lhs of $pow to $shl
2026-02-05 13:09:01 +01:00
Emil J
8bbde80e02
Merge pull request #5631 from rocallahan/cleanup-compare-signals
Clean up `compare_signals()` in `opt_clean`
2026-02-04 17:45:05 +01:00
Emil J
992e64342c
Merge pull request #5621 from rocallahan/remove-opt-sort
Remove `Design::sort()` calls from optimization passes
2026-02-04 16:55:56 +01:00
Emil J. Tywoniak
3bfeaee8ca opt_expr: fix const lhs of $pow to $shl 2026-02-03 11:59:00 +01:00
nella
8f6c4d40e4
Merge pull request #5623 from YosysHQ/nella/opt-dff-rewrite
opt_dff restructure.
2026-01-28 14:41:40 +01:00
nella
9367090763 OptDff more accurate ctrl/pattern desc. 2026-01-26 22:19:36 +01:00
nella
5803461c24 opt_dff pattern extraction. 2026-01-26 22:10:10 +01:00
nella
8576055dea Fix tests. 2026-01-26 18:41:41 +01:00
nella
a75e0b2e92 opt_dff minor cleanup, added tests for comp var. 2026-01-26 14:24:01 +01:00
Robert O'Callahan
32e96605d4 Don't update used_signals for retained wires in rmunused_module_signals.
These updates should not be necessary. In fact, if they were necessary, this code
would be buggy, because the results would depend on the order in which wires are traversed:
If wire A is retained, which causes an update to `used_signals`, which then causes wire B
to be retained when it otherwise wouldn't be, then we would get different results depending
on whether A is visited before B.

These updates will also make it difficult to process these wires in parallel.
2026-01-24 03:41:18 +00:00
Robert O'Callahan
7d53d64a47 Make the call to compare_signals() easier to read.
The negation here is confusing. The intent of the code is "if `s1` is preferred
over `s2` as the canonical `SigBit` for this signal, make `s1` the canonical `SigBit`
in `assign_map`", so write the code that way instead of "if `s2` is not preferred
over `s1` ...".

This doesn't change any behavior now that `compare_signals()` is a total order,
i.e. `s1` is preferred over `s2`, `s2` is preferred over `s1`, or `s1` and `s2` are equal.
Now, when `s1` and `s2` are equal, we don't call `assign_map.add(s1)`, but that's
already a noop in that case.
2026-01-24 02:01:05 +00:00
Robert O'Callahan
2468b391bf Make compare_signals produce a total order.
Currently when `s1` and `s2` are different bits of the same wire,
it is possible for both `compare_signals(s1, s2)` and `compare_signals(s2, s1)` to
return false. This means the calling code will call `assign_map.add()` for
both `s1` and `s2`, which doesn't make much sense --- one of `s1` or `s2`
should be consistently preferred.

So fix that by preferring the `SigBit` with the smaller bit offset.
2026-01-24 02:00:33 +00:00
nella
0e4282d442 Add more opt_dff documentation. 2026-01-23 09:17:14 +01:00
Robert O'Callahan
e87bb65956 Move Design::sort() calls out of opt and opt_clean passes into the synth passes that need them. 2026-01-23 01:14:35 +00:00
nella
f6eba53d1f Fix copyright header. 2026-01-21 14:52:19 +01:00
nella
2c12545cf3 opt_dff restructure. 2026-01-21 10:08:44 +01:00
Emil J. Tywoniak
c3f36afe7f opt_balance_tree: mark experimental 2026-01-19 12:01:25 +01:00
Natalia
305b6c81d7 Refine width check to allow Y_WIDTH >= natural width
Change from equality check to >= to allow cells where output
is wider than natural width (zero-extended). Only reject cells
with Y_WIDTH < natural width (truncated).

This fixes test failures while still preventing the truncation
issue identified in widlarizer's feedback.
2026-01-14 14:58:53 -08:00
Natalia
60ac3670cb Fix truncation issue in opt_balance_tree pass
Only allow rebalancing of cells with "natural" output widths (no truncation).
This prevents equivalence failures when moving operands between adders
with different intermediate truncation points.

For each operation type, the natural width is:
- Addition: max(A_WIDTH, B_WIDTH) + 1 (for carry bit)
- Multiplication: A_WIDTH + B_WIDTH
- Logic ops: max(A_WIDTH, B_WIDTH)

Fixes widlarizer's counterexample in YosysHQ/yosys#5605 where an 8-bit
intermediate wire was intentionally truncating adder results, and
rebalancing would change where that truncation occurred.
2026-01-14 13:14:56 -08:00