Fix performance degradation when --threads is used with --hierarchical (Issue #2562) #2581

This commit is contained in:
Yutetsu TAKATSUKASA 2020-10-05 08:20:49 +09:00 committed by GitHub
parent efbcb094ca
commit c5da072ff6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 1 deletions

View File

@ -228,6 +228,9 @@ void V3HierBlock::writeCommandArgsFile(bool forCMake) const {
++child) {
*of << (*child)->hierBlockArgs().front() << "\n";
}
// Hierarchical blocks should not use multi-threading,
// but needs to be thread safe when top is multi-threaded.
if (v3Global.opt.threads() > 0) { *of << "--threads 1\n"; }
*of << v3Global.opt.allArgsStringForHierBlock(false) << "\n";
}
@ -426,6 +429,9 @@ void V3HierBlockPlan::writeCommandArgsFiles(bool forCMake) const {
*of << "--protect-lib " << v3Global.opt.protectLib() << "\n";
*of << "--protect-key " << v3Global.opt.protectKeyDefaulted() << "\n";
}
if (v3Global.opt.threads() > 0) {
*of << "--threads " << cvtToStr(v3Global.opt.threads()) << "\n";
}
*of << (v3Global.opt.systemC() ? "--sc" : "--cc") << "\n";
*of << v3Global.opt.allArgsStringForHierBlock(true) << "\n";
}

View File

@ -504,7 +504,7 @@ string V3Options::filePathCheckOneDir(const string& modname, const string& dirna
int V3Options::stripOptionsForChildRun(const string& opt, bool forTop) const {
if (opt == "Mdir" || opt == "clk" || opt == "f" || opt == "j" || opt == "l2-name"
|| opt == "mod-prefix" || opt == "prefix" || opt == "protect-lib" || opt == "protect-key"
|| opt == "top-module" || opt == "v") {
|| opt == "threads" || opt == "top-module" || opt == "v") {
return 2;
}
if (opt == "build" || (!forTop && (opt == "cc" || opt == "exe" || opt == "sc"))