rm GraphDelayCalc::incremental_
Signed-off-by: James Cherry <cherry@CerezoBook.local>
This commit is contained in:
parent
dd657bf250
commit
dbb19a2687
|
|
@ -213,7 +213,6 @@ GraphDelayCalc::delaysInvalid()
|
||||||
debugPrint(debug_, "delay_calc", 1, "delays invalid");
|
debugPrint(debug_, "delay_calc", 1, "delays invalid");
|
||||||
delays_exist_ = false;
|
delays_exist_ = false;
|
||||||
delays_seeded_ = false;
|
delays_seeded_ = false;
|
||||||
incremental_ = false;
|
|
||||||
iter_->clear();
|
iter_->clear();
|
||||||
// No need to keep track of incremental updates any more.
|
// No need to keep track of incremental updates any more.
|
||||||
invalid_delays_.clear();
|
invalid_delays_.clear();
|
||||||
|
|
@ -224,7 +223,7 @@ GraphDelayCalc::delaysInvalid()
|
||||||
void
|
void
|
||||||
GraphDelayCalc::delayInvalid(const Pin *pin)
|
GraphDelayCalc::delayInvalid(const Pin *pin)
|
||||||
{
|
{
|
||||||
if (graph_ && incremental_) {
|
if (graph_ && delays_exist_) {
|
||||||
if (network_->isHierarchical(pin)) {
|
if (network_->isHierarchical(pin)) {
|
||||||
EdgesThruHierPinIterator edge_iter(pin, network_, graph_);
|
EdgesThruHierPinIterator edge_iter(pin, network_, graph_);
|
||||||
while (edge_iter.hasNext()) {
|
while (edge_iter.hasNext()) {
|
||||||
|
|
@ -248,7 +247,7 @@ GraphDelayCalc::delayInvalid(Vertex *vertex)
|
||||||
{
|
{
|
||||||
debugPrint(debug_, "delay_calc", 2, "delay invalid {}",
|
debugPrint(debug_, "delay_calc", 2, "delay invalid {}",
|
||||||
vertex->to_string(this));
|
vertex->to_string(this));
|
||||||
if (incremental_) {
|
if (delays_exist_) {
|
||||||
invalid_delays_.insert(vertex);
|
invalid_delays_.insert(vertex);
|
||||||
// Invalidate driver that triggers dcalc for multi-driver nets.
|
// Invalidate driver that triggers dcalc for multi-driver nets.
|
||||||
MultiDrvrNet *multi_drvr = multiDrvrNet(vertex);
|
MultiDrvrNet *multi_drvr = multiDrvrNet(vertex);
|
||||||
|
|
@ -274,7 +273,7 @@ void
|
||||||
GraphDelayCalc::deleteVertexBefore(Vertex *vertex)
|
GraphDelayCalc::deleteVertexBefore(Vertex *vertex)
|
||||||
{
|
{
|
||||||
iter_->deleteVertexBefore(vertex);
|
iter_->deleteVertexBefore(vertex);
|
||||||
if (incremental_)
|
if (delays_exist_)
|
||||||
invalid_delays_.erase(vertex);
|
invalid_delays_.erase(vertex);
|
||||||
MultiDrvrNet *multi_drvr = multiDrvrNet(vertex);
|
MultiDrvrNet *multi_drvr = multiDrvrNet(vertex);
|
||||||
if (multi_drvr) {
|
if (multi_drvr) {
|
||||||
|
|
@ -329,7 +328,7 @@ FindVertexDelays::copy() const
|
||||||
void
|
void
|
||||||
FindVertexDelays::visit(Vertex *vertex)
|
FindVertexDelays::visit(Vertex *vertex)
|
||||||
{
|
{
|
||||||
graph_delay_calc_->findVertexDelay(vertex, arc_delay_calc_, true);
|
graph_delay_calc_->findVertexDelay(vertex, arc_delay_calc_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The logical structure of incremental delay calculation closely
|
// The logical structure of incremental delay calculation closely
|
||||||
|
|
@ -348,7 +347,7 @@ GraphDelayCalc::findDelays(Level level)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
iter_->ensureSize();
|
iter_->ensureSize();
|
||||||
if (incremental_)
|
if (delays_exist_)
|
||||||
seedInvalidDelays();
|
seedInvalidDelays();
|
||||||
|
|
||||||
if (!iter_->empty()) {
|
if (!iter_->empty()) {
|
||||||
|
|
@ -367,7 +366,7 @@ GraphDelayCalc::findDelays(Level level)
|
||||||
invalid_latch_edges_.clear();
|
invalid_latch_edges_.clear();
|
||||||
|
|
||||||
delays_exist_ = true;
|
delays_exist_ = true;
|
||||||
incremental_ = true;
|
delays_exist_ = true;
|
||||||
debugPrint(debug_, "delay_calc", 1, "found {} delays", dcalc_count);
|
debugPrint(debug_, "delay_calc", 1, "found {} delays", dcalc_count);
|
||||||
stats.report("Delay calc");
|
stats.report("Delay calc");
|
||||||
}
|
}
|
||||||
|
|
@ -674,13 +673,12 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin,
|
||||||
void
|
void
|
||||||
GraphDelayCalc::findDelays(Vertex *drvr_vertex)
|
GraphDelayCalc::findDelays(Vertex *drvr_vertex)
|
||||||
{
|
{
|
||||||
findVertexDelay(drvr_vertex, arc_delay_calc_, true);
|
findVertexDelay(drvr_vertex, arc_delay_calc_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GraphDelayCalc::findVertexDelay(Vertex *vertex,
|
GraphDelayCalc::findVertexDelay(Vertex *vertex,
|
||||||
ArcDelayCalc *arc_delay_calc,
|
ArcDelayCalc *arc_delay_calc)
|
||||||
bool propagate)
|
|
||||||
{
|
{
|
||||||
const Pin *pin = vertex->pin();
|
const Pin *pin = vertex->pin();
|
||||||
debugPrint(debug_, "delay_calc", 2, "find delays {} ({})",
|
debugPrint(debug_, "delay_calc", 2, "find delays {} ({})",
|
||||||
|
|
@ -696,26 +694,23 @@ GraphDelayCalc::findVertexDelay(Vertex *vertex,
|
||||||
&& vertex->isDriver(network_)) {
|
&& vertex->isDriver(network_)) {
|
||||||
LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(vertex);
|
LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(vertex);
|
||||||
DrvrLoadSlews load_slews_prev;
|
DrvrLoadSlews load_slews_prev;
|
||||||
if (incremental_)
|
if (delays_exist_)
|
||||||
load_slews_prev = loadSlews(load_pin_index_map);
|
load_slews_prev = loadSlews(load_pin_index_map);
|
||||||
findDriverDelays(vertex, arc_delay_calc, load_pin_index_map);
|
findDriverDelays(vertex, arc_delay_calc, load_pin_index_map);
|
||||||
if (propagate) {
|
if (network_->direction(pin)->isInternal())
|
||||||
if (network_->direction(pin)->isInternal())
|
enqueueTimingChecksEdges(vertex);
|
||||||
enqueueTimingChecksEdges(vertex);
|
// Enqueue adjacent vertices even if the load slews did not
|
||||||
// Enqueue adjacent vertices even if the load slews did not
|
// change when non-incremental to stride past annotations.
|
||||||
// change when non-incremental to stride past annotations.
|
if (!delays_exist_
|
||||||
if (!incremental_
|
|| loadSlewsChanged(load_slews_prev, load_pin_index_map))
|
||||||
|| loadSlewsChanged(load_slews_prev, load_pin_index_map))
|
iter_->enqueueFanout(vertex);
|
||||||
iter_->enqueueFanout(vertex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (vertex->isLoad(network_)) {
|
else if (vertex->isLoad(network_)) {
|
||||||
// Load vertex.
|
// Load vertex.
|
||||||
// Includes top level bidirect load vertex with wire edge to bidirect driver.
|
// Includes top level bidirect load vertex with wire edge to bidirect driver.
|
||||||
enqueueTimingChecksEdges(vertex);
|
enqueueTimingChecksEdges(vertex);
|
||||||
// Enqueue driver vertices from this input load.
|
// Enqueue driver vertices from this input load.
|
||||||
if (propagate)
|
iter_->enqueueFanout(vertex);
|
||||||
iter_->enqueueFanout(vertex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -232,8 +232,7 @@ protected:
|
||||||
void zeroSlewAndWireDelays(Vertex *drvr_vertex,
|
void zeroSlewAndWireDelays(Vertex *drvr_vertex,
|
||||||
const RiseFall *rf);
|
const RiseFall *rf);
|
||||||
void findVertexDelay(Vertex *vertex,
|
void findVertexDelay(Vertex *vertex,
|
||||||
ArcDelayCalc *arc_delay_calc,
|
ArcDelayCalc *arc_delay_calc);
|
||||||
bool propagate);
|
|
||||||
DrvrLoadSlews loadSlews(LoadPinIndexMap &load_pin_index_map);
|
DrvrLoadSlews loadSlews(LoadPinIndexMap &load_pin_index_map);
|
||||||
bool loadSlewsChanged(DrvrLoadSlews &load_slews_prev,
|
bool loadSlewsChanged(DrvrLoadSlews &load_slews_prev,
|
||||||
LoadPinIndexMap &load_pin_index_map);
|
LoadPinIndexMap &load_pin_index_map);
|
||||||
|
|
@ -296,7 +295,6 @@ protected:
|
||||||
// Observer for edge delay changes.
|
// Observer for edge delay changes.
|
||||||
DelayCalcObserver *observer_{nullptr};
|
DelayCalcObserver *observer_{nullptr};
|
||||||
bool delays_seeded_{false};
|
bool delays_seeded_{false};
|
||||||
bool incremental_{false};
|
|
||||||
bool delays_exist_{false};
|
bool delays_exist_{false};
|
||||||
// Vertices with invalid -to delays.
|
// Vertices with invalid -to delays.
|
||||||
VertexSet invalid_delays_;
|
VertexSet invalid_delays_;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue