Show file and line info when possible on internal graph errors.

This commit is contained in:
Wilson Snyder 2018-07-14 18:45:06 -04:00
parent d065662afc
commit cf4bf9b7a5
12 changed files with 38 additions and 6 deletions

View File

@ -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; }

View File

@ -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; }

View File

@ -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();

View File

@ -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);

View File

@ -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(); }
}; };
//-------------------------------------------------------------------- //--------------------------------------------------------------------

View File

@ -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()) {

View File

@ -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; }
}; };

View File

@ -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;

View File

@ -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; }
}; };

View File

@ -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; }
}; };

View File

@ -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(); }
}; };
//###################################################################### //######################################################################

View File

@ -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; }