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