Remove obsolete DepSet from output file names (#6564)
This commit is contained in:
parent
794247450f
commit
982c7fb058
|
|
@ -58,12 +58,8 @@ For --cc/--sc, it creates:
|
||||||
- Top-level internal C++ file (from SystemVerilog $root)
|
- Top-level internal C++ file (from SystemVerilog $root)
|
||||||
* - *{prefix}*\ ___024root\ *{__n}*\ .cpp
|
* - *{prefix}*\ ___024root\ *{__n}*\ .cpp
|
||||||
- Additional top-level internal C++ files
|
- 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
|
* - *{prefix}*\ ___024root__Slow\ *{__n}*\ .cpp
|
||||||
- Infrequent cold routines
|
- Infrequent cold routines
|
||||||
* - *{prefix}*\ ___024root\ *{__DepSet_hash__n}*\ .cpp
|
|
||||||
- Infrequent cold routines (hashed to reduce build times)
|
|
||||||
* - *{prefix}*\ ___024root__Trace\ *{__n}*\ .cpp
|
* - *{prefix}*\ ___024root__Trace\ *{__n}*\ .cpp
|
||||||
- Wave file generation code (from --trace-\*)
|
- Wave file generation code (from --trace-\*)
|
||||||
* - *{prefix}*\ ___024root__Trace__Slow\ *{__n}*\ .cpp
|
* - *{prefix}*\ ___024root__Trace__Slow\ *{__n}*\ .cpp
|
||||||
|
|
@ -86,8 +82,6 @@ For --cc/--sc, it creates:
|
||||||
- Lower level internal C++ files
|
- Lower level internal C++ files
|
||||||
* - *{prefix}{each_verilog_module}{__n}*\ .cpp
|
* - *{prefix}{each_verilog_module}{__n}*\ .cpp
|
||||||
- Additional lower C++ files
|
- 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:
|
For --hierarchical mode, it creates:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,128 +27,6 @@
|
||||||
|
|
||||||
VL_DEFINE_DEBUG_FUNCTIONS;
|
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
|
// Internal EmitC implementation
|
||||||
|
|
||||||
|
|
@ -156,49 +34,41 @@ class EmitCImp final : EmitCFunc {
|
||||||
// MEMBERS
|
// MEMBERS
|
||||||
const AstNodeModule* const m_fileModp; // Files names/headers constructed using this module
|
const AstNodeModule* const m_fileModp; // Files names/headers constructed using this module
|
||||||
const bool m_slow; // Creating __Slow file
|
const bool m_slow; // Creating __Slow file
|
||||||
const std::set<string>* m_requiredHeadersp; // Header files required by output file
|
size_t m_nSplitFiles = 0; // Sequence number for file splitting
|
||||||
std::string m_subFileName; // substring added to output filenames
|
|
||||||
V3UniqueNames m_uniqueNames; // For generating unique file names
|
|
||||||
std::deque<AstCFile*>& m_cfilesr; // cfiles generated by this emit
|
std::deque<AstCFile*>& m_cfilesr; // cfiles generated by this emit
|
||||||
|
|
||||||
// METHODS
|
// METHODS
|
||||||
void openNextOutputFile(const std::set<string>& headers, const string& subFileName) {
|
void openNextOutputFile(bool canBeSplit) {
|
||||||
UASSERT(!ofp(), "Output file already open");
|
UASSERT(!ofp(), "Output file already open");
|
||||||
|
|
||||||
splitSizeReset(); // Reset file size tracking
|
splitSizeReset(); // Reset file size tracking
|
||||||
m_lazyDecls.reset(); // Need to emit new lazy declarations
|
m_lazyDecls.reset(); // Need to emit new lazy declarations
|
||||||
|
|
||||||
|
AstCFile* filep = nullptr;
|
||||||
|
V3OutCFile* ofilep = nullptr;
|
||||||
if (v3Global.opt.lintOnly()) {
|
if (v3Global.opt.lintOnly()) {
|
||||||
// Unfortunately we have some lint checks here, so we can't just skip processing.
|
// Unfortunately we have some lint checks here, so we can't just skip processing.
|
||||||
// We should move them to a different stage.
|
// We should move them to a different stage.
|
||||||
const string filename = VL_DEV_NULL;
|
const std::string filename = VL_DEV_NULL;
|
||||||
AstCFile* const filep = createCFile(filename, /* slow: */ m_slow, /* source: */ true);
|
filep = createCFile(filename, /* slow: */ m_slow, /* source: */ true);
|
||||||
m_cfilesr.push_back(filep);
|
ofilep = new V3OutCFile{filename};
|
||||||
V3OutCFile* const ofilep = new V3OutCFile{filename};
|
|
||||||
setOutputFile(ofilep, filep);
|
|
||||||
} else {
|
} else {
|
||||||
string filename
|
std::string filename = v3Global.opt.makeDir();
|
||||||
= v3Global.opt.makeDir() + "/" + EmitCUtil::prefixNameProtect(m_fileModp);
|
filename += "/" + EmitCUtil::prefixNameProtect(m_fileModp);
|
||||||
if (!subFileName.empty()) {
|
if (canBeSplit) filename += "__" + std::to_string(m_nSplitFiles++);
|
||||||
filename += "__" + subFileName;
|
|
||||||
filename = m_uniqueNames.get(filename);
|
|
||||||
}
|
|
||||||
if (m_slow) filename += "__Slow";
|
if (m_slow) filename += "__Slow";
|
||||||
filename += ".cpp";
|
filename += ".cpp";
|
||||||
AstCFile* const filep = createCFile(filename, /* slow: */ m_slow, /* source: */ true);
|
filep = createCFile(filename, /* slow: */ m_slow, /* source: */ true);
|
||||||
m_cfilesr.push_back(filep);
|
ofilep = v3Global.opt.systemC() ? new V3OutScFile{filename} : new V3OutCFile{filename};
|
||||||
V3OutCFile* const ofilep
|
|
||||||
= v3Global.opt.systemC() ? new V3OutScFile{filename} : new V3OutCFile{filename};
|
|
||||||
setOutputFile(ofilep, filep);
|
|
||||||
}
|
}
|
||||||
|
m_cfilesr.push_back(filep);
|
||||||
|
setOutputFile(ofilep, filep);
|
||||||
|
|
||||||
putsHeader();
|
putsHeader();
|
||||||
puts("// DESCRIPTION: Verilator output: Design implementation internals\n");
|
puts("// DESCRIPTION: Verilator output: Design implementation internals\n");
|
||||||
puts("// See " + EmitCUtil::topClassName() + ".h for the primary calling header\n");
|
puts("// See " + EmitCUtil::topClassName() + ".h for the primary calling header\n");
|
||||||
|
|
||||||
puts("\n");
|
puts("\n");
|
||||||
puts("#include \"" + EmitCUtil::pchClassName() + ".h\"\n");
|
puts("#include \"" + EmitCUtil::pchClassName() + ".h\"\n");
|
||||||
for (const string& name : headers) puts("#include \"" + name + ".h\"\n");
|
|
||||||
|
|
||||||
emitSystemCSection(m_modp, VSystemCSectionType::IMP_HDR);
|
emitSystemCSection(m_modp, VSystemCSectionType::IMP_HDR);
|
||||||
}
|
}
|
||||||
|
|
@ -305,7 +175,6 @@ class EmitCImp final : EmitCFunc {
|
||||||
puts(modName + "__" + protect("_configure_coverage") + "(this, first);\n");
|
puts(modName + "__" + protect("_configure_coverage") + "(this, first);\n");
|
||||||
}
|
}
|
||||||
puts("}\n");
|
puts("}\n");
|
||||||
splitSizeInc(10);
|
|
||||||
}
|
}
|
||||||
void emitCoverageImp() {
|
void emitCoverageImp() {
|
||||||
// Rather than putting out VL_COVER_INSERT calls directly, we do it via this
|
// 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(" \"comment\",commentp,");
|
||||||
puts(" (linescovp[0] ? \"linescov\" : \"\"), linescovp);\n");
|
puts(" (linescovp[0] ? \"linescov\" : \"\"), linescovp);\n");
|
||||||
puts("}\n");
|
puts("}\n");
|
||||||
splitSizeInc(10);
|
|
||||||
}
|
}
|
||||||
if (v3Global.opt.coverageToggle()) {
|
if (v3Global.opt.coverageToggle()) {
|
||||||
puts("\n// Toggle Coverage\n");
|
puts("\n// Toggle Coverage\n");
|
||||||
|
|
@ -386,7 +254,6 @@ class EmitCImp final : EmitCFunc {
|
||||||
puts("}\n");
|
puts("}\n");
|
||||||
puts("}\n");
|
puts("}\n");
|
||||||
puts("}\n");
|
puts("}\n");
|
||||||
splitSizeInc(10);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void emitDestructorImp(const AstNodeModule* modp) {
|
void emitDestructorImp(const AstNodeModule* modp) {
|
||||||
|
|
@ -395,7 +262,6 @@ class EmitCImp final : EmitCFunc {
|
||||||
+ "() {\n");
|
+ "() {\n");
|
||||||
emitSystemCSection(modp, VSystemCSectionType::DTOR);
|
emitSystemCSection(modp, VSystemCSectionType::DTOR);
|
||||||
puts("}\n");
|
puts("}\n");
|
||||||
splitSizeInc(10);
|
|
||||||
}
|
}
|
||||||
void emitSavableImp(const AstNodeModule* modp) {
|
void emitSavableImp(const AstNodeModule* modp) {
|
||||||
if (v3Global.opt.savable()) {
|
if (v3Global.opt.savable()) {
|
||||||
|
|
@ -519,11 +385,7 @@ class EmitCImp final : EmitCFunc {
|
||||||
= VN_IS(modp, ClassPackage) ? VN_AS(modp, ClassPackage)->classp() : nullptr;
|
= VN_IS(modp, ClassPackage) ? VN_AS(modp, ClassPackage)->classp() : nullptr;
|
||||||
|
|
||||||
if (hasCommonImp(modp) || hasCommonImp(classp)) {
|
if (hasCommonImp(modp) || hasCommonImp(classp)) {
|
||||||
std::set<string> headers;
|
openNextOutputFile(/* canBeSplit: */ false);
|
||||||
headers.insert(EmitCUtil::prefixNameProtect(m_fileModp));
|
|
||||||
headers.insert(EmitCUtil::symClassName());
|
|
||||||
|
|
||||||
openNextOutputFile(headers, "");
|
|
||||||
|
|
||||||
doCommonImp(modp);
|
doCommonImp(modp);
|
||||||
if (classp) {
|
if (classp) {
|
||||||
|
|
@ -536,22 +398,19 @@ class EmitCImp final : EmitCFunc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void emitCFuncImp(const AstNodeModule* modp) {
|
void emitCFuncImp(const AstNodeModule* modp) {
|
||||||
// Partition functions based on which module definitions they require, by building a
|
// Functions to be emitted here
|
||||||
// map from "AstNodeModules whose definitions are required" -> "functions that need
|
std::vector<AstCFunc*> funcps;
|
||||||
// them"
|
|
||||||
std::map<const std::set<string>, std::vector<AstCFunc*>> depSet2funcps;
|
|
||||||
|
|
||||||
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()) {
|
for (AstNode* nodep = modp->stmtsp(); nodep; nodep = nodep->nextp()) {
|
||||||
if (AstCFunc* const funcp = VN_CAST(nodep, CFunc)) {
|
AstCFunc* const funcp = VN_CAST(nodep, CFunc);
|
||||||
// TRACE_* and DPI handled elsewhere
|
if (!funcp) continue;
|
||||||
if (funcp->isTrace()) continue;
|
// TRACE_* and DPI handled elsewhere
|
||||||
if (funcp->dpiImportPrototype()) continue;
|
if (funcp->isTrace()) continue;
|
||||||
if (funcp->dpiExportDispatcher()) continue;
|
if (funcp->dpiImportPrototype()) continue;
|
||||||
if (funcp->slow() != m_slow) continue;
|
if (funcp->dpiExportDispatcher()) continue;
|
||||||
const auto& depSet = EmitCGatherDependencies::gather(funcp);
|
if (funcp->slow() != m_slow) continue;
|
||||||
depSet2funcps[depSet].push_back(funcp);
|
funcps.push_back(funcp);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -562,25 +421,19 @@ class EmitCImp final : EmitCFunc {
|
||||||
gather(packagep->classp());
|
gather(packagep->classp());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emit all functions in each dependency set into separate files
|
// Do not create empty files
|
||||||
for (const auto& pair : depSet2funcps) {
|
if (funcps.empty()) return;
|
||||||
m_requiredHeadersp = &pair.first;
|
|
||||||
// Compute the hash of the dependencies, so we can add it to the filenames to
|
// Open output file
|
||||||
// disambiguate them
|
openNextOutputFile(/* canBeSplit: */ true);
|
||||||
V3Hash hash;
|
// Emit all functions
|
||||||
for (const string& name : *m_requiredHeadersp) hash += name;
|
for (AstCFunc* const funcp : funcps) {
|
||||||
m_subFileName = "DepSet_" + hash.toString();
|
VL_RESTORER(m_modp);
|
||||||
// Open output file
|
m_modp = EmitCParentModule::get(funcp);
|
||||||
openNextOutputFile(*m_requiredHeadersp, m_subFileName);
|
iterateConst(funcp);
|
||||||
// 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();
|
|
||||||
}
|
}
|
||||||
|
// Close output file
|
||||||
|
closeOutputFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
// VISITORS
|
// VISITORS
|
||||||
|
|
@ -591,7 +444,7 @@ class EmitCImp final : EmitCFunc {
|
||||||
// Close old file
|
// Close old file
|
||||||
closeOutputFile();
|
closeOutputFile();
|
||||||
// Open a new file
|
// Open a new file
|
||||||
openNextOutputFile(*m_requiredHeadersp, m_subFileName);
|
openNextOutputFile(/* canBeSplit: */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
EmitCFunc::visit(nodep);
|
EmitCFunc::visit(nodep);
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,7 @@ if test.vlt_all:
|
||||||
has_xthis = False
|
has_xthis = False
|
||||||
has_thisx = False
|
has_thisx = False
|
||||||
has_xthisx = False
|
has_xthisx = False
|
||||||
for filename in test.glob_some(test.obj_dir + "/" + test.vm_prefix +
|
for filename in test.glob_some(test.obj_dir + "/" + test.vm_prefix + "___024root__0.cpp"):
|
||||||
"___024root__DepSet_*__0.cpp"):
|
|
||||||
text = test.file_contents(filename)
|
text = test.file_contents(filename)
|
||||||
if re.search(r'\bthis->clk\b', text):
|
if re.search(r'\bthis->clk\b', text):
|
||||||
has_this = True
|
has_this = True
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ test.compile(verilator_flags2=["--comp-limit-parens 2"])
|
||||||
|
|
||||||
test.execute()
|
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.file_grep_any(files, r'Vdeeptemp')
|
||||||
|
|
||||||
test.passes()
|
test.passes()
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ test.compile(verilator_flags2=["--x-initial unique"])
|
||||||
|
|
||||||
test.execute()
|
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.file_grep_any(files, r"VL_SCOPED_RAND_RESET")
|
||||||
|
|
||||||
test.passes()
|
test.passes()
|
||||||
|
|
|
||||||
|
|
@ -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_$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_$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__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__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__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_$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_$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_$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__0__Slow.cpp","addr":"(HPB)","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__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": []}
|
|
||||||
],
|
],
|
||||||
"miscsp": [
|
"miscsp": [
|
||||||
{"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"(CB)",
|
{"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"(CB)",
|
||||||
"typesp": [
|
"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":"(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":"(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":"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":"(LPB)","loc":"d,17:12,17:16","dtypep":"(LPB)","enum":true,"generic":false,"refDTypep":"(KPB)","childDTypep": [],
|
{"type":"ENUMDTYPE","name":"t.my_t","addr":"(JPB)","loc":"d,17:12,17:16","dtypep":"(JPB)","enum":true,"generic":false,"refDTypep":"(IPB)","childDTypep": [],
|
||||||
"itemsp": [
|
"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": [
|
"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": [
|
"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": [
|
"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":"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":"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": [
|
"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": [
|
"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": [
|
"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": [
|
"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": [
|
"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": [
|
"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": [],
|
{"type":"UNPACKARRAYDTYPE","name":"","addr":"(HM)","loc":"d,17:12,17:16","dtypep":"(HM)","isCompound":true,"declRange":"[7:0]","generic":false,"refDTypep":"(RB)","childDTypep": [],
|
||||||
"rangep": [
|
"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": [
|
"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": [
|
"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": []},
|
{"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",
|
{"type":"CONSTPOOL","name":"","addr":"(D)","loc":"a,0:0,0:0",
|
||||||
"modulep": [
|
"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": [
|
"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": []}
|
||||||
]}
|
]}
|
||||||
]}
|
]}
|
||||||
]}
|
]}
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,7 @@ test.compile()
|
||||||
|
|
||||||
test.execute()
|
test.execute()
|
||||||
|
|
||||||
for filename in test.glob_some(test.obj_dir + "/" + test.vm_prefix +
|
for filename in test.glob_some(test.obj_dir + "/" + test.vm_prefix + "___024root__*__Slow.cpp"):
|
||||||
"___024root__DepSet*__Slow.cpp"):
|
|
||||||
test.file_grep_not(filename, r'(<<|>>)')
|
test.file_grep_not(filename, r'(<<|>>)')
|
||||||
|
|
||||||
test.passes()
|
test.passes()
|
||||||
|
|
|
||||||
|
|
@ -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_$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_$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__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__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__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__DepSet_h########__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__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">
|
<typetable loc="a,0,0,0,0">
|
||||||
<basicdtype loc="d,33,24,33,27" id="1" name="logic"/>
|
<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"/>
|
<basicdtype loc="d,53,16,53,17" id="14" name="logic" left="31" right="0"/>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue