Home | History | Annotate | Download | only in regress
      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
      3 // found in the LICENSE file.
      4 
      5 // Flags: --allow-natives-syntax
      6 
      7 (function () {
      8   function f(a, b, mode) {
      9     if (mode) {
     10       return a === b;
     11     } else {
     12       return a === b;
     13     }
     14   }
     15 
     16   // Gather type feedback for both branches.
     17   f("a", "b", 1);
     18   f("c", "d", 1);
     19   f("a", "b", 0);
     20   f("c", "d", 0);
     21 
     22   function g(mode) {
     23     var x = 1e10 | 0;
     24     f(x, x, mode);
     25   }
     26 
     27   // Gather type feedback for g, but only on one branch for f.
     28   g(1);
     29   g(1);
     30   %OptimizeFunctionOnNextCall(g);
     31   // Optimize g, which inlines f. Both branches in f will see the constant.
     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 })();
     62