diff options
author | Alon Zakai <azakai@google.com> | 2021-09-01 08:18:28 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-01 08:18:28 -0700 |
commit | d66d2d9bb0ea1e067c6b3e2d322a1d2357336893 (patch) | |
tree | 5ec1830c65a2ea061b903fee5e450a2509fc9488 /src | |
parent | 82cdabf20e496508cd241ef31a5f630c2de844ad (diff) | |
download | binaryen-d66d2d9bb0ea1e067c6b3e2d322a1d2357336893.tar.gz binaryen-d66d2d9bb0ea1e067c6b3e2d322a1d2357336893.tar.bz2 binaryen-d66d2d9bb0ea1e067c6b3e2d322a1d2357336893.zip |
Use TrapsNeverHappen mode in more places in Vacuum (#4117)
We had already replaced the check on drop, but we can also
use that mode on all the other things there, as the pass never
does reorderings of things - it just removes them.
For example, the pass can now remove part of a dropped thing,
(drop (struct.get (foo)))
=>
(drop (foo))
In this example the struct.get can be removed, even if the foo
can't.
Diffstat (limited to 'src')
-rw-r--r-- | src/ir/effects.h | 2 | ||||
-rw-r--r-- | src/passes/Vacuum.cpp | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/ir/effects.h b/src/ir/effects.h index 3f0f78e6f..b9393ade2 100644 --- a/src/ir/effects.h +++ b/src/ir/effects.h @@ -169,7 +169,7 @@ public: // and gets the result that there are no unremovable side effects, then it // must either // - // 1. Remove any side effects present, if any, so they no longer exists. + // 1. Remove any side effects present, if any, so they no longer exist. // 2. Keep the code exactly where it is. // // If instead of 1&2 a pass kept the side effect and also reordered the code diff --git a/src/passes/Vacuum.cpp b/src/passes/Vacuum.cpp index dec4add01..abd54f334 100644 --- a/src/passes/Vacuum.cpp +++ b/src/passes/Vacuum.cpp @@ -103,7 +103,7 @@ struct Vacuum : public WalkerPass<ExpressionStackWalker<Vacuum>> { // Check if this expression itself has side effects, ignoring children. EffectAnalyzer self(getPassOptions(), *getModule()); self.visit(curr); - if (self.hasSideEffects()) { + if (self.hasUnremovableSideEffects()) { return curr; } // The result isn't used, and this has no side effects itself, so we can @@ -111,7 +111,7 @@ struct Vacuum : public WalkerPass<ExpressionStackWalker<Vacuum>> { SmallVector<Expression*, 1> childrenWithEffects; for (auto* child : ChildIterator(curr)) { if (EffectAnalyzer(getPassOptions(), *getModule(), child) - .hasSideEffects()) { + .hasUnremovableSideEffects()) { childrenWithEffects.push_back(child); } } @@ -378,7 +378,7 @@ struct Vacuum : public WalkerPass<ExpressionStackWalker<Vacuum>> { } if (curr->getResults() == Type::none && !EffectAnalyzer(getPassOptions(), *getModule(), curr->body) - .hasSideEffects()) { + .hasUnremovableSideEffects()) { ExpressionManipulator::nop(curr->body); } } |