Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions src/binaryen-c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5557,7 +5557,7 @@ BinaryenIndex BinaryenGetNumElementSegments(BinaryenModuleRef module) {
}
BinaryenExpressionRef
BinaryenElementSegmentGetOffset(BinaryenElementSegmentRef elem) {
if (((ElementSegment*)elem)->table.isNull()) {
if (((ElementSegment*)elem)->isPassive()) {
Fatal() << "elem segment is passive.";
}
return ((ElementSegment*)elem)->offset;
Expand Down Expand Up @@ -5611,12 +5611,12 @@ void BinaryenSetMemory(BinaryenModuleRef module,
for (BinaryenIndex i = 0; i < numSegments; i++) {
auto explicitName = segmentNames && segmentNames[i];
auto name = explicitName ? Name(segmentNames[i]) : Name::fromInt(i);
auto curr = Builder::makeDataSegment(name,
memory->name,
segmentPassives[i],
(Expression*)segmentOffsets[i],
segmentDatas[i],
segmentSizes[i]);
auto curr =
Builder::makeDataSegment(name,
segmentPassives[i] ? Name() : memory->name,
(Expression*)segmentOffsets[i],
segmentDatas[i],
segmentSizes[i]);
curr->hasExplicitName = explicitName;
((Module*)module)->addDataSegment(std::move(curr));
}
Expand Down Expand Up @@ -5766,7 +5766,7 @@ size_t BinaryenGetDataSegmentByteLength(BinaryenDataSegmentRef segment) {
return ((DataSegment*)segment)->data.size();
}
bool BinaryenGetDataSegmentPassive(BinaryenDataSegmentRef segment) {
return ((DataSegment*)segment)->isPassive;
return ((DataSegment*)segment)->isPassive();
}
void BinaryenCopyDataSegmentData(BinaryenDataSegmentRef segment, char* buffer) {
std::copy(((DataSegment*)segment)->data.cbegin(),
Expand All @@ -5783,12 +5783,12 @@ void BinaryenAddDataSegment(BinaryenModuleRef module,
auto* wasm = (Module*)module;
auto name =
segmentName ? Name(segmentName) : Name::fromInt(wasm->dataSegments.size());
auto curr = Builder::makeDataSegment(name,
memoryName ? memoryName : "0",
segmentPassive,
(Expression*)segmentOffset,
segmentData,
segmentSize);
auto curr = Builder::makeDataSegment(
name,
segmentPassive ? Name() : (memoryName ? memoryName : "0"),
(Expression*)segmentOffset,
segmentData,
segmentSize);
curr->hasExplicitName = segmentName ? true : false;
wasm->addDataSegment(std::move(curr));
}
Expand Down Expand Up @@ -6333,7 +6333,7 @@ void BinaryenElementSegmentSetTable(BinaryenElementSegmentRef elem,
((ElementSegment*)elem)->table = table;
}
bool BinaryenElementSegmentIsPassive(BinaryenElementSegmentRef elem) {
return ((ElementSegment*)elem)->table.isNull();
return ((ElementSegment*)elem)->isPassive();
}

//
Expand Down
2 changes: 1 addition & 1 deletion src/ir/memory-utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ bool flatten(Module& wasm) {

std::vector<char> data;
for (auto& segment : dataSegments) {
if (segment->isPassive) {
if (segment->isPassive()) {
return false;
}
auto* offset = segment->offset->dynCast<Const>();
Expand Down
2 changes: 1 addition & 1 deletion src/ir/memory-utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ ensureLimitedSegments(Module& module,
numDynamic++;
}
}
hasPassiveSegments |= segment->isPassive;
hasPassiveSegments |= segment->isPassive();
}

if (hasPassiveSegments) {
Expand Down
4 changes: 2 additions & 2 deletions src/ir/module-splitting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -743,12 +743,12 @@ void ModuleSplitter::shareImportableItems() {
// module, it can't.
walkSegments(collector, &module);
for (auto& segment : module.dataSegments) {
if (segment->memory.is()) {
if (segment->isActive()) {
used.memories.insert(segment->memory);
}
}
for (auto& segment : module.elementSegments) {
if (segment->table.is()) {
if (segment->isActive()) {
used.tables.insert(segment->table);
}
}
Expand Down
5 changes: 2 additions & 3 deletions src/ir/module-utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ ElementSegment* copyElementSegment(const ElementSegment* segment, Module& out) {
return out.addElementSegment(std::move(ret));
};

if (segment->table.isNull()) {
if (segment->isPassive()) {
return copy(std::make_unique<ElementSegment>());
} else {
auto offset = ExpressionManipulator::copy(segment->offset, out);
Expand Down Expand Up @@ -188,8 +188,7 @@ DataSegment* copyDataSegment(const DataSegment* segment, Module& out) {
ret->name = segment->name;
ret->hasExplicitName = segment->hasExplicitName;
ret->memory = segment->memory;
ret->isPassive = segment->isPassive;
if (!segment->isPassive) {
if (segment->isActive()) {
auto offset = ExpressionManipulator::copy(segment->offset, out);
ret->offset = offset;
}
Expand Down
6 changes: 3 additions & 3 deletions src/ir/module-utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ template<typename T> inline void iterDefinedMemories(Module& wasm, T visitor) {
template<typename T>
inline void iterMemorySegments(Module& wasm, Name memory, T visitor) {
for (auto& segment : wasm.dataSegments) {
if (!segment->isPassive && segment->memory == memory) {
if (segment->isActive() && segment->memory == memory) {
visitor(segment.get());
}
}
Expand All @@ -104,7 +104,7 @@ inline void iterMemorySegments(Module& wasm, Name memory, T visitor) {
template<typename T>
inline void iterActiveDataSegments(Module& wasm, T visitor) {
for (auto& segment : wasm.dataSegments) {
if (!segment->isPassive) {
if (segment->isActive()) {
visitor(segment.get());
}
}
Expand Down Expand Up @@ -142,7 +142,7 @@ inline void iterTableSegments(Module& wasm, Name table, T visitor) {
template<typename T>
inline void iterActiveElementSegments(Module& wasm, T visitor) {
for (auto& segment : wasm.elementSegments) {
if (segment->table.is()) {
if (segment->isActive()) {
visitor(segment.get());
}
}
Expand Down
1 change: 0 additions & 1 deletion src/parser/context-decls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,6 @@ Result<> ParseDeclsCtx::addImplicitData(DataStringT&& data) {
auto& mem = *wasm.memories.back();
auto d = std::make_unique<DataSegment>();
d->memory = mem.name;
d->isPassive = false;
d->offset = Builder(wasm).makeConstPtr(0, mem.addressType);
d->data = std::move(data);
d->name = Names::getValidDataSegmentName(wasm, "implicit-data");
Expand Down
3 changes: 1 addition & 2 deletions src/parser/context-defs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ Result<> ParseDefsCtx::addData(
Name, Name* mem, std::optional<ExprT> offset, DataStringT, Index pos) {
auto& d = wasm.dataSegments[index];
if (offset) {
d->isPassive = false;
d->offset = *offset;
if (mem) {
d->memory = *mem;
Expand All @@ -118,7 +117,7 @@ Result<> ParseDefsCtx::addData(
return in.err(pos, "active data segment with no memory");
}
} else {
d->isPassive = true;
d->memory = Name();
}
return Ok{};
}
Expand Down
4 changes: 2 additions & 2 deletions src/passes/LLVMMemoryCopyFillLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,13 @@ struct LLVMMemoryCopyFillLowering

// Check for the presence of any passive data or table segments.
for (auto& segment : module->dataSegments) {
if (segment->isPassive) {
if (segment->isPassive()) {
Fatal() << "memory.copy lowering should only be run on modules with "
"no passive segments";
}
}
for (auto& segment : module->elementSegments) {
if (!segment->table.is()) {
if (segment->isPassive()) {
Fatal() << "memory.copy lowering should only be run on modules with"
" no passive segments";
}
Expand Down
4 changes: 2 additions & 2 deletions src/passes/Memory64Lowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ struct Memory64Lowering : public WalkerPass<PostWalker<Memory64Lowering>> {
auto& module = *getModule();

// passive segments don't have any offset to adjust
if (segment->isPassive || !module.getMemory(segment->memory)->is64()) {
if (segment->isPassive() || !module.getMemory(segment->memory)->is64()) {
return;
}

Expand Down Expand Up @@ -300,7 +300,7 @@ struct Memory64Lowering : public WalkerPass<PostWalker<Memory64Lowering>> {
auto& module = *getModule();

// Passive segments don't have any offset to update.
if (segment->table.isNull() || !module.getTable(segment->table)->is64()) {
if (segment->isPassive() || !module.getTable(segment->table)->is64()) {
return;
}

Expand Down
21 changes: 10 additions & 11 deletions src/passes/MemoryPacking.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ bool MemoryPacking::canOptimize(
// Check if it is ok for us to optimize.
Address maxAddress = 0;
for (auto& segment : dataSegments) {
if (!segment->isPassive) {
if (segment->isActive()) {
auto* c = segment->offset->dynCast<Const>();
// If an active segment has a non-constant offset, then what gets written
// cannot be known until runtime. That is, the active segments are written
Expand Down Expand Up @@ -250,7 +250,7 @@ bool MemoryPacking::canOptimize(
// TODO: optimize in the trampling case
DisjointSpans space;
for (auto& segment : dataSegments) {
if (!segment->isPassive) {
if (segment->isActive()) {
auto* c = segment->offset->cast<Const>();
Address start = c->value.getUnsigned();
DisjointSpans::Span span{start, start + segment->data.size()};
Expand Down Expand Up @@ -283,7 +283,7 @@ bool MemoryPacking::canSplit(const std::unique_ptr<DataSegment>& segment,

for (auto* referrer : referrers) {
if (auto* curr = referrer->dynCast<MemoryInit>()) {
if (segment->isPassive) {
if (segment->isPassive()) {
// Do not try to split if there is a nonconstant offset or size
if (!curr->offset->is<Const>() || !curr->size->is<Const>()) {
return false;
Expand All @@ -296,7 +296,7 @@ bool MemoryPacking::canSplit(const std::unique_ptr<DataSegment>& segment,
}

// Active segments can only be split if they have constant offsets
return segment->isPassive || segment->offset->is<Const>();
return segment->isPassive() || segment->offset->is<Const>();
}

void MemoryPacking::calculateRanges(Module* module,
Expand Down Expand Up @@ -351,7 +351,7 @@ void MemoryPacking::calculateRanges(Module* module,
// entire segment and that all its arguments are constants. These assumptions
// are true of all memory.inits generated by the tools.
size_t threshold = 0;
if (segment->isPassive) {
if (segment->isPassive()) {
// Passive segment metadata size
threshold += 2;
// Zeroes on the edge do not increase the number of segments or data.drops,
Expand Down Expand Up @@ -450,7 +450,7 @@ void MemoryPacking::optimizeSegmentOps(Module* module) {
void visitMemoryInit(MemoryInit* curr) {
Builder builder(*getModule());
auto* segment = getModule()->getDataSegment(curr->segment);
size_t maxRuntimeSize = segment->isPassive ? segment->data.size() : 0;
size_t maxRuntimeSize = segment->isPassive() ? segment->data.size() : 0;
bool mustNop = false;
bool mustTrap = false;
auto* offset = curr->offset->dynCast<Const>();
Expand Down Expand Up @@ -483,7 +483,7 @@ void MemoryPacking::optimizeSegmentOps(Module* module) {
builder.makeDrop(curr->size),
builder.makeUnreachable()));
needsRefinalizing = true;
} else if (!segment->isPassive) {
} else if (segment->isActive()) {
// trap if (dest > memory.size | offset | size) != 0
replaceCurrent(builder.makeIf(
builder.makeBinary(
Expand All @@ -494,7 +494,7 @@ void MemoryPacking::optimizeSegmentOps(Module* module) {
}
}
void visitDataDrop(DataDrop* curr) {
if (!getModule()->getDataSegment(curr->segment)->isPassive) {
if (getModule()->getDataSegment(curr->segment)->isActive()) {
ExpressionManipulator::nop(curr);
}
}
Expand Down Expand Up @@ -569,7 +569,7 @@ void MemoryPacking::dropUnusedSegments(
bool used = false;
auto referrersIt = referrers.find(segments[i]->name);
bool hasReferrers = referrersIt != referrers.end();
if (segments[i]->isPassive) {
if (segments[i]->isPassive()) {
if (hasReferrers) {
for (auto* referrer : referrersIt->second) {
if (!referrer->is<DataDrop>()) {
Expand Down Expand Up @@ -623,7 +623,7 @@ void MemoryPacking::createSplitSegments(
continue;
}
Expression* offset = nullptr;
if (!segment->isPassive) {
if (segment->isActive()) {
if (auto* c = segment->offset->dynCast<Const>()) {
if (c->value.type == Type::i32) {
offset = addStartAndOffset<uint32_t>(
Expand Down Expand Up @@ -663,7 +663,6 @@ void MemoryPacking::createSplitSegments(
}
auto curr = Builder::makeDataSegment(name,
segment->memory,
segment->isPassive,
offset,
segment->data.data() + range.start,
range.end - range.start);
Expand Down
2 changes: 1 addition & 1 deletion src/passes/PostEmscripten.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ static void calcSegmentOffsets(Module& wasm,
}
for (unsigned i = 0; i < wasm.dataSegments.size(); ++i) {
auto& segment = wasm.dataSegments[i];
if (segment->isPassive) {
if (segment->isPassive()) {
auto it = passiveOffsets.find(segment->name);
if (it != passiveOffsets.end()) {
segmentOffsets.push_back(it->second);
Expand Down
6 changes: 3 additions & 3 deletions src/passes/Print.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3443,7 +3443,7 @@ void PrintSExpression::visitElementSegment(ElementSegment* curr) {
printMedium(o, "elem ");
curr->name.print(o);

if (curr->table.is()) {
if (curr->isActive()) {
if (usesExpressions || currModule->tables.size() > 1) {
// tableuse
o << " (table ";
Expand Down Expand Up @@ -3523,7 +3523,7 @@ void PrintSExpression::visitMemory(Memory* curr) {
}

void PrintSExpression::visitDataSegment(DataSegment* curr) {
if (!curr->isPassive && !curr->offset) {
if (curr->isActive() && !curr->offset) {
// This data segment must have been created from the datacount section but
// not parsed yet. Skip it.
return;
Expand All @@ -3533,7 +3533,7 @@ void PrintSExpression::visitDataSegment(DataSegment* curr) {
printMajor(o, "data ");
curr->name.print(o);
o << ' ';
if (!curr->isPassive) {
if (curr->isActive()) {
assert(!currModule || currModule->memories.size() > 0);
if (!currModule || curr->memory != currModule->memories[0]->name) {
o << "(memory ";
Expand Down
6 changes: 3 additions & 3 deletions src/passes/RemoveUnusedModuleElements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ struct Analyzer {

void prepare() {
for (auto& elem : module->elementSegments) {
if (!elem->table) {
if (elem->isPassive()) {
continue;
}
auto& flatTableInfo = flatTableInfoMap[elem->table];
Expand Down Expand Up @@ -862,7 +862,7 @@ struct RemoveUnusedModuleElements : public Pass {
}
};
ModuleUtils::iterActiveDataSegments(*module, [&](DataSegment* segment) {
if (segment->memory.is()) {
if (segment->isActive()) {
auto* memory = module->getMemory(segment->memory);
maybeRootSegment(ModuleElementKind::DataSegment,
segment->name,
Expand All @@ -874,7 +874,7 @@ struct RemoveUnusedModuleElements : public Pass {
});
ModuleUtils::iterActiveElementSegments(
*module, [&](ElementSegment* segment) {
if (segment->table.is()) {
if (segment->isActive()) {
auto* table = module->getTable(segment->table);
maybeRootSegment(ModuleElementKind::ElementSegment,
segment->name,
Expand Down
2 changes: 1 addition & 1 deletion src/passes/SeparateDataSegments.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ struct SeparateDataSegments : public Pass {
Address base = std::stoi(baseStr);
size_t lastEnd = 0;
for (auto& seg : module->dataSegments) {
if (seg->isPassive) {
if (seg->isPassive()) {
Fatal() << "separating passive segments not implemented";
}
if (!seg->offset->is<Const>()) {
Expand Down
Loading
Loading