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)
|
||||
* - *{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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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": []}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue