nworst1
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
07780f5f2c
commit
7355b343e7
|
|
@ -237,7 +237,7 @@ public:
|
||||||
PathEnum *path_enum);
|
PathEnum *path_enum);
|
||||||
virtual VertexVisitor *copy() const;
|
virtual VertexVisitor *copy() const;
|
||||||
virtual void visit(Vertex *) {} // Not used.
|
virtual void visit(Vertex *) {} // Not used.
|
||||||
void visitFaninPathsThru(Vertex *vertex,
|
void visitFaninPathsThru(Path *before_div,
|
||||||
Vertex *prev_vertex,
|
Vertex *prev_vertex,
|
||||||
TimingArc *prev_arc);
|
TimingArc *prev_arc);
|
||||||
virtual bool visitFromToPath(const Pin *from_pin,
|
virtual bool visitFromToPath(const Pin *from_pin,
|
||||||
|
|
@ -299,17 +299,18 @@ PathEnumFaninVisitor::PathEnumFaninVisitor(PathEnd *path_end,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PathEnumFaninVisitor::visitFaninPathsThru(Vertex *vertex,
|
PathEnumFaninVisitor::visitFaninPathsThru(Path *before_div,
|
||||||
Vertex *prev_vertex,
|
Vertex *prev_vertex,
|
||||||
TimingArc *prev_arc)
|
TimingArc *prev_arc)
|
||||||
{
|
{
|
||||||
|
before_div_ = before_div;
|
||||||
before_div_rf_index_ = before_div_->rfIndex(this);
|
before_div_rf_index_ = before_div_->rfIndex(this);
|
||||||
before_div_tag_ = before_div_->tag(this);
|
before_div_tag_ = before_div_->tag(this);
|
||||||
before_div_ap_index_ = before_div_->pathAnalysisPtIndex(this);
|
before_div_ap_index_ = before_div_->pathAnalysisPtIndex(this);
|
||||||
before_div_arrival_ = before_div_->arrival();
|
before_div_arrival_ = before_div_->arrival();
|
||||||
prev_arc_ = prev_arc;
|
prev_arc_ = prev_arc;
|
||||||
prev_vertex_ = prev_vertex;
|
prev_vertex_ = prev_vertex;
|
||||||
visitFaninPaths(vertex);
|
visitFaninPaths(before_div_->vertex(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
VertexVisitor *
|
VertexVisitor *
|
||||||
|
|
@ -523,8 +524,7 @@ PathEnum::makeDiversions(PathEnd *path_end,
|
||||||
// Fanin visitor does all the work.
|
// Fanin visitor does all the work.
|
||||||
// While visiting the fanins the fanin_visitor finds the
|
// While visiting the fanins the fanin_visitor finds the
|
||||||
// previous path and arc as well as diversions.
|
// previous path and arc as well as diversions.
|
||||||
fanin_visitor.visitFaninPathsThru(path->vertex(this),
|
fanin_visitor.visitFaninPathsThru(path, prev_path->vertex(this), prev_arc);
|
||||||
prev_path->vertex(this), prev_arc);
|
|
||||||
// Do not enumerate beyond latch D to Q edges.
|
// Do not enumerate beyond latch D to Q edges.
|
||||||
// This breaks latch loop paths.
|
// This breaks latch loop paths.
|
||||||
if (prev_arc->role() == TimingRole::latchDtoQ())
|
if (prev_arc->role() == TimingRole::latchDtoQ())
|
||||||
|
|
@ -553,8 +553,9 @@ PathEnum::makeDivertedPath(Path *path,
|
||||||
Path *p = path;
|
Path *p = path;
|
||||||
bool first = true;
|
bool first = true;
|
||||||
Path *prev_copy = nullptr;
|
Path *prev_copy = nullptr;
|
||||||
|
Edge *copy_prev_edge = nullptr;
|
||||||
|
TimingArc *copy_prev_arc = nullptr;
|
||||||
while (p) {
|
while (p) {
|
||||||
Path *prev = p->prevPath();
|
|
||||||
Path *copy = new Path(p->vertex(this),
|
Path *copy = new Path(p->vertex(this),
|
||||||
p->tag(this),
|
p->tag(this),
|
||||||
p->arrival(),
|
p->arrival(),
|
||||||
|
|
@ -562,8 +563,10 @@ PathEnum::makeDivertedPath(Path *path,
|
||||||
p->prevEdge(this),
|
p->prevEdge(this),
|
||||||
p->prevArc(this),
|
p->prevArc(this),
|
||||||
true, this);
|
true, this);
|
||||||
if (prev_copy)
|
if (prev_copy) {
|
||||||
prev_copy->setPrevPath(copy);
|
prev_copy->setPrevPath(copy);
|
||||||
|
prev_copy->setPrevEdgeArc(copy_prev_edge, copy_prev_arc, this);
|
||||||
|
}
|
||||||
copies.push_back(copy);
|
copies.push_back(copy);
|
||||||
|
|
||||||
if (Path::equal(p, after_div, this))
|
if (Path::equal(p, after_div, this))
|
||||||
|
|
@ -580,7 +583,11 @@ PathEnum::makeDivertedPath(Path *path,
|
||||||
found_div = true;
|
found_div = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
p = prev;
|
p = p->prevPath();
|
||||||
|
|
||||||
|
copy_prev_edge = p ? p->prevEdge(this) : nullptr;
|
||||||
|
copy_prev_arc = p ? p->prevArc(this) : nullptr;
|
||||||
|
|
||||||
prev_copy = copy;
|
prev_copy = copy;
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue