OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1478 matching lines...) Loading... |
1489 GETTER_CALL_RETURN, // Returning from a getter, need to restore context. | 1489 GETTER_CALL_RETURN, // Returning from a getter, need to restore context. |
1490 SETTER_CALL_RETURN // Use the RHS of the assignment as the return value. | 1490 SETTER_CALL_RETURN // Use the RHS of the assignment as the return value. |
1491 }; | 1491 }; |
1492 | 1492 |
1493 | 1493 |
1494 class HEnterInlined: public HTemplateInstruction<0> { | 1494 class HEnterInlined: public HTemplateInstruction<0> { |
1495 public: | 1495 public: |
1496 HEnterInlined(Handle<JSFunction> closure, | 1496 HEnterInlined(Handle<JSFunction> closure, |
1497 int arguments_count, | 1497 int arguments_count, |
1498 FunctionLiteral* function, | 1498 FunctionLiteral* function, |
1499 CallKind call_kind, | |
1500 InliningKind inlining_kind, | 1499 InliningKind inlining_kind, |
1501 Variable* arguments_var, | 1500 Variable* arguments_var, |
1502 ZoneList<HValue*>* arguments_values) | 1501 ZoneList<HValue*>* arguments_values, |
| 1502 bool undefined_receiver) |
1503 : closure_(closure), | 1503 : closure_(closure), |
1504 arguments_count_(arguments_count), | 1504 arguments_count_(arguments_count), |
1505 arguments_pushed_(false), | 1505 arguments_pushed_(false), |
1506 function_(function), | 1506 function_(function), |
1507 call_kind_(call_kind), | |
1508 inlining_kind_(inlining_kind), | 1507 inlining_kind_(inlining_kind), |
1509 arguments_var_(arguments_var), | 1508 arguments_var_(arguments_var), |
1510 arguments_values_(arguments_values) { | 1509 arguments_values_(arguments_values), |
| 1510 undefined_receiver_(undefined_receiver) { |
1511 } | 1511 } |
1512 | 1512 |
1513 virtual void PrintDataTo(StringStream* stream); | 1513 virtual void PrintDataTo(StringStream* stream); |
1514 | 1514 |
1515 Handle<JSFunction> closure() const { return closure_; } | 1515 Handle<JSFunction> closure() const { return closure_; } |
1516 int arguments_count() const { return arguments_count_; } | 1516 int arguments_count() const { return arguments_count_; } |
1517 bool arguments_pushed() const { return arguments_pushed_; } | 1517 bool arguments_pushed() const { return arguments_pushed_; } |
1518 void set_arguments_pushed() { arguments_pushed_ = true; } | 1518 void set_arguments_pushed() { arguments_pushed_ = true; } |
1519 FunctionLiteral* function() const { return function_; } | 1519 FunctionLiteral* function() const { return function_; } |
1520 CallKind call_kind() const { return call_kind_; } | |
1521 InliningKind inlining_kind() const { return inlining_kind_; } | 1520 InliningKind inlining_kind() const { return inlining_kind_; } |
| 1521 bool undefined_receiver() const { return undefined_receiver_; } |
1522 | 1522 |
1523 virtual Representation RequiredInputRepresentation(int index) { | 1523 virtual Representation RequiredInputRepresentation(int index) { |
1524 return Representation::None(); | 1524 return Representation::None(); |
1525 } | 1525 } |
1526 | 1526 |
1527 Variable* arguments_var() { return arguments_var_; } | 1527 Variable* arguments_var() { return arguments_var_; } |
1528 ZoneList<HValue*>* arguments_values() { return arguments_values_; } | 1528 ZoneList<HValue*>* arguments_values() { return arguments_values_; } |
1529 | 1529 |
1530 DECLARE_CONCRETE_INSTRUCTION(EnterInlined) | 1530 DECLARE_CONCRETE_INSTRUCTION(EnterInlined) |
1531 | 1531 |
1532 private: | 1532 private: |
1533 Handle<JSFunction> closure_; | 1533 Handle<JSFunction> closure_; |
1534 int arguments_count_; | 1534 int arguments_count_; |
1535 bool arguments_pushed_; | 1535 bool arguments_pushed_; |
1536 FunctionLiteral* function_; | 1536 FunctionLiteral* function_; |
1537 CallKind call_kind_; | |
1538 InliningKind inlining_kind_; | 1537 InliningKind inlining_kind_; |
1539 Variable* arguments_var_; | 1538 Variable* arguments_var_; |
1540 ZoneList<HValue*>* arguments_values_; | 1539 ZoneList<HValue*>* arguments_values_; |
| 1540 bool undefined_receiver_; |
1541 }; | 1541 }; |
1542 | 1542 |
1543 | 1543 |
1544 class HLeaveInlined: public HTemplateInstruction<0> { | 1544 class HLeaveInlined: public HTemplateInstruction<0> { |
1545 public: | 1545 public: |
1546 HLeaveInlined() { } | 1546 HLeaveInlined() { } |
1547 | 1547 |
1548 virtual Representation RequiredInputRepresentation(int index) { | 1548 virtual Representation RequiredInputRepresentation(int index) { |
1549 return Representation::None(); | 1549 return Representation::None(); |
1550 } | 1550 } |
(...skipping 764 matching lines...) Loading... |
2315 SmallMapList map_set_; | 2315 SmallMapList map_set_; |
2316 }; | 2316 }; |
2317 | 2317 |
2318 | 2318 |
2319 class HCheckFunction: public HUnaryOperation { | 2319 class HCheckFunction: public HUnaryOperation { |
2320 public: | 2320 public: |
2321 HCheckFunction(HValue* value, Handle<JSFunction> function) | 2321 HCheckFunction(HValue* value, Handle<JSFunction> function) |
2322 : HUnaryOperation(value), target_(function) { | 2322 : HUnaryOperation(value), target_(function) { |
2323 set_representation(Representation::Tagged()); | 2323 set_representation(Representation::Tagged()); |
2324 SetFlag(kUseGVN); | 2324 SetFlag(kUseGVN); |
| 2325 target_in_new_space_ = Isolate::Current()->heap()->InNewSpace(*function); |
2325 } | 2326 } |
2326 | 2327 |
2327 virtual Representation RequiredInputRepresentation(int index) { | 2328 virtual Representation RequiredInputRepresentation(int index) { |
2328 return Representation::Tagged(); | 2329 return Representation::Tagged(); |
2329 } | 2330 } |
2330 virtual void PrintDataTo(StringStream* stream); | 2331 virtual void PrintDataTo(StringStream* stream); |
2331 virtual HType CalculateInferredType(); | 2332 virtual HType CalculateInferredType(); |
2332 | 2333 |
2333 #ifdef DEBUG | 2334 #ifdef DEBUG |
2334 virtual void Verify(); | 2335 virtual void Verify(); |
2335 #endif | 2336 #endif |
2336 | 2337 |
2337 Handle<JSFunction> target() const { return target_; } | 2338 Handle<JSFunction> target() const { return target_; } |
| 2339 bool target_in_new_space() const { return target_in_new_space_; } |
2338 | 2340 |
2339 DECLARE_CONCRETE_INSTRUCTION(CheckFunction) | 2341 DECLARE_CONCRETE_INSTRUCTION(CheckFunction) |
2340 | 2342 |
2341 protected: | 2343 protected: |
2342 virtual bool DataEquals(HValue* other) { | 2344 virtual bool DataEquals(HValue* other) { |
2343 HCheckFunction* b = HCheckFunction::cast(other); | 2345 HCheckFunction* b = HCheckFunction::cast(other); |
2344 return target_.is_identical_to(b->target()); | 2346 return target_.is_identical_to(b->target()); |
2345 } | 2347 } |
2346 | 2348 |
2347 private: | 2349 private: |
2348 Handle<JSFunction> target_; | 2350 Handle<JSFunction> target_; |
| 2351 bool target_in_new_space_; |
2349 }; | 2352 }; |
2350 | 2353 |
2351 | 2354 |
2352 class HCheckInstanceType: public HUnaryOperation { | 2355 class HCheckInstanceType: public HUnaryOperation { |
2353 public: | 2356 public: |
2354 static HCheckInstanceType* NewIsSpecObject(HValue* value, Zone* zone) { | 2357 static HCheckInstanceType* NewIsSpecObject(HValue* value, Zone* zone) { |
2355 return new(zone) HCheckInstanceType(value, IS_SPEC_OBJECT); | 2358 return new(zone) HCheckInstanceType(value, IS_SPEC_OBJECT); |
2356 } | 2359 } |
2357 static HCheckInstanceType* NewIsJSArray(HValue* value, Zone* zone) { | 2360 static HCheckInstanceType* NewIsJSArray(HValue* value, Zone* zone) { |
2358 return new(zone) HCheckInstanceType(value, IS_JS_ARRAY); | 2361 return new(zone) HCheckInstanceType(value, IS_JS_ARRAY); |
(...skipping 109 matching lines...) Loading... |
2468 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps) | 2471 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps) |
2469 | 2472 |
2470 virtual Representation RequiredInputRepresentation(int index) { | 2473 virtual Representation RequiredInputRepresentation(int index) { |
2471 return Representation::None(); | 2474 return Representation::None(); |
2472 } | 2475 } |
2473 | 2476 |
2474 virtual void PrintDataTo(StringStream* stream); | 2477 virtual void PrintDataTo(StringStream* stream); |
2475 | 2478 |
2476 virtual intptr_t Hashcode() { | 2479 virtual intptr_t Hashcode() { |
2477 ASSERT_ALLOCATION_DISABLED; | 2480 ASSERT_ALLOCATION_DISABLED; |
| 2481 // Dereferencing to use the object's raw address for hashing is safe. |
| 2482 AllowHandleDereference allow_handle_deref; |
2478 intptr_t hash = 0; | 2483 intptr_t hash = 0; |
2479 for (int i = 0; i < prototypes_.length(); i++) { | 2484 for (int i = 0; i < prototypes_.length(); i++) { |
2480 hash = 17 * hash + reinterpret_cast<intptr_t>(*prototypes_[i]); | 2485 hash = 17 * hash + reinterpret_cast<intptr_t>(*prototypes_[i]); |
2481 hash = 17 * hash + reinterpret_cast<intptr_t>(*maps_[i]); | 2486 hash = 17 * hash + reinterpret_cast<intptr_t>(*maps_[i]); |
2482 } | 2487 } |
2483 return hash; | 2488 return hash; |
2484 } | 2489 } |
2485 | 2490 |
2486 protected: | 2491 protected: |
2487 virtual bool DataEquals(HValue* other) { | 2492 virtual bool DataEquals(HValue* other) { |
(...skipping 197 matching lines...) Loading... |
2685 isnan(double_value_)) { | 2690 isnan(double_value_)) { |
2686 return true; | 2691 return true; |
2687 } | 2692 } |
2688 return false; | 2693 return false; |
2689 } | 2694 } |
2690 | 2695 |
2691 ASSERT(!handle_.is_null()); | 2696 ASSERT(!handle_.is_null()); |
2692 Heap* heap = HEAP; | 2697 Heap* heap = HEAP; |
2693 // We should have handled minus_zero_value and nan_value in the | 2698 // We should have handled minus_zero_value and nan_value in the |
2694 // has_double_value_ clause above. | 2699 // has_double_value_ clause above. |
| 2700 // Dereferencing is safe to compare against singletons. |
| 2701 AllowHandleDereference allow_handle_deref; |
2695 ASSERT(*handle_ != heap->minus_zero_value()); | 2702 ASSERT(*handle_ != heap->minus_zero_value()); |
2696 ASSERT(*handle_ != heap->nan_value()); | 2703 ASSERT(*handle_ != heap->nan_value()); |
2697 if (*handle_ == heap->undefined_value()) return true; | 2704 return *handle_ == heap->undefined_value() || |
2698 if (*handle_ == heap->null_value()) return true; | 2705 *handle_ == heap->null_value() || |
2699 if (*handle_ == heap->true_value()) return true; | 2706 *handle_ == heap->true_value() || |
2700 if (*handle_ == heap->false_value()) return true; | 2707 *handle_ == heap->false_value() || |
2701 if (*handle_ == heap->the_hole_value()) return true; | 2708 *handle_ == heap->the_hole_value() || |
2702 if (*handle_ == heap->empty_string()) return true; | 2709 *handle_ == heap->empty_string(); |
2703 return false; | |
2704 } | 2710 } |
2705 | 2711 |
2706 virtual Representation RequiredInputRepresentation(int index) { | 2712 virtual Representation RequiredInputRepresentation(int index) { |
2707 return Representation::None(); | 2713 return Representation::None(); |
2708 } | 2714 } |
2709 | 2715 |
2710 virtual bool IsConvertibleToInteger() const { | 2716 virtual bool IsConvertibleToInteger() const { |
2711 return has_int32_value_; | 2717 return has_int32_value_; |
2712 } | 2718 } |
2713 | 2719 |
(...skipping 31 matching lines...) Loading... |
2745 virtual intptr_t Hashcode() { | 2751 virtual intptr_t Hashcode() { |
2746 ASSERT_ALLOCATION_DISABLED; | 2752 ASSERT_ALLOCATION_DISABLED; |
2747 intptr_t hash; | 2753 intptr_t hash; |
2748 | 2754 |
2749 if (has_int32_value_) { | 2755 if (has_int32_value_) { |
2750 hash = static_cast<intptr_t>(int32_value_); | 2756 hash = static_cast<intptr_t>(int32_value_); |
2751 } else if (has_double_value_) { | 2757 } else if (has_double_value_) { |
2752 hash = static_cast<intptr_t>(BitCast<int64_t>(double_value_)); | 2758 hash = static_cast<intptr_t>(BitCast<int64_t>(double_value_)); |
2753 } else { | 2759 } else { |
2754 ASSERT(!handle_.is_null()); | 2760 ASSERT(!handle_.is_null()); |
| 2761 // Dereferencing to use the object's raw address for hashing is safe. |
| 2762 AllowHandleDereference allow_handle_deref; |
2755 hash = reinterpret_cast<intptr_t>(*handle_); | 2763 hash = reinterpret_cast<intptr_t>(*handle_); |
2756 } | 2764 } |
2757 | 2765 |
2758 return hash; | 2766 return hash; |
2759 } | 2767 } |
2760 | 2768 |
2761 #ifdef DEBUG | 2769 #ifdef DEBUG |
2762 virtual void Verify() { } | 2770 virtual void Verify() { } |
2763 #endif | 2771 #endif |
2764 | 2772 |
2765 DECLARE_CONCRETE_INSTRUCTION(Constant) | 2773 DECLARE_CONCRETE_INSTRUCTION(Constant) |
2766 | 2774 |
2767 protected: | 2775 protected: |
2768 virtual Range* InferRange(Zone* zone); | 2776 virtual Range* InferRange(Zone* zone); |
2769 | 2777 |
2770 virtual bool DataEquals(HValue* other) { | 2778 virtual bool DataEquals(HValue* other) { |
2771 HConstant* other_constant = HConstant::cast(other); | 2779 HConstant* other_constant = HConstant::cast(other); |
2772 if (has_int32_value_) { | 2780 if (has_int32_value_) { |
2773 return other_constant->has_int32_value_ && | 2781 return other_constant->has_int32_value_ && |
2774 int32_value_ == other_constant->int32_value_; | 2782 int32_value_ == other_constant->int32_value_; |
2775 } else if (has_double_value_) { | 2783 } else if (has_double_value_) { |
2776 return other_constant->has_double_value_ && | 2784 return other_constant->has_double_value_ && |
2777 BitCast<int64_t>(double_value_) == | 2785 BitCast<int64_t>(double_value_) == |
2778 BitCast<int64_t>(other_constant->double_value_); | 2786 BitCast<int64_t>(other_constant->double_value_); |
2779 } else { | 2787 } else { |
2780 ASSERT(!handle_.is_null()); | 2788 ASSERT(!handle_.is_null()); |
2781 return !other_constant->handle_.is_null() && | 2789 return !other_constant->handle_.is_null() && |
2782 *handle_ == *other_constant->handle_; | 2790 handle_.is_identical_to(other_constant->handle_); |
2783 } | 2791 } |
2784 } | 2792 } |
2785 | 2793 |
2786 private: | 2794 private: |
2787 virtual bool IsDeletable() const { return true; } | 2795 virtual bool IsDeletable() const { return true; } |
2788 | 2796 |
2789 // If this is a numerical constant, handle_ either points to to the | 2797 // If this is a numerical constant, handle_ either points to to the |
2790 // HeapObject the constant originated from or is null. If the | 2798 // HeapObject the constant originated from or is null. If the |
2791 // constant is non-numeric, handle_ always points to a valid | 2799 // constant is non-numeric, handle_ always points to a valid |
2792 // constant HeapObject. | 2800 // constant HeapObject. |
(...skipping 1213 matching lines...) Loading... |
4006 | 4014 |
4007 class HLoadGlobalCell: public HTemplateInstruction<0> { | 4015 class HLoadGlobalCell: public HTemplateInstruction<0> { |
4008 public: | 4016 public: |
4009 HLoadGlobalCell(Handle<JSGlobalPropertyCell> cell, PropertyDetails details) | 4017 HLoadGlobalCell(Handle<JSGlobalPropertyCell> cell, PropertyDetails details) |
4010 : cell_(cell), details_(details) { | 4018 : cell_(cell), details_(details) { |
4011 set_representation(Representation::Tagged()); | 4019 set_representation(Representation::Tagged()); |
4012 SetFlag(kUseGVN); | 4020 SetFlag(kUseGVN); |
4013 SetGVNFlag(kDependsOnGlobalVars); | 4021 SetGVNFlag(kDependsOnGlobalVars); |
4014 } | 4022 } |
4015 | 4023 |
4016 Handle<JSGlobalPropertyCell> cell() const { return cell_; } | 4024 Handle<JSGlobalPropertyCell> cell() const { return cell_; } |
4017 bool RequiresHoleCheck() const; | 4025 bool RequiresHoleCheck() const; |
4018 | 4026 |
4019 virtual void PrintDataTo(StringStream* stream); | 4027 virtual void PrintDataTo(StringStream* stream); |
4020 | 4028 |
4021 virtual intptr_t Hashcode() { | 4029 virtual intptr_t Hashcode() { |
4022 ASSERT_ALLOCATION_DISABLED; | 4030 ASSERT_ALLOCATION_DISABLED; |
| 4031 // Dereferencing to use the object's raw address for hashing is safe. |
| 4032 AllowHandleDereference allow_handle_deref; |
4023 return reinterpret_cast<intptr_t>(*cell_); | 4033 return reinterpret_cast<intptr_t>(*cell_); |
4024 } | 4034 } |
4025 | 4035 |
4026 virtual Representation RequiredInputRepresentation(int index) { | 4036 virtual Representation RequiredInputRepresentation(int index) { |
4027 return Representation::None(); | 4037 return Representation::None(); |
4028 } | 4038 } |
4029 | 4039 |
4030 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell) | 4040 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell) |
4031 | 4041 |
4032 protected: | 4042 protected: |
(...skipping 772 matching lines...) Loading... |
4805 StrictModeFlag strict_mode_flag_; | 4815 StrictModeFlag strict_mode_flag_; |
4806 }; | 4816 }; |
4807 | 4817 |
4808 | 4818 |
4809 class HTransitionElementsKind: public HTemplateInstruction<1> { | 4819 class HTransitionElementsKind: public HTemplateInstruction<1> { |
4810 public: | 4820 public: |
4811 HTransitionElementsKind(HValue* object, | 4821 HTransitionElementsKind(HValue* object, |
4812 Handle<Map> original_map, | 4822 Handle<Map> original_map, |
4813 Handle<Map> transitioned_map) | 4823 Handle<Map> transitioned_map) |
4814 : original_map_(original_map), | 4824 : original_map_(original_map), |
4815 transitioned_map_(transitioned_map) { | 4825 transitioned_map_(transitioned_map), |
| 4826 from_kind_(original_map->elements_kind()), |
| 4827 to_kind_(transitioned_map->elements_kind()) { |
4816 SetOperandAt(0, object); | 4828 SetOperandAt(0, object); |
4817 SetFlag(kUseGVN); | 4829 SetFlag(kUseGVN); |
4818 SetGVNFlag(kChangesElementsKind); | 4830 SetGVNFlag(kChangesElementsKind); |
4819 if (original_map->has_fast_double_elements()) { | 4831 if (original_map->has_fast_double_elements()) { |
4820 SetGVNFlag(kChangesElementsPointer); | 4832 SetGVNFlag(kChangesElementsPointer); |
4821 SetGVNFlag(kChangesNewSpacePromotion); | 4833 SetGVNFlag(kChangesNewSpacePromotion); |
4822 } | 4834 } |
4823 if (transitioned_map->has_fast_double_elements()) { | 4835 if (transitioned_map->has_fast_double_elements()) { |
4824 SetGVNFlag(kChangesElementsPointer); | 4836 SetGVNFlag(kChangesElementsPointer); |
4825 SetGVNFlag(kChangesNewSpacePromotion); | 4837 SetGVNFlag(kChangesNewSpacePromotion); |
4826 } | 4838 } |
4827 set_representation(Representation::Tagged()); | 4839 set_representation(Representation::Tagged()); |
4828 } | 4840 } |
4829 | 4841 |
4830 virtual Representation RequiredInputRepresentation(int index) { | 4842 virtual Representation RequiredInputRepresentation(int index) { |
4831 return Representation::Tagged(); | 4843 return Representation::Tagged(); |
4832 } | 4844 } |
4833 | 4845 |
4834 HValue* object() { return OperandAt(0); } | 4846 HValue* object() { return OperandAt(0); } |
4835 Handle<Map> original_map() { return original_map_; } | 4847 Handle<Map> original_map() { return original_map_; } |
4836 Handle<Map> transitioned_map() { return transitioned_map_; } | 4848 Handle<Map> transitioned_map() { return transitioned_map_; } |
| 4849 ElementsKind from_kind() { return from_kind_; } |
| 4850 ElementsKind to_kind() { return to_kind_; } |
4837 | 4851 |
4838 virtual void PrintDataTo(StringStream* stream); | 4852 virtual void PrintDataTo(StringStream* stream); |
4839 | 4853 |
4840 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind) | 4854 DECLARE_CONCRETE_INSTRUCTION(TransitionElementsKind) |
4841 | 4855 |
4842 protected: | 4856 protected: |
4843 virtual bool DataEquals(HValue* other) { | 4857 virtual bool DataEquals(HValue* other) { |
4844 HTransitionElementsKind* instr = HTransitionElementsKind::cast(other); | 4858 HTransitionElementsKind* instr = HTransitionElementsKind::cast(other); |
4845 return original_map_.is_identical_to(instr->original_map()) && | 4859 return original_map_.is_identical_to(instr->original_map()) && |
4846 transitioned_map_.is_identical_to(instr->transitioned_map()); | 4860 transitioned_map_.is_identical_to(instr->transitioned_map()); |
4847 } | 4861 } |
4848 | 4862 |
4849 private: | 4863 private: |
4850 Handle<Map> original_map_; | 4864 Handle<Map> original_map_; |
4851 Handle<Map> transitioned_map_; | 4865 Handle<Map> transitioned_map_; |
| 4866 ElementsKind from_kind_; |
| 4867 ElementsKind to_kind_; |
4852 }; | 4868 }; |
4853 | 4869 |
4854 | 4870 |
4855 class HStringAdd: public HBinaryOperation { | 4871 class HStringAdd: public HBinaryOperation { |
4856 public: | 4872 public: |
4857 HStringAdd(HValue* context, HValue* left, HValue* right) | 4873 HStringAdd(HValue* context, HValue* left, HValue* right) |
4858 : HBinaryOperation(context, left, right) { | 4874 : HBinaryOperation(context, left, right) { |
4859 set_representation(Representation::Tagged()); | 4875 set_representation(Representation::Tagged()); |
4860 SetFlag(kUseGVN); | 4876 SetFlag(kUseGVN); |
4861 SetGVNFlag(kDependsOnMaps); | 4877 SetGVNFlag(kDependsOnMaps); |
(...skipping 641 matching lines...) Loading... |
5503 virtual bool IsDeletable() const { return true; } | 5519 virtual bool IsDeletable() const { return true; } |
5504 }; | 5520 }; |
5505 | 5521 |
5506 | 5522 |
5507 #undef DECLARE_INSTRUCTION | 5523 #undef DECLARE_INSTRUCTION |
5508 #undef DECLARE_CONCRETE_INSTRUCTION | 5524 #undef DECLARE_CONCRETE_INSTRUCTION |
5509 | 5525 |
5510 } } // namespace v8::internal | 5526 } } // namespace v8::internal |
5511 | 5527 |
5512 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 5528 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |