1865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
2865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
3865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// found in the LICENSE file.
4865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org
5865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// Flags: --allow-natives-syntax
6865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org
7865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org"use strict";
8865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgfunction f1(d) {
9865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org  return 1 + f2(1, f3(d), d);
10865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org}
11865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org
12865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgfunction f2(v0, v1, v2) { return v1; }
13865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org
14865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgfunction f3(d) {
15865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org  if (d) %DeoptimizeFunction(f1);
16865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org  return 2;
17865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org}
18865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org
19865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org%NeverOptimizeFunction(f3);
20865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org
21865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgf1(false);
22865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgf1(false);
23865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org%OptimizeFunctionOnNextCall(f1);
24865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgassertEquals(3, f1(true));
25