summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/compiler/osr-infinite.js
blob: 51b3a3e871d92719dd4574cb1f8d8d3fb9f10467 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// 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.

// Flags: --use-osr --allow-natives-syntax

var global_counter = 0;

function thrower() {
  var x = global_counter++;
  if (x == 5)  %OptimizeOsr(1);
  if (x == 10) throw "terminate";
}
%PrepareFunctionForOptimization(thrower);

%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;
    %PrepareFunctionForOptimization(func);
    assertThrows(func);
  }
}

function n1() {
  while (true) thrower();
}
%PrepareFunctionForOptimization(n1);

function n2() {
  while (true) while (true) thrower();
}
%PrepareFunctionForOptimization(n2);

function n3() {
  while (true) while (true) while (true) thrower();
}
%PrepareFunctionForOptimization(n3);

function n4() {
  while (true) while (true) while (true) while (true) thrower();
}
%PrepareFunctionForOptimization(n4);

function b1(a) {
  while (true) {
    thrower();
    if (a) break
  }
}
%PrepareFunctionForOptimization(b1);


function b2(a) {
  while (true) {
    while (true) {
      thrower();
      if (a) break
    }
  }
}
%PrepareFunctionForOptimization(b2);


function b3(a) {
  while (true) {
    while (true) {
      while (true) {
        thrower();
        if (a) break
      }
      if (a) break
    }
  }
}
%PrepareFunctionForOptimization(b3);


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