diff --git a/include/sta/PathEnd.hh b/include/sta/PathEnd.hh index 455b78dd..6bca1f97 100644 --- a/include/sta/PathEnd.hh +++ b/include/sta/PathEnd.hh @@ -388,6 +388,7 @@ public: Crpr &crpr_diff, Delay &max_borrow, bool &borrow_limit_exists) const; + virtual bool ignoreClkLatency(const StaState *sta) const; protected: PathEndLatchCheck(Path *path, diff --git a/include/sta/Search.hh b/include/sta/Search.hh index a2430809..d4039f50 100644 --- a/include/sta/Search.hh +++ b/include/sta/Search.hh @@ -156,6 +156,18 @@ public: PathGroup *pathGroup(const PathEnd *path_end) const; void deletePathGroups(); + void makePathGroups(int group_count, + int endpoint_count, + bool unique_pins, + float min_slack, + float max_slack, + PathGroupNameSet *group_names, + bool setup, + bool hold, + bool recovery, + bool removal, + bool clk_gating_setup, + bool clk_gating_hold); virtual ExceptionPath *exceptionTo(ExceptionPathType type, const Path *path, const Pin *pin, @@ -511,18 +523,6 @@ protected: void tnsDecr(Vertex *vertex, PathAPIndex path_ap_index); void tnsNotifyBefore(Vertex *vertex); - PathGroups *makePathGroups(int group_count, - int endpoint_count, - bool unique_pins, - float min_slack, - float max_slack, - PathGroupNameSet *group_names, - bool setup, - bool hold, - bool recovery, - bool removal, - bool clk_gating_setup, - bool clk_gating_hold); bool matchesFilterTo(Path *path, const ClockEdge *to_clk_edge) const; PathRef pathClkPathArrival1(const Path *path) const; diff --git a/sdc/Sdc.cc b/sdc/Sdc.cc index 7925f048..ee14c6c1 100644 --- a/sdc/Sdc.cc +++ b/sdc/Sdc.cc @@ -4371,7 +4371,8 @@ Sdc::findMatchingExceptionsFirstThru(ExceptionPath *exception, findMatchingExceptionsInsts(exception, thru->instances(), first_thru_inst_exceptions_, matches); - if (!first_thru_net_exceptions_.empty()) { + if (!first_thru_net_exceptions_.empty() + && thru->nets()) { for (const Net *net : *thru->nets()) { // Potential matches includes exceptions that match net that are not // the first exception point. diff --git a/search/Bfs.cc b/search/Bfs.cc index f5d8a429..cdb6d3a7 100644 --- a/search/Bfs.cc +++ b/search/Bfs.cc @@ -308,7 +308,7 @@ BfsIterator::remove(Vertex *vertex) Level level = vertex->level(); if (vertex->bfsInQueue(bfs_index_) && static_cast(queue_.size()) > level) { - for (Vertex *v : queue_[level]) { + for (Vertex *&v : queue_[level]) { if (v == vertex) { v = nullptr; vertex->setBfsInQueue(bfs_index_, false); diff --git a/search/PathEnd.cc b/search/PathEnd.cc index 10c93394..a60b1f45 100644 --- a/search/PathEnd.cc +++ b/search/PathEnd.cc @@ -1269,6 +1269,12 @@ PathEndLatchCheck::exceptPathCmp(const PathEnd *path_end, return cmp; } +bool +PathEndLatchCheck::ignoreClkLatency(const StaState *sta) const +{ + return PathEnd::ignoreClkLatency(path_, path_delay_, sta); +} + /////////////////////////////////////////////////////////////// PathEndOutputDelay::PathEndOutputDelay(OutputDelay *output_delay, diff --git a/search/Search.cc b/search/Search.cc index 48a4956f..86d68724 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -452,11 +452,11 @@ Search::findPathEnds(ExceptionFrom *from, recovery = removal = false; if (!sdc_->gatedClkChecksEnabled()) clk_gating_setup = clk_gating_hold = false; - path_groups_ = makePathGroups(group_count, endpoint_count, unique_pins, - slack_min, slack_max, - group_names, setup, hold, - recovery, removal, - clk_gating_setup, clk_gating_hold); + makePathGroups(group_count, endpoint_count, unique_pins, + slack_min, slack_max, + group_names, setup, hold, + recovery, removal, + clk_gating_setup, clk_gating_hold); ensureDownstreamClkPins(); PathEndSeq path_ends = path_groups_->makePathEnds(to, unconstrained_paths_, corner, min_max, @@ -3973,7 +3973,7 @@ Search::wnsSlack(Vertex *vertex, //////////////////////////////////////////////////////////////// -PathGroups * +void Search::makePathGroups(int group_count, int endpoint_count, bool unique_pins, @@ -3987,14 +3987,14 @@ Search::makePathGroups(int group_count, bool clk_gating_setup, bool clk_gating_hold) { - return new PathGroups(group_count, endpoint_count, unique_pins, - slack_min, slack_max, - group_names, - setup, hold, - recovery, removal, - clk_gating_setup, clk_gating_hold, - unconstrained_paths_, - this); + path_groups_ = new PathGroups(group_count, endpoint_count, unique_pins, + slack_min, slack_max, + group_names, + setup, hold, + recovery, removal, + clk_gating_setup, clk_gating_hold, + unconstrained_paths_, + this); } void