findRequired(vertex) rm crpr disable
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
7539c7372d
commit
6e29fcb3f0
|
|
@ -594,7 +594,6 @@ Graph::deletePaths(Vertex *vertex)
|
||||||
{
|
{
|
||||||
vertex->setPaths(nullptr);
|
vertex->setPaths(nullptr);
|
||||||
vertex->tag_group_index_ = tag_group_index_max;
|
vertex->tag_group_index_ = tag_group_index_max;
|
||||||
vertex->crpr_path_pruning_disabled_ = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
@ -998,7 +997,6 @@ Vertex::init(Pin *pin,
|
||||||
visited1_ = false;
|
visited1_ = false;
|
||||||
visited2_ = false;
|
visited2_ = false;
|
||||||
bfs_in_queue_ = 0;
|
bfs_in_queue_ = 0;
|
||||||
crpr_path_pruning_disabled_ = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Vertex::~Vertex()
|
Vertex::~Vertex()
|
||||||
|
|
@ -1120,12 +1118,6 @@ Vertex::removeSlewAnnotated()
|
||||||
slew_annotated_ = 0;
|
slew_annotated_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Vertex::setCrprPathPruningDisabled(bool disabled)
|
|
||||||
{
|
|
||||||
crpr_path_pruning_disabled_ = disabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
TagGroupIndex
|
TagGroupIndex
|
||||||
Vertex::tagGroupIndex() const
|
Vertex::tagGroupIndex() const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -304,8 +304,6 @@ public:
|
||||||
bool bfsInQueue(BfsIndex index) const;
|
bool bfsInQueue(BfsIndex index) const;
|
||||||
void setBfsInQueue(BfsIndex index, bool value);
|
void setBfsInQueue(BfsIndex index, bool value);
|
||||||
bool isRegClk() const { return is_reg_clk_; }
|
bool isRegClk() const { return is_reg_clk_; }
|
||||||
bool crprPathPruningDisabled() const { return crpr_path_pruning_disabled_;}
|
|
||||||
void setCrprPathPruningDisabled(bool disabled);
|
|
||||||
|
|
||||||
// ObjectTable interface.
|
// ObjectTable interface.
|
||||||
ObjectIdx objectIdx() const { return object_idx_; }
|
ObjectIdx objectIdx() const { return object_idx_; }
|
||||||
|
|
@ -353,7 +351,6 @@ protected:
|
||||||
bool is_check_clk_:1;
|
bool is_check_clk_:1;
|
||||||
bool is_constrained_:1;
|
bool is_constrained_:1;
|
||||||
bool has_downstream_clk_pin_:1;
|
bool has_downstream_clk_pin_:1;
|
||||||
bool crpr_path_pruning_disabled_:1;
|
|
||||||
bool visited1_:1;
|
bool visited1_:1;
|
||||||
bool visited2_:1;
|
bool visited2_:1;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1437,8 +1437,6 @@ protected:
|
||||||
Corner *corner,
|
Corner *corner,
|
||||||
const MinMax *min_max);
|
const MinMax *min_max);
|
||||||
void powerPreamble();
|
void powerPreamble();
|
||||||
void disableFanoutCrprPruning(Vertex *vertex,
|
|
||||||
int &fanou);
|
|
||||||
virtual void replaceCell(Instance *inst,
|
virtual void replaceCell(Instance *inst,
|
||||||
Cell *to_cell,
|
Cell *to_cell,
|
||||||
LibertyCell *to_lib_cell);
|
LibertyCell *to_lib_cell);
|
||||||
|
|
|
||||||
|
|
@ -1182,7 +1182,6 @@ ArrivalVisitor::visit(Vertex *vertex)
|
||||||
visitFaninPaths(vertex);
|
visitFaninPaths(vertex);
|
||||||
if (crpr_active_
|
if (crpr_active_
|
||||||
&& search_->crprPathPruningEnabled()
|
&& search_->crprPathPruningEnabled()
|
||||||
&& !vertex->crprPathPruningDisabled()
|
|
||||||
// No crpr for ideal clocks.
|
// No crpr for ideal clocks.
|
||||||
&& tag_bldr_->hasPropagatedClk()
|
&& tag_bldr_->hasPropagatedClk()
|
||||||
&& !has_fanin_one_)
|
&& !has_fanin_one_)
|
||||||
|
|
|
||||||
|
|
@ -3200,48 +3200,8 @@ Sta::findRequired(Vertex *vertex)
|
||||||
// Need to include downstream required times if there is fanout.
|
// Need to include downstream required times if there is fanout.
|
||||||
&& !hasFanout(vertex, search_->searchAdj(), graph_))
|
&& !hasFanout(vertex, search_->searchAdj(), graph_))
|
||||||
search_->seedRequired(vertex);
|
search_->seedRequired(vertex);
|
||||||
else {
|
else
|
||||||
search_->findRequireds(vertex->level());
|
search_->findRequireds(vertex->level());
|
||||||
if (variables_->crprEnabled()
|
|
||||||
&& search_->crprPathPruningEnabled()
|
|
||||||
&& !search_->crprApproxMissingRequireds()
|
|
||||||
// Clocks invariably have requireds that are pruned but it isn't
|
|
||||||
// worth finding arrivals and requireds all over again for
|
|
||||||
// the entire fanout of the clock.
|
|
||||||
&& !search_->isClock(vertex)) {
|
|
||||||
// Invalidate arrivals and requireds and disable
|
|
||||||
// path pruning on fanout vertices with DFS.
|
|
||||||
int fanout = 0;
|
|
||||||
disableFanoutCrprPruning(vertex, fanout);
|
|
||||||
debugPrint(debug_, "search", 1, "resurrect pruned required %s fanout %d",
|
|
||||||
vertex->to_string(this).c_str(),
|
|
||||||
fanout);
|
|
||||||
// Find fanout arrivals and requireds with pruning disabled.
|
|
||||||
search_->findArrivals();
|
|
||||||
search_->findRequireds(vertex->level());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Sta::disableFanoutCrprPruning(Vertex *vertex,
|
|
||||||
int &fanout)
|
|
||||||
{
|
|
||||||
if (!vertex->crprPathPruningDisabled()) {
|
|
||||||
search_->arrivalInvalid(vertex);
|
|
||||||
search_->requiredInvalid(vertex);
|
|
||||||
vertex->setCrprPathPruningDisabled(true);
|
|
||||||
fanout++;
|
|
||||||
SearchPred *pred = search_->searchAdj();
|
|
||||||
VertexOutEdgeIterator edge_iter(vertex, graph_);
|
|
||||||
while (edge_iter.hasNext()) {
|
|
||||||
Edge *edge = edge_iter.next();
|
|
||||||
Vertex *to_vertex = edge->to(graph_);
|
|
||||||
if (pred->searchThru(edge)
|
|
||||||
&& pred->searchTo(to_vertex))
|
|
||||||
disableFanoutCrprPruning(to_vertex, fanout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Slack
|
Slack
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue