diff options
author | Max Graey <maxgraey@gmail.com> | 2021-08-02 16:30:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-02 13:30:26 +0000 |
commit | f35f02c1ce1b3129aa83d2dddeababd414c1ca8f (patch) | |
tree | 52b70c4193f77d63615f6571458248cf055c62a8 /src/ir/abstract.h | |
parent | 512033eed52fff82274650aca7d7374b4b305551 (diff) | |
download | binaryen-f35f02c1ce1b3129aa83d2dddeababd414c1ca8f.tar.gz binaryen-f35f02c1ce1b3129aa83d2dddeababd414c1ca8f.tar.bz2 binaryen-f35f02c1ce1b3129aa83d2dddeababd414c1ca8f.zip |
[JS] Add a new OptimizeForJS pass (#4033)
Add a new OptimizeForJS pass which contains rewriting rules specific to JavaScript.
LLVM usually lowers x != 0 && (x & (x - 1)) == 0 (isPowerOf2) to popcnt(x) == 1 which is ok for wasm and other targets but is quite expensive for JavaScript. In this PR we lower the popcnt pattern back to the isPowerOf2 pattern.
Diffstat (limited to 'src/ir/abstract.h')
-rw-r--r-- | src/ir/abstract.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/ir/abstract.h b/src/ir/abstract.h index 2308c47ba..18df7869e 100644 --- a/src/ir/abstract.h +++ b/src/ir/abstract.h @@ -29,6 +29,7 @@ enum Op { // Unary Abs, Neg, + Popcnt, // Binary Add, Sub, @@ -81,6 +82,8 @@ inline UnaryOp getUnary(Type type, Op op) { switch (op) { case EqZ: return EqZInt32; + case Popcnt: + return PopcntInt32; default: return InvalidUnary; } @@ -90,6 +93,8 @@ inline UnaryOp getUnary(Type type, Op op) { switch (op) { case EqZ: return EqZInt64; + case Popcnt: + return PopcntInt64; default: return InvalidUnary; } |