Internals: Make AstAlwaysPost an AstNodeProcedure. (#2959)

This seems to belong there, eliminates some code duplication in V3Clock,
and also enables splitting AstAlwaysPost statements into different
functions in V3Order, but should otherwise have little effect.
This commit is contained in:
Geza Lore 2021-05-15 15:56:28 +01:00 committed by GitHub
parent 88fed4bc2f
commit 5e95cc9280
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 29 deletions

View File

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

View File

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

View File

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