summaryrefslogtreecommitdiff
path: root/src/passes/Bysyncify.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/Bysyncify.cpp')
-rw-r--r--src/passes/Bysyncify.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/passes/Bysyncify.cpp b/src/passes/Bysyncify.cpp
index 416869194..5e2f73e5c 100644
--- a/src/passes/Bysyncify.cpp
+++ b/src/passes/Bysyncify.cpp
@@ -658,7 +658,10 @@ private:
return iff;
}
auto conditionTemp = builder->addVar(func, i32);
- iff->condition = builder->makeLocalTee(conditionTemp, iff->condition);
+ // TODO: can avoid pre if the condition is a get or a const
+ auto* pre =
+ makeMaybeSkip(builder->makeLocalSet(conditionTemp, iff->condition));
+ iff->condition = builder->makeLocalGet(conditionTemp, i32);
iff->condition = builder->makeBinary(
OrInt32, iff->condition, builder->makeStateCheck(State::Rewinding));
iff->ifTrue = process(iff->ifTrue);
@@ -674,7 +677,7 @@ private:
builder->makeStateCheck(State::Rewinding)),
process(otherArm));
otherIf->finalize();
- return builder->makeSequence(iff, otherIf);
+ return builder->makeBlock({pre, iff, otherIf});
} else if (auto* loop = curr->dynCast<Loop>()) {
loop->body = process(loop->body);
return loop;