summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/SimplifyGlobals.cpp23
-rw-r--r--src/passes/pass.cpp1
-rw-r--r--test/passes/O1.txt1
3 files changed, 20 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");
diff --git a/test/passes/O1.txt b/test/passes/O1.txt
index 11352bab2..1a63c5dbc 100644
--- a/test/passes/O1.txt
+++ b/test/passes/O1.txt
@@ -3,6 +3,7 @@
(memory $0 1 1)
(export "foo" (func $0))
(func $0 (result i32)
+ (nop)
(i32.load align=1
(i32.const 4)
)