5#ifndef V8_OBJECTS_ALLOCATION_SITE_INL_H_
6#define V8_OBJECTS_ALLOCATION_SITE_INL_H_
25#include "torque-generated/src/objects/allocation-site-tq-inl.inc"
142 DCHECK_EQ(!
IsSmi(raw_value), IsJSArray(raw_value) || IsJSObject(raw_value));
143 return !
IsSmi(raw_value);
156 if (
v8_flags.allocation_site_pretenuring) {
159 return type == JS_ARRAY_TYPE || type == JS_OBJECT_TYPE;
161 return type == JS_ARRAY_TYPE;
193 DCHECK((GetHeap()->MaxSemiSpaceSize() /
250template <AllocationSiteUpdateMode update_or_check>
253 Isolate* isolate = site->GetIsolate();
256 if (site->PointsToLiteral() && IsJSArray(site->boilerplate())) {
273 if (
v8_flags.trace_track_allocation_sites) {
274 bool is_nested = site->IsNested();
275 PrintF(
"AllocationSite: JSArray %p boilerplate %supdated %s->%s\n",
276 reinterpret_cast<void*
>(site->ptr()),
297 if (
v8_flags.trace_track_allocation_sites) {
298 PrintF(
"AllocationSite: JSArray %p site updated %s->%s\n",
302 site->SetElementsKind(to_kind);
static constexpr T decode(U value)
static V8_NODISCARD constexpr U update(U previous, T value)
Tagged< AllocationSite > GetAllocationSite() const
void set_allocation_site(Tagged< AllocationSite > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
Address GetAllocationSiteUnchecked() const
TaggedMember< AllocationSite > allocation_site_
void set_weak_next(Tagged< UnionOf< Undefined, AllocationSiteWithWeakNext > > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
TaggedMember< UnionOf< Undefined, AllocationSiteWithWeakNext > > weak_next_
Tagged< UnionOf< Undefined, AllocationSiteWithWeakNext > > weak_next() const
static NEVER_READ_ONLY_SPACE const uint32_t kMaximumArrayBytesToPretransition
TaggedMember< UnionOf< Smi, JSObject > > transition_info_or_boilerplate_
bool PointsToLiteral() const
ElementsKind GetElementsKind() const
Tagged< UnionOf< Smi, JSObject > > transition_info_or_boilerplate() const
Tagged< UnionOf< Smi, AllocationSite > > nested_site() const
PretenureDecision pretenure_decision() const
void SetDoNotInlineCall()
bool IsMaybeTenure() const
void set_pretenure_decision(PretenureDecision decision)
int32_t pretenure_create_count_
static bool ShouldTrack(ElementsKind boilerplate_elements_kind)
static bool CanTrack(InstanceType type)
bool deopt_dependent_code() const
void set_deopt_dependent_code(bool deopt)
TaggedMember< UnionOf< Smi, AllocationSite > > nested_site_
int transition_info() const
int memento_found_count() const
Tagged< DependentCode > dependent_code() const
void set_pretenure_create_count(int32_t value)
int32_t pretenure_data(RelaxedLoadTag) const
int32_t pretenure_create_count() const
int memento_create_count() const
static bool DigestTransitionFeedback(DirectHandle< AllocationSite > site, ElementsKind to_kind)
bool CanInlineCall() const
Tagged< JSObject > boilerplate() const
void set_pretenure_data(int32_t value, RelaxedStoreTag)
void set_memento_create_count(int count)
void set_boilerplate(Tagged< JSObject > value, ReleaseStoreTag, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
TaggedMember< DependentCode > dependent_code_
void set_dependent_code(Tagged< DependentCode > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
void IncrementMementoCreateCount()
void set_nested_site(Tagged< UnionOf< Smi, AllocationSite > > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
bool PretenuringDecisionMade() const
void set_transition_info(int value)
void set_memento_found_count(int count)
int IncrementMementoFoundCount(int increment=1)
std::atomic< int32_t > pretenure_data_
void SetElementsKind(ElementsKind kind)
static V8_EXPORT_PRIVATE Tagged< DependentCode > empty_dependent_code(const ReadOnlyRoots &roots)
@ kAllocationSiteTransitionChangedGroup
static void DeoptimizeDependencyGroups(Isolate *isolate, ObjectT object, DependencyGroups groups)
Tagged< Map > map() const
static V8_EXPORT_PRIVATE void TransitionElementsKind(DirectHandle< JSObject > object, ElementsKind to_kind)
static bool ToArrayLength(Tagged< Object > obj, uint32_t *index)
static constexpr Tagged< Smi > FromInt(int value)
static constexpr Tagged< Smi > zero()
#define V8_ALLOCATION_SITE_TRACKING_BOOL
ZoneVector< RpoNumber > & result
constexpr int kTaggedSize
constexpr bool IsHoleyElementsKind(ElementsKind kind)
bool IsMoreGeneralElementsKindTransition(ElementsKind from_kind, ElementsKind to_kind)
ReadOnlyRoots GetReadOnlyRoots()
void PrintF(const char *format,...)
Tagged(T object) -> Tagged< T >
constexpr bool IsSmiElementsKind(ElementsKind kind)
V8_INLINE constexpr bool IsSmi(TaggedImpl< kRefType, StorageType > obj)
const char * ElementsKindToString(ElementsKind kind)
ElementsKind GetHoleyElementsKind(ElementsKind packed_kind)
typename detail::FlattenUnionHelper< Union<>, Ts... >::type UnionOf
V8_EXPORT_PRIVATE FlagValues v8_flags
ElementsKind GetInitialFastElementsKind()
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
static constexpr RelaxedLoadTag kRelaxedLoad
static constexpr RelaxedStoreTag kRelaxedStore
#define NEVER_READ_ONLY_SPACE_IMPL(Type)
#define CHECK_NE(lhs, rhs)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)