Internals: Simplify release handling. No functional change intended (#6647)

This commit is contained in:
Ryszard Rozak 2025-11-05 16:20:18 +01:00 committed by GitHub
parent 4404978765
commit 96ece751fa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 14 additions and 16 deletions

View File

@ -293,29 +293,27 @@ class ForceConvertVisitor final : public VNVisitor {
AstAssign* const resetRdp AstAssign* const resetRdp
= new AstAssign{flp, lhsp->cloneTreePure(false), lhsp->unlinkFrBack()}; = new AstAssign{flp, lhsp->cloneTreePure(false), lhsp->unlinkFrBack()};
// Replace write refs on the LHS // Replace write refs on the LHS
resetRdp->lhsp()->foreach([this](AstNodeVarRef* refp) { resetRdp->lhsp()->foreach([this](AstVarRef* refp) {
if (refp->access() != VAccess::WRITE) return;
AstVarScope* const vscp = refp->varScopep();
AstVarScope* const newVscp = vscp->varp()->isContinuously()
? m_state.getForceComponents(vscp).m_rdVscp
: vscp;
AstVarRef* const newpRefp = new AstVarRef{refp->fileline(), newVscp, VAccess::WRITE};
refp->replaceWith(newpRefp);
VL_DO_DANGLING(refp->deleteTree(), refp);
});
// Replace write refs on RHS
resetRdp->rhsp()->foreach([this](AstNodeVarRef* refp) {
if (refp->access() != VAccess::WRITE) return; if (refp->access() != VAccess::WRITE) return;
AstVarScope* const vscp = refp->varScopep(); AstVarScope* const vscp = refp->varScopep();
if (vscp->varp()->isContinuously()) { if (vscp->varp()->isContinuously()) {
AstVarRef* const newpRefp = new AstVarRef{refp->fileline(), vscp, VAccess::READ}; AstVarRef* const newpRefp = new AstVarRef{
ForceState::markNonReplaceable(newpRefp); refp->fileline(), m_state.getForceComponents(vscp).m_rdVscp, VAccess::WRITE};
refp->replaceWith(newpRefp); refp->replaceWith(newpRefp);
VL_DO_DANGLING(refp->deleteTree(), refp);
}
});
// Replace write refs on RHS
resetRdp->rhsp()->foreach([this](AstVarRef* refp) {
if (refp->access() != VAccess::WRITE) return;
AstVarScope* const vscp = refp->varScopep();
if (vscp->varp()->isContinuously()) {
refp->access(VAccess::READ);
ForceState::markNonReplaceable(refp);
} else { } else {
refp->replaceWith(m_state.getForceComponents(vscp).forcedUpdate(vscp)); refp->replaceWith(m_state.getForceComponents(vscp).forcedUpdate(vscp));
VL_DO_DANGLING(refp->deleteTree(), refp);
} }
VL_DO_DANGLING(refp->deleteTree(), refp);
}); });
resetRdp->addNext(resetEnp); resetRdp->addNext(resetEnp);