c509d025c7
This avoids the call to the StringCharCodeAt builtin from within TurboFan optimized code and instead emits a loop that does the character load. This (together with previously reverted CL to the JSCallReducer) almost completely recovers the performance regression caused when we shipped TurboFan. Without untrusted code mitigations the benchmark goes from 580ms to roughly 490ms, and with the patch to the JSCallReducer the time goes down to 280ms, which is very close to what we had with Crankshaft. This also renames the LoadFromString helper method in the EffectControlLinearizer to LoadFromSeqString to make it clear what it does. Bug: v8:7326 Change-Id: I6c77209ae01a3eacbd1e8fd40e4ad842eaf1999a Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Reviewed-on: https://chromium-review.googlesource.com/876102 Commit-Queue: Sigurd Schneider <sigurds@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#50725}
18 lines
583 B
JavaScript
18 lines
583 B
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: --expose-externalize-string --expose-gc --allow-natives-syntax
|
|
|
|
function foo(s) {
|
|
return s.charCodeAt(12);
|
|
}
|
|
|
|
var extern = "internalized dummy";
|
|
extern = "1234567890qiaipppiúöäöáœba"+"jalsdjasldjasdlasjdalsdjasldk";
|
|
externalizeString(extern, true /* force two-byte */);
|
|
assertEquals(97, foo(extern));
|
|
assertEquals(97, foo(extern));
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
assertEquals(97, foo(extern));
|