Skip to content

Commit 16ed5c9

Browse files
committed
psm: node hold visited
Signed-off-by: Peter Gadfort <peter.gadfort@gmail.com>
1 parent 10323ad commit 16ed5c9

6 files changed

Lines changed: 29 additions & 28 deletions

File tree

src/psm/src/ir_network.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,4 +1298,19 @@ Node::NodeSet IRNetwork::getBPinShapeNodes() const
12981298
return pin_nodes;
12991299
}
13001300

1301+
void IRNetwork::clearVisitedNodes()
1302+
{
1303+
for (const auto& [layer, nodes] : nodes_) {
1304+
for (const auto& node : nodes) {
1305+
node->setVisited(false);
1306+
}
1307+
}
1308+
for (const auto& node : iterm_nodes_) {
1309+
node->setVisited(false);
1310+
}
1311+
for (const auto& node : bpin_nodes_) {
1312+
node->setVisited(false);
1313+
}
1314+
}
1315+
13011316
} // namespace psm

src/psm/src/ir_network.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ class IRNetwork
106106

107107
std::size_t getNodeCount(bool include_iterms = false) const;
108108

109+
void clearVisitedNodes();
110+
109111
const Connections& getConnections() const { return connections_; }
110112
NodePtrMap<Connection> getConnectionMap() const;
111113

src/psm/src/ir_solver.cpp

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -141,27 +141,12 @@ bool IRSolver::check(bool check_bterms)
141141
return connected_.value();
142142
}
143143

144-
bool IRSolver::wasNodeVisited(const std::unique_ptr<ITermNode>& node) const
145-
{
146-
return wasNodeVisited(node.get());
147-
}
148-
149-
bool IRSolver::wasNodeVisited(const std::unique_ptr<Node>& node) const
150-
{
151-
return wasNodeVisited(node.get());
152-
}
153-
154-
bool IRSolver::wasNodeVisited(const Node* node) const
155-
{
156-
return visited_.find(node) != visited_.end();
157-
}
158-
159144
bool IRSolver::checkOpen()
160145
{
161146
const utl::DebugScopedTimer timer(
162147
logger_, utl::PSM, "timer", 1, "Check open: {}");
163148

164-
visited_.clear();
149+
network_->clearVisitedNodes();
165150
const std::size_t total_nodes = network_->getNodeCount(true);
166151
const auto connections_map = network_->getConnectionMap();
167152

@@ -179,7 +164,7 @@ bool IRSolver::checkOpen()
179164
while (!queue.empty()) {
180165
Node* node = queue.front();
181166
queue.pop();
182-
if (wasNodeVisited(node)) {
167+
if (node->isVisited()) {
183168
// already been here, so we can continue to next node
184169
continue;
185170
}
@@ -196,11 +181,11 @@ bool IRSolver::checkOpen()
196181
total_nodes);
197182
}
198183

199-
visited_.insert(node);
184+
node->setVisited(true);
200185

201186
for (const auto* conn : connections_map.at(node)) {
202187
Node* next = conn->getOtherNode(node);
203-
if (wasNodeVisited(next)) {
188+
if (next->isVisited()) {
204189
// already been here, so we do not need to add it to the queue
205190
continue;
206191
}
@@ -210,7 +195,7 @@ bool IRSolver::checkOpen()
210195

211196
for (const auto& [layer, layer_nodes] : network_->getNodes()) {
212197
for (const auto& node : layer_nodes) {
213-
if (wasNodeVisited(node)) {
198+
if (node->isVisited()) {
214199
continue;
215200
}
216201

@@ -249,7 +234,7 @@ IRSolver::ConnectivityResults IRSolver::getConnectivityResults() const
249234

250235
for (const auto& [layer, nodes] : network_->getNodes()) {
251236
for (const auto& node : nodes) {
252-
if (wasNodeVisited(node)) {
237+
if (node->isVisited()) {
253238
continue;
254239
}
255240

@@ -258,7 +243,7 @@ IRSolver::ConnectivityResults IRSolver::getConnectivityResults() const
258243
}
259244

260245
for (const auto& node : network_->getITermNodes()) {
261-
if (wasNodeVisited(node)) {
246+
if (node->isVisited()) {
262247
continue;
263248
}
264249

src/psm/src/ir_solver.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,6 @@ class IRSolver
162162

163163
void reportUnconnectedNodes() const;
164164
void reportMissingBTerm() const;
165-
bool wasNodeVisited(const std::unique_ptr<ITermNode>& node) const;
166-
bool wasNodeVisited(const std::unique_ptr<Node>& node) const;
167-
bool wasNodeVisited(const Node* node) const;
168165

169166
std::map<Node*, Connection::ConnectionSet> getNodeConnectionMap(
170167
const Connection::ConnectionMap<Connection::Conductance>& conductance)
@@ -216,8 +213,6 @@ class IRSolver
216213

217214
const PDNSim::GeneratedSourceSettings& generated_source_settings_;
218215

219-
// Holds nodes that were visited during the open net check
220-
std::set<const Node*> visited_;
221216
std::optional<bool> connected_;
222217

223218
std::map<sta::Scene*, ValueNodeMap<Voltage>> voltages_;

src/psm/src/node.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
namespace psm {
1515

1616
Node::Node(const odb::Point& pt, odb::dbTechLayer* layer)
17-
: pt_(pt), layer_(layer)
17+
: pt_(pt), layer_(layer), visited_(false)
1818
{
1919
}
2020

src/psm/src/node.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ class Node
5959
const odb::Point& getPoint() const { return pt_; };
6060
odb::dbTechLayer* getLayer() const { return layer_; };
6161

62+
bool isVisited() const { return visited_; }
63+
void setVisited(bool visited) { visited_ = visited; }
64+
6265
void print(utl::Logger* logger, const std::string& prefix = "") const;
6366
virtual std::string describe(const std::string& prefix) const;
6467

@@ -75,6 +78,7 @@ class Node
7578

7679
odb::Point pt_;
7780
odb::dbTechLayer* layer_;
81+
bool visited_ = false;
7882
};
7983

8084
class SourceNode : public Node

0 commit comments

Comments
 (0)