diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-09-12 08:31:53 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-09-12 10:14:16 -0700 |
commit | d44d104c26c09e408dddcac6c382a66fc1db5812 (patch) | |
tree | 7a5b02458c2439d2f929ca82040e37980811a28c | |
parent | 4ed9d8f6608d768fe9ef2e2916e770d605e6b0e1 (diff) | |
download | binaryen-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.cpp | 36 |
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 |