summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-09-12 08:31:53 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-09-12 10:14:16 -0700
commitd44d104c26c09e408dddcac6c382a66fc1db5812 (patch)
tree7a5b02458c2439d2f929ca82040e37980811a28c
parent4ed9d8f6608d768fe9ef2e2916e770d605e6b0e1 (diff)
downloadbinaryen-d44d104c26c09e408dddcac6c382a66fc1db5812.tar.gz
binaryen-d44d104c26c09e408dddcac6c382a66fc1db5812.tar.bz2
binaryen-d44d104c26c09e408dddcac6c382a66fc1db5812.zip
fix up types in remove-unused-brs at the first opportunity, not later
-rw-r--r--src/passes/RemoveUnusedBrs.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/passes/RemoveUnusedBrs.cpp b/src/passes/RemoveUnusedBrs.cpp
index 519f0c5a8..c4cb0c554 100644
--- a/src/passes/RemoveUnusedBrs.cpp
+++ b/src/passes/RemoveUnusedBrs.cpp
@@ -294,6 +294,24 @@ struct RemoveUnusedBrs : public WalkerPass<PostWalker<RemoveUnusedBrs, Visitor<R
loops.clear();
if (anotherCycle) worked = true;
} while (anotherCycle);
+
+ if (worked) {
+ // Our work may alter block and if types, they may now return
+ struct TypeUpdater : public WalkerPass<PostWalker<TypeUpdater, Visitor<TypeUpdater>>> {
+ void visitBlock(Block* curr) {
+ curr->finalize();
+ }
+ void visitLoop(Loop* curr) {
+ curr->finalize();
+ }
+ void visitIf(If* curr) {
+ curr->finalize();
+ }
+ };
+ TypeUpdater typeUpdater;
+ typeUpdater.walkFunction(func);
+ }
+
// perform some final optimizations
struct FinalOptimizer : public WalkerPass<PostWalker<FinalOptimizer, Visitor<FinalOptimizer>>> {
void visitBlock(Block* curr) {
@@ -350,22 +368,6 @@ struct RemoveUnusedBrs : public WalkerPass<PostWalker<RemoveUnusedBrs, Visitor<R
FinalOptimizer finalOptimizer;
finalOptimizer.setModule(getModule());
finalOptimizer.walkFunction(func);
- if (worked) {
- // Our work may alter block and if types, they may now return
- struct TypeUpdater : public WalkerPass<PostWalker<TypeUpdater, Visitor<TypeUpdater>>> {
- void visitBlock(Block* curr) {
- curr->finalize();
- }
- void visitLoop(Loop* curr) {
- curr->finalize();
- }
- void visitIf(If* curr) {
- curr->finalize();
- }
- };
- TypeUpdater typeUpdater;
- typeUpdater.walkFunction(func);
- }
}
};
@@ -373,4 +375,6 @@ Pass *createRemoveUnusedBrsPass() {
return new RemoveUnusedBrs();
}
+// TODO: jump threading, when a jump->jump->target => jump->target
+
} // namespace wasm