Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(438)

Unified Diff: src/hydrogen-instructions.cc

Issue 112913002: Split up HLoadNamedField and HStoreNamedField. Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/hydrogen-instructions.h ('k') | src/ia32/lithium-codegen-ia32.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/hydrogen-instructions.cc
diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
index e7ad219964b3946b35e81dbd76011d7e8ff2133f..c984f0fe625fa7a619c199bbacd3b8dc02e02c0b 100644
--- a/src/hydrogen-instructions.cc
+++ b/src/hydrogen-instructions.cc
@@ -1542,6 +1542,11 @@ void HCheckInstanceType::GetCheckMaskAndTag(uint8_t* mask, uint8_t* tag) {
}
+static bool IsMapAccess(HObjectAccess access) {
+ return access.IsInobject() && access.offset() == JSObject::kMapOffset;
+}
+
+
void HCheckMaps::HandleSideEffectDominator(GVNFlag side_effect,
HValue* dominator) {
ASSERT(side_effect == kChangesMaps);
@@ -1550,8 +1555,12 @@ void HCheckMaps::HandleSideEffectDominator(GVNFlag side_effect,
// for which the map is known.
if (HasNoUses() && dominator->IsStoreNamedField()) {
HStoreNamedField* store = HStoreNamedField::cast(dominator);
- if (!store->has_transition() || store->object() != value()) return;
- HConstant* transition = HConstant::cast(store->transition());
+ if (!IsMapAccess(store->access()) ||
+ store->object() != value() ||
+ !store->value()->IsConstant()) {
+ return;
+ }
+ HConstant* transition = HConstant::cast(store->value());
if (map_set_.Contains(transition->GetUnique())) {
DeleteAndReplaceWith(NULL);
return;
@@ -3258,9 +3267,6 @@ void HStoreNamedField::PrintDataTo(StringStream* stream) {
if (NeedsWriteBarrier()) {
stream->Add(" (write-barrier)");
}
- if (has_transition()) {
- stream->Add(" (transition map %p)", *transition_map());
- }
}
@@ -4300,6 +4306,11 @@ HObjectAccess HObjectAccess::ForJSArrayOffset(int offset) {
}
+HObjectAccess HObjectAccess::ForBackingStore() {
+ return HObjectAccess(kBackingStorePointer, JSObject::kPropertiesOffset);
+}
+
+
HObjectAccess HObjectAccess::ForBackingStoreOffset(int offset,
Representation representation) {
ASSERT(offset >= 0);
@@ -4377,6 +4388,10 @@ void HObjectAccess::SetGVNFlags(HValue *instr, bool is_store) {
instr->SetGVNFlag(is_store
? kChangesBackingStoreFields : kDependsOnBackingStoreFields);
break;
+ case kBackingStorePointer:
+ instr->SetGVNFlag(is_store
+ ? kChangesBackingStore : kDependsOnBackingStore);
+ break;
case kElementsPointer:
instr->SetGVNFlag(is_store
? kChangesElementsPointer : kDependsOnElementsPointer);
@@ -4420,6 +4435,12 @@ void HObjectAccess::PrintTo(StringStream* stream) {
}
stream->Add("[backing-store]");
break;
+ case kBackingStorePointer:
+ if (!name_.is_null()) {
+ stream->Add(String::cast(*name_)->ToCString().get());
+ }
+ stream->Add("[backing-store-pointer]");
+ break;
case kExternalMemory:
stream->Add("[external-memory]");
break;
« no previous file with comments | « src/hydrogen-instructions.h ('k') | src/ia32/lithium-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698