a9da0ce735
When lowering a monomorphic load/store, where multiple receiver maps have been recorded, but the action to be performed is the same (i.e. yielding undefined because the property is not found), TurboFan used to ignore the Smi case, leading to a pretty terrible deoptimization loop, as the LOAD_IC/STORE_IC properly recorded that state and thus didn't change it's state. Fixing this issue gives a 18-20% boost on the prettier test of the web-tooling-benchmark, which was suffering a lot from this problem. Bug: v8:6936, v8:6991 Change-Id: Id208ec7129a7f6b190d989bda31f936040393226 Reviewed-on: https://chromium-review.googlesource.com/735342 Reviewed-by: Michael Stanton <mvstanton@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48865}
18 lines
520 B
JavaScript
18 lines
520 B
JavaScript
// Copyright 2017 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
|
|
|
|
function foo(o) { return o.x; }
|
|
|
|
assertEquals(undefined, foo({}));
|
|
assertEquals(undefined, foo(1));
|
|
assertEquals(undefined, foo({}));
|
|
assertEquals(undefined, foo(1));
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
assertEquals(undefined, foo({}));
|
|
assertOptimized(foo);
|
|
assertEquals(undefined, foo(1));
|
|
assertOptimized(foo);
|