Make LCodeGen::RegisterDependentCodeForEmbeddedMaps platform independent.
BUG= R=hpayer@chromium.org Review URL: https://chromiumcodereview.appspot.com/99053002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18231 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
7e540e6b8a
commit
a06c84354c
@ -84,9 +84,7 @@ void LCodeGen::FinishCode(Handle<Code> code) {
|
||||
ASSERT(is_done());
|
||||
code->set_stack_slots(GetStackSlotCount());
|
||||
code->set_safepoint_table_offset(safepoints_.GetCodeOffset());
|
||||
if (FLAG_weak_embedded_maps_in_optimized_code) {
|
||||
RegisterDependentCodeForEmbeddedMaps(code);
|
||||
}
|
||||
RegisterDependentCodeForEmbeddedMaps(code);
|
||||
PopulateDeoptimizationData(code);
|
||||
info()->CommitDependencies(code);
|
||||
}
|
||||
@ -887,36 +885,6 @@ void LCodeGen::DeoptimizeIf(Condition condition,
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::RegisterDependentCodeForEmbeddedMaps(Handle<Code> code) {
|
||||
ZoneList<Handle<Map> > maps(1, zone());
|
||||
ZoneList<Handle<JSObject> > objects(1, zone());
|
||||
int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
|
||||
for (RelocIterator it(*code, mode_mask); !it.done(); it.next()) {
|
||||
if (Code::IsWeakEmbeddedObject(code->kind(), it.rinfo()->target_object())) {
|
||||
if (it.rinfo()->target_object()->IsMap()) {
|
||||
Handle<Map> map(Map::cast(it.rinfo()->target_object()));
|
||||
maps.Add(map, zone());
|
||||
} else if (it.rinfo()->target_object()->IsJSObject()) {
|
||||
Handle<JSObject> object(JSObject::cast(it.rinfo()->target_object()));
|
||||
objects.Add(object, zone());
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef VERIFY_HEAP
|
||||
// This disables verification of weak embedded objects after full GC.
|
||||
// AddDependentCode can cause a GC, which would observe the state where
|
||||
// this code is not yet in the depended code lists of the embedded maps.
|
||||
NoWeakObjectVerificationScope disable_verification_of_embedded_objects;
|
||||
#endif
|
||||
for (int i = 0; i < maps.length(); i++) {
|
||||
maps.at(i)->AddDependentCode(DependentCode::kWeaklyEmbeddedGroup, code);
|
||||
}
|
||||
for (int i = 0; i < objects.length(); i++) {
|
||||
AddWeakObjectToCodeDependency(isolate()->heap(), objects.at(i), code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) {
|
||||
int length = deoptimizations_.length();
|
||||
if (length == 0) return;
|
||||
|
@ -267,7 +267,6 @@ class LCodeGen: public LCodeGenBase {
|
||||
bool is_uint32,
|
||||
int* object_index_pointer,
|
||||
int* dematerialized_index_pointer);
|
||||
void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
|
||||
void PopulateDeoptimizationData(Handle<Code> code);
|
||||
int DefineDeoptimizationLiteral(Handle<Object> literal);
|
||||
|
||||
|
@ -103,9 +103,7 @@ void LCodeGen::FinishCode(Handle<Code> code) {
|
||||
ASSERT(is_done());
|
||||
code->set_stack_slots(GetStackSlotCount());
|
||||
code->set_safepoint_table_offset(safepoints_.GetCodeOffset());
|
||||
if (FLAG_weak_embedded_maps_in_optimized_code) {
|
||||
RegisterDependentCodeForEmbeddedMaps(code);
|
||||
}
|
||||
RegisterDependentCodeForEmbeddedMaps(code);
|
||||
PopulateDeoptimizationData(code);
|
||||
if (!info()->IsStub()) {
|
||||
Deoptimizer::EnsureRelocSpaceForLazyDeoptimization(code);
|
||||
@ -1162,36 +1160,6 @@ void LCodeGen::DeoptimizeIf(Condition cc,
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::RegisterDependentCodeForEmbeddedMaps(Handle<Code> code) {
|
||||
ZoneList<Handle<Map> > maps(1, zone());
|
||||
ZoneList<Handle<JSObject> > objects(1, zone());
|
||||
int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
|
||||
for (RelocIterator it(*code, mode_mask); !it.done(); it.next()) {
|
||||
if (Code::IsWeakEmbeddedObject(code->kind(), it.rinfo()->target_object())) {
|
||||
if (it.rinfo()->target_object()->IsMap()) {
|
||||
Handle<Map> map(Map::cast(it.rinfo()->target_object()));
|
||||
maps.Add(map, zone());
|
||||
} else if (it.rinfo()->target_object()->IsJSObject()) {
|
||||
Handle<JSObject> object(JSObject::cast(it.rinfo()->target_object()));
|
||||
objects.Add(object, zone());
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef VERIFY_HEAP
|
||||
// This disables verification of weak embedded objects after full GC.
|
||||
// AddDependentCode can cause a GC, which would observe the state where
|
||||
// this code is not yet in the depended code lists of the embedded maps.
|
||||
NoWeakObjectVerificationScope disable_verification_of_embedded_objects;
|
||||
#endif
|
||||
for (int i = 0; i < maps.length(); i++) {
|
||||
maps.at(i)->AddDependentCode(DependentCode::kWeaklyEmbeddedGroup, code);
|
||||
}
|
||||
for (int i = 0; i < objects.length(); i++) {
|
||||
AddWeakObjectToCodeDependency(isolate()->heap(), objects.at(i), code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) {
|
||||
int length = deoptimizations_.length();
|
||||
if (length == 0) return;
|
||||
|
@ -282,7 +282,6 @@ class LCodeGen: public LCodeGenBase {
|
||||
bool is_uint32,
|
||||
int* object_index_pointer,
|
||||
int* dematerialized_index_pointer);
|
||||
void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
|
||||
void PopulateDeoptimizationData(Handle<Code> code);
|
||||
int DefineDeoptimizationLiteral(Handle<Object> literal);
|
||||
|
||||
|
@ -147,4 +147,34 @@ int LCodeGenBase::GetNextEmittedBlock() const {
|
||||
}
|
||||
|
||||
|
||||
void LCodeGenBase::RegisterDependentCodeForEmbeddedMaps(Handle<Code> code) {
|
||||
ZoneList<Handle<Map> > maps(1, zone());
|
||||
ZoneList<Handle<JSObject> > objects(1, zone());
|
||||
int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
|
||||
for (RelocIterator it(*code, mode_mask); !it.done(); it.next()) {
|
||||
if (Code::IsWeakEmbeddedObject(code->kind(), it.rinfo()->target_object())) {
|
||||
if (it.rinfo()->target_object()->IsMap()) {
|
||||
Handle<Map> map(Map::cast(it.rinfo()->target_object()));
|
||||
maps.Add(map, zone());
|
||||
} else if (it.rinfo()->target_object()->IsJSObject()) {
|
||||
Handle<JSObject> object(JSObject::cast(it.rinfo()->target_object()));
|
||||
objects.Add(object, zone());
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef VERIFY_HEAP
|
||||
// This disables verification of weak embedded objects after full GC.
|
||||
// AddDependentCode can cause a GC, which would observe the state where
|
||||
// this code is not yet in the depended code lists of the embedded maps.
|
||||
NoWeakObjectVerificationScope disable_verification_of_embedded_objects;
|
||||
#endif
|
||||
for (int i = 0; i < maps.length(); i++) {
|
||||
maps.at(i)->AddDependentCode(DependentCode::kWeaklyEmbeddedGroup, code);
|
||||
}
|
||||
for (int i = 0; i < objects.length(); i++) {
|
||||
AddWeakObjectToCodeDependency(isolate()->heap(), objects.at(i), code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -66,6 +66,8 @@ class LCodeGenBase BASE_EMBEDDED {
|
||||
|
||||
int GetNextEmittedBlock() const;
|
||||
|
||||
void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
|
||||
|
||||
protected:
|
||||
enum Status {
|
||||
UNUSED,
|
||||
|
@ -84,9 +84,7 @@ void LCodeGen::FinishCode(Handle<Code> code) {
|
||||
ASSERT(is_done());
|
||||
code->set_stack_slots(GetStackSlotCount());
|
||||
code->set_safepoint_table_offset(safepoints_.GetCodeOffset());
|
||||
if (FLAG_weak_embedded_maps_in_optimized_code) {
|
||||
RegisterDependentCodeForEmbeddedMaps(code);
|
||||
}
|
||||
RegisterDependentCodeForEmbeddedMaps(code);
|
||||
PopulateDeoptimizationData(code);
|
||||
info()->CommitDependencies(code);
|
||||
}
|
||||
@ -847,36 +845,6 @@ void LCodeGen::DeoptimizeIf(Condition condition,
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::RegisterDependentCodeForEmbeddedMaps(Handle<Code> code) {
|
||||
ZoneList<Handle<Map> > maps(1, zone());
|
||||
ZoneList<Handle<JSObject> > objects(1, zone());
|
||||
int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
|
||||
for (RelocIterator it(*code, mode_mask); !it.done(); it.next()) {
|
||||
if (Code::IsWeakEmbeddedObject(code->kind(), it.rinfo()->target_object())) {
|
||||
if (it.rinfo()->target_object()->IsMap()) {
|
||||
Handle<Map> map(Map::cast(it.rinfo()->target_object()));
|
||||
maps.Add(map, zone());
|
||||
} else if (it.rinfo()->target_object()->IsJSObject()) {
|
||||
Handle<JSObject> object(JSObject::cast(it.rinfo()->target_object()));
|
||||
objects.Add(object, zone());
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef VERIFY_HEAP
|
||||
// This disables verification of weak embedded objects after full GC.
|
||||
// AddDependentCode can cause a GC, which would observe the state where
|
||||
// this code is not yet in the depended code lists of the embedded maps.
|
||||
NoWeakObjectVerificationScope disable_verification_of_embedded_objects;
|
||||
#endif
|
||||
for (int i = 0; i < maps.length(); i++) {
|
||||
maps.at(i)->AddDependentCode(DependentCode::kWeaklyEmbeddedGroup, code);
|
||||
}
|
||||
for (int i = 0; i < objects.length(); i++) {
|
||||
AddWeakObjectToCodeDependency(isolate()->heap(), objects.at(i), code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) {
|
||||
int length = deoptimizations_.length();
|
||||
if (length == 0) return;
|
||||
|
@ -271,7 +271,6 @@ class LCodeGen: public LCodeGenBase {
|
||||
bool is_uint32,
|
||||
int* object_index_pointer,
|
||||
int* dematerialized_index_pointer);
|
||||
void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
|
||||
void PopulateDeoptimizationData(Handle<Code> code);
|
||||
int DefineDeoptimizationLiteral(Handle<Object> literal);
|
||||
|
||||
|
@ -777,36 +777,6 @@ void LCodeGen::DeoptimizeIf(Condition cc,
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::RegisterDependentCodeForEmbeddedMaps(Handle<Code> code) {
|
||||
ZoneList<Handle<Map> > maps(1, zone());
|
||||
ZoneList<Handle<JSObject> > objects(1, zone());
|
||||
int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
|
||||
for (RelocIterator it(*code, mode_mask); !it.done(); it.next()) {
|
||||
if (Code::IsWeakEmbeddedObject(code->kind(), it.rinfo()->target_object())) {
|
||||
if (it.rinfo()->target_object()->IsMap()) {
|
||||
Handle<Map> map(Map::cast(it.rinfo()->target_object()));
|
||||
maps.Add(map, zone());
|
||||
} else if (it.rinfo()->target_object()->IsJSObject()) {
|
||||
Handle<JSObject> object(JSObject::cast(it.rinfo()->target_object()));
|
||||
objects.Add(object, zone());
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef VERIFY_HEAP
|
||||
// This disables verification of weak embedded objects after full GC.
|
||||
// AddDependentCode can cause a GC, which would observe the state where
|
||||
// this code is not yet in the depended code lists of the embedded maps.
|
||||
NoWeakObjectVerificationScope disable_verification_of_embedded_objects;
|
||||
#endif
|
||||
for (int i = 0; i < maps.length(); i++) {
|
||||
maps.at(i)->AddDependentCode(DependentCode::kWeaklyEmbeddedGroup, code);
|
||||
}
|
||||
for (int i = 0; i < objects.length(); i++) {
|
||||
AddWeakObjectToCodeDependency(isolate()->heap(), objects.at(i), code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) {
|
||||
int length = deoptimizations_.length();
|
||||
if (length == 0) return;
|
||||
|
@ -238,7 +238,6 @@ class LCodeGen: public LCodeGenBase {
|
||||
bool is_uint32,
|
||||
int* object_index_pointer,
|
||||
int* dematerialized_index_pointer);
|
||||
void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
|
||||
void PopulateDeoptimizationData(Handle<Code> code);
|
||||
int DefineDeoptimizationLiteral(Handle<Object> literal);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user