@@ -3200,48 +3200,8 @@ Sta::findRequired(Vertex *vertex)
32003200 // Need to include downstream required times if there is fanout.
32013201 && !hasFanout (vertex, search_->searchAdj (), graph_))
32023202 search_->seedRequired (vertex);
3203- else {
3203+ else
32043204 search_->findRequireds (vertex->level ());
3205- if (variables_->crprEnabled ()
3206- && search_->crprPathPruningEnabled ()
3207- && !search_->crprApproxMissingRequireds ()
3208- // Clocks invariably have requireds that are pruned but it isn't
3209- // worth finding arrivals and requireds all over again for
3210- // the entire fanout of the clock.
3211- && !search_->isClock (vertex)) {
3212- // Invalidate arrivals and requireds and disable
3213- // path pruning on fanout vertices with DFS.
3214- int fanout = 0 ;
3215- disableFanoutCrprPruning (vertex, fanout);
3216- debugPrint (debug_, " search" , 1 , " resurrect pruned required %s fanout %d" ,
3217- vertex->to_string (this ).c_str (),
3218- fanout);
3219- // Find fanout arrivals and requireds with pruning disabled.
3220- search_->findArrivals ();
3221- search_->findRequireds (vertex->level ());
3222- }
3223- }
3224- }
3225-
3226- void
3227- Sta::disableFanoutCrprPruning (Vertex *vertex,
3228- int &fanout)
3229- {
3230- if (!vertex->crprPathPruningDisabled ()) {
3231- search_->arrivalInvalid (vertex);
3232- search_->requiredInvalid (vertex);
3233- vertex->setCrprPathPruningDisabled (true );
3234- fanout++;
3235- SearchPred *pred = search_->searchAdj ();
3236- VertexOutEdgeIterator edge_iter (vertex, graph_);
3237- while (edge_iter.hasNext ()) {
3238- Edge *edge = edge_iter.next ();
3239- Vertex *to_vertex = edge->to (graph_);
3240- if (pred->searchThru (edge)
3241- && pred->searchTo (to_vertex))
3242- disableFanoutCrprPruning (to_vertex, fanout);
3243- }
3244- }
32453205}
32463206
32473207Slack
0 commit comments