diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-02-14 15:31:40 -0800 |
---|---|---|
committer | Alon Zakai (kripken) <alonzakai@gmail.com> | 2017-02-16 22:45:41 -0800 |
commit | 63230c06a8d98f4326de5d1a2ef6e908ed6a5945 (patch) | |
tree | e42ea7610317dacfa12d2d4d62e25c36cf863e7d /src | |
parent | 13f9265b9632f887e6c22a024c4c4d8ded187dd1 (diff) | |
download | binaryen-63230c06a8d98f4326de5d1a2ef6e908ed6a5945.tar.gz binaryen-63230c06a8d98f4326de5d1a2ef6e908ed6a5945.tar.bz2 binaryen-63230c06a8d98f4326de5d1a2ef6e908ed6a5945.zip |
finish PickLoadSigns pass
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/PickLoadSigns.cpp | 15 | ||||
-rw-r--r-- | src/passes/pass.cpp | 3 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/passes/PickLoadSigns.cpp b/src/passes/PickLoadSigns.cpp index afd7262f5..6e44fddfe 100644 --- a/src/passes/PickLoadSigns.cpp +++ b/src/passes/PickLoadSigns.cpp @@ -66,8 +66,9 @@ struct PickLoadSigns : public WalkerPass<ExpressionStackWalker<PickLoadSigns, Vi void visitGetLocal(GetLocal* curr) { // this is a use. check from the context what it is, signed or unsigned, etc. + auto& usage = usages[curr->index]; + usage.totalUsages++; if (expressionStack.size() >= 2) { - auto& usage = usages[curr->index]; auto* parent = expressionStack[expressionStack.size() - 2]; if (Properties::getZeroExtValue(parent)) { auto bits = Properties::getZeroExtBits(parent); @@ -77,18 +78,16 @@ struct PickLoadSigns : public WalkerPass<ExpressionStackWalker<PickLoadSigns, Vi usage.unsignedBits = 0; } usage.unsignedUsages++; - usage.totalUsages++; } else if (expressionStack.size() >= 3) { auto* grandparent = expressionStack[expressionStack.size() - 3]; if (Properties::getSignExtValue(grandparent)) { auto bits = Properties::getSignExtBits(grandparent); - if (usage.unsignedUsages == 0) { - usage.unsignedBits = bits; - } else if (usage.unsignedBits != bits) { - usage.unsignedBits = 0; + if (usage.signedUsages == 0) { + usage.signedBits = bits; + } else if (usage.signedBits != bits) { + usage.signedBits = 0; } - usage.unsignedUsages++; - usage.totalUsages++; + usage.signedUsages++; } } } diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index 2741e200a..df98590c5 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -113,6 +113,9 @@ void PassRunner::addDefaultFunctionOptimizationPasses() { add("remove-unused-brs"); add("remove-unused-names"); add("optimize-instructions"); + if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { + add("pick-load-signs"); + } add("precompute"); if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { add("code-pushing"); |