Commit d2d3fc0e authored by verwaest@chromium.org's avatar verwaest@chromium.org

Use PropertyAccessType for keyed accesses rather than "bool is_store"

BUG=
R=ishell@chromium.org

Review URL: https://codereview.chromium.org/137883008

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19221 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 23bfeabc
...@@ -552,7 +552,7 @@ HValue* CodeStubGraphBuilder<KeyedLoadFastElementStub>::BuildCodeStub() { ...@@ -552,7 +552,7 @@ HValue* CodeStubGraphBuilder<KeyedLoadFastElementStub>::BuildCodeStub() {
HInstruction* load = BuildUncheckedMonomorphicElementAccess( HInstruction* load = BuildUncheckedMonomorphicElementAccess(
GetParameter(0), GetParameter(1), NULL, GetParameter(0), GetParameter(1), NULL,
casted_stub()->is_js_array(), casted_stub()->elements_kind(), casted_stub()->is_js_array(), casted_stub()->elements_kind(),
false, NEVER_RETURN_HOLE, STANDARD_STORE); LOAD, NEVER_RETURN_HOLE, STANDARD_STORE);
return load; return load;
} }
...@@ -599,7 +599,7 @@ HValue* CodeStubGraphBuilder<KeyedStoreFastElementStub>::BuildCodeStub() { ...@@ -599,7 +599,7 @@ HValue* CodeStubGraphBuilder<KeyedStoreFastElementStub>::BuildCodeStub() {
BuildUncheckedMonomorphicElementAccess( BuildUncheckedMonomorphicElementAccess(
GetParameter(0), GetParameter(1), GetParameter(2), GetParameter(0), GetParameter(1), GetParameter(2),
casted_stub()->is_js_array(), casted_stub()->elements_kind(), casted_stub()->is_js_array(), casted_stub()->elements_kind(),
true, NEVER_RETURN_HOLE, casted_stub()->store_mode()); STORE, NEVER_RETURN_HOLE, casted_stub()->store_mode());
return GetParameter(2); return GetParameter(2);
} }
...@@ -1096,7 +1096,7 @@ HValue* CodeStubGraphBuilder<ElementsTransitionAndStoreStub>::BuildCodeStub() { ...@@ -1096,7 +1096,7 @@ HValue* CodeStubGraphBuilder<ElementsTransitionAndStoreStub>::BuildCodeStub() {
BuildUncheckedMonomorphicElementAccess(object, key, value, BuildUncheckedMonomorphicElementAccess(object, key, value,
casted_stub()->is_jsarray(), casted_stub()->is_jsarray(),
casted_stub()->to_kind(), casted_stub()->to_kind(),
true, ALLOW_RETURN_HOLE, STORE, ALLOW_RETURN_HOLE,
casted_stub()->store_mode()); casted_stub()->store_mode());
} }
......
...@@ -4390,9 +4390,9 @@ HObjectAccess HObjectAccess::ForCellPayload(Isolate* isolate) { ...@@ -4390,9 +4390,9 @@ HObjectAccess HObjectAccess::ForCellPayload(Isolate* isolate) {
} }
void HObjectAccess::SetGVNFlags(HValue *instr, bool is_store) { void HObjectAccess::SetGVNFlags(HValue *instr, PropertyAccessType access_type) {
// set the appropriate GVN flags for a given load or store instruction // set the appropriate GVN flags for a given load or store instruction
if (is_store) { if (access_type == STORE) {
// track dominating allocations in order to eliminate write barriers // track dominating allocations in order to eliminate write barriers
instr->SetGVNFlag(kDependsOnNewSpacePromotion); instr->SetGVNFlag(kDependsOnNewSpacePromotion);
instr->SetFlag(HValue::kTrackSideEffectDominators); instr->SetFlag(HValue::kTrackSideEffectDominators);
...@@ -4404,35 +4404,35 @@ void HObjectAccess::SetGVNFlags(HValue *instr, bool is_store) { ...@@ -4404,35 +4404,35 @@ void HObjectAccess::SetGVNFlags(HValue *instr, bool is_store) {
switch (portion()) { switch (portion()) {
case kArrayLengths: case kArrayLengths:
instr->SetGVNFlag(is_store instr->SetGVNFlag(access_type == STORE
? kChangesArrayLengths : kDependsOnArrayLengths); ? kChangesArrayLengths : kDependsOnArrayLengths);
break; break;
case kStringLengths: case kStringLengths:
instr->SetGVNFlag(is_store instr->SetGVNFlag(access_type == STORE
? kChangesStringLengths : kDependsOnStringLengths); ? kChangesStringLengths : kDependsOnStringLengths);
break; break;
case kInobject: case kInobject:
instr->SetGVNFlag(is_store instr->SetGVNFlag(access_type == STORE
? kChangesInobjectFields : kDependsOnInobjectFields); ? kChangesInobjectFields : kDependsOnInobjectFields);
break; break;
case kDouble: case kDouble:
instr->SetGVNFlag(is_store instr->SetGVNFlag(access_type == STORE
? kChangesDoubleFields : kDependsOnDoubleFields); ? kChangesDoubleFields : kDependsOnDoubleFields);
break; break;
case kBackingStore: case kBackingStore:
instr->SetGVNFlag(is_store instr->SetGVNFlag(access_type == STORE
? kChangesBackingStoreFields : kDependsOnBackingStoreFields); ? kChangesBackingStoreFields : kDependsOnBackingStoreFields);
break; break;
case kElementsPointer: case kElementsPointer:
instr->SetGVNFlag(is_store instr->SetGVNFlag(access_type == STORE
? kChangesElementsPointer : kDependsOnElementsPointer); ? kChangesElementsPointer : kDependsOnElementsPointer);
break; break;
case kMaps: case kMaps:
instr->SetGVNFlag(is_store instr->SetGVNFlag(access_type == STORE
? kChangesMaps : kDependsOnMaps); ? kChangesMaps : kDependsOnMaps);
break; break;
case kExternalMemory: case kExternalMemory:
instr->SetGVNFlag(is_store instr->SetGVNFlag(access_type == STORE
? kChangesExternalMemory : kDependsOnExternalMemory); ? kChangesExternalMemory : kDependsOnExternalMemory);
break; break;
} }
......
...@@ -224,6 +224,9 @@ class LChunkBuilder; ...@@ -224,6 +224,9 @@ class LChunkBuilder;
} }
enum PropertyAccessType { LOAD, STORE };
class Range V8_FINAL : public ZoneObject { class Range V8_FINAL : public ZoneObject {
public: public:
Range() Range()
...@@ -5972,7 +5975,7 @@ class HObjectAccess V8_FINAL { ...@@ -5972,7 +5975,7 @@ class HObjectAccess V8_FINAL {
} }
protected: protected:
void SetGVNFlags(HValue *instr, bool is_store); void SetGVNFlags(HValue *instr, PropertyAccessType access_type);
private: private:
// internal use only; different parts of an object or array // internal use only; different parts of an object or array
...@@ -6096,7 +6099,7 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> { ...@@ -6096,7 +6099,7 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> {
} else { } else {
set_representation(Representation::Tagged()); set_representation(Representation::Tagged());
} }
access.SetGVNFlags(this, false); access.SetGVNFlags(this, LOAD);
} }
virtual bool IsDeletable() const V8_OVERRIDE { return true; } virtual bool IsDeletable() const V8_OVERRIDE { return true; }
...@@ -6531,7 +6534,7 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { ...@@ -6531,7 +6534,7 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> {
SetOperandAt(0, obj); SetOperandAt(0, obj);
SetOperandAt(1, val); SetOperandAt(1, val);
SetOperandAt(2, obj); SetOperandAt(2, obj);
access.SetGVNFlags(this, true); access.SetGVNFlags(this, STORE);
} }
HObjectAccess access_; HObjectAccess access_;
......
This diff is collapsed.
...@@ -1294,7 +1294,7 @@ class HGraphBuilder { ...@@ -1294,7 +1294,7 @@ class HGraphBuilder {
HValue* length, HValue* length,
HValue* key, HValue* key,
bool is_js_array, bool is_js_array,
bool is_store); PropertyAccessType access_type);
HValue* BuildCopyElementsOnWrite(HValue* object, HValue* BuildCopyElementsOnWrite(HValue* object,
HValue* elements, HValue* elements,
...@@ -1351,7 +1351,7 @@ class HGraphBuilder { ...@@ -1351,7 +1351,7 @@ class HGraphBuilder {
HValue* val, HValue* val,
bool is_js_array, bool is_js_array,
ElementsKind elements_kind, ElementsKind elements_kind,
bool is_store, PropertyAccessType access_type,
LoadKeyedHoleMode load_mode, LoadKeyedHoleMode load_mode,
KeyedAccessStoreMode store_mode); KeyedAccessStoreMode store_mode);
...@@ -1361,7 +1361,7 @@ class HGraphBuilder { ...@@ -1361,7 +1361,7 @@ class HGraphBuilder {
HValue* val, HValue* val,
HValue* dependency, HValue* dependency,
ElementsKind elements_kind, ElementsKind elements_kind,
bool is_store, PropertyAccessType access_type,
LoadKeyedHoleMode load_mode = NEVER_RETURN_HOLE); LoadKeyedHoleMode load_mode = NEVER_RETURN_HOLE);
HLoadNamedField* BuildLoadNamedField(HValue* object, HObjectAccess access); HLoadNamedField* BuildLoadNamedField(HValue* object, HObjectAccess access);
...@@ -2187,8 +2187,6 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor { ...@@ -2187,8 +2187,6 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor {
Type* ToType(Handle<Map> map) { return IC::MapToType<Type>(map, zone()); } Type* ToType(Handle<Map> map) { return IC::MapToType<Type>(map, zone()); }
private: private:
enum PropertyAccessType { LOAD, STORE };
// Helpers for flow graph construction. // Helpers for flow graph construction.
enum GlobalPropertyAccess { enum GlobalPropertyAccess {
kUseCell, kUseCell,
...@@ -2196,7 +2194,7 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor { ...@@ -2196,7 +2194,7 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor {
}; };
GlobalPropertyAccess LookupGlobalProperty(Variable* var, GlobalPropertyAccess LookupGlobalProperty(Variable* var,
LookupResult* lookup, LookupResult* lookup,
bool is_store); PropertyAccessType access_type);
void EnsureArgumentsArePushedForAccess(); void EnsureArgumentsArePushedForAccess();
bool TryArgumentsAccess(Property* expr); bool TryArgumentsAccess(Property* expr);
...@@ -2456,14 +2454,14 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor { ...@@ -2456,14 +2454,14 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor {
HValue* val, HValue* val,
HValue* dependency, HValue* dependency,
Handle<Map> map, Handle<Map> map,
bool is_store, PropertyAccessType access_type,
KeyedAccessStoreMode store_mode); KeyedAccessStoreMode store_mode);
HValue* HandlePolymorphicElementAccess(HValue* object, HValue* HandlePolymorphicElementAccess(HValue* object,
HValue* key, HValue* key,
HValue* val, HValue* val,
SmallMapList* maps, SmallMapList* maps,
bool is_store, PropertyAccessType access_type,
KeyedAccessStoreMode store_mode, KeyedAccessStoreMode store_mode,
bool* has_side_effects); bool* has_side_effects);
...@@ -2471,7 +2469,7 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor { ...@@ -2471,7 +2469,7 @@ class HOptimizedGraphBuilder : public HGraphBuilder, public AstVisitor {
HValue* key, HValue* key,
HValue* val, HValue* val,
Expression* expr, Expression* expr,
bool is_store, PropertyAccessType access_type,
bool* has_side_effects); bool* has_side_effects);
HInstruction* BuildNamedGeneric(PropertyAccessType access, HInstruction* BuildNamedGeneric(PropertyAccessType access,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment