search save/delete enumbed paths

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2025-12-02 14:50:41 -08:00
parent 14893099ed
commit c9d78679a6
5 changed files with 20 additions and 8 deletions

View File

@ -69,7 +69,7 @@ public:
};
virtual PathEnd *copy() const = 0;
virtual ~PathEnd();
virtual ~PathEnd() {}
void deletePath();
Path *path() { return path_; }
const Path *path() const { return path_; }

View File

@ -419,6 +419,7 @@ public:
void deletePaths(Vertex *vertex);
void deleteTagGroup(TagGroup *group);
bool postponeLatchOutputs() const { return postpone_latch_outputs_; }
void saveEnumPath(Path *path);
protected:
void init(StaState *sta);
@ -674,6 +675,7 @@ protected:
bool postpone_latch_outputs_;
PathGroups *path_groups_;
VisitPathEnds *visit_path_ends_;
std::vector<Path*> enum_paths_;
GatedClk *gated_clk_;
CheckCrpr *check_crpr_;
Genclks *genclks_;

View File

@ -54,12 +54,6 @@ PathEnd::PathEnd(Path *path) :
{
}
PathEnd::~PathEnd()
{
if (path_->isEnum())
delete path_;
}
void
PathEnd::setPath(Path *path)
{

View File

@ -97,7 +97,11 @@ DiversionGreater::operator()(Diversion *div1,
static void
deleteDiversionPathEnd(Diversion *div)
{
delete div->pathEnd();
PathEnd *div_end = div->pathEnd();
Path *div_path = div_end->path();
if (div_path->isEnum())
delete div_path;
delete div_end;
delete div;
}
@ -197,6 +201,7 @@ PathEnum::findNext()
makeDiversions(path_end, div->divPath());
// Caller owns the path end now, so don't delete it.
next_ = path_end;
//search_->saveEnumPath(path_end->path());
delete div;
break;
}

View File

@ -409,11 +409,22 @@ Search::deletePaths()
Vertex *vertex = vertex_iter.next();
deletePaths(vertex);
}
for (Path *path : enum_paths_)
delete path;
enum_paths_.clear();
filtered_arrivals_->clear();
arrivals_exist_ = false;
}
}
void
Search::saveEnumPath(Path *path)
{
enum_paths_.push_back(path);
}
// Delete with incremental tns/wns update.
void
Search::deletePathsIncr(Vertex *vertex)