diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-02-06 16:24:33 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-06 16:24:33 -0800 |
commit | 985bcba6239792ebcb3808f1066ca6ea20ac5688 (patch) | |
tree | 8fdd04577f6b40f6f4a8c7851fa5dab83c26e413 /src/passes/SimplifyLocals.cpp | |
parent | 04fc050edf3eeff85a77910a4d6821bff59fade2 (diff) | |
download | binaryen-985bcba6239792ebcb3808f1066ca6ea20ac5688.tar.gz binaryen-985bcba6239792ebcb3808f1066ca6ea20ac5688.tar.bz2 binaryen-985bcba6239792ebcb3808f1066ca6ea20ac5688.zip |
Improve handling of implicit traps (#898)
* add --ignore-implicit-traps option, and by default do not ignore them, to properly preserve semantics
* implicit traps can be reordered, but are side effects and should not be removed
* add testing for --ignore-implicit-traps
Diffstat (limited to 'src/passes/SimplifyLocals.cpp')
-rw-r--r-- | src/passes/SimplifyLocals.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/passes/SimplifyLocals.cpp b/src/passes/SimplifyLocals.cpp index 6509c9da5..8590fbe96 100644 --- a/src/passes/SimplifyLocals.cpp +++ b/src/passes/SimplifyLocals.cpp @@ -84,9 +84,7 @@ struct SimplifyLocals : public WalkerPass<LinearExecutionWalker<SimplifyLocals, Expression** item; EffectAnalyzer effects; - SinkableInfo(Expression** item) : item(item) { - effects.walk(*item); - } + SinkableInfo(Expression** item, PassOptions& passOptions) : item(item), effects(passOptions, *item) {} }; // a list of sinkables in a linear execution trace @@ -246,7 +244,7 @@ struct SimplifyLocals : public WalkerPass<LinearExecutionWalker<SimplifyLocals, static void visitPre(SimplifyLocals* self, Expression** currp) { Expression* curr = *currp; - EffectAnalyzer effects; + EffectAnalyzer effects(self->getPassOptions()); if (effects.checkPre(curr)) { self->checkInvalidations(effects); } @@ -274,7 +272,7 @@ struct SimplifyLocals : public WalkerPass<LinearExecutionWalker<SimplifyLocals, } } - EffectAnalyzer effects; + EffectAnalyzer effects(self->getPassOptions()); if (effects.checkPost(*currp)) { self->checkInvalidations(effects); } @@ -282,7 +280,7 @@ struct SimplifyLocals : public WalkerPass<LinearExecutionWalker<SimplifyLocals, if (set && self->canSink(set)) { Index index = set->index; assert(self->sinkables.count(index) == 0); - self->sinkables.emplace(std::make_pair(index, SinkableInfo(currp))); + self->sinkables.emplace(std::make_pair(index, SinkableInfo(currp, self->getPassOptions()))); } self->expressionStack.pop_back(); |