Internals: AstExecGraph is an AstNodeStmt (#6280)
This commit is contained in:
parent
ec91158130
commit
cc77233902
|
|
@ -1048,33 +1048,6 @@ public:
|
||||||
ASTGEN_MEMBERS_AstEmpty;
|
ASTGEN_MEMBERS_AstEmpty;
|
||||||
bool sameNode(const AstNode* /*samep*/) const override { return true; }
|
bool sameNode(const AstNode* /*samep*/) const override { return true; }
|
||||||
};
|
};
|
||||||
class AstExecGraph final : public AstNode {
|
|
||||||
// For parallel execution, this node contains a dependency graph. Each
|
|
||||||
// vertex in the graph is an ExecMTask, which contains a body for the
|
|
||||||
// mtask (an AstMTaskBody), which contains sequentially executed statements.
|
|
||||||
//
|
|
||||||
// The AstMTaskBody nodes are also children of this node, so we can visit
|
|
||||||
// them without traversing the graph.
|
|
||||||
//
|
|
||||||
// @astgen op1 := mTaskBodiesp : List[AstMTaskBody]
|
|
||||||
// In later phases, the statements that start the parallel execution
|
|
||||||
// @astgen op2 := stmtsp : List[AstNode]
|
|
||||||
V3Graph* const m_depGraphp; // contains ExecMTask vertices
|
|
||||||
const string m_name; // Name of this AstExecGraph (for uniqueness at code generation)
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit AstExecGraph(FileLine* fl, const string& name) VL_MT_DISABLED;
|
|
||||||
~AstExecGraph() override;
|
|
||||||
ASTGEN_MEMBERS_AstExecGraph;
|
|
||||||
void cloneRelink() override { V3ERROR_NA; } // Not cloneable
|
|
||||||
const char* broken() const override {
|
|
||||||
BROKEN_RTN(!m_depGraphp);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
string name() const override VL_MT_STABLE { return m_name; }
|
|
||||||
V3Graph* depGraphp() { return m_depGraphp; }
|
|
||||||
const V3Graph* depGraphp() const { return m_depGraphp; }
|
|
||||||
};
|
|
||||||
class AstGenCaseItem final : public AstNode {
|
class AstGenCaseItem final : public AstNode {
|
||||||
// Single item of an AstGenCase
|
// Single item of an AstGenCase
|
||||||
// @astgen op1 := condsp : List[AstNodeExpr]
|
// @astgen op1 := condsp : List[AstNodeExpr]
|
||||||
|
|
|
||||||
|
|
@ -601,6 +601,37 @@ public:
|
||||||
bool isTimingControl() const override { return true; }
|
bool isTimingControl() const override { return true; }
|
||||||
int instrCount() const override { return 0; }
|
int instrCount() const override { return 0; }
|
||||||
};
|
};
|
||||||
|
class AstExecGraph final : public AstNodeStmt {
|
||||||
|
// For parallel execution, this node contains a dependency graph. Each
|
||||||
|
// vertex in the graph is an ExecMTask, which contains a body for the
|
||||||
|
// mtask (an AstMTaskBody), which contains sequentially executed statements.
|
||||||
|
//
|
||||||
|
// The AstMTaskBody nodes are also children of this node, so we can visit
|
||||||
|
// them without traversing the graph.
|
||||||
|
//
|
||||||
|
// The location where AstExecGraph appears as a procedural statement is
|
||||||
|
// where the parallel graph will be executed. Execution proceeds after
|
||||||
|
// the AstExecGraph when all threads have joined.
|
||||||
|
//
|
||||||
|
// @astgen op1 := mTaskBodiesp : List[AstMTaskBody]
|
||||||
|
// In later phases, the statements that start the parallel execution
|
||||||
|
// @astgen op2 := stmtsp : List[AstNode]
|
||||||
|
V3Graph* const m_depGraphp; // contains ExecMTask vertices
|
||||||
|
const string m_name; // Name of this AstExecGraph (for uniqueness at code generation)
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit AstExecGraph(FileLine* fl, const string& name) VL_MT_DISABLED;
|
||||||
|
~AstExecGraph() override;
|
||||||
|
ASTGEN_MEMBERS_AstExecGraph;
|
||||||
|
void cloneRelink() override { V3ERROR_NA; } // Not cloneable
|
||||||
|
const char* broken() const override {
|
||||||
|
BROKEN_RTN(!m_depGraphp);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
string name() const override VL_MT_STABLE { return m_name; }
|
||||||
|
V3Graph* depGraphp() { return m_depGraphp; }
|
||||||
|
const V3Graph* depGraphp() const { return m_depGraphp; }
|
||||||
|
};
|
||||||
class AstFClose final : public AstNodeStmt {
|
class AstFClose final : public AstNodeStmt {
|
||||||
// Parents: stmtlist
|
// Parents: stmtlist
|
||||||
// @astgen op1 := filep : AstNodeExpr // file (must be a VarRef)
|
// @astgen op1 := filep : AstNodeExpr // file (must be a VarRef)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue