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

Unified Diff: src/hydrogen-instructions.h

Issue 23241027: Avoid setting / depending on flags when transitioning, and when fields are known to be constant. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix size. Created 7 years, 4 months 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
Index: src/hydrogen-instructions.h
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
index d5b1c75ebf8b7f87bffd705e7c3a2dce999229ed..115264022fdff9bf96e61369598b6a03af7be106 100644
--- a/src/hydrogen-instructions.h
+++ b/src/hydrogen-instructions.h
@@ -5420,6 +5420,11 @@ class HStoreContextSlot V8_FINAL : public HTemplateInstruction<2> {
// array elements pointer, etc, but not accesses to array elements themselves.
class HObjectAccess V8_FINAL {
public:
+ // Indicates whether the field is initialized while transitioning, or also
+ // mutable afterwards. Transitioning stores only initialize new fields rather
+ // than changing existing fields, so they are marked as CONSTANT.
+ enum FieldType { MUTABLE, CONSTANT };
+
inline bool IsInobject() const {
return portion() != kBackingStore && portion() != kExternalMemory;
}
@@ -5444,8 +5449,10 @@ class HObjectAccess V8_FINAL {
return name_;
}
- inline HObjectAccess WithRepresentation(Representation representation) {
- return HObjectAccess(portion(), offset(), representation, name());
+ inline HObjectAccess WithRepresentation(Representation representation,
+ FieldType field_type = MUTABLE) {
+ return HObjectAccess(
+ portion(), offset(), representation, name(), field_type);
}
static HObjectAccess ForHeapNumberValue() {
@@ -5566,10 +5573,12 @@ class HObjectAccess V8_FINAL {
HObjectAccess(Portion portion, int offset,
Representation representation = Representation::Tagged(),
- Handle<String> name = Handle<String>::null())
+ Handle<String> name = Handle<String>::null(),
+ FieldType field_type = MUTABLE)
: value_(PortionField::encode(portion) |
- RepresentationField::encode(representation.kind()) |
- OffsetField::encode(offset)),
+ RepresentationField::encode(representation.kind()) |
+ FieldTypeField::encode(field_type) |
+ OffsetField::encode(offset)),
name_(name) {
// assert that the fields decode correctly
ASSERT(this->offset() == offset);
@@ -5579,7 +5588,8 @@ class HObjectAccess V8_FINAL {
class PortionField : public BitField<Portion, 0, 3> {};
class RepresentationField : public BitField<Representation::Kind, 3, 3> {};
- class OffsetField : public BitField<int, 6, 26> {};
+ class FieldTypeField : public BitField<FieldType, 6, 1> {};
+ class OffsetField : public BitField<int, 7, 25> {};
uint32_t value_; // encodes portion, representation, and offset
Handle<String> name_;
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | src/hydrogen-instructions.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698