Add unroll_disable and unroll_full loop control metacomments (#3260).

This commit is contained in:
Wilson Snyder
2024-01-26 07:49:07 -05:00
parent 94460867d3
commit d6f8ccd20b
19 changed files with 241 additions and 45 deletions
+10 -11
View File
@@ -393,9 +393,6 @@ private:
UASSERT_OBJ(vscp, nodep, "Not linked");
return vscp;
}
int unrollCount() const {
return m_params ? v3Global.opt.unrollCount() * 16 : v3Global.opt.unrollCount();
}
bool jumpingOver(const AstNode* nodep) const {
// True to jump over this node - all visitors must call this up front
return (m_jumpp && m_jumpp->labelp() != nodep);
@@ -960,10 +957,11 @@ private:
}
iterateAndNextConstNull(nodep->stmtsp());
iterateAndNextConstNull(nodep->incsp());
if (loops++ > unrollCount() * 16) {
if (loops++ > v3Global.opt.unrollCountAdjusted(VOptionBool{}, m_params, true)) {
clearOptimizable(nodep, "Loop unrolling took too long; probably this is an"
"infinite loop, or set --unroll-count above "
+ cvtToStr(unrollCount()));
"infinite loop, or use /*verilator unroll_full*/, or "
"set --unroll-count above "
+ cvtToStr(loops));
break;
}
}
@@ -999,11 +997,12 @@ private:
if (jumpingOver(nodep)) break;
// Prep for next loop
if (loops++ > unrollCount() * 16) {
clearOptimizable(nodep,
"Loop unrolling took too long; probably this is an infinite"
" loop, or set --unroll-count above "
+ cvtToStr(unrollCount()));
if (loops++
> v3Global.opt.unrollCountAdjusted(nodep->unrollFull(), m_params, true)) {
clearOptimizable(nodep, "Loop unrolling took too long; probably this is an"
"infinite loop, or use /*verilator unroll_full*/, or "
"set --unroll-count above "
+ cvtToStr(loops));
break;
}
}