osr-infinite.js 1.54 KB
Newer Older
1 2 3 4
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5
// Flags: --use-osr --allow-natives-syntax
6 7 8 9 10

var global_counter = 0;

function thrower() {
  var x = global_counter++;
11
  if (x == 5)  %OptimizeOsr(1);
12 13
  if (x == 10) throw "terminate";
}
14
%PrepareFunctionForOptimization(thrower);
15 16 17 18 19 20 21 22 23 24 25 26 27 28

%NeverOptimizeFunction(thrower);  // Don't want to inline the thrower.
%NeverOptimizeFunction(test);     // Don't want to inline the func into test.

function test(func) {
  for (var i = 0; i < 3; i++) {
    global_counter = 0;
    assertThrows(func);
  }
}

function n1() {
  while (true) thrower();
}
29
%PrepareFunctionForOptimization(n1);
30 31 32 33

function n2() {
  while (true) while (true) thrower();
}
34
%PrepareFunctionForOptimization(n2);
35 36 37 38

function n3() {
  while (true) while (true) while (true) thrower();
}
39
%PrepareFunctionForOptimization(n3);
40 41 42 43

function n4() {
  while (true) while (true) while (true) while (true) thrower();
}
44
%PrepareFunctionForOptimization(n4);
45 46 47 48 49 50 51

function b1(a) {
  while (true) {
    thrower();
    if (a) break
  }
}
52
%PrepareFunctionForOptimization(b1);
53 54 55 56 57 58 59 60 61 62


function b2(a) {
  while (true) {
    while (true) {
      thrower();
      if (a) break
    }
  }
}
63
%PrepareFunctionForOptimization(b2);
64 65 66 67 68 69 70 71 72 73 74 75 76


function b3(a) {
  while (true) {
    while (true) {
      while (true) {
        thrower();
        if (a) break
      }
      if (a) break
    }
  }
}
77
%PrepareFunctionForOptimization(b3);
78 79 80 81 82 83 84 85 86


test(n1);
test(n2);
test(n3);
test(n4);
test(b1);
test(b2);
test(b3);