summaryrefslogtreecommitdiff
path: root/src/ir/memory-utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir/memory-utils.h')
-rw-r--r--src/ir/memory-utils.h40
1 files changed, 1 insertions, 39 deletions
diff --git a/src/ir/memory-utils.h b/src/ir/memory-utils.h
index 3a0862cd7..9b3325329 100644
--- a/src/ir/memory-utils.h
+++ b/src/ir/memory-utils.h
@@ -29,46 +29,8 @@ namespace wasm::MemoryUtils {
// Flattens memory into a single data segment, or no segment. If there is
// a segment, it starts at 0.
-// If ensuredSegmentSize is provided, then a segment is always emitted,
-// and of at least that size.
// Returns true if successful (e.g. relocatable segments cannot be flattened).
-inline bool flatten(Memory& memory,
- Index ensuredSegmentSize = 0,
- Module* module = nullptr) {
- if (memory.segments.size() == 0) {
- if (ensuredSegmentSize > 0) {
- assert(module); // must provide a module if ensuring a size.
- Builder builder(*module);
- memory.segments.emplace_back(builder.makeConst(int32_t(0)));
- memory.segments[0].data.resize(ensuredSegmentSize);
- }
- return true;
- }
- std::vector<char> data;
- data.resize(ensuredSegmentSize);
- for (auto& segment : memory.segments) {
- if (segment.isPassive) {
- return false;
- }
- auto* offset = segment.offset->dynCast<Const>();
- if (!offset) {
- return false;
- }
- }
- for (auto& segment : memory.segments) {
- auto* offset = segment.offset->dynCast<Const>();
- Index start = offset->value.getInteger();
- Index end = start + segment.data.size();
- if (end > data.size()) {
- data.resize(end);
- }
- std::copy(segment.data.begin(), segment.data.end(), data.begin() + start);
- }
- memory.segments.resize(1);
- memory.segments[0].offset->cast<Const>()->value = Literal(int32_t(0));
- memory.segments[0].data.swap(data);
- return true;
-}
+bool flatten(Module& wasm);
// Ensures that the memory exists (of minimal size).
inline void ensureExists(Memory& memory) {