| Index: src/compiler/typer.cc
|
| diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc
|
| index a81f3beed11954ed1e4caaf0a4b957c41b6b8bf8..cdd1fdd0aa4c3c85fe9bbc75141508df54da578a 100644
|
| --- a/src/compiler/typer.cc
|
| +++ b/src/compiler/typer.cc
|
| @@ -97,7 +97,8 @@ class Typer::Visitor : public Reducer {
|
| DECLARE_CASE(IfException)
|
| // VALUE_OP_LIST without JS_SIMPLE_BINOP_LIST:
|
| COMMON_OP_LIST(DECLARE_CASE)
|
| - SIMPLIFIED_OP_LIST(DECLARE_CASE)
|
| + SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_CASE)
|
| + SIMPLIFIED_OTHER_OP_LIST(DECLARE_CASE)
|
| MACHINE_OP_LIST(DECLARE_CASE)
|
| MACHINE_SIMD_OP_LIST(DECLARE_CASE)
|
| JS_SIMPLE_UNOP_LIST(DECLARE_CASE)
|
| @@ -126,6 +127,8 @@ class Typer::Visitor : public Reducer {
|
| DECLARE_CASE(OsrLoopEntry)
|
| DECLARE_CASE(Throw)
|
| DECLARE_CASE(End)
|
| + SIMPLIFIED_CHANGE_OP_LIST(DECLARE_CASE)
|
| + SIMPLIFIED_CHECKED_OP_LIST(DECLARE_CASE)
|
| #undef DECLARE_CASE
|
| break;
|
| }
|
| @@ -144,7 +147,8 @@ class Typer::Visitor : public Reducer {
|
| DECLARE_CASE(IfException)
|
| // VALUE_OP_LIST without JS_SIMPLE_BINOP_LIST:
|
| COMMON_OP_LIST(DECLARE_CASE)
|
| - SIMPLIFIED_OP_LIST(DECLARE_CASE)
|
| + SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_CASE)
|
| + SIMPLIFIED_OTHER_OP_LIST(DECLARE_CASE)
|
| MACHINE_OP_LIST(DECLARE_CASE)
|
| MACHINE_SIMD_OP_LIST(DECLARE_CASE)
|
| JS_SIMPLE_UNOP_LIST(DECLARE_CASE)
|
| @@ -173,6 +177,8 @@ class Typer::Visitor : public Reducer {
|
| DECLARE_CASE(OsrLoopEntry)
|
| DECLARE_CASE(Throw)
|
| DECLARE_CASE(End)
|
| + SIMPLIFIED_CHANGE_OP_LIST(DECLARE_CASE)
|
| + SIMPLIFIED_CHECKED_OP_LIST(DECLARE_CASE)
|
| #undef DECLARE_CASE
|
| break;
|
| }
|
| @@ -189,7 +195,12 @@ class Typer::Visitor : public Reducer {
|
| #define DECLARE_METHOD(x) inline Type* Type##x(Node* node);
|
| DECLARE_METHOD(Start)
|
| DECLARE_METHOD(IfException)
|
| - VALUE_OP_LIST(DECLARE_METHOD)
|
| + COMMON_OP_LIST(DECLARE_METHOD)
|
| + SIMPLIFIED_COMPARE_BINOP_LIST(DECLARE_METHOD)
|
| + SIMPLIFIED_OTHER_OP_LIST(DECLARE_METHOD)
|
| + MACHINE_OP_LIST(DECLARE_METHOD)
|
| + MACHINE_SIMD_OP_LIST(DECLARE_METHOD)
|
| + JS_OP_LIST(DECLARE_METHOD)
|
| #undef DECLARE_METHOD
|
|
|
| Type* TypeOrNone(Node* node) {
|
| @@ -1725,98 +1736,6 @@ Type* Typer::Visitor::TypeStringToNumber(Node* node) {
|
| return TypeUnaryOp(node, ToNumber);
|
| }
|
|
|
| -namespace {
|
| -
|
| -Type* ChangeRepresentation(Type* type, Type* rep, Zone* zone) {
|
| - return Type::Union(Type::Semantic(type, zone),
|
| - Type::Representation(rep, zone), zone);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -Type* Typer::Visitor::TypeChangeTaggedSignedToInt32(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - // TODO(jarin): DCHECK(arg->Is(Type::Signed32()));
|
| - // Many tests fail this check.
|
| - return ChangeRepresentation(arg, Type::UntaggedIntegral32(), zone());
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeChangeTaggedToInt32(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - DCHECK(arg->Is(Type::Signed32()));
|
| - return ChangeRepresentation(arg, Type::UntaggedIntegral32(), zone());
|
| -}
|
| -
|
| -
|
| -Type* Typer::Visitor::TypeChangeTaggedToUint32(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - DCHECK(arg->Is(Type::Unsigned32()));
|
| - return ChangeRepresentation(arg, Type::UntaggedIntegral32(), zone());
|
| -}
|
| -
|
| -
|
| -Type* Typer::Visitor::TypeChangeTaggedToFloat64(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - DCHECK(arg->Is(Type::Number()));
|
| - return ChangeRepresentation(arg, Type::UntaggedFloat64(), zone());
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeTruncateTaggedToFloat64(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - // TODO(jarin) This DCHECK does not work because of speculative feedback.
|
| - // Re-enable once we record the speculative feedback in types.
|
| - // DCHECK(arg->Is(Type::NumberOrOddball()));
|
| - return ChangeRepresentation(arg, Type::UntaggedFloat64(), zone());
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeChangeInt31ToTaggedSigned(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - // TODO(jarin): DCHECK(arg->Is(Type::Signed31()));
|
| - // Some mjsunit/asm and mjsunit/wasm tests fail this check.
|
| - // For instance, asm/int32-umod fails with Signed32/UntaggedIntegral32 in
|
| - // simplified-lowering (after propagation).
|
| - Type* rep =
|
| - arg->Is(Type::SignedSmall()) ? Type::TaggedSigned() : Type::Tagged();
|
| - return ChangeRepresentation(arg, rep, zone());
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeChangeInt32ToTagged(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - // TODO(jarin): DCHECK(arg->Is(Type::Signed32()));
|
| - // Two tests fail this check: mjsunit/asm/sqlite3/sqlite-safe-heap and
|
| - // mjsunit/wasm/embenchen/lua_binarytrees. The first one fails with Any/Any in
|
| - // simplified-lowering (after propagation).
|
| - Type* rep =
|
| - arg->Is(Type::SignedSmall()) ? Type::TaggedSigned() : Type::Tagged();
|
| - return ChangeRepresentation(arg, rep, zone());
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeChangeUint32ToTagged(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - // TODO(jarin): DCHECK(arg->Is(Type::Unsigned32()));
|
| - // This fails in benchmarks/octane/mandreel (--turbo).
|
| - return ChangeRepresentation(arg, Type::Tagged(), zone());
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeChangeFloat64ToTagged(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - // TODO(jarin): DCHECK(arg->Is(Type::Number()));
|
| - // Some (or all) mjsunit/wasm/embenchen/ tests fail this check when run with
|
| - // --turbo and --always-opt.
|
| - return ChangeRepresentation(arg, Type::Tagged(), zone());
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeChangeTaggedToBit(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - DCHECK(arg->Is(Type::Boolean()));
|
| - return ChangeRepresentation(arg, Type::UntaggedBit(), zone());
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeChangeBitToTagged(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - return ChangeRepresentation(arg, Type::TaggedPointer(), zone());
|
| -}
|
| -
|
| Type* Typer::Visitor::TypeCheckBounds(Node* node) {
|
| // TODO(bmeurer): We could do better here based on the limit.
|
| return Type::Unsigned31();
|
| @@ -1837,30 +1756,6 @@ Type* Typer::Visitor::TypeCheckTaggedSigned(Node* node) {
|
| return Type::Intersect(arg, typer_->cache_.kSmi, zone());
|
| }
|
|
|
| -Type* Typer::Visitor::TypeCheckedInt32Add(Node* node) {
|
| - return Type::Integral32();
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeCheckedInt32Sub(Node* node) {
|
| - return Type::Integral32();
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeCheckedUint32ToInt32(Node* node) {
|
| - return Type::Signed32();
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeCheckedFloat64ToInt32(Node* node) {
|
| - return Type::Signed32();
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeCheckedTaggedToInt32(Node* node) {
|
| - return Type::Signed32();
|
| -}
|
| -
|
| -Type* Typer::Visitor::TypeCheckedTaggedToFloat64(Node* node) {
|
| - return Type::Number();
|
| -}
|
| -
|
| Type* Typer::Visitor::TypeCheckFloat64Hole(Node* node) {
|
| Type* type = Operand(node, 0);
|
| return type;
|
| @@ -1884,15 +1779,6 @@ Type* Typer::Visitor::TypeCheckTaggedHole(Node* node) {
|
| return type;
|
| }
|
|
|
| -Type* Typer::Visitor::TypeTruncateTaggedToWord32(Node* node) {
|
| - Type* arg = Operand(node, 0);
|
| - // TODO(jarin): DCHECK(arg->Is(Type::NumberOrUndefined()));
|
| - // Several mjsunit and cctest tests fail this check. For instance,
|
| - // mjsunit/compiler/regress-607493 fails with Any/Any in simplified-lowering
|
| - // (after propagation).
|
| - return ChangeRepresentation(arg, Type::UntaggedIntegral32(), zone());
|
| -}
|
| -
|
| Type* Typer::Visitor::TypeAllocate(Node* node) { return Type::TaggedPointer(); }
|
|
|
|
|
|
|