Chromium Code Reviews| Index: src/hydrogen-instructions.h |
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
| index e71b7cdf41a1b483e22320eecddd5a569fe0a541..1b4c8ae7a9601cbd657bc40d73e082bff17511d1 100644 |
| --- a/src/hydrogen-instructions.h |
| +++ b/src/hydrogen-instructions.h |
| @@ -5240,16 +5240,11 @@ class HLoadGlobalGeneric: public HTemplateInstruction<2> { |
| class HAllocate: public HTemplateInstruction<2> { |
| public: |
| - enum Flags { |
| - CAN_ALLOCATE_IN_NEW_SPACE = 1 << 0, |
| - CAN_ALLOCATE_IN_OLD_DATA_SPACE = 1 << 1, |
| - CAN_ALLOCATE_IN_OLD_POINTER_SPACE = 1 << 2, |
| - ALLOCATE_DOUBLE_ALIGNED = 1 << 3, |
| - PREFILL_WITH_FILLER = 1 << 4 |
| - }; |
| - |
| - HAllocate(HValue* context, HValue* size, HType type, Flags flags) |
| - : flags_(flags) { |
| + HAllocate(HValue* context, |
| + HValue* size, |
| + HType type, |
| + bool pretenure, |
| + ElementsKind kind = FAST_ELEMENTS) { |
| SetOperandAt(0, context); |
| SetOperandAt(1, size); |
| set_type(type); |
| @@ -5257,24 +5252,25 @@ class HAllocate: public HTemplateInstruction<2> { |
| SetFlag(kTrackSideEffectDominators); |
| SetGVNFlag(kChangesNewSpacePromotion); |
| SetGVNFlag(kDependsOnNewSpacePromotion); |
| + if (pretenure) { |
| + if (IsFastDoubleElementsKind(kind)) { |
| + flags_ = static_cast<HAllocate::Flags>(ALLOCATE_IN_OLD_DATA_SPACE | |
| + ALLOCATE_DOUBLE_ALIGNED); |
| + } else { |
| + flags_ = ALLOCATE_IN_OLD_POINTER_SPACE; |
| + } |
| + } else { |
| + flags_ = ALLOCATE_IN_NEW_SPACE; |
| + if (IsFastDoubleElementsKind(kind)) { |
| + flags_ = static_cast<HAllocate::Flags>(flags_ | |
| + ALLOCATE_DOUBLE_ALIGNED); |
| + } |
| + } |
| } |
| // Maximum instance size for which allocations will be inlined. |
| static const int kMaxInlineSize = 64 * kPointerSize; |
| - static Flags DefaultFlags() { |
| - return CAN_ALLOCATE_IN_NEW_SPACE; |
| - } |
| - |
| - static Flags DefaultFlags(ElementsKind kind) { |
| - Flags flags = CAN_ALLOCATE_IN_NEW_SPACE; |
| - if (IsFastDoubleElementsKind(kind)) { |
| - flags = static_cast<HAllocate::Flags>( |
| - flags | HAllocate::ALLOCATE_DOUBLE_ALIGNED); |
| - } |
| - return flags; |
| - } |
| - |
| HValue* context() { return OperandAt(0); } |
| HValue* size() { return OperandAt(1); } |
| @@ -5294,25 +5290,16 @@ class HAllocate: public HTemplateInstruction<2> { |
| known_initial_map_ = known_initial_map; |
| } |
| - bool CanAllocateInNewSpace() const { |
| - return (flags_ & CAN_ALLOCATE_IN_NEW_SPACE) != 0; |
| - } |
| - |
| - bool CanAllocateInOldDataSpace() const { |
| - return (flags_ & CAN_ALLOCATE_IN_OLD_DATA_SPACE) != 0; |
| + bool IsNewSpaceAllocation() const { |
| + return (flags_ & ALLOCATE_IN_NEW_SPACE) != 0; |
| } |
| - bool CanAllocateInOldPointerSpace() const { |
| - return (flags_ & CAN_ALLOCATE_IN_OLD_POINTER_SPACE) != 0; |
| + bool IsOldDataSpaceAllocation() const { |
| + return (flags_ & ALLOCATE_IN_OLD_DATA_SPACE) != 0; |
| } |
| - bool CanAllocateInOldSpace() const { |
| - return CanAllocateInOldDataSpace() || |
| - CanAllocateInOldPointerSpace(); |
| - } |
| - |
| - bool GuaranteedInNewSpace() const { |
| - return CanAllocateInNewSpace() && !CanAllocateInOldSpace(); |
| + bool IsOldPointerSpaceAllocation() const { |
| + return (flags_ & ALLOCATE_IN_OLD_POINTER_SPACE) != 0; |
| } |
| bool MustAllocateDoubleAligned() const { |
| @@ -5323,8 +5310,12 @@ class HAllocate: public HTemplateInstruction<2> { |
| return (flags_ & PREFILL_WITH_FILLER) != 0; |
| } |
| - void SetFlags(Flags flags) { |
| - flags_ = static_cast<HAllocate::Flags>(flags_ | flags); |
| + void SetPrefillWithFiller() { |
|
Michael Starzinger
2013/07/30 16:51:16
suggestion: Maybe s/SetPrefillWithFiller/MakePrefi
Hannes Payer (out of office)
2013/07/31 07:02:42
Done.
|
| + flags_ = static_cast<HAllocate::Flags>(flags_ | PREFILL_WITH_FILLER); |
| + } |
| + |
| + void SetDoubleAligned() { |
|
Michael Starzinger
2013/07/30 16:51:16
Likewise.
Hannes Payer (out of office)
2013/07/31 07:02:42
Done.
|
| + flags_ = static_cast<HAllocate::Flags>(flags_ | ALLOCATE_DOUBLE_ALIGNED); |
| } |
| void UpdateSize(HValue* size) { |
| @@ -5339,6 +5330,14 @@ class HAllocate: public HTemplateInstruction<2> { |
| DECLARE_CONCRETE_INSTRUCTION(Allocate) |
| private: |
| + enum Flags { |
| + ALLOCATE_IN_NEW_SPACE = 1 << 0, |
| + ALLOCATE_IN_OLD_DATA_SPACE = 1 << 1, |
| + ALLOCATE_IN_OLD_POINTER_SPACE = 1 << 2, |
| + ALLOCATE_DOUBLE_ALIGNED = 1 << 3, |
| + PREFILL_WITH_FILLER = 1 << 4 |
| + }; |
| + |
| Flags flags_; |
| Handle<Map> known_initial_map_; |
| }; |
| @@ -5389,7 +5388,7 @@ inline bool ReceiverObjectNeedsWriteBarrier(HValue* object, |
| } |
| if (object != new_space_dominator) return true; |
| if (object->IsAllocate()) { |
| - return !HAllocate::cast(object)->GuaranteedInNewSpace(); |
| + return !HAllocate::cast(object)->IsNewSpaceAllocation(); |
| } |
| return true; |
| } |