rsz: Avoid SIGILL in net tree stitching if subtree can't build#10904
rsz: Avoid SIGILL in net tree stitching if subtree can't build#10904mikesinouye wants to merge 1 commit into
Conversation
This can happen when calling repair_timing on a pre-placement netlist where buffered nets can fail to build. Signed-off-by: Mike Inouye <mikeinouye@google.com>
There was a problem hiding this comment.
Code Review
This pull request adds null pointer checks for tree1 and tree2 in Resizer::estimateSlewsAfterBufferRemoval before they are passed to stitchTrees, preventing potential null pointer dereferences. There are no review comments, and I have no additional feedback to provide.
|
Its always worth fixing a segv but I'm not sure what you are hoping to use this for? Buffering wants there to be placement to do much as it relies on Steiner trees. The gain based buffering is intended for pre-placement usage. |
|
We have a 'synthesis' that does: This correlates much more strongly on perf than the raw Yosys netlist using the abc buffering solution and Vt/strength selection. This bug was found as a recent unrelated flow change causes the est call to be run, which then SIGILLs repair_timing. However, I would expect this to be a no-op. Does this flow make sense to you? Our data suggests it is useful for the runtime cost. |
|
You will get some optimization that way (eg Vt swap) but other parts will fail and get skipped. If that is useful that's fine but be aware it isn't a full optimization like you would get after placement. |
Summary
This can happen when calling repair_timing on a pre-placement netlist where buffered nets can fail to build if estimate_parasitics -placement was called.
Type of Change
Impact
[How does this change the tool's behavior?]
Avoids crashes of the form:
Verification
./etc/Build.sh).