-
Notifications
You must be signed in to change notification settings - Fork 404
[AIG] Refactor AIG longest-path analysis with lazy mode and max-delay filtering #8940
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cd5068f to
6e4f925
Compare
… filtering. Introduce LongestPathAnalysisOption with collectDebugInfo, lazyComputation, and keepOnlyMaxDelayPaths, replacing traceDebugPoints/incremental. Add path filtering that deduplicates by fan-in and, when enabled, keeps only max-delay paths (with special handling for module inputs); apply in local and global scopes. Rename and clarify APIs: getResults → computeGlobalPaths; getOrComputeResults/getResults → getOrComputePaths/getCachedPaths. getMaxDelay/getAverageMaxDelay now return FailureOr<int64_t> and support per-bit or all-bits queries. Update IncrementalLongestPathAnalysis: defaults to lazyComputation=true and keepOnlyMaxDelayPaths=true; add options-based constructor. Rework OperationAnalyzer to use its own analysis Context (lazy=true, keepOnlyMaxDelayPaths=false) for precise dependency discovery; rename getResults → analyzeOperation; cache by op signature. Extend C API: new constructor flags; add getPaths(value, bitPos, elaborate) and collection merge. Extend Python bindings: expose new constructor options; add get_paths and LongestPathCollection.merge; update integration test. Adjust DatapathToComb lowering to use analysis->getMaxDelay(...). Improve visitor concurrency: use getLocalVisitorMutable and wait only when running in parallel. Breaking changes: C API constructor signature changed; LongestPathAnalysisWithTrace removed. Several C++ methods renamed and now return FailureOr. Python API constructor and new methods added; call sites may need updates. This enables faster on-demand timing analysis, optional memory/time savings via max-delay filtering, and more flexible C/Python entry points.
6e4f925 to
a738234
Compare
uenoku
commented
Sep 11, 2025
uenoku
commented
Sep 11, 2025
uenoku
commented
Sep 11, 2025
uenoku
commented
Sep 11, 2025
fabianschuiki
approved these changes
Sep 11, 2025
Contributor
fabianschuiki
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! I'm not intimately familiar with the internal logic of the analysis, but the changes look good from what I can tell. Really like all the comments on LongestPathAnalysisOption!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 several enhancement to LongestPath analysis which is critical for fast analysis on large design. Specifically when
keepOnlyMaxDelayPathsis enabled the analysis keeps only critical path for each reg/output port.Introduce LongestPathAnalysisOption with collectDebugInfo, lazyComputation, and keepOnlyMaxDelayPaths, replacing traceDebugPoints/incremental.
Add path filtering that deduplicates by fan-in and, when enabled, keeps only max-delay paths (with special handling for module inputs); apply in local and global scopes.
Rename and clarify APIs: getResults → computeGlobalPaths; getOrComputeResults/getResults → getOrComputePaths/getCachedPaths. getMaxDelay/getAverageMaxDelay now return FailureOr<int64_t> and support per-bit or all-bits queries.
Update IncrementalLongestPathAnalysis: defaults to lazyComputation=true and keepOnlyMaxDelayPaths=true; add options-based constructor.
Rework OperationAnalyzer to use its own analysis Context (lazy=true, keepOnlyMaxDelayPaths=false)
Extend C API: new constructor flags; add getPaths(value, bitPos, elaborate) and collection merge. Extend Python bindings: expose new constructor options; add get_paths and LongestPathCollection.merge; update integration test.
This enables faster on-demand timing analysis, optional memory/time savings via max-delay filtering, and more flexible C/Python entry points.
The PR is a bit too broad(sorry) but it doesn't change results for exiting API.