separate array tables for arrivals and requireds

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2021-09-17 16:19:24 -07:00
parent 2e89d12078
commit d25f6878a2
5 changed files with 35 additions and 4 deletions

View File

@ -540,8 +540,8 @@ Graph::makeRequireds(Vertex *vertex,
Required *requireds;
ArrivalId id;
{
UniqueLock lock(arrivals_lock_);
arrivals_.make(count, requireds, id);
UniqueLock lock(requireds_lock_);
requireds_.make(count, requireds, id);
}
vertex->setRequireds(id);
return requireds;
@ -550,14 +550,14 @@ Graph::makeRequireds(Vertex *vertex,
Required *
Graph::requireds(Vertex *vertex)
{
return arrivals_.pointer(vertex->requireds());
return requireds_.pointer(vertex->requireds());
}
void
Graph::deleteRequireds(Vertex *vertex,
uint32_t count)
{
arrivals_.destroy(vertex->requireds(), count);
requireds_.destroy(vertex->requireds(), count);
vertex->setRequireds(arrival_null);
}
@ -565,6 +565,7 @@ void
Graph::clearArrivals()
{
arrivals_.clear();
requireds_.clear();
}
PathVertexRep *

View File

@ -43,6 +43,7 @@ typedef ArrayTable<Delay> DelayTable;
typedef ObjectTable<Vertex> VertexTable;
typedef ObjectTable<Edge> EdgeTable;
typedef ArrayTable<Arrival> ArrivalsTable;
typedef ArrayTable<Required> RequiredsTable;
typedef ArrayTable<PathVertexRep> PrevPathsTable;
typedef Map<const Pin*, Vertex*> PinVertexMap;
typedef Iterator<Edge*> VertexEdgeIterator;
@ -110,6 +111,7 @@ public:
uint32_t count);
void clearArrivals();
size_t arrivalCount() const { return arrivals_.size(); }
size_t requiredCount() const { return requireds_.size(); }
PathVertexRep *makePrevPaths(Vertex *vertex,
uint32_t count);
PathVertexRep *prevPaths(Vertex *vertex) const;
@ -244,6 +246,8 @@ protected:
int arc_count_;
ArrivalsTable arrivals_;
std::mutex arrivals_lock_;
RequiredsTable requireds_;
std::mutex requireds_lock_;
PrevPathsTable prev_paths_;
std::mutex prev_paths_lock_;
Vector<bool> arc_delay_annotated_;

View File

@ -1045,6 +1045,7 @@ public:
TagGroupIndex tagGroupCount() const;
int clkInfoCount() const;
int arrivalCount() const;
int requiredCount() const;
int vertexArrivalCount(Vertex *vertex) const;
Vertex *maxArrivalCountVertex() const;

View File

@ -3356,6 +3356,19 @@ Sta::arrivalCount() const
return count;
}
int
Sta::requiredCount() const
{
int count = 0;
VertexIterator vertex_iter(graph_);
while (vertex_iter.hasNext()) {
Vertex *vertex = vertex_iter.next();
if (vertex->hasRequireds())
count += vertexArrivalCount(vertex);
}
return count;
}
TagIndex
Sta::tagCount() const
{

View File

@ -5301,12 +5301,24 @@ arrival_count()
return Sta::sta()->arrivalCount();
}
int
required_count()
{
return Sta::sta()->requiredCount();
}
int
graph_arrival_count()
{
return Sta::sta()->graph()->arrivalCount();
}
int
graph_required_count()
{
return Sta::sta()->graph()->requiredCount();
}
void
delete_all_memory()
{