1e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
2e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// Redistribution and use in source and binary forms, with or without
3e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// modification, are permitted provided that the following conditions are
4e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// met:
5e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//
6e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//     * Redistributions of source code must retain the above copyright
7e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//       notice, this list of conditions and the following disclaimer.
8e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//     * Redistributions in binary form must reproduce the above
9e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//       copyright notice, this list of conditions and the following
10e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//       disclaimer in the documentation and/or other materials provided
11e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//       with the distribution.
12e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//     * Neither the name of Google Inc. nor the names of its
13e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//       contributors may be used to endorse or promote products derived
14e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//       from this software without specific prior written permission.
15e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//
16e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
28e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// Flags: --allow-natives-syntax --nodead-code-elimination
29e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// Flags: --nofold-constants --nouse-gvn
30e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
31e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// Create a function to get a long series of removable simulates.
32e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// f() {
33e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//   var _0 = <random>, _1 = <random>, ... _1000 = <random>,
34e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//   _1001 = <random var> + <random var>,
35e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//   _1002 = <random var> + <random var>,
36e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//   ...
37e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//   _99999 = <random var> + <random var>,
38e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//   x = 1;
39e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org//   return _0;
40e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// }
41e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
42e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvar seed = 1;
43e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
44e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgfunction rand() {
45e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  seed = seed * 171 % 1337 + 17;
46e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  return (seed % 1000) / 1000;
47e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
48e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
49e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgfunction randi(max) {
50e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  seed = seed * 131 % 1773 + 13;
51e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  return seed % max;
52e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
53e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
54e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgfunction varname(i) {
55e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  return "_" + i;
56e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
57e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
58e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvar source = "var ";
59e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
60e94b5ff1e1e95fb2c8ef6bce66ce8533786d9792bmeurer@chromium.orgfor (var i = 0; i < 750; i++) {
61e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  source += [varname(i), "=", rand(), ","].join("");
62e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
63e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
64e94b5ff1e1e95fb2c8ef6bce66ce8533786d9792bmeurer@chromium.orgfor (var i = 750; i < 3000; i++) {
65e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  source += [varname(i), "=",
66e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org             varname(randi(i)), "+",
67e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org             varname(randi(i)), ","].join("");
68e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
69e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
70e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgsource += "x=1; return _0;"
71e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvar f = new Function(source);
72e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
73e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgf();
74e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org%OptimizeFunctionOnNextCall(f);
75e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgf();
76