| // 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) { |
| x = x >>> 0; |
| var y = 0 - 2147483648; |
| return x + y; |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| assertEquals(-2147483648, foo(0)); |
| assertEquals(0, foo(2147483648)); |
| assertEquals(2147483647, foo(4294967295)); |
| assertEquals(-2147483648, foo(0)); |
| assertEquals(0, foo(2147483648)); |
| assertEquals(2147483647, foo(4294967295)); |
| %OptimizeFunctionOnNextCall(foo); |
| assertEquals(-2147483648, foo(0)); |
| assertEquals(0, foo(2147483648)); |
| assertEquals(2147483647, foo(4294967295)); |
| assertOptimized(foo); |
| })(); |
| |
| (function() { |
| function foo(x) { |
| x = x >>> 0; |
| var y = 2147483648; |
| return x - y; |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| assertEquals(-2147483648, foo(0)); |
| assertEquals(0, foo(2147483648)); |
| assertEquals(2147483647, foo(4294967295)); |
| assertEquals(-2147483648, foo(0)); |
| assertEquals(0, foo(2147483648)); |
| assertEquals(2147483647, foo(4294967295)); |
| %OptimizeFunctionOnNextCall(foo); |
| assertEquals(-2147483648, foo(0)); |
| assertEquals(0, foo(2147483648)); |
| assertEquals(2147483647, foo(4294967295)); |
| assertOptimized(foo); |
| })(); |
| |
| (function() { |
| function foo(x) { |
| x = x | 0; |
| var y = 2147483648; |
| return x + y; |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(0, foo(-2147483648)); |
| assertEquals(4294967295, foo(2147483647)); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(0, foo(-2147483648)); |
| assertEquals(4294967295, foo(2147483647)); |
| %OptimizeFunctionOnNextCall(foo); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(0, foo(-2147483648)); |
| assertEquals(4294967295, foo(2147483647)); |
| assertOptimized(foo); |
| })(); |
| |
| (function() { |
| function foo(x) { |
| x = x | 0; |
| var y = 0 - 2147483648; |
| return x - y; |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(0, foo(-2147483648)); |
| assertEquals(4294967295, foo(2147483647)); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(0, foo(-2147483648)); |
| assertEquals(4294967295, foo(2147483647)); |
| %OptimizeFunctionOnNextCall(foo); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(0, foo(-2147483648)); |
| assertEquals(4294967295, foo(2147483647)); |
| assertOptimized(foo); |
| })(); |
| |
| (function() { |
| function foo(x) { |
| x = x | 0; |
| var y = -0; |
| return x + y; |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| assertEquals(2147483647, foo(2147483647)); |
| assertEquals(-2147483648, foo(-2147483648)); |
| assertEquals(0, foo(0)); |
| assertEquals(2147483647, foo(2147483647)); |
| assertEquals(-2147483648, foo(-2147483648)); |
| assertEquals(0, foo(0)); |
| %OptimizeFunctionOnNextCall(foo); |
| assertEquals(2147483647, foo(2147483647)); |
| assertEquals(-2147483648, foo(-2147483648)); |
| assertEquals(0, foo(0)); |
| assertOptimized(foo); |
| })(); |
| |
| (function() { |
| function foo(x) { |
| var y = (x < 0) ? 4294967295 : 4294967296; |
| var z = (x > 0) ? 2147483647 : 2147483648; |
| return y - z; |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| assertEquals(2147483647, foo(-1)); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(2147483649, foo(1)); |
| assertEquals(2147483647, foo(-1)); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(2147483649, foo(1)); |
| %OptimizeFunctionOnNextCall(foo); |
| assertEquals(2147483647, foo(-1)); |
| assertEquals(2147483648, foo(0)); |
| assertEquals(2147483649, foo(1)); |
| assertOptimized(foo); |
| })(); |