16#ifdef V8_ENABLE_WEBASSEMBLY
56 return lhs->
Min() <= rhs->
Min() && rhs->
Max() <= lhs->
Max();
66 if (this->IsUnion()) {
68 for (
int i = 1, n = AsUnion()->Length();
i <
n; ++
i) {
69 min = std::min(min, AsUnion()->
Get(
i).
Min());
72 if (!
bitset.Is(NaN())) min = std::min(min,
bitset.Min());
75 if (this->IsRange())
return this->AsRange()->Min();
76 DCHECK(this->IsOtherNumberConstant());
77 return this->AsOtherNumberConstant()->Value();
84 if (this->IsUnion()) {
86 for (
int i = 1, n = this->AsUnion()->Length();
i <
n; ++
i) {
87 max = std::max(max, this->AsUnion()->
Get(
i).
Max());
90 if (!
bitset.Is(NaN())) max = std::max(max,
bitset.Max());
93 if (this->IsRange())
return this->AsRange()->Max();
94 DCHECK(this->IsOtherNumberConstant());
95 return this->AsOtherNumberConstant()->Value();
107 }
else if (IsUnion()) {
109 return AsUnion()->Get(0).BitsetGlb() |
110 AsUnion()->Get(1).BitsetGlb();
111 }
else if (IsRange()) {
115 return BitsetType::kNone;
122 if (IsBitset())
return AsBitset();
126 bitset lub = AsUnion()->Get(0).BitsetLub();
127 for (
int i = 0, n = AsUnion()->Length();
i <
n; ++
i) {
129 lub |= AsUnion()->Get(
i).BitsetLub();
133 if (IsHeapConstant())
return AsHeapConstant()->Lub();
134 if (IsOtherNumberConstant()) {
135 return AsOtherNumberConstant()->Lub();
137 if (IsRange())
return AsRange()->Lub();
138 if (IsTuple())
return BitsetType::kOtherInternal;
139#if V8_ENABLE_WEBASSEMBLY
140 if (IsWasm())
return static_cast<const WasmType*
>(ToTypeBase())->
Lub();
147template <
typename MapRefLike>
149 switch (map.instance_type()) {
181 switch (map.oddball_type(
broker)) {
196 case HEAP_NUMBER_TYPE:
198 case JS_ARRAY_ITERATOR_PROTOTYPE_TYPE:
199 case JS_ITERATOR_PROTOTYPE_TYPE:
200 case JS_MAP_ITERATOR_PROTOTYPE_TYPE:
201 case JS_OBJECT_PROTOTYPE_TYPE:
203 case JS_PROMISE_PROTOTYPE_TYPE:
204 case JS_REG_EXP_PROTOTYPE_TYPE:
205 case JS_SET_ITERATOR_PROTOTYPE_TYPE:
206 case JS_SET_PROTOTYPE_TYPE:
207 case JS_STRING_ITERATOR_PROTOTYPE_TYPE:
208 case JS_ARGUMENTS_OBJECT_TYPE:
210 case JS_EXTERNAL_OBJECT_TYPE:
211 case JS_GLOBAL_OBJECT_TYPE:
212 case JS_GLOBAL_PROXY_TYPE:
213 case JS_API_OBJECT_TYPE:
214 case JS_SPECIAL_API_OBJECT_TYPE:
215 case JS_TYPED_ARRAY_PROTOTYPE_TYPE:
216 if (map.is_undetectable()) {
221 DCHECK(map.is_callable());
222 return kOtherUndetectable;
224 if (map.is_callable()) {
225 return kOtherCallable;
230 case JS_PRIMITIVE_WRAPPER_TYPE: {
231 DCHECK(!map.is_callable());
232 DCHECK(!map.is_undetectable());
233 auto elements_kind = map.elements_kind();
236 return kStringWrapper;
240 case JS_MESSAGE_OBJECT_TYPE:
242#ifdef V8_INTL_SUPPORT
243 case JS_V8_BREAK_ITERATOR_TYPE:
244 case JS_COLLATOR_TYPE:
245 case JS_DATE_TIME_FORMAT_TYPE:
246 case JS_DISPLAY_NAMES_TYPE:
247 case JS_DURATION_FORMAT_TYPE:
248 case JS_LIST_FORMAT_TYPE:
250 case JS_NUMBER_FORMAT_TYPE:
251 case JS_PLURAL_RULES_TYPE:
252 case JS_RELATIVE_TIME_FORMAT_TYPE:
253 case JS_SEGMENT_ITERATOR_TYPE:
254 case JS_SEGMENTER_TYPE:
255 case JS_SEGMENTS_TYPE:
257 case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
258 case JS_DISPOSABLE_STACK_BASE_TYPE:
259 case JS_ASYNC_DISPOSABLE_STACK_TYPE:
260 case JS_SYNC_DISPOSABLE_STACK_TYPE:
261 case JS_GENERATOR_OBJECT_TYPE:
262 case JS_ASYNC_FUNCTION_OBJECT_TYPE:
263 case JS_ASYNC_GENERATOR_OBJECT_TYPE:
264 case JS_MODULE_NAMESPACE_TYPE:
265 case JS_ARRAY_BUFFER_TYPE:
266 case JS_ARRAY_ITERATOR_TYPE:
267 case JS_REG_EXP_TYPE:
268 case JS_REG_EXP_STRING_ITERATOR_TYPE:
269 case JS_DATA_VIEW_TYPE:
270 case JS_RAB_GSAB_DATA_VIEW_TYPE:
273 case JS_SET_KEY_VALUE_ITERATOR_TYPE:
274 case JS_SET_VALUE_ITERATOR_TYPE:
275 case JS_MAP_KEY_ITERATOR_TYPE:
276 case JS_MAP_KEY_VALUE_ITERATOR_TYPE:
277 case JS_MAP_VALUE_ITERATOR_TYPE:
278 case JS_STRING_ITERATOR_TYPE:
279 case JS_ASYNC_FROM_SYNC_ITERATOR_TYPE:
280 case JS_ITERATOR_MAP_HELPER_TYPE:
281 case JS_ITERATOR_FILTER_HELPER_TYPE:
282 case JS_ITERATOR_TAKE_HELPER_TYPE:
283 case JS_ITERATOR_DROP_HELPER_TYPE:
284 case JS_ITERATOR_FLAT_MAP_HELPER_TYPE:
285 case JS_VALID_ITERATOR_WRAPPER_TYPE:
286 case JS_FINALIZATION_REGISTRY_TYPE:
287 case JS_WEAK_MAP_TYPE:
288 case JS_WEAK_REF_TYPE:
289 case JS_WEAK_SET_TYPE:
290 case JS_PROMISE_TYPE:
291 case JS_SHADOW_REALM_TYPE:
292 case JS_SHARED_ARRAY_TYPE:
293 case JS_SHARED_STRUCT_TYPE:
294 case JS_ATOMICS_CONDITION_TYPE:
295 case JS_ATOMICS_MUTEX_TYPE:
296 case JS_TEMPORAL_CALENDAR_TYPE:
297 case JS_TEMPORAL_DURATION_TYPE:
298 case JS_TEMPORAL_INSTANT_TYPE:
299 case JS_TEMPORAL_PLAIN_DATE_TYPE:
300 case JS_TEMPORAL_PLAIN_DATE_TIME_TYPE:
301 case JS_TEMPORAL_PLAIN_MONTH_DAY_TYPE:
302 case JS_TEMPORAL_PLAIN_TIME_TYPE:
303 case JS_TEMPORAL_PLAIN_YEAR_MONTH_TYPE:
304 case JS_TEMPORAL_TIME_ZONE_TYPE:
305 case JS_TEMPORAL_ZONED_DATE_TIME_TYPE:
306 case JS_RAW_JSON_TYPE:
307#if V8_ENABLE_WEBASSEMBLY
308 case WASM_GLOBAL_OBJECT_TYPE:
309 case WASM_INSTANCE_OBJECT_TYPE:
310 case WASM_MEMORY_OBJECT_TYPE:
311 case WASM_MODULE_OBJECT_TYPE:
312 case WASM_SUSPENDER_OBJECT_TYPE:
313 case WASM_SUSPENDING_OBJECT_TYPE:
314 case WASM_TABLE_OBJECT_TYPE:
315 case WASM_TAG_OBJECT_TYPE:
316 case WASM_EXCEPTION_PACKAGE_TYPE:
317 case WASM_VALUE_OBJECT_TYPE:
320 DCHECK(!map.is_callable());
321 DCHECK(!map.is_undetectable());
323#if V8_ENABLE_WEBASSEMBLY
324 case WASM_STRUCT_TYPE:
325 case WASM_ARRAY_TYPE:
328 case JS_BOUND_FUNCTION_TYPE:
329 DCHECK(!map.is_undetectable());
330 return kBoundFunction;
331 case JS_WRAPPED_FUNCTION_TYPE:
332 DCHECK(!map.is_undetectable());
333 return kOtherCallable;
334 case JS_FUNCTION_TYPE:
335 case JS_PROMISE_CONSTRUCTOR_TYPE:
336 case JS_REG_EXP_CONSTRUCTOR_TYPE:
337 case JS_ARRAY_CONSTRUCTOR_TYPE:
338#define TYPED_ARRAY_CONSTRUCTORS_SWITCH(Type, type, TYPE, Ctype) \
339 case TYPE##_TYPED_ARRAY_CONSTRUCTOR_TYPE:
341#undef TYPED_ARRAY_CONSTRUCTORS_SWITCH
342 DCHECK(!map.is_undetectable());
343 return kCallableFunction;
344 case JS_TYPED_ARRAY_TYPE:
345 DCHECK(!map.is_callable());
346 DCHECK(!map.is_undetectable());
348 case JS_CLASS_CONSTRUCTOR_TYPE:
349 return kClassConstructor;
351 DCHECK(!map.is_undetectable());
352 if (map.is_callable())
return kCallableProxy;
355 case ALLOCATION_SITE_TYPE:
356 case ACCESSOR_INFO_TYPE:
357 case SHARED_FUNCTION_INFO_TYPE:
358 case FUNCTION_TEMPLATE_INFO_TYPE:
359 case FUNCTION_TEMPLATE_RARE_DATA_TYPE:
360 case ACCESSOR_PAIR_TYPE:
361 case EMBEDDER_DATA_ARRAY_TYPE:
362 case FIXED_ARRAY_TYPE:
363 case CLASS_BOILERPLATE_TYPE:
364 case PROPERTY_DESCRIPTOR_OBJECT_TYPE:
365 case HASH_TABLE_TYPE:
366 case ORDERED_HASH_MAP_TYPE:
367 case ORDERED_HASH_SET_TYPE:
368 case ORDERED_NAME_DICTIONARY_TYPE:
369 case NAME_DICTIONARY_TYPE:
370 case GLOBAL_DICTIONARY_TYPE:
371 case NUMBER_DICTIONARY_TYPE:
372 case SIMPLE_NUMBER_DICTIONARY_TYPE:
373 case EPHEMERON_HASH_TABLE_TYPE:
374 case WEAK_FIXED_ARRAY_TYPE:
375 case WEAK_ARRAY_LIST_TYPE:
376 case FIXED_DOUBLE_ARRAY_TYPE:
377 case FEEDBACK_METADATA_TYPE:
378 case BYTE_ARRAY_TYPE:
379 case BYTECODE_ARRAY_TYPE:
380 case OBJECT_BOILERPLATE_DESCRIPTION_TYPE:
381 case ARRAY_BOILERPLATE_DESCRIPTION_TYPE:
382 case REG_EXP_BOILERPLATE_DESCRIPTION_TYPE:
383 case TRANSITION_ARRAY_TYPE:
384 case FEEDBACK_CELL_TYPE:
385 case CLOSURE_FEEDBACK_CELL_ARRAY_TYPE:
386 case FEEDBACK_VECTOR_TYPE:
387 case PROPERTY_ARRAY_TYPE:
389 case SCOPE_INFO_TYPE:
390 case SCRIPT_CONTEXT_TABLE_TYPE:
391 case AWAIT_CONTEXT_TYPE:
392 case BLOCK_CONTEXT_TYPE:
393 case CATCH_CONTEXT_TYPE:
394 case DEBUG_EVALUATE_CONTEXT_TYPE:
395 case EVAL_CONTEXT_TYPE:
396 case FUNCTION_CONTEXT_TYPE:
397 case MODULE_CONTEXT_TYPE:
398 case MODULE_REQUEST_TYPE:
399 case NATIVE_CONTEXT_TYPE:
400 case SCRIPT_CONTEXT_TYPE:
401 case WITH_CONTEXT_TYPE:
403 case INSTRUCTION_STREAM_TYPE:
405 case PROPERTY_CELL_TYPE:
406 case CONTEXT_SIDE_PROPERTY_CELL_TYPE:
407 case SOURCE_TEXT_MODULE_TYPE:
408 case SOURCE_TEXT_MODULE_INFO_ENTRY_TYPE:
409 case SYNTHETIC_MODULE_TYPE:
411 case PREPARSE_DATA_TYPE:
412 case UNCOMPILED_DATA_WITHOUT_PREPARSE_DATA_TYPE:
413 case UNCOMPILED_DATA_WITH_PREPARSE_DATA_TYPE:
414 case COVERAGE_INFO_TYPE:
415 case REG_EXP_DATA_TYPE:
416 case ATOM_REG_EXP_DATA_TYPE:
417 case IR_REG_EXP_DATA_TYPE:
418#if V8_ENABLE_WEBASSEMBLY
419 case WASM_TYPE_INFO_TYPE:
421 return kOtherInternal;
437 if (std::isnan(value))
return kNaN;
445 {kOtherSigned32, kNegative32,
kMinInt},
446 {kNegative31, kNegative31, -0x40000000},
447 {kUnsigned30, kUnsigned30, 0},
448 {kOtherUnsigned31, kUnsigned31, 0x40000000},
449 {kOtherUnsigned32, kUnsigned32, 0x80000000},
450 {kOtherNumber, kPlainNumber,
static_cast<double>(
kMaxUInt32) + 1}};
463 if (!(bits & kPlainNumber))
return bits;
464 const Boundary* boundaries = Boundaries();
465 for (
size_t i = 0;
i < BoundariesSize(); ++
i) {
475 const Boundary* mins = Boundaries();
477 for (
size_t i = 1;
i < BoundariesSize(); ++
i) {
478 if (min < mins[
i].min) {
480 if (max < mins[
i].min)
return lub;
483 return lub | mins[BoundariesSize() - 1].
internal;
491 const Boundary* mins = Boundaries();
494 if (max < -1 || min > 0)
return glb;
496 for (
size_t i = 1;
i + 1 < BoundariesSize(); ++
i) {
497 if (min <= mins[
i].min) {
498 if (max + 1 < mins[
i + 1].min)
break;
504 return glb & ~(kOtherNumber);
511 const Boundary* mins = Boundaries();
513 for (
size_t i = 0;
i < BoundariesSize(); ++
i) {
515 return mz ? std::min(0.0, mins[
i].min) : mins[
i].
min;
526 const Boundary* mins = Boundaries();
531 for (
size_t i = BoundariesSize() - 1;
i-- > 0;) {
533 return mz ? std::max(0.0, mins[
i + 1].min - 1) : mins[
i + 1].
min - 1;
571 if (that.
IsHeapConstant() || that.IsOtherNumberConstant())
return false;
574 if (!that.
IsTuple())
return false;
576 const TupleType* that_tuple = that.AsTuple();
577 if (this_tuple->
Arity() != that_tuple->
Arity()) {
580 for (
int i = 0, n = this_tuple->
Arity();
i < n; ++
i) {
593 if (that.IsBitset()) {
603 for (
int i = 0, n = this->
AsUnion()->Length();
i <
n; ++
i) {
610 if (that.IsUnion()) {
611 for (
int i = 0, n = that.AsUnion()->Length();
i < n; ++
i) {
612 if (this->
Is(that.
AsUnion()->Get(
i)))
return true;
613 if (
i > 1 && this->
IsRange())
return false;
621 if (this->
IsRange())
return false;
623#ifdef V8_ENABLE_WEBASSEMBLY
624 if (this->IsWasm()) {
625 if (!that.IsWasm())
return false;
644 for (
int i = 0, n = this->
AsUnion()->Length();
i <
n; ++
i) {
651 if (that.IsUnion()) {
652 for (
int i = 0, n = that.AsUnion()->Length();
i < n; ++
i) {
664 if (that.IsBitset()) {
666 if (number_bits == BitsetType::kNone) {
674 if (that.IsRange()) {
675 return that.Maybe(*
this);
686 if (this->
IsRange())
return *
this;
688 return this->
AsUnion()->Get(1);
706 for (
int i = 0;
i < this->
Length(); ++
i) {
710 for (
int j = 0; j < this->
Length(); ++j) {
734 if (type1.
Is(type2))
return type1;
735 if (type2.
Is(type1))
return type2;
741 if (type1.
Is(type2)) {
743 }
else if (type2.
Is(type1)) {
769 bits &= ~number_bits;
777 result->Set(size++, range);
785 for (
int i = 2;
i <
size;) {
786 if (
result->Get(
i).Is(range)) {
798 if (number_bits == BitsetType::kNone) {
816 for (
int i = 0, n = lhs.
AsUnion()->Length();
i < n; ++
i) {
822 for (
int i = 0, n = rhs.
AsUnion()->Length();
i < n; ++
i) {
869 if (number_bits == 0) {
875 bitset range_lub = range.BitsetLub();
884 double range_min = range.Min();
885 double range_max = range.Max();
890 *bits &= ~number_bits;
892 if (range_min <= bitset_min && range_max >= bitset_max) {
897 if (bitset_min < range_min) {
898 range_min = bitset_min;
900 if (bitset_max > range_max) {
901 range_max = bitset_max;
908 return Range(value, value, zone);
910 return Type::MinusZero();
911 }
else if (std::isnan(value)) {
933 return Constant(
static_cast<double>(ref.AsSmi()), zone);
935 if (ref.IsString() && !ref.IsInternalizedString()) {
936 return Type::String();
938 if (ref.IsJSPrimitiveWrapper() &&
939 ref.AsJSPrimitiveWrapper().IsStringWrapper(
broker)) {
940 return Type::StringWrapper();
945 if (ref.IsJSTypedArray()) {
946 return Type::TypedArray();
966 if (type1.
Is(type2))
return type2;
967 if (type2.
Is(type1))
return type1;
985 if (range1 !=
nullptr && range2 !=
nullptr) {
991 }
else if (range1 !=
nullptr) {
993 }
else if (range2 !=
nullptr) {
997 result->Set(size++, bits);
998 if (!range.IsNone())
result->Set(size++, range);
1008 if (type.IsBitset() || type.IsRange())
return size;
1009 if (type.IsUnion()) {
1010 for (
int i = 0, n = type.AsUnion()->Length();
i < n; ++
i) {
1015 for (
int i = 0;
i <
size; ++
i) {
1018 result->Set(size++, type);
1027 return unioned->
Get(0);
1031 if (size == 2 && bits == BitsetType::kNone) {
1039 return Type(unioned);
1048 for (
int i = 0, n = this->
AsUnion()->Length();
i <
n; ++
i) {
1062#define RETURN_NAMED_TYPE(type, value) \
1067#undef RETURN_NAMED_TYPE
1076 const char* name =
Name(bits);
1077 if (name !=
nullptr) {
1083 static const bitset named_bitsets[] = {
1084#define BITSET_CONSTANT(type, value) k##type,
1087#undef BITSET_CONSTANT
1091 bool is_first =
true;
1093 for (
int i(
arraysize(named_bitsets) - 1); bits != 0 &&
i >= 0; --
i) {
1094 bitset subset = named_bitsets[
i];
1095 if ((bits & subset) == subset) {
1096 if (!is_first) os <<
" | ";
1116 std::ostream::fmtflags saved_flags = os.setf(std::ios::fixed);
1117 std::streamsize saved_precision = os.precision(0);
1118 os <<
"Range(" << this->
AsRange()->Min() <<
", " << this->
AsRange()->Max()
1120 os.flags(saved_flags);
1121 os.precision(saved_precision);
1124 for (
int i = 0, n = this->
AsUnion()->Length();
i <
n; ++
i) {
1126 if (
i > 0) os <<
" | ";
1132 for (
int i = 0, n = this->
AsTuple()->Arity();
i <
n; ++
i) {
1134 if (
i > 0) os <<
", ";
1138#ifdef V8_ENABLE_WEBASSEMBLY
1139 }
else if (this->IsWasm()) {
1140 os <<
"Wasm:" << this->AsWasm().type.name();
1234#ifdef V8_ENABLE_WEBASSEMBLY
1238 return FromTypeBase(WasmType::New(value_type, module, zone));
1243 return Wasm(type_in_module.
type, type_in_module.
module, zone);
1246wasm::TypeInModule Type::AsWasm()
const {
1248 auto wasm_type =
static_cast<const WasmType*
>(
ToTypeBase());
1249 return {wasm_type->value_type(), wasm_type->module()};
1262 uint32_t low = bits & 0xffffffff;
1263 uint32_t high = (bits >> 32) & 0xffffffff;
1268 for (
int i = 1;
i < union_type->
Length(); ++
i) {
1269 result = factory->NewTurbofanUnionType(
1278 return factory->NewTurbofanOtherNumberConstantType(
1289#define VERIFY_TORQUE_LOW_BITSET_AGREEMENT(Name, _) \
1290 static_assert(static_cast<uint32_t>(BitsetType::k##Name) == \
1291 static_cast<uint32_t>(TurbofanTypeLowBits::k##Name));
1292#define VERIFY_TORQUE_HIGH_BITSET_AGREEMENT(Name, _) \
1293 static_assert(static_cast<uint32_t>( \
1294 static_cast<uint64_t>(BitsetType::k##Name) >> 32) == \
1295 static_cast<uint32_t>(TurbofanTypeHighBits::k##Name));
1299#undef VERIFY_TORQUE_HIGH_BITSET_AGREEMENT
1300#undef VERIFY_TORQUE_LOW_BITSET_AGREEMENT
#define SLOW_DCHECK(condition)
static bitset Glb(double min, double max)
static bool Is(bitset bits1, bitset bits2)
static void Print(std::ostream &os, bitset)
static const char * Name(bitset)
static bitset UnsignedSmall()
static bitset SignedSmall()
static const Boundary BoundariesArray[]
static const Boundary * Boundaries()
static size_t BoundariesSize()
static bool IsNone(bitset bits)
static bitset Lub(HeapObjectType const &type, JSHeapBroker *broker)
static double Min(bitset)
static double Max(bitset)
static bitset NumberBits(bitset bits)
static bitset ExpandInternals(bitset bits)
HeapConstantType(BitsetType::bitset bitset, HeapObjectRef heap_ref)
static HeapConstantType * New(HeapObjectRef heap_ref, BitsetType::bitset bitset, Zone *zone)
Handle< HeapObject > Value() const
IndirectHandle< HeapObject > object() const
static OtherNumberConstantType * New(double value, Zone *zone)
static bool IsOtherNumberConstant(double value)
static bool IsInteger(double x)
BitsetType::bitset bitset_
BitsetType::bitset Lub() const
static RangeType * New(double min, double max, Zone *zone)
void InitElement(int i, Type type)
static TupleType * New(int length, Zone *zone)
Type Element(int i) const
static bool Contains(const RangeType *lhs, const RangeType *rhs)
static int IntersectAux(Type type, Type other, UnionType *result, int size, RangeType::Limits *limits, Zone *zone)
static Type Union(Type type1, Type type2, Zone *zone)
static RangeType::Limits ToLimits(bitset bits, Zone *zone)
static Type HeapConstant(HeapObjectRef value, JSHeapBroker *broker, Zone *zone)
bool CanBeAsserted() const
const UnionType * AsUnion() const
bool Maybe(Type that) const
const OtherNumberConstantType * AsOtherNumberConstant() const
bool IsHeapConstant() const
void PrintTo(std::ostream &os) const
const HeapConstantType * AsHeapConstant() const
bool SlowIs(Type that) const
static Type Constant(JSHeapBroker *broker, Handle< i::Object > value, Zone *zone)
const TupleType * AsTuple() const
const TypeBase * ToTypeBase() const
bool Equals(Type that) const
static Type OtherNumberConstant(double value, Zone *zone)
static int UpdateRange(Type type, UnionType *result, int size, Zone *zone)
static Type Tuple(Type first, Type second, Type third, Zone *zone)
bool SimplyEquals(Type that) const
static Type Intersect(Type type1, Type type2, Zone *zone)
static Type NormalizeRangeAndBitset(Type range, bitset *bits, Zone *zone)
static bool Overlap(const RangeType *lhs, const RangeType *rhs)
const RangeType * AsRange() const
static Type FromTypeBase(TypeBase *type)
Handle< TurbofanType > AllocateOnHeap(Factory *factory)
static Type Range(double min, double max, Zone *zone)
static Type NewBitset(bitset bits)
BitsetType::bitset bitset
static int AddToUnion(Type type, UnionType *result, int size, Zone *zone)
bool IsOtherNumberConstant() const
static RangeType::Limits IntersectRangeAndBitset(Type range, Type bits, Zone *zone)
bool IsKind(TypeBase::Kind kind) const
static Type NormalizeUnion(UnionType *unioned, int size, Zone *zone)
static UnionType * New(int length, Zone *zone)
#define PROPER_BITSET_TYPE_LIST(V)
#define PROPER_ATOMIC_BITSET_TYPE_HIGH_LIST(V)
#define INTERNAL_BITSET_TYPE_LIST(V)
#define PROPER_ATOMIC_BITSET_TYPE_LOW_LIST(V)
ZoneVector< RpoNumber > & result
bool SignedAddOverflow32(int32_t lhs, int32_t rhs, int32_t *val)
V8_INLINE const Operation & Get(const Graph &graph, OpIndex index)
ref_traits< T >::ref_type MakeRefAssumeMemoryFence(JSHeapBroker *broker, Tagged< T > object)
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
V8_INLINE bool IsSubtypeOf(ValueType subtype, ValueType supertype, const WasmModule *sub_module, const WasmModule *super_module)
bool IsUint32Double(double value)
bool Is(IndirectHandle< U > value)
bool IsInt32Double(double value)
@ SLOW_STRING_WRAPPER_ELEMENTS
@ FAST_STRING_WRAPPER_ELEMENTS
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in name
constexpr bool SmiValuesAre31Bits()
@ UNCACHED_EXTERNAL_INTERNALIZED_ONE_BYTE_STRING_TYPE
@ SHARED_SEQ_ONE_BYTE_STRING_TYPE
@ SEQ_ONE_BYTE_STRING_TYPE
@ SHARED_SEQ_TWO_BYTE_STRING_TYPE
@ UNCACHED_EXTERNAL_TWO_BYTE_STRING_TYPE
@ SHARED_EXTERNAL_TWO_BYTE_STRING_TYPE
@ UNCACHED_EXTERNAL_INTERNALIZED_TWO_BYTE_STRING_TYPE
@ CONS_ONE_BYTE_STRING_TYPE
@ SLICED_TWO_BYTE_STRING_TYPE
@ UNCACHED_EXTERNAL_ONE_BYTE_STRING_TYPE
@ SHARED_UNCACHED_EXTERNAL_TWO_BYTE_STRING_TYPE
@ SLICED_ONE_BYTE_STRING_TYPE
@ EXTERNAL_TWO_BYTE_STRING_TYPE
@ SEQ_TWO_BYTE_STRING_TYPE
@ THIN_ONE_BYTE_STRING_TYPE
@ SHARED_UNCACHED_EXTERNAL_ONE_BYTE_STRING_TYPE
@ EXTERNAL_INTERNALIZED_TWO_BYTE_STRING_TYPE
@ SHARED_EXTERNAL_ONE_BYTE_STRING_TYPE
@ CONS_TWO_BYTE_STRING_TYPE
@ EXTERNAL_INTERNALIZED_ONE_BYTE_STRING_TYPE
@ EXTERNAL_ONE_BYTE_STRING_TYPE
@ INTERNALIZED_ONE_BYTE_STRING_TYPE
@ INTERNALIZED_TWO_BYTE_STRING_TYPE
@ THIN_TWO_BYTE_STRING_TYPE
static bool IsMinusZero(double value)
constexpr uint32_t kMaxUInt32
#define DCHECK_LE(v1, v2)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
static Limits Union(Limits lhs, Limits rhs)
static Limits Intersect(Limits lhs, Limits rhs)
const WasmModule * module
#define TYPED_ARRAY_CONSTRUCTORS_SWITCH(Type, type, TYPE, Ctype)
#define BITSET_CONSTANT(type, value)
#define VERIFY_TORQUE_LOW_BITSET_AGREEMENT(Name, _)
#define VERIFY_TORQUE_HIGH_BITSET_AGREEMENT(Name, _)
#define RETURN_NAMED_TYPE(type, value)