Skip to content

Commit 351b828

Browse files
committed
issue 322 revisited
Signed-off-by: James Cherry <[email protected]>
1 parent 37b3043 commit 351b828

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

liberty/TimingArc.cc

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -565,14 +565,23 @@ TimingArc::~TimingArc()
565565
string
566566
TimingArc::to_string() const
567567
{
568-
string str = set_->from()->name();
569-
str += " ";
570-
str += from_rf_->to_string();
571-
str += " -> ";
572-
str += set_->to()->name();
573-
str += " ";
574-
str += to_rf_->to_string();
575-
return str;
568+
if (set_->role()->isWire()) {
569+
string str = "wire ";
570+
str += from_rf_->to_string();
571+
str += " -> ";
572+
str += to_rf_->to_string();
573+
return str;
574+
}
575+
else {
576+
string str = set_->from()->name();
577+
str += " ";
578+
str += from_rf_->to_string();
579+
str += " -> ";
580+
str += set_->to()->name();
581+
str += " ";
582+
str += to_rf_->to_string();
583+
return str;
584+
}
576585
}
577586

578587
GateTimingModel *

search/PathEnum.cc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ PathEnumFaninVisitor::visitEdge(const Pin *from_pin,
394394
bool
395395
PathEnumFaninVisitor::visitFromToPath(const Pin *,
396396
Vertex *from_vertex,
397-
const RiseFall *,
397+
const RiseFall *from_rf,
398398
Tag *,
399399
Path *from_path,
400400
const Arrival &,
@@ -410,6 +410,7 @@ PathEnumFaninVisitor::visitFromToPath(const Pin *,
410410
{
411411
// These paths fanin to before_div_ so we know to_vertex matches.
412412
if ((!unique_pins_ || from_vertex != prev_vertex_)
413+
&& (!unique_edges_ || from_rf != prev_arc_->fromEdge()->asRiseFall())
413414
&& arc != prev_arc_
414415
&& Tag::matchNoCrpr(to_tag, before_div_tag_)
415416
// Ignore paths that only differ by crpr from same vertex/edge.
@@ -449,9 +450,14 @@ PathEnumFaninVisitor::insertUniqueEdgeDiv(Diversion *div)
449450
const Vertex *div_vertex = div_path->vertex(this);
450451
const RiseFall *div_rf = div_path->transition(this);
451452
auto itr = unique_edge_divs_.find({div_vertex, div_rf});
452-
if (itr == unique_edge_divs_.end()
453-
|| delayGreater(div_slack, itr->second->pathEnd()->slack(this), this))
453+
if (itr == unique_edge_divs_.end())
454+
unique_edge_divs_[{div_vertex, div_rf}] = div;
455+
else if (delayGreater(div_slack, itr->second->pathEnd()->slack(this), this)) {
456+
deleteDiversionPathEnd(itr->second);
454457
itr->second = div;
458+
}
459+
else
460+
deleteDiversionPathEnd(div);
455461
}
456462

457463
void

0 commit comments

Comments
 (0)