diff options
Diffstat (limited to 'src/passes/Asyncify.cpp')
-rw-r--r-- | src/passes/Asyncify.cpp | 15 |
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)); |