v8/test
Benedikt Meurer 8ead569818 [turbofan] Unify handling of zeros.
Following up on the earlier work regarding redundant Smi checks in
https://chromium-review.googlesource.com/c/v8/v8/+/1246181, it was
noticed that the handling of the 0 and -0 and how some operations
identify these is not really consistent, but was still rather ad-hoc.
This change tries to unify the handling a bit by making sure that all
number comparisons generally pass truncations that identify zeros, since
for the number comparisons in JavaScript there's no difference between
0 and -0. In the same spirit NumberAbs and NumberToBoolean should also
pass these truncations, since they also don't care about the differences
between 0 and -0.

Adjust NumberCeil, NumberFloor, NumberTrunc, NumberMin and NumberMax
to pass along any incoming kIdentifiesZeros truncation, since these
operations also don't really care whether the inputs can be -0 if the
use nodes don't care.

Also utilize the kIdentifiesZeros truncation for NumberModulus with
Signed32 inputs, because it's kind of common to do something like
`x % 2 === 0`, where it doesn't really matter whether `x % 2` would
eventually produce a negative zero (since that would still be considered
true for the sake of the comparison).

This also adds a whole lot of tests to ensure that not only are these
optimizations correct, but also that we do indeed perform them.

Drive-by-fix: The `NumberAbs(x)` would incorrectly lower to just `x` for
PositiveIntegerOrMinusZeroOrNaN inputs, which was obviously wrong in
case of -0. This was fixed as well, and an appropriate test was added.

The reason for the unification is that with the introduction of Word64
for CheckBounds (which is necessary to support large TypedArrays and
DataViews) we can no longer safely pass Word32 truncations for the
interesting cases, since the index might be outside the Signed32 or
Unsigned32 ranges, but we still identify 0 and -0 for the sake of the
bounds check, and so it's important that this is handled consistently
to not regress performance on TypedArrays and DataViews accesses.

Bug: v8:8015, v8:8178
Change-Id: Ia1d32f1b726754cea1e5793105d9423d84a6393a
Reviewed-on: https://chromium-review.googlesource.com/1246172
Reviewed-by: Sigurd Schneider <sigurds@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#56325}
2018-10-01 17:51:16 +00:00
..
benchmarks [test] Share resource-fetching logic with all d8 test cases 2018-08-29 17:51:43 +00:00
cctest Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
common Fix Arm64 assembler on Android. 2018-09-18 09:43:05 +00:00
debugger Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
fuzzer [wasm] Cleanup and document {NativeModule} mutex. 2018-09-21 12:58:29 +00:00
inspector Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
intl [Intl] add tests for 'quarter' 2018-09-26 20:56:49 +00:00
js-perf-test Revert "[builtins] Add FastCallFunction builtin that elides some checks" 2018-09-14 11:09:08 +00:00
memory [builtins] Add embedded stats to --serialization-statistics 2018-07-05 12:33:26 +00:00
message [class] Make class field initializers breakable in the debugger 2018-09-17 22:25:44 +00:00
mjsunit [turbofan] Unify handling of zeros. 2018-10-01 17:51:16 +00:00
mkgrokdump [cleanup] Use RootIndex instead of int in serializer code 2018-09-26 09:49:40 +00:00
mozilla [test] Add more test suites to Android testing 2018-09-07 09:53:15 +00:00
preparser [test] Share resource-fetching logic with all d8 test cases 2018-08-29 17:51:43 +00:00
test262 Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
torque [torque] Improve formatting in format-torque 2018-09-24 10:08:00 +00:00
unittests [turbofan] First steps in brokerizing JSNativeContextSpecialization. 2018-10-01 15:08:03 +00:00
wasm-spec-tests [wasm] Update spec tests 2018-09-25 08:36:32 +00:00
webkit Remove always-true --harmony-string-trimming runtime flag 2018-10-01 16:19:19 +00:00
BUILD.gn Reland "[test] Add logic to run tests on Android" 2018-08-10 17:56:12 +00:00