diff options
Diffstat (limited to 'src/ir')
-rw-r--r-- | src/ir/ExpressionAnalyzer.cpp | 34 | ||||
-rw-r--r-- | src/ir/ExpressionManipulator.cpp | 36 | ||||
-rw-r--r-- | src/ir/ReFinalize.cpp | 15 | ||||
-rw-r--r-- | src/ir/effects.h | 30 | ||||
-rw-r--r-- | src/ir/utils.h | 24 |
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"); } |