diff --git a/src/V3AstNodes.h b/src/V3AstNodes.h index ba1e6dc9b..b9e067989 100644 --- a/src/V3AstNodes.h +++ b/src/V3AstNodes.h @@ -3349,6 +3349,7 @@ public: void sensesp(AstSenTree* nodep) { setOp1p(nodep); } VAlwaysKwd keyword() const { return m_keyword; } }; + class AstAlwaysPostponed final : public AstNodeProcedure { // Like always but postponement scheduling region @@ -3358,6 +3359,16 @@ public: ASTNODE_NODE_FUNCS(AlwaysPostponed) }; +class AstAlwaysPost final : public AstNodeProcedure { + // Like always but post assignments for memory assignment IFs +public: + AstAlwaysPost(FileLine* fl, AstSenTree* sensesp, AstNode* bodysp) + : ASTGEN_SUPER(fl, bodysp) { + addNOp1p(sensesp); + } + ASTNODE_NODE_FUNCS(AlwaysPost) +}; + class AstAlwaysPublic final : public AstNodeStmt { // "Fake" sensitivity created by /*verilator public_flat_rw @(edgelist)*/ // Body statements are just AstVarRefs to the public signals @@ -3378,20 +3389,6 @@ public: bool isJustOneBodyStmt() const { return bodysp() && !bodysp()->nextp(); } }; -class AstAlwaysPost final : public AstNode { - // Like always but post assignments for memory assignment IFs -public: - AstAlwaysPost(FileLine* fl, AstSenTree* sensesp, AstNode* bodysp) - : ASTGEN_SUPER(fl) { - addNOp1p(sensesp); - addNOp2p(bodysp); - } - ASTNODE_NODE_FUNCS(AlwaysPost) - // - AstNode* bodysp() const { return op2p(); } // op2 = Statements to evaluate - void addBodysp(AstNode* newp) { addOp2p(newp); } -}; - class AstAssign final : public AstNodeAssign { public: AstAssign(FileLine* fl, AstNode* lhsp, AstNode* rhsp) diff --git a/src/V3Clock.cpp b/src/V3Clock.cpp index eb5cd526c..05620b081 100644 --- a/src/V3Clock.cpp +++ b/src/V3Clock.cpp @@ -301,20 +301,6 @@ private: } VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep); } - virtual void visit(AstAlwaysPost* nodep) override { - if (AstNode* stmtsp = nodep->bodysp()) { - stmtsp->unlinkFrBackWithNext(); - nodep->addNextHere(stmtsp); - } - VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep); - } - virtual void visit(AstAlwaysPostponed* nodep) override { - if (AstNode* stmtsp = nodep->bodysp()) { - stmtsp->unlinkFrBackWithNext(); - nodep->addNextHere(stmtsp); - } - VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep); - } virtual void visit(AstCoverToggle* nodep) override { // nodep->dumpTree(cout, "ct:"); // COVERTOGGLE(INC, ORIG, CHANGE) -> diff --git a/src/V3Delayed.cpp b/src/V3Delayed.cpp index eaf5fb60d..66d1ff33e 100644 --- a/src/V3Delayed.cpp +++ b/src/V3Delayed.cpp @@ -351,7 +351,7 @@ private: new AstVarRef(nodep->fileline(), setvscp, VAccess::READ), nullptr, nullptr); UINFO(9, " Created " << postLogicp << endl); - finalp->addBodysp(postLogicp); + finalp->addStmtp(postLogicp); finalp->user3p(setvscp); // Remember IF's vset variable finalp->user4p(postLogicp); // and the associated IF, as we may be able to reuse it }