Skip to content

dpl: remove abacus#10905

Open
gudeh wants to merge 93 commits into
The-OpenROAD-Project:masterfrom
gudeh:dpl-remove-abacus
Open

dpl: remove abacus#10905
gudeh wants to merge 93 commits into
The-OpenROAD-Project:masterfrom
gudeh:dpl-remove-abacus

Conversation

@gudeh

@gudeh gudeh commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Experiments show no gain in using it. It looks quite bugged.

Type of Change

  • Refactoring

Impact

No-op, abacus was disabled by default.

Verification

  • I have verified that the local build succeeds (./etc/Build.sh).
  • I have run the relevant tests and they pass.
  • My code follows the repository's formatting guidelines.
  • I have signed my commits (DCO).

Related Issues

This should follow PR #10226

gudeh added 30 commits April 22, 2026 08:38
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>
gudeh added 26 commits May 30, 2026 13:14
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>
@gudeh gudeh requested a review from a team as a code owner July 13, 2026 23:52
@gudeh gudeh requested a review from osamahammad21 July 13, 2026 23:52

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +114 to +116
if (debug_observer_) {
debug_observer_->startPlacement(db_->getChip()->getBlock());
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

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.

Suggested change
if (debug_observer_) {
debug_observer_->startPlacement(db_->getChip()->getBlock());
}
if (debug_observer_ && db_->getChip() && db_->getChip()->getBlock()) {
debug_observer_->startPlacement(db_->getChip()->getBlock());
}

Comment on lines +1282 to +1293
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;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

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_; }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The member function isUseNegotiationLegalizer does not modify any class state and should be marked const to adhere to const-correctness principles.

Suggested change
bool isUseNegotiationLegalizer() { return !use_diamond_legalizer_; }
bool isUseNegotiationLegalizer() const { return !use_diamond_legalizer_; }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant