Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/gpl/src/mbff.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2307,6 +2307,7 @@ void MBFF::Run(const int mx_sz, const float alpha, const float beta)
for (const auto [tray, count] : tray_sizes_used_) {
log_->report(" {}-bit: {}", tray, count);
}
resizer_->invalidateVertexOrdering();
}

Point MBFF::GetTrayCenter(const Mask& array_mask, const int idx)
Expand Down
2 changes: 2 additions & 0 deletions src/rsz/include/rsz/Resizer.hh
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,8 @@ class Resizer : public sta::dbStaState, public sta::dbNetworkObserver
const BufferedNetPtr& tree,
const sta::Scene* corner,
std::map<const sta::Pin*, float>& load_pin_slew);
// Any cell insertion or deletion should invalidate vertex ordering
void invalidateVertexOrdering() { level_drvr_vertices_valid_ = false; }

protected:
void init();
Expand Down
4 changes: 4 additions & 0 deletions src/rsz/src/CloneMove.cc
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,10 @@ bool CloneMove::doMove(const Path* drvr_path,
}
}
}

// Invalidate vertex level ordering
resizer_->invalidateVertexOrdering();

return true;
}

Expand Down
7 changes: 6 additions & 1 deletion src/rsz/src/ConcreteSwapArithModules.cc
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,12 @@ bool ConcreteSwapArithModules::doSwapInstances(std::set<dbModInst*>& insts,
target);
logger_->metric("design__instance__count__swapped_arithmetic_operator",
swapped_count);
return (swapped_count > 0);
bool swapped = swapped_count > 0;
if (swapped) {
// Invalidate vertex level ordering
resizer_->invalidateVertexOrdering();
}
return swapped;
}

void ConcreteSwapArithModules::produceNewModuleName(const std::string& old_name,
Expand Down
6 changes: 3 additions & 3 deletions src/rsz/src/Rebuffer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1831,7 +1831,7 @@ int Rebuffer::exportBufferTree(const BufferedNetPtr& choice,

if (buf_inst) {
count++;
resizer_->level_drvr_vertices_valid_ = false;
resizer_->invalidateVertexOrdering();

sta::LibertyPort *input, *output;
buffer_cell->bufferPorts(input, output);
Expand Down Expand Up @@ -2227,7 +2227,7 @@ void Rebuffer::fullyRebuffer(sta::Pin* user_pin)
}

printProgress(filtered_pins.size(), false, true, 0);
resizer_->level_drvr_vertices_valid_ = false;
resizer_->invalidateVertexOrdering();

debugPrint(logger_, RSZ, "rebuffer", 1, "Time spent");
debugPrint(logger_, RSZ, "rebuffer", 1, "----------");
Expand Down Expand Up @@ -2355,7 +2355,7 @@ int Rebuffer::rebufferPin(const sta::Pin* drvr_pin)
bnet, db_network_->dbToSta(db_net), 1, parent, "rebuffer");

if (inserted_count > 0) {
resizer_->level_drvr_vertices_valid_ = false;
resizer_->invalidateVertexOrdering();
}

debugPrint(logger_, RSZ, "rebuffer", 2, "-------------------------------");
Expand Down
8 changes: 4 additions & 4 deletions src/rsz/src/RepairDesign.cc
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ void RepairDesign::performEarlySizingRound(int& repaired_net_count)
}
debugPrint(logger_, RSZ, "early_sizing", 1, "Early sizing round finished.");

resizer_->level_drvr_vertices_valid_ = false;
resizer_->invalidateVertexOrdering();
resizer_->ensureLevelDrvrVertices();
}

Expand Down Expand Up @@ -426,7 +426,7 @@ void RepairDesign::repairDesign(

printProgress(print_iteration, true, true, repaired_net_count);
if (inserted_buffer_count_ > 0) {
resizer_->level_drvr_vertices_valid_ = false;
resizer_->invalidateVertexOrdering();
}
db_network_->removeUnusedPortsAndPinsOnModuleInstances();
}
Expand Down Expand Up @@ -508,7 +508,7 @@ void RepairDesign::repairClkNets(double max_wire_length)
"Inserted {} buffers in {} nets.",
inserted_buffer_count_,
repaired_net_count);
resizer_->level_drvr_vertices_valid_ = false;
resizer_->invalidateVertexOrdering();
}

// Restore previous sizing restrictions when area_limit and leakage_limit go
Expand Down Expand Up @@ -2345,7 +2345,7 @@ void RepairDesign::reportViolationCounters(bool invalidate_driver_vertices,
inserted_buffer_count_,
repaired_net_count);
if (invalidate_driver_vertices) {
resizer_->level_drvr_vertices_valid_ = false;
resizer_->invalidateVertexOrdering();
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/rsz/src/RepairHold.cc
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ bool RepairHold::repairHold(sta::VertexSeq& ends,
repaired = true;
logger_->info(
RSZ, 32, "Inserted {} hold buffers.", inserted_buffer_count_);
resizer_->level_drvr_vertices_valid_ = false;
resizer_->invalidateVertexOrdering();
}
if (inserted_buffer_count_ > max_buffer_count) {
logger_->error(RSZ, 60, "Max buffer count reached.");
Expand Down
22 changes: 17 additions & 5 deletions src/rsz/src/Resizer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ void Resizer::removeBuffers(sta::InstanceSeq insts)
}
unbuffer_move_->commitMoves();
estimate_parasitics_->updateParasitics();
level_drvr_vertices_valid_ = false;
invalidateVertexOrdering();
logger_->info(RSZ, 26, "Removed {} buffers.", unbuffer_move_->numMoves());
}

Expand Down Expand Up @@ -1044,7 +1044,7 @@ void Resizer::bufferInputs(sta::LibertyCell* buffer_cell, bool verbose)
selected_buffer_cell->name());

if (inserted_buffer_count_ > 0) {
level_drvr_vertices_valid_ = false;
invalidateVertexOrdering();
}
}

Expand Down Expand Up @@ -1187,7 +1187,7 @@ void Resizer::bufferOutputs(sta::LibertyCell* buffer_cell, bool verbose)
selected_buffer_cell->name());

if (inserted_buffer_count_ > 0) {
level_drvr_vertices_valid_ = false;
invalidateVertexOrdering();
}
}

Expand Down Expand Up @@ -2575,7 +2575,7 @@ void Resizer::findResizeSlacks(bool run_journal_restore)
db_cbk_->addOwner(block_);
journalRestore();
db_cbk_->removeOwner();
level_drvr_vertices_valid_ = false;
invalidateVertexOrdering();
}
}

Expand Down Expand Up @@ -3288,7 +3288,7 @@ void Resizer::repairTieFanout(sta::LibertyPort* tie_port,
if (tie_count > 0) {
logger_->info(
RSZ, 42, "Inserted {} tie {} instances.", tie_count, tie_cell->name());
level_drvr_vertices_valid_ = false;
invalidateVertexOrdering();
}
}

Expand Down Expand Up @@ -3472,6 +3472,8 @@ void Resizer::deleteTieCellAndNet(const sta::Instance* tie_inst,
}
if (!has_other_fanout) {
sta_->deleteInstance(const_cast<sta::Instance*>(tie_inst));
// Invalidate vertex level ordering
invalidateVertexOrdering();
}
}

Expand Down Expand Up @@ -4380,6 +4382,9 @@ void Resizer::cloneClkInverter(sta::Instance* inv)
sta_->deleteInstance(inv);
}
}

// Invalidate vertex level ordering
invalidateVertexOrdering();
}

////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -4728,6 +4733,9 @@ void Resizer::journalRestore()
unbuffer_move_->undoMoves();
split_load_move_->undoMoves();

// Invalidate vertex level ordering
invalidateVertexOrdering();

debugPrint(logger_,
RSZ,
"opt_moves",
Expand Down Expand Up @@ -5434,6 +5442,10 @@ void Resizer::eliminateDeadLogic(bool clean_nets)
}
}

if (remove_inst_count > 0 || remove_net_count > 0) {
// Invalidate vertex level ordering
invalidateVertexOrdering();
}
logger_->report("Removed {} unused instances and {} unused nets.",
remove_inst_count,
remove_net_count);
Expand Down
2 changes: 2 additions & 0 deletions src/rsz/src/SplitLoadMove.cc
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,8 @@ bool SplitLoadMove::doMove(const Path* drvr_path,
Net* out_net = network_->net(buffer_out_pin);
estimate_parasitics_->parasiticsInvalid(out_net);

// Invalidate vertex level ordering
resizer_->invalidateVertexOrdering();
return true;
}

Expand Down
7 changes: 6 additions & 1 deletion src/rsz/src/UnbufferMove.cc
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,12 @@ bool UnbufferMove::doMove(const Path* drvr_path,
1,
"ACCEPT unbuffer {}",
network_->pathName(drvr));
return removeBuffer(drvr);
bool removed = removeBuffer(drvr);
if (removed) {
// Invalidate vertex level ordering
resizer_->invalidateVertexOrdering();
}
return removed;
}
debugPrint(logger_,
RSZ,
Expand Down
Loading