diff options
author | Max Graey <maxgraey@gmail.com> | 2020-07-22 20:45:47 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-22 10:45:47 -0700 |
commit | a097820b6f0d2bc4d31ace2764f07bfa17c2cad8 (patch) | |
tree | b2396986d287bd71f321a4513342ae4f3523e565 /src/ir/abstract.h | |
parent | 86362be31f1ae2d65e03fcc28bbf6526e48242f7 (diff) | |
download | binaryen-a097820b6f0d2bc4d31ace2764f07bfa17c2cad8.tar.gz binaryen-a097820b6f0d2bc4d31ace2764f07bfa17c2cad8.tar.bz2 binaryen-a097820b6f0d2bc4d31ace2764f07bfa17c2cad8.zip |
Optimize select with const arms (#2869)
x ? 1 : 0 => !!x
and so forth.
Diffstat (limited to 'src/ir/abstract.h')
-rw-r--r-- | src/ir/abstract.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/ir/abstract.h b/src/ir/abstract.h index 3071e6dd6..687412455 100644 --- a/src/ir/abstract.h +++ b/src/ir/abstract.h @@ -44,6 +44,7 @@ enum Op { Or, Xor, // Relational + EqZ, Eq, Ne, LtS, @@ -62,10 +63,22 @@ enum Op { inline UnaryOp getUnary(Type type, Op op) { switch (type.getSingle()) { case Type::i32: { - return InvalidUnary; + switch (op) { + case EqZ: + return EqZInt32; + default: + return InvalidUnary; + } + break; } case Type::i64: { - return InvalidUnary; + switch (op) { + case EqZ: + return EqZInt64; + default: + return InvalidUnary; + } + break; } case Type::f32: { switch (op) { |