summaryrefslogtreecommitdiff
path: root/src/passes/Asyncify.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/Asyncify.cpp')
-rw-r--r--src/passes/Asyncify.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/passes/Asyncify.cpp b/src/passes/Asyncify.cpp
index 2aca16942..1bbc89435 100644
--- a/src/passes/Asyncify.cpp
+++ b/src/passes/Asyncify.cpp
@@ -1304,10 +1304,9 @@ private:
if (!relevantLiveLocals.count(i)) {
continue;
}
- const auto& types = func->getLocalType(i).expand();
+ auto localType = func->getLocalType(i);
SmallVector<Expression*, 1> loads;
- for (Index j = 0; j < types.size(); j++) {
- auto type = types[j];
+ for (auto& type : localType) {
auto size = type.getByteSize();
assert(size % STACK_ALIGN == 0);
// TODO: higher alignment?
@@ -1323,7 +1322,7 @@ private:
Expression* load;
if (loads.size() == 1) {
load = loads[0];
- } else if (types.size() > 1) {
+ } else if (localType.size() > 1) {
load = builder->makeTupleMake(std::move(loads));
} else {
WASM_UNREACHABLE("Unexpected empty type");
@@ -1350,12 +1349,11 @@ private:
continue;
}
auto localType = func->getLocalType(i);
- const auto& types = localType.expand();
- for (Index j = 0; j < types.size(); j++) {
- auto type = types[j];
+ size_t j = 0;
+ for (auto& type : localType) {
auto size = type.getByteSize();
Expression* localGet = builder->makeLocalGet(i, localType);
- if (types.size() > 1) {
+ if (localType.size() > 1) {
localGet = builder->makeTupleExtract(localGet, j);
}
assert(size % STACK_ALIGN == 0);
@@ -1368,6 +1366,7 @@ private:
localGet,
type));
offset += size;
+ ++j;
}
}
block->list.push_back(builder->makeIncStackPos(offset));