[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / elide-new-object-dag-then-exit.js
1 //@ skip if $architecture == "x86"
2
3 function sumOfArithSeries(limit) {
4     return limit * (limit + 1) / 2;
5 }
6
7 var n = 10000000;
8
9 function bar() { }
10
11 function verify(q, i) {
12     if (q.f == q.g)
13         throw "Error: q.f == q.g";
14     if (q.f.f != q.g.f)
15         throw "Error: q.f.f != q.g.f";
16     if (q.f.f.f != i)
17         throw "Error: q.f.f.f != i";
18 }
19
20 function foo() {
21     var result = 0;
22     for (var i = 0; i < n; ++i) {
23         var leaf = {f:i};
24         var o = {f:leaf};
25         var p = {f:leaf};
26         var q = {f:o, g:p};
27         result += q.f.f.f;
28         if (i >= n - 100) {
29             // We want the materialization to happen in the exit. So, before calling the thing that
30             // causes the materialization, we call bar(). We've never profiled this call at the time
31             // of FTL compilation, so this should be an exit.
32             bar();
33             verify(q, i);
34         }
35     }
36     return result;
37 }
38
39 noInline(foo);
40 noInline(verify);
41 noInline(bar);
42
43 var result = foo();
44 if (result != sumOfArithSeries(n - 1))
45     throw "Error: bad result: " + result;