diff options
author | Alon Zakai <azakai@google.com> | 2021-07-13 15:00:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-13 15:00:20 -0700 |
commit | b68691e826a46d1b03b27c552b1f5b7f51f92665 (patch) | |
tree | 4f852ce51315e86e1bd2600af85fba7940f34a54 /src | |
parent | aafd1bf1be09d6368127f9878ab1779cc258f526 (diff) | |
download | binaryen-b68691e826a46d1b03b27c552b1f5b7f51f92665.tar.gz binaryen-b68691e826a46d1b03b27c552b1f5b7f51f92665.tar.bz2 binaryen-b68691e826a46d1b03b27c552b1f5b7f51f92665.zip |
Partially fix Precompute on SIMD (#3983)
We had the logic in only one place.
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/Precompute.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/passes/Precompute.cpp b/src/passes/Precompute.cpp index a832c9e85..fa6e8e9ed 100644 --- a/src/passes/Precompute.cpp +++ b/src/passes/Precompute.cpp @@ -172,17 +172,8 @@ struct Precompute if (Properties::isConstantExpression(curr) || 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.isVector()) { - return; - } // try to evaluate this into a const Flow flow = precomputeExpression(curr); - if (flow.getType().hasVector()) { - return; - } if (!canEmitConstantFor(flow.values)) { return; } @@ -236,6 +227,12 @@ private: // Precompute an expression, returning a flow, which may be a constant // (that we can replace the expression with if replaceExpression is set). Flow precomputeExpression(Expression* curr, bool replaceExpression = true) { + // 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.isVector()) { + return Flow(NONCONSTANT_FLOW); + } Flow flow; try { flow = @@ -250,6 +247,9 @@ private: !canEmitConstantFor(flow.values)) { return Flow(NONCONSTANT_FLOW); } + if (flow.getType().hasVector()) { + return Flow(NONCONSTANT_FLOW); + } return flow; } |