summaryrefslogtreecommitdiff
path: root/src/ir/abstract.h
diff options
context:
space:
mode:
authorMax Graey <maxgraey@gmail.com>2020-07-22 20:45:47 +0300
committerGitHub <noreply@github.com>2020-07-22 10:45:47 -0700
commita097820b6f0d2bc4d31ace2764f07bfa17c2cad8 (patch)
treeb2396986d287bd71f321a4513342ae4f3523e565 /src/ir/abstract.h
parent86362be31f1ae2d65e03fcc28bbf6526e48242f7 (diff)
downloadbinaryen-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.h17
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) {