summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2017-02-14 15:31:40 -0800
committerAlon Zakai (kripken) <alonzakai@gmail.com>2017-02-16 22:45:41 -0800
commit63230c06a8d98f4326de5d1a2ef6e908ed6a5945 (patch)
treee42ea7610317dacfa12d2d4d62e25c36cf863e7d /src
parent13f9265b9632f887e6c22a024c4c4d8ded187dd1 (diff)
downloadbinaryen-63230c06a8d98f4326de5d1a2ef6e908ed6a5945.tar.gz
binaryen-63230c06a8d98f4326de5d1a2ef6e908ed6a5945.tar.bz2
binaryen-63230c06a8d98f4326de5d1a2ef6e908ed6a5945.zip
finish PickLoadSigns pass
Diffstat (limited to 'src')
-rw-r--r--src/passes/PickLoadSigns.cpp15
-rw-r--r--src/passes/pass.cpp3
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");