diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/SimplifyGlobals.cpp | 23 | ||||
-rw-r--r-- | src/passes/pass.cpp | 1 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/passes/SimplifyGlobals.cpp b/src/passes/SimplifyGlobals.cpp index 71aafa491..a8012aa44 100644 --- a/src/passes/SimplifyGlobals.cpp +++ b/src/passes/SimplifyGlobals.cpp @@ -167,20 +167,35 @@ private: }; struct GlobalSetRemover : public WalkerPass<PostWalker<GlobalSetRemover>> { - GlobalSetRemover(NameSet* toRemove) : toRemove(toRemove) {} + GlobalSetRemover(const NameSet* toRemove, bool optimize) + : toRemove(toRemove), optimize(optimize) {} bool isFunctionParallel() override { return true; } - GlobalSetRemover* create() override { return new GlobalSetRemover(toRemove); } + GlobalSetRemover* create() override { + return new GlobalSetRemover(toRemove, optimize); + } void visitGlobalSet(GlobalSet* curr) { if (toRemove->count(curr->name) != 0) { ExpressionManipulator::nop(curr); + nopped = true; + } + } + + void visitFunction(Function* curr) { + if (nopped && optimize) { + PassRunner runner(getModule(), getPassRunner()->options); + runner.setIsNested(true); + runner.addDefaultFunctionOptimizationPasses(); + runner.runOnFunction(curr); } } private: - NameSet* toRemove; + const NameSet* toRemove; + bool optimize; + bool nopped = false; }; } // anonymous namespace @@ -247,7 +262,7 @@ struct SimplifyGlobals : public Pass { info.written = false; } } - GlobalSetRemover(&unreadGlobals).run(runner, module); + GlobalSetRemover(&unreadGlobals, optimize).run(runner, module); } void preferEarlierImports() { diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index 4da870ae9..733b61467 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -483,7 +483,6 @@ void PassRunner::addDefaultGlobalOptimizationPostPasses() { } else { add("simplify-globals"); } - add("vacuum"); // simplify-globals can generate extra nops add("remove-unused-module-elements"); // may allow more inlining/dae/etc., need --converge for that add("directize"); |