EvalPred::searchThru disabled loop edges

Signed-off-by: James Cherry <cherry@CerezoBook.local>
This commit is contained in:
James Cherry 2026-07-10 18:45:58 -07:00
parent d05c37e3a6
commit f29b200bcd
1 changed files with 6 additions and 4 deletions

View File

@ -96,6 +96,7 @@ EvalPred::searchThru(Edge *edge,
{ {
const TimingRole *role = edge->role(); const TimingRole *role = edge->role();
return SearchPred0::searchThru(edge, mode) return SearchPred0::searchThru(edge, mode)
&& (sta_->variables()->dynamicLoopBreaking() || !edge->isDisabledLoop())
&& (search_thru_latches_ && (search_thru_latches_
|| role->isLatchDtoQ() || role->isLatchDtoQ()
|| sta_->latches()->latchDtoQState(edge, mode) == LatchEnableState::open); || sta_->latches()->latchDtoQState(edge, mode) == LatchEnableState::open);
@ -2775,14 +2776,14 @@ Search::reportArrivals(Vertex *vertex,
for (const Path *path : paths) { for (const Path *path : paths) {
const Tag *tag = path->tag(this); const Tag *tag = path->tag(this);
const RiseFall *rf = tag->transition(); const RiseFall *rf = tag->transition();
bool report_prev = false; bool report_prev = true;
std::string prev_str; std::string prev_str;
if (report_prev) { if (report_prev) {
Path *prev_path = path->prevPath(); Path *prev_path = path->prevPath();
if (prev_path) { if (prev_path) {
const Edge *prev_edge = path->prevEdge(this); const Edge *prev_edge = path->prevEdge(this);
TimingArc *arc = path->prevArc(this); TimingArc *arc = path->prevArc(this);
prev_str = sta::format("prev {} {} {} -> {} {}", prev_str = sta::format(" prev {} {} {} -> {} {}",
prev_path->to_string(this), prev_path->to_string(this),
prev_edge->from(graph_)->to_string(this), prev_edge->from(graph_)->to_string(this),
arc->fromEdge()->to_string(), arc->fromEdge()->to_string(),
@ -2790,13 +2791,14 @@ Search::reportArrivals(Vertex *vertex,
arc->toEdge()->to_string()); arc->toEdge()->to_string());
} }
else else
prev_str = "prev NULL"; prev_str = " prev NULL";
} }
report_->report(" {} {} {} / {} {}{}", rf->shortName(), report_->report(" {} {} {} / {} {}{}", rf->shortName(),
path->minMax(this)->to_string(), path->minMax(this)->to_string(),
delayAsString(path->arrival(), digits, this), delayAsString(path->arrival(), digits, this),
delayAsString(path->required(), digits, this), delayAsString(path->required(), digits, this),
tag->to_string(report_tag_index, false, this), prev_str); tag->to_string(report_tag_index, false, this),
prev_str);
} }
} }
else else