text: load("1d8ada728956c1a3d52d68d1d4d6dd52.js");
  // 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
  
  // For TurboFan, make sure we can eliminate the -0 return value check
  // by recognizing a constant value.
  function gotaconstant(y) { return 15 * y; }
  assertEquals(45, gotaconstant(3));
  gotaconstant(3);
  %OptimizeFunctionOnNextCall(gotaconstant);
  gotaconstant(3);
  
  function gotaconstant_truncated(x, y) { return x * y | 0; }
  assertEquals(45, gotaconstant_truncated(3, 15));
  gotaconstant_truncated(3, 15);
  %OptimizeFunctionOnNextCall(gotaconstant_truncated);
  gotaconstant_truncated(3, 15);
  
  function test(x, y) { return x * y; }
  
  assertEquals(12, test(3, 4));
  assertEquals(16, test(4, 4));
  
  %OptimizeFunctionOnNextCall(test);
  assertEquals(27, test(9, 3));
  
  assertEquals(-0, test(-3, 0));
  assertEquals(-0, test(0, -0));
  
  
  const SMI_MAX = (1 << 29) - 1 + (1 << 29);  // Create without overflowing.
  const SMI_MIN = -SMI_MAX - 1;  // Create without overflowing.
  
  // multiply by 3 to avoid compiler optimizations that convert 2*x to x + x.
  assertEquals(SMI_MAX + SMI_MAX + SMI_MAX, test(SMI_MAX, 3));
  
  // Verify that strength reduction will reduce the -0 check quite a bit
  // if we have a negative integer constant.
  function negtest(y) { return -3 * y; }
  assertEquals(-12, negtest(4));
  assertEquals(-12, negtest(4));
  %OptimizeFunctionOnNextCall(negtest);
  negtest(4);
  