Show file and line info when possible on internal graph errors.
This commit is contained in:
parent
d065662afc
commit
cf4bf9b7a5
|
|
@ -73,6 +73,7 @@ public:
|
||||||
, m_asyncPath(false) {}
|
, m_asyncPath(false) {}
|
||||||
virtual ~CdcEitherVertex() {}
|
virtual ~CdcEitherVertex() {}
|
||||||
// ACCESSORS
|
// ACCESSORS
|
||||||
|
virtual FileLine* fileline() const { return nodep()->fileline(); }
|
||||||
AstScope* scopep() const { return m_scopep; }
|
AstScope* scopep() const { return m_scopep; }
|
||||||
AstNode* nodep() const { return m_nodep; }
|
AstNode* nodep() const { return m_nodep; }
|
||||||
AstSenTree* srcDomainp() const { return m_srcDomainp; }
|
AstSenTree* srcDomainp() const { return m_srcDomainp; }
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,7 @@ public:
|
||||||
// ACCESSORS
|
// ACCESSORS
|
||||||
virtual string name() const { return (cvtToStr((void*)m_nodep)+"@"+scopep()->prettyName()); }
|
virtual string name() const { return (cvtToStr((void*)m_nodep)+"@"+scopep()->prettyName()); }
|
||||||
virtual string dotColor() const { return "yellow"; }
|
virtual string dotColor() const { return "yellow"; }
|
||||||
|
virtual FileLine* fileline() const { return nodep()->fileline(); }
|
||||||
AstNode* nodep() const { return m_nodep; }
|
AstNode* nodep() const { return m_nodep; }
|
||||||
AstActive* activep() const { return m_activep; }
|
AstActive* activep() const { return m_activep; }
|
||||||
bool slow() const { return m_slow; }
|
bool slow() const { return m_slow; }
|
||||||
|
|
|
||||||
|
|
@ -118,6 +118,23 @@ uint32_t V3GraphVertex::outHash() const {
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void V3GraphVertex::v3errorEnd(std::ostringstream& str) const {
|
||||||
|
std::ostringstream nsstr;
|
||||||
|
nsstr<<str.str();
|
||||||
|
if (debug()) {
|
||||||
|
nsstr<<endl;
|
||||||
|
nsstr<<"-vertex: "<<this<<endl;
|
||||||
|
}
|
||||||
|
if (!fileline()) {
|
||||||
|
V3Error::v3errorEnd(nsstr);
|
||||||
|
} else {
|
||||||
|
fileline()->v3errorEnd(nsstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void V3GraphVertex::v3errorEndFatal(std::ostringstream& str) const {
|
||||||
|
v3errorEnd(str); assert(0);
|
||||||
|
}
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& os, V3GraphVertex* vertexp) {
|
std::ostream& operator<<(std::ostream& os, V3GraphVertex* vertexp) {
|
||||||
os<<" VERTEX="<<vertexp->name();
|
os<<" VERTEX="<<vertexp->name();
|
||||||
if (vertexp->rank()) os<<" r"<<vertexp->rank();
|
if (vertexp->rank()) os<<" r"<<vertexp->rank();
|
||||||
|
|
|
||||||
|
|
@ -217,6 +217,7 @@ public:
|
||||||
virtual string dotStyle() const { return ""; }
|
virtual string dotStyle() const { return ""; }
|
||||||
virtual string dotName() const { return ""; }
|
virtual string dotName() const { return ""; }
|
||||||
virtual uint32_t rankAdder() const { return 1; }
|
virtual uint32_t rankAdder() const { return 1; }
|
||||||
|
virtual FileLine* fileline() const { return NULL; } // NULL for unknown
|
||||||
virtual int sortCmp(const V3GraphVertex* rhsp) const {
|
virtual int sortCmp(const V3GraphVertex* rhsp) const {
|
||||||
// LHS goes first if of lower rank, or lower fanout
|
// LHS goes first if of lower rank, or lower fanout
|
||||||
if (m_rank < rhsp->m_rank) return -1;
|
if (m_rank < rhsp->m_rank) return -1;
|
||||||
|
|
@ -249,6 +250,8 @@ public:
|
||||||
// METHODS
|
// METHODS
|
||||||
/// Edges are routed around this vertex to point from "from" directly to "to"
|
/// Edges are routed around this vertex to point from "from" directly to "to"
|
||||||
void rerouteEdges(V3Graph* graphp);
|
void rerouteEdges(V3Graph* graphp);
|
||||||
|
void v3errorEnd(std::ostringstream& str) const;
|
||||||
|
void v3errorEndFatal(std::ostringstream& str) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& os, V3GraphVertex* vertexp);
|
std::ostream& operator<<(std::ostream& os, V3GraphVertex* vertexp);
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ public:
|
||||||
bool isDelete() const { return m_deleted; }
|
bool isDelete() const { return m_deleted; }
|
||||||
virtual string name() const { return m_origVertexp->name(); }
|
virtual string name() const { return m_origVertexp->name(); }
|
||||||
virtual string dotColor() const { return m_origVertexp->dotColor(); }
|
virtual string dotColor() const { return m_origVertexp->dotColor(); }
|
||||||
|
virtual FileLine* fileline() const { return m_origVertexp->fileline(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -532,7 +532,7 @@ double V3Graph::orderDFSIterate(V3GraphVertex* vertexp) {
|
||||||
// Compute fanouts of each node
|
// Compute fanouts of each node
|
||||||
// If forward edge, don't double count that fanout
|
// If forward edge, don't double count that fanout
|
||||||
if (vertexp->user() == 2) return vertexp->fanout(); // Already processed it
|
if (vertexp->user() == 2) return vertexp->fanout(); // Already processed it
|
||||||
if (vertexp->user() == 1) v3fatalSrc("Loop found, backward edges should be dead");
|
if (vertexp->user() == 1) vertexp->v3fatalSrc("Loop found, backward edges should be dead");
|
||||||
vertexp->user(1);
|
vertexp->user(1);
|
||||||
double fanout = 0;
|
double fanout = 0;
|
||||||
for (V3GraphEdge* edgep = vertexp->outBeginp(); edgep; edgep = edgep->outNextp()) {
|
for (V3GraphEdge* edgep = vertexp->outBeginp(); edgep; edgep = edgep->outNextp()) {
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ public:
|
||||||
virtual ~LinkCellsVertex() {}
|
virtual ~LinkCellsVertex() {}
|
||||||
AstNodeModule* modp() const { return m_modp; }
|
AstNodeModule* modp() const { return m_modp; }
|
||||||
virtual string name() const { return modp()->name(); }
|
virtual string name() const { return modp()->name(); }
|
||||||
|
virtual FileLine* fileline() const { return modp()->fileline(); }
|
||||||
// Recursive modules get space for maximum recursion
|
// Recursive modules get space for maximum recursion
|
||||||
virtual uint32_t rankAdder() const { return m_modp->recursiveClone() ? (1+v3Global.opt.moduleRecursionDepth()) : 1; }
|
virtual uint32_t rankAdder() const { return m_modp->recursiveClone() ? (1+v3Global.opt.moduleRecursionDepth()) : 1; }
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -222,6 +222,7 @@ public:
|
||||||
virtual ~OrderVarVertex() {}
|
virtual ~OrderVarVertex() {}
|
||||||
virtual OrderVarVertex* clone (V3Graph* graphp) const = 0;
|
virtual OrderVarVertex* clone (V3Graph* graphp) const = 0;
|
||||||
virtual OrderVEdgeType type() const = 0;
|
virtual OrderVEdgeType type() const = 0;
|
||||||
|
virtual FileLine* fileline() const { return varScp()->fileline(); }
|
||||||
// ACCESSORS
|
// ACCESSORS
|
||||||
AstVarScope* varScp() const { return m_varScp; }
|
AstVarScope* varScp() const { return m_varScp; }
|
||||||
void isClock(bool flag) { m_isClock=flag; }
|
void isClock(bool flag) { m_isClock=flag; }
|
||||||
|
|
@ -328,11 +329,12 @@ public:
|
||||||
// METHODS
|
// METHODS
|
||||||
virtual OrderVEdgeType type() const { return OrderVEdgeType::VERTEX_MOVE; }
|
virtual OrderVEdgeType type() const { return OrderVEdgeType::VERTEX_MOVE; }
|
||||||
virtual string dotColor() const {
|
virtual string dotColor() const {
|
||||||
if (logicp()) {
|
if (logicp()) return logicp()->dotColor();
|
||||||
return logicp()->dotColor();
|
else return "";
|
||||||
} else {
|
}
|
||||||
return "";
|
virtual FileLine* fileline() const {
|
||||||
}
|
if (logicp()) return logicp()->fileline();
|
||||||
|
else return NULL;
|
||||||
}
|
}
|
||||||
virtual string name() const {
|
virtual string name() const {
|
||||||
string nm;
|
string nm;
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@ protected:
|
||||||
return m_nodep->name();
|
return m_nodep->name();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
virtual FileLine* fileline() const { return nodep()->fileline(); }
|
||||||
public:
|
public:
|
||||||
virtual AstNode* nodep() const { return m_nodep; }
|
virtual AstNode* nodep() const { return m_nodep; }
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@ public:
|
||||||
AstNodeFTask* nodep() const { return m_nodep; }
|
AstNodeFTask* nodep() const { return m_nodep; }
|
||||||
virtual string name() const { return nodep()->name(); }
|
virtual string name() const { return nodep()->name(); }
|
||||||
virtual string dotColor() const { return pure() ? "black" : "red"; }
|
virtual string dotColor() const { return pure() ? "black" : "red"; }
|
||||||
|
virtual FileLine* fileline() const { return nodep()->fileline(); }
|
||||||
AstCFunc* cFuncp() const { return m_cFuncp; }
|
AstCFunc* cFuncp() const { return m_cFuncp; }
|
||||||
void cFuncp(AstCFunc* nodep) { m_cFuncp=nodep; }
|
void cFuncp(AstCFunc* nodep) { m_cFuncp=nodep; }
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,7 @@ public:
|
||||||
AstCFunc* nodep() const { return m_nodep; }
|
AstCFunc* nodep() const { return m_nodep; }
|
||||||
virtual string name() const { return nodep()->name(); }
|
virtual string name() const { return nodep()->name(); }
|
||||||
virtual string dotColor() const { return "yellow"; }
|
virtual string dotColor() const { return "yellow"; }
|
||||||
|
virtual FileLine* fileline() const { return nodep()->fileline(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class TraceTraceVertex : public V3GraphVertex {
|
class TraceTraceVertex : public V3GraphVertex {
|
||||||
|
|
@ -128,6 +129,7 @@ public:
|
||||||
AstTraceInc* nodep() const { return m_nodep; }
|
AstTraceInc* nodep() const { return m_nodep; }
|
||||||
virtual string name() const { return nodep()->declp()->name(); }
|
virtual string name() const { return nodep()->declp()->name(); }
|
||||||
virtual string dotColor() const { return "red"; }
|
virtual string dotColor() const { return "red"; }
|
||||||
|
virtual FileLine* fileline() const { return nodep()->fileline(); }
|
||||||
TraceTraceVertex* duplicatep() const { return m_duplicatep; }
|
TraceTraceVertex* duplicatep() const { return m_duplicatep; }
|
||||||
void duplicatep(TraceTraceVertex* dupp) {
|
void duplicatep(TraceTraceVertex* dupp) {
|
||||||
if (duplicatep()) nodep()->v3fatalSrc("Assigning duplicatep() to already duplicated node");
|
if (duplicatep()) nodep()->v3fatalSrc("Assigning duplicatep() to already duplicated node");
|
||||||
|
|
@ -144,6 +146,7 @@ public:
|
||||||
AstVarScope* nodep() const { return m_nodep; }
|
AstVarScope* nodep() const { return m_nodep; }
|
||||||
virtual string name() const { return nodep()->name(); }
|
virtual string name() const { return nodep()->name(); }
|
||||||
virtual string dotColor() const { return "skyblue"; }
|
virtual string dotColor() const { return "skyblue"; }
|
||||||
|
virtual FileLine* fileline() const { return nodep()->fileline(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
//######################################################################
|
//######################################################################
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,7 @@ public:
|
||||||
:feedsTri() ? "blue" : "lightblue")
|
:feedsTri() ? "blue" : "lightblue")
|
||||||
: (isTristate() ? "darkgreen"
|
: (isTristate() ? "darkgreen"
|
||||||
:feedsTri() ? "green" : "lightgreen")); }
|
:feedsTri() ? "green" : "lightgreen")); }
|
||||||
|
virtual FileLine* fileline() const { return nodep()->fileline(); }
|
||||||
void isTristate(bool flag) { m_isTristate = flag; }
|
void isTristate(bool flag) { m_isTristate = flag; }
|
||||||
bool isTristate() const { return m_isTristate; }
|
bool isTristate() const { return m_isTristate; }
|
||||||
void feedsTri(bool flag) { m_feedsTri = flag; }
|
void feedsTri(bool flag) { m_feedsTri = flag; }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue