From db3d83e79532cd48fbd852f7ab1370d0218dfe91 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 7 Apr 2016 20:36:53 -0700 Subject: refactor checks in SimplifyLocals --- src/passes/SimplifyLocals.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/passes/SimplifyLocals.cpp b/src/passes/SimplifyLocals.cpp index cd6cb2ca7..5368701d7 100644 --- a/src/passes/SimplifyLocals.cpp +++ b/src/passes/SimplifyLocals.cpp @@ -79,6 +79,7 @@ struct SimplifyLocals : public WalkerPass> { } void checkInvalidations(EffectAnalyzer& effects) { + // TODO: this is O(bad) std::vector invalidated; for (auto& sinkable : sinkables) { if (effects.invalidates(sinkable.second.effects)) { @@ -90,23 +91,29 @@ struct SimplifyLocals : public WalkerPass> { } } - void walk(Expression*& curr) override { - if (!curr) return; - + void checkPre(Expression* curr) { EffectAnalyzer effects; - if (effects.checkPre(curr)) { checkInvalidations(effects); } + } - FastExecutionWalker::walk(curr); - - // TODO: this is O(n^2) in sinkables - + void checkPost(Expression* curr) { + EffectAnalyzer effects; if (effects.checkPost(curr)) { checkInvalidations(effects); } } + + void walk(Expression*& curr) override { + if (!curr) return; + + checkPre(curr); + + FastExecutionWalker::walk(curr); + + checkPost(curr); + } }; static RegisterPass registerPass("simplify-locals", "miscellaneous locals-related optimizations"); -- cgit v1.2.3