Commit 63345e68 authored by Benedikt Meurer's avatar Benedikt Meurer Committed by Commit Bot

[turbofan] Remove CheckSmi from String.fromCodePoint() lowering.

The CheckSmi in String.fromCodePoint() is unnecessary and even leads to
unnecessary deoptimizations, since the CheckBounds already does the
right thing, plus it also handles HeapNumbers (in Signed32 range) and
properly identifies zeros.

Bug: v8:8238
Change-Id: I73bf7a70c3cd718c987f112ceb928188c0534cd5
Reviewed-on: https://chromium-review.googlesource.com/c/1262675Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#56395}
parent 8e5e2c6f
......@@ -5349,9 +5349,6 @@ Reduction JSCallReducer::ReduceStringFromCodePoint(Node* node) {
Node* control = NodeProperties::GetControlInput(node);
Node* input = NodeProperties::GetValueInput(node, 2);
input = effect = graph()->NewNode(simplified()->CheckSmi(p.feedback()),
input, effect, control);
input = effect =
graph()->NewNode(simplified()->CheckBounds(p.feedback()), input,
jsgraph()->Constant(0x10FFFF + 1), effect, control);
......
// 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 --noalways-opt
// Test that String.fromCodePoint() properly identifies zeros.
(function() {
function foo(x) {
return String.fromCodePoint(x);
}
assertEquals("\u0000", foo(0));
assertEquals("\u0000", foo(-0));
%OptimizeFunctionOnNextCall(foo);
assertEquals("\u0000", foo(0));
assertEquals("\u0000", foo(-0));
assertOptimized(foo);
// Now passing anything outside the valid code point
// range should invalidate the optimized code.
assertThrows(_ => foo(-1));
assertUnoptimized(foo);
// And TurboFan should not inline the builtin anymore
// from now on (aka no deoptimization loop).
%OptimizeFunctionOnNextCall(foo);
assertEquals("\u0000", foo(0));
assertEquals("\u0000", foo(-0));
assertThrows(_ => foo(-1));
assertOptimized(foo);
})();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment