| 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 86   V(CallNewArray)                              \ | 86   V(CallNewArray)                              \ | 
| 87   V(CallRuntime)                               \ | 87   V(CallRuntime)                               \ | 
| 88   V(CallStub)                                  \ | 88   V(CallStub)                                  \ | 
| 89   V(Change)                                    \ | 89   V(Change)                                    \ | 
| 90   V(CheckFunction)                             \ | 90   V(CheckFunction)                             \ | 
| 91   V(CheckInstanceType)                         \ | 91   V(CheckInstanceType)                         \ | 
| 92   V(CheckMaps)                                 \ | 92   V(CheckMaps)                                 \ | 
| 93   V(CheckNonSmi)                               \ | 93   V(CheckNonSmi)                               \ | 
| 94   V(CheckPrototypeMaps)                        \ | 94   V(CheckPrototypeMaps)                        \ | 
| 95   V(CheckSmi)                                  \ | 95   V(CheckSmi)                                  \ | 
| 96   V(CheckSmiOrInt32)                           \ |  | 
| 97   V(ClampToUint8)                              \ | 96   V(ClampToUint8)                              \ | 
| 98   V(ClassOfTestAndBranch)                      \ | 97   V(ClassOfTestAndBranch)                      \ | 
| 99   V(CompareIDAndBranch)                        \ | 98   V(CompareIDAndBranch)                        \ | 
| 100   V(CompareGeneric)                            \ | 99   V(CompareGeneric)                            \ | 
| 101   V(CompareObjectEqAndBranch)                  \ | 100   V(CompareObjectEqAndBranch)                  \ | 
| 102   V(CompareMap)                                \ | 101   V(CompareMap)                                \ | 
| 103   V(CompareConstantEqAndBranch)                \ | 102   V(CompareConstantEqAndBranch)                \ | 
| 104   V(Constant)                                  \ | 103   V(Constant)                                  \ | 
| 105   V(Context)                                   \ | 104   V(Context)                                   \ | 
| 106   V(DebugBreak)                                \ | 105   V(DebugBreak)                                \ | 
| (...skipping 1607 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1714           Representation to, | 1713           Representation to, | 
| 1715           bool is_truncating, | 1714           bool is_truncating, | 
| 1716           bool deoptimize_on_undefined) | 1715           bool deoptimize_on_undefined) | 
| 1717       : HUnaryOperation(value) { | 1716       : HUnaryOperation(value) { | 
| 1718     ASSERT(!value->representation().IsNone() && !to.IsNone()); | 1717     ASSERT(!value->representation().IsNone() && !to.IsNone()); | 
| 1719     ASSERT(!value->representation().Equals(to)); | 1718     ASSERT(!value->representation().Equals(to)); | 
| 1720     set_representation(to); | 1719     set_representation(to); | 
| 1721     SetFlag(kUseGVN); | 1720     SetFlag(kUseGVN); | 
| 1722     if (deoptimize_on_undefined) SetFlag(kDeoptimizeOnUndefined); | 1721     if (deoptimize_on_undefined) SetFlag(kDeoptimizeOnUndefined); | 
| 1723     if (is_truncating) SetFlag(kTruncatingToInt32); | 1722     if (is_truncating) SetFlag(kTruncatingToInt32); | 
| 1724     if (value->type().IsSmi()) { | 1723     if (value->representation().IsSmi() || value->type().IsSmi()) { | 
| 1725       set_type(HType::Smi()); | 1724       set_type(HType::Smi()); | 
| 1726     } else { | 1725     } else { | 
| 1727       set_type(HType::TaggedNumber()); | 1726       set_type(HType::TaggedNumber()); | 
| 1728       if (to.IsTagged()) SetGVNFlag(kChangesNewSpacePromotion); | 1727       if (to.IsTagged()) SetGVNFlag(kChangesNewSpacePromotion); | 
| 1729     } | 1728     } | 
| 1730   } | 1729   } | 
| 1731 | 1730 | 
| 1732   virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited); | 1731   virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited); | 
| 1733   virtual HType CalculateInferredType(); | 1732   virtual HType CalculateInferredType(); | 
| 1734   virtual HValue* Canonicalize(); | 1733   virtual HValue* Canonicalize(); | 
| (...skipping 1210 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2945   virtual void Verify(); | 2944   virtual void Verify(); | 
| 2946 #endif | 2945 #endif | 
| 2947 | 2946 | 
| 2948   DECLARE_CONCRETE_INSTRUCTION(CheckSmi) | 2947   DECLARE_CONCRETE_INSTRUCTION(CheckSmi) | 
| 2949 | 2948 | 
| 2950  protected: | 2949  protected: | 
| 2951   virtual bool DataEquals(HValue* other) { return true; } | 2950   virtual bool DataEquals(HValue* other) { return true; } | 
| 2952 }; | 2951 }; | 
| 2953 | 2952 | 
| 2954 | 2953 | 
| 2955 class HCheckSmiOrInt32: public HUnaryOperation { |  | 
| 2956  public: |  | 
| 2957   explicit HCheckSmiOrInt32(HValue* value) : HUnaryOperation(value) { |  | 
| 2958     SetFlag(kFlexibleRepresentation); |  | 
| 2959     SetFlag(kUseGVN); |  | 
| 2960   } |  | 
| 2961 |  | 
| 2962   virtual int RedefinedOperandIndex() { return 0; } |  | 
| 2963   virtual Representation RequiredInputRepresentation(int index) { |  | 
| 2964     return representation(); |  | 
| 2965   } |  | 
| 2966   virtual void InferRepresentation(HInferRepresentation* h_infer); |  | 
| 2967 |  | 
| 2968   virtual Representation observed_input_representation(int index) { |  | 
| 2969     return Representation::Integer32(); |  | 
| 2970   } |  | 
| 2971 |  | 
| 2972   virtual HValue* Canonicalize() { |  | 
| 2973     if (representation().IsTagged() && !value()->type().IsSmi()) { |  | 
| 2974       return this; |  | 
| 2975     } else { |  | 
| 2976       return value(); |  | 
| 2977     } |  | 
| 2978   } |  | 
| 2979 |  | 
| 2980   DECLARE_CONCRETE_INSTRUCTION(CheckSmiOrInt32) |  | 
| 2981 |  | 
| 2982  protected: |  | 
| 2983   virtual bool DataEquals(HValue* other) { return true; } |  | 
| 2984 }; |  | 
| 2985 |  | 
| 2986 |  | 
| 2987 class HPhi: public HValue { | 2954 class HPhi: public HValue { | 
| 2988  public: | 2955  public: | 
| 2989   HPhi(int merged_index, Zone* zone) | 2956   HPhi(int merged_index, Zone* zone) | 
| 2990       : inputs_(2, zone), | 2957       : inputs_(2, zone), | 
| 2991         merged_index_(merged_index), | 2958         merged_index_(merged_index), | 
| 2992         phi_id_(-1), | 2959         phi_id_(-1), | 
| 2993         is_convertible_to_integer_(true) { | 2960         is_convertible_to_integer_(true) { | 
| 2994     for (int i = 0; i < Representation::kNumRepresentations; i++) { | 2961     for (int i = 0; i < Representation::kNumRepresentations; i++) { | 
| 2995       non_phi_uses_[i] = 0; | 2962       non_phi_uses_[i] = 0; | 
| 2996       indirect_uses_[i] = 0; | 2963       indirect_uses_[i] = 0; | 
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3571   ALLOW_SMI_KEY | 3538   ALLOW_SMI_KEY | 
| 3572 }; | 3539 }; | 
| 3573 | 3540 | 
| 3574 | 3541 | 
| 3575 class HBoundsCheckBaseIndexInformation; | 3542 class HBoundsCheckBaseIndexInformation; | 
| 3576 | 3543 | 
| 3577 | 3544 | 
| 3578 class HBoundsCheck: public HTemplateInstruction<2> { | 3545 class HBoundsCheck: public HTemplateInstruction<2> { | 
| 3579  public: | 3546  public: | 
| 3580   // Normally HBoundsCheck should be created using the | 3547   // Normally HBoundsCheck should be created using the | 
| 3581   // HGraphBuilder::AddBoundsCheck() helper, which also guards the index with | 3548   // HGraphBuilder::AddBoundsCheck() helper. | 
| 3582   // a HCheckSmiOrInt32 check. |  | 
| 3583   // However when building stubs, where we know that the arguments are Int32, | 3549   // However when building stubs, where we know that the arguments are Int32, | 
| 3584   // it makes sense to invoke this constructor directly. | 3550   // it makes sense to invoke this constructor directly. | 
| 3585   HBoundsCheck(HValue* index, | 3551   HBoundsCheck(HValue* index, | 
| 3586                HValue* length, | 3552                HValue* length, | 
| 3587                BoundsCheckKeyMode key_mode = DONT_ALLOW_SMI_KEY, | 3553                BoundsCheckKeyMode key_mode = DONT_ALLOW_SMI_KEY, | 
| 3588                Representation r = Representation::None()) | 3554                Representation r = Representation::None()) | 
| 3589     : key_mode_(key_mode), skip_check_(false), | 3555     : key_mode_(key_mode), skip_check_(false), | 
| 3590       base_(NULL), offset_(0), scale_(0), | 3556       base_(NULL), offset_(0), scale_(0), | 
| 3591       responsibility_direction_(DIRECTION_NONE) { | 3557       responsibility_direction_(DIRECTION_NONE) { | 
| 3592     SetOperandAt(0, index); | 3558     SetOperandAt(0, index); | 
| (...skipping 1783 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5376  public: | 5342  public: | 
| 5377   virtual HValue* GetKey() = 0; | 5343   virtual HValue* GetKey() = 0; | 
| 5378   virtual void SetKey(HValue* key) = 0; | 5344   virtual void SetKey(HValue* key) = 0; | 
| 5379   virtual void SetIndexOffset(uint32_t index_offset) = 0; | 5345   virtual void SetIndexOffset(uint32_t index_offset) = 0; | 
| 5380   virtual bool IsDehoisted() = 0; | 5346   virtual bool IsDehoisted() = 0; | 
| 5381   virtual void SetDehoisted(bool is_dehoisted) = 0; | 5347   virtual void SetDehoisted(bool is_dehoisted) = 0; | 
| 5382   virtual ~ArrayInstructionInterface() { }; | 5348   virtual ~ArrayInstructionInterface() { }; | 
| 5383 | 5349 | 
| 5384   static Representation KeyedAccessIndexRequirement(Representation r) { | 5350   static Representation KeyedAccessIndexRequirement(Representation r) { | 
| 5385     return r.IsInteger32() ? Representation::Integer32() | 5351     return r.IsInteger32() ? Representation::Integer32() | 
| 5386                            : Representation::Tagged(); | 5352                            : Representation::Smi(); | 
| 5387   } | 5353   } | 
| 5388 }; | 5354 }; | 
| 5389 | 5355 | 
| 5390 | 5356 | 
| 5391 enum LoadKeyedHoleMode { | 5357 enum LoadKeyedHoleMode { | 
| 5392   NEVER_RETURN_HOLE, | 5358   NEVER_RETURN_HOLE, | 
| 5393   ALLOW_RETURN_HOLE | 5359   ALLOW_RETURN_HOLE | 
| 5394 }; | 5360 }; | 
| 5395 | 5361 | 
| 5396 | 5362 | 
| (...skipping 1082 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6479   virtual bool IsDeletable() const { return true; } | 6445   virtual bool IsDeletable() const { return true; } | 
| 6480 }; | 6446 }; | 
| 6481 | 6447 | 
| 6482 | 6448 | 
| 6483 #undef DECLARE_INSTRUCTION | 6449 #undef DECLARE_INSTRUCTION | 
| 6484 #undef DECLARE_CONCRETE_INSTRUCTION | 6450 #undef DECLARE_CONCRETE_INSTRUCTION | 
| 6485 | 6451 | 
| 6486 } }  // namespace v8::internal | 6452 } }  // namespace v8::internal | 
| 6487 | 6453 | 
| 6488 #endif  // V8_HYDROGEN_INSTRUCTIONS_H_ | 6454 #endif  // V8_HYDROGEN_INSTRUCTIONS_H_ | 
| OLD | NEW | 
|---|