// Copyright 2022 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: --allow-natives-syntax --maglev --no-always-turbofan

var x = 1;
var do_change = false;

function g() {
  if (do_change) {
    x = 2;
    return 40;
  }
  return 30;
}

function f() {
  return g() + x;
}

%PrepareFunctionForOptimization(f);
assertEquals(31, f());

%OptimizeMaglevOnNextCall(f);
assertEquals(31, f());
assertTrue(isMaglevved(f));

// Trigger a lazy deopt on the next g() call.
do_change = true;
assertEquals(42, f());
assertFalse(isMaglevved(f));
assertUnoptimized(f);
