rtlil: Add packed extract
implementation for SigSpec
#4350
Merged
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.
Previously
extract
on aSigSpec
would always unpack it. Since a significant amount ofSigSpec
s have one or few chunks, it's worth having a dedicated implementation.This is especially true, since the RTLIL frontend calls into this for every
wire [lhs:rhs]
slice, making thisextract
take up 40% when profilingread_rtlil
with one of the largest coarse grained RTLIL designs I had on hand.With this change the
read_rtlil
profile looks like I would expect it to look like, but I noticed that a lot of the other core RTLIL methods also are a bit too eager with unpacking or implementingSigChunk
/Const
overloads that just convert to a single chunkSigSpec
and forward to the implementation for that, when a direct implementation would avoid temporary std::vector allocations. While not relevant forread_rtlil
, to me it looks like there might be a few easy overall performance gains to be had by addressing this more generally.