Revision: 12388
Author: [email protected]
Date: Mon Aug 27 09:08:27 2012
Log: Revert r12342 "Flush monomorphic ICs on context disposal instead
of context exit." because of canary channel crashes.
BUG=144230
[email protected]
Review URL: https://chromiumcodereview.appspot.com/10868068
http://code.google.com/p/v8/source/detail?r=12388
Modified:
/branches/bleeding_edge/src/heap.cc
/branches/bleeding_edge/src/heap.h
/branches/bleeding_edge/src/objects-visiting-inl.h
/branches/bleeding_edge/test/cctest/test-api.cc
/branches/bleeding_edge/test/cctest/test-heap.cc
/branches/bleeding_edge/test/mjsunit/debug-script.js
/branches/bleeding_edge/test/mjsunit/elements-transition-hoisting.js
=======================================
--- /branches/bleeding_edge/src/heap.cc Mon Aug 27 06:47:34 2012
+++ /branches/bleeding_edge/src/heap.cc Mon Aug 27 09:08:27 2012
@@ -97,7 +97,6 @@
linear_allocation_scope_depth_(0),
contexts_disposed_(0),
global_ic_age_(0),
- flush_monomorphic_ics_(false),
scan_on_scavenge_pages_(0),
new_space_(this),
old_pointer_space_(NULL),
@@ -993,7 +992,7 @@
contexts_disposed_ = 0;
- flush_monomorphic_ics_ = false;
+ isolate_->set_context_exit_happened(false);
}
=======================================
--- /branches/bleeding_edge/src/heap.h Mon Aug 27 02:40:26 2012
+++ /branches/bleeding_edge/src/heap.h Mon Aug 27 09:08:27 2012
@@ -1079,10 +1079,7 @@
void EnsureHeapIsIterable();
// Notify the heap that a context has been disposed.
- int NotifyContextDisposed() {
- flush_monomorphic_ics_ = true;
- return ++contexts_disposed_;
- }
+ int NotifyContextDisposed() { return ++contexts_disposed_; }
// Utility to invoke the scavenger. This is needed in test code to
// ensure correct callback for weak global handles.
@@ -1611,8 +1608,6 @@
void AgeInlineCaches() {
global_ic_age_ = (global_ic_age_ + 1) &
SharedFunctionInfo::ICAgeBits::kMax;
}
-
- bool flush_monomorphic_ics() { return flush_monomorphic_ics_; }
intptr_t amount_of_external_allocated_memory() {
return amount_of_external_allocated_memory_;
@@ -1699,8 +1694,6 @@
int global_ic_age_;
- bool flush_monomorphic_ics_;
-
int scan_on_scavenge_pages_;
#if defined(V8_TARGET_ARCH_X64)
=======================================
--- /branches/bleeding_edge/src/objects-visiting-inl.h Mon Aug 20 05:09:03
2012
+++ /branches/bleeding_edge/src/objects-visiting-inl.h Mon Aug 27 09:08:27
2012
@@ -217,8 +217,9 @@
// when they might be keeping a Context alive, or when the heap is about
// to be serialized.
if (FLAG_cleanup_code_caches_at_gc && target->is_inline_cache_stub()
- && (target->ic_state() == MEGAMORPHIC ||
heap->flush_monomorphic_ics() ||
- Serializer::enabled() || target->ic_age() !=
heap->global_ic_age())) {
+ && (target->ic_state() == MEGAMORPHIC || Serializer::enabled() ||
+ heap->isolate()->context_exit_happened() ||
+ target->ic_age() != heap->global_ic_age())) {
IC::Clear(rinfo->pc());
target = Code::GetCodeFromTargetAddress(rinfo->target_address());
}
=======================================
--- /branches/bleeding_edge/test/cctest/test-api.cc Thu Aug 23 04:15:06 2012
+++ /branches/bleeding_edge/test/cctest/test-api.cc Mon Aug 27 09:08:27 2012
@@ -1,5 +1,4 @@
// Copyright 2012 the V8 project authors. All rights reserved.
-
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
@@ -10813,24 +10812,18 @@
{ v8::HandleScope scope;
LocalContext context;
}
- // Fire context disposed notification to force clearing monomorphic
ICs.
- v8::V8::ContextDisposedNotification();
CheckSurvivingGlobalObjectsCount(0);
{ v8::HandleScope scope;
LocalContext context;
v8_compile("Date")->Run();
}
- // Fire context disposed notification to force clearing monomorphic
ICs.
- v8::V8::ContextDisposedNotification();
CheckSurvivingGlobalObjectsCount(0);
{ v8::HandleScope scope;
LocalContext context;
v8_compile("/aaa/")->Run();
}
- // Fire context disposed notification to force clearing monomorphic
ICs.
- v8::V8::ContextDisposedNotification();
CheckSurvivingGlobalObjectsCount(0);
{ v8::HandleScope scope;
@@ -10839,8 +10832,6 @@
LocalContext context(&extensions);
v8_compile("gc();")->Run();
}
- // Fire context disposed notification to force clearing monomorphic
ICs.
- v8::V8::ContextDisposedNotification();
CheckSurvivingGlobalObjectsCount(0);
}
}
@@ -14672,7 +14663,6 @@
context->Exit();
}
context.Dispose();
- v8::V8::ContextDisposedNotification();
for (gc_count = 1; gc_count < 10; gc_count++) {
other_context->Enter();
CompileRun(source_exception);
=======================================
--- /branches/bleeding_edge/test/cctest/test-heap.cc Mon Aug 20 05:09:03
2012
+++ /branches/bleeding_edge/test/cctest/test-heap.cc Mon Aug 27 09:08:27
2012
@@ -4,7 +4,6 @@
#include "v8.h"
-#include "compilation-cache.h"
#include "execution.h"
#include "factory.h"
#include "macro-assembler.h"
@@ -1066,7 +1065,6 @@
}
// Mark compact handles the weak references.
- ISOLATE->compilation_cache()->Clear();
HEAP->CollectAllGarbage(Heap::kNoGCFlags);
CHECK_EQ(opt ? 4 : 0, CountOptimizedUserFunctions(ctx[i]));
@@ -1397,7 +1395,6 @@
ctx2->Exit();
ctx1->Exit();
ctx1.Dispose();
- v8::V8::ContextDisposedNotification();
}
HEAP->CollectAllAvailableGarbage();
CHECK_EQ(2, NumberOfGlobalObjects());
@@ -1435,7 +1432,6 @@
ctx2->Exit();
ctx1->Exit();
ctx1.Dispose();
- v8::V8::ContextDisposedNotification();
}
HEAP->CollectAllAvailableGarbage();
CHECK_EQ(2, NumberOfGlobalObjects());
@@ -1471,7 +1467,6 @@
ctx2->Exit();
ctx1->Exit();
ctx1.Dispose();
- v8::V8::ContextDisposedNotification();
}
HEAP->CollectAllAvailableGarbage();
CHECK_EQ(2, NumberOfGlobalObjects());
@@ -1511,7 +1506,6 @@
ctx2->Exit();
ctx1->Exit();
ctx1.Dispose();
- v8::V8::ContextDisposedNotification();
}
HEAP->CollectAllAvailableGarbage();
CHECK_EQ(2, NumberOfGlobalObjects());
@@ -2106,6 +2100,8 @@
Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC);
CHECK(ic_before->ic_state() == MONOMORPHIC);
+ // Fire context dispose notification.
+ v8::V8::ContextDisposedNotification();
SimulateIncrementalMarking();
HEAP->CollectAllGarbage(Heap::kNoGCFlags);
=======================================
--- /branches/bleeding_edge/test/mjsunit/debug-script.js Mon Aug 20
05:09:03 2012
+++ /branches/bleeding_edge/test/mjsunit/debug-script.js Mon Aug 27
09:08:27 2012
@@ -25,10 +25,9 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// Flags: --expose-debug-as debug --expose-gc --noparallel-recompilation
-// Flags: --send-idle-notification
+// Flags: --expose-debug-as debug --expose-gc --noparallel-recompilation
// Get the Debug object exposed from the debug context global object.
-Debug = debug.Debug;
+Debug = debug.Debug
Date();
RegExp();
=======================================
--- /branches/bleeding_edge/test/mjsunit/elements-transition-hoisting.js
Mon Aug 20 05:09:03 2012
+++ /branches/bleeding_edge/test/mjsunit/elements-transition-hoisting.js
Mon Aug 27 09:08:27 2012
@@ -25,7 +25,8 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// Flags: --allow-natives-syntax --smi-only-arrays
--noparallel-recompilation
+// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc
+// Flags: --noparallel-recompilation
// Ensure that ElementsKind transitions in various situations are hoisted
(or
// not hoisted) correctly, don't change the semantics programs and don't
trigger
@@ -38,6 +39,11 @@
} else {
print("Tests do NOT include smi-only arrays.");
}
+
+// Force existing ICs from previous stress runs to be flushed, otherwise
the
+// assumptions in this test about when deoptimizations get triggered are
not
+// valid.
+gc();
if (support_smi_only_arrays) {
// Make sure that a simple elements array transitions inside a loop
before
@@ -60,7 +66,6 @@
testDoubleConversion4(new Array(5));
testDoubleConversion4(new Array(5));
assertTrue(2 != %GetOptimizationStatus(testDoubleConversion4));
- %ClearFunctionTypeFeedback(testDoubleConversion4);
// Make sure that non-element related map checks that are not preceded by
// transitions in a loop still get hoisted in a way that doesn't
generate a
@@ -86,7 +91,6 @@
testExactMapHoisting(new Array(5));
testExactMapHoisting(new Array(5));
assertTrue(2 != %GetOptimizationStatus(testExactMapHoisting));
- %ClearFunctionTypeFeedback(testExactMapHoisting);
// Make sure that non-element related map checks do NOT get hoisted if
they
// depend on an elements transition before them and it's not possible to
hoist
@@ -118,7 +122,6 @@
testExactMapHoisting2(new Array(5));
// Temporarily disabled - see bug 2176.
// assertTrue(2 != %GetOptimizationStatus(testExactMapHoisting2));
- %ClearFunctionTypeFeedback(testExactMapHoisting2);
// Make sure that non-element related map checks do get hoisted if they
use
// the transitioned map for the check and all transitions that they
depend
@@ -147,7 +150,6 @@
testExactMapHoisting3(new Array(5));
testExactMapHoisting3(new Array(5));
assertTrue(2 != %GetOptimizationStatus(testExactMapHoisting3));
- %ClearFunctionTypeFeedback(testExactMapHoisting3);
function testDominatingTransitionHoisting1(a) {
var object = new Object();
@@ -170,7 +172,6 @@
testDominatingTransitionHoisting1(new Array(5));
testDominatingTransitionHoisting1(new Array(5));
assertTrue(2 != %GetOptimizationStatus(testDominatingTransitionHoisting1));
- %ClearFunctionTypeFeedback(testDominatingTransitionHoisting1);
function testHoistingWithSideEffect(a) {
var object = new Object();
@@ -190,9 +191,8 @@
testHoistingWithSideEffect(new Array(5));
testHoistingWithSideEffect(new Array(5));
assertTrue(2 != %GetOptimizationStatus(testHoistingWithSideEffect));
- %ClearFunctionTypeFeedback(testHoistingWithSideEffect);
- function testStraightLineDupeElimination(a,b,c,d,e,f) {
+ function testStraightLineDupeElinination(a,b,c,d,e,f) {
var count = 3;
do {
assertTrue(true);
@@ -205,29 +205,28 @@
} while (--count > 3);
}
- testStraightLineDupeElimination(new Array(0, 0, 0, 0, 0),0,0,0,0,.5);
- testStraightLineDupeElimination(new Array(0, 0, 0, 0, 0),0,0,0,.5,0);
- testStraightLineDupeElimination(new Array(0, 0, 0, 0, 0),0,0,.5,0,0);
- testStraightLineDupeElimination(new Array(0, 0, 0, 0, 0),0,.5,0,0,0);
- testStraightLineDupeElimination(new Array(0, 0, 0, 0, 0),.5,0,0,0,0);
- testStraightLineDupeElimination(new Array(.1,.1,.1,.1,.1),0,0,0,0,.5);
- testStraightLineDupeElimination(new Array(.1,.1,.1,.1,.1),0,0,0,.5,0);
- testStraightLineDupeElimination(new Array(.1,.1,.1,.1,.1),0,0,.5,0,0);
- testStraightLineDupeElimination(new Array(.1,.1,.1,.1,.1),0,.5,0,0,0);
- testStraightLineDupeElimination(new Array(.1,.1,.1,.1,.1),.5,0,0,0,0);
- testStraightLineDupeElimination(new Array(5),.5,0,0,0,0);
- testStraightLineDupeElimination(new Array(5),0,.5,0,0,0);
- testStraightLineDupeElimination(new Array(5),0,0,.5,0,0);
- testStraightLineDupeElimination(new Array(5),0,0,0,.5,0);
- testStraightLineDupeElimination(new Array(5),0,0,0,0,.5);
- testStraightLineDupeElimination(new Array(5),.5,0,0,0,0);
- testStraightLineDupeElimination(new Array(5),0,.5,0,0,0);
- testStraightLineDupeElimination(new Array(5),0,0,.5,0,0);
- testStraightLineDupeElimination(new Array(5),0,0,0,.5,0);
- testStraightLineDupeElimination(new Array(5),0,0,0,0,.5);
- %OptimizeFunctionOnNextCall(testStraightLineDupeElimination);
- testStraightLineDupeElimination(new Array(5));
- testStraightLineDupeElimination(new Array(5));
- assertTrue(2 != %GetOptimizationStatus(testStraightLineDupeElimination));
- %ClearFunctionTypeFeedback(testStraightLineDupeElimination);
+ testStraightLineDupeElinination(new Array(0, 0, 0, 0, 0),0,0,0,0,.5);
+ testStraightLineDupeElinination(new Array(0, 0, 0, 0, 0),0,0,0,.5,0);
+ testStraightLineDupeElinination(new Array(0, 0, 0, 0, 0),0,0,.5,0,0);
+ testStraightLineDupeElinination(new Array(0, 0, 0, 0, 0),0,.5,0,0,0);
+ testStraightLineDupeElinination(new Array(0, 0, 0, 0, 0),.5,0,0,0,0);
+ testStraightLineDupeElinination(new Array(.1,.1,.1,.1,.1),0,0,0,0,.5);
+ testStraightLineDupeElinination(new Array(.1,.1,.1,.1,.1),0,0,0,.5,0);
+ testStraightLineDupeElinination(new Array(.1,.1,.1,.1,.1),0,0,.5,0,0);
+ testStraightLineDupeElinination(new Array(.1,.1,.1,.1,.1),0,.5,0,0,0);
+ testStraightLineDupeElinination(new Array(.1,.1,.1,.1,.1),.5,0,0,0,0);
+ testStraightLineDupeElinination(new Array(5),.5,0,0,0,0);
+ testStraightLineDupeElinination(new Array(5),0,.5,0,0,0);
+ testStraightLineDupeElinination(new Array(5),0,0,.5,0,0);
+ testStraightLineDupeElinination(new Array(5),0,0,0,.5,0);
+ testStraightLineDupeElinination(new Array(5),0,0,0,0,.5);
+ testStraightLineDupeElinination(new Array(5),.5,0,0,0,0);
+ testStraightLineDupeElinination(new Array(5),0,.5,0,0,0);
+ testStraightLineDupeElinination(new Array(5),0,0,.5,0,0);
+ testStraightLineDupeElinination(new Array(5),0,0,0,.5,0);
+ testStraightLineDupeElinination(new Array(5),0,0,0,0,.5);
+ %OptimizeFunctionOnNextCall(testStraightLineDupeElinination);
+ testStraightLineDupeElinination(new Array(5));
+ testStraightLineDupeElinination(new Array(5));
+ assertTrue(2 != %GetOptimizationStatus(testStraightLineDupeElinination));
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev