diff options
Diffstat (limited to 'src/ir')
-rw-r--r-- | src/ir/ReFinalize.cpp | 10 | ||||
-rw-r--r-- | src/ir/child-typer.h | 41 | ||||
-rw-r--r-- | src/ir/cost.h | 13 | ||||
-rw-r--r-- | src/ir/effects.h | 31 | ||||
-rw-r--r-- | src/ir/possible-contents.cpp | 20 | ||||
-rw-r--r-- | src/ir/subtype-exprs.h | 5 | ||||
-rw-r--r-- | src/ir/type-updating.cpp | 9 |
7 files changed, 3 insertions, 126 deletions
diff --git a/src/ir/ReFinalize.cpp b/src/ir/ReFinalize.cpp index c8f83f1ba..8fae5d073 100644 --- a/src/ir/ReFinalize.cpp +++ b/src/ir/ReFinalize.cpp @@ -170,18 +170,8 @@ void ReFinalize::visitStringMeasure(StringMeasure* curr) { curr->finalize(); } void ReFinalize::visitStringEncode(StringEncode* curr) { curr->finalize(); } void ReFinalize::visitStringConcat(StringConcat* curr) { curr->finalize(); } void ReFinalize::visitStringEq(StringEq* curr) { curr->finalize(); } -void ReFinalize::visitStringAs(StringAs* curr) { curr->finalize(); } -void ReFinalize::visitStringWTF8Advance(StringWTF8Advance* curr) { - curr->finalize(); -} void ReFinalize::visitStringWTF16Get(StringWTF16Get* curr) { curr->finalize(); } -void ReFinalize::visitStringIterNext(StringIterNext* curr) { curr->finalize(); } -void ReFinalize::visitStringIterMove(StringIterMove* curr) { curr->finalize(); } void ReFinalize::visitStringSliceWTF(StringSliceWTF* curr) { curr->finalize(); } -void ReFinalize::visitStringSliceIter(StringSliceIter* curr) { - curr->finalize(); -} - void ReFinalize::visitContNew(ContNew* curr) { curr->finalize(); } void ReFinalize::visitContBind(ContBind* curr) { curr->finalize(); } void ReFinalize::visitResume(Resume* curr) { curr->finalize(); } diff --git a/src/ir/child-typer.h b/src/ir/child-typer.h index 94ef11d77..e015f3db8 100644 --- a/src/ir/child-typer.h +++ b/src/ir/child-typer.h @@ -991,11 +991,7 @@ template<typename Subtype> struct ChildTyper : OverriddenVisitor<Subtype> { void visitStringConst(StringConst* curr) {} void visitStringMeasure(StringMeasure* curr) { - if (curr->op == StringMeasureWTF16View) { - note(&curr->ref, Type(HeapType::stringview_wtf16, Nullable)); - } else { - note(&curr->ref, Type(HeapType::string, Nullable)); - } + note(&curr->ref, Type(HeapType::string, Nullable)); } void visitStringEncode(StringEncode* curr, @@ -1035,48 +1031,17 @@ template<typename Subtype> struct ChildTyper : OverriddenVisitor<Subtype> { note(&curr->right, stringref); } - void visitStringAs(StringAs* curr) { - note(&curr->ref, Type(HeapType::string, Nullable)); - } - - void visitStringWTF8Advance(StringWTF8Advance* curr) { - note(&curr->ref, Type(HeapType::stringview_wtf8, Nullable)); - note(&curr->pos, Type::i32); - note(&curr->bytes, Type::i32); - } - void visitStringWTF16Get(StringWTF16Get* curr) { - note(&curr->ref, Type(HeapType::stringview_wtf16, Nullable)); + note(&curr->ref, Type(HeapType::string, Nullable)); note(&curr->pos, Type::i32); } - void visitStringIterNext(StringIterNext* curr) { - note(&curr->ref, Type(HeapType::stringview_iter, Nullable)); - } - - void visitStringIterMove(StringIterMove* curr) { - note(&curr->ref, Type(HeapType::stringview_iter, Nullable)); - note(&curr->num, Type::i32); - } - void visitStringSliceWTF(StringSliceWTF* curr) { - switch (curr->op) { - case StringSliceWTF8: - note(&curr->ref, Type(HeapType::stringview_wtf8, Nullable)); - break; - case StringSliceWTF16: - note(&curr->ref, Type(HeapType::stringview_wtf16, Nullable)); - break; - } + note(&curr->ref, Type(HeapType::string, Nullable)); note(&curr->start, Type::i32); note(&curr->end, Type::i32); } - void visitStringSliceIter(StringSliceIter* curr) { - note(&curr->ref, Type(HeapType::stringview_iter, Nullable)); - note(&curr->num, Type::i32); - } - void visitContBind(ContBind* curr) { auto paramsBefore = curr->contTypeBefore.getContinuation().type.getSignature().params; diff --git a/src/ir/cost.h b/src/ir/cost.h index edb39546d..8af68dbf1 100644 --- a/src/ir/cost.h +++ b/src/ir/cost.h @@ -706,25 +706,12 @@ struct CostAnalyzer : public OverriddenVisitor<CostAnalyzer, CostType> { // "3" is chosen since strings might or might not be interned in the engine. return 3 + visit(curr->left) + visit(curr->right); } - CostType visitStringAs(StringAs* curr) { return 4 + visit(curr->ref); } - CostType visitStringWTF8Advance(StringWTF8Advance* curr) { - return 4 + visit(curr->ref) + visit(curr->pos) + visit(curr->bytes); - } CostType visitStringWTF16Get(StringWTF16Get* curr) { return 1 + visit(curr->ref) + visit(curr->pos); } - CostType visitStringIterNext(StringIterNext* curr) { - return 2 + visit(curr->ref); - } - CostType visitStringIterMove(StringIterMove* curr) { - return 4 + visit(curr->ref) + visit(curr->num); - } CostType visitStringSliceWTF(StringSliceWTF* curr) { return 8 + visit(curr->ref) + visit(curr->start) + visit(curr->end); } - CostType visitStringSliceIter(StringSliceIter* curr) { - return 8 + visit(curr->ref) + visit(curr->num); - } CostType visitContBind(ContBind* curr) { // Inspired by struct.new: The only cost of cont.bind is that it may need to diff --git a/src/ir/effects.h b/src/ir/effects.h index b1b4c7053..87b77601f 100644 --- a/src/ir/effects.h +++ b/src/ir/effects.h @@ -997,45 +997,14 @@ private: } } } - void visitStringAs(StringAs* curr) { - // traps when ref is null. - parent.implicitTrap = true; - } - void visitStringWTF8Advance(StringWTF8Advance* curr) { - // traps when ref is null. - parent.implicitTrap = true; - } void visitStringWTF16Get(StringWTF16Get* curr) { // traps when ref is null. parent.implicitTrap = true; } - void visitStringIterNext(StringIterNext* curr) { - // traps when ref is null. - parent.implicitTrap = true; - // modifies state in the iterator. we model that as accessing heap memory - // in an array atm TODO consider adding a new effect type for this (we - // added one for arrays because struct/array operations often interleave, - // say with vtable accesses, but it's not clear adding overhead to this - // class is worth it for string iters) - parent.readsArray = true; - parent.writesArray = true; - } - void visitStringIterMove(StringIterMove* curr) { - // traps when ref is null. - parent.implicitTrap = true; - // see StringIterNext. - parent.readsArray = true; - parent.writesArray = true; - } void visitStringSliceWTF(StringSliceWTF* curr) { // traps when ref is null. parent.implicitTrap = true; } - void visitStringSliceIter(StringSliceIter* curr) { - // traps when ref is null. - parent.implicitTrap = true; - } - void visitContBind(ContBind* curr) { // traps when curr->cont is null ref. parent.implicitTrap = true; diff --git a/src/ir/possible-contents.cpp b/src/ir/possible-contents.cpp index c44cd7ce1..ac320c419 100644 --- a/src/ir/possible-contents.cpp +++ b/src/ir/possible-contents.cpp @@ -1084,34 +1084,14 @@ struct InfoCollector // TODO: optimize when possible addRoot(curr); } - void visitStringAs(StringAs* curr) { - // TODO: optimize when possible - addRoot(curr); - } - void visitStringWTF8Advance(StringWTF8Advance* curr) { - // TODO: optimize when possible - addRoot(curr); - } void visitStringWTF16Get(StringWTF16Get* curr) { // TODO: optimize when possible addRoot(curr); } - void visitStringIterNext(StringIterNext* curr) { - // TODO: optimize when possible - addRoot(curr); - } - void visitStringIterMove(StringIterMove* curr) { - // TODO: optimize when possible - addRoot(curr); - } void visitStringSliceWTF(StringSliceWTF* curr) { // TODO: optimize when possible addRoot(curr); } - void visitStringSliceIter(StringSliceIter* curr) { - // TODO: optimize when possible - addRoot(curr); - } // TODO: Model which throws can go to which catches. For now, anything thrown // is sent to the location of that tag, and any catch of that tag can diff --git a/src/ir/subtype-exprs.h b/src/ir/subtype-exprs.h index 1457e1ef5..f563cce14 100644 --- a/src/ir/subtype-exprs.h +++ b/src/ir/subtype-exprs.h @@ -383,13 +383,8 @@ struct SubtypingDiscoverer : public OverriddenVisitor<SubType> { void visitStringEncode(StringEncode* curr) {} void visitStringConcat(StringConcat* curr) {} void visitStringEq(StringEq* curr) {} - void visitStringAs(StringAs* curr) {} - void visitStringWTF8Advance(StringWTF8Advance* curr) {} void visitStringWTF16Get(StringWTF16Get* curr) {} - void visitStringIterNext(StringIterNext* curr) {} - void visitStringIterMove(StringIterMove* curr) {} void visitStringSliceWTF(StringSliceWTF* curr) {} - void visitStringSliceIter(StringSliceIter* curr) {} void visitContBind(ContBind* curr) { WASM_UNREACHABLE("not implemented"); } void visitContNew(ContNew* curr) { WASM_UNREACHABLE("not implemented"); } diff --git a/src/ir/type-updating.cpp b/src/ir/type-updating.cpp index 0144b9330..12a8c7c36 100644 --- a/src/ir/type-updating.cpp +++ b/src/ir/type-updating.cpp @@ -304,15 +304,6 @@ namespace TypeUpdating { bool canHandleAsLocal(Type type) { // TODO: Inline this into its callers. - if (type.isRef()) { - // V8 does not accept nullable string views, and so we must avoid putting - // them in locals (as even a non-nullable one may end up nullable if we see - // situations that require fixing in handleNonDefaultableLocals). - auto heapType = type.getHeapType(); - return heapType != HeapType::stringview_wtf8 && - heapType != HeapType::stringview_wtf16 && - heapType != HeapType::stringview_iter; - } return type.isConcrete(); } |