diff options
Diffstat (limited to 'deps/v8/src/compiler/map-inference.cc')
-rw-r--r-- | deps/v8/src/compiler/map-inference.cc | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/deps/v8/src/compiler/map-inference.cc b/deps/v8/src/compiler/map-inference.cc index b6c96163c6..f6f87cd62e 100644 --- a/deps/v8/src/compiler/map-inference.cc +++ b/deps/v8/src/compiler/map-inference.cc @@ -9,15 +9,14 @@ #include "src/compiler/js-graph.h" #include "src/compiler/simplified-operator.h" #include "src/objects/map-inl.h" -#include "src/zone/zone-handle-set.h" namespace v8 { namespace internal { namespace compiler { -MapInference::MapInference(JSHeapBroker* broker, Node* object, Node* effect) - : broker_(broker), object_(object) { - ZoneHandleSet<Map> maps; +MapInference::MapInference(JSHeapBroker* broker, Node* object, Effect effect) + : broker_(broker), object_(object), maps_(broker->zone()) { + ZoneRefUnorderedSet<MapRef> maps(broker->zone()); auto result = NodeProperties::InferMapsUnsafe(broker_, object_, effect, &maps); maps_.insert(maps_.end(), maps.begin(), maps.end()); @@ -67,9 +66,8 @@ bool MapInference::AllOfInstanceTypesUnsafe( std::function<bool(InstanceType)> f) const { CHECK(HaveMaps()); - auto instance_type = [this, f](Handle<Map> map) { - MapRef map_ref = MakeRef(broker_, map); - return f(map_ref.instance_type()); + auto instance_type = [f](const MapRef& map) { + return f(map.instance_type()); }; return std::all_of(maps_.begin(), maps_.end(), instance_type); } @@ -78,22 +76,21 @@ bool MapInference::AnyOfInstanceTypesUnsafe( std::function<bool(InstanceType)> f) const { CHECK(HaveMaps()); - auto instance_type = [this, f](Handle<Map> map) { - MapRef map_ref = MakeRef(broker_, map); - return f(map_ref.instance_type()); + auto instance_type = [f](const MapRef& map) { + return f(map.instance_type()); }; return std::any_of(maps_.begin(), maps_.end(), instance_type); } -MapHandles const& MapInference::GetMaps() { +ZoneVector<MapRef> const& MapInference::GetMaps() { SetNeedGuardIfUnreliable(); return maps_; } -bool MapInference::Is(Handle<Map> expected_map) { +bool MapInference::Is(const MapRef& expected_map) { if (!HaveMaps()) return false; - const MapHandles& maps = GetMaps(); + const ZoneVector<MapRef>& maps = GetMaps(); if (maps.size() != 1) return false; return maps[0].equals(expected_map); } @@ -104,7 +101,9 @@ void MapInference::InsertMapChecks(JSGraph* jsgraph, Effect* effect, CHECK(HaveMaps()); CHECK(feedback.IsValid()); ZoneHandleSet<Map> maps; - for (Handle<Map> map : maps_) maps.insert(map, jsgraph->graph()->zone()); + for (const MapRef& map : maps_) { + maps.insert(map.object(), jsgraph->graph()->zone()); + } *effect = jsgraph->graph()->NewNode( jsgraph->simplified()->CheckMaps(CheckMapsFlag::kNone, maps, feedback), object_, *effect, control); @@ -133,14 +132,11 @@ bool MapInference::RelyOnMapsHelper(CompilationDependencies* dependencies, const FeedbackSource& feedback) { if (Safe()) return true; - auto is_stable = [this](Handle<Map> map) { - MapRef map_ref = MakeRef(broker_, map); - return map_ref.is_stable(); - }; + auto is_stable = [](const MapRef& map) { return map.is_stable(); }; if (dependencies != nullptr && std::all_of(maps_.cbegin(), maps_.cend(), is_stable)) { - for (Handle<Map> map : maps_) { - dependencies->DependOnStableMap(MakeRef(broker_, map)); + for (const MapRef& map : maps_) { + dependencies->DependOnStableMap(map); } SetGuarded(); return true; |