392078fb83
This is a reland of 45227ffdb4
Differences:
- Handle one more flags conflict in variants.py.
- Disallow %VerifyType without --concurrent-recompilation.
Original change's description:
> [turbofan] extend type asserts to cover all JS types
>
> Extend type assertions to all types covering JavaScript values.
> This is achieved by allocating type representations on the heap using
> newly defined HeapObject subclasses. To allocate these in the compiler,
> we disable concurrent compilation for the --assert-types flag for now.
>
> Fix two type errors that came up with the existing tests:
> 1. JSCreateKeyValueArray has type Array (i.e., a JSArray) instead of
> OtherObject.
> 2. OperationTyper::NumberToString(Type) can type the result as the
> HeapConstant Factory::zero_string(). However, NumberToString does
> not always produce this string. To avoid regressions, the CL keeps
> the HeapConstant type and changes the runtime and builtin code to
> always produce the canonical "0" string.
>
> A few tests were failing because they check for truncations to work
> and prevent deoptimization. However, AssertType nodes destroy all
> truncations (which is by design), so these tests are incompatible
> and now disabled for the assert_types variant.
>
> Drive-by fix: a few minor Torque issues that came up.
>
> Change-Id: If03b7851f7e6803a2f69edead4fa91231998f764
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3234717
> Reviewed-by: Nico Hartmann <nicohartmann@chromium.org>
> Reviewed-by: Omer Katz <omerkatz@chromium.org>
> Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#77565}
Change-Id: I5b3c6745c6ad349ff8c2b199d9afdf0a9b5a7392
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3247035
Auto-Submit: Tobias Tebbi <tebbi@chromium.org>
Commit-Queue: Nico Hartmann <nicohartmann@chromium.org>
Reviewed-by: Omer Katz <omerkatz@chromium.org>
Reviewed-by: Nico Hartmann <nicohartmann@chromium.org>
Cr-Commit-Position: refs/heads/main@{#77596}
40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
// Copyright 2018 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 --no-assert-types
|
|
|
|
// Test that NumberMin properly passes the kIdentifyZeros truncation.
|
|
(function() {
|
|
function foo(x) {
|
|
if (Math.min(x * -2, -1) == -2) return 0;
|
|
return 1;
|
|
}
|
|
|
|
%PrepareFunctionForOptimization(foo);
|
|
assertEquals(0, foo(1));
|
|
assertEquals(1, foo(2));
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
assertEquals(0, foo(1));
|
|
assertEquals(1, foo(2));
|
|
assertOptimized(foo);
|
|
// Now `foo` should stay optimized even if `x * -2` would produce `-0`.
|
|
assertEquals(1, foo(0));
|
|
assertOptimized(foo);
|
|
})();
|
|
|
|
// Test that NumberMin properly handles 64-bit comparisons.
|
|
(function() {
|
|
function foo(x) {
|
|
x = x|0;
|
|
return Math.min(x - 1, x + 1);
|
|
}
|
|
|
|
%PrepareFunctionForOptimization(foo);
|
|
assertEquals(-Math.pow(2, 31) - 1, foo(-Math.pow(2, 31)));
|
|
assertEquals(Math.pow(2, 31) - 2, foo(Math.pow(2, 31) - 1));
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
assertEquals(-Math.pow(2, 31) - 1, foo(-Math.pow(2, 31)));
|
|
assertEquals(Math.pow(2, 31) - 2, foo(Math.pow(2, 31) - 1));
|
|
})();
|