summaryrefslogtreecommitdiff
path: root/src/passes
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes')
-rw-r--r--src/passes/DeadCodeElimination.cpp12
-rw-r--r--src/passes/MemoryPacking.cpp5
-rw-r--r--src/passes/Print.cpp37
-rw-r--r--src/passes/RemoveUnusedModuleElements.cpp7
-rw-r--r--src/passes/Vacuum.cpp3
5 files changed, 29 insertions, 35 deletions
diff --git a/src/passes/DeadCodeElimination.cpp b/src/passes/DeadCodeElimination.cpp
index 9e2e194cb..4215de3f8 100644
--- a/src/passes/DeadCodeElimination.cpp
+++ b/src/passes/DeadCodeElimination.cpp
@@ -315,8 +315,10 @@ struct DeadCodeElimination
DELEGATE(Drop);
case Expression::Id::ReturnId:
DELEGATE(Return);
- case Expression::Id::HostId:
- DELEGATE(Host);
+ case Expression::Id::MemorySizeId:
+ DELEGATE(MemorySize);
+ case Expression::Id::MemoryGrowId:
+ DELEGATE(MemoryGrow);
case Expression::Id::NopId:
DELEGATE(Nop);
case Expression::Id::UnreachableId:
@@ -519,7 +521,11 @@ struct DeadCodeElimination
blockifyReachableOperands({curr->value}, curr->type);
}
- void visitHost(Host* curr) { handleCall(curr); }
+ void visitMemorySize(MemorySize* curr) {}
+
+ void visitMemoryGrow(MemoryGrow* curr) {
+ blockifyReachableOperands({curr->delta}, curr->type);
+ }
void visitFunction(Function* curr) { assert(reachableBreaks.size() == 0); }
};
diff --git a/src/passes/MemoryPacking.cpp b/src/passes/MemoryPacking.cpp
index 1a1e87502..eac7fb7f0 100644
--- a/src/passes/MemoryPacking.cpp
+++ b/src/passes/MemoryPacking.cpp
@@ -77,9 +77,8 @@ const size_t DATA_DROP_SIZE = 3;
namespace {
Expression* makeShiftedMemorySize(Builder& builder) {
- return builder.makeBinary(ShlInt32,
- builder.makeHost(MemorySize, Name(), {}),
- builder.makeConst(int32_t(16)));
+ return builder.makeBinary(
+ ShlInt32, builder.makeMemorySize(), builder.makeConst(int32_t(16)));
}
} // anonymous namespace
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index 15ab97098..916615e07 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -1430,16 +1430,8 @@ struct PrintExpressionContents
}
void visitDrop(Drop* curr) { printMedium(o, "drop"); }
void visitReturn(Return* curr) { printMedium(o, "return"); }
- void visitHost(Host* curr) {
- switch (curr->op) {
- case MemorySize:
- printMedium(o, "memory.size");
- break;
- case MemoryGrow:
- printMedium(o, "memory.grow");
- break;
- }
- }
+ void visitMemorySize(MemorySize* curr) { printMedium(o, "memory.size"); }
+ void visitMemoryGrow(MemoryGrow* curr) { printMedium(o, "memory.grow"); }
void visitRefNull(RefNull* curr) {
printMedium(o, "ref.null ");
o << curr->type.getHeapType();
@@ -1577,7 +1569,9 @@ struct PrintSExpression : public OverriddenVisitor<PrintSExpression> {
o << ')';
}
void printFullLine(Expression* expression) {
- !minify && doIndent(o, indent);
+ if (!minify) {
+ doIndent(o, indent);
+ }
if (full) {
o << "[" << expression->type << "] ";
}
@@ -1945,20 +1939,17 @@ struct PrintSExpression : public OverriddenVisitor<PrintSExpression> {
printFullLine(curr->value);
decIndent();
}
- void visitHost(Host* curr) {
+ void visitMemorySize(MemorySize* curr) {
o << '(';
PrintExpressionContents(currFunction, o).visit(curr);
- switch (curr->op) {
- case MemoryGrow: {
- incIndent();
- printFullLine(curr->operands[0]);
- decIndent();
- break;
- }
- case MemorySize: {
- o << ')';
- }
- }
+ o << ')';
+ }
+ void visitMemoryGrow(MemoryGrow* curr) {
+ o << '(';
+ PrintExpressionContents(currFunction, o).visit(curr);
+ incIndent();
+ printFullLine(curr->delta);
+ decIndent();
}
void visitRefNull(RefNull* curr) {
o << '(';
diff --git a/src/passes/RemoveUnusedModuleElements.cpp b/src/passes/RemoveUnusedModuleElements.cpp
index 21cbc5e5b..3795022c2 100644
--- a/src/passes/RemoveUnusedModuleElements.cpp
+++ b/src/passes/RemoveUnusedModuleElements.cpp
@@ -111,11 +111,8 @@ struct ReachabilityAnalyzer : public PostWalker<ReachabilityAnalyzer> {
void visitDataDrop(DataDrop* curr) { usesMemory = true; }
void visitMemoryCopy(MemoryCopy* curr) { usesMemory = true; }
void visitMemoryFill(MemoryFill* curr) { usesMemory = true; }
- void visitHost(Host* curr) {
- if (curr->op == MemorySize || curr->op == MemoryGrow) {
- usesMemory = true;
- }
- }
+ void visitMemorySize(MemorySize* curr) { usesMemory = true; }
+ void visitMemoryGrow(MemoryGrow* curr) { usesMemory = true; }
void visitRefFunc(RefFunc* curr) {
if (reachable.count(
ModuleElement(ModuleElementKind::Function, curr->func)) == 0) {
diff --git a/src/passes/Vacuum.cpp b/src/passes/Vacuum.cpp
index 94537619c..618a198e5 100644
--- a/src/passes/Vacuum.cpp
+++ b/src/passes/Vacuum.cpp
@@ -92,7 +92,8 @@ struct Vacuum : public WalkerPass<ExpressionStackWalker<Vacuum>> {
case Expression::Id::StoreId:
case Expression::Id::ReturnId:
case Expression::Id::GlobalSetId:
- case Expression::Id::HostId:
+ case Expression::Id::MemorySizeId:
+ case Expression::Id::MemoryGrowId:
case Expression::Id::UnreachableId:
return curr; // always needed