Index: src/compiler/typer.cc |
diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc |
index c2544a30704d145bbe5dac245a0a5d3c36b8f2ce..42bd3042a09cb1831c6ad10d0a44447bf3ac309c 100644 |
--- a/src/compiler/typer.cc |
+++ b/src/compiler/typer.cc |
@@ -6,7 +6,6 @@ |
#include "src/base/flags.h" |
#include "src/bootstrapper.h" |
-#include "src/compilation-dependencies.h" |
#include "src/compiler/common-operator.h" |
#include "src/compiler/graph-reducer.h" |
#include "src/compiler/js-operator.h" |
@@ -31,12 +30,9 @@ class Typer::Decorator final : public GraphDecorator { |
Typer* const typer_; |
}; |
-Typer::Typer(Isolate* isolate, Graph* graph, Flags flags, |
- CompilationDependencies* dependencies) |
+Typer::Typer(Isolate* isolate, Graph* graph) |
: isolate_(isolate), |
graph_(graph), |
- flags_(flags), |
- dependencies_(dependencies), |
decorator_(nullptr), |
cache_(TypeCache::Get()), |
operation_typer_(isolate, zone()) { |
@@ -222,10 +218,6 @@ class Typer::Visitor : public Reducer { |
Zone* zone() { return typer_->zone(); } |
Isolate* isolate() { return typer_->isolate(); } |
Graph* graph() { return typer_->graph(); } |
- Typer::Flags flags() const { return typer_->flags(); } |
- CompilationDependencies* dependencies() const { |
- return typer_->dependencies(); |
- } |
void SetWeakened(NodeId node_id) { weakened_nodes_.insert(node_id); } |
bool IsWeakened(NodeId node_id) { |
@@ -1897,6 +1889,11 @@ Type* Typer::Visitor::TypeCheckBounds(Node* node) { |
return Type::Unsigned31(); |
} |
+Type* Typer::Visitor::TypeCheckMaps(Node* node) { |
+ UNREACHABLE(); |
+ return nullptr; |
+} |
+ |
Type* Typer::Visitor::TypeCheckNumber(Node* node) { |
Type* arg = Operand(node, 0); |
return Type::Intersect(arg, Type::Number(), zone()); |
@@ -1947,57 +1944,10 @@ Type* Typer::Visitor::TypeCheckTaggedHole(Node* node) { |
Type* Typer::Visitor::TypeAllocate(Node* node) { return Type::TaggedPointer(); } |
- |
-namespace { |
- |
-MaybeHandle<Map> GetStableMapFromObjectType(Type* object_type) { |
- if (object_type->IsConstant() && |
- object_type->AsConstant()->Value()->IsHeapObject()) { |
- Handle<Map> object_map( |
- Handle<HeapObject>::cast(object_type->AsConstant()->Value())->map()); |
- if (object_map->is_stable()) return object_map; |
- } else if (object_type->IsClass()) { |
- Handle<Map> object_map = object_type->AsClass()->Map(); |
- if (object_map->is_stable()) return object_map; |
- } |
- return MaybeHandle<Map>(); |
-} |
- |
-} // namespace |
- |
- |
Type* Typer::Visitor::TypeLoadField(Node* node) { |
- FieldAccess const& access = FieldAccessOf(node->op()); |
- if (access.base_is_tagged == kTaggedBase && |
- access.offset == HeapObject::kMapOffset) { |
- // The type of LoadField[Map](o) is Constant(map) if map is stable and |
- // either |
- // (a) o has type Constant(object) and map == object->map, or |
- // (b) o has type Class(map), |
- // and either |
- // (1) map cannot transition further, or |
- // (2) deoptimization is enabled and we can add a code dependency on the |
- // stability of map (to guard the Constant type information). |
- Type* const object = Operand(node, 0); |
- if (object->Is(Type::None())) return Type::None(); |
- Handle<Map> object_map; |
- if (GetStableMapFromObjectType(object).ToHandle(&object_map)) { |
- if (object_map->CanTransition()) { |
- if (flags() & kDeoptimizationEnabled) { |
- dependencies()->AssumeMapStable(object_map); |
- } else { |
- return access.type; |
- } |
- } |
- Type* object_map_type = Type::Constant(object_map, zone()); |
- DCHECK(object_map_type->Is(access.type)); |
- return object_map_type; |
- } |
- } |
- return access.type; |
+ return FieldAccessOf(node->op()).type; |
} |
- |
Type* Typer::Visitor::TypeLoadBuffer(Node* node) { |
// TODO(bmeurer): This typing is not yet correct. Since we can still access |
// out of bounds, the type in the general case has to include Undefined. |