| 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...) Expand 10 before | Expand all | Expand 10 after  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...) Expand 10 before | Expand all | Expand 10 after  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...) Expand 10 before | Expand all | Expand 10 after  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...) Expand 10 before | Expand all | Expand 10 after  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...) Expand 10 before | Expand all | Expand 10 after  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...) Expand 10 before | Expand all | Expand 10 after  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...) Expand 10 before | Expand all | Expand 10 after  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...) Expand 10 before | Expand all | Expand 10 after  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 |