Skip to content

Commit fa3c89f

Browse files
committed
RequiredVistor integrate RequiredCmp
Signed-off-by: James Cherry <cherry@parallaxsw.com>
1 parent 2290ed9 commit fa3c89f

2 files changed

Lines changed: 14 additions & 33 deletions

File tree

include/sta/Search.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ public:
861861
const MinMax *min_max) override;
862862

863863
protected:
864-
RequiredCmp *required_cmp_;
864+
RequiredCmp required_cmp_;
865865
VisitPathEnds *visit_path_ends_;
866866
};
867867

search/Search.cc

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3293,40 +3293,24 @@ Search::seedInvalidRequireds()
32933293
class FindEndRequiredVisitor : public PathEndVisitor
32943294
{
32953295
public:
3296-
FindEndRequiredVisitor(RequiredCmp *required_cmp,
3296+
FindEndRequiredVisitor(RequiredCmp &required_cmp,
32973297
const StaState *sta);
32983298
FindEndRequiredVisitor(const StaState *sta);
3299-
~FindEndRequiredVisitor() override;
33003299
PathEndVisitor *copy() const override;
33013300
void visit(PathEnd *path_end) override;
33023301

33033302
protected:
33043303
const StaState *sta_;
3305-
RequiredCmp *required_cmp_;
3306-
bool own_required_cmp_;
3304+
RequiredCmp &required_cmp_;
33073305
};
33083306

3309-
FindEndRequiredVisitor::FindEndRequiredVisitor(RequiredCmp *required_cmp,
3307+
FindEndRequiredVisitor::FindEndRequiredVisitor(RequiredCmp &required_cmp,
33103308
const StaState *sta) :
33113309
sta_(sta),
3312-
required_cmp_(required_cmp),
3313-
own_required_cmp_(false)
3310+
required_cmp_(required_cmp)
33143311
{
33153312
}
33163313

3317-
FindEndRequiredVisitor::FindEndRequiredVisitor(const StaState *sta) :
3318-
sta_(sta),
3319-
required_cmp_(new RequiredCmp),
3320-
own_required_cmp_(true)
3321-
{
3322-
}
3323-
3324-
FindEndRequiredVisitor::~FindEndRequiredVisitor()
3325-
{
3326-
if (own_required_cmp_)
3327-
delete required_cmp_;
3328-
}
3329-
33303314
PathEndVisitor *
33313315
FindEndRequiredVisitor::copy() const
33323316
{
@@ -3341,7 +3325,7 @@ FindEndRequiredVisitor::visit(PathEnd *path_end)
33413325
const MinMax *min_max = path->minMax(sta_)->opposite();
33423326
size_t path_index = path->pathIndex(sta_);
33433327
Required required = path_end->requiredTime(sta_);
3344-
required_cmp_->requiredSet(path_index, required, min_max, sta_);
3328+
required_cmp_.requiredSet(path_index, required, min_max, sta_);
33453329
}
33463330
}
33473331

@@ -3351,7 +3335,7 @@ Search::seedRequired(Vertex *vertex)
33513335
debugPrint(debug_, "search", 2, "required seed {}",
33523336
vertex->to_string(this));
33533337
RequiredCmp required_cmp;
3354-
FindEndRequiredVisitor seeder(&required_cmp, this);
3338+
FindEndRequiredVisitor seeder(required_cmp, this);
33553339
required_cmp.requiredsInit(vertex, this);
33563340
visit_path_ends_->visitPathEnds(vertex, &seeder);
33573341
// Enqueue fanin vertices for back-propagating required times.
@@ -3363,7 +3347,7 @@ void
33633347
Search::seedRequiredEnqueueFanin(Vertex *vertex)
33643348
{
33653349
RequiredCmp required_cmp;
3366-
FindEndRequiredVisitor seeder(&required_cmp, this);
3350+
FindEndRequiredVisitor seeder(required_cmp, this);
33673351
required_cmp.requiredsInit(vertex, this);
33683352
visit_path_ends_->visitPathEnds(vertex, &seeder);
33693353
// Enqueue fanin vertices for back-propagating required times.
@@ -3438,21 +3422,18 @@ RequiredCmp::required(size_t path_index)
34383422

34393423
RequiredVisitor::RequiredVisitor(const StaState *sta) :
34403424
PathVisitor(sta),
3441-
required_cmp_(new RequiredCmp),
34423425
visit_path_ends_(new VisitPathEnds(sta))
34433426
{
34443427
}
34453428

34463429
RequiredVisitor::RequiredVisitor(const RequiredVisitor &required_visitor) :
34473430
PathVisitor(required_visitor.search()->evalPred(), true, &required_visitor),
3448-
required_cmp_(new RequiredCmp),
34493431
visit_path_ends_(new VisitPathEnds(&required_visitor))
34503432
{
34513433
}
34523434

34533435
RequiredVisitor::~RequiredVisitor()
34543436
{
3455-
delete required_cmp_;
34563437
delete visit_path_ends_;
34573438
}
34583439

@@ -3467,15 +3448,15 @@ RequiredVisitor::visit(Vertex *vertex)
34673448
{
34683449
debugPrint(debug_, "search", 2, "find required {}",
34693450
vertex->to_string(this));
3470-
required_cmp_->requiredsInit(vertex, this);
3451+
required_cmp_.requiredsInit(vertex, this);
34713452
// Back propagate requireds from fanout.
34723453
visitFanoutPaths(vertex);
34733454
// Check for constraints at endpoints that set required times.
34743455
if (search_->isEndpoint(vertex)) {
34753456
FindEndRequiredVisitor seeder(required_cmp_, this);
34763457
visit_path_ends_->visitPathEnds(vertex, &seeder);
34773458
}
3478-
bool changed = required_cmp_->requiredsSave(vertex, this);
3459+
bool changed = required_cmp_.requiredsSave(vertex, this);
34793460
search_->tnsInvalid(vertex);
34803461

34813462
if (changed)
@@ -3521,8 +3502,8 @@ RequiredVisitor::visitFromToPath(const Pin *,
35213502
delayAsString(arc_delay, this),
35223503
delayAsString(from_required, this),
35233504
min_max == MinMax::max() ? "<" : ">",
3524-
delayAsString(required_cmp_->required(path_index), this));
3525-
required_cmp_->requiredSet(path_index, from_required, req_min, this);
3505+
delayAsString(required_cmp_.required(path_index), this));
3506+
required_cmp_.requiredSet(path_index, from_required, req_min, this);
35263507
}
35273508
else {
35283509
if (search_->crprApproxMissingRequireds()) {
@@ -3545,8 +3526,8 @@ RequiredVisitor::visitFromToPath(const Pin *,
35453526
delayAsString(arc_delay, this),
35463527
delayAsString(from_required, this),
35473528
min_max == MinMax::max() ? "<" : ">",
3548-
delayAsString(required_cmp_->required(path_index), this));
3549-
required_cmp_->requiredSet(path_index, from_required, req_min, this);
3529+
delayAsString(required_cmp_.required(path_index), this));
3530+
required_cmp_.requiredSet(path_index, from_required, req_min, this);
35503531
break;
35513532
}
35523533
}

0 commit comments

Comments
 (0)