summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wasm-ir-builder.h7
-rw-r--r--src/wasm/wasm-ir-builder.cpp6
2 files changed, 9 insertions, 4 deletions
diff --git a/src/wasm-ir-builder.h b/src/wasm-ir-builder.h
index d6e453149..30e770e28 100644
--- a/src/wasm-ir-builder.h
+++ b/src/wasm-ir-builder.h
@@ -507,16 +507,19 @@ private:
// its stack.
std::unordered_map<Name, std::vector<Index>> labelDepths;
- Name makeFresh(Name label) {
+ Name makeFresh(Name label, Index hint = 0) {
return Names::getValidName(
label,
[&](Name candidate) {
return labelDepths.insert({candidate, {}}).second;
},
- 0,
+ hint,
"");
}
+ Index blockHint = 0;
+ Index labelHint = 0;
+
void pushScope(ScopeCtx scope) {
if (auto label = scope.getOriginalLabel()) {
// Assign a fresh label to the scope, if necessary.
diff --git a/src/wasm/wasm-ir-builder.cpp b/src/wasm/wasm-ir-builder.cpp
index 5253c91ee..a73c7f2ac 100644
--- a/src/wasm/wasm-ir-builder.cpp
+++ b/src/wasm/wasm-ir-builder.cpp
@@ -987,6 +987,8 @@ Result<> IRBuilder::visitEnd() {
EHUtils::handleBlockNestedPops(func, wasm);
}
this->func = nullptr;
+ blockHint = 0;
+ labelHint = 0;
} else if (auto* block = scope.getBlock()) {
assert(*expr == block);
block->name = scope.label;
@@ -1073,9 +1075,9 @@ Result<Name> IRBuilder::getLabelName(Index label, bool forDelegate) {
if (!scopeLabel) {
// The scope does not already have a name, so we need to create one.
if ((*scope)->getBlock()) {
- scopeLabel = makeFresh("block");
+ scopeLabel = makeFresh("block", blockHint++);
} else {
- scopeLabel = makeFresh("label");
+ scopeLabel = makeFresh("label", labelHint++);
}
}
if (!forDelegate) {