diff options
author | Alon Zakai (kripken) <alonzakai@gmail.com> | 2017-02-11 13:13:24 -0800 |
---|---|---|
committer | Alon Zakai (kripken) <alonzakai@gmail.com> | 2017-02-16 22:45:36 -0800 |
commit | 51d57932a34dd265a8c3c35a6773387e5dd7bc9e (patch) | |
tree | 0ddc232fa0e2211af0e177a508f76b86fbf0714b /src/passes/OptimizeInstructions.cpp | |
parent | 41eee37bc153a68b0f0c46162e21f825d1784499 (diff) | |
download | binaryen-51d57932a34dd265a8c3c35a6773387e5dd7bc9e.tar.gz binaryen-51d57932a34dd265a8c3c35a6773387e5dd7bc9e.tar.bz2 binaryen-51d57932a34dd265a8c3c35a6773387e5dd7bc9e.zip |
optimize sign-extends to eqz
Diffstat (limited to 'src/passes/OptimizeInstructions.cpp')
-rw-r--r-- | src/passes/OptimizeInstructions.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp index ef18ea777..561e7882c 100644 --- a/src/passes/OptimizeInstructions.cpp +++ b/src/passes/OptimizeInstructions.cpp @@ -468,6 +468,13 @@ struct OptimizeInstructions : public WalkerPass<PostWalker<OptimizeInstructions, default: {} } } + // eqz of a sign extension can be of zero-extension + if (auto* ext = getSignExt(unary->value)) { + // we are comparing a sign extend to a constant, which means we can use a cheaper zext + auto bits = getSignExtBits(unary->value); + unary->value = makeZeroExt(ext, bits); + return unary; + } } } else if (auto* set = curr->dynCast<SetGlobal>()) { // optimize out a set of a get |