summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/MemoryPacking.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/passes/MemoryPacking.cpp b/src/passes/MemoryPacking.cpp
index 02f53e22a..7beed9a16 100644
--- a/src/passes/MemoryPacking.cpp
+++ b/src/passes/MemoryPacking.cpp
@@ -715,8 +715,10 @@ void MemoryPacking::createReplacements(Module* module,
// Calculate dest, either as a const or as an addition to the dest local
Expression* dest;
+ Type ptrType = init->dest->type;
if (auto* c = init->dest->dynCast<Const>()) {
- dest = builder.makeConst(int32_t(c->value.geti32() + bytesWritten));
+ dest =
+ builder.makeConstPtr(c->value.getInteger() + bytesWritten, ptrType);
} else {
auto* get = builder.makeLocalGet(-1, Type::i32);
getVars.push_back(&get->index);
@@ -729,16 +731,17 @@ void MemoryPacking::createReplacements(Module* module,
// How many bytes are read from this range
size_t bytes = std::min(range.end, end) - std::max(range.start, start);
- Expression* size = builder.makeConst(int32_t(bytes));
bytesWritten += bytes;
// Create new memory.init or memory.fill
if (range.isZero) {
Expression* value = builder.makeConst(Literal::makeZero(Type::i32));
+ Expression* size = builder.makeConstPtr(bytes, ptrType);
appendResult(builder.makeMemoryFill(dest, value, size, init->memory));
} else {
size_t offsetBytes = std::max(start, range.start) - range.start;
Expression* offset = builder.makeConst(int32_t(offsetBytes));
+ Expression* size = builder.makeConst(int32_t(bytes));
appendResult(
builder.makeMemoryInit(initIndex, dest, offset, size, init->memory));
initIndex++;