summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/map-inference.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/map-inference.cc')
-rw-r--r--deps/v8/src/compiler/map-inference.cc36
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;