diff --git a/include/sta/Search.hh b/include/sta/Search.hh index 9e925d1b..9308b31d 100644 --- a/include/sta/Search.hh +++ b/include/sta/Search.hh @@ -170,6 +170,19 @@ public: PathGroupSeq pathGroups(const PathEnd *path_end) const; void deletePathGroups(); + void makePathGroups(int group_path_count, + int endpoint_path_count, + bool unique_pins, + bool unique_edges, + 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, @@ -281,6 +294,7 @@ public: BfsFwdIterator *arrivalIterator() const { return arrival_iter_; } BfsBkwdIterator *requiredIterator() const { return required_iter_; } bool arrivalsAtEndpointsExist()const{return arrivals_at_endpoints_exist_;} + // Used by OpenROAD. bool makeUnclkedPaths(Vertex *vertex, bool is_segment_start, bool require_exception, diff --git a/search/Search.cc b/search/Search.cc index e6e02fdb..fbe347c0 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -467,15 +467,12 @@ Search::findPathEnds(ExceptionFrom *from, recovery = removal = false; if (!variables_->gatedClkChecksEnabled()) clk_gating_setup = clk_gating_hold = false; - path_groups_ = new PathGroups(group_path_count, endpoint_path_count, - unique_pins, unique_edges, - slack_min, slack_max, - group_names, - setup, hold, - recovery, removal, - clk_gating_setup, clk_gating_hold, - unconstrained_paths_, - this); + makePathGroups(group_path_count, endpoint_path_count, + unique_pins, unique_edges, + 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, @@ -509,6 +506,32 @@ Search::findFilteredArrivals(ExceptionFrom *from, findAllArrivals(thru_latches); } +void +Search::makePathGroups(int group_path_count, + int endpoint_path_count, + bool unique_pins, + bool unique_edges, + float slack_min, + float slack_max, + PathGroupNameSet *group_names, + bool setup, + bool hold, + bool recovery, + bool removal, + bool clk_gating_setup, + bool clk_gating_hold) +{ + path_groups_ = new PathGroups(group_path_count, endpoint_path_count, + unique_pins, unique_edges, + slack_min, slack_max, + group_names, + setup, hold, + recovery, removal, + clk_gating_setup, clk_gating_hold, + unconstrained_paths_, + this); +} + // From/thrus/to are used to make a filter exception. If the last // search used a filter arrival/required times were only found for a // subset of the paths. Delete the paths that have a filter