diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2018-12-19 19:22:09 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-19 19:22:09 -0800 |
commit | 0f41b0708384c1f5d85304d5ed94d9edd57d38c9 (patch) | |
tree | b79bc880af6e8534125fa9fb75a89932af4cd7d1 /src | |
parent | fcbcf3bd670a9ee793a836be49d825b944baf501 (diff) | |
download | binaryen-0f41b0708384c1f5d85304d5ed94d9edd57d38c9.tar.gz binaryen-0f41b0708384c1f5d85304d5ed94d9edd57d38c9.tar.bz2 binaryen-0f41b0708384c1f5d85304d5ed94d9edd57d38c9.zip |
Do not precompute v128 expressions (#1839)
Without this change, sequences like `i32.const 0, i32x4.splat` will
get precomputed to v128.const ops, which are much larger and also not
implemented in V8 yet. Until we have SIMD-aware optimization passes or
at least engine support for v128.const, do not perform such
transformations.
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/Precompute.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/passes/Precompute.cpp b/src/passes/Precompute.cpp index 9fb7ab31c..042a8be20 100644 --- a/src/passes/Precompute.cpp +++ b/src/passes/Precompute.cpp @@ -161,6 +161,10 @@ struct Precompute : public WalkerPass<PostWalker<Precompute, UnifiedExpressionVi void visitExpression(Expression* curr) { // TODO: if get_local, only replace with a constant if we don't care about size...? if (curr->is<Const>() || curr->is<Nop>()) return; + // Until engines implement v128.const and we have SIMD-aware optimizations + // that can break large v128.const instructions into smaller consts and + // splats, do not try to precompute v128 expressions. + if (curr->type == v128) return; // try to evaluate this into a const Flow flow = precomputeExpression(curr); if (flow.breaking()) { |