Reviewers: Jakob,

Message:
As discussed offline, regression test will come tomorrow.

Description:
Clear optimized code map during incremental marking.

[email protected]

Committed: http://code.google.com/p/v8/source/detail?r=13195

Please review this at https://codereview.chromium.org/11458011/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files:
  M src/objects-inl.h
  M src/objects-visiting-inl.h
  M src/objects.h
  M src/objects.cc


Index: src/objects-inl.h
diff --git a/src/objects-inl.h b/src/objects-inl.h
index b25af33c77a59d14f2d92a40b422297242c9cc90..2d265ec214ad2553e49bb4a8d2317cfa65d98474 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -4279,11 +4279,10 @@ BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_cache, kDontCache)

 void SharedFunctionInfo::BeforeVisitingPointers() {
   if (IsInobjectSlackTrackingInProgress()) DetachInitialMap();
+}
+

-  // Flush optimized code map on major GC.
-  // Note: we may experiment with rebuilding it or retaining entries
-  // which should survive as we iterate through optimized functions
-  // anyway.
+void SharedFunctionInfo::ClearOptimizedCodeMap() {
   set_optimized_code_map(Smi::FromInt(0));
 }

Index: src/objects-visiting-inl.h
diff --git a/src/objects-visiting-inl.h b/src/objects-visiting-inl.h
index 4a9dab5caaa6f67803c1529fc6f45d5dfe9949aa..925b2562f292558687716cc6be8c0b618d1f7f04 100644
--- a/src/objects-visiting-inl.h
+++ b/src/objects-visiting-inl.h
@@ -299,6 +299,13 @@ void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfo(
   if (shared->ic_age() != heap->global_ic_age()) {
     shared->ResetForNewContext(heap->global_ic_age());
   }
+  if (FLAG_cache_optimized_code) {
+    // Flush optimized code map on major GC.
+    // TODO(mstarzinger): We may experiment with rebuilding it or with
+    // retaining entries which should survive as we iterate through
+    // optimized functions anyway.
+    shared->ClearOptimizedCodeMap();
+  }
   MarkCompactCollector* collector = heap->mark_compact_collector();
   if (collector->is_code_flushing_enabled()) {
     if (IsFlushable(heap, shared)) {
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index f2397f58e15ac73972a482e2665837bcefe805ab..d562c51d7b97e4153fc7a5adc48d40e76a6735d0 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -8066,11 +8066,6 @@ bool SharedFunctionInfo::CompileLazy(Handle<SharedFunctionInfo> shared,
 }


-void SharedFunctionInfo::ClearOptimizedCodeMap() {
-  set_optimized_code_map(Smi::FromInt(0));
-}
-
-
 void SharedFunctionInfo::AddToOptimizedCodeMap(
     Handle<SharedFunctionInfo> shared,
     Handle<Context> native_context,
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index aa9b0aea2680fb35df0047051ff723c30da179f9..6a1542280d020fa59b6abfca431361c5f573b3cf 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -5444,7 +5444,7 @@ class SharedFunctionInfo: public HeapObject {
   void InstallFromOptimizedCodeMap(JSFunction* function, int index);

   // Clear optimized code map.
-  void ClearOptimizedCodeMap();
+  inline void ClearOptimizedCodeMap();

   // Add a new entry to the optimized code map.
   static void AddToOptimizedCodeMap(Handle<SharedFunctionInfo> shared,


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to