diff --git a/liberty/Liberty.hh b/liberty/Liberty.hh index d74a5da0..baf2106f 100644 --- a/liberty/Liberty.hh +++ b/liberty/Liberty.hh @@ -452,10 +452,6 @@ public: OcvDerate *ocvDerate() const; OcvDerate *findOcvDerate(const char *derate_name); - // Next higher/lower drive equivalent cells. - LibertyCell *higherDrive() const; - LibertyCell *lowerDrive() const; - // Build helpers. void makeSequential(int size, bool is_register, diff --git a/search/Sta.cc b/search/Sta.cc index 1c845b64..91ad5a55 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -2918,6 +2918,27 @@ Sta::vertexSlack1(Vertex *vertex, return slack; } +void +Sta::vertexSlacks(Vertex *vertex, + Slack (&slacks)[RiseFall::index_count][MinMax::index_count]) +{ + findRequired(vertex); + for(int rf_index : RiseFall::rangeIndex()) { + for(MinMax *min_max : MinMax::range()) { + slacks[rf_index][min_max->index()] = MinMax::min()->initValue(); + } + } + VertexPathIterator path_iter(vertex, this); + while (path_iter.hasNext()) { + Path *path = path_iter.next(); + Slack path_slack = path->slack(this); + int rf_index = path->rfIndex(this); + int mm_index = path->minMax(this)->index(); + if (path_slack < slacks[rf_index][mm_index]) + slacks[rf_index][mm_index] = path_slack; + } +} + void Sta::findRequired(Vertex *vertex) { diff --git a/search/Sta.hh b/search/Sta.hh index 75275a5c..7f49a44a 100644 --- a/search/Sta.hh +++ b/search/Sta.hh @@ -1010,6 +1010,8 @@ public: Slack vertexSlack(Vertex *vertex, const RiseFall *rf, const PathAnalysisPt *path_ap); + void vertexSlacks(Vertex *vertex, + Slack (&slacks)[RiseFall::index_count][MinMax::index_count]); // Slew for one delay calc analysis pt(corner). Slew vertexSlew(Vertex *vertex, const RiseFall *rf,