diff --git a/Changes b/Changes
index 910ed36d0..35571d7e1 100644
--- a/Changes
+++ b/Changes
@@ -16,6 +16,7 @@ Verilator 5.035 devel
* Change `--output-groups` to default to value of `--build-jobs` (#5751).
Those using build farms may need to now use `--output-groups 0` or otherwise.
* Add used language to `--preproc-resolve` output (#5795). [Kamil Rakoczy, Antmicro Ltd.]
+* Fix reset of automatic function variables (#5747). [Augustin Fabre]
Verilator 5.034 2025-02-24
diff --git a/src/V3AstNodeOther.h b/src/V3AstNodeOther.h
index 524c57bc9..684298ecb 100644
--- a/src/V3AstNodeOther.h
+++ b/src/V3AstNodeOther.h
@@ -2165,6 +2165,8 @@ public:
string verilogKwd() const override;
void lifetime(const VLifetime& flag) { m_lifetime = flag; }
VLifetime lifetime() const { return m_lifetime; }
+ void pinNum(int id) { m_pinNum = id; }
+ int pinNum() const { return m_pinNum; }
void propagateAttrFrom(const AstVar* fromp) {
// This is getting connected to fromp; keep attributes
// Note the method below too
@@ -2197,9 +2199,11 @@ public:
m_direction = VDirection::NONE;
m_name = name;
}
+ bool needsCReset() const {
+ return !isIfaceParent() && !isIfaceRef() && !noReset() && !isParam() && !isStatementTemp()
+ && !(basicp() && (basicp()->isEvent() || basicp()->isTriggerVec()));
+ }
static AstVar* scVarRecurse(AstNode* nodep);
- void pinNum(int id) { m_pinNum = id; }
- int pinNum() const { return m_pinNum; }
};
class AstVarScope final : public AstNode {
// A particular scoped usage of a variable
@@ -2740,15 +2744,22 @@ public:
class AstCReset final : public AstNodeStmt {
// Reset variable at startup
// @astgen op1 := varrefp : AstVarRef
+ const bool m_constructing; // Previously cleared by constructor
public:
- AstCReset(FileLine* fl, AstVarRef* varrefp)
- : ASTGEN_SUPER_CReset(fl) {
+ AstCReset(FileLine* fl, AstVarRef* varrefp, bool constructing)
+ : ASTGEN_SUPER_CReset(fl)
+ , m_constructing(constructing) {
this->varrefp(varrefp);
}
ASTGEN_MEMBERS_AstCReset;
+ void dump(std::ostream& str) const override;
+ void dumpJson(std::ostream& str) const override;
bool isGateOptimizable() const override { return false; }
bool isPredictOptimizable() const override { return false; }
- bool sameNode(const AstNode* /*samep*/) const override { return true; }
+ bool sameNode(const AstNode* samep) const override {
+ return constructing() == VN_DBG_AS(samep, CReset)->constructing();
+ }
+ bool constructing() const { return m_constructing; }
};
class AstCReturn final : public AstNodeStmt {
// C++ return from a function
diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp
index 9e20b8b07..251765273 100644
--- a/src/V3AstNodes.cpp
+++ b/src/V3AstNodes.cpp
@@ -327,6 +327,15 @@ AstNodeExpr* AstInsideRange::newAndFromInside(AstNodeExpr* exprp, AstNodeExpr* l
return new AstLogAnd{fileline(), ap, bp};
}
+void AstCReset::dump(std::ostream& str) const {
+ this->AstNode::dump(str);
+ if (constructing()) str << " [CONS]";
+}
+void AstCReset::dumpJson(std::ostream& str) const {
+ dumpJsonBoolFunc(str, constructing);
+ dumpJsonGen(str);
+}
+
AstVar* AstClocking::ensureEventp(bool childDType) {
if (!eventp()) {
AstVar* const evp
diff --git a/src/V3CCtors.cpp b/src/V3CCtors.cpp
index 30b5d5f69..2d0c1305d 100644
--- a/src/V3CCtors.cpp
+++ b/src/V3CCtors.cpp
@@ -179,16 +179,13 @@ class CCtorsVisitor final : public VNVisitor {
iterateChildren(nodep);
}
void visit(AstVar* nodep) override {
- if (!nodep->isIfaceParent() && !nodep->isIfaceRef() && !nodep->noReset()
- && !nodep->isParam() && !nodep->isStatementTemp()
- && !(nodep->basicp()
- && (nodep->basicp()->isEvent() || nodep->basicp()->isTriggerVec()))) {
+ if (nodep->needsCReset()) {
if (m_varResetp) {
- const auto vrefp = new AstVarRef{nodep->fileline(), nodep, VAccess::WRITE};
- m_varResetp->add(new AstCReset{nodep->fileline(), vrefp});
+ AstVarRef* const vrefp = new AstVarRef{nodep->fileline(), nodep, VAccess::WRITE};
+ m_varResetp->add(new AstCReset{nodep->fileline(), vrefp, true});
} else if (m_cfuncp) {
- const auto vrefp = new AstVarRef{nodep->fileline(), nodep, VAccess::WRITE};
- nodep->addNextHere(new AstCReset{nodep->fileline(), vrefp});
+ AstVarRef* const vrefp = new AstVarRef{nodep->fileline(), nodep, VAccess::WRITE};
+ nodep->addNextHere(new AstCReset{nodep->fileline(), vrefp, true});
}
}
}
diff --git a/src/V3EmitCFunc.cpp b/src/V3EmitCFunc.cpp
index 97335c62e..294fb3ab4 100644
--- a/src/V3EmitCFunc.cpp
+++ b/src/V3EmitCFunc.cpp
@@ -606,7 +606,8 @@ void EmitCFunc::emitSetVarConstant(const string& assignString, AstConst* constp)
puts(";\n");
}
-void EmitCFunc::emitVarReset(AstVar* varp) {
+void EmitCFunc::emitVarReset(AstVar* varp, bool constructing) {
+ // 'constructing' indicates that the object was just constructed, so no need to clear it also
AstNodeDType* const dtypep = varp->dtypep()->skipRefp();
const string varNameProtected = (VN_IS(m_modp, Class) || varp->isFuncLocal())
? varp->nameProtect()
@@ -624,6 +625,7 @@ void EmitCFunc::emitVarReset(AstVar* varp) {
emitSetVarConstant(varNameProtected + ".atDefault()",
VN_AS(initarp->defaultp(), Const));
}
+ if (!constructing) puts(varNameProtected + ".clear();");
const auto& mapr = initarp->map();
for (const auto& itr : mapr) {
AstNode* const valuep = itr.second->valuep();
@@ -635,6 +637,7 @@ void EmitCFunc::emitVarReset(AstVar* varp) {
emitSetVarConstant(varNameProtected + ".atDefault()",
VN_AS(initarp->defaultp(), Const));
}
+ if (!constructing) puts(varNameProtected + ".clear();");
const auto& mapr = initarp->map();
for (const auto& itr : mapr) {
AstNode* const valuep = itr.second->valuep();
@@ -658,25 +661,30 @@ void EmitCFunc::emitVarReset(AstVar* varp) {
varp->v3fatalSrc("InitArray under non-arrayed var");
}
} else {
- putns(varp, emitVarResetRecurse(varp, varNameProtected, dtypep, 0, ""));
+ putns(varp, emitVarResetRecurse(varp, constructing, varNameProtected, dtypep, 0, ""));
}
}
-string EmitCFunc::emitVarResetRecurse(const AstVar* varp, const string& varNameProtected,
- AstNodeDType* dtypep, int depth, const string& suffix) {
+string EmitCFunc::emitVarResetRecurse(const AstVar* varp, bool constructing,
+ const string& varNameProtected, AstNodeDType* dtypep,
+ int depth, const string& suffix) {
dtypep = dtypep->skipRefp();
AstBasicDType* const basicp = dtypep->basicp();
// Returns string to do resetting, empty to do nothing (which caller should handle)
if (AstAssocArrayDType* const adtypep = VN_CAST(dtypep, AssocArrayDType)) {
// Access std::array as C array
const string cvtarray = (adtypep->subDTypep()->isWide() ? ".data()" : "");
- return emitVarResetRecurse(varp, varNameProtected, adtypep->subDTypep(), depth + 1,
- suffix + ".atDefault()" + cvtarray);
+ const string pre = constructing ? "" : varNameProtected + suffix + ".clear();\n";
+ return pre
+ + emitVarResetRecurse(varp, constructing, varNameProtected, adtypep->subDTypep(),
+ depth + 1, suffix + ".atDefault()" + cvtarray);
} else if (AstWildcardArrayDType* const adtypep = VN_CAST(dtypep, WildcardArrayDType)) {
// Access std::array as C array
const string cvtarray = (adtypep->subDTypep()->isWide() ? ".data()" : "");
- return emitVarResetRecurse(varp, varNameProtected, adtypep->subDTypep(), depth + 1,
- suffix + ".atDefault()" + cvtarray);
+ const string pre = constructing ? "" : varNameProtected + suffix + ".clear();\n";
+ return pre
+ + emitVarResetRecurse(varp, constructing, varNameProtected, adtypep->subDTypep(),
+ depth + 1, suffix + ".atDefault()" + cvtarray);
} else if (VN_IS(dtypep, CDType)) {
return ""; // Constructor does it
} else if (VN_IS(dtypep, ClassRefDType)) {
@@ -686,13 +694,17 @@ string EmitCFunc::emitVarResetRecurse(const AstVar* varp, const string& varNameP
} else if (const AstDynArrayDType* const adtypep = VN_CAST(dtypep, DynArrayDType)) {
// Access std::array as C array
const string cvtarray = (adtypep->subDTypep()->isWide() ? ".data()" : "");
- return emitVarResetRecurse(varp, varNameProtected, adtypep->subDTypep(), depth + 1,
- suffix + ".atDefault()" + cvtarray);
+ const string pre = constructing ? "" : varNameProtected + suffix + ".clear();\n";
+ return pre
+ + emitVarResetRecurse(varp, constructing, varNameProtected, adtypep->subDTypep(),
+ depth + 1, suffix + ".atDefault()" + cvtarray);
} else if (const AstQueueDType* const adtypep = VN_CAST(dtypep, QueueDType)) {
// Access std::array as C array
const string cvtarray = (adtypep->subDTypep()->isWide() ? ".data()" : "");
- return emitVarResetRecurse(varp, varNameProtected, adtypep->subDTypep(), depth + 1,
- suffix + ".atDefault()" + cvtarray);
+ const string pre = constructing ? "" : varNameProtected + suffix + ".clear();\n";
+ return pre
+ + emitVarResetRecurse(varp, constructing, varNameProtected, adtypep->subDTypep(),
+ depth + 1, suffix + ".atDefault()" + cvtarray);
} else if (VN_IS(dtypep, SampleQueueDType)) {
return "";
} else if (const AstUnpackArrayDType* const adtypep = VN_CAST(dtypep, UnpackArrayDType)) {
@@ -701,8 +713,9 @@ string EmitCFunc::emitVarResetRecurse(const AstVar* varp, const string& varNameP
const string ivar = "__Vi"s + cvtToStr(depth);
const string pre = ("for (int " + ivar + " = " + cvtToStr(0) + "; " + ivar + " < "
+ cvtToStr(adtypep->elementsConst()) + "; ++" + ivar + ") {\n");
- const string below = emitVarResetRecurse(varp, varNameProtected, adtypep->subDTypep(),
- depth + 1, suffix + "[" + ivar + "]");
+ const string below
+ = emitVarResetRecurse(varp, constructing, varNameProtected, adtypep->subDTypep(),
+ depth + 1, suffix + "[" + ivar + "]");
const string post = "}\n";
return below.empty() ? "" : pre + below + post;
} else if (VN_IS(dtypep, NodeUOrStructDType) && !VN_AS(dtypep, NodeUOrStructDType)->packed()) {
@@ -710,15 +723,15 @@ string EmitCFunc::emitVarResetRecurse(const AstVar* varp, const string& varNameP
string literal;
for (const AstMemberDType* itemp = sdtypep->membersp(); itemp;
itemp = VN_AS(itemp->nextp(), MemberDType)) {
- const std::string line
- = emitVarResetRecurse(varp, varNameProtected + suffix + "." + itemp->nameProtect(),
- itemp->dtypep(), depth + 1, "");
+ const std::string line = emitVarResetRecurse(
+ varp, constructing, varNameProtected + suffix + "." + itemp->nameProtect(),
+ itemp->dtypep(), depth + 1, "");
if (!line.empty()) literal += line;
}
return literal;
} else if (basicp && basicp->keyword() == VBasicDTypeKwd::STRING) {
- // String's constructor deals with it
- return "";
+ if (constructing) return ""; // String's constructor deals with it
+ return varNameProtected + suffix + ".clear();\n";
} else if (basicp && basicp->isForkSync()) {
return "";
} else if (basicp && basicp->isProcessRef()) {
diff --git a/src/V3EmitCFunc.h b/src/V3EmitCFunc.h
index 00374ae1f..ac4530ea1 100644
--- a/src/V3EmitCFunc.h
+++ b/src/V3EmitCFunc.h
@@ -210,9 +210,10 @@ public:
void emitConstant(AstConst* nodep, AstVarRef* assigntop, const string& assignString);
void emitConstantString(const AstConst* nodep);
void emitSetVarConstant(const string& assignString, AstConst* constp);
- void emitVarReset(AstVar* varp);
- string emitVarResetRecurse(const AstVar* varp, const string& varNameProtected,
- AstNodeDType* dtypep, int depth, const string& suffix);
+ void emitVarReset(AstVar* varp, bool constructing);
+ string emitVarResetRecurse(const AstVar* varp, bool constructing,
+ const string& varNameProtected, AstNodeDType* dtypep, int depth,
+ const string& suffix);
void emitChangeDet();
void emitConstInit(AstNode* initp) {
// We should refactor emit to produce output into a provided buffer, not go through members
@@ -1436,7 +1437,7 @@ public:
}
void visit(AstCReset* nodep) override {
AstVar* const varp = nodep->varrefp()->varp();
- emitVarReset(varp);
+ emitVarReset(varp, nodep->constructing());
}
void visit(AstExecGraph* nodep) override {
// The location of the AstExecGraph within the containing AstCFunc is where we want to
diff --git a/src/V3Life.cpp b/src/V3Life.cpp
index 556fc23c0..22e6c7272 100644
--- a/src/V3Life.cpp
+++ b/src/V3Life.cpp
@@ -46,11 +46,13 @@ class LifeState final {
public:
VDouble0 m_statAssnDel; // Statistic tracking
VDouble0 m_statAssnCon; // Statistic tracking
+ VDouble0 m_statCResetDel; // Statistic tracking
// CONSTRUCTORS
LifeState() = default;
~LifeState() {
V3Stats::addStatSum("Optimizations, Lifetime assign deletions", m_statAssnDel);
+ V3Stats::addStatSum("Optimizations, Lifetime creset deletions", m_statCResetDel);
V3Stats::addStatSum("Optimizations, Lifetime constant prop", m_statAssnCon);
}
};
@@ -60,7 +62,7 @@ public:
class LifeVarEntry final {
// Last assignment to this varscope, nullptr if no longer relevant
- AstNodeAssign* m_assignp = nullptr;
+ AstNodeStmt* m_assignp = nullptr;
AstConst* m_constp = nullptr; // Known constant value
// First access was a set (and thus block above may have a set that can be deleted
bool m_setBeforeUse;
@@ -68,13 +70,18 @@ class LifeVarEntry final {
bool m_everSet = false;
public:
+ class CRESET {};
class SIMPLEASSIGN {};
class COMPLEXASSIGN {};
class CONSUMED {};
- LifeVarEntry(SIMPLEASSIGN, AstNodeAssign* assp)
+ LifeVarEntry(CRESET, AstCReset* nodep)
: m_setBeforeUse{true} {
- simpleAssign(assp);
+ resetStatement(nodep);
+ }
+ LifeVarEntry(SIMPLEASSIGN, AstNodeAssign* nodep)
+ : m_setBeforeUse{true} {
+ simpleAssign(nodep);
}
explicit LifeVarEntry(COMPLEXASSIGN)
: m_setBeforeUse{false} {
@@ -85,11 +92,16 @@ public:
consumed();
}
~LifeVarEntry() = default;
- void simpleAssign(AstNodeAssign* assp) { // New simple A=.... assignment
- m_assignp = assp;
+ void simpleAssign(AstNodeAssign* nodep) { // New simple A=.... assignment
+ m_assignp = nodep;
+ m_constp = nullptr;
+ m_everSet = true;
+ if (VN_IS(nodep->rhsp(), Const)) m_constp = VN_AS(nodep->rhsp(), Const);
+ }
+ void resetStatement(AstCReset* nodep) { // New CReset(A) assignment
+ m_assignp = nodep;
m_constp = nullptr;
m_everSet = true;
- if (VN_IS(assp->rhsp(), Const)) m_constp = VN_AS(assp->rhsp(), Const);
}
void complexAssign() { // A[x]=... or some complicated assignment
m_assignp = nullptr;
@@ -99,7 +111,7 @@ public:
void consumed() { // Rvalue read of A
m_assignp = nullptr;
}
- AstNodeAssign* assignp() const { return m_assignp; }
+ AstNodeStmt* assignp() const { return m_assignp; }
AstConst* constNodep() const { return m_constp; }
bool setBeforeUse() const { return m_setBeforeUse; }
bool everSet() const { return m_everSet; }
@@ -135,7 +147,7 @@ public:
// Rather than track what sigs AstUCFunc/AstUCStmt may change,
// we just don't optimize any public sigs
// Check the var entry, and remove if appropriate
- if (AstNode* const oldassp = entp->assignp()) {
+ if (AstNodeStmt* const oldassp = entp->assignp()) {
UINFO(7, " PREV: " << oldassp << endl);
// Redundant assignment, in same level block
// Don't delete it now as it will confuse iteration since it maybe WAY
@@ -143,11 +155,28 @@ public:
if (debug() > 4) oldassp->dumpTree("- REMOVE/SAMEBLK: ");
entp->complexAssign();
oldassp->unlinkFrBack();
+ if (VN_IS(oldassp, CReset)) {
+ ++m_statep->m_statCResetDel;
+ } else {
+ ++m_statep->m_statAssnDel;
+ }
VL_DO_DANGLING(m_deleter.pushDeletep(oldassp), oldassp);
- ++m_statep->m_statAssnDel;
}
}
}
+ void resetStatement(AstVarScope* nodep, AstCReset* rstp) {
+ // Do we have a old assignment we can nuke?
+ UINFO(4, " CRESETof: " << nodep << endl);
+ UINFO(7, " new: " << rstp << endl);
+ const auto pair = m_map.emplace(std::piecewise_construct, //
+ std::forward_as_tuple(nodep),
+ std::forward_as_tuple(LifeVarEntry::CRESET{}, rstp));
+ if (!pair.second) {
+ checkRemoveAssign(pair.first);
+ pair.first->second.resetStatement(rstp);
+ }
+ // lifeDump();
+ }
void simpleAssign(AstVarScope* nodep, AstNodeAssign* assp) {
// Do we have a old assignment we can nuke?
UINFO(4, " ASSIGNof: " << nodep << endl);
@@ -313,6 +342,15 @@ class LifeVisitor final : public VNVisitor {
iterateAndNextNull(nodep->lhsp());
}
}
+ void visit(AstCReset* nodep) override {
+ if (!m_noopt) {
+ AstVarScope* const vscp = nodep->varrefp()->varScopep();
+ UASSERT_OBJ(vscp, nodep, "Scope lost on variable");
+ m_lifep->resetStatement(vscp, nodep);
+ } else {
+ iterateAndNextNull(nodep->varrefp());
+ }
+ }
void visit(AstAssignDly* nodep) override {
// V3Life doesn't understand time sense
if (nodep->isTimingControl()) {
diff --git a/src/V3Task.cpp b/src/V3Task.cpp
index eb8716133..588031257 100644
--- a/src/V3Task.cpp
+++ b/src/V3Task.cpp
@@ -604,11 +604,19 @@ class TaskVisitor final : public VNVisitor {
// Any I/O variables that fell out of above loop were already linked
if (!portp->user2p()) {
// Move it to a new localized variable
- portp->unlinkFrBack();
- pushDeletep(portp); // Remove it from the clone (not original)
AstVarScope* const localVscp
= createVarScope(portp, namePrefix + "__" + portp->shortName());
portp->user2p(localVscp);
+ if (portp->needsCReset() && portp->lifetime().isAutomatic()
+ && !portp->valuep()) {
+ // Reset automatic var to its default, on each invocation of function
+ AstVarRef* const vrefp
+ = new AstVarRef{portp->fileline(), portp, VAccess::WRITE};
+ portp->replaceWith(new AstCReset{portp->fileline(), vrefp, false});
+ } else {
+ portp->unlinkFrBack();
+ }
+ pushDeletep(portp); // Remove it from the clone (not original)
}
}
}
diff --git a/test_regress/t/t_func_automatic_clear.py b/test_regress/t/t_func_automatic_clear.py
new file mode 100755
index 000000000..f989a35fb
--- /dev/null
+++ b/test_regress/t/t_func_automatic_clear.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python3
+# DESCRIPTION: Verilator: Verilog Test driver/expect definition
+#
+# Copyright 2025 by Wilson Snyder. This program is free software; you
+# can redistribute it and/or modify it under the terms of either the GNU
+# Lesser General Public License Version 3 or the Perl Artistic License
+# Version 2.0.
+# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
+
+import vltest_bootstrap
+
+test.scenarios('simulator')
+
+test.compile()
+
+test.execute()
+
+test.passes()
diff --git a/test_regress/t/t_func_automatic_clear.v b/test_regress/t/t_func_automatic_clear.v
new file mode 100644
index 000000000..4f88849e4
--- /dev/null
+++ b/test_regress/t/t_func_automatic_clear.v
@@ -0,0 +1,162 @@
+// DESCRIPTION: Verilator: Test automatic function variables lifetime
+//
+// This file ONLY is placed under the Creative Commons Public Domain, for
+// any use, without warranty, 2025 by Augustin Fabre.
+// SPDX-License-Identifier: CC0-1.0
+
+`define stop $stop
+`define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0x exp=%0x (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
+`define checks(gotv,expv) do if ((gotv) != (expv)) begin $write("%%Error: %s:%0d: got='%s' exp='%s'\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
+
+// Bug5747: Make sure that a variable with automatic storage is freshly
+// allocated when entering the function.
+
+module t();
+ function automatic int ts_queue();
+ static int qs[$];
+ qs.push_back(0);
+ // $display(" qs: %p", qs);
+ return qs.size();
+ endfunction
+
+ function automatic int t_queue();
+ int q[$];
+ q.push_back(0);
+ // $display(" q: %p", q);
+ return q.size();
+ endfunction
+
+ function automatic int t_scalar();
+ int x;
+ ++x;
+ return x;
+ endfunction
+
+ typedef struct {
+ int y;
+ } y_t;
+
+ function automatic int t_struct();
+ y_t y;
+ ++y.y;
+ return y.y;
+ endfunction
+
+ function automatic string t_string();
+ string x;
+ x = {x, "s"};
+ return x;
+ endfunction
+
+class ClsZ;
+ int z;
+endclass
+
+ function automatic int t_class();
+ ClsZ z = new();
+ ++z.z;
+ return z.z;
+ endfunction
+
+ typedef string dyn_t[];
+ function automatic dyn_t t_dyn();
+ dyn_t x;
+ x = {x, "s"};
+ return x;
+ endfunction
+
+ typedef string assoc_t[int];
+ function automatic assoc_t t_assoc();
+ static int ins = 0;
+ assoc_t x;
+ ins = ins + 1;
+ x[ins] = "s";
+ return x;
+ endfunction
+
+ typedef string wild_t[*];
+ function automatic wild_t t_wild();
+ static int ins = 0;
+ wild_t x;
+ ins = ins + 1;
+ x[ins] = "s";
+ return x;
+ endfunction
+
+ typedef int unpack_t[8];
+ function automatic unpack_t t_unpack();
+ static int ins = 0;
+ unpack_t x;
+ ins = ins + 1;
+ x[ins] = ins;
+ return x;
+ endfunction
+
+ // =======================
+
+ function automatic void main();
+ for (int i = 0; i < 3; ++i) begin
+ int qn = ts_queue();
+ int qo = ts_queue();
+ `checkh(qn, i * 2 + 1);
+ `checkh(qo, i * 2 + 2);
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ int qn = t_queue();
+ `checkh(qn, 1);
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ int x = t_scalar();
+ `checkh(x, 1);
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ int y = t_struct();
+ `checkh(y, 1);
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ int z = t_class();
+ `checkh(z, 1);
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ string z = t_string();
+ `checks(z, "s");
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ dyn_t z = t_dyn();
+ `checkh(z.size(), 1);
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ assoc_t z = t_assoc();
+ `checkh(z.size(), 1);
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ wild_t z = t_wild();
+ `checkh(z.size(), 1);
+ end
+
+ for (int i = 0; i < 3; ++i) begin
+ int cnt;
+ unpack_t z = t_unpack();
+ cnt = 0;
+ for (int j = 0; j < $high(z); ++j) begin
+ if (z[j] != 0) cnt = cnt + 1;
+ end
+ `checkh(cnt, 1);
+ end
+
+ endfunction
+
+ initial begin
+ main();
+ $write("*-* All Finished *-*\n");
+ $finish;
+ end
+endmodule
diff --git a/test_regress/t/t_json_only_debugcheck.out b/test_regress/t/t_json_only_debugcheck.out
index d8f2eeb9a..343d19495 100644
--- a/test_regress/t/t_json_only_debugcheck.out
+++ b/test_regress/t/t_json_only_debugcheck.out
@@ -49,12 +49,12 @@
{"type":"CFUNC","name":"_eval_initial__TOP","addr":"(LB)","loc":"d,11:8,11:9","slow":true,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"(Y)","argsp": [],
"initsp": [
{"type":"VAR","name":"t.all","addr":"(QB)","loc":"d,28:11,28:14","dtypep":"(RB)","origName":"t__DOT__all","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"VAR","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []},
- {"type":"CRESET","name":"","addr":"(SB)","loc":"d,28:11,28:14",
+ {"type":"CRESET","name":"","addr":"(SB)","loc":"d,28:11,28:14","constructing":true,
"varrefp": [
{"type":"VARREF","name":"t.all","addr":"(TB)","loc":"d,28:11,28:14","dtypep":"(RB)","access":"WR","varp":"(QB)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
{"type":"VAR","name":"t.unnamedblk1.e","addr":"(UB)","loc":"d,52:17,52:18","dtypep":"(VB)","origName":"t__DOT__unnamedblk1__DOT__e","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"VAR","dtypeName":"my_t","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []},
- {"type":"CRESET","name":"","addr":"(WB)","loc":"d,52:17,52:18",
+ {"type":"CRESET","name":"","addr":"(WB)","loc":"d,52:17,52:18","constructing":true,
"varrefp": [
{"type":"VARREF","name":"t.unnamedblk1.e","addr":"(XB)","loc":"d,52:17,52:18","dtypep":"(VB)","access":"WR","varp":"(UB)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
@@ -1147,12 +1147,12 @@
{"type":"CFUNC","name":"_nba_sequent__TOP__0","addr":"(LR)","loc":"d,23:17,23:20","slow":false,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"(Y)","argsp": [],
"initsp": [
{"type":"VAR","name":"__Vdly__t.cyc","addr":"(MR)","loc":"d,23:17,23:20","dtypep":"(R)","origName":"__Vdly__t__DOT__cyc","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"BLOCKTEMP","dtypeName":"integer","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []},
- {"type":"CRESET","name":"","addr":"(NR)","loc":"d,23:17,23:20",
+ {"type":"CRESET","name":"","addr":"(NR)","loc":"d,23:17,23:20","constructing":true,
"varrefp": [
{"type":"VARREF","name":"__Vdly__t.cyc","addr":"(OR)","loc":"d,23:17,23:20","dtypep":"(R)","access":"WR","varp":"(MR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
{"type":"VAR","name":"__Vdly__t.e","addr":"(PR)","loc":"d,24:9,24:10","dtypep":"(M)","origName":"__Vdly__t__DOT__e","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"BLOCKTEMP","dtypeName":"my_t","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []},
- {"type":"CRESET","name":"","addr":"(QR)","loc":"d,24:9,24:10",
+ {"type":"CRESET","name":"","addr":"(QR)","loc":"d,24:9,24:10","constructing":true,
"varrefp": [
{"type":"VARREF","name":"__Vdly__t.e","addr":"(RR)","loc":"d,24:9,24:10","dtypep":"(M)","access":"WR","varp":"(PR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
@@ -2801,19 +2801,19 @@
],"finalsp": []},
{"type":"CFUNC","name":"_ctor_var_reset","addr":"(APB)","loc":"d,11:8,11:9","slow":true,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"UNLINKED","argsp": [],"initsp": [],
"stmtsp": [
- {"type":"CRESET","name":"","addr":"(BPB)","loc":"d,15:10,15:13",
+ {"type":"CRESET","name":"","addr":"(BPB)","loc":"d,15:10,15:13","constructing":true,
"varrefp": [
{"type":"VARREF","name":"clk","addr":"(CPB)","loc":"d,15:10,15:13","dtypep":"(K)","access":"WR","varp":"(J)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
- {"type":"CRESET","name":"","addr":"(DPB)","loc":"d,23:17,23:20",
+ {"type":"CRESET","name":"","addr":"(DPB)","loc":"d,23:17,23:20","constructing":true,
"varrefp": [
{"type":"VARREF","name":"t.cyc","addr":"(EPB)","loc":"d,23:17,23:20","dtypep":"(R)","access":"WR","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
- {"type":"CRESET","name":"","addr":"(FPB)","loc":"d,24:9,24:10",
+ {"type":"CRESET","name":"","addr":"(FPB)","loc":"d,24:9,24:10","constructing":true,
"varrefp": [
{"type":"VARREF","name":"t.e","addr":"(GPB)","loc":"d,24:9,24:10","dtypep":"(M)","access":"WR","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
- {"type":"CRESET","name":"","addr":"(HPB)","loc":"d,11:8,11:9",
+ {"type":"CRESET","name":"","addr":"(HPB)","loc":"d,11:8,11:9","constructing":true,
"varrefp": [
{"type":"VARREF","name":"__Vtrigprevexpr___TOP__clk__0","addr":"(IPB)","loc":"d,11:8,11:9","dtypep":"(K)","access":"WR","varp":"(N)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]}
@@ -2888,15 +2888,15 @@
{"type":"SCOPE","name":"$unit","addr":"(IQB)","loc":"a,0:0,0:0","aboveScopep":"(Y)","aboveCellp":"(X)","modp":"(E)","varsp": [],"blocksp": [],"inlinesp": []},
{"type":"CFUNC","name":"_ctor_var_reset","addr":"(JQB)","loc":"a,0:0,0:0","slow":true,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"UNLINKED","argsp": [],"initsp": [],
"stmtsp": [
- {"type":"CRESET","name":"","addr":"(KQB)","loc":"d,17:12,17:16",
+ {"type":"CRESET","name":"","addr":"(KQB)","loc":"d,17:12,17:16","constructing":true,
"varrefp": [
{"type":"VARREF","name":"__Venumtab_enum_next1","addr":"(LQB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"WR","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
- {"type":"CRESET","name":"","addr":"(MQB)","loc":"d,17:12,17:16",
+ {"type":"CRESET","name":"","addr":"(MQB)","loc":"d,17:12,17:16","constructing":true,
"varrefp": [
{"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(NQB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"WR","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"}
]},
- {"type":"CRESET","name":"","addr":"(OQB)","loc":"d,17:12,17:16",
+ {"type":"CRESET","name":"","addr":"(OQB)","loc":"d,17:12,17:16","constructing":true,
"varrefp": [
{"type":"VARREF","name":"__Venumtab_enum_name1","addr":"(PQB)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"WR","varp":"(PM)","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 9745e13a3..2214aa2e9 100644
--- a/test_regress/t/t_json_only_flat_vlvbound.out
+++ b/test_regress/t/t_json_only_flat_vlvbound.out
@@ -70,222 +70,238 @@
"lhsp": [
{"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__val","addr":"(GC)","loc":"d,15:57,15:60","dtypep":"(H)","access":"WR","varp":"(CB)","varScopep":"(BB)","classOrPackagep":"UNLINKED"}
],"timingControlp": []},
- {"type":"ASSIGN","name":"","addr":"(HC)","loc":"d,18:11,18:12","dtypep":"(GB)",
+ {"type":"CRESET","name":"","addr":"(HC)","loc":"d,16:17,16:20","constructing":false,
+ "varrefp": [
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(IC)","loc":"d,16:17,16:20","dtypep":"(K)","access":"WR","varp":"(EB)","varScopep":"(DB)","classOrPackagep":"UNLINKED"}
+ ]},
+ {"type":"CRESET","name":"","addr":"(JC)","loc":"d,17:13,17:14","constructing":false,
+ "varrefp": [
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(KC)","loc":"d,17:13,17:14","dtypep":"(GB)","access":"WR","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
+ ]},
+ {"type":"ASSIGN","name":"","addr":"(LC)","loc":"d,18:11,18:12","dtypep":"(GB)",
"rhsp": [
- {"type":"CONST","name":"32'sh0","addr":"(IC)","loc":"d,18:12,18:13","dtypep":"(JC)"}
+ {"type":"CONST","name":"32'sh0","addr":"(MC)","loc":"d,18:12,18:13","dtypep":"(NC)"}
],
"lhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(KC)","loc":"d,18:10,18:11","dtypep":"(GB)","access":"WR","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
+ {"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":"(LC)","loc":"d,18:5,18:8","precondsp": [],
+ {"type":"WHILE","name":"","addr":"(PC)","loc":"d,18:5,18:8","precondsp": [],
"condp": [
- {"type":"GTS","name":"","addr":"(MC)","loc":"d,18:18,18:19","dtypep":"(NC)",
+ {"type":"GTS","name":"","addr":"(QC)","loc":"d,18:18,18:19","dtypep":"(RC)",
"lhsp": [
- {"type":"CONST","name":"32'sh7","addr":"(OC)","loc":"d,18:20,18:21","dtypep":"(JC)"}
+ {"type":"CONST","name":"32'sh7","addr":"(SC)","loc":"d,18:20,18:21","dtypep":"(NC)"}
],
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(PC)","loc":"d,18:16,18:17","dtypep":"(GB)","access":"RD","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(TC)","loc":"d,18:16,18:17","dtypep":"(GB)","access":"RD","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
]}
],
"stmtsp": [
- {"type":"ASSIGN","name":"","addr":"(QC)","loc":"d,19:14,19:15","dtypep":"(NC)",
+ {"type":"ASSIGN","name":"","addr":"(UC)","loc":"d,19:14,19:15","dtypep":"(RC)",
"rhsp": [
- {"type":"EQ","name":"","addr":"(RC)","loc":"d,19:31,19:33","dtypep":"(NC)",
+ {"type":"EQ","name":"","addr":"(VC)","loc":"d,19:31,19:33","dtypep":"(RC)",
"lhsp": [
- {"type":"CONST","name":"2'h0","addr":"(SC)","loc":"d,19:34,19:39","dtypep":"(TC)"}
+ {"type":"CONST","name":"2'h0","addr":"(WC)","loc":"d,19:34,19:39","dtypep":"(XC)"}
],
"rhsp": [
- {"type":"SEL","name":"","addr":"(UC)","loc":"d,19:20,19:21","dtypep":"(TC)","declRange":"[15:0]","declElWidth":1,
+ {"type":"SEL","name":"","addr":"(YC)","loc":"d,19:20,19:21","dtypep":"(XC)","declRange":"[15:0]","declElWidth":1,
"fromp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__val","addr":"(VC)","loc":"d,19:17,19:20","dtypep":"(H)","access":"RD","varp":"(CB)","varScopep":"(BB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__val","addr":"(ZC)","loc":"d,19:17,19:20","dtypep":"(H)","access":"RD","varp":"(CB)","varScopep":"(BB)","classOrPackagep":"UNLINKED"}
],
"lsbp": [
- {"type":"SEL","name":"","addr":"(WC)","loc":"d,19:22,19:23","dtypep":"(XC)",
+ {"type":"SEL","name":"","addr":"(AD)","loc":"d,19:22,19:23","dtypep":"(BD)",
"fromp": [
- {"type":"MULS","name":"","addr":"(YC)","loc":"d,19:22,19:23","dtypep":"(JC)",
+ {"type":"MULS","name":"","addr":"(CD)","loc":"d,19:22,19:23","dtypep":"(NC)",
"lhsp": [
- {"type":"CONST","name":"32'sh2","addr":"(ZC)","loc":"d,19:23,19:24","dtypep":"(JC)"}
+ {"type":"CONST","name":"32'sh2","addr":"(DD)","loc":"d,19:23,19:24","dtypep":"(NC)"}
],
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(AD)","loc":"d,19:21,19:22","dtypep":"(GB)","access":"RD","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(ED)","loc":"d,19:21,19:22","dtypep":"(GB)","access":"RD","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
]}
],
"lsbp": [
- {"type":"CONST","name":"32'h0","addr":"(BD)","loc":"d,19:22,19:23","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h0","addr":"(FD)","loc":"d,19:22,19:23","dtypep":"(GD)"}
],
"widthp": [
- {"type":"CONST","name":"32'h4","addr":"(DD)","loc":"d,19:22,19:23","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h4","addr":"(HD)","loc":"d,19:22,19:23","dtypep":"(GD)"}
]}
],
"widthp": [
- {"type":"CONST","name":"32'sh2","addr":"(ED)","loc":"d,19:28,19:29","dtypep":"(JC)"}
+ {"type":"CONST","name":"32'sh2","addr":"(ID)","loc":"d,19:28,19:29","dtypep":"(NC)"}
]}
]}
],
"lhsp": [
- {"type":"SEL","name":"","addr":"(FD)","loc":"d,19:10,19:11","dtypep":"(NC)","declRange":"[6:0]","declElWidth":1,
+ {"type":"SEL","name":"","addr":"(JD)","loc":"d,19:10,19:11","dtypep":"(RC)","declRange":"[6:0]","declElWidth":1,
"fromp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(GD)","loc":"d,19:7,19:10","dtypep":"(K)","access":"WR","varp":"(EB)","varScopep":"(DB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(KD)","loc":"d,19:7,19:10","dtypep":"(K)","access":"WR","varp":"(EB)","varScopep":"(DB)","classOrPackagep":"UNLINKED"}
],
"lsbp": [
- {"type":"SEL","name":"","addr":"(HD)","loc":"d,19:11,19:12","dtypep":"(ID)",
+ {"type":"SEL","name":"","addr":"(LD)","loc":"d,19:11,19:12","dtypep":"(MD)",
"fromp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(JD)","loc":"d,19:11,19:12","dtypep":"(GB)","access":"RD","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(ND)","loc":"d,19:11,19:12","dtypep":"(GB)","access":"RD","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
],
"lsbp": [
- {"type":"CONST","name":"32'h0","addr":"(KD)","loc":"d,19:11,19:12","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h0","addr":"(OD)","loc":"d,19:11,19:12","dtypep":"(GD)"}
],
"widthp": [
- {"type":"CONST","name":"32'h3","addr":"(LD)","loc":"d,19:11,19:12","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h3","addr":"(PD)","loc":"d,19:11,19:12","dtypep":"(GD)"}
]}
],
"widthp": [
- {"type":"CONST","name":"32'h1","addr":"(MD)","loc":"d,19:10,19:11","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h1","addr":"(QD)","loc":"d,19:10,19:11","dtypep":"(GD)"}
]}
],"timingControlp": []}
],
"incsp": [
- {"type":"ASSIGN","name":"","addr":"(ND)","loc":"d,18:24,18:26","dtypep":"(GB)",
+ {"type":"ASSIGN","name":"","addr":"(RD)","loc":"d,18:24,18:26","dtypep":"(GB)",
"rhsp": [
- {"type":"ADD","name":"","addr":"(OD)","loc":"d,18:24,18:26","dtypep":"(CD)",
+ {"type":"ADD","name":"","addr":"(SD)","loc":"d,18:24,18:26","dtypep":"(GD)",
"lhsp": [
- {"type":"CONST","name":"32'h1","addr":"(PD)","loc":"d,18:24,18:26","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h1","addr":"(TD)","loc":"d,18:24,18:26","dtypep":"(GD)"}
],
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(QD)","loc":"d,18:23,18:24","dtypep":"(GB)","access":"RD","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(UD)","loc":"d,18:23,18:24","dtypep":"(GB)","access":"RD","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
]}
],
"lhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(RD)","loc":"d,18:23,18:24","dtypep":"(GB)","access":"WR","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(VD)","loc":"d,18:23,18:24","dtypep":"(GB)","access":"WR","varp":"(HB)","varScopep":"(FB)","classOrPackagep":"UNLINKED"}
],"timingControlp": []}
]},
- {"type":"ASSIGN","name":"","addr":"(SD)","loc":"d,21:5,21:11","dtypep":"(K)",
+ {"type":"ASSIGN","name":"","addr":"(WD)","loc":"d,21:5,21:11","dtypep":"(K)",
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(TD)","loc":"d,21:12,21:15","dtypep":"(K)","access":"RD","varp":"(EB)","varScopep":"(DB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(XD)","loc":"d,21:12,21:15","dtypep":"(K)","access":"RD","varp":"(EB)","varScopep":"(DB)","classOrPackagep":"UNLINKED"}
],
"lhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(UD)","loc":"d,21:5,21:11","dtypep":"(K)","access":"WR","varp":"(AB)","varScopep":"(Z)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(YD)","loc":"d,21:5,21:11","dtypep":"(K)","access":"WR","varp":"(AB)","varScopep":"(Z)","classOrPackagep":"UNLINKED"}
],"timingControlp": []},
- {"type":"ASSIGN","name":"","addr":"(VD)","loc":"d,24:14,24:15","dtypep":"(K)",
+ {"type":"ASSIGN","name":"","addr":"(ZD)","loc":"d,24:14,24:15","dtypep":"(K)",
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(WD)","loc":"d,24:16,24:19","dtypep":"(K)","access":"RD","varp":"(AB)","varScopep":"(Z)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(AE)","loc":"d,24:16,24:19","dtypep":"(K)","access":"RD","varp":"(AB)","varScopep":"(Z)","classOrPackagep":"UNLINKED"}
],
"lhsp": [
- {"type":"VARREF","name":"o_a","addr":"(XD)","loc":"d,24:10,24:13","dtypep":"(K)","access":"WR","varp":"(J)","varScopep":"(T)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"o_a","addr":"(BE)","loc":"d,24:10,24:13","dtypep":"(K)","access":"WR","varp":"(J)","varScopep":"(T)","classOrPackagep":"UNLINKED"}
],"timingControlp": []}
]},
- {"type":"ALWAYS","name":"","addr":"(YD)","loc":"d,25:14,25:15","keyword":"always","isSuspendable":false,"needProcess":false,"sensesp": [],
+ {"type":"ALWAYS","name":"","addr":"(CE)","loc":"d,25:14,25:15","keyword":"always","isSuspendable":false,"needProcess":false,"sensesp": [],
"stmtsp": [
- {"type":"COMMENT","name":"Function: foo","addr":"(ZD)","loc":"d,25:16,25:19"},
- {"type":"ASSIGN","name":"","addr":"(AE)","loc":"d,25:20,25:23","dtypep":"(H)",
+ {"type":"COMMENT","name":"Function: foo","addr":"(DE)","loc":"d,25:16,25:19"},
+ {"type":"ASSIGN","name":"","addr":"(EE)","loc":"d,25:20,25:23","dtypep":"(H)",
"rhsp": [
- {"type":"VARREF","name":"i_b","addr":"(BE)","loc":"d,25:20,25:23","dtypep":"(H)","access":"RD","varp":"(I)","varScopep":"(S)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"i_b","addr":"(FE)","loc":"d,25:20,25:23","dtypep":"(H)","access":"RD","varp":"(I)","varScopep":"(S)","classOrPackagep":"UNLINKED"}
],
"lhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__val","addr":"(CE)","loc":"d,15:57,15:60","dtypep":"(H)","access":"WR","varp":"(LB)","varScopep":"(KB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__val","addr":"(GE)","loc":"d,15:57,15:60","dtypep":"(H)","access":"WR","varp":"(LB)","varScopep":"(KB)","classOrPackagep":"UNLINKED"}
],"timingControlp": []},
- {"type":"ASSIGN","name":"","addr":"(DE)","loc":"d,18:11,18:12","dtypep":"(GB)",
+ {"type":"CRESET","name":"","addr":"(HE)","loc":"d,16:17,16:20","constructing":false,
+ "varrefp": [
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(IE)","loc":"d,16:17,16:20","dtypep":"(K)","access":"WR","varp":"(NB)","varScopep":"(MB)","classOrPackagep":"UNLINKED"}
+ ]},
+ {"type":"CRESET","name":"","addr":"(JE)","loc":"d,17:13,17:14","constructing":false,
+ "varrefp": [
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(KE)","loc":"d,17:13,17:14","dtypep":"(GB)","access":"WR","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
+ ]},
+ {"type":"ASSIGN","name":"","addr":"(LE)","loc":"d,18:11,18:12","dtypep":"(GB)",
"rhsp": [
- {"type":"CONST","name":"32'sh0","addr":"(EE)","loc":"d,18:12,18:13","dtypep":"(JC)"}
+ {"type":"CONST","name":"32'sh0","addr":"(ME)","loc":"d,18:12,18:13","dtypep":"(NC)"}
],
"lhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(FE)","loc":"d,18:10,18:11","dtypep":"(GB)","access":"WR","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(NE)","loc":"d,18:10,18:11","dtypep":"(GB)","access":"WR","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
],"timingControlp": []},
- {"type":"WHILE","name":"","addr":"(GE)","loc":"d,18:5,18:8","precondsp": [],
+ {"type":"WHILE","name":"","addr":"(OE)","loc":"d,18:5,18:8","precondsp": [],
"condp": [
- {"type":"GTS","name":"","addr":"(HE)","loc":"d,18:18,18:19","dtypep":"(NC)",
+ {"type":"GTS","name":"","addr":"(PE)","loc":"d,18:18,18:19","dtypep":"(RC)",
"lhsp": [
- {"type":"CONST","name":"32'sh7","addr":"(IE)","loc":"d,18:20,18:21","dtypep":"(JC)"}
+ {"type":"CONST","name":"32'sh7","addr":"(QE)","loc":"d,18:20,18:21","dtypep":"(NC)"}
],
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(JE)","loc":"d,18:16,18:17","dtypep":"(GB)","access":"RD","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(RE)","loc":"d,18:16,18:17","dtypep":"(GB)","access":"RD","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
]}
],
"stmtsp": [
- {"type":"ASSIGN","name":"","addr":"(KE)","loc":"d,19:14,19:15","dtypep":"(NC)",
+ {"type":"ASSIGN","name":"","addr":"(SE)","loc":"d,19:14,19:15","dtypep":"(RC)",
"rhsp": [
- {"type":"EQ","name":"","addr":"(LE)","loc":"d,19:31,19:33","dtypep":"(NC)",
+ {"type":"EQ","name":"","addr":"(TE)","loc":"d,19:31,19:33","dtypep":"(RC)",
"lhsp": [
- {"type":"CONST","name":"2'h0","addr":"(ME)","loc":"d,19:34,19:39","dtypep":"(TC)"}
+ {"type":"CONST","name":"2'h0","addr":"(UE)","loc":"d,19:34,19:39","dtypep":"(XC)"}
],
"rhsp": [
- {"type":"SEL","name":"","addr":"(NE)","loc":"d,19:20,19:21","dtypep":"(TC)","declRange":"[15:0]","declElWidth":1,
+ {"type":"SEL","name":"","addr":"(VE)","loc":"d,19:20,19:21","dtypep":"(XC)","declRange":"[15:0]","declElWidth":1,
"fromp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__val","addr":"(OE)","loc":"d,19:17,19:20","dtypep":"(H)","access":"RD","varp":"(LB)","varScopep":"(KB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__val","addr":"(WE)","loc":"d,19:17,19:20","dtypep":"(H)","access":"RD","varp":"(LB)","varScopep":"(KB)","classOrPackagep":"UNLINKED"}
],
"lsbp": [
- {"type":"SEL","name":"","addr":"(PE)","loc":"d,19:22,19:23","dtypep":"(XC)",
+ {"type":"SEL","name":"","addr":"(XE)","loc":"d,19:22,19:23","dtypep":"(BD)",
"fromp": [
- {"type":"MULS","name":"","addr":"(QE)","loc":"d,19:22,19:23","dtypep":"(JC)",
+ {"type":"MULS","name":"","addr":"(YE)","loc":"d,19:22,19:23","dtypep":"(NC)",
"lhsp": [
- {"type":"CONST","name":"32'sh2","addr":"(RE)","loc":"d,19:23,19:24","dtypep":"(JC)"}
+ {"type":"CONST","name":"32'sh2","addr":"(ZE)","loc":"d,19:23,19:24","dtypep":"(NC)"}
],
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(SE)","loc":"d,19:21,19:22","dtypep":"(GB)","access":"RD","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(AF)","loc":"d,19:21,19:22","dtypep":"(GB)","access":"RD","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
]}
],
"lsbp": [
- {"type":"CONST","name":"32'h0","addr":"(TE)","loc":"d,19:22,19:23","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h0","addr":"(BF)","loc":"d,19:22,19:23","dtypep":"(GD)"}
],
"widthp": [
- {"type":"CONST","name":"32'h4","addr":"(UE)","loc":"d,19:22,19:23","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h4","addr":"(CF)","loc":"d,19:22,19:23","dtypep":"(GD)"}
]}
],
"widthp": [
- {"type":"CONST","name":"32'sh2","addr":"(VE)","loc":"d,19:28,19:29","dtypep":"(JC)"}
+ {"type":"CONST","name":"32'sh2","addr":"(DF)","loc":"d,19:28,19:29","dtypep":"(NC)"}
]}
]}
],
"lhsp": [
- {"type":"SEL","name":"","addr":"(WE)","loc":"d,19:10,19:11","dtypep":"(NC)","declRange":"[6:0]","declElWidth":1,
+ {"type":"SEL","name":"","addr":"(EF)","loc":"d,19:10,19:11","dtypep":"(RC)","declRange":"[6:0]","declElWidth":1,
"fromp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(XE)","loc":"d,19:7,19:10","dtypep":"(K)","access":"WR","varp":"(NB)","varScopep":"(MB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(FF)","loc":"d,19:7,19:10","dtypep":"(K)","access":"WR","varp":"(NB)","varScopep":"(MB)","classOrPackagep":"UNLINKED"}
],
"lsbp": [
- {"type":"SEL","name":"","addr":"(YE)","loc":"d,19:11,19:12","dtypep":"(ID)",
+ {"type":"SEL","name":"","addr":"(GF)","loc":"d,19:11,19:12","dtypep":"(MD)",
"fromp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(ZE)","loc":"d,19:11,19:12","dtypep":"(GB)","access":"RD","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(HF)","loc":"d,19:11,19:12","dtypep":"(GB)","access":"RD","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
],
"lsbp": [
- {"type":"CONST","name":"32'h0","addr":"(AF)","loc":"d,19:11,19:12","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h0","addr":"(IF)","loc":"d,19:11,19:12","dtypep":"(GD)"}
],
"widthp": [
- {"type":"CONST","name":"32'h3","addr":"(BF)","loc":"d,19:11,19:12","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h3","addr":"(JF)","loc":"d,19:11,19:12","dtypep":"(GD)"}
]}
],
"widthp": [
- {"type":"CONST","name":"32'h1","addr":"(CF)","loc":"d,19:10,19:11","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h1","addr":"(KF)","loc":"d,19:10,19:11","dtypep":"(GD)"}
]}
],"timingControlp": []}
],
"incsp": [
- {"type":"ASSIGN","name":"","addr":"(DF)","loc":"d,18:24,18:26","dtypep":"(GB)",
+ {"type":"ASSIGN","name":"","addr":"(LF)","loc":"d,18:24,18:26","dtypep":"(GB)",
"rhsp": [
- {"type":"ADD","name":"","addr":"(EF)","loc":"d,18:24,18:26","dtypep":"(CD)",
+ {"type":"ADD","name":"","addr":"(MF)","loc":"d,18:24,18:26","dtypep":"(GD)",
"lhsp": [
- {"type":"CONST","name":"32'h1","addr":"(FF)","loc":"d,18:24,18:26","dtypep":"(CD)"}
+ {"type":"CONST","name":"32'h1","addr":"(NF)","loc":"d,18:24,18:26","dtypep":"(GD)"}
],
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(GF)","loc":"d,18:23,18:24","dtypep":"(GB)","access":"RD","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(OF)","loc":"d,18:23,18:24","dtypep":"(GB)","access":"RD","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
]}
],
"lhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(HF)","loc":"d,18:23,18:24","dtypep":"(GB)","access":"WR","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(PF)","loc":"d,18:23,18:24","dtypep":"(GB)","access":"WR","varp":"(PB)","varScopep":"(OB)","classOrPackagep":"UNLINKED"}
],"timingControlp": []}
]},
- {"type":"ASSIGN","name":"","addr":"(IF)","loc":"d,21:5,21:11","dtypep":"(K)",
+ {"type":"ASSIGN","name":"","addr":"(QF)","loc":"d,21:5,21:11","dtypep":"(K)",
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(JF)","loc":"d,21:12,21:15","dtypep":"(K)","access":"RD","varp":"(NB)","varScopep":"(MB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(RF)","loc":"d,21:12,21:15","dtypep":"(K)","access":"RD","varp":"(NB)","varScopep":"(MB)","classOrPackagep":"UNLINKED"}
],
"lhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(KF)","loc":"d,21:5,21:11","dtypep":"(K)","access":"WR","varp":"(JB)","varScopep":"(IB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(SF)","loc":"d,21:5,21:11","dtypep":"(K)","access":"WR","varp":"(JB)","varScopep":"(IB)","classOrPackagep":"UNLINKED"}
],"timingControlp": []},
- {"type":"ASSIGN","name":"","addr":"(LF)","loc":"d,25:14,25:15","dtypep":"(K)",
+ {"type":"ASSIGN","name":"","addr":"(TF)","loc":"d,25:14,25:15","dtypep":"(K)",
"rhsp": [
- {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(MF)","loc":"d,25:16,25:19","dtypep":"(K)","access":"RD","varp":"(JB)","varScopep":"(IB)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(UF)","loc":"d,25:16,25:19","dtypep":"(K)","access":"RD","varp":"(JB)","varScopep":"(IB)","classOrPackagep":"UNLINKED"}
],
"lhsp": [
- {"type":"VARREF","name":"o_b","addr":"(NF)","loc":"d,25:10,25:13","dtypep":"(K)","access":"WR","varp":"(L)","varScopep":"(U)","classOrPackagep":"UNLINKED"}
+ {"type":"VARREF","name":"o_b","addr":"(VF)","loc":"d,25:10,25:13","dtypep":"(K)","access":"WR","varp":"(L)","varScopep":"(U)","classOrPackagep":"UNLINKED"}
],"timingControlp": []}
]}
],"inlinesp": []}
@@ -303,21 +319,21 @@
"miscsp": [
{"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"UNLINKED",
"typesp": [
- {"type":"BASICDTYPE","name":"logic","addr":"(NC)","loc":"d,18:18,18:19","dtypep":"(NC)","keyword":"logic","generic":true,"rangep": []},
- {"type":"BASICDTYPE","name":"logic","addr":"(TC)","loc":"d,19:34,19:39","dtypep":"(TC)","keyword":"logic","range":"1:0","generic":true,"rangep": []},
+ {"type":"BASICDTYPE","name":"logic","addr":"(RC)","loc":"d,18:18,18:19","dtypep":"(RC)","keyword":"logic","generic":true,"rangep": []},
+ {"type":"BASICDTYPE","name":"logic","addr":"(XC)","loc":"d,19:34,19:39","dtypep":"(XC)","keyword":"logic","range":"1:0","generic":true,"rangep": []},
{"type":"BASICDTYPE","name":"logic","addr":"(H)","loc":"d,9:11,9:16","dtypep":"(H)","keyword":"logic","range":"15:0","generic":true,"rangep": []},
{"type":"BASICDTYPE","name":"logic","addr":"(K)","loc":"d,11:12,11:17","dtypep":"(K)","keyword":"logic","range":"6:0","generic":true,"rangep": []},
{"type":"BASICDTYPE","name":"integer","addr":"(GB)","loc":"d,17:5,17:12","dtypep":"(GB)","keyword":"integer","range":"31:0","generic":true,"rangep": []},
- {"type":"BASICDTYPE","name":"logic","addr":"(ID)","loc":"d,19:10,19:11","dtypep":"(ID)","keyword":"logic","range":"2:0","generic":true,"rangep": []},
- {"type":"BASICDTYPE","name":"logic","addr":"(CD)","loc":"d,19:11,19:12","dtypep":"(CD)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
- {"type":"BASICDTYPE","name":"logic","addr":"(XC)","loc":"d,19:20,19:21","dtypep":"(XC)","keyword":"logic","range":"3:0","generic":true,"rangep": []},
- {"type":"BASICDTYPE","name":"logic","addr":"(JC)","loc":"d,18:12,18:13","dtypep":"(JC)","keyword":"logic","range":"31:0","generic":true,"rangep": []}
+ {"type":"BASICDTYPE","name":"logic","addr":"(MD)","loc":"d,19:10,19:11","dtypep":"(MD)","keyword":"logic","range":"2:0","generic":true,"rangep": []},
+ {"type":"BASICDTYPE","name":"logic","addr":"(GD)","loc":"d,19:11,19:12","dtypep":"(GD)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
+ {"type":"BASICDTYPE","name":"logic","addr":"(BD)","loc":"d,19:20,19:21","dtypep":"(BD)","keyword":"logic","range":"3:0","generic":true,"rangep": []},
+ {"type":"BASICDTYPE","name":"logic","addr":"(NC)","loc":"d,18:12,18:13","dtypep":"(NC)","keyword":"logic","range":"31:0","generic":true,"rangep": []}
]},
{"type":"CONSTPOOL","name":"","addr":"(D)","loc":"a,0:0,0:0",
"modulep": [
- {"type":"MODULE","name":"@CONST-POOL@","addr":"(OF)","loc":"a,0:0,0:0","origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [],
+ {"type":"MODULE","name":"@CONST-POOL@","addr":"(WF)","loc":"a,0:0,0:0","origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [],
"stmtsp": [
- {"type":"SCOPE","name":"@CONST-POOL@","addr":"(PF)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(OF)","varsp": [],"blocksp": [],"inlinesp": []}
+ {"type":"SCOPE","name":"@CONST-POOL@","addr":"(XF)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(WF)","varsp": [],"blocksp": [],"inlinesp": []}
],"activesp": []}
]}
]}
diff --git a/test_regress/t/t_var_life.py b/test_regress/t/t_var_life.py
index 09d396a1b..235481a3b 100755
--- a/test_regress/t/t_var_life.py
+++ b/test_regress/t/t_var_life.py
@@ -15,7 +15,8 @@ test.compile(verilator_flags2=["--stats"])
if test.vlt_all:
test.file_grep(test.stats, r'Optimizations, Lifetime assign deletions\s+(\d+)', 4)
- test.file_grep(test.stats, r'Optimizations, Lifetime constant prop\s+(\d+)', 2)
+ test.file_grep(test.stats, r'Optimizations, Lifetime creset deletions\s+(\d+)', 1)
+ test.file_grep(test.stats, r'Optimizations, Lifetime constant prop\s+(\d+)', 5)
test.execute()
diff --git a/test_regress/t/t_var_life.v b/test_regress/t/t_var_life.v
index 2ec1c4d7d..d6aa4e605 100644
--- a/test_regress/t/t_var_life.v
+++ b/test_regress/t/t_var_life.v
@@ -40,6 +40,13 @@ module t (/*AUTOARG*/
endcase
end
+ // Remove CResets
+ function int f(int in);
+ automatic int aut;
+ aut = in;
+ return aut;
+ endfunction
+
always @ (posedge clk) begin
if (cyc!=0) begin
cyc<=cyc+1;
@@ -96,6 +103,9 @@ module t (/*AUTOARG*/
if (cyc==6) begin
if (fixin != 16'hb7b7) $stop;
end
+ if (cyc==8) begin
+ if (f(123) != 123) $stop;
+ end
if (cyc==9) begin
$write("*-* All Finished *-*\n");
$finish;
diff --git a/test_regress/t/t_xml_flat_vlvbound.out b/test_regress/t/t_xml_flat_vlvbound.out
index 2cba16ed9..3864164df 100644
--- a/test_regress/t/t_xml_flat_vlvbound.out
+++ b/test_regress/t/t_xml_flat_vlvbound.out
@@ -63,6 +63,12 @@
+
+
+
+
+
+
@@ -129,6 +135,12 @@
+
+
+
+
+
+