| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 9073ac36ca9983aa3e51550cb137b882370a511d..035925006aa68ddb2323402065ee291a3461da86 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -476,22 +476,28 @@ class HUseIterator V8_FINAL BASE_EMBEDDED {
|
| };
|
|
|
|
|
| -// There must be one corresponding kDepends flag for every kChanges flag and
|
| -// the order of the kChanges flags must be exactly the same as of the kDepends
|
| -// flags. All tracked flags should appear before untracked ones.
|
| +// All tracked flags should appear before untracked ones.
|
| enum GVNFlag {
|
| // Declare global value numbering flags.
|
| -#define DECLARE_FLAG(type) kChanges##type, kDependsOn##type,
|
| +#define DECLARE_FLAG(Type) k##Type,
|
| GVN_TRACKED_FLAG_LIST(DECLARE_FLAG)
|
| GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
|
| #undef DECLARE_FLAG
|
| - kNumberOfFlags,
|
| -#define COUNT_FLAG(type) + 1
|
| - kNumberOfTrackedSideEffects = 0 GVN_TRACKED_FLAG_LIST(COUNT_FLAG)
|
| +#define COUNT_FLAG(Type) + 1
|
| + kNumberOfTrackedSideEffects = 0 GVN_TRACKED_FLAG_LIST(COUNT_FLAG),
|
| + kNumberOfUntrackedSideEffects = 0 GVN_UNTRACKED_FLAG_LIST(COUNT_FLAG),
|
| #undef COUNT_FLAG
|
| + kNumberOfFlags = kNumberOfTrackedSideEffects + kNumberOfUntrackedSideEffects
|
| };
|
|
|
|
|
| +static inline GVNFlag GVNFlagFromInt(int i) {
|
| + ASSERT(i >= 0);
|
| + ASSERT(i < kNumberOfFlags);
|
| + return static_cast<GVNFlag>(i);
|
| +}
|
| +
|
| +
|
| class DecompositionResult V8_FINAL BASE_EMBEDDED {
|
| public:
|
| DecompositionResult() : base_(NULL), offset_(0), scale_(0) {}
|
| @@ -537,7 +543,7 @@ class DecompositionResult V8_FINAL BASE_EMBEDDED {
|
| };
|
|
|
|
|
| -typedef EnumSet<GVNFlag, int64_t> GVNFlagSet;
|
| +typedef EnumSet<GVNFlag, int32_t> GVNFlagSet;
|
|
|
|
|
| class HValue : public ZoneObject {
|
| @@ -588,18 +594,6 @@ class HValue : public ZoneObject {
|
|
|
| STATIC_ASSERT(kLastFlag < kBitsPerInt);
|
|
|
| - static const int kChangesToDependsFlagsLeftShift = 1;
|
| -
|
| - static GVNFlag ChangesFlagFromInt(int x) {
|
| - return static_cast<GVNFlag>(x * 2);
|
| - }
|
| - static GVNFlag DependsOnFlagFromInt(int x) {
|
| - return static_cast<GVNFlag>(x * 2 + 1);
|
| - }
|
| - static GVNFlagSet ConvertChangesToDependsFlags(GVNFlagSet flags) {
|
| - return GVNFlagSet(flags.ToIntegral() << kChangesToDependsFlagsLeftShift);
|
| - }
|
| -
|
| static HValue* cast(HValue* value) { return value; }
|
|
|
| enum Opcode {
|
| @@ -775,43 +769,38 @@ class HValue : public ZoneObject {
|
| // of uses is non-empty.
|
| bool HasAtLeastOneUseWithFlagAndNoneWithout(Flag f) const;
|
|
|
| - GVNFlagSet gvn_flags() const { return gvn_flags_; }
|
| - void SetGVNFlag(GVNFlag f) { gvn_flags_.Add(f); }
|
| - void ClearGVNFlag(GVNFlag f) { gvn_flags_.Remove(f); }
|
| - bool CheckGVNFlag(GVNFlag f) const { return gvn_flags_.Contains(f); }
|
| - void SetAllSideEffects() { gvn_flags_.Add(AllSideEffectsFlagSet()); }
|
| + GVNFlagSet ChangesFlags() const { return changes_flags_; }
|
| + GVNFlagSet DependsOnFlags() const { return depends_on_flags_; }
|
| + void SetChangesFlag(GVNFlag f) { changes_flags_.Add(f); }
|
| + void SetDependsOnFlag(GVNFlag f) { depends_on_flags_.Add(f); }
|
| + void ClearChangesFlag(GVNFlag f) { changes_flags_.Remove(f); }
|
| + void ClearDependsOnFlag(GVNFlag f) { depends_on_flags_.Remove(f); }
|
| + bool CheckChangesFlag(GVNFlag f) const {
|
| + return changes_flags_.Contains(f);
|
| + }
|
| + bool CheckDependsOnFlag(GVNFlag f) const {
|
| + return depends_on_flags_.Contains(f);
|
| + }
|
| + void SetAllSideEffects() { changes_flags_.Add(AllSideEffectsFlagSet()); }
|
| void ClearAllSideEffects() {
|
| - gvn_flags_.Remove(AllSideEffectsFlagSet());
|
| + changes_flags_.Remove(AllSideEffectsFlagSet());
|
| }
|
| bool HasSideEffects() const {
|
| - return gvn_flags_.ContainsAnyOf(AllSideEffectsFlagSet());
|
| + return changes_flags_.ContainsAnyOf(AllSideEffectsFlagSet());
|
| }
|
| bool HasObservableSideEffects() const {
|
| return !CheckFlag(kHasNoObservableSideEffects) &&
|
| - gvn_flags_.ContainsAnyOf(AllObservableSideEffectsFlagSet());
|
| - }
|
| -
|
| - GVNFlagSet DependsOnFlags() const {
|
| - GVNFlagSet result = gvn_flags_;
|
| - result.Intersect(AllDependsOnFlagSet());
|
| - return result;
|
| + changes_flags_.ContainsAnyOf(AllObservableSideEffectsFlagSet());
|
| }
|
|
|
| GVNFlagSet SideEffectFlags() const {
|
| - GVNFlagSet result = gvn_flags_;
|
| + GVNFlagSet result = ChangesFlags();
|
| result.Intersect(AllSideEffectsFlagSet());
|
| return result;
|
| }
|
|
|
| - GVNFlagSet ChangesFlags() const {
|
| - GVNFlagSet result = gvn_flags_;
|
| - result.Intersect(AllChangesFlagSet());
|
| - return result;
|
| - }
|
| -
|
| GVNFlagSet ObservableChangesFlags() const {
|
| - GVNFlagSet result = gvn_flags_;
|
| - result.Intersect(AllChangesFlagSet());
|
| + GVNFlagSet result = ChangesFlags();
|
| result.Intersect(AllObservableSideEffectsFlagSet());
|
| return result;
|
| }
|
| @@ -952,20 +941,9 @@ class HValue : public ZoneObject {
|
| representation_ = r;
|
| }
|
|
|
| - static GVNFlagSet AllDependsOnFlagSet() {
|
| - GVNFlagSet result;
|
| - // Create changes mask.
|
| -#define ADD_FLAG(type) result.Add(kDependsOn##type);
|
| - GVN_TRACKED_FLAG_LIST(ADD_FLAG)
|
| - GVN_UNTRACKED_FLAG_LIST(ADD_FLAG)
|
| -#undef ADD_FLAG
|
| - return result;
|
| - }
|
| -
|
| - static GVNFlagSet AllChangesFlagSet() {
|
| + static GVNFlagSet AllFlagSet() {
|
| GVNFlagSet result;
|
| - // Create changes mask.
|
| -#define ADD_FLAG(type) result.Add(kChanges##type);
|
| +#define ADD_FLAG(Type) result.Add(k##Type);
|
| GVN_TRACKED_FLAG_LIST(ADD_FLAG)
|
| GVN_UNTRACKED_FLAG_LIST(ADD_FLAG)
|
| #undef ADD_FLAG
|
| @@ -974,19 +952,19 @@ class HValue : public ZoneObject {
|
|
|
| // A flag mask to mark an instruction as having arbitrary side effects.
|
| static GVNFlagSet AllSideEffectsFlagSet() {
|
| - GVNFlagSet result = AllChangesFlagSet();
|
| - result.Remove(kChangesOsrEntries);
|
| + GVNFlagSet result = AllFlagSet();
|
| + result.Remove(kOsrEntries);
|
| return result;
|
| }
|
|
|
| // A flag mask of all side effects that can make observable changes in
|
| // an executing program (i.e. are not safe to repeat, move or remove);
|
| static GVNFlagSet AllObservableSideEffectsFlagSet() {
|
| - GVNFlagSet result = AllChangesFlagSet();
|
| - result.Remove(kChangesNewSpacePromotion);
|
| - result.Remove(kChangesElementsKind);
|
| - result.Remove(kChangesElementsPointer);
|
| - result.Remove(kChangesMaps);
|
| + GVNFlagSet result = AllFlagSet();
|
| + result.Remove(kNewSpacePromotion);
|
| + result.Remove(kElementsKind);
|
| + result.Remove(kElementsPointer);
|
| + result.Remove(kMaps);
|
| return result;
|
| }
|
|
|
| @@ -1007,7 +985,8 @@ class HValue : public ZoneObject {
|
| HUseListNode* use_list_;
|
| Range* range_;
|
| int flags_;
|
| - GVNFlagSet gvn_flags_;
|
| + GVNFlagSet changes_flags_;
|
| + GVNFlagSet depends_on_flags_;
|
|
|
| private:
|
| virtual bool IsDeletable() const { return false; }
|
| @@ -1261,7 +1240,7 @@ class HInstruction : public HValue {
|
| next_(NULL),
|
| previous_(NULL),
|
| position_(RelocInfo::kNoPosition) {
|
| - SetGVNFlag(kDependsOnOsrEntries);
|
| + SetDependsOnFlag(kOsrEntries);
|
| }
|
|
|
| virtual void DeleteFromGraph() V8_OVERRIDE { Unlink(); }
|
| @@ -1721,7 +1700,7 @@ class HChange V8_FINAL : public HUnaryOperation {
|
| set_type(HType::Smi());
|
| } else {
|
| set_type(HType::TaggedNumber());
|
| - if (to.IsTagged()) SetGVNFlag(kChangesNewSpacePromotion);
|
| + if (to.IsTagged()) SetChangesFlag(kNewSpacePromotion);
|
| }
|
| }
|
|
|
| @@ -1967,7 +1946,7 @@ class HStackCheck V8_FINAL : public HTemplateInstruction<1> {
|
| private:
|
| HStackCheck(HValue* context, Type type) : type_(type) {
|
| SetOperandAt(0, context);
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
|
|
| Type type_;
|
| @@ -2515,7 +2494,7 @@ class HMapEnumLength V8_FINAL : public HUnaryOperation {
|
| : HUnaryOperation(value, HType::Smi()) {
|
| set_representation(Representation::Smi());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnMaps);
|
| + SetDependsOnFlag(kMaps);
|
| }
|
|
|
| virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
| @@ -2589,7 +2568,7 @@ class HUnaryMathOperation V8_FINAL : public HTemplateInstruction<2> {
|
| SetFlag(kFlexibleRepresentation);
|
| // TODO(svenpanne) This flag is actually only needed if representation()
|
| // is tagged, and not when it is an unboxed double or unboxed integer.
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| break;
|
| case kMathLog:
|
| case kMathExp:
|
| @@ -2638,7 +2617,7 @@ class HLoadRoot V8_FINAL : public HTemplateInstruction<0> {
|
| SetFlag(kUseGVN);
|
| // TODO(bmeurer): We'll need kDependsOnRoots once we add the
|
| // corresponding HStoreRoot instruction.
|
| - SetGVNFlag(kDependsOnCalls);
|
| + SetDependsOnFlag(kCalls);
|
| }
|
|
|
| virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
| @@ -2703,7 +2682,7 @@ class HCheckMaps V8_FINAL : public HTemplateInstruction<2> {
|
| map_set_.Add(Unique<Map>(map), zone);
|
| if (!has_migration_target_ && map->is_migration_target()) {
|
| has_migration_target_ = true;
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
| }
|
|
|
| @@ -2717,8 +2696,8 @@ class HCheckMaps V8_FINAL : public HTemplateInstruction<2> {
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| SetFlag(kTrackSideEffectDominators);
|
| - SetGVNFlag(kDependsOnMaps);
|
| - SetGVNFlag(kDependsOnElementsKind);
|
| + SetDependsOnFlag(kMaps);
|
| + SetDependsOnFlag(kElementsKind);
|
| }
|
|
|
| bool omit_;
|
| @@ -3322,7 +3301,7 @@ class HCapturedObject V8_FINAL : public HDematerializedObject {
|
| void ReuseSideEffectsFromStore(HInstruction* store) {
|
| ASSERT(store->HasObservableSideEffects());
|
| ASSERT(store->IsStoreNamedField());
|
| - gvn_flags_.Add(store->gvn_flags());
|
| + changes_flags_.Add(store->ChangesFlags());
|
| }
|
|
|
| // Replay effects of this instruction on the given environment.
|
| @@ -3955,7 +3934,7 @@ class HBitwiseBinaryOperation : public HBinaryOperation {
|
| }
|
|
|
| virtual void RepresentationChanged(Representation to) V8_OVERRIDE {
|
| - if (to.IsTagged()) SetGVNFlag(kChangesNewSpacePromotion);
|
| + if (to.IsTagged()) SetChangesFlag(kNewSpacePromotion);
|
| if (to.IsTagged() &&
|
| (left()->ToNumberCanBeObserved() || right()->ToNumberCanBeObserved())) {
|
| SetAllSideEffects();
|
| @@ -4032,7 +4011,7 @@ class HArithmeticBinaryOperation : public HBinaryOperation {
|
| }
|
|
|
| virtual void RepresentationChanged(Representation to) V8_OVERRIDE {
|
| - if (to.IsTagged()) SetGVNFlag(kChangesNewSpacePromotion);
|
| + if (to.IsTagged()) SetChangesFlag(kNewSpacePromotion);
|
| if (to.IsTagged() &&
|
| (left()->ToNumberCanBeObserved() || right()->ToNumberCanBeObserved())) {
|
| SetAllSideEffects();
|
| @@ -4357,7 +4336,7 @@ class HStringCompareAndBranch : public HTemplateControlInstruction<2, 3> {
|
| SetOperandAt(1, left);
|
| SetOperandAt(2, right);
|
| set_representation(Representation::Tagged());
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
|
|
| Token::Value token_;
|
| @@ -4582,7 +4561,7 @@ class HPower V8_FINAL : public HTemplateInstruction<2> {
|
| SetOperandAt(1, right);
|
| set_representation(Representation::Double());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
|
|
| virtual bool IsDeletable() const V8_OVERRIDE {
|
| @@ -4624,7 +4603,7 @@ class HAdd V8_FINAL : public HArithmeticBinaryOperation {
|
|
|
| virtual void RepresentationChanged(Representation to) V8_OVERRIDE {
|
| if (to.IsTagged()) {
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| ClearFlag(kAllowUndefinedAsNaN);
|
| }
|
| if (to.IsTagged() &&
|
| @@ -5081,8 +5060,8 @@ class HOsrEntry V8_FINAL : public HTemplateInstruction<0> {
|
|
|
| private:
|
| explicit HOsrEntry(BailoutId ast_id) : ast_id_(ast_id) {
|
| - SetGVNFlag(kChangesOsrEntries);
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kOsrEntries);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
|
|
| BailoutId ast_id_;
|
| @@ -5224,7 +5203,7 @@ class HLoadGlobalCell V8_FINAL : public HTemplateInstruction<0> {
|
| : cell_(Unique<Cell>::CreateUninitialized(cell)), details_(details) {
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnGlobalVars);
|
| + SetDependsOnFlag(kGlobalVars);
|
| }
|
|
|
| virtual bool IsDeletable() const V8_OVERRIDE { return !RequiresHoleCheck(); }
|
| @@ -5376,8 +5355,8 @@ class HAllocate V8_FINAL : public HTemplateInstruction<2> {
|
| SetOperandAt(1, size);
|
| set_representation(Representation::Tagged());
|
| SetFlag(kTrackSideEffectDominators);
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| - SetGVNFlag(kDependsOnNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| + SetDependsOnFlag(kNewSpacePromotion);
|
|
|
| if (FLAG_trace_pretenuring) {
|
| PrintF("HAllocate with AllocationSite %p %s\n",
|
| @@ -5575,7 +5554,7 @@ class HStoreGlobalCell V8_FINAL : public HUnaryOperation {
|
| : HUnaryOperation(value),
|
| cell_(Unique<PropertyCell>::CreateUninitialized(cell)),
|
| details_(details) {
|
| - SetGVNFlag(kChangesGlobalVars);
|
| + SetChangesFlag(kGlobalVars);
|
| }
|
|
|
| Unique<PropertyCell> cell_;
|
| @@ -5614,7 +5593,7 @@ class HLoadContextSlot V8_FINAL : public HUnaryOperation {
|
| }
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnContextSlots);
|
| + SetDependsOnFlag(kContextSlots);
|
| }
|
|
|
| int slot_index() const { return slot_index_; }
|
| @@ -5698,7 +5677,7 @@ class HStoreContextSlot V8_FINAL : public HTemplateInstruction<2> {
|
| : slot_index_(slot_index), mode_(mode) {
|
| SetOperandAt(0, context);
|
| SetOperandAt(1, value);
|
| - SetGVNFlag(kChangesContextSlots);
|
| + SetChangesFlag(kContextSlots);
|
| }
|
|
|
| int slot_index_;
|
| @@ -5976,7 +5955,7 @@ class HObjectAccess V8_FINAL {
|
| return HObjectAccess(kInobject, GlobalObject::kNativeContextOffset);
|
| }
|
|
|
| - void PrintTo(StringStream* stream);
|
| + void PrintTo(StringStream* stream) const;
|
|
|
| inline bool Equals(HObjectAccess that) const {
|
| return value_ == that.value_; // portion and offset must match
|
| @@ -5998,6 +5977,8 @@ class HObjectAccess V8_FINAL {
|
| kExternalMemory // some field in external memory
|
| };
|
|
|
| + HObjectAccess() : value_(0) {}
|
| +
|
| HObjectAccess(Portion portion, int offset,
|
| Representation representation = Representation::Tagged(),
|
| Handle<String> name = Handle<String>::null(),
|
| @@ -6030,6 +6011,7 @@ class HObjectAccess V8_FINAL {
|
|
|
| friend class HLoadNamedField;
|
| friend class HStoreNamedField;
|
| + friend class SideEffectsTracker;
|
|
|
| inline Portion portion() const {
|
| return PortionField::decode(value_);
|
| @@ -6166,7 +6148,7 @@ class HLoadFunctionPrototype V8_FINAL : public HUnaryOperation {
|
| : HUnaryOperation(function) {
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnCalls);
|
| + SetDependsOnFlag(kCalls);
|
| }
|
| };
|
|
|
| @@ -6311,10 +6293,10 @@ class HLoadKeyed V8_FINAL
|
| set_representation(Representation::Tagged());
|
| }
|
|
|
| - SetGVNFlag(kDependsOnArrayElements);
|
| + SetDependsOnFlag(kArrayElements);
|
| } else {
|
| set_representation(Representation::Double());
|
| - SetGVNFlag(kDependsOnDoubleArrayElements);
|
| + SetDependsOnFlag(kDoubleArrayElements);
|
| }
|
| } else {
|
| if (elements_kind == EXTERNAL_FLOAT32_ELEMENTS ||
|
| @@ -6327,14 +6309,14 @@ class HLoadKeyed V8_FINAL
|
| }
|
|
|
| if (is_external()) {
|
| - SetGVNFlag(kDependsOnExternalMemory);
|
| + SetDependsOnFlag(kExternalMemory);
|
| } else if (is_fixed_typed_array()) {
|
| - SetGVNFlag(kDependsOnTypedArrayElements);
|
| + SetDependsOnFlag(kTypedArrayElements);
|
| } else {
|
| UNREACHABLE();
|
| }
|
| // Native code could change the specialized array.
|
| - SetGVNFlag(kDependsOnCalls);
|
| + SetDependsOnFlag(kCalls);
|
| }
|
|
|
| SetFlag(kUseGVN);
|
| @@ -6458,7 +6440,7 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> {
|
| }
|
| virtual bool HandleSideEffectDominator(GVNFlag side_effect,
|
| HValue* dominator) V8_OVERRIDE {
|
| - ASSERT(side_effect == kChangesNewSpacePromotion);
|
| + ASSERT(side_effect == kNewSpacePromotion);
|
| new_space_dominator_ = dominator;
|
| return false;
|
| }
|
| @@ -6690,7 +6672,7 @@ class HStoreKeyed V8_FINAL
|
|
|
| virtual bool HandleSideEffectDominator(GVNFlag side_effect,
|
| HValue* dominator) V8_OVERRIDE {
|
| - ASSERT(side_effect == kChangesNewSpacePromotion);
|
| + ASSERT(side_effect == kNewSpacePromotion);
|
| new_space_dominator_ = dominator;
|
| return false;
|
| }
|
| @@ -6733,20 +6715,20 @@ class HStoreKeyed V8_FINAL
|
|
|
| if (IsFastObjectElementsKind(elements_kind)) {
|
| SetFlag(kTrackSideEffectDominators);
|
| - SetGVNFlag(kDependsOnNewSpacePromotion);
|
| + SetDependsOnFlag(kNewSpacePromotion);
|
| }
|
| if (is_external()) {
|
| - SetGVNFlag(kChangesExternalMemory);
|
| + SetChangesFlag(kExternalMemory);
|
| SetFlag(kAllowUndefinedAsNaN);
|
| } else if (IsFastDoubleElementsKind(elements_kind)) {
|
| - SetGVNFlag(kChangesDoubleArrayElements);
|
| + SetChangesFlag(kDoubleArrayElements);
|
| } else if (IsFastSmiElementsKind(elements_kind)) {
|
| - SetGVNFlag(kChangesArrayElements);
|
| + SetChangesFlag(kArrayElements);
|
| } else if (is_fixed_typed_array()) {
|
| - SetGVNFlag(kChangesTypedArrayElements);
|
| + SetChangesFlag(kTypedArrayElements);
|
| SetFlag(kAllowUndefinedAsNaN);
|
| } else {
|
| - SetGVNFlag(kChangesArrayElements);
|
| + SetChangesFlag(kArrayElements);
|
| }
|
|
|
| // EXTERNAL_{UNSIGNED_,}{BYTE,SHORT,INT}_ELEMENTS are truncating.
|
| @@ -6850,10 +6832,10 @@ class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> {
|
| SetOperandAt(0, object);
|
| SetOperandAt(1, context);
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kChangesElementsKind);
|
| + SetChangesFlag(kElementsKind);
|
| if (!IsSimpleMapChangeTransition(from_kind_, to_kind_)) {
|
| - SetGVNFlag(kChangesElementsPointer);
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kElementsPointer);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
| set_representation(Representation::Tagged());
|
| }
|
| @@ -6904,8 +6886,8 @@ class HStringAdd V8_FINAL : public HBinaryOperation {
|
| flags_(flags), pretenure_flag_(pretenure_flag) {
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnMaps);
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetDependsOnFlag(kMaps);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| if (FLAG_trace_pretenuring) {
|
| PrintF("HStringAdd with AllocationSite %p %s\n",
|
| allocation_site.is_null()
|
| @@ -6956,9 +6938,9 @@ class HStringCharCodeAt V8_FINAL : public HTemplateInstruction<3> {
|
| SetOperandAt(2, index);
|
| set_representation(Representation::Integer32());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnMaps);
|
| - SetGVNFlag(kDependsOnStringChars);
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetDependsOnFlag(kMaps);
|
| + SetDependsOnFlag(kStringChars);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
|
|
| // No side effects: runtime function assumes string + number inputs.
|
| @@ -6992,7 +6974,7 @@ class HStringCharFromCode V8_FINAL : public HTemplateInstruction<2> {
|
| SetOperandAt(1, char_code);
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
|
|
| virtual bool IsDeletable() const V8_OVERRIDE {
|
| @@ -7101,7 +7083,7 @@ class HFunctionLiteral V8_FINAL : public HTemplateInstruction<1> {
|
| language_mode_(shared->language_mode()) {
|
| SetOperandAt(0, context);
|
| set_representation(Representation::Tagged());
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
| }
|
|
|
| virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
| @@ -7172,7 +7154,7 @@ class HToFastProperties V8_FINAL : public HUnaryOperation {
|
| private:
|
| explicit HToFastProperties(HValue* value) : HUnaryOperation(value) {
|
| set_representation(Representation::Tagged());
|
| - SetGVNFlag(kChangesNewSpacePromotion);
|
| + SetChangesFlag(kNewSpacePromotion);
|
|
|
| // This instruction is not marked as kChangesMaps, but does
|
| // change the map of the input operand. Use it only when creating
|
| @@ -7251,7 +7233,7 @@ class HSeqStringGetChar V8_FINAL : public HTemplateInstruction<2> {
|
| SetOperandAt(1, index);
|
| set_representation(Representation::Integer32());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnStringChars);
|
| + SetDependsOnFlag(kStringChars);
|
| }
|
|
|
| virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
| @@ -7290,7 +7272,7 @@ class HSeqStringSetChar V8_FINAL : public HTemplateInstruction<4> {
|
| SetOperandAt(2, index);
|
| SetOperandAt(3, value);
|
| set_representation(Representation::Tagged());
|
| - SetGVNFlag(kChangesStringChars);
|
| + SetChangesFlag(kStringChars);
|
| }
|
|
|
| String::Encoding encoding_;
|
| @@ -7330,8 +7312,8 @@ class HCheckMapValue V8_FINAL : public HTemplateInstruction<2> {
|
| SetOperandAt(1, map);
|
| set_representation(Representation::Tagged());
|
| SetFlag(kUseGVN);
|
| - SetGVNFlag(kDependsOnMaps);
|
| - SetGVNFlag(kDependsOnElementsKind);
|
| + SetDependsOnFlag(kMaps);
|
| + SetDependsOnFlag(kElementsKind);
|
| }
|
| };
|
|
|
|
|