diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-08-07 10:38:34 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-09-07 09:54:51 -0700 |
commit | 9d27d6818f83308c4853e3d8870d5b88a374453f (patch) | |
tree | 50c25e5177efb7a8e910e586398aab3cfd1522c7 /src/passes/Vacuum.cpp | |
parent | 0783d60d9490666ab4b365e738b0132b378c6018 (diff) | |
download | binaryen-9d27d6818f83308c4853e3d8870d5b88a374453f.tar.gz binaryen-9d27d6818f83308c4853e3d8870d5b88a374453f.tar.bz2 binaryen-9d27d6818f83308c4853e3d8870d5b88a374453f.zip |
add drop and tee expressions
Diffstat (limited to 'src/passes/Vacuum.cpp')
-rw-r--r-- | src/passes/Vacuum.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/passes/Vacuum.cpp b/src/passes/Vacuum.cpp index 0195427d7..1b0887181 100644 --- a/src/passes/Vacuum.cpp +++ b/src/passes/Vacuum.cpp @@ -41,6 +41,7 @@ struct Vacuum : public WalkerPass<PostWalker<Vacuum, Visitor<Vacuum>>> { case Expression::Id::BlockId: return curr; // not always needed, but handled in visitBlock() case Expression::Id::IfId: return curr; // not always needed, but handled in visitIf() case Expression::Id::LoopId: return curr; // not always needed, but handled in visitLoop() + case Expression::Id::DropId: return curr; // not always needed, but handled in visitDrop() case Expression::Id::BreakId: case Expression::Id::SwitchId: @@ -198,6 +199,13 @@ struct Vacuum : public WalkerPass<PostWalker<Vacuum, Visitor<Vacuum>>> { if (curr->body->is<Nop>()) ExpressionManipulator::nop(curr); } + void visitDrop(Drop* curr) { + // if the drop input has no side effects, it can be wiped out + if (!EffectAnalyzer(curr->value).hasSideEffects()) { + ExpressionManipulator::nop(curr); + } + } + static void visitPre(Vacuum* self, Expression** currp) { self->expressionStack.push_back(*currp); } |