diff --git a/include/sta/Search.hh b/include/sta/Search.hh index 153463e2..841dbe6b 100644 --- a/include/sta/Search.hh +++ b/include/sta/Search.hh @@ -861,7 +861,7 @@ public: const MinMax *min_max) override; protected: - RequiredCmp *required_cmp_; + RequiredCmp required_cmp_; VisitPathEnds *visit_path_ends_; }; diff --git a/search/Search.cc b/search/Search.cc index 42309866..ee735a0c 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -3293,40 +3293,24 @@ Search::seedInvalidRequireds() class FindEndRequiredVisitor : public PathEndVisitor { public: - FindEndRequiredVisitor(RequiredCmp *required_cmp, + FindEndRequiredVisitor(RequiredCmp &required_cmp, const StaState *sta); FindEndRequiredVisitor(const StaState *sta); - ~FindEndRequiredVisitor() override; PathEndVisitor *copy() const override; void visit(PathEnd *path_end) override; protected: const StaState *sta_; - RequiredCmp *required_cmp_; - bool own_required_cmp_; + RequiredCmp &required_cmp_; }; -FindEndRequiredVisitor::FindEndRequiredVisitor(RequiredCmp *required_cmp, +FindEndRequiredVisitor::FindEndRequiredVisitor(RequiredCmp &required_cmp, const StaState *sta) : sta_(sta), - required_cmp_(required_cmp), - own_required_cmp_(false) + required_cmp_(required_cmp) { } -FindEndRequiredVisitor::FindEndRequiredVisitor(const StaState *sta) : - sta_(sta), - required_cmp_(new RequiredCmp), - own_required_cmp_(true) -{ -} - -FindEndRequiredVisitor::~FindEndRequiredVisitor() -{ - if (own_required_cmp_) - delete required_cmp_; -} - PathEndVisitor * FindEndRequiredVisitor::copy() const { @@ -3341,7 +3325,7 @@ FindEndRequiredVisitor::visit(PathEnd *path_end) const MinMax *min_max = path->minMax(sta_)->opposite(); size_t path_index = path->pathIndex(sta_); Required required = path_end->requiredTime(sta_); - required_cmp_->requiredSet(path_index, required, min_max, sta_); + required_cmp_.requiredSet(path_index, required, min_max, sta_); } } @@ -3351,7 +3335,7 @@ Search::seedRequired(Vertex *vertex) debugPrint(debug_, "search", 2, "required seed {}", vertex->to_string(this)); RequiredCmp required_cmp; - FindEndRequiredVisitor seeder(&required_cmp, this); + FindEndRequiredVisitor seeder(required_cmp, this); required_cmp.requiredsInit(vertex, this); visit_path_ends_->visitPathEnds(vertex, &seeder); // Enqueue fanin vertices for back-propagating required times. @@ -3363,7 +3347,7 @@ void Search::seedRequiredEnqueueFanin(Vertex *vertex) { RequiredCmp required_cmp; - FindEndRequiredVisitor seeder(&required_cmp, this); + FindEndRequiredVisitor seeder(required_cmp, this); required_cmp.requiredsInit(vertex, this); visit_path_ends_->visitPathEnds(vertex, &seeder); // Enqueue fanin vertices for back-propagating required times. @@ -3438,21 +3422,18 @@ RequiredCmp::required(size_t path_index) RequiredVisitor::RequiredVisitor(const StaState *sta) : PathVisitor(sta), - required_cmp_(new RequiredCmp), visit_path_ends_(new VisitPathEnds(sta)) { } RequiredVisitor::RequiredVisitor(const RequiredVisitor &required_visitor) : PathVisitor(required_visitor.search()->evalPred(), true, &required_visitor), - required_cmp_(new RequiredCmp), visit_path_ends_(new VisitPathEnds(&required_visitor)) { } RequiredVisitor::~RequiredVisitor() { - delete required_cmp_; delete visit_path_ends_; } @@ -3467,7 +3448,7 @@ RequiredVisitor::visit(Vertex *vertex) { debugPrint(debug_, "search", 2, "find required {}", vertex->to_string(this)); - required_cmp_->requiredsInit(vertex, this); + required_cmp_.requiredsInit(vertex, this); // Back propagate requireds from fanout. visitFanoutPaths(vertex); // Check for constraints at endpoints that set required times. @@ -3475,7 +3456,7 @@ RequiredVisitor::visit(Vertex *vertex) FindEndRequiredVisitor seeder(required_cmp_, this); visit_path_ends_->visitPathEnds(vertex, &seeder); } - bool changed = required_cmp_->requiredsSave(vertex, this); + bool changed = required_cmp_.requiredsSave(vertex, this); search_->tnsInvalid(vertex); if (changed) @@ -3521,8 +3502,8 @@ RequiredVisitor::visitFromToPath(const Pin *, delayAsString(arc_delay, this), delayAsString(from_required, this), min_max == MinMax::max() ? "<" : ">", - delayAsString(required_cmp_->required(path_index), this)); - required_cmp_->requiredSet(path_index, from_required, req_min, this); + delayAsString(required_cmp_.required(path_index), this)); + required_cmp_.requiredSet(path_index, from_required, req_min, this); } else { if (search_->crprApproxMissingRequireds()) { @@ -3545,8 +3526,8 @@ RequiredVisitor::visitFromToPath(const Pin *, delayAsString(arc_delay, this), delayAsString(from_required, this), min_max == MinMax::max() ? "<" : ">", - delayAsString(required_cmp_->required(path_index), this)); - required_cmp_->requiredSet(path_index, from_required, req_min, this); + delayAsString(required_cmp_.required(path_index), this)); + required_cmp_.requiredSet(path_index, from_required, req_min, this); break; } }