| OLD | NEW | 
|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5  // Flags: --allow-natives-syntax --noverify-heap --noenable-slow-asserts | 5  // Flags: --allow-natives-syntax --noverify-heap --noenable-slow-asserts | 
| 6 | 6 | 
| 7  // --noverify-heap and --noenable-slow-asserts are set because the test is too | 7  // --noverify-heap and --noenable-slow-asserts are set because the test is too | 
| 8  // slow with it on. | 8  // slow with it on. | 
| 9 | 9 | 
| 10  // Ensure that keyed stores work, and optimized functions learn if the | 10  // Ensure that keyed stores work, and optimized functions learn if the | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 54   } | 54   } | 
| 55 | 55 | 
| 56   // The KeyedStoreIC will learn GROW_MODE. | 56   // The KeyedStoreIC will learn GROW_MODE. | 
| 57   foo2(a, 10); | 57   foo2(a, 10); | 
| 58   foo2(a, 12); | 58   foo2(a, 12); | 
| 59   foo2(a, 31); | 59   foo2(a, 31); | 
| 60   %OptimizeFunctionOnNextCall(foo2); | 60   %OptimizeFunctionOnNextCall(foo2); | 
| 61   foo2(a, 40); | 61   foo2(a, 40); | 
| 62 | 62 | 
| 63   // This test is way too slow without crankshaft. | 63   // This test is way too slow without crankshaft. | 
| 64   if (4 != %GetOptimizationStatus(foo2)) { | 64   var opt_status = %GetOptimizationStatus(foo2); | 
|  | 65   if ((opt_status & V8OptimizationStatus.kNeverOptimize) === 0) { | 
| 65     assertOptimized(foo2); | 66     assertOptimized(foo2); | 
| 66     assertTrue(%HasFastSmiElements(a)); | 67     assertTrue(%HasFastSmiElements(a)); | 
| 67 | 68 | 
| 68     // Grow a large array into large object space through the keyed store | 69     // Grow a large array into large object space through the keyed store | 
| 69     // without deoptimizing. Grow by 10s. If we set elements too sparsely, the | 70     // without deoptimizing. Grow by 10s. If we set elements too sparsely, the | 
| 70     // array will convert to dictionary mode. | 71     // array will convert to dictionary mode. | 
| 71     a = new Array(99999); | 72     a = new Array(99999); | 
| 72     assertTrue(%HasFastSmiElements(a)); | 73     assertTrue(%HasFastSmiElements(a)); | 
| 73     for (var i = 0; i < 263000; i += 10) { | 74     for (var i = 0; i < 263000; i += 10) { | 
| 74       foo2(a, i); | 75       foo2(a, i); | 
| 75     } | 76     } | 
| 76 | 77 | 
| 77     // Verify that we are over 1 page in size, and foo2 remains optimized. | 78     // Verify that we are over 1 page in size, and foo2 remains optimized. | 
| 78     // This means we've smoothly transitioned to allocating in large object | 79     // This means we've smoothly transitioned to allocating in large object | 
| 79     // space. | 80     // space. | 
| 80     assertTrue(%HasFastSmiElements(a)); | 81     assertTrue(%HasFastSmiElements(a)); | 
| 81     assertTrue(a.length * 4 > (1024 * 1024)); | 82     assertTrue(a.length * 4 > (1024 * 1024)); | 
| 82     assertOptimized(foo2); | 83     assertOptimized(foo2); | 
| 83   } | 84   } | 
| 84 | 85 | 
| 85   %ClearFunctionTypeFeedback(foo2); | 86   %ClearFunctionTypeFeedback(foo2); | 
| 86 })(); | 87 })(); | 
| OLD | NEW | 
|---|