summaryrefslogtreecommitdiff
path: root/src/passes/param-utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/param-utils.cpp')
-rw-r--r--src/passes/param-utils.cpp18
1 files changed, 3 insertions, 15 deletions
diff --git a/src/passes/param-utils.cpp b/src/passes/param-utils.cpp
index ae641fd26..cf7873dc0 100644
--- a/src/passes/param-utils.cpp
+++ b/src/passes/param-utils.cpp
@@ -200,25 +200,14 @@ SortedVector applyConstantValues(const std::vector<Function*>& funcs,
auto numParams = first->getNumParams();
for (Index i = 0; i < numParams; i++) {
PossibleConstantValues value;
-
- // Processes one operand.
- auto processOperand = [&](Expression* operand) {
- if (auto* c = operand->dynCast<Const>()) {
- value.note(c->value);
- return;
- }
- // TODO: refnull, immutable globals, etc.
- // Not a constant, give up
- value.noteUnknown();
- };
for (auto* call : calls) {
- processOperand(call->operands[i]);
+ value.note(call->operands[i], *module);
if (!value.isConstant()) {
break;
}
}
for (auto* call : callRefs) {
- processOperand(call->operands[i]);
+ value.note(call->operands[i], *module);
if (!value.isConstant()) {
break;
}
@@ -232,8 +221,7 @@ SortedVector applyConstantValues(const std::vector<Function*>& funcs,
Builder builder(*module);
for (auto* func : funcs) {
func->body = builder.makeSequence(
- builder.makeLocalSet(i, builder.makeConst(value.getConstantLiteral())),
- func->body);
+ builder.makeLocalSet(i, value.makeExpression(*module)), func->body);
}
optimized.insert(i);
}