summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/OptimizeInstructions.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp
index e48eecb72..c9e4d7ff5 100644
--- a/src/passes/OptimizeInstructions.cpp
+++ b/src/passes/OptimizeInstructions.cpp
@@ -2934,6 +2934,10 @@ private:
}
Expression* optimizeMemoryFill(MemoryFill* memFill) {
+ if (memFill->type == Type::unreachable) {
+ return nullptr;
+ }
+
if (!memFill->size->is<Const>()) {
return nullptr;
}
@@ -3015,19 +3019,21 @@ private:
Type::v128);
} else {
// { i64.store(d, C', 0), i64.store(d, C', 8) }
+ auto destType = memFill->dest->type;
+ Index tempLocal = builder.addVar(getFunction(), destType);
return builder.makeBlock({
builder.makeStore(
8,
offset,
align,
- memFill->dest,
+ builder.makeLocalTee(tempLocal, memFill->dest, destType),
builder.makeConst<uint64_t>(value * 0x0101010101010101ULL),
Type::i64),
builder.makeStore(
8,
offset + 8,
align,
- memFill->dest,
+ builder.makeLocalGet(tempLocal, destType),
builder.makeConst<uint64_t>(value * 0x0101010101010101ULL),
Type::i64),
});