summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/SimplifyGlobals.cpp23
-rw-r--r--src/passes/pass.cpp1
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");