diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-04-07 20:36:53 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-04-07 20:39:23 -0700 |
commit | db3d83e79532cd48fbd852f7ab1370d0218dfe91 (patch) | |
tree | eb1a93f1be18466c3b76accf3761460abbc5f70f | |
parent | e39dfc187c9d9582c3cb786447ddab57ecdd341c (diff) | |
download | binaryen-db3d83e79532cd48fbd852f7ab1370d0218dfe91.tar.gz binaryen-db3d83e79532cd48fbd852f7ab1370d0218dfe91.tar.bz2 binaryen-db3d83e79532cd48fbd852f7ab1370d0218dfe91.zip |
refactor checks in SimplifyLocals
-rw-r--r-- | src/passes/SimplifyLocals.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
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<FastExecutionWalker<SimplifyLocals>> { } void checkInvalidations(EffectAnalyzer& effects) { + // TODO: this is O(bad) std::vector<Name> invalidated; for (auto& sinkable : sinkables) { if (effects.invalidates(sinkable.second.effects)) { @@ -90,23 +91,29 @@ struct SimplifyLocals : public WalkerPass<FastExecutionWalker<SimplifyLocals>> { } } - 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<SimplifyLocals> registerPass("simplify-locals", "miscellaneous locals-related optimizations"); |