Various optimizations for the DataFlowAnalyzer.

This commit is contained in:
Daniel Kirchner
2021-01-12 21:39:20 +01:00
parent e9dcd4f813
commit 625d402dbb
8 changed files with 89 additions and 112 deletions
+11 -7
View File
@@ -86,13 +86,17 @@ void Rematerialiser::visit(Expression& _e)
)
{
assertThrow(m_referenceCounts[name] > 0, OptimizerException, "");
for (auto const& ref: m_references.forward[name])
assertThrow(inScope(ref), OptimizerException, "");
// update reference counts
m_referenceCounts[name]--;
for (auto const& ref: ReferencesCounter::countReferences(*value.value))
m_referenceCounts[ref.first] += ref.second;
_e = (ASTCopier{}).translate(*value.value);
bool allInScope = true;
for (auto const& ref: m_references[name])
allInScope = allInScope && inScope(ref);
if (allInScope)
{
// update reference counts
m_referenceCounts[name]--;
for (auto const& ref: ReferencesCounter::countReferences(*value.value))
m_referenceCounts[ref.first] += ref.second;
_e = (ASTCopier{}).translate(*value.value);
}
}
}
}