Index: test/cctest/test-heap.cc |
diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc |
index 074432288d86ec4efce74ecececdf15d64e4ea2f..fb4963de90808968a9ffb48f68319cb9a982bcfb 100644 |
--- a/test/cctest/test-heap.cc |
+++ b/test/cctest/test-heap.cc |
@@ -2115,6 +2115,78 @@ TEST(OptimizedAllocationAlwaysInNewSpace) { |
} |
+TEST(OptimizedPretenuringAllocationFolding) { |
+ i::FLAG_allow_natives_syntax = true; |
+ CcTest::InitializeVM(); |
+ if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; |
+ if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
+ v8::HandleScope scope(CcTest::isolate()); |
+ HEAP->SetNewSpaceHighPromotionModeActive(true); |
+ |
+ v8::Local<v8::Value> res = CompileRun( |
+ "function DataObject() {" |
+ " this.a = 1.1;" |
+ " this.b = [{}];" |
+ " this.c = 1.2;" |
+ " this.d = [{}];" |
+ " this.e = 1.3;" |
+ " this.f = [{}];" |
+ "}" |
+ "function f() {" |
+ " return new DataObject();" |
+ "};" |
+ "f(); f(); f();" |
+ "%OptimizeFunctionOnNextCall(f);" |
+ "f();"); |
+ |
+ Handle<JSObject> o = |
+ v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); |
+ |
+ CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(0))); |
+ CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(1))); |
+ CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2))); |
+ CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(3))); |
+ CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(4))); |
+ CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(5))); |
+} |
+ |
+ |
+TEST(OptimizedPretenuringAllocationFoldingBlocks) { |
+ i::FLAG_allow_natives_syntax = true; |
+ CcTest::InitializeVM(); |
+ if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; |
+ if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
+ v8::HandleScope scope(CcTest::isolate()); |
+ HEAP->SetNewSpaceHighPromotionModeActive(true); |
+ |
+ v8::Local<v8::Value> res = CompileRun( |
+ "function DataObject() {" |
+ " this.a = [{}];" |
+ " this.b = [{}];" |
+ " this.c = 1.1;" |
+ " this.d = 1.2;" |
+ " this.e = [{}];" |
+ " this.f = 1.3;" |
+ "}" |
+ "function f() {" |
+ " return new DataObject();" |
+ "};" |
+ "f(); f(); f();" |
+ "%OptimizeFunctionOnNextCall(f);" |
+ "f();"); |
+ |
+ Handle<JSObject> o = |
+ v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); |
+ |
+ CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(0))); |
+ CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(1))); |
+ CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2))); |
+ CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(3))); |
+ CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(4))); |
+ CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(5))); |
+} |
+ |
+ |
TEST(OptimizedPretenuringObjectArrayLiterals) { |
i::FLAG_allow_natives_syntax = true; |
CcTest::InitializeVM(); |