diff --git a/src/V3AstNodeOther.h b/src/V3AstNodeOther.h index 6f7e3195b..b46c18028 100644 --- a/src/V3AstNodeOther.h +++ b/src/V3AstNodeOther.h @@ -3737,10 +3737,9 @@ public: bool isTimingControl() const override { return true; } }; class AstWhile final : public AstNodeStmt { - // @astgen op1 := precondsp : List[AstNode] - // @astgen op2 := condp : AstNodeExpr - // @astgen op3 := stmtsp : List[AstNode] - // @astgen op4 := incsp : List[AstNode] + // @astgen op1 := condp : AstNodeExpr + // @astgen op2 := stmtsp : List[AstNode] + // @astgen op3 := incsp : List[AstNode] VOptionBool m_unrollFull; // Full, disable, or default unrolling public: AstWhile(FileLine* fl, AstNodeExpr* condp, AstNode* stmtsp = nullptr, AstNode* incsp = nullptr) diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp index 92915d5eb..8ed5b6d2e 100644 --- a/src/V3AstNodes.cpp +++ b/src/V3AstNodes.cpp @@ -1518,12 +1518,7 @@ void AstNodeStmt::addNextStmt(AstNode* newp, AstNode*) { void AstWhile::addNextStmt(AstNode* newp, AstNode* belowp) { // Special, as statements need to be put in different places // Belowp is how we came to recurse up to this point - // Preconditions insert first just before themselves (the normal rule - // for other statement types) - if (belowp == precondsp()) { - // Next in precond list - belowp->addNextHere(newp); - } else if (belowp == condp()) { + if (belowp == condp()) { // Becomes first statement in body, body may have been empty if (stmtsp()) { stmtsp()->addHereThisAsNext(newp); diff --git a/src/V3Const.cpp b/src/V3Const.cpp index 31a8688a1..ae52fad2c 100644 --- a/src/V3Const.cpp +++ b/src/V3Const.cpp @@ -3352,14 +3352,10 @@ class ConstVisitor final : public VNVisitor { if (m_doNConst) { if (nodep->condp()->isZero()) { UINFO(4, "WHILE(0) => nop " << nodep); - if (nodep->precondsp()) { - nodep->replaceWith(nodep->precondsp()); - } else { - nodep->v3warn(UNUSEDLOOP, - "Loop condition is always false; body will never execute"); - nodep->fileline()->modifyWarnOff(V3ErrorCode::UNUSEDLOOP, true); - nodep->unlinkFrBack(); - } + nodep->v3warn(UNUSEDLOOP, + "Loop condition is always false; body will never execute"); + nodep->fileline()->modifyWarnOff(V3ErrorCode::UNUSEDLOOP, true); + nodep->unlinkFrBack(); VL_DO_DANGLING(pushDeletep(nodep), nodep); } else if (nodep->condp()->isNeqZero()) { if (!thisWhileHasJumpDelay) { diff --git a/src/V3Coverage.cpp b/src/V3Coverage.cpp index 68e98835c..72adcf0a0 100644 --- a/src/V3Coverage.cpp +++ b/src/V3Coverage.cpp @@ -310,7 +310,6 @@ class CoverageVisitor final : public VNVisitor { { VL_RESTORER(m_inLoopNotBody); m_inLoopNotBody = true; - iterateAndNextNull(nodep->precondsp()); iterateNull(nodep->condp()); iterateAndNextNull(nodep->incsp()); } diff --git a/src/V3EmitCFunc.h b/src/V3EmitCFunc.h index b3720f3e7..63d57aaf3 100644 --- a/src/V3EmitCFunc.h +++ b/src/V3EmitCFunc.h @@ -1014,13 +1014,11 @@ public: } void visit(AstWhile* nodep) override { VL_RESTORER(m_createdScopeHash); - iterateAndNextConstNull(nodep->precondsp()); putns(nodep, "while ("); iterateAndNextConstNull(nodep->condp()); puts(") {\n"); iterateAndNextConstNull(nodep->stmtsp()); iterateAndNextConstNull(nodep->incsp()); - iterateAndNextConstNull(nodep->precondsp()); // Need to recompute before next loop puts("}\n"); } void visit(AstNodeIf* nodep) override { diff --git a/src/V3EmitV.cpp b/src/V3EmitV.cpp index d0973120d..ca95d85b5 100644 --- a/src/V3EmitV.cpp +++ b/src/V3EmitV.cpp @@ -365,13 +365,11 @@ class EmitVBaseVisitorConst VL_NOT_FINAL : public EmitCBaseVisitorConst { putfs(nodep, "end\n"); } void visit(AstWhile* nodep) override { - iterateAndNextConstNull(nodep->precondsp()); putfs(nodep, "while ("); iterateAndNextConstNull(nodep->condp()); puts(") begin\n"); iterateAndNextConstNull(nodep->stmtsp()); iterateAndNextConstNull(nodep->incsp()); - iterateAndNextConstNull(nodep->precondsp()); // Need to recompute before next loop putfs(nodep, "end\n"); } void visit(AstNodeIf* nodep) override { diff --git a/src/V3EmitXml.cpp b/src/V3EmitXml.cpp index ee43b621f..6545aaf35 100644 --- a/src/V3EmitXml.cpp +++ b/src/V3EmitXml.cpp @@ -129,9 +129,6 @@ class EmitXmlFileVisitor final : public VNVisitorConst { void visit(AstWhile* nodep) override { outputTag(nodep, "while"); puts(">\n"); - puts("\n"); - iterateAndNextConstNull(nodep->precondsp()); - puts("\n"); if (nodep->condp()) { puts("\n"); iterateAndNextConstNull(nodep->condp()); diff --git a/src/V3Life.cpp b/src/V3Life.cpp index d58525ca8..1cdd0c17d 100644 --- a/src/V3Life.cpp +++ b/src/V3Life.cpp @@ -401,7 +401,6 @@ class LifeVisitor final : public VNVisitor { LifeBlock* const bodyLifep = new LifeBlock{prevLifep, m_statep}; { m_lifep = condLifep; - iterateAndNextNull(nodep->precondsp()); iterateAndNextNull(nodep->condp()); } { diff --git a/src/V3LinkInc.cpp b/src/V3LinkInc.cpp index c49a6cf47..bb17df158 100644 --- a/src/V3LinkInc.cpp +++ b/src/V3LinkInc.cpp @@ -54,18 +54,11 @@ VL_DEFINE_DEBUG_FUNCTIONS; //###################################################################### class LinkIncVisitor final : public VNVisitor { - // TYPES - enum InsertMode : uint8_t { - IM_BEFORE, // Pointing at statement ref is in, insert before this - IM_AFTER, // Pointing at last inserted stmt, insert after - IM_WHILE_PRECOND // Pointing to for loop, add to body end - }; - // STATE AstNodeFTask* m_ftaskp = nullptr; // Function or task we're inside AstNodeModule* m_modp = nullptr; // Module we're inside int m_modIncrementsNum = 0; // Var name counter - InsertMode m_insMode = IM_BEFORE; // How to insert + AstWhile* m_inWhileCondp = nullptr; // Inside condition of this while loop AstNode* m_insStmtp = nullptr; // Where to insert statement bool m_unsupportedHere = false; // Used to detect where it's not supported yet @@ -86,23 +79,14 @@ class LinkIncVisitor final : public VNVisitor { m_modp->addStmtsp(newp); } } - void insertNextToStmt(AstNode* nodep, AstNode* newp) { + void insertBeforeStmt(AstNode* nodep, AstNode* newp) { // Return node that must be visited, if any if (debug() >= 9) newp->dumpTree("- newstmt: "); - UASSERT_OBJ(m_insStmtp, nodep, "Function not underneath a statement"); - if (m_insMode == IM_BEFORE) { - // Add the whole thing before insertAt - if (debug() >= 9) newp->dumpTree("- newfunc: "); - m_insStmtp->addHereThisAsNext(newp); - } else if (m_insMode == IM_AFTER) { - m_insStmtp->addNextHere(newp); - } else if (m_insMode == IM_WHILE_PRECOND) { - AstWhile* const whilep = VN_AS(m_insStmtp, While); - UASSERT_OBJ(whilep, nodep, "Insert should be under WHILE"); - whilep->addPrecondsp(newp); - } else { - nodep->v3fatalSrc("Unknown InsertMode"); - } + UASSERT_OBJ(m_insStmtp, nodep, "Expression not underneath a statement"); + // In a while condition, the statement also needs to go on the + // back-edge to the loop header, 'incsp' is that place. + if (m_inWhileCondp) m_inWhileCondp->addIncsp(newp->cloneTreePure(true)); + m_insStmtp->addHereThisAsNext(newp); } // VISITORS @@ -120,14 +104,13 @@ class LinkIncVisitor final : public VNVisitor { } void visit(AstWhile* nodep) override { // Special, as statements need to be put in different places - // Preconditions insert first just before themselves (the normal - // rule for other statement types) - m_insStmtp = nullptr; // First thing should be new statement - iterateAndNextNull(nodep->precondsp()); - // Conditions insert first at end of precondsp. - m_insMode = IM_WHILE_PRECOND; m_insStmtp = nodep; - iterateAndNextNull(nodep->condp()); + { + // Conditions insert before the loop and into incsp + VL_RESTORER(m_inWhileCondp); + m_inWhileCondp = nodep; + iterateAndNextNull(nodep->condp()); + } // Body insert just before themselves m_insStmtp = nullptr; // First thing should be new statement iterateAndNextNull(nodep->stmtsp()); @@ -160,7 +143,6 @@ class LinkIncVisitor final : public VNVisitor { m_insStmtp = nullptr; } void visit(AstCaseItem* nodep) override { - m_insMode = IM_BEFORE; { VL_RESTORER(m_unsupportedHere); m_unsupportedHere = true; @@ -193,7 +175,6 @@ class LinkIncVisitor final : public VNVisitor { m_insStmtp = nullptr; } void visit(AstNodeStmt* nodep) override { - m_insMode = IM_BEFORE; m_insStmtp = nodep; iterateChildren(nodep); m_insStmtp = nullptr; // Next thing should be new statement @@ -332,18 +313,17 @@ class LinkIncVisitor final : public VNVisitor { // Immediately after declaration - increment it by one AstAssign* const assignp = new AstAssign{fl, new AstVarRef{fl, varp, VAccess::WRITE}, operp}; - insertNextToStmt(nodep, assignp); // Immediately after incrementing - assign it to the original variable - assignp->addNextHere( - new AstAssign{fl, writep, new AstVarRef{fl, varp, VAccess::READ}}); + assignp->addNext(new AstAssign{fl, writep, new AstVarRef{fl, varp, VAccess::READ}}); + insertBeforeStmt(nodep, assignp); } else { // PostAdd/PostSub operations // Assign the original variable to the temporary one AstAssign* const assignp = new AstAssign{fl, new AstVarRef{fl, varp, VAccess::WRITE}, readp->cloneTreePure(true)}; - insertNextToStmt(nodep, assignp); // Increment the original variable by one - assignp->addNextHere(new AstAssign{fl, writep, operp}); + assignp->addNext(new AstAssign{fl, writep, operp}); + insertBeforeStmt(nodep, assignp); } // Replace the node with the temporary diff --git a/src/V3LinkJump.cpp b/src/V3LinkJump.cpp index ae8b6d328..2fbae615d 100644 --- a/src/V3LinkJump.cpp +++ b/src/V3LinkJump.cpp @@ -323,7 +323,6 @@ class LinkJumpVisitor final : public VNVisitor { VL_RESTORER(m_loopInc); m_loopp = nodep; m_loopInc = false; - iterateAndNextNull(nodep->precondsp()); iterateAndNextNull(nodep->condp()); iterateAndNextNull(nodep->stmtsp()); m_loopInc = true; diff --git a/src/V3Premit.cpp b/src/V3Premit.cpp index d9b5f805f..1883d0929 100644 --- a/src/V3Premit.cpp +++ b/src/V3Premit.cpp @@ -81,7 +81,6 @@ class PremitVisitor final : public VNVisitor { && !constp->num().isString(); // Not a string AstVar* varp = nullptr; - AstAssign* assignp = nullptr; if (useConstPool) { // Extract into constant pool. @@ -96,24 +95,20 @@ class PremitVisitor final : public VNVisitor { m_cfuncp->addInitsp(varp); ++m_temporaryVarsCreated; - // Put assignment before the referencing statement - assignp = new AstAssign{flp, new AstVarRef{flp, varp, VAccess::WRITE}, nodep}; - if (m_inWhileCondp) { - // Statements that are needed for the 'condition' in a while - // actually have to be put before & after the loop, since we - // can't do any statements in a while's (cond). - m_inWhileCondp->addPrecondsp(assignp); - } else { - m_stmtp->addHereThisAsNext(assignp); - } + // Assignment to put before the referencing statement + AstAssign* const assignp + = new AstAssign{flp, new AstVarRef{flp, varp, VAccess::WRITE}, nodep}; + // Insert before the statement + m_stmtp->addHereThisAsNext(assignp); + // Statements that are needed for the 'condition' in a while also + // need to be inserted on the back-edge to the loop header. + // 'incsp' is just right palce to do this + if (m_inWhileCondp) m_inWhileCondp->addIncsp(assignp->cloneTree(false)); } // Replace node with VarRef to new Var relinker.relink(new AstVarRef{flp, varp, VAccess::READ}); - // Handle wide expressions inside the expression recursively - if (assignp) iterate(assignp); - // Return the temporary variable return varp; } @@ -186,7 +181,6 @@ class PremitVisitor final : public VNVisitor { UINFO(4, " WHILE " << nodep); // cppcheck-suppress shadowVariable // Also restored below START_STATEMENT_OR_RETURN(nodep); - iterateAndNextNull(nodep->precondsp()); { // cppcheck-suppress shadowVariable // Also restored above VL_RESTORER(m_inWhileCondp); diff --git a/src/V3SchedVirtIface.cpp b/src/V3SchedVirtIface.cpp index 06818e5cd..d4ef3a5e8 100644 --- a/src/V3SchedVirtIface.cpp +++ b/src/V3SchedVirtIface.cpp @@ -201,7 +201,6 @@ private: } } void visit(AstWhile* nodep) override { - unsupportedWriteToVirtIface(nodep->precondsp(), "loop condition"); unsupportedWriteToVirtIface(nodep->condp(), "loop condition"); unsupportedWriteToVirtIface(nodep->incsp(), "loop increment statement"); { diff --git a/src/V3Simulate.h b/src/V3Simulate.h index 106a83ca9..9baaec0f4 100644 --- a/src/V3Simulate.h +++ b/src/V3Simulate.h @@ -1043,8 +1043,6 @@ private: int loops = 0; while (true) { UINFO(5, " WHILE-ITER " << nodep); - iterateAndNextConstNull(nodep->precondsp()); - if (jumpingOver(nodep)) break; iterateAndNextConstNull(nodep->condp()); if (jumpingOver(nodep)) break; if (!optimizable()) break; diff --git a/src/V3Task.cpp b/src/V3Task.cpp index d569ad780..c66dcb463 100644 --- a/src/V3Task.cpp +++ b/src/V3Task.cpp @@ -1588,11 +1588,8 @@ class TaskVisitor final : public VNVisitor { } void visit(AstWhile* nodep) override { // Special, as statements need to be put in different places - // Preconditions insert first just before themselves (the normal - // rule for other statement types) - m_insStmtp = nullptr; // First thing should be new statement - iterateAndNextNull(nodep->precondsp()); // Conditions insert first at end of precondsp. + // TODO: is this right? This is how it used to be. m_insStmtp = nodep; iterateAndNextNull(nodep->condp()); // Body insert just before themselves diff --git a/src/V3Unroll.cpp b/src/V3Unroll.cpp index 6b4332beb..06d931db5 100644 --- a/src/V3Unroll.cpp +++ b/src/V3Unroll.cpp @@ -82,13 +82,12 @@ class UnrollVisitor final : public VNVisitor { AstNode* const nodep, const VOptionBool& unrollFull, // Pragma unroll_full, unroll_disable AstNode* const initp, // Maybe under nodep (no nextp), or standalone (ignore nextp) - AstNode* const precondsp, AstNode* condp, + AstNode* condp, AstNode* const incp, // Maybe under nodep or in bodysp AstNode* bodysp) { // To keep the IF levels low, we return as each test fails. UINFO(4, " FOR Check " << nodep); if (initp) UINFO(6, " Init " << initp); - if (precondsp) UINFO(6, " Pcon " << precondsp); if (condp) UINFO(6, " Cond " << condp); if (incp) UINFO(6, " Inc " << incp); @@ -136,7 +135,6 @@ class UnrollVisitor final : public VNVisitor { m_varAssignHit = false; m_forkHit = false; m_ignoreIncp = incp; - iterateAndNextNull(precondsp); iterateAndNextNull(bodysp); iterateAndNextNull(incp); m_varModeCheck = false; @@ -172,15 +170,14 @@ class UnrollVisitor final : public VNVisitor { int bodySize = 0; int bodyLimit = v3Global.opt.unrollStmts(); if (loops > 0) bodyLimit = v3Global.opt.unrollStmts() / loops; - if (bodySizeOverRecurse(precondsp, bodySize /*ref*/, bodyLimit) - || bodySizeOverRecurse(bodysp, bodySize /*ref*/, bodyLimit) + if (bodySizeOverRecurse(bodysp, bodySize /*ref*/, bodyLimit) || bodySizeOverRecurse(incp, bodySize /*ref*/, bodyLimit)) { return cantUnroll(nodep, "too many statements"); } } } // Finally, we can do it - if (!forUnroller(nodep, unrollFull, initAssp, condp, precondsp, incp, bodysp)) { + if (!forUnroller(nodep, unrollFull, initAssp, condp, incp, bodysp)) { return cantUnroll(nodep, "Unable to unroll loop"); } VL_DANGLING(nodep); @@ -268,7 +265,7 @@ class UnrollVisitor final : public VNVisitor { } bool forUnroller(AstNode* nodep, const VOptionBool& unrollFull, AstAssign* initp, - AstNode* condp, AstNode* precondsp, AstNode* incp, AstNode* bodysp) { + AstNode* condp, AstNode* incp, AstNode* bodysp) { UINFO(9, "forUnroller " << nodep); V3Number loopValue{nodep}; if (!simulateTree(initp->rhsp(), nullptr, initp, loopValue)) { // @@ -280,10 +277,6 @@ class UnrollVisitor final : public VNVisitor { // Don't add to list, we do it once, and setting loop index isn't // needed if we have > 1 loop, as we're constant propagating it } - if (precondsp) { - precondsp->unlinkFrBackWithNext(); - stmtsp = AstNode::addNext(stmtsp, precondsp); - } if (bodysp) { bodysp->unlinkFrBackWithNext(); stmtsp = AstNode::addNext(stmtsp, bodysp); // Maybe null if no body @@ -374,7 +367,6 @@ class UnrollVisitor final : public VNVisitor { nodep->unlinkFrBack(); } if (bodysp) VL_DO_DANGLING(pushDeletep(bodysp), bodysp); - if (precondsp) VL_DO_DANGLING(pushDeletep(precondsp), precondsp); if (initp) VL_DO_DANGLING(pushDeletep(initp), initp); if (incp && !incp->backp()) VL_DO_DANGLING(pushDeletep(incp), incp); if (debug() >= 9 && newbodysp) newbodysp->dumpTree("- _new: "); @@ -386,9 +378,6 @@ class UnrollVisitor final : public VNVisitor { if (m_varModeCheck || m_varModeReplace) { } else { // Constify before unroll call, as it may change what is underneath. - if (nodep->precondsp()) { - V3Const::constifyEdit(nodep->precondsp()); // precondsp may change - } if (nodep->condp()) V3Const::constifyEdit(nodep->condp()); // condp may change // Grab initial value AstNode* initp = nullptr; // Should be statement before the while. @@ -411,8 +400,7 @@ class UnrollVisitor final : public VNVisitor { if (incp == stmtsp) stmtsp = nullptr; } // And check it - if (forUnrollCheck(nodep, nodep->unrollFull(), initp, nodep->precondsp(), - nodep->condp(), incp, stmtsp)) { + if (forUnrollCheck(nodep, nodep->unrollFull(), initp, nodep->condp(), incp, stmtsp)) { VL_DO_DANGLING(pushDeletep(nodep), nodep); // Did replacement } } @@ -436,8 +424,8 @@ class UnrollVisitor final : public VNVisitor { // condition, but they'll become while's which can be // deleted by V3Const. VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep); - } else if (forUnrollCheck(nodep, VOptionBool{}, nodep->initsp(), nullptr, - nodep->condp(), nodep->incsp(), nodep->stmtsp())) { + } else if (forUnrollCheck(nodep, VOptionBool{}, nodep->initsp(), nodep->condp(), + nodep->incsp(), nodep->stmtsp())) { VL_DO_DANGLING(pushDeletep(nodep), nodep); // Did replacement } else { nodep->v3error("For loop doesn't have genvar index, or is malformed"); diff --git a/src/V3Width.cpp b/src/V3Width.cpp index 20903fede..ff6de8dee 100644 --- a/src/V3Width.cpp +++ b/src/V3Width.cpp @@ -5189,7 +5189,6 @@ class WidthVisitor final : public VNVisitor { } void visit(AstWhile* nodep) override { assertAtStatement(nodep); - userIterateAndNext(nodep->precondsp(), nullptr); iterateCheckBool(nodep, "For Test Condition", nodep->condp(), BOTH); // it's like an if() condition. userIterateAndNext(nodep->stmtsp(), nullptr); diff --git a/src/verilog.y b/src/verilog.y index 0b57eeab1..834b79b96 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -3061,7 +3061,6 @@ genvar_iteration: // ==IEEE: genvar_iteration | varRefBase yP_SSRIGHTEQ expr { $$ = new AstAssign{$2, $1, new AstShiftRS{$2, $1->cloneTreePure(true), $3}}; } // // inc_or_dec_operator - // When support ++ as a real AST type, maybe AstWhile::precondsp() becomes generic AstNodeExprStmt? | yP_PLUSPLUS varRefBase { $$ = new AstAssign{$1, $2, new AstAdd{$1, $2->cloneTreePure(true), new AstConst{$1, AstConst::StringToParse{}, "'b1"}}}; } diff --git a/test_regress/t/t_interface_virtual_unsup.out b/test_regress/t/t_interface_virtual_unsup.out index aec39ddb7..028c515d1 100644 --- a/test_regress/t/t_interface_virtual_unsup.out +++ b/test_regress/t/t_interface_virtual_unsup.out @@ -11,7 +11,4 @@ %Error-UNSUPPORTED: t/t_interface_virtual_unsup.v:24:66: Unsupported: write to virtual interface in loop increment statement 24 | for (int i = 0; write_data(vif.data); i += int'(write_data(vif.data))); | ^~~ -%Error-UNSUPPORTED: t/t_interface_virtual_unsup.v:25:34: Unsupported: write to virtual interface in loop condition - 25 | for (int i = 0; write_data(vif.data++); i++); - | ^~~ %Error: Exiting due to diff --git a/test_regress/t/t_json_only_debugcheck.out b/test_regress/t/t_json_only_debugcheck.out index dd7f9d6b7..8c36a21da 100644 --- a/test_regress/t/t_json_only_debugcheck.out +++ b/test_regress/t/t_json_only_debugcheck.out @@ -879,7 +879,7 @@ "lhsp": [ {"type":"VARREF","name":"t.unnamedblk1.e","addr":"(LN)","loc":"d,52:17,52:18","dtypep":"(AC)","access":"WR","varp":"(UB)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"WHILE","name":"","addr":"(MN)","loc":"d,52:7,52:10","precondsp": [], + {"type":"WHILE","name":"","addr":"(MN)","loc":"d,52:7,52:10", "condp": [ {"type":"NEQ","name":"","addr":"(NN)","loc":"d,52:32,52:34","dtypep":"(FB)", "lhsp": [ @@ -2635,7 +2635,7 @@ "lhsp": [ {"type":"VARREF","name":"__VnbaContinue","addr":"(JMB)","loc":"d,11:8,11:9","dtypep":"(FB)","access":"WR","varp":"(DMB)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"WHILE","name":"","addr":"(KMB)","loc":"a,0:0,0:0","precondsp": [], + {"type":"WHILE","name":"","addr":"(KMB)","loc":"a,0:0,0:0", "condp": [ {"type":"VARREF","name":"__VnbaContinue","addr":"(LMB)","loc":"a,0:0,0:0","dtypep":"(FB)","access":"RD","varp":"(DMB)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], @@ -2700,7 +2700,7 @@ "lhsp": [ {"type":"VARREF","name":"__VactContinue","addr":"(LNB)","loc":"d,11:8,11:9","dtypep":"(FB)","access":"WR","varp":"(O)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"WHILE","name":"","addr":"(MNB)","loc":"a,0:0,0:0","precondsp": [], + {"type":"WHILE","name":"","addr":"(MNB)","loc":"a,0:0,0:0", "condp": [ {"type":"VARREF","name":"__VactContinue","addr":"(NNB)","loc":"a,0:0,0:0","dtypep":"(FB)","access":"RD","varp":"(O)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], diff --git a/test_regress/t/t_json_only_flat_vlvbound.out b/test_regress/t/t_json_only_flat_vlvbound.out index 906354bc8..9d1451e4e 100644 --- a/test_regress/t/t_json_only_flat_vlvbound.out +++ b/test_regress/t/t_json_only_flat_vlvbound.out @@ -85,7 +85,7 @@ "lhsp": [ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(OC)","loc":"d,18:10,18:11","dtypep":"(GB)","access":"WR","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"WHILE","name":"","addr":"(PC)","loc":"d,18:5,18:8","precondsp": [], + {"type":"WHILE","name":"","addr":"(PC)","loc":"d,18:5,18:8", "condp": [ {"type":"GTS","name":"","addr":"(QC)","loc":"d,18:18,18:19","dtypep":"(RC)", "lhsp": [ @@ -195,7 +195,7 @@ "lhsp": [ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(JE)","loc":"d,18:10,18:11","dtypep":"(GB)","access":"WR","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"WHILE","name":"","addr":"(KE)","loc":"d,18:5,18:8","precondsp": [], + {"type":"WHILE","name":"","addr":"(KE)","loc":"d,18:5,18:8", "condp": [ {"type":"GTS","name":"","addr":"(LE)","loc":"d,18:18,18:19","dtypep":"(RC)", "lhsp": [ diff --git a/test_regress/t/t_xml_debugcheck.out b/test_regress/t/t_xml_debugcheck.out index bbe0ef27b..85640c38d 100644 --- a/test_regress/t/t_xml_debugcheck.out +++ b/test_regress/t/t_xml_debugcheck.out @@ -529,8 +529,6 @@ - - @@ -1595,8 +1593,6 @@ - - @@ -1640,8 +1636,6 @@ - - diff --git a/test_regress/t/t_xml_flat_vlvbound.out b/test_regress/t/t_xml_flat_vlvbound.out index 9361e33ee..d0aaf98a7 100644 --- a/test_regress/t/t_xml_flat_vlvbound.out +++ b/test_regress/t/t_xml_flat_vlvbound.out @@ -74,8 +74,6 @@ - - @@ -142,8 +140,6 @@ - -