aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/compiler/number-modulus.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/number-modulus.js')
-rw-r--r--deps/v8/test/mjsunit/compiler/number-modulus.js230
1 files changed, 0 insertions, 230 deletions
diff --git a/deps/v8/test/mjsunit/compiler/number-modulus.js b/deps/v8/test/mjsunit/compiler/number-modulus.js
index 5f695d1ee5..0925aa0da3 100644
--- a/deps/v8/test/mjsunit/compiler/number-modulus.js
+++ b/deps/v8/test/mjsunit/compiler/number-modulus.js
@@ -4,178 +4,6 @@
// Flags: --allow-natives-syntax --opt --noalways-opt
-// Test that NumberModulus with Number feedback works if only in the
-// end SimplifiedLowering figures out that the inputs to this operation
-// are actually Unsigned32.
-(function() {
- // We need a separately polluted % with NumberOrOddball feedback.
- function bar(x) { return x % 2; }
- bar(undefined); // The % feedback is now NumberOrOddball.
-
- // Now just use the gadget above in a way that only after RETYPE
- // in SimplifiedLowering we find out that the `x` is actually in
- // Unsigned32 range (based on taking the SignedSmall feedback on
- // the + operator).
- function foo(x) {
- x = (x >>> 0) + 1;
- return bar(x) | 0;
- }
-
- assertEquals(0, foo(1));
- assertEquals(1, foo(2));
- assertEquals(0, foo(3));
- assertEquals(1, foo(4));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(0, foo(1));
- assertEquals(1, foo(2));
- assertEquals(0, foo(3));
- assertEquals(1, foo(4));
- assertOptimized(foo);
-})();
-
-// Test that NumberModulus with Number feedback works if only in the
-// end SimplifiedLowering figures out that the inputs to this operation
-// are actually Signed32.
-(function() {
- // We need a separately polluted % with NumberOrOddball feedback.
- function bar(x) { return x % 2; }
- bar(undefined); // The % feedback is now NumberOrOddball.
-
- // Now just use the gadget above in a way that only after RETYPE
- // in SimplifiedLowering we find out that the `x` is actually in
- // Signed32 range (based on taking the SignedSmall feedback on
- // the + operator).
- function foo(x) {
- x = (x | 0) + 1;
- return bar(x) | 0;
- }
-
- assertEquals(0, foo(1));
- assertEquals(1, foo(2));
- assertEquals(0, foo(3));
- assertEquals(1, foo(4));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(0, foo(1));
- assertEquals(1, foo(2));
- assertEquals(0, foo(3));
- assertEquals(1, foo(4));
- assertOptimized(foo);
-})();
-
-// Test that SpeculativeNumberModulus with Number feedback works if
-// only in the end SimplifiedLowering figures out that the inputs to
-// this operation are actually Unsigned32.
-(function() {
- // We need to use an object literal here to make sure that the
- // SpeculativeNumberModulus is not turned into a NumberModulus
- // early during JSTypedLowering.
- function bar(x) { return {x}.x % 2; }
- bar(undefined); // The % feedback is now NumberOrOddball.
-
- // Now just use the gadget above in a way that only after RETYPE
- // in SimplifiedLowering we find out that the `x` is actually in
- // Unsigned32 range (based on taking the SignedSmall feedback on
- // the + operator).
- function foo(x) {
- x = (x >>> 0) + 1;
- return bar(x) | 0;
- }
-
- assertEquals(0, foo(1));
- assertEquals(1, foo(2));
- assertEquals(0, foo(3));
- assertEquals(1, foo(4));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(0, foo(1));
- assertEquals(1, foo(2));
- assertEquals(0, foo(3));
- assertEquals(1, foo(4));
- assertOptimized(foo);
-})();
-
-// Test that SpeculativeNumberModulus with Number feedback works if
-// only in the end SimplifiedLowering figures out that the inputs to
-// this operation are actually Signed32.
-(function() {
- // We need to use an object literal here to make sure that the
- // SpeculativeNumberModulus is not turned into a NumberModulus
- // early during JSTypedLowering.
- function bar(x) { return {x}.x % 2; }
- bar(undefined); // The % feedback is now NumberOrOddball.
-
- // Now just use the gadget above in a way that only after RETYPE
- // in SimplifiedLowering we find out that the `x` is actually in
- // Signed32 range (based on taking the SignedSmall feedback on
- // the + operator).
- function foo(x) {
- x = (x | 0) + 1;
- return bar(x) | 0;
- }
-
- assertEquals(0, foo(1));
- assertEquals(1, foo(2));
- assertEquals(0, foo(3));
- assertEquals(1, foo(4));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(0, foo(1));
- assertEquals(1, foo(2));
- assertEquals(0, foo(3));
- assertEquals(1, foo(4));
- assertOptimized(foo);
-})();
-
-// Test that NumberModulus works in the case where TurboFan
-// can infer that the output is Signed32 \/ MinusZero, and
-// there's a truncation on the result that identifies zeros
-// (via the SpeculativeNumberEqual).
-(function() {
- // We need a separately polluted % with NumberOrOddball feedback.
- function bar(x) { return x % 2; }
- bar(undefined); // The % feedback is now NumberOrOddball.
-
- // Now we just use the gadget above on an `x` that is known
- // to be in Signed32 range and compare it to 0, which passes
- // a truncation that identifies zeros.
- function foo(x) {
- if (bar(x | 0) == 0) return 0;
- return 1;
- }
-
- assertEquals(0, foo(2));
- assertEquals(1, foo(1));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(0, foo(2));
- assertEquals(1, foo(1));
- assertOptimized(foo);
-
- // Now `foo` should stay optimized even if `x % 2` would
- // produce -0, aka when we pass a negative value for `x`.
- assertEquals(0, foo(-2));
- assertEquals(1, foo(-1));
- assertOptimized(foo);
-})();
-
-// Test that CheckedInt32Mod handles the slow-path (when
-// the left hand side is negative) correctly.
-(function() {
- // We need a SpeculativeNumberModulus with SignedSmall feedback.
- function foo(x, y) {
- return x % y;
- }
-
- assertEquals(0, foo(2, 1));
- assertEquals(0, foo(2, 2));
- assertEquals(-1, foo(-3, 2));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(0, foo(2, 1));
- assertEquals(0, foo(2, 2));
- assertEquals(-1, foo(-3, 2));
- assertOptimized(foo);
-
- // Now `foo` should deoptimize if the result is -0.
- assertEquals(-0, foo(-2, 2));
- assertUnoptimized(foo);
-})();
// Test that NumberModulus passes kIdentifiesZero to the
// left hand side input when the result doesn't care about
@@ -196,61 +24,3 @@
assertTrue(foo(0));
assertOptimized(foo);
})();
-
-// Test that NumberModulus passes kIdentifiesZero to the
-// right hand side input, even when the inputs are outside
-// the Signed32 range.
-(function() {
- function foo(x) {
- return (2 ** 32) % (x * -2);
- }
-
- assertEquals(0, foo(1));
- assertEquals(0, foo(1));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(0, foo(1));
-
- // Now `foo` should stay optimized even if `x * -2` would
- // produce -0, aka when we pass a zero value for `x`.
- assertEquals(NaN, foo(0));
- assertOptimized(foo);
-})();
-
-// Test that SpeculativeNumberModulus passes kIdentifiesZero
-// to the right hand side input, even when feedback is consumed.
-(function() {
- function foo(x, y) {
- return (x % (y * -2)) | 0;
- }
-
- assertEquals(0, foo(2, 1));
- assertEquals(-1, foo(-3, 1));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(0, foo(2, 1));
- assertEquals(-1, foo(-3, 1));
- assertOptimized(foo);
-
- // Now `foo` should stay optimized even if `y * -2` would
- // produce -0, aka when we pass a zero value for `y`.
- assertEquals(0, foo(2, 0));
- assertOptimized(foo);
-})();
-
-// Test that SpeculativeNumberModulus passes kIdentifiesZero
-// to the left hand side input, even when feedback is consumed.
-(function() {
- function foo(x, y) {
- return ((x * -2) % y) | 0;
- }
-
- assertEquals(-2, foo(1, 3));
- assertEquals(-2, foo(1, 3));
- %OptimizeFunctionOnNextCall(foo);
- assertEquals(-2, foo(1, 3));
- assertOptimized(foo);
-
- // Now `foo` should stay optimized even if `x * -2` would
- // produce -0, aka when we pass a zero value for `x`.
- assertEquals(0, foo(0, 2));
- assertOptimized(foo);
-})();