summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wasm/wasm-ir-builder.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/wasm/wasm-ir-builder.cpp b/src/wasm/wasm-ir-builder.cpp
index 6322a5786..91e990180 100644
--- a/src/wasm/wasm-ir-builder.cpp
+++ b/src/wasm/wasm-ir-builder.cpp
@@ -929,13 +929,18 @@ Result<> IRBuilder::visitEnd() {
auto maybeWrapForLabel = [&](Expression* curr) -> Expression* {
bool isTry = scope.getTry() || scope.getCatch() || scope.getCatchAll();
auto& label = isTry ? scope.branchLabel : scope.label;
- if (label) {
- return builder.makeBlock(label,
- {curr},
- scope.labelUsed ? originalScopeType
- : scope.getResultType());
+ if (!label) {
+ return curr;
}
- return curr;
+ auto blockType =
+ scope.labelUsed ? originalScopeType : scope.getResultType();
+ // We can re-use unnamed blocks instead of wrapping them.
+ if (auto* block = curr->dynCast<Block>(); block && !block->name) {
+ block->name = label;
+ block->type = blockType;
+ return block;
+ }
+ return builder.makeBlock(label, {curr}, blockType);
};
if (auto* func = scope.getFunction()) {