summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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");