// Copyright 2016 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 --opt

(function() {
  function foo(x, y) { return x << y; }

  %PrepareFunctionForOptimization(foo);
  foo(1.1, 0.1);
  foo(0.1, 1.1);
  foo(true, false);
  %OptimizeFunctionOnNextCall(foo);
  foo(undefined, 1.1);
  assertOptimized(foo);
  foo(1.1, undefined);
  assertOptimized(foo);
  foo(null, 1.1);
  assertOptimized(foo);
  foo(1.1, null);
  assertOptimized(foo);
  foo(true, 1.1);
  assertOptimized(foo);
  foo(1.1, true);
  assertOptimized(foo);
  foo(false, 1.1);
  assertOptimized(foo);
  foo(1.1, false);
  assertOptimized(foo);
})();

(function() {
  function foo(x, y) { return x >> y; }

  %PrepareFunctionForOptimization(foo);
  foo(1.1, 0.1);
  foo(0.1, 1.1);
  foo(true, false);
  %OptimizeFunctionOnNextCall(foo);
  foo(undefined, 1.1);
  assertOptimized(foo);
  foo(1.1, undefined);
  assertOptimized(foo);
  foo(null, 1.1);
  assertOptimized(foo);
  foo(1.1, null);
  assertOptimized(foo);
  foo(true, 1.1);
  assertOptimized(foo);
  foo(1.1, true);
  assertOptimized(foo);
  foo(false, 1.1);
  assertOptimized(foo);
  foo(1.1, false);
  assertOptimized(foo);
})();

(function() {
  function foo(x, y) { return x >>> y; }

  %PrepareFunctionForOptimization(foo);
  foo(1.1, 0.1);
  foo(0.1, 1.1);
  foo(true, false);
  %OptimizeFunctionOnNextCall(foo);
  foo(undefined, 1.1);
  assertOptimized(foo);
  foo(1.1, undefined);
  assertOptimized(foo);
  foo(null, 1.1);
  assertOptimized(foo);
  foo(1.1, null);
  assertOptimized(foo);
  foo(true, 1.1);
  assertOptimized(foo);
  foo(1.1, true);
  assertOptimized(foo);
  foo(false, 1.1);
  assertOptimized(foo);
  foo(1.1, false);
  assertOptimized(foo);
})();

(function() {
  function foo(x, y) { return x ^ y; }

  %PrepareFunctionForOptimization(foo);
  foo(1.1, 0.1);
  foo(0.1, 1.1);
  foo(true, false);
  %OptimizeFunctionOnNextCall(foo);
  foo(undefined, 1.1);
  assertOptimized(foo);
  foo(1.1, undefined);
  assertOptimized(foo);
  foo(null, 1.1);
  assertOptimized(foo);
  foo(1.1, null);
  assertOptimized(foo);
  foo(true, 1.1);
  assertOptimized(foo);
  foo(1.1, true);
  assertOptimized(foo);
  foo(false, 1.1);
  assertOptimized(foo);
  foo(1.1, false);
  assertOptimized(foo);
})();

(function() {
  function foo(x, y) { return x | y; }

  %PrepareFunctionForOptimization(foo);
  foo(1.1, 0.1);
  foo(0.1, 1.1);
  foo(true, false);
  %OptimizeFunctionOnNextCall(foo);
  foo(undefined, 1.1);
  assertOptimized(foo);
  foo(1.1, undefined);
  assertOptimized(foo);
  foo(null, 1.1);
  assertOptimized(foo);
  foo(1.1, null);
  assertOptimized(foo);
  foo(true, 1.1);
  assertOptimized(foo);
  foo(1.1, true);
  assertOptimized(foo);
  foo(false, 1.1);
  assertOptimized(foo);
  foo(1.1, false);
  assertOptimized(foo);
})();

(function() {
  function foo(x, y) { return x & y; }

  %PrepareFunctionForOptimization(foo);
  foo(1.1, 0.1);
  foo(0.1, 1.1);
  foo(true, false);
  %OptimizeFunctionOnNextCall(foo);
  foo(undefined, 1.1);
  assertOptimized(foo);
  foo(1.1, undefined);
  assertOptimized(foo);
  foo(null, 1.1);
  assertOptimized(foo);
  foo(1.1, null);
  assertOptimized(foo);
  foo(true, 1.1);
  assertOptimized(foo);
  foo(1.1, true);
  assertOptimized(foo);
  foo(false, 1.1);
  assertOptimized(foo);
  foo(1.1, false);
  assertOptimized(foo);
})();
