OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 | 5 // Flags: --allow-natives-syntax |
6 | 6 |
7 function f(a, b, mode) { | 7 (function () { |
8 if (mode) { | 8 function f(a, b, mode) { |
9 return a === b; | 9 if (mode) { |
10 } else { | 10 return a === b; |
11 return a === b; | 11 } else { |
| 12 return a === b; |
| 13 } |
12 } | 14 } |
13 } | |
14 | 15 |
15 // Gather type feedback for both branches. | 16 // Gather type feedback for both branches. |
16 f("a", "b", 1); | 17 f("a", "b", 1); |
17 f("c", "d", 1); | 18 f("c", "d", 1); |
18 f("a", "b", 0); | 19 f("a", "b", 0); |
19 f("c", "d", 0); | 20 f("c", "d", 0); |
20 | 21 |
21 function g(mode) { | 22 function g(mode) { |
22 var x = 1e10 | 0; | 23 var x = 1e10 | 0; |
23 f(x, x, mode); | 24 f(x, x, mode); |
24 } | 25 } |
25 | 26 |
26 // Gather type feedback for g, but only on one branch for f. | 27 // Gather type feedback for g, but only on one branch for f. |
27 g(1); | 28 g(1); |
28 g(1); | 29 g(1); |
29 %OptimizeFunctionOnNextCall(g); | 30 %OptimizeFunctionOnNextCall(g); |
30 // Optimize g, which inlines f. Both branches in f will see the constant. | 31 // Optimize g, which inlines f. Both branches in f will see the constant. |
31 g(0); | 32 g(0); |
| 33 })(); |
| 34 |
| 35 (function () { |
| 36 function f(a, b, mode) { |
| 37 if (mode) { |
| 38 return a === b; |
| 39 } else { |
| 40 return a === b; |
| 41 } |
| 42 } |
| 43 |
| 44 // Gather type feedback for both branches. |
| 45 f({ a : 1}, {b : 1}, 1); |
| 46 f({ c : 1}, {d : 1}, 1); |
| 47 f({ a : 1}, {c : 1}, 0); |
| 48 f({ b : 1}, {d : 1}, 0); |
| 49 |
| 50 function g(mode) { |
| 51 var x = 1e10 | 0; |
| 52 f(x, x, mode); |
| 53 } |
| 54 |
| 55 // Gather type feedback for g, but only on one branch for f. |
| 56 g(1); |
| 57 g(1); |
| 58 %OptimizeFunctionOnNextCall(g); |
| 59 // Optimize g, which inlines f. Both branches in f will see the constant. |
| 60 g(0); |
| 61 })(); |
OLD | NEW |