Internals: Simplify release handling. No functional change intended (#6647)
This commit is contained in:
parent
4404978765
commit
96ece751fa
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue