[HW][circt-synth] Implement AggregateToComb pass and add to circt-synth pipeline #8068
+363
−56
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds a new pass
HWAggregateToComb
that lowers array operations to comb operations. The pass converts:hw.array_get
to a mux tree using comb operationshw.array_create
andhw.array_concat
tocomb.concat
hw.aggregate_constant
tocomb.concat
of individual constantsThe PR also moves two utility functions from CombToAIG to the Comb dialect:
extractBits
: Extracts individual bits from a valueconstructMuxTree
: Builds a multiplexer tree from selectors and leaf nodesThe pass is required to run before CombToAIG to ensure array operations are
properly lowered to AIG. Strictly speaking other than array_get operations can be preserved
but array values prevent optimizations at AIG level. So for the simplicity, I think it's reasonable
to lower array operations within circt-synth pipeline.
I currently added the pass under
HW/Transforms
consideringFlattenIO
is very similar but the pass might better belong to Conversion.