OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/double.h" | 8 #include "src/double.h" |
9 #include "src/factory.h" | 9 #include "src/factory.h" |
10 #include "src/hydrogen-infer-representation.h" | 10 #include "src/hydrogen-infer-representation.h" |
(...skipping 4585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4596 return HObjectAccess(kInobject, offset, representation, name, false, true); | 4596 return HObjectAccess(kInobject, offset, representation, name, false, true); |
4597 } else { | 4597 } else { |
4598 // Non-negative property indices are in the properties array. | 4598 // Non-negative property indices are in the properties array. |
4599 int offset = (index * kPointerSize) + FixedArray::kHeaderSize; | 4599 int offset = (index * kPointerSize) + FixedArray::kHeaderSize; |
4600 return HObjectAccess(kBackingStore, offset, representation, name, | 4600 return HObjectAccess(kBackingStore, offset, representation, name, |
4601 false, false); | 4601 false, false); |
4602 } | 4602 } |
4603 } | 4603 } |
4604 | 4604 |
4605 | 4605 |
4606 HObjectAccess HObjectAccess::ForCellPayload(Isolate* isolate) { | |
4607 return HObjectAccess(kInobject, Cell::kValueOffset, Representation::Tagged(), | |
4608 isolate->factory()->cell_value_string()); | |
4609 } | |
4610 | |
4611 | |
4612 void HObjectAccess::SetGVNFlags(HValue *instr, PropertyAccessType access_type) { | 4606 void HObjectAccess::SetGVNFlags(HValue *instr, PropertyAccessType access_type) { |
4613 // set the appropriate GVN flags for a given load or store instruction | 4607 // set the appropriate GVN flags for a given load or store instruction |
4614 if (access_type == STORE) { | 4608 if (access_type == STORE) { |
4615 // track dominating allocations in order to eliminate write barriers | 4609 // track dominating allocations in order to eliminate write barriers |
4616 instr->SetDependsOnFlag(::v8::internal::kNewSpacePromotion); | 4610 instr->SetDependsOnFlag(::v8::internal::kNewSpacePromotion); |
4617 instr->SetFlag(HValue::kTrackSideEffectDominators); | 4611 instr->SetFlag(HValue::kTrackSideEffectDominators); |
4618 } else { | 4612 } else { |
4619 // try to GVN loads, but don't hoist above map changes | 4613 // try to GVN loads, but don't hoist above map changes |
4620 instr->SetFlag(HValue::kUseGVN); | 4614 instr->SetFlag(HValue::kUseGVN); |
4621 instr->SetDependsOnFlag(::v8::internal::kMaps); | 4615 instr->SetDependsOnFlag(::v8::internal::kMaps); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4711 break; | 4705 break; |
4712 case HObjectAccess::kExternalMemory: | 4706 case HObjectAccess::kExternalMemory: |
4713 os << "[external-memory]"; | 4707 os << "[external-memory]"; |
4714 break; | 4708 break; |
4715 } | 4709 } |
4716 | 4710 |
4717 return os << "@" << access.offset(); | 4711 return os << "@" << access.offset(); |
4718 } | 4712 } |
4719 | 4713 |
4720 } } // namespace v8::internal | 4714 } } // namespace v8::internal |
OLD | NEW |