diff options
Diffstat (limited to 'deps/v8/src/compiler/access-info.h')
-rw-r--r-- | deps/v8/src/compiler/access-info.h | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/deps/v8/src/compiler/access-info.h b/deps/v8/src/compiler/access-info.h index 809aa83e47..7ec8deb8f0 100644 --- a/deps/v8/src/compiler/access-info.h +++ b/deps/v8/src/compiler/access-info.h @@ -10,6 +10,7 @@ #include "src/field-index.h" #include "src/machine-type.h" #include "src/objects.h" +#include "src/objects/map.h" #include "src/zone/zone-containers.h" namespace v8 { @@ -31,8 +32,6 @@ enum class AccessMode { kLoad, kStore, kStoreInLiteral }; std::ostream& operator<<(std::ostream&, AccessMode); -typedef std::vector<Handle<Map>> MapList; - // Mapping of transition source to transition target. typedef std::vector<std::pair<Handle<Map>, Handle<Map>>> MapTransitionList; @@ -40,16 +39,17 @@ typedef std::vector<std::pair<Handle<Map>, Handle<Map>>> MapTransitionList; class ElementAccessInfo final { public: ElementAccessInfo(); - ElementAccessInfo(MapList const& receiver_maps, ElementsKind elements_kind); + ElementAccessInfo(MapHandles const& receiver_maps, + ElementsKind elements_kind); ElementsKind elements_kind() const { return elements_kind_; } - MapList const& receiver_maps() const { return receiver_maps_; } + MapHandles const& receiver_maps() const { return receiver_maps_; } MapTransitionList& transitions() { return transitions_; } MapTransitionList const& transitions() const { return transitions_; } private: ElementsKind elements_kind_; - MapList receiver_maps_; + MapHandles receiver_maps_; MapTransitionList transitions_; }; @@ -66,24 +66,25 @@ class PropertyAccessInfo final { kAccessorConstant }; - static PropertyAccessInfo NotFound(MapList const& receiver_maps, + static PropertyAccessInfo NotFound(MapHandles const& receiver_maps, MaybeHandle<JSObject> holder); - static PropertyAccessInfo DataConstant(MapList const& receiver_maps, + static PropertyAccessInfo DataConstant(MapHandles const& receiver_maps, Handle<Object> constant, MaybeHandle<JSObject> holder); static PropertyAccessInfo DataField( - PropertyConstness constness, MapList const& receiver_maps, + PropertyConstness constness, MapHandles const& receiver_maps, FieldIndex field_index, MachineRepresentation field_representation, Type* field_type, MaybeHandle<Map> field_map = MaybeHandle<Map>(), MaybeHandle<JSObject> holder = MaybeHandle<JSObject>(), MaybeHandle<Map> transition_map = MaybeHandle<Map>()); - static PropertyAccessInfo AccessorConstant(MapList const& receiver_maps, + static PropertyAccessInfo AccessorConstant(MapHandles const& receiver_maps, Handle<Object> constant, MaybeHandle<JSObject> holder); PropertyAccessInfo(); - bool Merge(PropertyAccessInfo const* that) WARN_UNUSED_RESULT; + bool Merge(PropertyAccessInfo const* that, AccessMode access_mode, + Zone* zone) WARN_UNUSED_RESULT; bool IsNotFound() const { return kind() == kNotFound; } bool IsDataConstant() const { return kind() == kDataConstant; } @@ -105,21 +106,21 @@ class PropertyAccessInfo final { return field_representation_; } MaybeHandle<Map> field_map() const { return field_map_; } - MapList const& receiver_maps() const { return receiver_maps_; } + MapHandles const& receiver_maps() const { return receiver_maps_; } private: PropertyAccessInfo(MaybeHandle<JSObject> holder, - MapList const& receiver_maps); + MapHandles const& receiver_maps); PropertyAccessInfo(Kind kind, MaybeHandle<JSObject> holder, - Handle<Object> constant, MapList const& receiver_maps); + Handle<Object> constant, MapHandles const& receiver_maps); PropertyAccessInfo(Kind kind, MaybeHandle<JSObject> holder, MaybeHandle<Map> transition_map, FieldIndex field_index, MachineRepresentation field_representation, Type* field_type, MaybeHandle<Map> field_map, - MapList const& receiver_maps); + MapHandles const& receiver_maps); Kind kind_; - MapList receiver_maps_; + MapHandles receiver_maps_; Handle<Object> constant_; MaybeHandle<Map> transition_map_; MaybeHandle<JSObject> holder_; @@ -138,17 +139,18 @@ class AccessInfoFactory final { bool ComputeElementAccessInfo(Handle<Map> map, AccessMode access_mode, ElementAccessInfo* access_info); - bool ComputeElementAccessInfos(MapHandleList const& maps, - AccessMode access_mode, + bool ComputeElementAccessInfos(MapHandles const& maps, AccessMode access_mode, ZoneVector<ElementAccessInfo>* access_infos); bool ComputePropertyAccessInfo(Handle<Map> map, Handle<Name> name, AccessMode access_mode, PropertyAccessInfo* access_info); - bool ComputePropertyAccessInfos(MapHandleList const& maps, Handle<Name> name, + bool ComputePropertyAccessInfos(MapHandles const& maps, Handle<Name> name, AccessMode access_mode, ZoneVector<PropertyAccessInfo>* access_infos); private: + bool ConsolidateElementLoad(MapHandles const& maps, + ElementAccessInfo* access_info); bool LookupSpecialFieldAccessor(Handle<Map> map, Handle<Name> name, PropertyAccessInfo* access_info); bool LookupTransition(Handle<Map> map, Handle<Name> name, |