diff options
Diffstat (limited to 'src/passes/LocalSubtyping.cpp')
-rw-r--r-- | src/passes/LocalSubtyping.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/passes/LocalSubtyping.cpp b/src/passes/LocalSubtyping.cpp index 57119a253..a8174aa2d 100644 --- a/src/passes/LocalSubtyping.cpp +++ b/src/passes/LocalSubtyping.cpp @@ -124,7 +124,8 @@ struct LocalSubtyping : public WalkerPass<PostWalker<LocalSubtyping>> { // Find all the types assigned to the var, and compute the optimal LUB. LUBFinder lub; for (auto* set : setsForLocal[i]) { - if (lub.note(set->value) == oldType) { + lub.noteUpdatableExpression(set->value); + if (lub.getBestPossible() == oldType) { break; } } @@ -133,7 +134,7 @@ struct LocalSubtyping : public WalkerPass<PostWalker<LocalSubtyping>> { continue; } - auto newType = lub.get(); + auto newType = lub.getBestPossible(); assert(newType != Type::none); // in valid wasm there must be a LUB // Remove non-nullability if we disallow that in locals. @@ -157,6 +158,7 @@ struct LocalSubtyping : public WalkerPass<PostWalker<LocalSubtyping>> { func->vars[i - varBase] = newType; more = true; optimized = true; + lub.updateNulls(); // Update gets and tees. for (auto* get : getsForLocal[i]) { |