summaryrefslogtreecommitdiff
path: root/src/ir
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir')
-rw-r--r--src/ir/ExpressionAnalyzer.cpp34
-rw-r--r--src/ir/ExpressionManipulator.cpp36
-rw-r--r--src/ir/ReFinalize.cpp15
-rw-r--r--src/ir/effects.h30
-rw-r--r--src/ir/utils.h24
5 files changed, 139 insertions, 0 deletions
diff --git a/src/ir/ExpressionAnalyzer.cpp b/src/ir/ExpressionAnalyzer.cpp
index 562631420..9b0bdd007 100644
--- a/src/ir/ExpressionAnalyzer.cpp
+++ b/src/ir/ExpressionAnalyzer.cpp
@@ -237,6 +237,40 @@ template<typename T> void visitImmediates(Expression* curr, T& visitor) {
}
void visitI31New(I31New* curr) {}
void visitI31Get(I31Get* curr) { visitor.visitInt(curr->signed_); }
+ void visitRefTest(RefTest* curr) {
+ WASM_UNREACHABLE("TODO (gc): ref.test");
+ }
+ void visitRefCast(RefCast* curr) {
+ WASM_UNREACHABLE("TODO (gc): ref.cast");
+ }
+ void visitBrOnCast(BrOnCast* curr) {
+ WASM_UNREACHABLE("TODO (gc): br_on_cast");
+ }
+ void visitRttCanon(RttCanon* curr) {
+ WASM_UNREACHABLE("TODO (gc): rtt.canon");
+ }
+ void visitRttSub(RttSub* curr) { WASM_UNREACHABLE("TODO (gc): rtt.sub"); }
+ void visitStructNew(StructNew* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.new");
+ }
+ void visitStructGet(StructGet* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.get");
+ }
+ void visitStructSet(StructSet* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.set");
+ }
+ void visitArrayNew(ArrayNew* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.new");
+ }
+ void visitArrayGet(ArrayGet* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.get");
+ }
+ void visitArraySet(ArraySet* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.set");
+ }
+ void visitArrayLen(ArrayLen* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.len");
+ }
} singleton(curr, visitor);
}
diff --git a/src/ir/ExpressionManipulator.cpp b/src/ir/ExpressionManipulator.cpp
index b0616e34d..5fb98d86a 100644
--- a/src/ir/ExpressionManipulator.cpp
+++ b/src/ir/ExpressionManipulator.cpp
@@ -275,6 +275,42 @@ flexibleCopy(Expression* original, Module& wasm, CustomCopier custom) {
Expression* visitI31Get(I31Get* curr) {
return builder.makeI31Get(copy(curr->i31), curr->signed_);
}
+ Expression* visitRefTest(RefTest* curr) {
+ WASM_UNREACHABLE("TODO (gc): ref.test");
+ }
+ Expression* visitRefCast(RefCast* curr) {
+ WASM_UNREACHABLE("TODO (gc): ref.cast");
+ }
+ Expression* visitBrOnCast(BrOnCast* curr) {
+ WASM_UNREACHABLE("TODO (gc): br_on_cast");
+ }
+ Expression* visitRttCanon(RttCanon* curr) {
+ WASM_UNREACHABLE("TODO (gc): rtt.canon");
+ }
+ Expression* visitRttSub(RttSub* curr) {
+ WASM_UNREACHABLE("TODO (gc): rtt.sub");
+ }
+ Expression* visitStructNew(StructNew* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.new");
+ }
+ Expression* visitStructGet(StructGet* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.get");
+ }
+ Expression* visitStructSet(StructSet* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.set");
+ }
+ Expression* visitArrayNew(ArrayNew* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.new");
+ }
+ Expression* visitArrayGet(ArrayGet* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.get");
+ }
+ Expression* visitArraySet(ArraySet* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.set");
+ }
+ Expression* visitArrayLen(ArrayLen* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.len");
+ }
};
Copier copier(wasm, custom);
diff --git a/src/ir/ReFinalize.cpp b/src/ir/ReFinalize.cpp
index c6b3ab855..c3516be0a 100644
--- a/src/ir/ReFinalize.cpp
+++ b/src/ir/ReFinalize.cpp
@@ -143,6 +143,21 @@ void ReFinalize::visitTupleMake(TupleMake* curr) { curr->finalize(); }
void ReFinalize::visitTupleExtract(TupleExtract* curr) { curr->finalize(); }
void ReFinalize::visitI31New(I31New* curr) { curr->finalize(); }
void ReFinalize::visitI31Get(I31Get* curr) { curr->finalize(); }
+void ReFinalize::visitRefTest(RefTest* curr) { curr->finalize(); }
+void ReFinalize::visitRefCast(RefCast* curr) { curr->finalize(); }
+void ReFinalize::visitBrOnCast(BrOnCast* curr) {
+ curr->finalize();
+ WASM_UNREACHABLE("TODO (gc): br_on_cast");
+}
+void ReFinalize::visitRttCanon(RttCanon* curr) { curr->finalize(); }
+void ReFinalize::visitRttSub(RttSub* curr) { curr->finalize(); }
+void ReFinalize::visitStructNew(StructNew* curr) { curr->finalize(); }
+void ReFinalize::visitStructGet(StructGet* curr) { curr->finalize(); }
+void ReFinalize::visitStructSet(StructSet* curr) { curr->finalize(); }
+void ReFinalize::visitArrayNew(ArrayNew* curr) { curr->finalize(); }
+void ReFinalize::visitArrayGet(ArrayGet* curr) { curr->finalize(); }
+void ReFinalize::visitArraySet(ArraySet* curr) { curr->finalize(); }
+void ReFinalize::visitArrayLen(ArrayLen* curr) { curr->finalize(); }
void ReFinalize::visitFunction(Function* curr) {
// we may have changed the body from unreachable to none, which might be bad
diff --git a/src/ir/effects.h b/src/ir/effects.h
index 8199092ea..dc6c10645 100644
--- a/src/ir/effects.h
+++ b/src/ir/effects.h
@@ -507,6 +507,36 @@ struct EffectAnalyzer
void visitTupleExtract(TupleExtract* curr) {}
void visitI31New(I31New* curr) {}
void visitI31Get(I31Get* curr) {}
+ void visitRefTest(RefTest* curr) { WASM_UNREACHABLE("TODO (gc): ref.test"); }
+ void visitRefCast(RefCast* curr) { WASM_UNREACHABLE("TODO (gc): ref.cast"); }
+ void visitBrOnCast(BrOnCast* curr) {
+ WASM_UNREACHABLE("TODO (gc): br_on_cast");
+ }
+ void visitRttCanon(RttCanon* curr) {
+ WASM_UNREACHABLE("TODO (gc): rtt.canon");
+ }
+ void visitRttSub(RttSub* curr) { WASM_UNREACHABLE("TODO (gc): rtt.sub"); }
+ void visitStructNew(StructNew* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.new");
+ }
+ void visitStructGet(StructGet* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.get");
+ }
+ void visitStructSet(StructSet* curr) {
+ WASM_UNREACHABLE("TODO (gc): struct.set");
+ }
+ void visitArrayNew(ArrayNew* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.new");
+ }
+ void visitArrayGet(ArrayGet* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.get");
+ }
+ void visitArraySet(ArraySet* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.set");
+ }
+ void visitArrayLen(ArrayLen* curr) {
+ WASM_UNREACHABLE("TODO (gc): array.len");
+ }
// Helpers
diff --git a/src/ir/utils.h b/src/ir/utils.h
index 7d8b28759..c2d7645f7 100644
--- a/src/ir/utils.h
+++ b/src/ir/utils.h
@@ -162,6 +162,18 @@ struct ReFinalize
void visitTupleExtract(TupleExtract* curr);
void visitI31New(I31New* curr);
void visitI31Get(I31Get* curr);
+ void visitRefTest(RefTest* curr);
+ void visitRefCast(RefCast* curr);
+ void visitBrOnCast(BrOnCast* curr);
+ void visitRttCanon(RttCanon* curr);
+ void visitRttSub(RttSub* curr);
+ void visitStructNew(StructNew* curr);
+ void visitStructGet(StructGet* curr);
+ void visitStructSet(StructSet* curr);
+ void visitArrayNew(ArrayNew* curr);
+ void visitArrayGet(ArrayGet* curr);
+ void visitArraySet(ArraySet* curr);
+ void visitArrayLen(ArrayLen* curr);
void visitFunction(Function* curr);
@@ -234,6 +246,18 @@ struct ReFinalizeNode : public OverriddenVisitor<ReFinalizeNode> {
void visitTupleExtract(TupleExtract* curr) { curr->finalize(); }
void visitI31New(I31New* curr) { curr->finalize(); }
void visitI31Get(I31Get* curr) { curr->finalize(); }
+ void visitRefTest(RefTest* curr) { curr->finalize(); }
+ void visitRefCast(RefCast* curr) { curr->finalize(); }
+ void visitBrOnCast(BrOnCast* curr) { curr->finalize(); }
+ void visitRttCanon(RttCanon* curr) { curr->finalize(); }
+ void visitRttSub(RttSub* curr) { curr->finalize(); }
+ void visitStructNew(StructNew* curr) { curr->finalize(); }
+ void visitStructGet(StructGet* curr) { curr->finalize(); }
+ void visitStructSet(StructSet* curr) { curr->finalize(); }
+ void visitArrayNew(ArrayNew* curr) { curr->finalize(); }
+ void visitArrayGet(ArrayGet* curr) { curr->finalize(); }
+ void visitArraySet(ArraySet* curr) { curr->finalize(); }
+ void visitArrayLen(ArrayLen* curr) { curr->finalize(); }
void visitExport(Export* curr) { WASM_UNREACHABLE("unimp"); }
void visitGlobal(Global* curr) { WASM_UNREACHABLE("unimp"); }