From e98b5a7d1866a9f29c5bf06a9b231894222ad30b Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 7 Apr 2016 19:04:29 -0700 Subject: fix invalidation logic in SimplifyLocals, visit each node as we hit it, do not walk it to look for invalidating elements that are children, we already saw them --- src/passes/SimplifyLocals.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/passes/SimplifyLocals.cpp') diff --git a/src/passes/SimplifyLocals.cpp b/src/passes/SimplifyLocals.cpp index 5c7b7475a..a0f843bbd 100644 --- a/src/passes/SimplifyLocals.cpp +++ b/src/passes/SimplifyLocals.cpp @@ -79,11 +79,13 @@ struct SimplifyLocals : public WalkerPass> { } void walk(Expression*& curr) override { + if (!curr) return; + FastExecutionWalker::walk(curr); // invalidations TODO: this is O(n^2) in sinkables EffectAnalyzer effects; - effects.walk(curr); // TODO: this, accumulated, is O(n * nesting) <= O(n^2) + effects.visit(curr); std::vector invalidated; for (auto& sinkable : sinkables) { if (effects.invalidates(sinkable.second.effects)) { -- cgit v1.2.3