From d0e6caee442acf8633cd275671f164f19073b21b Mon Sep 17 00:00:00 2001 From: Ryszard Rozak Date: Mon, 12 Jan 2026 14:23:36 +0100 Subject: [PATCH] Remove unneeded nested if Signed-off-by: Ryszard Rozak --- src/V3Force.cpp | 73 ++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/src/V3Force.cpp b/src/V3Force.cpp index 4d9a8ecbc..af6fb8366 100644 --- a/src/V3Force.cpp +++ b/src/V3Force.cpp @@ -99,47 +99,44 @@ public: AstNodeStmt* toInsertp = nullptr; AstNodeStmt* outerStmtp = nullptr; std::vector loopVarRefs; - if (VN_IS(enRefp->dtypep()->skipRefp(), UnpackArrayDType)) { + if (AstUnpackArrayDType* const unpackedp + = VN_CAST(m_rdVscp->varp()->dtypep()->skipRefp(), UnpackArrayDType)) { // Create a loop to set all elements of __VforceEn array to 0. // That loop node is then copied and used for updating elements of __VforceRd array - if (AstUnpackArrayDType* const unpackedp - = VN_CAST(m_rdVscp->varp()->dtypep(), UnpackArrayDType)) { - std::vector dims = unpackedp->unpackDimensions(); - loopVarRefs.reserve(dims.size()); - for (size_t i = 0; i < dims.size(); i++) { - AstVar* const loopVarp = new AstVar{ - flp, VVarType::MODULETEMP, - m_rdVscp->varp()->name() + "__VwhileIter" + std::to_string(i), - VFlagBitPacked{}, 32}; - m_rdVscp->varp()->addNext(loopVarp); - AstVarScope* const loopVarScopep - = new AstVarScope{flp, m_rdVscp->scopep(), loopVarp}; - m_rdVscp->addNext(loopVarScopep); - AstVarRef* const readRefp - = new AstVarRef{flp, loopVarScopep, VAccess::READ}; - loopVarRefs.push_back(readRefp); - AstNodeStmt* const currInitp - = new AstAssign{flp, new AstVarRef{flp, loopVarScopep, VAccess::WRITE}, - new AstConst{flp, 0}}; - if (toInsertp) { - toInsertp->addNextHere(currInitp); - } else { - outerStmtp = currInitp; - } - AstLoop* const currWhilep = new AstLoop{flp}; - currInitp->addNextHere(currWhilep); - AstLoopTest* const loopTestp = new AstLoopTest{ - flp, currWhilep, - new AstNeq{flp, readRefp, - new AstConst{ - flp, static_cast(dims[i]->elementsConst())}}}; - currWhilep->addStmtsp(loopTestp); - toInsertp = loopTestp; - AstAssign* const currIncrp = new AstAssign{ - flp, new AstVarRef{flp, loopVarScopep, VAccess::WRITE}, - new AstAdd{flp, readRefp->cloneTree(false), new AstConst{flp, 1}}}; - currWhilep->addStmtsp(currIncrp); + std::vector dims = unpackedp->unpackDimensions(); + loopVarRefs.reserve(dims.size()); + for (size_t i = 0; i < dims.size(); i++) { + AstVar* const loopVarp + = new AstVar{flp, VVarType::MODULETEMP, + m_rdVscp->varp()->name() + "__VwhileIter" + std::to_string(i), + VFlagBitPacked{}, 32}; + m_rdVscp->varp()->addNext(loopVarp); + AstVarScope* const loopVarScopep + = new AstVarScope{flp, m_rdVscp->scopep(), loopVarp}; + m_rdVscp->addNext(loopVarScopep); + AstVarRef* const readRefp = new AstVarRef{flp, loopVarScopep, VAccess::READ}; + loopVarRefs.push_back(readRefp); + AstNodeStmt* const currInitp + = new AstAssign{flp, new AstVarRef{flp, loopVarScopep, VAccess::WRITE}, + new AstConst{flp, 0}}; + if (toInsertp) { + toInsertp->addNextHere(currInitp); + } else { + outerStmtp = currInitp; } + AstLoop* const currWhilep = new AstLoop{flp}; + currInitp->addNextHere(currWhilep); + AstLoopTest* const loopTestp = new AstLoopTest{ + flp, currWhilep, + new AstNeq{ + flp, readRefp, + new AstConst{flp, static_cast(dims[i]->elementsConst())}}}; + currWhilep->addStmtsp(loopTestp); + toInsertp = loopTestp; + AstAssign* const currIncrp = new AstAssign{ + flp, new AstVarRef{flp, loopVarScopep, VAccess::WRITE}, + new AstAdd{flp, readRefp->cloneTree(false), new AstConst{flp, 1}}}; + currWhilep->addStmtsp(currIncrp); } } V3Number zero{m_enVscp, m_enVscp->width()};