Remove obsolete DepSet from output file names (#6564)

This commit is contained in:
Geza Lore 2025-10-17 02:34:09 +02:00 committed by GitHub
parent 794247450f
commit 982c7fb058
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 72 additions and 231 deletions

View File

@ -58,12 +58,8 @@ For --cc/--sc, it creates:
- Top-level internal C++ file (from SystemVerilog $root)
* - *{prefix}*\ ___024root\ *{__n}*\ .cpp
- Additional top-level internal C++ files
* - *{prefix}*\ ___024root\ *{__DepSet_hash__n}*\ .cpp
- Additional top-level internal C++ files (hashed to reduce build times)
* - *{prefix}*\ ___024root__Slow\ *{__n}*\ .cpp
- Infrequent cold routines
* - *{prefix}*\ ___024root\ *{__DepSet_hash__n}*\ .cpp
- Infrequent cold routines (hashed to reduce build times)
* - *{prefix}*\ ___024root__Trace\ *{__n}*\ .cpp
- Wave file generation code (from --trace-\*)
* - *{prefix}*\ ___024root__Trace__Slow\ *{__n}*\ .cpp
@ -86,8 +82,6 @@ For --cc/--sc, it creates:
- Lower level internal C++ files
* - *{prefix}{each_verilog_module}{__n}*\ .cpp
- Additional lower C++ files
* - *{prefix}{each_verilog_module}{__DepSet_hash__n}*\ .cpp
- Additional lower C++ files (hashed to reduce build times)
For --hierarchical mode, it creates:

View File

@ -27,128 +27,6 @@
VL_DEFINE_DEBUG_FUNCTIONS;
//######################################################################
// Visitor that gathers the headers required by an AstCFunc
class EmitCGatherDependencies final : VNVisitorConst {
// Ordered set, as it is used as a key in another map.
std::set<string> m_dependencies; // Header names to be included in output C++ file
// METHODS
void addSymsDependency() { m_dependencies.insert(EmitCUtil::symClassName()); }
void addModDependency(const AstNodeModule* modp) {
if (const AstClass* const classp = VN_CAST(modp, Class)) {
m_dependencies.insert(EmitCUtil::prefixNameProtect(classp->classOrPackagep()));
} else {
m_dependencies.insert(EmitCUtil::prefixNameProtect(modp));
}
}
void addDTypeDependency(const AstNodeDType* nodep) {
if (const AstClassRefDType* const dtypep = VN_CAST(nodep, ClassRefDType)) {
m_dependencies.insert(
EmitCUtil::prefixNameProtect(dtypep->classp()->classOrPackagep()));
} else if (const AstNodeUOrStructDType* const dtypep
= VN_CAST(nodep, NodeUOrStructDType)) {
if (!dtypep->packed()) {
UASSERT_OBJ(dtypep->classOrPackagep(), nodep, "Unlinked struct package");
m_dependencies.insert(EmitCUtil::prefixNameProtect(dtypep->classOrPackagep()));
}
}
}
void addSelfDependency(VSelfPointerText selfPointer, AstNode* nodep) {
if (selfPointer.isEmpty()) {
// No self pointer (e.g.: function locals, const pool values, loose static methods),
// so no dependency
} else if (selfPointer.hasThis()) {
// Dereferencing 'this', we need the definition of this module, which is also the
// module that contains the variable.
addModDependency(EmitCParentModule::get(nodep));
} else {
// Must be an absolute reference
UASSERT_OBJ(selfPointer.isVlSym(), nodep,
"Unknown self pointer: '" << selfPointer.asString() << "'");
// Dereferencing vlSymsp, so we need it's definition...
addSymsDependency();
}
}
// VISITORS
void visit(AstCCall* nodep) override {
addSelfDependency(nodep->selfPointer(), nodep->funcp());
iterateChildrenConst(nodep);
}
void visit(AstCNew* nodep) override {
addSymsDependency();
addDTypeDependency(nodep->dtypep());
iterateChildrenConst(nodep);
}
void visit(AstCMethodCall* nodep) override {
addDTypeDependency(nodep->fromp()->dtypep());
iterateChildrenConst(nodep);
}
void visit(AstNewCopy* nodep) override {
addSymsDependency();
addDTypeDependency(nodep->dtypep());
iterateChildrenConst(nodep);
}
void visit(AstMemberSel* nodep) override {
addDTypeDependency(nodep->fromp()->dtypep());
iterateChildrenConst(nodep);
}
void visit(AstStructSel* nodep) override {
addDTypeDependency(nodep->fromp()->dtypep());
iterateChildrenConst(nodep);
}
void visit(AstNodeVarRef* nodep) override {
addSelfDependency(nodep->selfPointer(), nodep->varp());
iterateChildrenConst(nodep);
}
void visit(AstNodeCoverDecl* nodep) override {
addSymsDependency();
iterateChildrenConst(nodep);
}
void visit(AstCoverInc* nodep) override {
addSymsDependency();
iterateChildrenConst(nodep);
}
void visit(AstDumpCtl* nodep) override {
addSymsDependency();
iterateChildrenConst(nodep);
}
void visit(AstScopeName* nodep) override {
addSymsDependency();
iterateChildrenConst(nodep);
}
void visit(AstPrintTimeScale* nodep) override {
addSymsDependency();
iterateChildrenConst(nodep);
}
void visit(AstTimeFormat* nodep) override {
addSymsDependency();
iterateChildrenConst(nodep);
}
void visit(AstNodeSimpleText* nodep) override {
if (nodep->text().find("vlSymsp") != string::npos) addSymsDependency();
iterateChildrenConst(nodep);
}
void visit(AstNode* nodep) override { iterateChildrenConst(nodep); }
// CONSTRUCTOR
explicit EmitCGatherDependencies(AstCFunc* cfuncp) {
// Strictly speaking, for loose methods, we could get away with just a forward
// declaration of the receiver class, but their body very likely includes at least one
// relative reference, so we are probably not loosing much.
addModDependency(EmitCParentModule::get(cfuncp));
iterateConst(cfuncp);
}
public:
static const std::set<std::string> gather(AstCFunc* cfuncp) VL_MT_STABLE {
const EmitCGatherDependencies visitor{cfuncp};
return std::move(visitor.m_dependencies);
}
};
//######################################################################
// Internal EmitC implementation
@ -156,49 +34,41 @@ class EmitCImp final : EmitCFunc {
// MEMBERS
const AstNodeModule* const m_fileModp; // Files names/headers constructed using this module
const bool m_slow; // Creating __Slow file
const std::set<string>* m_requiredHeadersp; // Header files required by output file
std::string m_subFileName; // substring added to output filenames
V3UniqueNames m_uniqueNames; // For generating unique file names
size_t m_nSplitFiles = 0; // Sequence number for file splitting
std::deque<AstCFile*>& m_cfilesr; // cfiles generated by this emit
// METHODS
void openNextOutputFile(const std::set<string>& headers, const string& subFileName) {
void openNextOutputFile(bool canBeSplit) {
UASSERT(!ofp(), "Output file already open");
splitSizeReset(); // Reset file size tracking
m_lazyDecls.reset(); // Need to emit new lazy declarations
AstCFile* filep = nullptr;
V3OutCFile* ofilep = nullptr;
if (v3Global.opt.lintOnly()) {
// Unfortunately we have some lint checks here, so we can't just skip processing.
// We should move them to a different stage.
const string filename = VL_DEV_NULL;
AstCFile* const filep = createCFile(filename, /* slow: */ m_slow, /* source: */ true);
m_cfilesr.push_back(filep);
V3OutCFile* const ofilep = new V3OutCFile{filename};
setOutputFile(ofilep, filep);
const std::string filename = VL_DEV_NULL;
filep = createCFile(filename, /* slow: */ m_slow, /* source: */ true);
ofilep = new V3OutCFile{filename};
} else {
string filename
= v3Global.opt.makeDir() + "/" + EmitCUtil::prefixNameProtect(m_fileModp);
if (!subFileName.empty()) {
filename += "__" + subFileName;
filename = m_uniqueNames.get(filename);
}
std::string filename = v3Global.opt.makeDir();
filename += "/" + EmitCUtil::prefixNameProtect(m_fileModp);
if (canBeSplit) filename += "__" + std::to_string(m_nSplitFiles++);
if (m_slow) filename += "__Slow";
filename += ".cpp";
AstCFile* const filep = createCFile(filename, /* slow: */ m_slow, /* source: */ true);
m_cfilesr.push_back(filep);
V3OutCFile* const ofilep
= v3Global.opt.systemC() ? new V3OutScFile{filename} : new V3OutCFile{filename};
setOutputFile(ofilep, filep);
filep = createCFile(filename, /* slow: */ m_slow, /* source: */ true);
ofilep = v3Global.opt.systemC() ? new V3OutScFile{filename} : new V3OutCFile{filename};
}
m_cfilesr.push_back(filep);
setOutputFile(ofilep, filep);
putsHeader();
puts("// DESCRIPTION: Verilator output: Design implementation internals\n");
puts("// See " + EmitCUtil::topClassName() + ".h for the primary calling header\n");
puts("\n");
puts("#include \"" + EmitCUtil::pchClassName() + ".h\"\n");
for (const string& name : headers) puts("#include \"" + name + ".h\"\n");
emitSystemCSection(m_modp, VSystemCSectionType::IMP_HDR);
}
@ -305,7 +175,6 @@ class EmitCImp final : EmitCFunc {
puts(modName + "__" + protect("_configure_coverage") + "(this, first);\n");
}
puts("}\n");
splitSizeInc(10);
}
void emitCoverageImp() {
// Rather than putting out VL_COVER_INSERT calls directly, we do it via this
@ -341,7 +210,6 @@ class EmitCImp final : EmitCFunc {
puts(" \"comment\",commentp,");
puts(" (linescovp[0] ? \"linescov\" : \"\"), linescovp);\n");
puts("}\n");
splitSizeInc(10);
}
if (v3Global.opt.coverageToggle()) {
puts("\n// Toggle Coverage\n");
@ -386,7 +254,6 @@ class EmitCImp final : EmitCFunc {
puts("}\n");
puts("}\n");
puts("}\n");
splitSizeInc(10);
}
}
void emitDestructorImp(const AstNodeModule* modp) {
@ -395,7 +262,6 @@ class EmitCImp final : EmitCFunc {
+ "() {\n");
emitSystemCSection(modp, VSystemCSectionType::DTOR);
puts("}\n");
splitSizeInc(10);
}
void emitSavableImp(const AstNodeModule* modp) {
if (v3Global.opt.savable()) {
@ -519,11 +385,7 @@ class EmitCImp final : EmitCFunc {
= VN_IS(modp, ClassPackage) ? VN_AS(modp, ClassPackage)->classp() : nullptr;
if (hasCommonImp(modp) || hasCommonImp(classp)) {
std::set<string> headers;
headers.insert(EmitCUtil::prefixNameProtect(m_fileModp));
headers.insert(EmitCUtil::symClassName());
openNextOutputFile(headers, "");
openNextOutputFile(/* canBeSplit: */ false);
doCommonImp(modp);
if (classp) {
@ -536,22 +398,19 @@ class EmitCImp final : EmitCFunc {
}
}
void emitCFuncImp(const AstNodeModule* modp) {
// Partition functions based on which module definitions they require, by building a
// map from "AstNodeModules whose definitions are required" -> "functions that need
// them"
std::map<const std::set<string>, std::vector<AstCFunc*>> depSet2funcps;
// Functions to be emitted here
std::vector<AstCFunc*> funcps;
const auto gather = [this, &depSet2funcps](const AstNodeModule* modp) {
const auto gather = [this, &funcps](const AstNodeModule* modp) {
for (AstNode* nodep = modp->stmtsp(); nodep; nodep = nodep->nextp()) {
if (AstCFunc* const funcp = VN_CAST(nodep, CFunc)) {
// TRACE_* and DPI handled elsewhere
if (funcp->isTrace()) continue;
if (funcp->dpiImportPrototype()) continue;
if (funcp->dpiExportDispatcher()) continue;
if (funcp->slow() != m_slow) continue;
const auto& depSet = EmitCGatherDependencies::gather(funcp);
depSet2funcps[depSet].push_back(funcp);
}
AstCFunc* const funcp = VN_CAST(nodep, CFunc);
if (!funcp) continue;
// TRACE_* and DPI handled elsewhere
if (funcp->isTrace()) continue;
if (funcp->dpiImportPrototype()) continue;
if (funcp->dpiExportDispatcher()) continue;
if (funcp->slow() != m_slow) continue;
funcps.push_back(funcp);
}
};
@ -562,25 +421,19 @@ class EmitCImp final : EmitCFunc {
gather(packagep->classp());
}
// Emit all functions in each dependency set into separate files
for (const auto& pair : depSet2funcps) {
m_requiredHeadersp = &pair.first;
// Compute the hash of the dependencies, so we can add it to the filenames to
// disambiguate them
V3Hash hash;
for (const string& name : *m_requiredHeadersp) hash += name;
m_subFileName = "DepSet_" + hash.toString();
// Open output file
openNextOutputFile(*m_requiredHeadersp, m_subFileName);
// Emit functions in this dependency set
for (AstCFunc* const funcp : pair.second) {
VL_RESTORER(m_modp);
m_modp = EmitCParentModule::get(funcp);
iterateConst(funcp);
}
// Close output file
closeOutputFile();
// Do not create empty files
if (funcps.empty()) return;
// Open output file
openNextOutputFile(/* canBeSplit: */ true);
// Emit all functions
for (AstCFunc* const funcp : funcps) {
VL_RESTORER(m_modp);
m_modp = EmitCParentModule::get(funcp);
iterateConst(funcp);
}
// Close output file
closeOutputFile();
}
// VISITORS
@ -591,7 +444,7 @@ class EmitCImp final : EmitCFunc {
// Close old file
closeOutputFile();
// Open a new file
openNextOutputFile(*m_requiredHeadersp, m_subFileName);
openNextOutputFile(/* canBeSplit: */ true);
}
EmitCFunc::visit(nodep);

View File

@ -20,8 +20,7 @@ if test.vlt_all:
has_xthis = False
has_thisx = False
has_xthisx = False
for filename in test.glob_some(test.obj_dir + "/" + test.vm_prefix +
"___024root__DepSet_*__0.cpp"):
for filename in test.glob_some(test.obj_dir + "/" + test.vm_prefix + "___024root__0.cpp"):
text = test.file_contents(filename)
if re.search(r'\bthis->clk\b', text):
has_this = True

View File

@ -15,7 +15,7 @@ test.compile(verilator_flags2=["--comp-limit-parens 2"])
test.execute()
files = test.glob_some(test.obj_dir + "/" + test.vm_prefix + "___024root__DepSet*__Slow.cpp")
files = test.glob_some(test.obj_dir + "/" + test.vm_prefix + "___024root__*__Slow.cpp")
test.file_grep_any(files, r'Vdeeptemp')
test.passes()

View File

@ -15,7 +15,7 @@ test.compile(verilator_flags2=["--x-initial unique"])
test.execute()
files = glob.glob(test.obj_dir + "/" + test.vm_prefix + "___024root__DepSet_*__Slow.cpp")
files = glob.glob(test.obj_dir + "/" + test.vm_prefix + "___024root__*__Slow.cpp")
test.file_grep_any(files, r"VL_SCOPED_RAND_RESET")
test.passes()

View File

@ -2795,65 +2795,63 @@
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$root.h","addr":"(BPB)","loc":"a,0:0,0:0","source":false,"slow":false,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$unit.h","addr":"(CPB)","loc":"a,0:0,0:0","source":false,"slow":false,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$root__Slow.cpp","addr":"(DPB)","loc":"a,0:0,0:0","source":true,"slow":true,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$root__DepSet_h########__0__Slow.cpp","addr":"(EPB)","loc":"a,0:0,0:0","source":true,"slow":true,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$root__DepSet_h########__0__Slow.cpp","addr":"(FPB)","loc":"a,0:0,0:0","source":true,"slow":true,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$root__DepSet_h########__0.cpp","addr":"(GPB)","loc":"a,0:0,0:0","source":true,"slow":false,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$root__DepSet_h########__0.cpp","addr":"(HPB)","loc":"a,0:0,0:0","source":true,"slow":false,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$unit__Slow.cpp","addr":"(IPB)","loc":"a,0:0,0:0","source":true,"slow":true,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$unit__DepSet_h########__0__Slow.cpp","addr":"(JPB)","loc":"a,0:0,0:0","source":true,"slow":true,"tblockp": []}
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$root__0__Slow.cpp","addr":"(EPB)","loc":"a,0:0,0:0","source":true,"slow":true,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$root__0.cpp","addr":"(FPB)","loc":"a,0:0,0:0","source":true,"slow":false,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$unit__Slow.cpp","addr":"(GPB)","loc":"a,0:0,0:0","source":true,"slow":true,"tblockp": []},
{"type":"CFILE","name":"obj_vlt/t_json_only_debugcheck/Vt_json_only_debugcheck_$unit__0__Slow.cpp","addr":"(HPB)","loc":"a,0:0,0:0","source":true,"slow":true,"tblockp": []}
],
"miscsp": [
{"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"(CB)",
"typesp": [
{"type":"BASICDTYPE","name":"logic","addr":"(K)","loc":"d,33:24,33:27","dtypep":"(K)","keyword":"logic","generic":true,"rangep": []},
{"type":"BASICDTYPE","name":"logic","addr":"(GC)","loc":"d,53:16,53:17","dtypep":"(GC)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
{"type":"BASICDTYPE","name":"logic","addr":"(KPB)","loc":"d,17:17,17:18","dtypep":"(KPB)","keyword":"logic","range":"3:0","generic":true,"rangep": []},
{"type":"ENUMDTYPE","name":"t.my_t","addr":"(LPB)","loc":"d,17:12,17:16","dtypep":"(LPB)","enum":true,"generic":false,"refDTypep":"(KPB)","childDTypep": [],
{"type":"BASICDTYPE","name":"logic","addr":"(IPB)","loc":"d,17:17,17:18","dtypep":"(IPB)","keyword":"logic","range":"3:0","generic":true,"rangep": []},
{"type":"ENUMDTYPE","name":"t.my_t","addr":"(JPB)","loc":"d,17:12,17:16","dtypep":"(JPB)","enum":true,"generic":false,"refDTypep":"(IPB)","childDTypep": [],
"itemsp": [
{"type":"ENUMITEM","name":"E01","addr":"(MPB)","loc":"d,18:24,18:27","dtypep":"(TB)","rangep": [],
{"type":"ENUMITEM","name":"E01","addr":"(KPB)","loc":"d,18:24,18:27","dtypep":"(TB)","rangep": [],
"valuep": [
{"type":"CONST","name":"4'h1","addr":"(NPB)","loc":"d,18:30,18:31","dtypep":"(TB)"}
{"type":"CONST","name":"4'h1","addr":"(LPB)","loc":"d,18:30,18:31","dtypep":"(TB)"}
]},
{"type":"ENUMITEM","name":"E03","addr":"(OPB)","loc":"d,19:24,19:27","dtypep":"(TB)","rangep": [],
{"type":"ENUMITEM","name":"E03","addr":"(MPB)","loc":"d,19:24,19:27","dtypep":"(TB)","rangep": [],
"valuep": [
{"type":"CONST","name":"4'h3","addr":"(PPB)","loc":"d,19:30,19:31","dtypep":"(TB)"}
{"type":"CONST","name":"4'h3","addr":"(NPB)","loc":"d,19:30,19:31","dtypep":"(TB)"}
]},
{"type":"ENUMITEM","name":"E04","addr":"(QPB)","loc":"d,20:24,20:27","dtypep":"(TB)","rangep": [],
{"type":"ENUMITEM","name":"E04","addr":"(OPB)","loc":"d,20:24,20:27","dtypep":"(TB)","rangep": [],
"valuep": [
{"type":"CONST","name":"4'h4","addr":"(RPB)","loc":"d,20:30,20:31","dtypep":"(TB)"}
{"type":"CONST","name":"4'h4","addr":"(PPB)","loc":"d,20:30,20:31","dtypep":"(TB)"}
]}
]},
{"type":"BASICDTYPE","name":"integer","addr":"(R)","loc":"d,23:4,23:11","dtypep":"(R)","keyword":"integer","range":"31:0","generic":true,"rangep": []},
{"type":"REFDTYPE","name":"my_t","addr":"(M)","loc":"d,24:4,24:8","dtypep":"(LPB)","generic":false,"typedefp":"UNLINKED","refDTypep":"(LPB)","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []},
{"type":"REFDTYPE","name":"my_t","addr":"(M)","loc":"d,24:4,24:8","dtypep":"(JPB)","generic":false,"typedefp":"UNLINKED","refDTypep":"(JPB)","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []},
{"type":"BASICDTYPE","name":"string","addr":"(RB)","loc":"d,28:4,28:10","dtypep":"(RB)","keyword":"string","generic":true,"rangep": []},
{"type":"UNPACKARRAYDTYPE","name":"","addr":"(BC)","loc":"d,17:12,17:16","dtypep":"(BC)","isCompound":false,"declRange":"[7:0]","generic":false,"refDTypep":"(LPB)","childDTypep": [],
{"type":"UNPACKARRAYDTYPE","name":"","addr":"(BC)","loc":"d,17:12,17:16","dtypep":"(BC)","isCompound":false,"declRange":"[7:0]","generic":false,"refDTypep":"(JPB)","childDTypep": [],
"rangep": [
{"type":"RANGE","name":"","addr":"(SPB)","loc":"d,17:12,17:16","ascending":false,"fromBracket":false,
{"type":"RANGE","name":"","addr":"(QPB)","loc":"d,17:12,17:16","ascending":false,"fromBracket":false,
"leftp": [
{"type":"CONST","name":"32'h7","addr":"(TPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
{"type":"CONST","name":"32'h7","addr":"(RPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
],
"rightp": [
{"type":"CONST","name":"32'h0","addr":"(UPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
{"type":"CONST","name":"32'h0","addr":"(SPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
]}
]},
{"type":"UNPACKARRAYDTYPE","name":"","addr":"(VI)","loc":"d,17:12,17:16","dtypep":"(VI)","isCompound":false,"declRange":"[7:0]","generic":false,"refDTypep":"(LPB)","childDTypep": [],
{"type":"UNPACKARRAYDTYPE","name":"","addr":"(VI)","loc":"d,17:12,17:16","dtypep":"(VI)","isCompound":false,"declRange":"[7:0]","generic":false,"refDTypep":"(JPB)","childDTypep": [],
"rangep": [
{"type":"RANGE","name":"","addr":"(VPB)","loc":"d,17:12,17:16","ascending":false,"fromBracket":false,
{"type":"RANGE","name":"","addr":"(TPB)","loc":"d,17:12,17:16","ascending":false,"fromBracket":false,
"leftp": [
{"type":"CONST","name":"32'h7","addr":"(WPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
{"type":"CONST","name":"32'h7","addr":"(UPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
],
"rightp": [
{"type":"CONST","name":"32'h0","addr":"(XPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
{"type":"CONST","name":"32'h0","addr":"(VPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
]}
]},
{"type":"UNPACKARRAYDTYPE","name":"","addr":"(HM)","loc":"d,17:12,17:16","dtypep":"(HM)","isCompound":true,"declRange":"[7:0]","generic":false,"refDTypep":"(RB)","childDTypep": [],
"rangep": [
{"type":"RANGE","name":"","addr":"(YPB)","loc":"d,17:12,17:16","ascending":false,"fromBracket":false,
{"type":"RANGE","name":"","addr":"(WPB)","loc":"d,17:12,17:16","ascending":false,"fromBracket":false,
"leftp": [
{"type":"CONST","name":"32'h7","addr":"(ZPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
{"type":"CONST","name":"32'h7","addr":"(XPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
],
"rightp": [
{"type":"CONST","name":"32'h0","addr":"(AQB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
{"type":"CONST","name":"32'h0","addr":"(YPB)","loc":"d,17:12,17:16","dtypep":"(GC)"}
]}
]},
{"type":"BASICDTYPE","name":"logic","addr":"(KB)","loc":"d,23:23,23:24","dtypep":"(KB)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
@ -2870,9 +2868,9 @@
]},
{"type":"CONSTPOOL","name":"","addr":"(D)","loc":"a,0:0,0:0",
"modulep": [
{"type":"MODULE","name":"@CONST-POOL@","addr":"(BQB)","loc":"a,0:0,0:0","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [],
{"type":"MODULE","name":"@CONST-POOL@","addr":"(ZPB)","loc":"a,0:0,0:0","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [],
"stmtsp": [
{"type":"SCOPE","name":"TOP","addr":"(CQB)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(BQB)","varsp": [],"blocksp": [],"inlinesp": []}
{"type":"SCOPE","name":"TOP","addr":"(AQB)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(ZPB)","varsp": [],"blocksp": [],"inlinesp": []}
]}
]}
]}

View File

@ -15,8 +15,7 @@ test.compile()
test.execute()
for filename in test.glob_some(test.obj_dir + "/" + test.vm_prefix +
"___024root__DepSet*__Slow.cpp"):
for filename in test.glob_some(test.obj_dir + "/" + test.vm_prefix + "___024root__*__Slow.cpp"):
test.file_grep_not(filename, r'(<<|>>)')
test.passes()

View File

@ -1708,12 +1708,10 @@
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$root.h"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$unit.h"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$root__Slow.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$root__DepSet_h########__0__Slow.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$root__DepSet_h########__0__Slow.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$root__DepSet_h########__0.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$root__DepSet_h########__0.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$root__0__Slow.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$root__0.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$unit__Slow.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$unit__DepSet_h########__0__Slow.cpp"/>
<cfile loc="a,0,0,0,0" name="obj_vlt/t_xml_debugcheck/Vt_xml_debugcheck_$unit__0__Slow.cpp"/>
<typetable loc="a,0,0,0,0">
<basicdtype loc="d,33,24,33,27" id="1" name="logic"/>
<basicdtype loc="d,53,16,53,17" id="14" name="logic" left="31" right="0"/>