diff --git a/search/Genclks.cc b/search/Genclks.cc index 299345fc..c2914159 100644 --- a/search/Genclks.cc +++ b/search/Genclks.cc @@ -352,11 +352,8 @@ Genclks::seedSrcPins(Clock *clk, { VertexSet src_vertices(graph_); clk->srcPinVertices(src_vertices, network_, graph_); - VertexSet::Iterator vertex_iter(src_vertices); - while (vertex_iter.hasNext()) { - Vertex *vertex = vertex_iter.next(); + for (Vertex *vertex : src_vertices) iter.enqueue(vertex); - } } //////////////////////////////////////////////////////////////// @@ -972,11 +969,22 @@ Genclks::recordSrcPaths(Clock *gclk) network_->pathName(gclk_pin), gclk->masterClk()->name()); } - // This can be narrowed to visited vertices. - VertexIterator vertex_iter(graph_); - while (vertex_iter.hasNext()) { - Vertex *vertex = vertex_iter.next(); + deleteGenclkSrcPaths(gclk); +} + +void +Genclks:: deleteGenclkSrcPaths(Clock *gclk) +{ + GenclkInfo *genclk_info = genclkInfo(gclk); + GenClkInsertionSearchPred srch_pred(gclk, nullptr, genclk_info, this); + BfsFwdIterator insert_iter(BfsIndex::other, &srch_pred, this); + FilterPath *src_filter = genclk_info->srcFilter(); + seedSrcPins(gclk, src_filter, insert_iter); + GenClkArrivalSearchPred eval_pred(gclk, this); + while (insert_iter.hasNext()) { + Vertex *vertex = insert_iter.next(); search_->deletePaths(vertex); + insert_iter.enqueueAdjacentVertices(vertex, &srch_pred); } } diff --git a/search/Genclks.hh b/search/Genclks.hh index 32752043..0f69f5f0 100644 --- a/search/Genclks.hh +++ b/search/Genclks.hh @@ -130,6 +130,7 @@ private: VertexSet &path_vertices, VertexSet &visited_vertices, EdgeSet *&fdbk_edges); + void deleteGenclkSrcPaths(Clock *gclk); bool found_insertion_delays_; GenclkSrcPathMap genclk_src_paths_;