dpl: remove abacus#10905
Conversation
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…alizer Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…alizer Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
stop every iteration on iterative mode, include stop on final state, introduce iterative_jump to stop at desired iteration Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…oves in grey, track current-iter movers Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…sites, print table similar to gpl with controled number of lines, less verbose, rename overflow to violations Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
… for all instances, instead fetch instance height from db to define pixel grid height relative to instance Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
make sure the window fits properly with valid rows, Y range is given by min between: (cell height * constantY), versus max y displacement X range is given by min between: max(constantX, cell width), versus max x displacement Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
include new debug messa for debuging window range Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Match the canonical check: bottom-row site type only, plus checkRowPowerCompatible for multi-row masters. Also extend the search-window draw rect up to max_anchor + cell.height so it encloses the cell at the topmostcandidate row. Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…cosistent with legacy rail checking at checkRowPowerCompatible Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…verbosity Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…fault Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com> # Conflicts: # src/cts/test/array.ok # src/cts/test/array_ins_delay.ok # src/cts/test/array_max_wl.defok # src/cts/test/array_max_wl.ok # src/cts/test/array_no_blockages.ok # src/cts/test/array_repair_clock_nets.ok # src/ram/test/make_7x7_nangate45.ok # test/aes_nangate45.metrics # test/aes_nangate45.metrics_limits # test/aes_sky130hs.metrics # test/ibex_sky130hs.metrics # test/jpeg_sky130hs.metrics # test/jpeg_sky130hs.metrics_limits
…easier merging with master due to external changes Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…id utilization, below 100 Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
The Abacus pass was optional (off by default, -abacus flag) and its simplified cluster implementation was never production quality. Remove the pass, its command-line plumbing, and the dead snapToLegal helper only it used. Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
There was a problem hiding this comment.
Code Review
This pull request removes the Abacus pre-pass from the NegotiationLegalizer, making the NegotiationLegalizer the default engine while keeping the legacy diamond search available via the new -use_diamond_legalizer flag. It also simplifies the initial snapping logic to a 4-direction linear search and adds reporting for illegal nodes upon convergence failure. The review feedback highlights critical safety issues, including potential null-pointer dereferences when calling debug_observer_->startPlacement and when accessing network_ in getIllegalNodes(), as well as a suggestion to mark isUseNegotiationLegalizer() as const for const-correctness.
| if (debug_observer_) { | ||
| debug_observer_->startPlacement(db_->getChip()->getBlock()); | ||
| } |
There was a problem hiding this comment.
Moving debug_observer_->startPlacement before initFromDb() introduces a potential null-pointer dereference. db_->getChip() or db_->getChip()->getBlock() can be nullptr (which is explicitly checked and guarded against inside initFromDb()). Calling startPlacement before these guards run can cause a crash. It should be guarded with null checks.
| if (debug_observer_) { | |
| debug_observer_->startPlacement(db_->getChip()->getBlock()); | |
| } | |
| if (debug_observer_ && db_->getChip() && db_->getChip()->getBlock()) { | |
| debug_observer_->startPlacement(db_->getChip()->getBlock()); | |
| } |
| std::vector<Node*> NegotiationLegalizer::getIllegalNodes() const | ||
| { | ||
| std::vector<Node*> illegal; | ||
| for (int i = 0; i < static_cast<int>(cells_.size()); ++i) { | ||
| if (!cells_[i].fixed && !isCellLegal(i)) { | ||
| if (Node* node = network_->getNode(cells_[i].db_inst)) { | ||
| illegal.push_back(node); | ||
| } | ||
| } | ||
| } | ||
| return illegal; | ||
| } |
There was a problem hiding this comment.
The network_ pointer can be nullptr in certain contexts, as treated by other functions in this class. Calling network_->getNode without a null check will cause a crash if network_ is null. A guard should be added at the beginning of the function.
std::vector<Node*> NegotiationLegalizer::getIllegalNodes() const
{
std::vector<Node*> illegal;
if (!network_) {
return illegal;
}
for (int i = 0; i < static_cast<int>(cells_.size()); ++i) {
if (!cells_[i].fixed && !isCellLegal(i)) {
if (Node* node = network_->getNode(cells_[i].db_inst)) {
illegal.push_back(node);
}
}
}
return illegal;
}| odb::Point getOdbLocation(const Node* cell) const; | ||
| odb::Point getDplLocation(const Node* cell) const; | ||
|
|
||
| bool isUseNegotiationLegalizer() { return !use_diamond_legalizer_; } |
There was a problem hiding this comment.
The member function isUseNegotiationLegalizer does not modify any class state and should be marked const to adhere to const-correctness principles.
| bool isUseNegotiationLegalizer() { return !use_diamond_legalizer_; } | |
| bool isUseNegotiationLegalizer() const { return !use_diamond_legalizer_; } |
Summary
Experiments show no gain in using it. It looks quite bugged.
Type of Change
Impact
No-op, abacus was disabled by default.
Verification
./etc/Build.sh).Related Issues
This should follow PR #10226