28 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_
29 #define V8_HYDROGEN_INSTRUCTIONS_H_
49 class HLoopInformation;
55 #define HYDROGEN_ABSTRACT_INSTRUCTION_LIST(V) \
57 V(BitwiseBinaryOperation) \
58 V(ControlInstruction) \
62 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \
64 V(AccessArgumentsAt) \
68 V(ArgumentsElements) \
77 V(CallConstantFunction) \
88 V(CheckInstanceType) \
91 V(CheckPrototypeMaps) \
94 V(ClassOfTestAndBranch) \
95 V(CompareIDAndBranch) \
97 V(CompareObjectEqAndBranch) \
99 V(CompareConstantEqAndBranch) \
109 V(FixedArrayBaseLength) \
110 V(ForceRepresentation) \
112 V(GetCachedArrayIndex) \
116 V(HasCachedArrayIndexAndBranch) \
117 V(HasInstanceTypeAndBranch) \
120 V(InstanceOfKnownGlobal) \
122 V(IsConstructCallAndBranch) \
124 V(IsObjectAndBranch) \
125 V(IsStringAndBranch) \
127 V(IsUndetectableAndBranch) \
132 V(LoadExternalArrayPointer) \
133 V(LoadFunctionPrototype) \
135 V(LoadGlobalGeneric) \
136 V(LoadKeyedFastDoubleElement) \
137 V(LoadKeyedFastElement) \
138 V(LoadKeyedGeneric) \
139 V(LoadKeyedSpecializedArrayElement) \
141 V(LoadNamedFieldPolymorphic) \
142 V(LoadNamedGeneric) \
163 V(StoreContextSlot) \
165 V(StoreGlobalGeneric) \
166 V(StoreKeyedFastDoubleElement) \
167 V(StoreKeyedFastElement) \
168 V(StoreKeyedGeneric) \
169 V(StoreKeyedSpecializedArrayElement) \
171 V(StoreNamedGeneric) \
173 V(StringCharCodeAt) \
174 V(StringCharFromCode) \
175 V(StringCompareAndBranch) \
180 V(ToFastProperties) \
181 V(TransitionElementsKind) \
183 V(TypeofIsAndBranch) \
184 V(UnaryMathOperation) \
191 V(LoadFieldByIndex) \
195 #define GVN_TRACKED_FLAG_LIST(V) \
198 #define GVN_UNTRACKED_FLAG_LIST(V) \
201 V(BackingStoreFields) \
205 V(DoubleArrayElements) \
206 V(SpecializedArrayElements) \
213 #define DECLARE_ABSTRACT_INSTRUCTION(type) \
214 virtual bool Is##type() const { return true; } \
215 static H##type* cast(HValue* value) { \
216 ASSERT(value->Is##type()); \
217 return reinterpret_cast<H##type*>(value); \
221 #define DECLARE_CONCRETE_INSTRUCTION(type) \
222 virtual LInstruction* CompileToLithium(LChunkBuilder* builder); \
223 static H##type* cast(HValue* value) { \
224 ASSERT(value->Is##type()); \
225 return reinterpret_cast<H##type*>(value); \
227 virtual Opcode opcode() const { return HValue::k##type; }
231 #define ASSERT_ALLOCATION_DISABLED do { \
232 OptimizingCompilerThread* thread = \
233 ISOLATE->optimizing_compiler_thread(); \
234 ASSERT(thread->IsOptimizerThread() || !HEAP->IsAllocationAllowed()); \
237 #define ASSERT_ALLOCATION_DISABLED do {} while (0)
246 can_be_minus_zero_(
false) { }
252 can_be_minus_zero_(
false) { }
264 Range* result =
new(zone)
Range(lower_, upper_);
271 bool CanBeZero()
const {
return upper_ >= 0 && lower_ <= 0; }
273 bool Includes(
int value)
const {
return lower_ <= value && upper_ >= value; }
306 bool can_be_minus_zero_;
330 return kind_ == other.kind_;
372 return HType(static_cast<Type>(type_ & other.type_));
376 return type_ == other.type_;
384 ASSERT(type_ != kUninitialized);
385 return ((type_ & kTagged) == kTagged);
389 ASSERT(type_ != kUninitialized);
390 return ((type_ & kTaggedPrimitive) == kTaggedPrimitive);
394 ASSERT(type_ != kUninitialized);
395 return ((type_ & kTaggedNumber) == kTaggedNumber);
399 ASSERT(type_ != kUninitialized);
400 return ((type_ & kSmi) == kSmi);
404 ASSERT(type_ != kUninitialized);
405 return ((type_ & kHeapNumber) == kHeapNumber);
409 ASSERT(type_ != kUninitialized);
410 return ((type_ & kString) == kString);
414 ASSERT(type_ != kUninitialized);
415 return ((type_ & kBoolean) == kBoolean);
419 ASSERT(type_ != kUninitialized);
420 return ((type_ & kNonPrimitive) == kNonPrimitive);
424 ASSERT(type_ != kUninitialized);
425 return ((type_ & kJSArray) == kJSArray);
429 ASSERT(type_ != kUninitialized);
430 return ((type_ & kJSObject) == kJSObject);
434 return type_ == kUninitialized;
438 ASSERT(type_ != kUninitialized);
449 kTaggedPrimitive = 0x5,
455 kNonPrimitive = 0x101,
458 kUninitialized = 0x1fff
462 STATIC_ASSERT(kUninitialized < (1 << (2 *
kBitsPerByte)));
464 explicit HType(Type t) : type_(t) { }
473 : tail_(tail), value_(value), index_(index) {
478 int index()
const {
return index_; }
531 #define DECLARE_FLAG(type) kChanges##type, kDependsOn##type,
537 #define COUNT_FLAG(type) + 1
582 return static_cast<GVNFlag>(x * 2);
585 return static_cast<GVNFlag>(x * 2 + 1);
595 #define DECLARE_OPCODE(type) k##type,
598 #undef DECLARE_OPCODE
603 #define DECLARE_PREDICATE(type) \
604 bool Is##type() const { return opcode() == k##type; }
606 #undef DECLARE_PREDICATE
610 #define DECLARE_PREDICATE(type) \
611 virtual bool Is##type() const { return false; }
613 #undef DECLARE_PREDICATE
786 virtual void Verify() = 0;
814 #define ADD_FLAG(type) result.Add(kDependsOn##type);
824 #define ADD_FLAG(type) result.Add(kChanges##type);
834 result.
Remove(kChangesOsrEntries);
842 result.
Remove(kChangesNewSpacePromotion);
843 result.
Remove(kChangesElementsKind);
844 result.
Remove(kChangesElementsPointer);
845 result.
Remove(kChangesMaps);
869 virtual bool IsDeletable()
const {
return false; }
871 DISALLOW_COPY_AND_ASSIGN(
HValue);
890 bool has_position()
const {
return position_ != RelocInfo::kNoPosition; }
893 ASSERT(position != RelocInfo::kNoPosition);
902 virtual void Verify();
913 position_(RelocInfo::kNoPosition) {
925 void PrintMnemonicTo(StringStream* stream);
983 template<
int S,
int V>
1029 : values_(environment_length, zone) { }
1049 values_.Add(
NULL, zone);
1062 values_[index] = value;
1121 return expected_input_types_;
1137 : HUnaryControlInstruction(value, true_target, false_target),
1257 bool deoptimize_on_undefined)
1295 virtual bool IsDeletable()
const {
1319 virtual bool IsDeletable()
const {
return true; }
1327 pop_count_(pop_count),
1329 assigned_indexes_(2, zone),
1345 ASSERT(HasAssignedIndexAt(index));
1346 return assigned_indexes_[index];
1349 return assigned_indexes_[index] != kNoIndex;
1352 AddValue(index, value);
1355 AddValue(kNoIndex, value);
1367 virtual void Verify();
1372 values_[index] =
value;
1376 static const int kNoIndex = -1;
1377 void AddValue(
int index,
HValue* value) {
1378 assigned_indexes_.Add(index, zone_);
1380 values_.Add(
NULL, zone_);
1387 ZoneList<HValue*> values_;
1388 ZoneList<int> assigned_indexes_;
1441 int arguments_count,
1447 : closure_(closure),
1448 arguments_count_(arguments_count),
1449 arguments_pushed_(
false),
1450 function_(function),
1451 call_kind_(call_kind),
1452 inlining_kind_(inlining_kind),
1453 arguments_var_(arguments_var),
1454 arguments_values_(arguments_values) {
1478 int arguments_count_;
1479 bool arguments_pushed_;
1533 virtual bool IsDeletable()
const {
return true; }
1554 virtual bool IsDeletable()
const {
return true; }
1575 virtual bool IsDeletable()
const {
return true; }
1623 virtual bool IsDeletable()
const {
return true; }
1645 virtual bool IsDeletable()
const {
return true; }
1653 explicit HCall<V>(
int argument_count) : argument_count_(argument_count) {
1665 int argument_count_;
1672 :
HCall<1>(argument_count) {
1689 :
HCall<2>(argument_count) {
1708 :
HBinaryCall(context, function, argument_count) {
1716 known_function_(known_function) {
1737 : HCall<0>(argument_count), function_(function) { }
1742 return function_->code() ==
1743 Isolate::Current()->builtins()->builtin(Builtins::kFunctionApply);
1762 : HBinaryCall(context, key, argument_count) {
1779 :
HUnaryCall(context, argument_count), name_(name) {
1801 :
HBinaryCall(context, function, argument_count) {
1818 :
HUnaryCall(context, argument_count), name_(name) {
1840 : HCall<0>(argument_count), target_(target) { }
1860 : HBinaryCall(context, constructor, argument_count) {
1880 : HCall<1>(argument_count), c_function_(c_function), name_(name) {
1933 virtual bool IsDeletable()
const {
return true; }
1956 virtual bool IsDeletable()
const {
return true; }
1979 virtual bool IsDeletable()
const {
return true; }
2001 virtual bool IsDeletable()
const {
return true; }
2026 virtual bool IsDeletable()
const {
return true; }
2098 const char* OpName()
const;
2105 return op_ == b->
op();
2109 virtual bool IsDeletable()
const {
return true; }
2140 virtual bool IsDeletable()
const {
return true; }
2166 virtual bool IsDeletable()
const {
return true; }
2182 map_set()->Add(map, zone);
2191 for (
int i = 0; i < maps->
length(); i++) {
2192 map_set()->Add(maps->
at(i), zone);
2210 Map* transitioned_map =
2211 map->LookupElementsTransitionMap(kind);
2212 if (transitioned_map) {
2235 if (map_set()->length() != b->
map_set()->
length())
return false;
2236 for (
int i = 0; i < map_set()->length(); i++) {
2237 if (!map_set()->at(i).is_identical_to(b->
map_set()->
at(i)))
return false;
2262 virtual void Verify();
2272 return target_.is_identical_to(b->
target());
2305 void GetCheckMaskAndTag(uint8_t* mask, uint8_t* tag);
2315 return check_ == b->check_;
2324 LAST_INTERVAL_CHECK = IS_JS_ARRAY
2327 const char* GetCheckName();
2330 : HUnaryOperation(value), check_(check) {
2353 virtual void Verify();
2378 : prototype_(prototype), holder_(holder) {
2384 virtual void Verify();
2400 intptr_t hash =
reinterpret_cast<intptr_t
>(*prototype());
2401 hash = 17 * hash +
reinterpret_cast<intptr_t
>(*holder());
2408 return prototype_.is_identical_to(b->
prototype()) &&
2409 holder_.is_identical_to(b->
holder());
2431 virtual void Verify();
2445 merged_index_(merged_index),
2448 is_convertible_to_integer_(
true) {
2450 non_phi_uses_[i] = 0;
2451 indirect_uses_[i] = 0;
2453 ASSERT(merged_index >= 0);
2467 HValue* GetRedundantReplacement();
2468 void AddInput(
HValue* value);
2478 virtual void Verify();
2481 void InitRealUses(
int id);
2482 void AddNonPhiUsesFrom(
HPhi* other);
2483 void AddIndirectUsesTo(
int* use_count);
2514 return is_convertible_to_integer_;
2518 is_convertible_to_integer_ = b;
2530 void ResetInteger32Uses();
2535 inputs_[index] =
value;
2546 bool is_convertible_to_integer_;
2564 virtual
bool IsDeletable()
const {
return true; }
2575 if (handle_.is_null()) {
2578 ASSERT(has_int32_value_ || !handle_->IsSmi());
2585 if (has_int32_value_) {
2588 if (has_double_value_) {
2589 if (BitCast<int64_t>(double_value_) == BitCast<int64_t>(-0.0) ||
2590 isnan(double_value_)) {
2596 ASSERT(!handle_.is_null());
2600 ASSERT(*handle_ != heap->minus_zero_value());
2601 ASSERT(*handle_ != heap->nan_value());
2602 if (*handle_ == heap->undefined_value())
return true;
2603 if (*handle_ == heap->null_value())
return true;
2604 if (*handle_ == heap->true_value())
return true;
2605 if (*handle_ == heap->false_value())
return true;
2606 if (*handle_ == heap->the_hole_value())
return true;
2607 if (*handle_ == heap->empty_string())
return true;
2616 return has_int32_value_;
2628 ASSERT(HasInteger32Value());
2629 return int32_value_;
2633 ASSERT(HasDoubleValue());
2634 return double_value_;
2638 ASSERT(HasNumberValue());
2642 return int32_value_;
2648 return HasInteger32Value() && (Integer32Value() >= 0);
2655 if (has_int32_value_) {
2656 hash =
static_cast<intptr_t
>(int32_value_);
2657 }
else if (has_double_value_) {
2658 hash =
static_cast<intptr_t
>(BitCast<int64_t>(double_value_));
2660 ASSERT(!handle_.is_null());
2661 hash =
reinterpret_cast<intptr_t
>(*handle_);
2668 virtual void Verify() { }
2678 if (has_int32_value_) {
2679 return other_constant->has_int32_value_ &&
2680 int32_value_ == other_constant->int32_value_;
2681 }
else if (has_double_value_) {
2682 return other_constant->has_double_value_ &&
2683 BitCast<int64_t>(double_value_) ==
2684 BitCast<int64_t>(other_constant->double_value_);
2686 ASSERT(!handle_.is_null());
2687 return !other_constant->handle_.
is_null() &&
2688 *handle_ == *other_constant->handle_;
2693 virtual bool IsDeletable()
const {
return true; }
2706 bool has_int32_value_ : 1;
2707 bool has_double_value_ : 1;
2709 double double_value_;
2729 if (IsCommutative() && left()->IsConstant())
return right();
2734 if (IsCommutative() && left()->IsConstant())
return left();
2818 virtual bool IsDeletable()
const {
return true; }
2841 virtual bool IsDeletable()
const {
return true; }
2884 : key_mode_(key_mode) {
2900 if (index()->
representation().IsTagged() && !index()->IsConstant()) {
2905 if (index()->IsConstant() &&
2956 return observed_input_representation_[index];
2960 observed_input_representation_[1] = r;
2961 observed_input_representation_[2] = r;
2967 virtual
bool IsDeletable()
const {
return true; }
2969 Representation observed_input_representation_[3];
2994 virtual bool IsDeletable()
const {
return true; }
3023 return left()->representation();
3029 virtual bool IsDeletable()
const {
return true; }
3080 return input_representation_;
3084 return input_representation_;
3119 : HUnaryControlInstruction(left,
NULL,
NULL), op_(op), right_(right) {
3120 ASSERT(op == Token::EQ_STRICT);
3142 : HUnaryControlInstruction(value,
NULL,
NULL), kind_(kind), nil_(nil) { }
3164 : HUnaryControlInstruction(value,
NULL,
NULL) { }
3176 : HUnaryControlInstruction(value,
NULL,
NULL) { }
3189 : HUnaryControlInstruction(value,
NULL,
NULL) { }
3205 : HUnaryControlInstruction(value,
NULL,
NULL) { }
3264 : HUnaryControlInstruction(value,
NULL,
NULL), from_(type), to_(type) { }
3266 : HUnaryControlInstruction(value,
NULL,
NULL), from_(from), to_(to) {
3290 : HUnaryControlInstruction(value,
NULL,
NULL) { }
3317 virtual bool IsDeletable()
const {
return true; }
3324 : HUnaryControlInstruction(value,
NULL,
NULL),
3325 class_name_(class_name) { }
3345 : HUnaryControlInstruction(value,
NULL,
NULL),
3346 type_literal_(type_literal) { }
3387 : function_(right) {
3411 class
HPower: public HTemplateInstruction<2> {
3436 virtual bool IsDeletable()
const {
3437 return !right()->representation().IsTagged();
3458 virtual
bool IsDeletable()
const {
return true; }
3556 if (right()->IsConstant() &&
3635 return other->IsMathMinMax() &&
3642 Operation operation_;
3650 ASSERT(op == Token::BIT_AND ||
3651 op == Token::BIT_OR ||
3652 op == Token::BIT_XOR);
3765 unsigned index()
const {
return index_; }
3783 : HUnaryCall(context, argument_count),
3784 major_key_(major_key),
3793 transcendental_type_ = transcendental_type;
3796 return transcendental_type_;
3808 CodeStub::Major major_key_;
3816 : incoming_value_(
NULL) {
3825 incoming_value_ =
value;
3829 return incoming_value_;
3835 HPhi* incoming_value_;
3842 : cell_(cell), details_(details) {
3849 bool RequiresHoleCheck()
const;
3855 return reinterpret_cast<intptr_t
>(*cell_);
3867 return cell_.is_identical_to(b->
cell());
3871 virtual bool IsDeletable()
const {
return !RequiresHoleCheck(); }
3874 PropertyDetails details_;
3885 for_typeof_(for_typeof) {
3912 return !value->type().IsBoolean()
3913 && !value->type().IsSmi()
3914 && !(value->IsConstant() &&
HConstant::cast(value)->ImmortalImmovable());
3919 HValue* new_space_dominator) {
3920 return !
object->IsAllocateObject() || (
object != new_space_dominator);
3928 PropertyDetails details)
3937 return !details_.IsDontDelete() || details_.IsReadOnly();
3952 PropertyDetails details_;
3964 strict_mode_flag_(strict_mode_flag) {
4004 kCheckReturnUndefined
4008 : HUnaryOperation(context), slot_index_(var->index()) {
4010 switch (var->
mode()) {
4013 mode_ = kCheckDeoptimize;
4016 mode_ = kCheckReturnUndefined;
4030 return mode_ == kCheckDeoptimize;
4034 return mode_ != kNoCheck;
4052 virtual bool IsDeletable()
const {
return !RequiresHoleCheck(); }
4071 kCheckIgnoreAssignment
4075 : slot_index_(slot_index), mode_(mode) {
4091 return mode_ == kCheckDeoptimize;
4095 return mode_ != kNoCheck;
4115 : HUnaryOperation(object),
4116 is_in_object_(is_in_object),
4142 return is_in_object_ == b->is_in_object_ && offset_ == b->offset_;
4146 virtual bool IsDeletable()
const {
return true; }
4175 static const
int kMaxLoadPolymorphism = 4;
4218 : HUnaryOperation(function) {
4238 virtual HValue* GetKey() = 0;
4239 virtual void SetKey(
HValue* key) = 0;
4240 virtual void SetIndexOffset(uint32_t index_offset) = 0;
4241 virtual bool IsDehoisted() = 0;
4242 virtual void SetDehoisted(
bool is_dehoisted) = 0;
4255 bit_field_ = ElementsKindField::encode(elements_kind);
4273 bit_field_ = IndexOffsetField::update(bit_field_, index_offset);
4279 bit_field_ = IsDehoistedField::update(bit_field_, is_dehoisted);
4282 return ElementsKindField::decode(bit_field_);
4294 bool RequiresHoleCheck()
const;
4300 if (!other->IsLoadKeyedFastElement())
return false;
4302 if (IsDehoisted() && index_offset() != other_load->
index_offset())
4308 virtual bool IsDeletable()
const {
return !RequiresHoleCheck(); }
4310 class ElementsKindField:
public BitField<ElementsKind, 0, 4> {};
4311 class IndexOffsetField:
public BitField<uint32_t, 4, 27> {};
4312 class IsDehoistedField:
public BitField<bool, 31, 1> {};
4313 uint32_t bit_field_;
4329 is_dehoisted_(
false),
4330 hole_check_mode_(hole_check_mode) {
4366 if (!other->IsLoadKeyedFastDoubleElement())
return false;
4369 return hole_check_mode_ == other_load->hole_check_mode_;
4373 virtual bool IsDeletable()
const {
return !RequiresHoleCheck(); }
4375 uint32_t index_offset_;
4388 : elements_kind_(elements_kind),
4390 is_dehoisted_(
false) {
4400 SetGVNFlag(kDependsOnSpecializedArrayElements);
4432 if (!other->IsLoadKeyedSpecializedArrayElement())
return false;
4439 virtual bool IsDeletable()
const {
return true; }
4442 uint32_t index_offset_;
4481 is_in_object_(in_object),
4483 new_space_dominator_(
NULL) {
4488 if (is_in_object_) {
4501 ASSERT(side_effect == kChangesNewSpacePromotion);
4502 new_space_dominator_ = dominator;
4530 HValue* new_space_dominator_;
4542 strict_mode_flag_(strict_mode_flag) {
4574 : elements_kind_(elements_kind), index_offset_(0), is_dehoisted_(
false) {
4602 if (value_is_smi()) {
4615 uint32_t index_offset_;
4621 : public HTemplateInstruction<3>, public ArrayInstructionInterface {
4626 : index_offset_(0), is_dehoisted_(
false) {
4637 }
else if (index == 2) {
4658 bool NeedsCanonicalization();
4665 uint32_t index_offset_;
4671 : public HTemplateInstruction<3>, public ArrayInstructionInterface {
4677 : elements_kind_(elements_kind), index_offset_(0), is_dehoisted_(
false) {
4678 SetGVNFlag(kChangesSpecializedArrayElements);
4690 bool float_or_double_elements =
4693 if (index == 2 && float_or_double_elements) {
4716 uint32_t index_offset_;
4728 : strict_mode_flag_(strict_mode_flag) {
4760 : original_map_(original_map),
4761 transitioned_map_(transitioned_map) {
4765 if (original_map->has_fast_double_elements()) {
4769 if (transitioned_map->has_fast_double_elements()) {
4791 return original_map_.is_identical_to(instr->
original_map()) &&
4924 virtual bool IsDeletable()
const {
return true; }
4931 : constructor_(constructor) {
4962 : literal_index_(index), depth_(depth) {
4970 virtual bool IsDeletable()
const {
return true; }
4985 boilerplate_(boilerplate),
4986 total_size_(total_size) {
4993 static const int kMaxLiteralDepth = 3;
4994 static const int kMaxLiteralProperties = 8;
5020 : HMaterializedLiteral<1>(literal_index, depth),
5022 boilerplate_object_(boilerplate_object) {
5029 if (!boilerplate_object_->IsJSObject()) {
5037 bool IsCopyOnWrite()
const;
5060 : HMaterializedLiteral<1>(literal_index, depth),
5061 constant_properties_(constant_properties),
5062 fast_elements_(fast_elements),
5063 has_function_(has_function) {
5070 return constant_properties_;
5084 bool fast_elements_;
5096 : HMaterializedLiteral<1>(literal_index, 0),
5097 literals_(literals),
5128 : shared_info_(shared), pretenure_(pretenure) {
5147 virtual bool IsDeletable()
const {
return true; }
5175 virtual
bool IsDeletable()
const {
return true; }
5185 ASSERT(value->IsObjectLiteral() || value->IsFastLiteral());
5196 virtual
bool IsDeletable()
const {
return true; }
5213 virtual
bool IsDeletable()
const {
return true; }
5240 : HBinaryOperation(context, obj, key) {
5258 class HIn:
public HTemplateInstruction<3> {
5351 int idx) : idx_(idx) {
5366 return index_cache_;
5370 index_cache_ = index_cache;
5412 virtual bool IsDeletable()
const {
return true; }
5416 #undef DECLARE_INSTRUCTION
5417 #undef DECLARE_CONCRETE_INSTRUCTION
5421 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
static HType HeapNumber()
static HPhi * cast(HValue *value)
void SetIndexOffset(uint32_t index_offset)
virtual Representation RequiredInputRepresentation(int index)
HChange(HValue *value, Representation to, bool is_truncating, bool deoptimize_on_undefined)
virtual bool DataEquals(HValue *other)
bool HasObservableSideEffects() const
void set_can_be_minus_zero(bool b)
bool UpdateInferredType()
void CombinedMin(Range *other)
bool CanTruncateToInt32() const
bool deoptimize_on_minus_zero() const
Handle< Map > transitioned_map()
virtual int OperandCount()
virtual bool EmitAtUses()
bool IsSubtypeOf(const HType &other)
virtual Representation RequiredInputRepresentation(int index)
virtual bool IsConvertibleToInteger() const
HMathMinMax(HValue *context, HValue *left, HValue *right, Operation op)
virtual Representation InferredRepresentation()
Handle< String > name() const
int tagged_indirect_uses() const
Representation GetInputRepresentation() const
HDateField(HValue *date, Smi *index)
Handle< Map > at(int i) const
virtual Representation RequiredInputRepresentation(int index)
HLoadExternalArrayPointer(HValue *value)
virtual Range * InferRange(Zone *zone)
Representation GetInputRepresentation() const
GVNFlagSet gvn_flags() const
void SetDehoisted(bool is_dehoisted)
virtual Representation RequiredInputRepresentation(int index)
HCallKeyed(HValue *context, HValue *key, int argument_count)
HElementsKind(HValue *value)
HOsrEntry(BailoutId ast_id)
CodeStub::Major major_key()
bool AllOperandsConvertibleToInteger()
HType Combine(HType other)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
HUnaryMathOperation(HValue *context, HValue *value, BuiltinFunctionId op)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
HCallFunction(HValue *context, HValue *function, int argument_count)
int arguments_count() const
virtual Representation RequiredInputRepresentation(int index)
void InternalSetOperandAt(int i, HValue *value)
HDiv(HValue *context, HValue *left, HValue *right)
virtual bool DataEquals(HValue *other)
void InitializeObservedInputRepresentation(Representation r)
virtual bool IsCommutative() const
static const int kMaxUtf16CodeUnit
virtual Representation RequiredInputRepresentation(int index)
HLoadFieldByIndex(HValue *object, HValue *index)
bool Equals(const HType &other)
virtual HValue * Canonicalize()
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual void SetSideEffectDominator(GVNFlag side_effect, HValue *dominator)
HIsNilAndBranch(HValue *value, EqualityKind kind, NilValue nil)
virtual bool DataEquals(HValue *other)
HUseListNode * RemoveUse(HValue *value, int index)
Handle< FixedArray > pairs() const
virtual void SetSideEffectDominator(GVNFlag side_effect, HValue *dominator)
HIsStringAndBranch(HValue *value)
HInstruction * previous() const
virtual Representation RequiredInputRepresentation(int index)
HSuccessorIterator(HControlInstruction *instr)
virtual Representation RequiredInputRepresentation(int index)
Representation from() const
HMathFloorOfDiv(HValue *context, HValue *left, HValue *right)
void set_incoming_value(HPhi *value)
bool ImmortalImmovable() const
Handle< Object > handle()
HGlobalObject(HValue *context)
bool CheckUsesForFlag(Flag f)
HTypeofIsAndBranch(HValue *value, Handle< String > type_literal)
HBinaryOperation(HValue *context, HValue *left, HValue *right)
virtual Representation RequiredInputRepresentation(int index)
StrictModeFlag strict_mode_flag()
void CombinedMax(Range *other)
bool from_inlined() const
HInvokeFunction(HValue *context, HValue *function, int argument_count)
HSar(HValue *context, HValue *left, HValue *right)
void Intersect(Range *other)
virtual Representation RequiredInputRepresentation(int index)
HBitwise(Token::Value op, HValue *context, HValue *left, HValue *right)
virtual Representation RequiredInputRepresentation(int index)
InliningKind inlining_kind() const
HBasicBlock * block() const
static bool IsCompareOp(Value op)
static Handle< T > cast(Handle< S > that)
virtual Representation RequiredInputRepresentation(int index)
bool is_backwards_branch()
#define ASSERT_ALLOCATION_DISABLED
HCompareMap(HValue *value, Handle< Map > map, HBasicBlock *true_target, HBasicBlock *false_target)
static Representation Integer32()
Handle< JSGlobalPropertyCell > cell() const
HForInPrepareMap(HValue *context, HValue *object)
virtual Representation RequiredInputRepresentation(int index)
HTransitionElementsKind(HValue *object, Handle< Map > original_map, Handle< Map > transitioned_map)
void SetIndexOffset(uint32_t index_offset)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
Handle< String > name() const
ElementsKind boilerplate_elements_kind() const
virtual LInstruction * CompileToLithium(LChunkBuilder *builder)=0
static HCheckInstanceType * NewIsString(HValue *value, Zone *zone)
virtual Representation RequiredInputRepresentation(int index)
HHasInstanceTypeAndBranch(HValue *value, InstanceType type)
virtual Representation RequiredInputRepresentation(int index)
HUseListNode(HValue *value, int index, HUseListNode *tail)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
static GVNFlagSet AllChangesFlagSet()
HStringCharCodeAt(HValue *context, HValue *string, HValue *index)
Representation representation_
bool ReceiverObjectNeedsWriteBarrier(HValue *object, HValue *new_space_dominator)
#define DECLARE_FLAG(type)
Handle< Map > transition() const
void AssumeRepresentation(Representation r)
bool HasNumberValue() const
virtual Representation RequiredInputRepresentation(int index)
HBasicBlock * FirstSuccessor()
HCallGlobal(HValue *context, Handle< String > name, int argument_count)
HUnaryOperation(HValue *value)
virtual bool IsCommutative() const
virtual int OperandCount()
virtual Representation ObservedInputRepresentation(int index)
static GVNFlagSet ConvertChangesToDependsFlags(GVNFlagSet flags)
Handle< Object > name() const
virtual void PrintDataTo(StringStream *stream)
virtual HBasicBlock * SuccessorAt(int i)=0
HCallKnownGlobal(Handle< JSFunction > target, int argument_count)
virtual Representation RequiredInputRepresentation(int index)
static HCheckMaps * NewWithTransitions(HValue *object, Handle< Map > map, Zone *zone)
void AddConstant(int32_t value)
bool has_function() const
#define ASSERT(condition)
Handle< JSObject > prototype() const
bool CanTransitionToMoreGeneralFastElementsKind(ElementsKind elements_kind, bool allow_only_packed)
HStringLength(HValue *string)
ToBooleanStub::Types expected_input_types() const
static GVNFlagSet AllDependsOnFlagSet()
HTypeof(HValue *context, HValue *value)
HLoadKeyedFastDoubleElement(HValue *elements, HValue *key, HValue *dependency, HoleCheckMode hole_check_mode=PERFORM_HOLE_CHECK)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
bool Includes(int value) const
void InternalSetOperandAt(int i, HValue *value)
virtual void PrintDataTo(StringStream *stream)
HCheckFunction(HValue *value, Handle< JSFunction > function)
HFunctionLiteral(HValue *context, Handle< SharedFunctionInfo > shared, bool pretenure)
virtual HValue * OperandAt(int index) const
HRandom(HValue *global_object)
void set_ast_id(BailoutId id)
Range * CopyClearLower(Zone *zone) const
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
HInvokeFunction(HValue *context, HValue *function, Handle< JSFunction > known_function, int argument_count)
virtual bool DataEquals(HValue *other)
static Representation Double()
virtual Representation RequiredInputRepresentation(int index)
bool IsInSmiRange() const
bool Equals(const Representation &other)
virtual Representation RequiredInputRepresentation(int index)
bool ContainsAnyOf(const EnumSet &set) const
void ClearGVNFlag(GVNFlag f)
HValue * external_pointer()
bool HasDoubleValue() const
HLoadNamedGeneric(HValue *context, HValue *object, Handle< Object > name)
HStoreKeyedFastElement(HValue *obj, HValue *key, HValue *val, ElementsKind elements_kind=FAST_ELEMENTS)
virtual Representation RequiredInputRepresentation(int index)
bool is_in_object() const
HStoreKeyedSpecializedArrayElement(HValue *external_elements, HValue *key, HValue *val, ElementsKind elements_kind)
ElementsKind elements_kind() const
virtual void SetSuccessorAt(int i, HBasicBlock *block)
Representation representation() const
GVNFlagSet DependsOnFlags() const
virtual Representation RequiredInputRepresentation(int index)
HLoadFunctionPrototype(HValue *function)
void set_position(int position)
HFastLiteral(HValue *context, Handle< JSObject > boilerplate, int total_size, int literal_index, int depth)
HValue * MostConstantOperand()
virtual Opcode opcode() const
void set_representation(Representation r)
virtual int argument_count() const
#define DECLARE_OPCODE(type)
virtual intptr_t Hashcode()
HEnterInlined(Handle< JSFunction > closure, int arguments_count, FunctionLiteral *function, CallKind call_kind, InliningKind inlining_kind, Variable *arguments_var, ZoneList< HValue * > *arguments_values)
virtual Representation RequiredInputRepresentation(int index)
void SetIndexOffset(uint32_t index_offset)
virtual Representation RequiredInputRepresentation(int index)
void SetDehoisted(bool is_dehoisted)
virtual HType CalculateInferredType()
virtual Representation RequiredInputRepresentation(int index)
void SetIndexOffset(uint32_t index_offset)
static HCheckInstanceType * NewIsJSArray(HValue *value, Zone *zone)
ElementsKind elements_kind() const
HLoadContextSlot(HValue *context, Variable *var)
HValue * new_space_dominator() const
virtual Representation RequiredInputRepresentation(int index)
HBinaryCall(HValue *first, HValue *second, int argument_count)
GVNFlagSet ObservableChangesFlags() const
bool is_in_object() const
HStoreKeyedFastDoubleElement(HValue *elements, HValue *key, HValue *val)
Handle< JSFunction > target() const
#define DECLARE_ABSTRACT_INSTRUCTION(type)
virtual Representation RequiredInputRepresentation(int index)
BoundsCheckKeyMode key_mode_
HInstanceOfKnownGlobal(HValue *context, HValue *left, Handle< JSFunction > right)
HStringAdd(HValue *context, HValue *left, HValue *right)
HDeoptimize(int environment_length, Zone *zone)
static HCheckInstanceType * NewIsSpecObject(HValue *value, Zone *zone)
HAllocateObject(HValue *context, Handle< JSFunction > constructor)
Handle< JSFunction > target() const
Token::Value token() const
#define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V)
virtual HType CalculateInferredType()
int int32_indirect_uses() const
virtual Representation RequiredInputRepresentation(int index)
static HType TaggedNumber()
virtual bool EmitAtUses()
HLoadElements(HValue *value, HValue *typecheck)
HStringCharFromCode(HValue *context, HValue *char_code)
void AddNewRange(Range *r, Zone *zone)
virtual int OperandCount()=0
virtual int OperandCount()
void set_arguments_pushed()
virtual Representation RequiredInputRepresentation(int index)
HLoadNamedField(HValue *object, bool is_in_object, int offset)
bool Equals(HValue *other)
virtual void InternalSetOperandAt(int index, HValue *value)
virtual HValue * Canonicalize()
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
HToFastProperties(HValue *value)
ElementsKind elements_kind() const
virtual Representation RequiredInputRepresentation(int index)
int double_non_phi_uses() const
void PrintRangeTo(StringStream *stream)
int tagged_non_phi_uses() const
HArgumentsLength(HValue *value)
HAccessArgumentsAt(HValue *arguments, HValue *length, HValue *index)
const char * Mnemonic() const
EnumSet< GVNFlag > GVNFlagSet
static GVNFlagSet AllSideEffectsFlagSet()
HMod(HValue *context, HValue *left, HValue *right)
virtual Representation RequiredInputRepresentation(int index)
VariableMode mode() const
void SetDehoisted(bool is_dehoisted)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
bool IsFastPackedElementsKind(ElementsKind kind)
HInstanceOf(HValue *context, HValue *left, HValue *right)
virtual Representation RequiredInputRepresentation(int index)
void PrintChangesTo(StringStream *stream)
void SetDehoisted(bool is_dehoisted)
virtual Representation RequiredInputRepresentation(int index)
bool has_position() const
virtual void RepresentationChanged(Representation to)
virtual Representation RequiredInputRepresentation(int index)
BuiltinFunctionId op() const
static HUnaryOperation * cast(HValue *value)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
Handle< HeapObject > boilerplate_object() const
Handle< String > name() const
Handle< FixedArray > literals()
static const int kMinValue
virtual Representation RequiredInputRepresentation(int index)
Range * Copy(Zone *zone) const
HArithmeticBinaryOperation(HValue *context, HValue *left, HValue *right)
virtual Representation InferredRepresentation()
virtual Representation RequiredInputRepresentation(int index)
virtual bool IsConvertibleToInteger() const
int int32_non_phi_uses() const
HForInCacheArray * index_cache()
bool StoringValueNeedsWriteBarrier(HValue *value)
virtual HValue * OperandAt(int index) const
HForceRepresentation(HValue *value, Representation required_representation)
#define DECLARE_PREDICATE(type)
bool IsDefinedAfter(HBasicBlock *other) const
int GetAssignedIndexAt(int index) const
double DoubleValue() const
void ComputeInitialRange(Zone *zone)
HClassOfTestAndBranch(HValue *value, Handle< String > class_name)
HSub(HValue *context, HValue *left, HValue *right)
HCallNamed(HValue *context, Handle< String > name, int argument_count)
HRegExpLiteral(HValue *context, Handle< FixedArray > literals, Handle< String > pattern, Handle< String > flags, int literal_index)
static GVNFlagSet AllObservableSideEffectsFlagSet()
#define GVN_TRACKED_FLAG_LIST(V)
Range * CopyClearUpper(Zone *zone) const
ZoneList< HValue * > * arguments_values()
void RemoveLastAddedRange()
virtual void PrintDataTo(StringStream *stream)
HArrayLiteral(HValue *context, Handle< HeapObject > boilerplate_object, int length, int literal_index, int depth)
Handle< String > type_literal()
virtual HType CalculateInferredType()
bool is_interval_check() const
GVNFlagSet ChangesFlags() const
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual bool IsCommutative() const
Handle< JSObject > boilerplate() const
virtual Representation RequiredInputRepresentation(int index)
virtual bool DataEquals(HValue *other)
HInstruction * next() const
void Intersect(const EnumSet &set)
virtual bool IsConvertibleToInteger() const
Handle< JSFunction > closure() const
HBranch(HValue *value, HBasicBlock *true_target, HBasicBlock *false_target, ToBooleanStub::Types expected_input_types=ToBooleanStub::no_types())
virtual Representation RequiredInputRepresentation(int index)
bool IsContextSlot() const
virtual Representation RequiredInputRepresentation(int index)
int32_t Integer32Value() const
HStackCheck(HValue *context, Type type)
static GVNFlag DependsOnFlagFromInt(int x)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
TranscendentalCache::Type transcendental_type()
bool IsFastSmiElementsKind(ElementsKind kind)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
HGetCachedArrayIndex(HValue *value)
void set_type(HType new_type)
HUseConst(HValue *old_value)
virtual HType CalculateInferredType()
virtual Representation RequiredInputRepresentation(int index)
HCheckMaps(HValue *value, SmallMapList *maps, Zone *zone)
virtual Representation RequiredInputRepresentation(int index)
virtual bool IsCommutative() const
virtual Representation RequiredInputRepresentation(int index)
Variable * arguments_var()
static Representation External()
void SetDehoisted(bool is_dehoisted)
bool RequiresHoleCheck() const
virtual Representation RequiredInputRepresentation(int index)
HIsUndetectableAndBranch(HValue *value)
Handle< Map > map() const
HJSArrayLength(HValue *value, HValue *typecheck, HType type=HType::Tagged())
virtual void PrintTo(StringStream *stream)
virtual Representation RequiredInputRepresentation(int index)
activate correct semantics for inheriting readonliness false
virtual Representation RequiredInputRepresentation(int index)
HStoreKeyedGeneric(HValue *context, HValue *object, HValue *key, HValue *value, StrictModeFlag strict_mode_flag)
void DeleteAndReplaceWith(HValue *other)
virtual void PrintDataTo(StringStream *stream)
virtual Representation InferredRepresentation()
virtual void PrintDataTo(StringStream *stream)
Handle< String > class_name() const
#define GVN_UNTRACKED_FLAG_LIST(V)
Handle< Object > name() const
void AddEnvironmentValue(HValue *value, Zone *zone)
virtual HType CalculateInferredType()
virtual Representation RequiredInputRepresentation(int index)
HGlobalReceiver(HValue *global_object)
virtual intptr_t Hashcode()
HLoadGlobalCell(Handle< JSGlobalPropertyCell > cell, PropertyDetails details)
HThrow(HValue *context, HValue *value)
bool SubAndCheckOverflow(Range *other)
bool HasPowerOf2Divisor()
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
bool IsFastSmiOrObjectElementsKind(ElementsKind kind)
HStoreNamedField(HValue *obj, Handle< String > name, HValue *val, bool in_object, int offset)
HMapEnumLength(HValue *value)
virtual HValue * EnsureAndPropagateNotMinusZero(BitVector *visited)
virtual Representation ObservedInputRepresentation(int index)
void PrintNameTo(StringStream *stream)
HClampToUint8(HValue *value)
void set_transcendental_type(TranscendentalCache::Type transcendental_type)
void InsertAfter(HInstruction *previous)
virtual int SuccessorCount()=0
virtual Representation RequiredInputRepresentation(int index)
virtual Opcode opcode() const =0
HValue * OperandAt(int i) const
virtual void DeleteFromGraph()=0
virtual Representation RequiredInputRepresentation(int index)
HDeleteProperty(HValue *context, HValue *obj, HValue *key)
HStringCompareAndBranch(HValue *context, HValue *left, HValue *right, Token::Value token)
virtual void SetSuccessorAt(int i, HBasicBlock *block)=0
HParameter(unsigned index)
Representation to() const
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)=0
void set_transition(Handle< Map > map)
virtual intptr_t Hashcode()
virtual Representation RequiredInputRepresentation(int index)
HIn(HValue *context, HValue *key, HValue *object)
HApplyArguments(HValue *function, HValue *receiver, HValue *length, HValue *elements)
virtual HValue * OperandAt(int index) const
void ChangeRepresentation(Representation r)
void SetSuccessorAt(int i, HBasicBlock *block)
HCheckMapValue(HValue *value, HValue *map)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
HShr(HValue *context, HValue *left, HValue *right)
bool Contains(E element) const
HMul(HValue *context, HValue *left, HValue *right)
HDeclareGlobals(HValue *context, Handle< FixedArray > pairs, int flags)
HCallConstantFunction(Handle< JSFunction > function, int argument_count)
bool IsMostGeneric() const
HStoreNamedGeneric(HValue *context, HValue *object, Handle< String > name, HValue *value, StrictModeFlag strict_mode_flag)
EqualityKind kind() const
void SetOperandAt(int index, HValue *value)
HBasicBlock * SecondSuccessor()
virtual Range * InferRange(Zone *zone)
static HType NonPrimitive()
bool IsApplyFunction() const
Representation GetInputRepresentation() const
bool CheckFlag(Flag f) const
virtual intptr_t Hashcode()
HStoreContextSlot(HValue *context, int slot_index, Mode mode, HValue *value)
HIsObjectAndBranch(HValue *value)
int double_indirect_uses() const
virtual Representation RequiredInputRepresentation(int index)
HUnaryCall(HValue *value, int argument_count)
Handle< JSFunction > known_function()
int32_t NumberValueAsInteger32() const
#define HYDROGEN_ABSTRACT_INSTRUCTION_LIST(V)
virtual void InternalSetOperandAt(int index, HValue *value)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction pairs(ARM only)") DEFINE_bool(enable_unaligned_accesses
void InsertBefore(HInstruction *next)
virtual bool DataEquals(HValue *other)
virtual Representation RequiredInputRepresentation(int index)
void set_index_cache(HForInCacheArray *index_cache)
virtual Representation RequiredInputRepresentation(int index)
ElementsKind GetNextMoreGeneralFastElementsKind(ElementsKind elements_kind, bool allow_only_packed)
static HType TypeFromValue(Handle< Object > value)
virtual Representation RequiredInputRepresentation(int index)
HObjectLiteral(HValue *context, Handle< FixedArray > constant_properties, bool fast_elements, int literal_index, int depth, bool has_function)
bool NeedsWriteBarrierForMap()
Range(int32_t lower, int32_t upper)
static HType Uninitialized()
virtual bool DataEquals(HValue *other)
GVNFlagSet SideEffectFlags() const
Handle< Object > name() const
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual ~ArrayInstructionInterface()
void SetIndexOffset(uint32_t index_offset)
virtual Representation RequiredInputRepresentation(int arg_index)
virtual Representation RequiredInputRepresentation(int index)
void AddPushedValue(HValue *value)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of MIPS FPU instructions if expose natives in global object expose gc extension number of stack frames to capture disable builtin natives files print a stack trace if an assertion failure occurs use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations prepare for turning on always opt minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions automatically set the debug break flag when debugger commands are in the queue always cause a debug break before aborting maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print more details following each garbage collection print amount of external allocated memory after each time it is adjusted flush code that we expect not to use again before full gc do incremental marking steps track object counts and memory usage use caching Perform compaction on every full GC Never perform compaction on full GC testing only Compact code space on full incremental collections Default seed for initializing random allows verbose printing trace parsing and preparsing Check icache flushes in ARM and MIPS simulator Stack alingment in bytes in print stack trace when throwing exceptions randomize hashes to avoid predictable hash Fixed seed to use to hash property keys(0 means random)" "(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption
virtual Representation RequiredInputRepresentation(int index)
bool fast_elements() const
void SetBlock(HBasicBlock *block)
HIsSmiAndBranch(HValue *value)
static const int kChangesToDependsFlagsLeftShift
HPhi(int merged_index, Zone *zone)
bool arguments_pushed() const
HArgumentsElements(bool from_inlined)
HStoreGlobalGeneric(HValue *context, HValue *global_object, Handle< Object > name, HValue *value, StrictModeFlag strict_mode_flag)
virtual HType CalculateInferredType()
HCompareIDAndBranch(HValue *left, HValue *right, Token::Value token)
virtual Representation RequiredInputRepresentation(int index)
HCompareConstantEqAndBranch(HValue *left, int right, Token::Value op)
HLoadKeyedGeneric(HValue *context, HValue *obj, HValue *key)
HLoadGlobalGeneric(HValue *context, HValue *global_object, Handle< Object > name, bool for_typeof)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
Handle< String > pattern()
virtual HType CalculateInferredType()
#define DECLARE_CONCRETE_INSTRUCTION(type)
Token::Value token() const
virtual HValue * OperandAt(int index) const =0
virtual Representation RequiredInputRepresentation(int index)
virtual void InternalSetOperandAt(int index, HValue *value)
virtual Representation RequiredInputRepresentation(int index)
HCheckNonSmi(HValue *value)
HPushArgument(HValue *value)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
void set_is_convertible_to_integer(bool b)
HShl(HValue *context, HValue *left, HValue *right)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of MIPS FPU instructions if NULL
bool deoptimize_on_undefined() const
void SetIndexOffset(uint32_t index_offset)
virtual void DeleteFromGraph()
virtual void RepresentationChanged(Representation to)
virtual Representation RequiredInputRepresentation(int index)
static GVNFlag ChangesFlagFromInt(int x)
CallKind call_kind() const
HValue * external_pointer()
virtual HType CalculateInferredType()
void SetGVNFlag(GVNFlag f)
bool CheckGVNFlag(GVNFlag f) const
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
const char * Mnemonic() const
HUnaryControlInstruction(HValue *value, HBasicBlock *true_target, HBasicBlock *false_target)
Handle< JSObject > holder() const
virtual bool IsCommutative() const
HGoto(HBasicBlock *target)
virtual HBasicBlock * SuccessorAt(int i)
bool HasInteger32Value() const
static Representation None()
HCheckPrototypeMaps(Handle< JSObject > prototype, Handle< JSObject > holder)
virtual void PrintTo(StringStream *stream)=0
virtual void InternalSetOperandAt(int index, HValue *value)=0
static const int kMaxLength
void set_tail(HUseListNode *list)
virtual void RepresentationChanged(Representation to)
virtual int SuccessorCount()
Handle< String > name() const
HLoadKeyedSpecializedArrayElement(HValue *external_elements, HValue *key, HValue *dependency, ElementsKind elements_kind)
static Representation Tagged()
HFixedArrayBaseLength(HValue *value)
virtual Representation RequiredInputRepresentation(int index)
bool IsSpecialization() const
virtual Representation RequiredInputRepresentation(int index)
void PrintTypeTo(StringStream *stream)
Handle< JSGlobalPropertyCell > cell() const
void StackUpon(Range *other)
HBitwiseBinaryOperation(HValue *context, HValue *left, HValue *right)
Handle< FixedArray > constant_properties() const
HStoreGlobalCell(HValue *value, Handle< JSGlobalPropertyCell > cell, PropertyDetails details)
HCompareGeneric(HValue *context, HValue *left, HValue *right, Token::Value token)
static HCheckInstanceType * NewIsSymbol(HValue *value, Zone *zone)
virtual Range * InferRange(Zone *zone)
void Add(Handle< Map > handle, Zone *zone)
HLoadKeyedFastElement(HValue *obj, HValue *key, HValue *dependency, ElementsKind elements_kind=FAST_ELEMENTS)
HBasicBlock * SuccessorAt(int i)
STATIC_ASSERT(kLastFlag< kBitsPerInt)
void AddAssignedValue(int index, HValue *value)
HCheckMaps(HValue *value, Handle< Map > map, Zone *zone, HValue *typecheck=NULL)
HForInCacheArray(HValue *enumerable, HValue *keys, int idx)
static const int kNoNumber
void RegisterUse(int index, HValue *new_value)
bool HasAssignedIndexAt(int index) const
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
HValue * OperandAt(int i) const
bool HasSideEffects() const
StrictModeFlag strict_mode_flag()
static const int kMaxValue
virtual Representation RequiredInputRepresentation(int index)
virtual HType CalculateInferredType()
virtual Representation RequiredInputRepresentation(int index)
bool CanBeNegative() const
HBoundsCheck(HValue *index, HValue *length, BoundsCheckKeyMode key_mode=DONT_ALLOW_SMI_KEY)
bool RequiresHoleCheck() const
static HValue * cast(HValue *value)
void ReplaceAllUsesWith(HValue *other)
const ZoneList< HValue * > * values() const
void check(i::Vector< const char > string)
bool HasMultipleUses() const
void ClearAllSideEffects()
Token::Value token() const
int literal_index() const
StrictModeFlag strict_mode_flag()
Handle< JSFunction > constructor()
virtual Representation RequiredInputRepresentation(int index)
virtual Representation RequiredInputRepresentation(int index)
HHasInstanceTypeAndBranch(HValue *value, InstanceType from, InstanceType to)
virtual bool DataEquals(HValue *other)
bool AddAndCheckOverflow(Range *other)
Handle< Map > original_map()
HSimulate(BailoutId ast_id, int pop_count, Zone *zone)
HValue * LeastConstantOperand()
HHasCachedArrayIndexAndBranch(HValue *value)
HWrapReceiver(HValue *receiver, HValue *function)
HCallNew(HValue *context, HValue *constructor, int argument_count)
HOuterContext(HValue *inner)
virtual Representation RequiredInputRepresentation(int index)
bool MulAndCheckOverflow(Range *other)
HAdd(HValue *context, HValue *left, HValue *right)
HCompareObjectEqAndBranch(HValue *left, HValue *right)
void SetDehoisted(bool is_dehoisted)
HCallStub(HValue *context, CodeStub::Major major_key, int argument_count)
bool CanBeMinusZero() const
HUseIterator uses() const
static HType TaggedPrimitive()
HCallRuntime(HValue *context, Handle< String > name, const Runtime::Function *c_function, int argument_count)
virtual Representation RequiredInputRepresentation(int index)
HPower(HValue *left, HValue *right)