Skip to content

Commit bb17db3

Browse files
authored
Fix assertion failure in TupleOptimization (#7629)
We previously counted a local use for all `local.tee` operands to `tuple.extract`, even if the `local.tee` was unreachable and had a non-tuple local. This led to an assertion failure later. Fix the issue by disregarding `local.tee` operands of `tuple.extract` if they don't have tuple locals.
1 parent da7ed11 commit bb17db3

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/passes/TupleOptimization.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,11 @@ struct TupleOptimization : public WalkerPass<PostWalker<TupleOptimization>> {
150150

151151
void visitTupleExtract(TupleExtract* curr) {
152152
// We need the input to be a local, either from a tee or a get.
153-
if (auto* set = curr->tuple->dynCast<LocalSet>()) {
154-
validUses[set->index]++;
153+
if (auto* tee = curr->tuple->dynCast<LocalSet>()) {
154+
// The tee might not be of a tuple local if it is unreachable.
155+
if (getFunction()->getLocalType(tee->index).isTuple()) {
156+
validUses[tee->index]++;
157+
}
155158
} else if (auto* get = curr->tuple->dynCast<LocalGet>()) {
156159
validUses[get->index]++;
157160
}

test/lit/passes/tuple-optimization.wast

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,4 +1064,23 @@
10641064
)
10651065
)
10661066
)
1067+
1068+
;; CHECK: (func $unreachable.tuple.extract (type $3) (result i32)
1069+
;; CHECK-NEXT: (local $tuple (tuple i32 i64))
1070+
;; CHECK-NEXT: (local $non-tuple i32)
1071+
;; CHECK-NEXT: (tuple.extract 2 0
1072+
;; CHECK-NEXT: (local.tee $non-tuple
1073+
;; CHECK-NEXT: (unreachable)
1074+
;; CHECK-NEXT: )
1075+
;; CHECK-NEXT: )
1076+
;; CHECK-NEXT: )
1077+
(func $unreachable.tuple.extract (result i32)
1078+
(local $tuple (tuple i32 i64))
1079+
(local $non-tuple i32)
1080+
(tuple.extract 2 0
1081+
(local.tee $non-tuple
1082+
(unreachable)
1083+
)
1084+
)
1085+
)
10671086
)

0 commit comments

Comments
 (0)