4c17394d67
Processing StateValues into operands is one of the most costly parts of instruction selection. As it happens, StateValues are shared by many nodes, and so we are unecessarily reprocessing the same StateValues multiple times. This CL introduces caching for the processed StateValues enabling very fast emitting of operands for subsiquent instructions with the same StateValue. The hitrate for the cache is higher than 90% on most optimizations. BUG=v8:9684 Change-Id: I7edcfa1b0d7add16e509f0e2abeda0a8873f5a95 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2756535 Auto-Submit: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Cr-Commit-Position: refs/heads/master@{#73434}
25 lines
519 B
JavaScript
25 lines
519 B
JavaScript
// Copyright 2021 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 --no-lazy-feedback-allocation
|
|
|
|
var bar = 0;
|
|
function foo(outer_arg) {
|
|
var arr = [1];
|
|
var func = function (arg) {
|
|
bar += arg;
|
|
if (outer_arg) {}
|
|
};
|
|
try {
|
|
arr.filter(func);
|
|
} catch (e) {}
|
|
};
|
|
|
|
%PrepareFunctionForOptimization(foo);
|
|
foo();
|
|
foo();
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
bar = {};
|
|
foo();
|