Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: test/cctest/test-heap.cc

Issue 96783002: Allocation site pretenuring. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2172 matching lines...) Expand 10 before | Expand all | Expand 10 after
2183 2183
2184 Handle<JSObject> o = 2184 Handle<JSObject> o =
2185 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2185 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2186 2186
2187 CHECK(CcTest::heap()->InNewSpace(*o)); 2187 CHECK(CcTest::heap()->InNewSpace(*o));
2188 } 2188 }
2189 2189
2190 2190
2191 TEST(OptimizedPretenuringAllocationFolding) { 2191 TEST(OptimizedPretenuringAllocationFolding) {
2192 i::FLAG_allow_natives_syntax = true; 2192 i::FLAG_allow_natives_syntax = true;
2193 i::FLAG_allocation_site_pretenuring = false; 2193 i::FLAG_max_new_space_size = 2048;
2194 CcTest::InitializeVM(); 2194 CcTest::InitializeVM();
2195 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2195 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2196 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2196 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2197 v8::HandleScope scope(CcTest::isolate()); 2197 v8::HandleScope scope(CcTest::isolate());
2198 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true); 2198 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2199 2199
2200 v8::Local<v8::Value> res = CompileRun( 2200 v8::Local<v8::Value> res = CompileRun(
2201 "function DataObject() {" 2201 "function DataObject() {"
2202 " this.a = 1.1;" 2202 " this.a = 1.1;"
2203 " this.b = [{}];" 2203 " this.b = [{}];"
2204 " this.c = 1.2;" 2204 " this.c = 1.2;"
2205 " this.d = [{}];" 2205 " this.d = [{}];"
2206 " this.e = 1.3;" 2206 " this.e = 1.3;"
2207 " this.f = [{}];" 2207 " this.f = [{}];"
2208 "}" 2208 "}"
2209 "var number_elements = 20000;"
2210 "var elements = new Array();"
2209 "function f() {" 2211 "function f() {"
2210 " return new DataObject();" 2212 " for (var i = 0; i < 20000-1; i++) {"
2213 " elements[i] = new DataObject();"
2214 " }"
2215 " return new DataObject()"
2211 "};" 2216 "};"
2212 "f(); f(); f();" 2217 "f(); f(); f();"
2213 "%OptimizeFunctionOnNextCall(f);" 2218 "%OptimizeFunctionOnNextCall(f);"
2214 "f();"); 2219 "f();");
2215 2220
2216 Handle<JSObject> o = 2221 Handle<JSObject> o =
2217 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2222 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2218 2223
2219 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(0))); 2224 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(0)));
2220 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(1))); 2225 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(1)));
2221 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(2))); 2226 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(2)));
2222 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(3))); 2227 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(3)));
2223 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(4))); 2228 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(4)));
2224 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(5))); 2229 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(5)));
2225 } 2230 }
2226 2231
2227 2232
2228 TEST(OptimizedPretenuringAllocationFoldingBlocks) { 2233 TEST(OptimizedPretenuringAllocationFoldingBlocks) {
2229 i::FLAG_allow_natives_syntax = true; 2234 i::FLAG_allow_natives_syntax = true;
2230 i::FLAG_allocation_site_pretenuring = false; 2235 i::FLAG_max_new_space_size = 2048;
2231 CcTest::InitializeVM(); 2236 CcTest::InitializeVM();
2232 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2237 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2233 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2238 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2234 v8::HandleScope scope(CcTest::isolate()); 2239 v8::HandleScope scope(CcTest::isolate());
2235 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true); 2240 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2236 2241
2237 v8::Local<v8::Value> res = CompileRun( 2242 v8::Local<v8::Value> res = CompileRun(
2243 "var number_elements = 3000;"
2244 "var elements = new Array(number_elements);"
2238 "function DataObject() {" 2245 "function DataObject() {"
2239 " this.a = [{}];" 2246 " this.a = [{}];"
2240 " this.b = [{}];" 2247 " this.b = [{}];"
2241 " this.c = 1.1;" 2248 " this.c = 1.1;"
2242 " this.d = 1.2;" 2249 " this.d = 1.2;"
2243 " this.e = [{}];" 2250 " this.e = [{}];"
2244 " this.f = 1.3;" 2251 " this.f = 1.3;"
2245 "}" 2252 "}"
2246 "function f() {" 2253 "function f() {"
2247 " return new DataObject();" 2254 " for (var i = 0; i < number_elements; i++) {"
2255 " elements[i] = new DataObject();"
2256 " }"
2257 " return elements[number_elements - 1];"
2248 "};" 2258 "};"
2249 "f(); f(); f();" 2259 "f(); f(); f();"
2250 "%OptimizeFunctionOnNextCall(f);" 2260 "%OptimizeFunctionOnNextCall(f);"
2251 "f();"); 2261 "f();");
2252 2262
2253 Handle<JSObject> o = 2263 Handle<JSObject> o =
2254 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2264 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2255 2265
2256 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(0))); 2266 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(0)));
2257 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(1))); 2267 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(1)));
2258 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(2))); 2268 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(2)));
2259 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(3))); 2269 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(3)));
2260 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(4))); 2270 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(4)));
2261 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(5))); 2271 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(5)));
2262 } 2272 }
2263 2273
2264 2274
2265 TEST(OptimizedPretenuringObjectArrayLiterals) { 2275 TEST(OptimizedPretenuringObjectArrayLiterals) {
2266 i::FLAG_allow_natives_syntax = true; 2276 i::FLAG_allow_natives_syntax = true;
2267 i::FLAG_allocation_site_pretenuring = false; 2277 i::FLAG_max_new_space_size = 2048;
2268 CcTest::InitializeVM(); 2278 CcTest::InitializeVM();
2269 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2279 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2270 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2280 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2271 v8::HandleScope scope(CcTest::isolate()); 2281 v8::HandleScope scope(CcTest::isolate());
2272 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2273 2282
2274 v8::Local<v8::Value> res = CompileRun( 2283 v8::Local<v8::Value> res = CompileRun(
2284 "var number_elements = 20000;"
2285 "var elements = new Array(number_elements);"
2275 "function f() {" 2286 "function f() {"
2276 " var numbers = [{}, {}, {}];" 2287 " for (var i = 0; i < number_elements; i++) {"
2277 " return numbers;" 2288 " elements[i] = [{}, {}, {}];"
2289 " }"
2290 " return elements[number_elements - 1];"
2278 "};" 2291 "};"
2279 "f(); f(); f();" 2292 "f(); f(); f();"
2280 "%OptimizeFunctionOnNextCall(f);" 2293 "%OptimizeFunctionOnNextCall(f);"
2281 "f();"); 2294 "f();");
2282 2295
2283 Handle<JSObject> o = 2296 Handle<JSObject> o =
2284 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2297 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2285 2298
2286 CHECK(CcTest::heap()->InOldPointerSpace(o->elements())); 2299 CHECK(CcTest::heap()->InOldPointerSpace(o->elements()));
2287 CHECK(CcTest::heap()->InOldPointerSpace(*o)); 2300 CHECK(CcTest::heap()->InOldPointerSpace(*o));
2288 } 2301 }
2289 2302
2290 2303
2291 TEST(OptimizedPretenuringMixedInObjectProperties) { 2304 TEST(OptimizedPretenuringMixedInObjectProperties) {
2292 i::FLAG_allow_natives_syntax = true; 2305 i::FLAG_allow_natives_syntax = true;
2293 i::FLAG_allocation_site_pretenuring = false; 2306 i::FLAG_max_new_space_size = 2048;
2294 CcTest::InitializeVM(); 2307 CcTest::InitializeVM();
2295 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2308 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2296 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2309 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2297 v8::HandleScope scope(CcTest::isolate()); 2310 v8::HandleScope scope(CcTest::isolate());
2298 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2299 2311
2300 v8::Local<v8::Value> res = CompileRun( 2312 v8::Local<v8::Value> res = CompileRun(
2313 "var number_elements = 20000;"
2314 "var elements = new Array(number_elements);"
2301 "function f() {" 2315 "function f() {"
2302 " var numbers = {a: {c: 2.2, d: {}}, b: 1.1};" 2316 " for (var i = 0; i < number_elements; i++) {"
2303 " return numbers;" 2317 " elements[i] = {a: {c: 2.2, d: {}}, b: 1.1};"
2318 " }"
2319 " return elements[number_elements - 1];"
2304 "};" 2320 "};"
2305 "f(); f(); f();" 2321 "f(); f(); f();"
2306 "%OptimizeFunctionOnNextCall(f);" 2322 "%OptimizeFunctionOnNextCall(f);"
2307 "f();"); 2323 "f();");
2308 2324
2309 Handle<JSObject> o = 2325 Handle<JSObject> o =
2310 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2326 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2311 2327
2312 CHECK(CcTest::heap()->InOldPointerSpace(*o)); 2328 CHECK(CcTest::heap()->InOldPointerSpace(*o));
2313 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(0))); 2329 CHECK(CcTest::heap()->InOldPointerSpace(o->RawFastPropertyAt(0)));
2314 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(1))); 2330 CHECK(CcTest::heap()->InOldDataSpace(o->RawFastPropertyAt(1)));
2315 2331
2316 JSObject* inner_object = reinterpret_cast<JSObject*>(o->RawFastPropertyAt(0)); 2332 JSObject* inner_object = reinterpret_cast<JSObject*>(o->RawFastPropertyAt(0));
2317 CHECK(CcTest::heap()->InOldPointerSpace(inner_object)); 2333 CHECK(CcTest::heap()->InOldPointerSpace(inner_object));
2318 CHECK(CcTest::heap()->InOldDataSpace(inner_object->RawFastPropertyAt(0))); 2334 CHECK(CcTest::heap()->InOldDataSpace(inner_object->RawFastPropertyAt(0)));
2319 CHECK(CcTest::heap()->InOldPointerSpace(inner_object->RawFastPropertyAt(1))); 2335 CHECK(CcTest::heap()->InOldPointerSpace(inner_object->RawFastPropertyAt(1)));
2320 } 2336 }
2321 2337
2322 2338
2323 TEST(OptimizedPretenuringDoubleArrayProperties) { 2339 TEST(OptimizedPretenuringDoubleArrayProperties) {
2324 i::FLAG_allow_natives_syntax = true; 2340 i::FLAG_allow_natives_syntax = true;
2325 i::FLAG_allocation_site_pretenuring = false; 2341 i::FLAG_max_new_space_size = 2048;
2326 CcTest::InitializeVM(); 2342 CcTest::InitializeVM();
2327 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2343 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2328 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2344 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2329 v8::HandleScope scope(CcTest::isolate()); 2345 v8::HandleScope scope(CcTest::isolate());
2330 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2331 2346
2332 v8::Local<v8::Value> res = CompileRun( 2347 v8::Local<v8::Value> res = CompileRun(
2348 "var number_elements = 20000;"
2349 "var elements = new Array(number_elements);"
2333 "function f() {" 2350 "function f() {"
2334 " var numbers = {a: 1.1, b: 2.2};" 2351 " for (var i = 0; i < number_elements; i++) {"
2335 " return numbers;" 2352 " elements[i] = {a: 1.1, b: 2.2};"
2353 " }"
2354 " return elements[i - 1];"
2336 "};" 2355 "};"
2337 "f(); f(); f();" 2356 "f(); f(); f();"
2338 "%OptimizeFunctionOnNextCall(f);" 2357 "%OptimizeFunctionOnNextCall(f);"
2339 "f();"); 2358 "f();");
2340 2359
2341 Handle<JSObject> o = 2360 Handle<JSObject> o =
2342 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2361 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2343 2362
2344 CHECK(CcTest::heap()->InOldPointerSpace(*o)); 2363 CHECK(CcTest::heap()->InOldPointerSpace(*o));
2345 CHECK(CcTest::heap()->InOldDataSpace(o->properties())); 2364 CHECK(CcTest::heap()->InOldDataSpace(o->properties()));
2346 } 2365 }
2347 2366
2348 2367
2349 TEST(OptimizedPretenuringdoubleArrayLiterals) { 2368 TEST(OptimizedPretenuringdoubleArrayLiterals) {
2350 i::FLAG_allow_natives_syntax = true; 2369 i::FLAG_allow_natives_syntax = true;
2351 i::FLAG_allocation_site_pretenuring = false; 2370 i::FLAG_max_new_space_size = 2048;
2352 CcTest::InitializeVM(); 2371 CcTest::InitializeVM();
2353 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2372 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2354 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2373 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2355 v8::HandleScope scope(CcTest::isolate()); 2374 v8::HandleScope scope(CcTest::isolate());
2356 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2357 2375
2358 v8::Local<v8::Value> res = CompileRun( 2376 v8::Local<v8::Value> res = CompileRun(
2377 "var number_elements = 20000;"
2378 "var elements = new Array(number_elements);"
2359 "function f() {" 2379 "function f() {"
2360 " var numbers = [1.1, 2.2, 3.3];" 2380 " for (var i = 0; i < number_elements; i++) {"
2361 " return numbers;" 2381 " elements[i] = [1.1, 2.2, 3.3];"
2382 " }"
2383 " return elements[number_elements - 1];"
2362 "};" 2384 "};"
2363 "f(); f(); f();" 2385 "f(); f(); f();"
2364 "%OptimizeFunctionOnNextCall(f);" 2386 "%OptimizeFunctionOnNextCall(f);"
2365 "f();"); 2387 "f();");
2366 2388
2367 Handle<JSObject> o = 2389 Handle<JSObject> o =
2368 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2390 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2369 2391
2370 CHECK(CcTest::heap()->InOldDataSpace(o->elements())); 2392 CHECK(CcTest::heap()->InOldDataSpace(o->elements()));
2371 CHECK(CcTest::heap()->InOldPointerSpace(*o)); 2393 CHECK(CcTest::heap()->InOldPointerSpace(*o));
2372 } 2394 }
2373 2395
2374 2396
2375 TEST(OptimizedPretenuringNestedMixedArrayLiterals) { 2397 TEST(OptimizedPretenuringNestedMixedArrayLiterals) {
2376 i::FLAG_allow_natives_syntax = true; 2398 i::FLAG_allow_natives_syntax = true;
2377 i::FLAG_allocation_site_pretenuring = false; 2399 i::FLAG_max_new_space_size = 2048;
2378 CcTest::InitializeVM(); 2400 CcTest::InitializeVM();
2379 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2401 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2380 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2402 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2381 v8::HandleScope scope(CcTest::isolate()); 2403 v8::HandleScope scope(CcTest::isolate());
2382 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2383 2404
2384 v8::Local<v8::Value> res = CompileRun( 2405 v8::Local<v8::Value> res = CompileRun(
2406 "var number_elements = 20000;"
2407 "var elements = new Array(number_elements);"
2385 "function f() {" 2408 "function f() {"
2386 " var numbers = [[{}, {}, {}],[1.1, 2.2, 3.3]];" 2409 " for (var i = 0; i < number_elements; i++) {"
2387 " return numbers;" 2410 " elements[i] = [[{}, {}, {}], [1.1, 2.2, 3.3]];"
2411 " }"
2412 " return elements[number_elements - 1];"
2388 "};" 2413 "};"
2389 "f(); f(); f();" 2414 "f(); f(); f();"
2390 "%OptimizeFunctionOnNextCall(f);" 2415 "%OptimizeFunctionOnNextCall(f);"
2391 "f();"); 2416 "f();");
2392 2417
2393 v8::Local<v8::Value> int_array = v8::Object::Cast(*res)->Get(v8_str("0")); 2418 v8::Local<v8::Value> int_array = v8::Object::Cast(*res)->Get(v8_str("0"));
2394 Handle<JSObject> int_array_handle = 2419 Handle<JSObject> int_array_handle =
2395 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array)); 2420 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array));
2396 v8::Local<v8::Value> double_array = v8::Object::Cast(*res)->Get(v8_str("1")); 2421 v8::Local<v8::Value> double_array = v8::Object::Cast(*res)->Get(v8_str("1"));
2397 Handle<JSObject> double_array_handle = 2422 Handle<JSObject> double_array_handle =
2398 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(double_array)); 2423 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(double_array));
2399 2424
2400 Handle<JSObject> o = 2425 Handle<JSObject> o =
2401 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2426 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2402 CHECK(CcTest::heap()->InOldPointerSpace(*o)); 2427 CHECK(CcTest::heap()->InOldPointerSpace(*o));
2403 CHECK(CcTest::heap()->InOldPointerSpace(*int_array_handle)); 2428 CHECK(CcTest::heap()->InOldPointerSpace(*int_array_handle));
2404 CHECK(CcTest::heap()->InOldPointerSpace(int_array_handle->elements())); 2429 CHECK(CcTest::heap()->InOldPointerSpace(int_array_handle->elements()));
2405 CHECK(CcTest::heap()->InOldPointerSpace(*double_array_handle)); 2430 CHECK(CcTest::heap()->InOldPointerSpace(*double_array_handle));
2406 CHECK(CcTest::heap()->InOldDataSpace(double_array_handle->elements())); 2431 CHECK(CcTest::heap()->InOldDataSpace(double_array_handle->elements()));
2407 } 2432 }
2408 2433
2409 2434
2410 TEST(OptimizedPretenuringNestedObjectLiterals) { 2435 TEST(OptimizedPretenuringNestedObjectLiterals) {
2411 i::FLAG_allow_natives_syntax = true; 2436 i::FLAG_allow_natives_syntax = true;
2412 i::FLAG_allocation_site_pretenuring = false; 2437 i::FLAG_max_new_space_size = 2048;
2413 CcTest::InitializeVM(); 2438 CcTest::InitializeVM();
2414 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2439 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2415 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2440 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2416 v8::HandleScope scope(CcTest::isolate()); 2441 v8::HandleScope scope(CcTest::isolate());
2417 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2418 2442
2419 v8::Local<v8::Value> res = CompileRun( 2443 v8::Local<v8::Value> res = CompileRun(
2444 "var number_elements = 20000;"
2445 "var elements = new Array(number_elements);"
2420 "function f() {" 2446 "function f() {"
2421 " var numbers = [[{}, {}, {}],[{}, {}, {}]];" 2447 " for (var i = 0; i < number_elements; i++) {"
2422 " return numbers;" 2448 " elements[i] = [[{}, {}, {}],[{}, {}, {}]];"
2449 " }"
2450 " return elements[number_elements - 1];"
2423 "};" 2451 "};"
2424 "f(); f(); f();" 2452 "f(); f(); f();"
2425 "%OptimizeFunctionOnNextCall(f);" 2453 "%OptimizeFunctionOnNextCall(f);"
2426 "f();"); 2454 "f();");
2427 2455
2428 v8::Local<v8::Value> int_array_1 = v8::Object::Cast(*res)->Get(v8_str("0")); 2456 v8::Local<v8::Value> int_array_1 = v8::Object::Cast(*res)->Get(v8_str("0"));
2429 Handle<JSObject> int_array_handle_1 = 2457 Handle<JSObject> int_array_handle_1 =
2430 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array_1)); 2458 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array_1));
2431 v8::Local<v8::Value> int_array_2 = v8::Object::Cast(*res)->Get(v8_str("1")); 2459 v8::Local<v8::Value> int_array_2 = v8::Object::Cast(*res)->Get(v8_str("1"));
2432 Handle<JSObject> int_array_handle_2 = 2460 Handle<JSObject> int_array_handle_2 =
2433 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array_2)); 2461 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array_2));
2434 2462
2435 Handle<JSObject> o = 2463 Handle<JSObject> o =
2436 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2464 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2437 CHECK(CcTest::heap()->InOldPointerSpace(*o)); 2465 CHECK(CcTest::heap()->InOldPointerSpace(*o));
2438 CHECK(CcTest::heap()->InOldPointerSpace(*int_array_handle_1)); 2466 CHECK(CcTest::heap()->InOldPointerSpace(*int_array_handle_1));
2439 CHECK(CcTest::heap()->InOldPointerSpace(int_array_handle_1->elements())); 2467 CHECK(CcTest::heap()->InOldPointerSpace(int_array_handle_1->elements()));
2440 CHECK(CcTest::heap()->InOldPointerSpace(*int_array_handle_2)); 2468 CHECK(CcTest::heap()->InOldPointerSpace(*int_array_handle_2));
2441 CHECK(CcTest::heap()->InOldPointerSpace(int_array_handle_2->elements())); 2469 CHECK(CcTest::heap()->InOldPointerSpace(int_array_handle_2->elements()));
2442 } 2470 }
2443 2471
2444 2472
2445 TEST(OptimizedPretenuringNestedDoubleLiterals) { 2473 TEST(OptimizedPretenuringNestedDoubleLiterals) {
2446 i::FLAG_allow_natives_syntax = true; 2474 i::FLAG_allow_natives_syntax = true;
2447 i::FLAG_allocation_site_pretenuring = false; 2475 i::FLAG_max_new_space_size = 2048;
2448 CcTest::InitializeVM(); 2476 CcTest::InitializeVM();
2449 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return; 2477 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2450 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2478 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2451 v8::HandleScope scope(CcTest::isolate()); 2479 v8::HandleScope scope(CcTest::isolate());
2452 CcTest::heap()->SetNewSpaceHighPromotionModeActive(true);
2453 2480
2454 v8::Local<v8::Value> res = CompileRun( 2481 v8::Local<v8::Value> res = CompileRun(
2482 "var number_elements = 20000;"
2483 "var elements = new Array(number_elements);"
2455 "function f() {" 2484 "function f() {"
2456 " var numbers = [[1.1, 1.2, 1.3],[2.1, 2.2, 2.3]];" 2485 " for (var i = 0; i < number_elements; i++) {"
2457 " return numbers;" 2486 " elements[i] = [[1.1, 1.2, 1.3],[2.1, 2.2, 2.3]];"
2487 " }"
2488 " return elements[number_elements - 1];"
2458 "};" 2489 "};"
2459 "f(); f(); f();" 2490 "f(); f(); f();"
2460 "%OptimizeFunctionOnNextCall(f);" 2491 "%OptimizeFunctionOnNextCall(f);"
2461 "f();"); 2492 "f();");
2462 2493
2463 v8::Local<v8::Value> double_array_1 = 2494 v8::Local<v8::Value> double_array_1 =
2464 v8::Object::Cast(*res)->Get(v8_str("0")); 2495 v8::Object::Cast(*res)->Get(v8_str("0"));
2465 Handle<JSObject> double_array_handle_1 = 2496 Handle<JSObject> double_array_handle_1 =
2466 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(double_array_1)); 2497 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(double_array_1));
2467 v8::Local<v8::Value> double_array_2 = 2498 v8::Local<v8::Value> double_array_2 =
(...skipping 1158 matching lines...) Expand 10 before | Expand all | Expand 10 after
3626 for (int i = 0; i < 4; i++) { 3657 for (int i = 0; i < 4; i++) {
3627 heap->CollectAllGarbage(false); 3658 heap->CollectAllGarbage(false);
3628 } 3659 }
3629 3660
3630 // The site still exists because of our global handle, but the code is no 3661 // The site still exists because of our global handle, but the code is no
3631 // longer referred to by dependent_code(). 3662 // longer referred to by dependent_code().
3632 DependentCode::GroupStartIndexes starts(site->dependent_code()); 3663 DependentCode::GroupStartIndexes starts(site->dependent_code());
3633 int index = starts.at(DependentCode::kAllocationSiteTransitionChangedGroup); 3664 int index = starts.at(DependentCode::kAllocationSiteTransitionChangedGroup);
3634 CHECK(!(site->dependent_code()->is_code_at(index))); 3665 CHECK(!(site->dependent_code()->is_code_at(index)));
3635 } 3666 }
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698